@eo-sdk/client 11.8.0-rc.1 → 11.8.0-rc.3
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/app/eo-client/dashboard/widgets/signature-statistics-widget/signature-statistics-widget.component.d.ts.map +1 -1
- package/app/eo-framework/app-shell/app-bar/app-search/app-search.component.d.ts.map +1 -1
- package/app/eo-framework/form-elements/datetime-range/datetime-range.component.d.ts.map +1 -1
- package/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.d.ts +78 -23
- package/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.d.ts.map +1 -1
- package/app/eo-framework/form-elements/dynamic-list/dynamic-list.service.d.ts +24 -0
- package/app/eo-framework/form-elements/dynamic-list/dynamic-list.service.d.ts.map +1 -0
- package/app/eo-framework/form-elements/id-reference/id-reference.component.d.ts +6 -0
- package/app/eo-framework/form-elements/id-reference/id-reference.component.d.ts.map +1 -1
- package/app/eo-framework/grid/filters/dynamic-list-filter.component.d.ts +5 -5
- package/app/eo-framework/grid/filters/dynamic-list-filter.component.d.ts.map +1 -1
- package/app/eo-framework/inbox-details/inbox-details.component.d.ts.map +1 -1
- package/app/eo-framework/object-form/object-form-helper.service.d.ts +31 -11
- package/app/eo-framework/object-form/object-form-helper.service.d.ts.map +1 -1
- package/app/eo-framework/ui/eo-dialog/eo-dialog.component.d.ts +7 -0
- package/app/eo-framework/ui/eo-dialog/eo-dialog.component.d.ts.map +1 -1
- package/app/eo-framework/upload-overlay/upload-overlay.component.d.ts +1 -0
- package/app/eo-framework/upload-overlay/upload-overlay.component.d.ts.map +1 -1
- package/assets/_default/i18n/de.json +3 -2
- package/assets/_default/i18n/en.json +7 -6
- package/esm2022/app/eo-client/about-state/about-state.component.mjs +3 -3
- package/esm2022/app/eo-client/dashboard/widgets/signature-statistics-widget/signature-statistics-widget.component.mjs +2 -1
- package/esm2022/app/eo-client/process-state/process-state.component.mjs +1 -1
- package/esm2022/app/eo-client/settings/settings.component.mjs +3 -3
- package/esm2022/app/eo-framework/app-shell/app-bar/app-search/app-search.component.mjs +4 -3
- package/esm2022/app/eo-framework/form-elements/datetime-range/datetime-range.component.mjs +3 -2
- package/esm2022/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.mjs +215 -94
- package/esm2022/app/eo-framework/form-elements/dynamic-list/dynamic-list.service.mjs +39 -0
- package/esm2022/app/eo-framework/form-elements/id-reference/id-reference.component.mjs +19 -10
- package/esm2022/app/eo-framework/form-elements/string/string.component.mjs +2 -2
- package/esm2022/app/eo-framework/grid/filters/dynamic-list-filter.component.mjs +16 -22
- package/esm2022/app/eo-framework/inbox-details/inbox-details.component.mjs +8 -3
- package/esm2022/app/eo-framework/object-form/object-form/form-element/form-element.component.mjs +3 -3
- package/esm2022/app/eo-framework/object-form/object-form/object-form-group/object-form-group.component.mjs +3 -3
- package/esm2022/app/eo-framework/object-form/object-form-edit/object-form-edit.component.mjs +3 -3
- package/esm2022/app/eo-framework/object-form/object-form-helper.service.mjs +43 -16
- package/esm2022/app/eo-framework/ui/eo-dialog/eo-dialog.component.mjs +14 -2
- package/esm2022/app/eo-framework/upload-overlay/upload-overlay.component.mjs +9 -3
- package/esm2022/app/eo-framework-core/agent/agent.service.mjs +3 -3
- package/fesm2022/eo-sdk-client.mjs +523 -318
- package/fesm2022/eo-sdk-client.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -2,7 +2,7 @@ import { DatePipe } from '@angular/common';
|
|
|
2
2
|
import { Injectable } from '@angular/core';
|
|
3
3
|
import { Validators } from '@angular/forms';
|
|
4
4
|
import { RangeValue, SearchService, Utils } from '@eo-sdk/core';
|
|
5
|
-
import { forkJoin, of } from 'rxjs';
|
|
5
|
+
import { BehaviorSubject, forkJoin, of } from 'rxjs';
|
|
6
6
|
import { debounceTime, tap } from 'rxjs/operators';
|
|
7
7
|
import { FormValidation } from './object-form/form-validation/form-validation';
|
|
8
8
|
import { ObjectFormControl } from './object-form/object-form-control';
|
|
@@ -22,8 +22,20 @@ export class ObjectFormHelperService {
|
|
|
22
22
|
this.systemService = systemService;
|
|
23
23
|
this.datePipe = new DatePipe('en');
|
|
24
24
|
this.TEMP_STORAGE_ENTRIES_KEY = 'eo.cmp.objectform.tmpstorage.entries';
|
|
25
|
+
this._latestFormElementChanges = new BehaviorSubject({});
|
|
25
26
|
this._clearTemporaryStorageEntries();
|
|
26
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Getter for retrieving the latest form element changes as an observable.
|
|
30
|
+
*
|
|
31
|
+
* This getter returns an observable that emits the latest changes to the form elements.
|
|
32
|
+
* It allows subscribers to react to changes in the form elements in real-time.
|
|
33
|
+
*
|
|
34
|
+
* @returns {Observable<SearchParams>} - An observable emitting the latest form element changes.
|
|
35
|
+
*/
|
|
36
|
+
get latestFormElementChanges$() {
|
|
37
|
+
return this._latestFormElementChanges.asObservable();
|
|
38
|
+
}
|
|
27
39
|
/**
|
|
28
40
|
* Generates a reactive form based on a form model that may also include form scripts.
|
|
29
41
|
* @param formOptions `ObjectFormOptions` defining the form
|
|
@@ -141,6 +153,34 @@ export class ObjectFormHelperService {
|
|
|
141
153
|
this.getElementValues(extractedData, form, situation || 'EDIT', initialData, isTableRowEditForm);
|
|
142
154
|
return extractedData;
|
|
143
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* Add a reference to a temporary localstorage entry that should be cleared when a
|
|
158
|
+
* new browser session starts. In context of forms this will be used to cleanup the
|
|
159
|
+
* layout state of forms (selected tabs etc.) that are stored locally but should only
|
|
160
|
+
* be pesisted for one browser session.
|
|
161
|
+
* @param storageKey Key of the localstorage item
|
|
162
|
+
*/
|
|
163
|
+
addTemporaryStorageEntry(storageKey) {
|
|
164
|
+
// entries will themselves be stored in localstorage so we can check for entries
|
|
165
|
+
// to be removed once the application starts
|
|
166
|
+
const current = this._getTemporaryStorageEntries();
|
|
167
|
+
if (!current.includes(storageKey))
|
|
168
|
+
localStorage.setItem(this.TEMP_STORAGE_ENTRIES_KEY, JSON.stringify([...current, storageKey]));
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Updates the latest form element changes with the provided value.
|
|
172
|
+
*
|
|
173
|
+
* This method merges the current form element changes with the new value
|
|
174
|
+
* and emits the updated changes to the `_latestFormElementChanges` subject.
|
|
175
|
+
*
|
|
176
|
+
* @param {SearchParams} value - The new form element changes to be merged.
|
|
177
|
+
* @returns {void}
|
|
178
|
+
*/
|
|
179
|
+
updateFormElementChanges(value) {
|
|
180
|
+
const currentChanges = this._latestFormElementChanges.value;
|
|
181
|
+
const updatedChanges = { ...currentChanges, ...value };
|
|
182
|
+
this._latestFormElementChanges.next(updatedChanges);
|
|
183
|
+
}
|
|
144
184
|
// Recursive method to get the values from each form control.
|
|
145
185
|
getElementValues(data, formControl, situation, initialData, isTableRowEditForm) {
|
|
146
186
|
if (!formControl || !formControl.controls) {
|
|
@@ -354,6 +394,7 @@ export class ObjectFormHelperService {
|
|
|
354
394
|
}
|
|
355
395
|
});
|
|
356
396
|
}
|
|
397
|
+
this.updateFormElementChanges(v);
|
|
357
398
|
if (scope.formGenResult.scriptingScope) {
|
|
358
399
|
scope.formGenResult.scriptingScope.modelChanged(v);
|
|
359
400
|
}
|
|
@@ -682,20 +723,6 @@ export class ObjectFormHelperService {
|
|
|
682
723
|
fc.updateValueAndValidity();
|
|
683
724
|
fc.markAsDirty();
|
|
684
725
|
}
|
|
685
|
-
/**
|
|
686
|
-
* Add a reference to a temporary localstorage entry that should be cleared when a
|
|
687
|
-
* new browser session starts. In context of forms this will be used to cleanup the
|
|
688
|
-
* layout state of forms (selected tabs etc.) that are stored locally but should only
|
|
689
|
-
* be pesisted for one browser session.
|
|
690
|
-
* @param storageKey Key of the localstorage item
|
|
691
|
-
*/
|
|
692
|
-
addTemporaryStorageEntry(storageKey) {
|
|
693
|
-
// entries will themselves be stored in localstorage so we can check for entries
|
|
694
|
-
// to be removed once the application starts
|
|
695
|
-
const current = this._getTemporaryStorageEntries();
|
|
696
|
-
if (!current.includes(storageKey))
|
|
697
|
-
localStorage.setItem(this.TEMP_STORAGE_ENTRIES_KEY, JSON.stringify([...current, storageKey]));
|
|
698
|
-
}
|
|
699
726
|
_clearTemporaryStorageEntries() {
|
|
700
727
|
this._getTemporaryStorageEntries().forEach(e => localStorage.removeItem(e));
|
|
701
728
|
localStorage.removeItem(this.TEMP_STORAGE_ENTRIES_KEY);
|
|
@@ -719,4 +746,4 @@ export class ObjectFormHelperService {
|
|
|
719
746
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: ObjectFormHelperService, decorators: [{
|
|
720
747
|
type: Injectable
|
|
721
748
|
}], ctorParameters: () => [{ type: i1.Logger }, { type: i2.ReferenceService }, { type: i1.SearchService }, { type: i3.PluginsService }, { type: i1.SystemService }] });
|
|
722
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWZvcm0taGVscGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9vYmplY3QtZm9ybS9vYmplY3QtZm9ybS1oZWxwZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQWMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFTLFVBQVUsRUFBZ0IsYUFBYSxFQUFpQixLQUFLLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDbkcsT0FBTyxFQUFDLFFBQVEsRUFBYyxFQUFFLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFDLFlBQVksRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUtqRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDN0UsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBRXRFLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDhEQUE4RCxDQUFDOzs7OztBQXlCdEcsTUFBTSxPQUFPLHVCQUF1QjtJQUlsQyxZQUFvQixNQUFjLEVBQ3hCLGdCQUFrQyxFQUNsQyxhQUE0QixFQUM1QixhQUE2QixFQUM3QixhQUE0QjtRQUpsQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ3hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsa0JBQWEsR0FBYixhQUFhLENBQWdCO1FBQzdCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBTjlCLGFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQW91QjlCLDZCQUF3QixHQUFHLHNDQUFzQyxDQUFDO1FBN3RCeEUsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxpQkFBaUIsQ0FDZixXQUE4QixFQUM5QixpQkFBMEMsRUFDMUMsZ0JBQTBCO1FBRTFCLE1BQU0sTUFBTSxHQUFpQjtZQUMzQixNQUFNLEVBQUUsQ0FBQztZQUNULFdBQVc7WUFDWCxnQkFBZ0I7WUFDaEIsaUJBQWlCLEVBQUUsRUFBRTtZQUNyQixhQUFhLEVBQUU7Z0JBQ2IsWUFBWSxFQUFFLEVBQUU7Z0JBQ2hCLFNBQVMsRUFBRSxFQUFFO2dCQUNiLHlCQUF5QixFQUFFLEVBQUU7Z0JBQzdCLGNBQWMsRUFBRSxTQUFTO2dCQUN6QixXQUFXLEVBQUUsRUFBRTtnQkFDZixJQUFJLEVBQUUsSUFBSTthQUNYO1NBQ0YsQ0FBQTtRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQyxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFFdkIsa0VBQWtFO1FBQ2xFLGVBQWU7UUFDZixJQUFJLGNBQXdDLENBQUM7UUFDN0MsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUNqRCxjQUFjLEdBQUcsSUFBSSx3QkFBd0IsQ0FDM0MsU0FBUyxDQUFDLFNBQVMsRUFDbkIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxFQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUMzQixNQUFNLENBQUMsZ0JBQWdCLENBQ3hCLENBQUM7WUFDRixjQUFjLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDakQsQ0FBQztRQUNELE1BQU0sQ0FBQyxhQUFhLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUdyRCxJQUFJLElBQUksR0FBRyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM1RCxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUNELE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUNwRCxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQUlEOzs7Ozs7O09BT0c7SUFDSCxvQkFBb0IsQ0FBQyxPQUFZLEVBQUUsU0FBa0I7UUFFbkQsSUFBSSxXQUFXLENBQUM7UUFDaEIsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUM7Z0JBQ0gsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEMsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMseUNBQXlDLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDNUUsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sV0FBVyxHQUFHLE9BQU8sQ0FBQztRQUN4QixDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELHNDQUFzQztRQUN0QyxJQUFJLE9BQU8sR0FBRyxJQUFJLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLElBQUksYUFBYSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFbkQsT0FBTyxDQUFDLHFCQUFxQixHQUFHO1lBQzlCLFdBQVcsRUFBRSxXQUFXLENBQUMsSUFBSTtZQUM3QixTQUFTLEVBQUUsYUFBYTtTQUN6QixDQUFDO1FBRUYsMERBQTBEO1FBQzFELElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxVQUFVLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDdEcsV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7UUFDRCxpQ0FBaUM7UUFDakMsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDN0MsSUFBSSxXQUFXLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQztZQUN0QyxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUs7WUFDeEIsUUFBUSxFQUFFLGVBQWU7U0FDMUIsRUFBRSxjQUFjLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBRTdELDZGQUE2RjtRQUM3Riw2RUFBNkU7UUFDN0UsSUFBSSxhQUFhLEtBQUssUUFBUSxJQUFJLFdBQVcsQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDN0QsV0FBVyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDbkMsQ0FBQztRQUVELFdBQVcsQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVsRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILGVBQWUsQ0FBQyxJQUFxQixFQUFFLFNBQWlCLEVBQUUsV0FBaUIsRUFBRSxrQkFBNEI7UUFDdkcsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLFNBQVMsSUFBSSxNQUFNLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDakcsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVELDZEQUE2RDtJQUNyRCxnQkFBZ0IsQ0FBQyxJQUFTLEVBQUUsV0FBNEIsRUFBRSxTQUFpQixFQUFFLFdBQWlCLEVBQUUsa0JBQTRCO1FBRWxJLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUMsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLFdBQVcsWUFBWSx3QkFBd0IsRUFBRSxDQUFDO1lBRXBELE1BQU0sRUFBRSxHQUFRLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRXBGLElBQUksRUFBRSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQzdDLDBIQUEwSDtnQkFDMUgsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO29CQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLGNBQWMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUMvRixDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDaEcsQ0FBQztZQUVILENBQUM7aUJBQU0sSUFBSSxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO2dCQUVuQiwrQ0FBK0M7Z0JBQy9DLElBQUksRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUM7b0JBQzVDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUM3RSxFQUFFLENBQUMsY0FBYyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQ3BFLENBQUM7Z0JBRUQsUUFBUSxTQUFTLEVBQUUsQ0FBQztvQkFDbEIsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO3dCQUNkLElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDOzRCQUNqQiw0RUFBNEU7NEJBQzVFLDJDQUEyQzs0QkFDM0MsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0NBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUE7NEJBQzlGLENBQUM7aUNBQU0sQ0FBQztnQ0FDTixJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLGNBQWMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFBOzRCQUM3RixDQUFDO3dCQUNILENBQUM7d0JBQ0QsTUFBTTtvQkFDUixDQUFDO29CQUNELEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQzt3QkFDZCx5REFBeUQ7d0JBQ3pELElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUE7d0JBQzNGLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ1osNkVBQTZFO3dCQUM3RSwwRkFBMEY7d0JBQzFGLDRGQUE0Rjt3QkFDNUYsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLFNBQVMsQ0FBQyxFQUFFLENBQUM7NEJBQ3ZGLHNDQUFzQzs0QkFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTt3QkFDN0YsQ0FBQzt3QkFDRCxNQUFNO29CQUNSLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztpQkFDOUIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUNwQixJQUFJLGdCQUFnQixHQUFvQixXQUFXLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN6RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUM1RixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxrQkFBa0I7UUFDcEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRWpELElBQUksa0JBQWtCLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQy9DLG9EQUFvRDtZQUNwRCxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVc7UUFDNUIsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM3RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNwRixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztZQUN0RCxDQUFDO2lCQUFNLElBQUksS0FBSyxZQUFZLFVBQVUsRUFBRSxDQUFDO2dCQUN2QyxPQUFPLElBQUksVUFBVSxDQUNuQixLQUFLLENBQUMsUUFBUSxFQUNkLEtBQUssQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsRUFDM0UsS0FBSyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUM5RSxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDakMsQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDeEMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1RSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFHRCxnREFBZ0Q7SUFFaEQ7Ozs7OztPQU1HO0lBQ0ssZUFBZSxDQUFDLEtBQW1CLEVBQUUsV0FBNEIsRUFBRSxXQUFnQixFQUFFLE9BQWdCO1FBRTNHLElBQUksSUFBSSxDQUFDO1FBQ1QsSUFBSSxJQUFJLENBQUM7UUFFVCxtQkFBbUI7UUFDbkIsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLGVBQWUsRUFBRSxDQUFDO1lBRTVFLG1DQUFtQztZQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQ3pELE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxHQUFHLElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxZQUFZLEdBQUc7Z0JBQ2xCLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSztnQkFDeEIsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNO2dCQUMxQixJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUk7YUFDdkIsQ0FBQztZQUVGLElBQUksT0FBTyxLQUFLLE1BQU0sSUFBSSxPQUFPLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztZQUNwQyxDQUFDO1lBRUQsS0FBSyxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN2QyxDQUFDO1lBQ0QsSUFBSSxHQUFHLE9BQU8sSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7UUFDN0csQ0FBQzthQUFNLENBQUM7WUFDTixtQkFBbUI7WUFDbkIsc0VBQXNFO1lBQ3RFLHVDQUF1QztZQUN2QyxJQUFJLEdBQUcsSUFBSSx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMscUJBQXFCLEdBQUc7Z0JBQzNCLDZDQUE2QztnQkFDN0MsV0FBVyxFQUFFLFdBQVcsQ0FBQyxJQUFJO2dCQUM3QixTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsU0FBUzthQUNqRCxDQUFDO1lBQ0YsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEtBQUssUUFBUSxJQUFJLFdBQVcsQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3JGLFdBQVcsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQ25DLENBQUM7WUFDRCxvREFBb0Q7WUFDcEQsd0NBQXdDO1lBQ3hDLElBQUksS0FBVSxDQUFDO1lBQ2YsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNyQyx3REFBd0Q7Z0JBQ3hELEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ1gsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDOUIsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlELENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzVCLENBQUM7WUFFRCwwREFBMEQ7WUFDMUQsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLFlBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3pFLFdBQVcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2RixDQUFDO1lBRUQsaUNBQWlDO1lBQ2pDLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO1lBQzNFLElBQUksV0FBVyxHQUFHLElBQUksaUJBQWlCLENBQUM7Z0JBQ3RDLEtBQUssRUFBRSxLQUFLO2dCQUNaLFFBQVEsRUFBRSxlQUFlO2FBQzFCLENBQUMsQ0FBQztZQUVILFdBQVcsQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFDO1lBRXZDLFdBQVcsQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDO1lBQ3pDLEtBQUssQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUM7WUFFakUsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLFlBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLFdBQVcsQ0FBQyxjQUFjLEtBQUssVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDdEgsV0FBVyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxJQUFjLEVBQUUsRUFBRTtvQkFDMUQsV0FBVyxDQUFDLGNBQWMsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUNuRCxDQUFDLENBQUM7Z0JBQ0YsV0FBVyxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLElBQWMsRUFBRSxFQUFFO29CQUNuRSxXQUFXLENBQUMsY0FBYyxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQztnQkFDNUQsQ0FBQyxDQUFDO1lBQ0osQ0FBQztZQUVELElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksV0FBVyxDQUFDLGNBQWMsS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDL0UsV0FBVyxDQUFDLGNBQWMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxVQUFlLEVBQUUsRUFBRTtvQkFDdkQsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO2dCQUMvQyxDQUFDLENBQUM7WUFDSixDQUFDO1lBRUQsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBRSxDQUFDO2dCQUN4QyxXQUFXLENBQUMsY0FBYyxDQUFDLFNBQVMsR0FBRyxDQUFDLFlBQWlCLEVBQUUsRUFBRTtvQkFDM0QsV0FBVyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDO2dCQUNuRCxDQUFDLENBQUM7WUFDSixDQUFDO1lBRUQsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUNqQyxXQUFXLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztZQUMvRCxDQUFDO1lBRUQsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO2dCQUNyQyxXQUFXLENBQUMsY0FBYyxDQUFDLGVBQWUsR0FBRyxDQUFDLGtCQUF5RSxFQUFFLFdBQXNCLEVBQUUsRUFBRTtvQkFDakosV0FBVyxDQUFDLGNBQWMsQ0FBQyxZQUFZLEdBQUcsa0JBQWtCLENBQUM7b0JBQzdELFdBQVcsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLEdBQUcsV0FBVyxDQUFDO2dCQUM3RCxDQUFDLENBQUM7WUFDSixDQUFDO1lBRUQsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3ZELGtFQUFrRTtnQkFDbEUsV0FBVyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUM1Qyx1Q0FBdUM7Z0JBQ3ZDLFdBQVcsQ0FBQyxjQUFjLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUM5QyxDQUFDO1lBRUQsNEJBQTRCO1lBQzVCLElBQUksSUFBSSxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDO1lBQ2xELElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLFdBQVcsQ0FBQyxjQUFjLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUNoRCxDQUFDO1lBRUQsc0VBQXNFO1lBQ3RFLHFDQUFxQztZQUNyQyxLQUFLLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLGNBQWMsQ0FBQztZQUUvRSwrREFBK0Q7WUFDL0Qsc0NBQXNDO1lBQ3RDLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2hHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDM0IsSUFBSSxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQztvQkFDcEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUM5RixJQUFJLENBQUMsRUFBRSxDQUFDOzRCQUNOLFdBQVcsQ0FBQyxjQUFjLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDMUYsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLE9BQU8sV0FBVyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7d0JBQzdDLENBQUM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3ZDLEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckQsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsS0FBSyxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFakUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQy9DLElBQUksR0FBRyxLQUFLLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztRQUNsQyxDQUFDO1FBQ0QsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssV0FBVyxDQUFDLEtBQW1CLEVBQUUsS0FBVSxFQUFFLElBQVM7UUFDNUQsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCx1REFBdUQ7SUFDL0MsaUJBQWlCLENBQUMsS0FBbUIsRUFBRSxRQUFRLEVBQUUsSUFBSTtRQUUzRCxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3pCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFFbEMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ3JELElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNsQixzQ0FBc0M7b0JBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDNUMsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDdkIsQ0FBQztZQUNELElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDaEYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3hELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsOEVBQThFO0lBQzlFLGtDQUFrQztJQUMxQixjQUFjLENBQUMsS0FBbUIsRUFBRSxJQUFJLEVBQUUsT0FBTztRQUV2RCxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN2RCxtREFBbUQ7UUFDckQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssY0FBYyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ3BFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUM7WUFDbEQsQ0FBQztpQkFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssWUFBWSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ3pFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUM7Z0JBQ2hELE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQztZQUNyRixDQUFDO2lCQUFNLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDeEUsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQztZQUNsRCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxZQUFZLENBQUMsV0FBZ0IsRUFBRSxRQUFhO1FBRWxELElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixRQUFRLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDekIsS0FBSyxjQUFjLENBQUMsQ0FBQyxDQUFDO29CQUNwQixJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO3dCQUNqQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzVELENBQUM7eUJBQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUNqQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQy9ELENBQUM7eUJBQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUMvQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzdELENBQUM7b0JBQ0QsTUFBTTtnQkFDUixDQUFDO2dCQUNELEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztvQkFDakIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pHLENBQUM7Z0JBQ0QsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDO29CQUNsQixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTt3QkFDM0YsT0FBTyxLQUFLLENBQUMscUJBQXFCLEtBQUssUUFBUSxDQUFDO29CQUNsRCxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNOLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFTyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU87UUFFN0IsK0RBQStEO1FBQy9ELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3hCLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDN0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDdEUsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLFNBQVMsQ0FBQyxLQUFtQixFQUFFLElBQUksRUFBRSxPQUFPO1FBRWxELElBQUksS0FBSyxDQUFDO1FBQ1YsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdkQsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUM3RCxLQUFLLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ3pELENBQUM7cUJBQU0sQ0FBQztvQkFDTixLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDN0IsQ0FBQztZQUNILENBQUM7aUJBQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUNwQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEgsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDNUQsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4RSxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFFTixJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDdEQsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDbk0sQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsT0FBdUIsRUFBRSxZQUFvQjtRQUNwRSxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU8sZUFBZSxDQUFDLFdBQTRCLEVBQUUsS0FBbUI7UUFDdkUsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixLQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDckMsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQVEsQ0FBQztnQkFDakQsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sS0FBSyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztvQkFDekUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUN2RCxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDMUQsQ0FBQyxDQUFDO29CQUNILE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUNuQyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7O01BS0U7SUFDTSxjQUFjLENBQUMsS0FBbUIsRUFBRSxXQUFnQjtRQUMxRCxJQUFJLGFBQWEsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyRyxnREFBZ0Q7UUFDaEQsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUVELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxLQUFtQixFQUFFLGlCQUEwQztRQUN6RixJQUFJLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFDLEdBQXNCLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUVyRixJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDN0UsMkRBQTJEO1lBQzNELEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7WUFDckQ7O2VBRUc7WUFDSCxLQUFLLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBQ3JELEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7WUFDckQ7O2VBRUc7WUFDSCxLQUFLLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBRS9DOzs7ZUFHRztZQUNILElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUM1RixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztnQkFDdEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEdBQUcsVUFBVSxDQUFDLENBQUM7Z0JBQ3pELGlCQUFpQixDQUFDLGFBQWEsQ0FDN0IsS0FBSyxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQ2xDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFDcEMsVUFBVSxDQUNYLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7Ozs7O1NBU0s7SUFFRyx5QkFBeUIsQ0FBQyxLQUFtQjtRQUNuRCxPQUFPLENBQUMsZUFBZSxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBRWpDLDBCQUEwQjtZQUMxQixJQUFJLEVBQUUsR0FBc0IsS0FBSyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFzQixDQUFDO1lBQ25HLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBRVAsaUNBQWlDO2dCQUNqQyxRQUFRLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDcEIsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO3dCQUNiLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQzs0QkFDbkMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQzt3QkFDNUMsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLEVBQUUsQ0FBQyxjQUFjLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7NEJBQzFDLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7Z0NBQ2pDLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dDQUMvQixFQUFFLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztnQ0FDNUIsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDOzRCQUNuQixDQUFDO3dCQUNILENBQUM7d0JBQ0QsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQ3ZDLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7d0JBQ2hCLElBQUksRUFBRSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDOzRCQUNuRCxFQUFFLENBQUMsY0FBYyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDOzRCQUM3Qyx1QkFBdUI7NEJBQ3ZCLDRHQUE0Rzs0QkFDNUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUM5SSx1RkFBdUY7NEJBQ3ZGLGlCQUFpQjs0QkFDakIsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDOzRCQUNuQixFQUFFLENBQUMsc0JBQXNCLEVBQUUsQ0FBQzt3QkFDOUIsQ0FBQzt3QkFDRCxNQUFNO29CQUNSLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO3dCQUNoQixFQUFFLENBQUMsY0FBYyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO3dCQUM3QyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFLENBQUM7NEJBQzdCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3QkFDZixDQUFDOzZCQUFNLENBQUM7NEJBQ04sRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUNkLENBQUM7d0JBQ0QsTUFBTTtvQkFDUixDQUFDO29CQUNELEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQzt3QkFDYixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDOzRCQUNoRixFQUFFLENBQUMsY0FBYyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDOzRCQUMxQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7NEJBQ25CLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO3dCQUM5QixDQUFDO3dCQUNELE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxtREFBbUQ7b0JBQ25ELEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQzt3QkFDakIsRUFBRSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQzt3QkFDOUMsTUFBTTtvQkFDUixDQUFDO29CQUNELGtEQUFrRDtvQkFDbEQsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO3dCQUNoQixFQUFFLENBQUMsY0FBYyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO3dCQUM3QyxNQUFNO29CQUNSLENBQUM7b0JBQ0QsMENBQTBDO29CQUMxQyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7d0JBQ2pCLEVBQUUsQ0FBQyxjQUFjLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7d0JBQzlDLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCw0Q0FBNEM7b0JBQzVDLEtBQUssYUFBYSxDQUFDLENBQUMsQ0FBQzt3QkFDbkIsRUFBRSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQzt3QkFDaEQsTUFBTTtvQkFDUixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFBO0lBQ0gsQ0FBQztJQUVPLHdCQUF3QixDQUFDLEVBQUUsRUFBRSxNQUFNO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDL0IsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7UUFDMUMsdUVBQXVFO1FBQ3ZFLFFBQVEsVUFBVSxFQUFFLENBQUM7WUFDbkIsS0FBSyxjQUFjLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUN6RCxFQUFFLENBQUMsY0FBYyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7Z0JBQ2pDLENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU07WUFDUixDQUFDO1lBQ0QsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQzFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRyxDQUFDO2dCQUNELE1BQU07WUFDUixDQUFDO1lBQ0QsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNiLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO2dCQUM3QixFQUFFLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3JDLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxjQUFjLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZLEVBQUUsQ0FBQzt3QkFDekQsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDaEMsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDMUMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO29CQUNiLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7d0JBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFOzRCQUNqQyxJQUFJLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0NBQzNCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ25FLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQ0FDTixJQUFJLENBQUMsRUFBRSxDQUFDO3dDQUNOLE9BQU8sQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29DQUM3QixDQUFDO3lDQUFNLENBQUM7d0NBQ04sT0FBTyxPQUFPLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxDQUFDO29DQUNoQyxDQUFDO2dDQUNILENBQUMsQ0FBQyxDQUNILENBQUMsQ0FBQzs0QkFDTCxDQUFDO3dCQUNILENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO29CQUNILFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNwRSxDQUFDO2dCQUNELE1BQU07WUFDUixDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxRQUFRO1FBQ3BDLEVBQUUsQ0FBQyxjQUFjLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDbkMsRUFBRSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDNUIsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFJRDs7Ozs7O09BTUc7SUFDSCx3QkFBd0IsQ0FBQyxVQUFrQjtRQUN6QyxnRkFBZ0Y7UUFDaEYsNENBQTRDO1FBQzVDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ25ELElBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUNoQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQy9GLENBQUM7SUFFTyw2QkFBNkI7UUFDbkMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVFLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVPLDJCQUEyQjtRQUNqQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUM7WUFDSCxNQUFNLE9BQU8sR0FBYSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztZQUMxRixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO2dCQUFFLEdBQUcsR0FBRyxPQUFPLENBQUM7UUFDNUMsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2xCLENBQUM7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLE1BQU0sNEJBQTRCLENBQUMsQ0FBQztRQUMvRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7OEdBdHdCVSx1QkFBdUI7a0hBQXZCLHVCQUF1Qjs7MkZBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGF0ZVBpcGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtWYWxpZGF0b3JGbiwgVmFsaWRhdG9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtMb2dnZXIsIFJhbmdlVmFsdWUsIFNlYXJjaEZpbHRlciwgU2VhcmNoU2VydmljZSwgU3lzdGVtU2VydmljZSwgVXRpbHN9IGZyb20gJ0Blby1zZGsvY29yZSc7XG5pbXBvcnQge2ZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtQbHVnaW5zU2VydmljZX0gZnJvbSAnLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvYXBpL3BsdWdpbnMuc2VydmljZSc7XG5pbXBvcnQge1JlZmVyZW5jZVNlcnZpY2V9IGZyb20gJy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL3JlZmVyZW5jZXMvcmVmZXJlbmNlLnNlcnZpY2UnO1xuaW1wb3J0IHtPYmplY3RGb3JtT3B0aW9uc30gZnJvbSAnLi9vYmplY3QtZm9ybS1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQge0Zvcm1WYWxpZGF0aW9ufSBmcm9tICcuL29iamVjdC1mb3JtL2Zvcm0tdmFsaWRhdGlvbi9mb3JtLXZhbGlkYXRpb24nO1xuaW1wb3J0IHtPYmplY3RGb3JtQ29udHJvbH0gZnJvbSAnLi9vYmplY3QtZm9ybS9vYmplY3QtZm9ybS1jb250cm9sJztcbmltcG9ydCB7T2JqZWN0Rm9ybUNvbnRyb2xXcmFwcGVyfSBmcm9tICcuL29iamVjdC1mb3JtL29iamVjdC1mb3JtLWNvbnRyb2wtd3JhcHBlcic7XG5pbXBvcnQge09iamVjdEZvcm1Hcm91cH0gZnJvbSAnLi9vYmplY3QtZm9ybS9vYmplY3QtZm9ybS1ncm91cC5tb2RlbCc7XG5pbXBvcnQge09iamVjdEZvcm1TY3JpcHRTZXJ2aWNlfSBmcm9tICcuL29iamVjdC1mb3JtL29iamVjdC1mb3JtLXNjcmlwdC9vYmplY3QtZm9ybS1zY3JpcHQuc2VydmljZSc7XG5pbXBvcnQge09iamVjdEZvcm1TY3JpcHRpbmdTY29wZX0gZnJvbSAnLi9vYmplY3QtZm9ybS9vYmplY3QtZm9ybS1zY3JpcHQvb2JqZWN0LWZvcm0tc2NyaXB0aW5nLXNjb3BlJztcbmltcG9ydCB7T2JqZWN0Rm9ybU1vZGVsfSBmcm9tICcuL29iamVjdC1mb3JtL29iamVjdC1mb3JtLm1vZGVsJztcblxuZXhwb3J0IGludGVyZmFjZSBGb3JtR2VuU2NvcGUge1xuICBnQ291bnQ6IG51bWJlcjtcbiAgZm9ybU9wdGlvbnM6IE9iamVjdEZvcm1PcHRpb25zO1xuICBpc0lubmVyVGFibGVGb3JtOiBib29sZWFuO1xuICBpbml0aWFsVmFsaWRhdG9yczoge1tuYW1lOiBzdHJpbmddOiBWYWxpZGF0b3JGbiB8IG51bGx9O1xuICBmb3JtR2VuUmVzdWx0OiBGb3JtR2VuUmVzdWx0O1xufVxuZXhwb3J0IGludGVyZmFjZSBGb3JtR2VuUmVzdWx0IHtcbiAgLy8gRm9ybSBjb250cm9scyBnZW5lcmF0ZWQgZnJvbSB0aGUgbW9kZWwgYXMgJ1F1aWNrIGFjY2VzcyBvYmplY3QnXG4gIC8vIEZvcm0gZWxlbWVudHMgbmFtZSBpcyBrZXkgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZm9ybSBjb250cm9sIGl0c2VsZlxuICBmb3JtQ29udHJvbHM6IHtbbmFtZTogc3RyaW5nXTogT2JqZWN0Rm9ybUNvbnRyb2x9O1xuICBmb3JtTW9kZWw6IGFueSxcbiAgLy8gU3Vic2NyaXB0aW9ucyB0byB2YWx1ZSBjaGFuZ2VzIG9mIHRoZSBnZW5lcmF0ZWQgZm9ybSBjb250cm9sc1xuICAvLyBZb3Ugc2hvdWxkIGFsd2F5cyB1bnN1YnNjcmliZSBmcm9tIGFsbCBvZiB0aGVtIHdoZW4gY29uc3VtaW5nXG4gIC8vIGNvbXBvbmVudCBpcyBkZXN0cm95ZWRcbiAgY29udHJvbFZhbHVlU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW107XG4gIHNjcmlwdGluZ1Njb3BlOiBPYmplY3RGb3JtU2NyaXB0aW5nU2NvcGU7XG4gIHNjcmlwdE1vZGVsOiB7W25hbWU6IHN0cmluZ106IGFueX07XG4gIGZvcm06IE9iamVjdEZvcm1Hcm91cDtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE9iamVjdEZvcm1IZWxwZXJTZXJ2aWNlIHtcblxuICBwcml2YXRlIGRhdGVQaXBlID0gbmV3IERhdGVQaXBlKCdlbicpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9nZ2VyOiBMb2dnZXIsXG4gICAgcHJpdmF0ZSByZWZlcmVuY2VTZXJ2aWNlOiBSZWZlcmVuY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogU2VhcmNoU2VydmljZSxcbiAgICBwcml2YXRlIHBsdWdpblNlcnZpY2U6IFBsdWdpbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3lzdGVtU2VydmljZTogU3lzdGVtU2VydmljZSkge1xuICAgIHRoaXMuX2NsZWFyVGVtcG9yYXJ5U3RvcmFnZUVudHJpZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSByZWFjdGl2ZSBmb3JtIGJhc2VkIG9uIGEgZm9ybSBtb2RlbCB0aGF0IG1heSBhbHNvIGluY2x1ZGUgZm9ybSBzY3JpcHRzLlxuICAgKiBAcGFyYW0gZm9ybU9wdGlvbnMgYE9iamVjdEZvcm1PcHRpb25zYCBkZWZpbmluZyB0aGUgZm9ybVxuICAgKiBAcGFyYW0gZm9ybVNjcmlwdFNlcnZpY2UgSW5zdGFuY2Ugb2YgYSBgT2JqZWN0Rm9ybVNjcmlwdFNlcnZpY2VgLiBUaGlzIHNlcnZpY2UgaXMgc3VwcG9zZWQgdG8gYmVcbiAgICogc2NvcGVkIHRvIHRoZSBjb21wb25lbnQgcmVuZGVyaW5nIHRoZSBmb3JtIChwcm92aWRlcnMgYXJyYXkgaW4gY29tcG9uZW50IGRlY29yYXRvcikuXG4gICAqIEBwYXJhbSBpc0lubmVyVGFibGVGb3JtIHdoZXRoZXIgb3Igbm90IHRoZSBmb3JtIGlzIHBhcnQgb2YgYW5vdGhlciBmb3JtIChhcyBpcyB3aXRoIHRhYmxlIGVkaXQgZm9ybXMpXG4gICAqIEByZXR1cm5zIEFuIGBGb3JtR2VuUmVzdWx0YCBvYmplY3RcbiAgICovXG4gIGJ1aWxkUmVhY3RpdmVGb3JtKFxuICAgIGZvcm1PcHRpb25zOiBPYmplY3RGb3JtT3B0aW9ucyxcbiAgICBmb3JtU2NyaXB0U2VydmljZTogT2JqZWN0Rm9ybVNjcmlwdFNlcnZpY2UsXG4gICAgaXNJbm5lclRhYmxlRm9ybT86IGJvb2xlYW4pOiBGb3JtR2VuUmVzdWx0IHtcblxuICAgIGNvbnN0IF9zY29wZTogRm9ybUdlblNjb3BlID0ge1xuICAgICAgZ0NvdW50OiAwLFxuICAgICAgZm9ybU9wdGlvbnMsXG4gICAgICBpc0lubmVyVGFibGVGb3JtLFxuICAgICAgaW5pdGlhbFZhbGlkYXRvcnM6IHt9LFxuICAgICAgZm9ybUdlblJlc3VsdDoge1xuICAgICAgICBmb3JtQ29udHJvbHM6IHt9LFxuICAgICAgICBmb3JtTW9kZWw6IHt9LFxuICAgICAgICBjb250cm9sVmFsdWVTdWJzY3JpcHRpb25zOiBbXSxcbiAgICAgICAgc2NyaXB0aW5nU2NvcGU6IHVuZGVmaW5lZCxcbiAgICAgICAgc2NyaXB0TW9kZWw6IHt9LFxuICAgICAgICBmb3JtOiBudWxsXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZm9ybU1vZGVsID0gdGhpcy5fZGF0YVRvRm9ybShfc2NvcGUsIGZvcm1PcHRpb25zLmZvcm1Nb2RlbCwgZm9ybU9wdGlvbnMuZGF0YSk7XG4gICAgX3Njb3BlLmZvcm1HZW5SZXN1bHQuZm9ybU1vZGVsID0gZm9ybU1vZGVsO1xuICAgIGlmICghZm9ybU1vZGVsKSByZXR1cm47XG5cbiAgICAvLyBpZiBhIHNjcmlwdCBpcyBhdmFpbGFibGUsIHdlJ2xsIGluaXQgdGhlIGZvcm0gc2NyaXB0aW5nIGZvciB0aGVcbiAgICAvLyBjdXJyZW50IGZvcm1cbiAgICBsZXQgc2NyaXB0aW5nU2NvcGU6IE9iamVjdEZvcm1TY3JpcHRpbmdTY29wZTtcbiAgICBpZiAoX3Njb3BlLmlzSW5uZXJUYWJsZUZvcm0gfHwgKGZvcm1Nb2RlbC5zY3JpcHQgJiYgZm9ybU1vZGVsLnNjcmlwdC5sZW5ndGggPiAwKSkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ2FkZGluZyBmb3JtIHNjcmlwdGluZyBzY29wZScpO1xuICAgICAgc2NyaXB0aW5nU2NvcGUgPSBuZXcgT2JqZWN0Rm9ybVNjcmlwdGluZ1Njb3BlKFxuICAgICAgICBmb3JtTW9kZWwuc2l0dWF0aW9uLFxuICAgICAgICB0aGlzLl9nZXRTY3JpcHRpbmdNb2RlbENoYW5nZWQoX3Njb3BlKSxcbiAgICAgICAgdGhpcy5wbHVnaW5TZXJ2aWNlLmdldEFwaSgpLFxuICAgICAgICBfc2NvcGUuaXNJbm5lclRhYmxlRm9ybVxuICAgICAgKTtcbiAgICAgIHNjcmlwdGluZ1Njb3BlLm9iamVjdElkID0gZm9ybU9wdGlvbnMub2JqZWN0SWQ7XG4gICAgfVxuICAgIF9zY29wZS5mb3JtR2VuUmVzdWx0LnNjcmlwdGluZ1Njb3BlID0gc2NyaXB0aW5nU2NvcGU7XG5cblxuICAgIGxldCBmb3JtID0gbmV3IE9iamVjdEZvcm1Hcm91cCh7fSk7XG4gICAgaWYgKGZvcm1Nb2RlbC5lbGVtZW50c1swXSAmJiBmb3JtTW9kZWwuZWxlbWVudHNbMF0uZWxlbWVudHMpIHtcbiAgICAgIHRoaXMuX2FkZEZvcm1Db250cm9sKF9zY29wZSwgZm9ybSwgZm9ybU1vZGVsLmVsZW1lbnRzWzBdLCAnY29yZScpO1xuICAgIH1cbiAgICBpZiAoZm9ybU1vZGVsLmVsZW1lbnRzWzFdICYmIGZvcm1Nb2RlbC5lbGVtZW50c1sxXS5lbGVtZW50cykge1xuICAgICAgdGhpcy5fYWRkRm9ybUNvbnRyb2woX3Njb3BlLCBmb3JtLCBmb3JtTW9kZWwuZWxlbWVudHNbMV0sICdkYXRhJyk7XG4gICAgfVxuICAgIF9zY29wZS5mb3JtR2VuUmVzdWx0LmZvcm0gPSBmb3JtO1xuICAgIHRoaXMuX2luaXRWYWxpZGF0b3JzKF9zY29wZS5mb3JtR2VuUmVzdWx0LmZvcm0sIF9zY29wZSk7XG4gICAgdGhpcy5faW5pdFNjcmlwdGluZ1Njb3BlKF9zY29wZSwgZm9ybVNjcmlwdFNlcnZpY2UpO1xuICAgIHJldHVybiBfc2NvcGUuZm9ybUdlblJlc3VsdDtcbiAgfVxuXG5cblxuICAvKipcbiAgICogQ29udmVydHMgYSBmb3JtIGVsZW1lbnQgb2JqZWN0IHRvIGFuIE9iamVjdEZvcm1Db250cm9sV3JhcHBlciB3aGljaCB0aGVuIGNhbiBiZSB1c2VkIHRvXG4gICAqIHJlbmRlciBhIGZyb20gY29udHJvbC4gUmVzdWx0IGNhbiBiZSB1c2VkIGFzIGlucHV0IGZvciBGb3JtRWxlbWVudENvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIGVsZW1lbnQgLSB0aGUgZWxlbWVudCBvYmplY3Qgb3IgYSBqc29uIHN0cmluZ1xuICAgKiBAcGFyYW0gc2l0dWF0aW9uIC0gb3B0aW9uYWwgcHJvcGVydHkgdG8gc2V0IHVwIGEgZm9ybSBzaXR1YXRpb24gZm9yIHRoZSBjb250cm9sIChkZWZhdWx0IGlzIEVESVQpXG4gICAqIEByZXR1cm4gdGhlIGNvbnZlcnRlZCBPYmplY3RGb3JtQ29udHJvbFdyYXBwZXIgb3IgbnVsbCBpbiBjYXNlIG9mIGFuIGVycm9yXG4gICAqL1xuICBlbGVtZW50VG9Gb3JtQ29udHJvbChlbGVtZW50OiBhbnksIHNpdHVhdGlvbj86IHN0cmluZyk6IE9iamVjdEZvcm1Db250cm9sV3JhcHBlciB7XG5cbiAgICBsZXQgZm9ybUVsZW1lbnQ7XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9ybUVsZW1lbnQgPSBKU09OLnBhcnNlKGVsZW1lbnQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHBhcnNlIGZvcm0gZWxlbWVudCBmcm9tIGpzb24gJywgZm9ybUVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3JtRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgaWYgKCFmb3JtRWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHRoZSBPYmplY3RGb3JtQ29udHJvbFdyYXBwZXJcbiAgICBsZXQgd3JhcHBlciA9IG5ldyBPYmplY3RGb3JtQ29udHJvbFdyYXBwZXIoe30pO1xuICAgIGxldCBmb3JtU2l0dWF0aW9uID0gc2l0dWF0aW9uID8gc2l0dWF0aW9uIDogJ0VESVQnO1xuXG4gICAgd3JhcHBlci5fZW9Gb3JtQ29udHJvbFdyYXBwZXIgPSB7XG4gICAgICBjb250cm9sTmFtZTogZm9ybUVsZW1lbnQubmFtZSxcbiAgICAgIHNpdHVhdGlvbjogZm9ybVNpdHVhdGlvblxuICAgIH07XG5cbiAgICAvLyBmb3IgY29kZXN5c3RlbSBlbGVtZW50cyBhZGQgZW50cmllcyBpZiBub3QgeWV0IHByb3ZpZGVkXG4gICAgaWYgKGZvcm1FbGVtZW50LnR5cGUgPT09ICdDT0RFU1lTVEVNJyAmJiAoIWZvcm1FbGVtZW50LmNvZGVzeXN0ZW0gfHwgIWZvcm1FbGVtZW50LmNvZGVzeXN0ZW0uZW50cmllcykpIHtcbiAgICAgIGZvcm1FbGVtZW50LmNvZGVzeXN0ZW0gPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0Q29kZXN5c3RlbShmb3JtRWxlbWVudC5jb2Rlc3lzdGVtLmlkKTtcbiAgICB9XG4gICAgLy8gY3JlYXRlIHRoZSBhY3R1YWwgZm9ybSBjb250cm9sXG4gICAgbGV0IGNvbnRyb2xEaXNhYmxlZCA9ICEhZm9ybUVsZW1lbnQucmVhZG9ubHk7XG4gICAgbGV0IGZvcm1Db250cm9sID0gbmV3IE9iamVjdEZvcm1Db250cm9sKHtcbiAgICAgIHZhbHVlOiBmb3JtRWxlbWVudC52YWx1ZSxcbiAgICAgIGRpc2FibGVkOiBjb250cm9sRGlzYWJsZWRcbiAgICB9LCBGb3JtVmFsaWRhdGlvbi5nZXRWYWxpZGF0b3JzKGZvcm1FbGVtZW50LCBmb3JtU2l0dWF0aW9uKSk7XG5cbiAgICAvLyBGb3JtIGVsZW1lbnRzIGluIFNFQVJDSCBzaXR1YXRpb24gbWF5IGFycml2ZSB3aXRoIGEgdmFsdWUgc2V0IHRvIE5VTEwgKGV4cGxpY2l0IHNlYXJjaCBmb3JcbiAgICAvLyBmaWVsZHMgdGhhdCBhcmUgTk9UIHNldCkuIEluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIHByZXBhcmUgdGhlIGZvcm0gY29udHJvbFxuICAgIGlmIChmb3JtU2l0dWF0aW9uID09PSAnU0VBUkNIJyAmJiBmb3JtRWxlbWVudC52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgZm9ybUVsZW1lbnQuaXNOb3RTZXRWYWx1ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQgPSBmb3JtRWxlbWVudDtcbiAgICB3cmFwcGVyLmFkZENvbnRyb2woZm9ybUVsZW1lbnQubmFtZSwgZm9ybUNvbnRyb2wpO1xuXG4gICAgcmV0dXJuIHdyYXBwZXI7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBkYXRhIGZyb20gYW4gb2JqZWN0IGZvcm0gYmFzZWQgb24gc2l0dWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gZm9ybSAtIGZvcm0gdG8gZXh0cmFjdCBkYXRhIGZyb21cbiAgICogQHBhcmFtIHNpdHVhdGlvbiAtIGZvcm0gc2l0dWF0aW9uXG4gICAqIEBwYXJhbSBbaW5pdGlhbERhdGFdIC0gb3B0aW9uYWwgZm9ybSBkYXRhIHRvIG1hdGNoIHRoZSBjdXJyZW50IHZhbHVlcyBhZ2FpbnN0XG4gICAqIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGVkaXRpZyBpbmRleGRhdGEgKEVESVQgc2l0dWF0aW9uKSwgYmVjYXVzZSB3ZSBoYXZlIHRvIGNvbXBhcmUgbmV3IHZhbHVlc1xuICAgKiBhZ2FpbnN0IHRoZSBpbml0aWFsIHZhbHVlcy4gSWYgYSBwcm9wZXJ0eSB0aGF0IGlzIGNvbnRhaW5lZCBpbiB0aGUgZm9ybXMgaW5pdGlhbCBkYXRhIGlzIHJlbW92ZWRcbiAgICogKGUuZy4gc2V0IHRvIG51bGwpIHRoZW4gd2UgaGF2ZSB0byBzZXQgdGhpcyBudWxsIHZhbHVlLCBiZWNhdXNlIG90aGVyd2lzZSB0aGUgc2VydmVyIHdvdWxkXG4gICAqIGlnbm9yZSB0aGUgY2hhbmdlcy5cbiAgICogQHBhcmFtIGlzVGFibGVSb3dFZGl0Rm9ybSBGbGFnIGluZGljYXRpbmcgdGhhdCB0aGUgcHJvdmlkZWQgZm9ybSBpcyBhbiBpbmxpbmUgZm9ybSB1c2VkIGJ5XG4gICAqIGEgZm9ybXMgdGFibGUgZWxlbWVudCBmb3IgZWRpdGluZyByb3dzLiBUaG9zZSBuZWVkIGEgc3BlY2lhbCBoYW5kbGluZy5cbiAgICogQHJldHVybiBleHRyYWN0ZWQgZGF0YSBhcyBvYmplY3RcbiAgICovXG4gIGV4dHJhY3RGb3JtRGF0YShmb3JtOiBPYmplY3RGb3JtR3JvdXAsIHNpdHVhdGlvbjogc3RyaW5nLCBpbml0aWFsRGF0YT86IGFueSwgaXNUYWJsZVJvd0VkaXRGb3JtPzogYm9vbGVhbikge1xuICAgIGxldCBleHRyYWN0ZWREYXRhID0ge307XG4gICAgdGhpcy5nZXRFbGVtZW50VmFsdWVzKGV4dHJhY3RlZERhdGEsIGZvcm0sIHNpdHVhdGlvbiB8fCAnRURJVCcsIGluaXRpYWxEYXRhLCBpc1RhYmxlUm93RWRpdEZvcm0pO1xuICAgIHJldHVybiBleHRyYWN0ZWREYXRhO1xuICB9XG5cbiAgLy8gUmVjdXJzaXZlIG1ldGhvZCB0byBnZXQgdGhlIHZhbHVlcyBmcm9tIGVhY2ggZm9ybSBjb250cm9sLlxuICBwcml2YXRlIGdldEVsZW1lbnRWYWx1ZXMoZGF0YTogYW55LCBmb3JtQ29udHJvbDogT2JqZWN0Rm9ybU1vZGVsLCBzaXR1YXRpb246IHN0cmluZywgaW5pdGlhbERhdGE/OiBhbnksIGlzVGFibGVSb3dFZGl0Rm9ybT86IGJvb2xlYW4pIHtcblxuICAgIGlmICghZm9ybUNvbnRyb2wgfHwgIWZvcm1Db250cm9sLmNvbnRyb2xzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZvcm1Db250cm9sIGluc3RhbmNlb2YgT2JqZWN0Rm9ybUNvbnRyb2xXcmFwcGVyKSB7XG5cbiAgICAgIGNvbnN0IGZjOiBhbnkgPSBmb3JtQ29udHJvbC5jb250cm9sc1tmb3JtQ29udHJvbC5fZW9Gb3JtQ29udHJvbFdyYXBwZXIuY29udHJvbE5hbWVdO1xuXG4gICAgICBpZiAoZmMuX2VvRm9ybUVsZW1lbnQuaXNOb3RTZXRWYWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAvLyBmb3JtIGVsZW1lbnRzIG1heSBleHBsaWNpdGx5IHNldCB0byBoYXZlIE5VTEwgdmFsdWUgKGUuZy4gZnJvbSBTZWFyY2ggZm9ybSBpZiB2YWx1ZXMgYXJlIHJlcXVlc3RlZCB0aGF0IGhhdmUgbm8gdmFsdWVzKVxuICAgICAgICBpZiAoaXNUYWJsZVJvd0VkaXRGb3JtKSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhVmFsdWUoZmMuX2VvRm9ybUVsZW1lbnQubmFtZSwgbnVsbCwgZGF0YSwgZmMuX2VvRm9ybUVsZW1lbnQsIGlzVGFibGVSb3dFZGl0Rm9ybSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhVmFsdWUoZmMuX2VvRm9ybUVsZW1lbnQucW5hbWUsIG51bGwsIGRhdGEsIGZjLl9lb0Zvcm1FbGVtZW50LCBpc1RhYmxlUm93RWRpdEZvcm0pO1xuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSBpZiAoZmMudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdmFsID0gZmMudmFsdWU7XG5cbiAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgbWV0YSBkYXRhIGFyZSBhbHNvIHVwIHRvIGRhdGVcbiAgICAgICAgaWYgKGZjLl9lb0Zvcm1FbGVtZW50LnR5cGUgPT09ICdDT0RFU1lTVEVNJykge1xuICAgICAgICAgIGNvbnN0IGNzID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldENvZGVzeXN0ZW0oZmMuX2VvRm9ybUVsZW1lbnQuY29kZXN5c3RlbS5pZCk7XG4gICAgICAgICAgZmMuX2VvRm9ybUVsZW1lbnQuZGF0YU1ldGEgPSBjcy5lbnRyaWVzLmZpbmQoZSA9PiBlLmRhdGEgPT09IHZhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKHNpdHVhdGlvbikge1xuICAgICAgICAgIGNhc2UgJ1NFQVJDSCc6IHtcbiAgICAgICAgICAgIGlmICh2YWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gcm93IGVkaXRpbmcgZm9ybXMgdXNlIHRoZSBuYW1lIGluc3RlYWQgb2YgdGhlIHFuYW1lIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZVxuICAgICAgICAgICAgICAvLyB0YWJsZXMgZ3JpZCBpc24ndCBhYmxlIHRvIG1hcCB0aGUgZmllbGRzXG4gICAgICAgICAgICAgIGlmICghaXNUYWJsZVJvd0VkaXRGb3JtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhVmFsdWUoZmMuX2VvRm9ybUVsZW1lbnQucW5hbWUsIHZhbCwgZGF0YSwgZmMuX2VvRm9ybUVsZW1lbnQsIGlzVGFibGVSb3dFZGl0Rm9ybSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFWYWx1ZShmYy5fZW9Gb3JtRWxlbWVudC5uYW1lLCB2YWwsIGRhdGEsIGZjLl9lb0Zvcm1FbGVtZW50LCBpc1RhYmxlUm93RWRpdEZvcm0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdDUkVBVEUnOiB7XG4gICAgICAgICAgICAvLyBhbHNvIGFkZCBOVUxMIHZhbHVlcyAob3ZlcnJpZGUgZXhpc3RpbmcgZGVmYXVsdHZhbHVlcylcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YVZhbHVlKGZjLl9lb0Zvcm1FbGVtZW50Lm5hbWUsIHZhbCwgZGF0YSwgZmMuX2VvRm9ybUVsZW1lbnQsIGlzVGFibGVSb3dFZGl0Rm9ybSlcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdFRElUJzoge1xuICAgICAgICAgICAgLy8gaW4gZWRpdCBzaXR1YXRpb24gd2UgaGF2ZSB0byBjb21wYXJlIG5ldyB2YWx1ZXMgYWdhaW5zdCB0aGUgaW5pdGlhbCB2YWx1ZXNcbiAgICAgICAgICAgIC8vIElmIGEgcHJvcGVydHkgdGhhdCBpcyBjb250YWluZWQgaW4gdGhlIGZvcm1zIGluaXRpYWwgZGF0YSBpcyByZW1vdmVkIChlLmcuIHNldCB0byBudWxsKVxuICAgICAgICAgICAgLy8gdGhlbiB3ZSBoYXZlIHRvIHNldCB0aGlzIG51bGwgdmFsdWUsIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBzZXJ2ZXIgd2lsbCBpZ25vcmUgdGhlIGNoYW5nZXNcbiAgICAgICAgICAgIGlmICh2YWwgIT09IG51bGwgfHwgKGluaXRpYWxEYXRhICYmIGluaXRpYWxEYXRhW2ZjLl9lb0Zvcm1FbGVtZW50Lm5hbWVdICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgIC8vIGRhdGFbZmMuX2VvRm9ybUVsZW1lbnQubmFtZV0gPSB2YWw7XG4gICAgICAgICAgICAgIHRoaXMuc2V0RGF0YVZhbHVlKGZjLl9lb0Zvcm1FbGVtZW50Lm5hbWUsIHZhbCwgZGF0YSwgZmMuX2VvRm9ybUVsZW1lbnQsIGlzVGFibGVSb3dFZGl0Rm9ybSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBPYmplY3Qua2V5cyhmb3JtQ29udHJvbC5jb250cm9scylcbiAgICAgICAgLmZvckVhY2goY29udHJvbEtleSA9PiB7XG4gICAgICAgICAgbGV0IGZvcm1Db250cm9sS2V5ZWQgPSA8T2JqZWN0Rm9ybUdyb3VwPmZvcm1Db250cm9sLmNvbnRyb2xzW2NvbnRyb2xLZXldO1xuICAgICAgICAgIHRoaXMuZ2V0RWxlbWVudFZhbHVlcyhkYXRhLCBmb3JtQ29udHJvbEtleWVkLCBzaXR1YXRpb24sIGluaXRpYWxEYXRhLCBpc1RhYmxlUm93RWRpdEZvcm0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldERhdGFWYWx1ZShrZXksIHZhbHVlLCBkYXRhLCBmb3JtRWxlbWVudCwgaXNUYWJsZVJvd0VkaXRGb3JtKSB7XG4gICAgZGF0YVtrZXldID0gdGhpcy5mb3JtYXRWYWx1ZSh2YWx1ZSwgZm9ybUVsZW1lbnQpO1xuXG4gICAgaWYgKGlzVGFibGVSb3dFZGl0Rm9ybSAmJiBmb3JtRWxlbWVudC5kYXRhTWV0YSkge1xuICAgICAgLy8gaW5uZXIgdGFibGVzIG5lZWQgdG8gc2V0IHVwIHRoZSBtZXRhIGRhdGEgYXMgd2VsbFxuICAgICAgZGF0YVtrZXkgKyAnX21ldGEnXSA9IGZvcm1FbGVtZW50LmRhdGFNZXRhO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdFZhbHVlKHZhbHVlLCBmb3JtRWxlbWVudCkge1xuICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnREFURVRJTUUnICYmICFmb3JtRWxlbWVudC53aXRodGltZSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUuZ2V0VGltZSgpKSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCAneXl5eS1NTS1kZCcpO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJhbmdlVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZVZhbHVlKFxuICAgICAgICAgIHZhbHVlLm9wZXJhdG9yLFxuICAgICAgICAgIHZhbHVlLmZpcnN0VmFsdWUgJiYgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUuZmlyc3RWYWx1ZSwgJ3l5eXktTU0tZGQnKSxcbiAgICAgICAgICB2YWx1ZS5zZWNvbmRWYWx1ZSAmJiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZS5zZWNvbmRWYWx1ZSwgJ3l5eXktTU0tZGQnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnVEFCTEUnKSB7XG4gICAgICAoZm9ybUVsZW1lbnQuZWxlbWVudHMgfHwgW10pLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAodmFsdWUgfHwgW10pLmZvckVhY2godiA9PiB2W2VsLm5hbWVdID0gdGhpcy5mb3JtYXRWYWx1ZSh2W2VsLm5hbWVdLCBlbCkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG5cbiAgLy8gRnVuY3Rpb25zIGludm9sdmVkIGluIGJ1aWxkaW5nIGFuIG9iamVjdCBmb3JtXG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZSBtZXRob2QgYWRkaW5nIGEgbmV3IFVudHlwZWRGb3JtQ29udHJvbCAoZ3JvdXAgb3IgY29udHJvbCkgdG8gYSBwYXJlbnQgZm9ybSBncm91cFxuICAgKlxuICAgKiBAcGFyYW0gcGFyZW50R3JvdXAgLSB0aGUgcGFyZW50IGdyb3VwIHRvIGFkZCB0aGUgY29udHJvbCB0b1xuICAgKiBAcGFyYW0gZm9ybUVsZW1lbnQgLSB0aGUgZW5haW8gZm9ybSBtb2RlbCBlbGVtZW50IHRvIGNyZWF0ZSB0aGUgY2hpbGQgY29udHJvbCBmcm9tXG4gICAqIEBwYXJhbSBbdXNlTmFtZV0gLSB1c2UgdGhpcyBuYW1lIGluc3RlYWQgb2YgdGhlIG9uZSBmcm9tIHRoZSBtb2RlbFxuICAgKi9cbiAgcHJpdmF0ZSBfYWRkRm9ybUNvbnRyb2woc2NvcGU6IEZvcm1HZW5TY29wZSwgcGFyZW50R3JvdXA6IE9iamVjdEZvcm1Hcm91cCwgZm9ybUVsZW1lbnQ6IGFueSwgdXNlTmFtZT86IHN0cmluZykge1xuXG4gICAgbGV0IGN0cmw7XG4gICAgbGV0IG5hbWU7XG5cbiAgICAvLyBhZGQgYSBmb3JtIGdyb3VwXG4gICAgaWYgKGZvcm1FbGVtZW50LnR5cGUgPT09ICdvMm1Hcm91cCcgfHwgZm9ybUVsZW1lbnQudHlwZSA9PT0gJ28ybUdyb3VwU3RhY2snKSB7XG5cbiAgICAgIC8vIGRvIG5vdCBhZGQgZ3JvdXBzIHRoYXQgYXJlIGVtcHR5XG4gICAgICBpZiAoIWZvcm1FbGVtZW50LmVsZW1lbnRzIHx8IGZvcm1FbGVtZW50LmVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRm91bmQgZW1wdHkgZm9ybSBncm91cCcsIGZvcm1FbGVtZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjdHJsID0gbmV3IE9iamVjdEZvcm1Hcm91cCh7fSk7XG4gICAgICBjdHJsLl9lb0Zvcm1Hcm91cCA9IHtcbiAgICAgICAgbGFiZWw6IGZvcm1FbGVtZW50LmxhYmVsLFxuICAgICAgICBsYXlvdXQ6IGZvcm1FbGVtZW50LmxheW91dCxcbiAgICAgICAgdHlwZTogZm9ybUVsZW1lbnQudHlwZVxuICAgICAgfTtcblxuICAgICAgaWYgKHVzZU5hbWUgPT09ICdjb3JlJyB8fCB1c2VOYW1lID09PSAnZGF0YScpIHtcbiAgICAgICAgY3RybC5fZW9Gb3JtR3JvdXAubGFiZWwgPSB1c2VOYW1lO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBlIG9mIGZvcm1FbGVtZW50LmVsZW1lbnRzKSB7XG4gICAgICAgIHRoaXMuX2FkZEZvcm1Db250cm9sKHNjb3BlLCBjdHJsLCBlKTtcbiAgICAgIH1cbiAgICAgIG5hbWUgPSB1c2VOYW1lIHx8ICdmZycgKyBzY29wZS5nQ291bnQrKztcbiAgICAgIGN0cmwuX2VvRm9ybUdyb3VwLmlkID0gYCR7c2NvcGUuZm9ybU9wdGlvbnMubGF5b3V0U2V0dGluZ3NJRCB8fCBzY29wZS5mb3JtT3B0aW9ucy5mb3JtTW9kZWwubmFtZX0uJHtuYW1lfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGFkZCBmb3JtIGNvbnRyb2xcbiAgICAgIC8vIFRvIGJlIGFibGUgdG8gaW50ZWdyYXRlIHJlY3Vyc2l2ZSBmb3JtIGNvbnRyb2xzIGludG8gdGhlIG1haW4gZm9ybSxcbiAgICAgIC8vIHdlIGhhdmUgdG8gd3JhcCB0aGVtIGluIGEgZm9ybSBncm91cFxuICAgICAgY3RybCA9IG5ldyBPYmplY3RGb3JtQ29udHJvbFdyYXBwZXIoe30pO1xuICAgICAgY3RybC5fZW9Gb3JtQ29udHJvbFdyYXBwZXIgPSB7XG4gICAgICAgIC8vIHRoZSBuYW1lIG9mIHRoZSB3cmFwcGVkIFVudHlwZWRGb3JtQ29udHJvbFxuICAgICAgICBjb250cm9sTmFtZTogZm9ybUVsZW1lbnQubmFtZSxcbiAgICAgICAgc2l0dWF0aW9uOiBzY29wZS5mb3JtT3B0aW9ucy5mb3JtTW9kZWwuc2l0dWF0aW9uXG4gICAgICB9O1xuICAgICAgaWYgKHNjb3BlLmZvcm1PcHRpb25zLmZvcm1Nb2RlbC5zaXR1YXRpb24gPT09ICdTRUFSQ0gnICYmIGZvcm1FbGVtZW50LnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIGZvcm1FbGVtZW50LmlzTm90U2V0VmFsdWUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgLy8gZG8gbm90IHNldCBhIHJlZmVyZW5jZSBhcyB0aGUgZm9ybSBjb250cm9scyB2YWx1ZVxuICAgICAgLy8gb3RoZXJ3aXNlIHdlIGNvdWxkIG5vdCByZXNldCB0aGUgZm9ybVxuICAgICAgbGV0IHZhbHVlOiBhbnk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShmb3JtRWxlbWVudC52YWx1ZSkpIHtcbiAgICAgICAgLy8gY29weSBieSB2YWx1ZSBmb3IgYXJyYXlzIG9mIG9iamVjdHMgKGUuZy4gdGFibGUgZGF0YSlcbiAgICAgICAgdmFsdWUgPSBbXTtcbiAgICAgICAgZm9ybUVsZW1lbnQudmFsdWUuZm9yRWFjaCgobykgPT4ge1xuICAgICAgICAgIHZhbHVlLnB1c2goVXRpbHMuZm9ybURhdGFQYXJzZShVdGlscy5mb3JtRGF0YVN0cmluZ2lmeShvKSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gZm9ybUVsZW1lbnQudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGZvciBjb2Rlc3lzdGVtIGVsZW1lbnRzIGFkZCBlbnRyaWVzIGlmIG5vdCB5ZXQgcHJvdmlkZWRcbiAgICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnQ09ERVNZU1RFTScgJiYgIWZvcm1FbGVtZW50LmNvZGVzeXN0ZW0uZW50cmllcykge1xuICAgICAgICBmb3JtRWxlbWVudC5jb2Rlc3lzdGVtID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldENvZGVzeXN0ZW0oZm9ybUVsZW1lbnQuY29kZXN5c3RlbS5pZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGNyZWF0ZSB0aGUgYWN0dWFsIGZvcm0gY29udHJvbFxuICAgICAgbGV0IGNvbnRyb2xEaXNhYmxlZCA9IHNjb3BlLmZvcm1PcHRpb25zLmRpc2FibGVkIHx8ICEhZm9ybUVsZW1lbnQucmVhZG9ubHk7XG4gICAgICBsZXQgZm9ybUNvbnRyb2wgPSBuZXcgT2JqZWN0Rm9ybUNvbnRyb2woe1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGRpc2FibGVkOiBjb250cm9sRGlzYWJsZWRcbiAgICAgIH0pO1xuXG4gICAgICBmb3JtRWxlbWVudC5yZWFkb25seSA9IGNvbnRyb2xEaXNhYmxlZDtcblxuICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQgPSBmb3JtRWxlbWVudDtcbiAgICAgIHNjb3BlLmZvcm1HZW5SZXN1bHQuZm9ybUNvbnRyb2xzW2Zvcm1FbGVtZW50Lm5hbWVdID0gZm9ybUNvbnRyb2w7XG5cbiAgICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnQ09ERVNZU1RFTScgfHwgKGZvcm1FbGVtZW50LnR5cGUgPT09ICdTVFJJTkcnICYmIGZvcm1FbGVtZW50LmNsYXNzaWZpY2F0aW9uID09PSAnc2VsZWN0b3InKSkge1xuICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5hcHBseUZpbHRlciA9IChmdW5jOiBGdW5jdGlvbikgPT4ge1xuICAgICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LmZpbHRlckZ1bmN0aW9uID0gZnVuYztcbiAgICAgICAgfTtcbiAgICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQuYXBwbHlEaXNhYmxpbmdGaWx0ZXIgPSAoZnVuYzogRnVuY3Rpb24pID0+IHtcbiAgICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5kaXNhYmxpbmdGaWx0ZXJGdW5jdGlvbiA9IGZ1bmM7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnU1RSSU5HJyAmJiBmb3JtRWxlbWVudC5jbGFzc2lmaWNhdGlvbiA9PT0gJ3NlbGVjdG9yJykge1xuICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5zZXRMaXN0ID0gKGxpc3RPYmplY3Q6IGFueSkgPT4ge1xuICAgICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50Lmxpc3QgPSBsaXN0T2JqZWN0O1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybUVsZW1lbnQudHlwZSA9PT0gJ09SR0FOSVpBVElPTicpIHtcbiAgICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQuc2V0RmlsdGVyID0gKGZpbHRlck9iamVjdDogYW55KSA9PiB7XG4gICAgICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQuZmlsdGVyID0gZmlsdGVyT2JqZWN0O1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybUVsZW1lbnQudHlwZSA9PT0gJ1RBQkxFJykge1xuICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5vYmplY3QgPSBzY29wZS5mb3JtT3B0aW9ucy5vYmplY3Q7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnUkVGRVJFTkNFJykge1xuICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5zZXRRdWVyeUZpbHRlcnMgPSAocXVlcnlGaWx0ZXJzT2JqZWN0OiB7W2ZpZWxkUW5hbWU6IHN0cmluZ106IHtvOiBzdHJpbmcsIHYxOiBhbnksIHYyOiBhbnl9fSwgb2JqZWN0VHlwZXM/OiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LnF1ZXJ5RmlsdGVycyA9IHF1ZXJ5RmlsdGVyc09iamVjdDtcbiAgICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5vYmplY3RUeXBlc0ZpbHRlciA9IG9iamVjdFR5cGVzO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoc2NvcGUuZm9ybU9wdGlvbnMuZm9ybU1vZGVsLnNpdHVhdGlvbiA9PT0gJ1NFQVJDSCcpIHtcbiAgICAgICAgLy8gaW4gc2VhcmNoIHNpdHVhdGlvbiBldmVuIHJlYWRvbmx5IGZpZWxkcyBzaG91bGQgYmUgZWRpdGFibGUgLi4uXG4gICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LnJlYWRvbmx5ID0gZmFsc2U7XG4gICAgICAgIC8vIC4uLiBhbmQgcmVxdWlyZWQgbWFrZXMgbm8gc2Vuc2UgaGVyZVxuICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5yZXF1aXJlZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyByZW1vdmUgZW1wdHkgZGVzY3JpcHRpb25zXG4gICAgICBsZXQgZGVzYyA9IGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LmRlc2NyaXB0aW9uO1xuICAgICAgaWYgKGRlc2MgJiYgZGVzYy50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LmRlc2NyaXB0aW9uID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gYWRkIHRoZSBmb3JtIGVsZW1lbnQgdG8gdGhlIHNjcmlwdCBtb2RlbCB0aGF0IHdpbGwgYmUgaW5qZWN0ZWQgaW50b1xuICAgICAgLy8gdGhlIGZvcm1zIHNjcmlwdGluZyBzY29wZSBsYXRlciBvblxuICAgICAgc2NvcGUuZm9ybUdlblJlc3VsdC5zY3JpcHRNb2RlbFtmb3JtRWxlbWVudC5uYW1lXSA9IGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50O1xuXG4gICAgICAvLyBhcHBseSBjaGFuZ2UgbGlzdGVuZXIgdG8gdGhlIGZvcm0gY29udHJvbCwgdGhhdCB3aWxsIHRyaWdnZXJcbiAgICAgIC8vIHRoZSBmb3JtIGVsZW1lbnRzIG9uQ2hhbmdlIGxpc3RlbmVyXG4gICAgICBsZXQgY29udHJvbFdhdGNoID0gY3RybC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoZm9ybUVsZW1lbnQudHlwZSA9PT0gJ1RBQkxFJyA/IDAgOiA1MDApKTtcbiAgICAgIGNvbnRyb2xXYXRjaC5zdWJzY3JpYmUoKHYpID0+IHtcbiAgICAgICAgaWYgKGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LnR5cGUgPT09ICdSRUZFUkVOQ0UnKSB7XG4gICAgICAgICAgdGhpcy5fZ2V0RGF0YU1ldGEoZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQsIHZbZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQubmFtZV0pLnN1YnNjcmliZShtID0+IHtcbiAgICAgICAgICAgIGlmIChtKSB7XG4gICAgICAgICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LmRhdGFNZXRhID0gZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQubXVsdGlzZWxlY3QgPyBtIDogbVswXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5kYXRhTWV0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2NvcGUuZm9ybUdlblJlc3VsdC5zY3JpcHRpbmdTY29wZSkge1xuICAgICAgICAgIHNjb3BlLmZvcm1HZW5SZXN1bHQuc2NyaXB0aW5nU2NvcGUubW9kZWxDaGFuZ2VkKHYpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHNjb3BlLmZvcm1HZW5SZXN1bHQuY29udHJvbFZhbHVlU3Vic2NyaXB0aW9ucy5wdXNoKGNvbnRyb2xXYXRjaCk7XG5cbiAgICAgIGN0cmwuYWRkQ29udHJvbChmb3JtRWxlbWVudC5uYW1lLCBmb3JtQ29udHJvbCk7XG4gICAgICBuYW1lID0gJ2ZnXycgKyBmb3JtRWxlbWVudC5uYW1lO1xuICAgIH1cbiAgICBwYXJlbnRHcm91cC5hZGRDb250cm9sKG5hbWUsIGN0cmwpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlIGRhdGEgaW50byBhIGZvcm0gbW9kZWwuXG4gICAqXG4gICAqIEBwYXJhbSBtb2RlbCAtIGZvcm0gbW9kZWxcbiAgICogQHBhcmFtIGRhdGEgLSBkYXRhIG9iamVjdCBvciBhcnJheSBvZiBTZWFyY2hGaWx0ZXIgb2JqZWN0cyBpbiBjYXNlIG9mIGEgc2VhcmNoIGZvcm1cbiAgICovXG4gIHByaXZhdGUgX2RhdGFUb0Zvcm0oc2NvcGU6IEZvcm1HZW5TY29wZSwgbW9kZWw6IGFueSwgZGF0YTogYW55KSB7XG4gICAgaWYgKG1vZGVsICYmIGRhdGEpIHtcbiAgICAgIHRoaXMuX3NldEVsZW1lbnRWYWx1ZXMoc2NvcGUsIG1vZGVsLmVsZW1lbnRzLCBkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIG1vZGVsO1xuICB9XG5cbiAgLy8gcmVjdXJzaXZlIG1ldGhvZCBmb3IgYWRkaW5nIHZhbHVlcyB0byBtb2RlbCBlbGVtZW50c1xuICBwcml2YXRlIF9zZXRFbGVtZW50VmFsdWVzKHNjb3BlOiBGb3JtR2VuU2NvcGUsIGVsZW1lbnRzLCBkYXRhKSB7XG5cbiAgICBlbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgaWYgKHRoaXMuX2hhc1ZhbHVlKGRhdGEsIGVsZW1lbnQpKSB7XG5cbiAgICAgICAgZWxlbWVudC52YWx1ZSA9IHRoaXMuX2dldFZhbHVlKHNjb3BlLCBkYXRhLCBlbGVtZW50KTtcbiAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgICAvLyBhZGQgbWV0YSBkYXRhIGZvciBzb21lIG9mIHRoZSB0eXBlc1xuICAgICAgICAgIHRoaXMuX2ZldGNoTWV0YURhdGEoc2NvcGUsIGRhdGEsIGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgZWxlbWVudC52YWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChlbGVtZW50LnR5cGUgIT09ICdUQUJMRScgJiYgZWxlbWVudC5lbGVtZW50cyAmJiBlbGVtZW50LmVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5fc2V0RWxlbWVudFZhbHVlcyhzY29wZSwgZWxlbWVudC5lbGVtZW50cywgZGF0YSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBpbiBzb21lIGNhc2VzIHJlcXVpcmVkIG1ldGEgZGF0YSBtYXkgbm90IGJlIGF2YWlsYWJsZSBvbiB0aGUgZWxlbWVudCBpdHNlbGZcbiAgLy8gc28gdGhleSBoYXZlIHRvIGJlIGZldGNoZWQgYW5kIGFkZGVkIHRvIHRoZSBlbGVtZW50IGZvciB0aGUgZm9ybSB0byBiZSBhYmxlXG4gIC8vIHRvIHJlbmRlciB0aGUgZWxlbWVudCBjb3JyZWN0bHlcbiAgcHJpdmF0ZSBfZmV0Y2hNZXRhRGF0YShzY29wZTogRm9ybUdlblNjb3BlLCBkYXRhLCBlbGVtZW50KSB7XG5cbiAgICBpZiAoc2NvcGUuZm9ybU9wdGlvbnMuZm9ybU1vZGVsLnNpdHVhdGlvbiA9PT0gJ1NFQVJDSCcpIHtcbiAgICAgIC8vIHRvZG86IGhvdyB0byBmZXRjaCBtZXRhIGRhdGEgaW4gc2VhcmNoIHNpdHVhdGlvblxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZWxlbWVudC50eXBlID09PSAnT1JHQU5JWkFUSU9OJyAmJiBkYXRhW2VsZW1lbnQubmFtZSArICdfbWV0YSddKSB7XG4gICAgICAgIGVsZW1lbnQuZGF0YU1ldGEgPSBkYXRhW2VsZW1lbnQubmFtZSArICdfbWV0YSddO1xuICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnR5cGUgPT09ICdDT0RFU1lTVEVNJyAmJiBkYXRhW2VsZW1lbnQubmFtZSArICdfbWV0YSddKSB7XG4gICAgICAgIGVsZW1lbnQuZGF0YU1ldGEgPSBkYXRhW2VsZW1lbnQubmFtZSArICdfbWV0YSddO1xuICAgICAgICBlbGVtZW50LmRlZmF1bHRyZXByZXNlbnRhdGlvbiA9IGRhdGFbZWxlbWVudC5uYW1lICsgJ19tZXRhJ10uZGVmYXVsdHJlcHJlc2VudGF0aW9uO1xuICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnR5cGUgPT09ICdSRUZFUkVOQ0UnICYmIGRhdGFbZWxlbWVudC5uYW1lICsgJ19tZXRhJ10pIHtcbiAgICAgICAgZWxlbWVudC5kYXRhTWV0YSA9IGRhdGFbZWxlbWVudC5uYW1lICsgJ19tZXRhJ107XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0RGF0YU1ldGEoZm9ybUVsZW1lbnQ6IGFueSwgbmV3VmFsdWU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG5cbiAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgIHN3aXRjaCAoZm9ybUVsZW1lbnQudHlwZSkge1xuICAgICAgICBjYXNlICdPUkdBTklaQVRJT04nOiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uT2JqZWN0KG5ld1ZhbHVlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5ld1ZhbHVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3lzdGVtU2VydmljZS5nZXRPcmdhbml6YXRpb25PYmplY3QobmV3VmFsdWVbMF0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmV3VmFsdWUubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3lzdGVtU2VydmljZS5nZXRPcmdhbml6YXRpb25PYmplY3RzKG5ld1ZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnUkVGRVJFTkNFJzoge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZVNlcnZpY2UuZmV0Y2hJRFJlZmVyZW5jZU1ldGFEYXRhKEFycmF5LmlzQXJyYXkobmV3VmFsdWUpID8gbmV3VmFsdWUgOiBbbmV3VmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdDT0RFU1lTVEVNJzoge1xuICAgICAgICAgIHJldHVybiBvZih0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0Q29kZXN5c3RlbShmb3JtRWxlbWVudC5jb2Rlc3lzdGVtLmlkKS5lbnRyaWVzLmZpbmQoKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZW50cnkuZGVmYXVsdHJlcHJlc2VudGF0aW9uID09PSBuZXdWYWx1ZTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9mKG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFzVmFsdWUoZGF0YSwgZWxlbWVudCkge1xuXG4gICAgLy8gZGlmZmVyIGJldHdlZW4gYXJyYXkgb2YgU2VhcmNoRmlsdGVycyBhbmQgYSBmb3JtIGRhdGEgb2JqZWN0XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdUQUJMRScpIHtcbiAgICAgICAgcmV0dXJuICEhKGRhdGEuZmluZCgoZmlsdGVyKSA9PiBmaWx0ZXIucHJvcGVydHkuc3RhcnRzV2l0aChlbGVtZW50LnFuYW1lKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICEhKGRhdGEuZmluZCgoZmlsdGVyKSA9PiBmaWx0ZXIucHJvcGVydHkgPT09IGVsZW1lbnQucW5hbWUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRhdGEuaGFzT3duUHJvcGVydHkoZWxlbWVudC5uYW1lKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXRWYWx1ZShzY29wZTogRm9ybUdlblNjb3BlLCBkYXRhLCBlbGVtZW50KSB7XG5cbiAgICBsZXQgdmFsdWU7XG4gICAgaWYgKHNjb3BlLmZvcm1PcHRpb25zLmZvcm1Nb2RlbC5zaXR1YXRpb24gPT09ICdTRUFSQ0gnKSB7XG4gICAgICBpZiAoc2NvcGUuaXNJbm5lclRhYmxlRm9ybSkge1xuICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSAnREFURVRJTUUnIHx8IGVsZW1lbnQudHlwZSA9PT0gJ05VTUJFUicpIHtcbiAgICAgICAgICB2YWx1ZSA9IFNlYXJjaFNlcnZpY2UudG9SYW5nZVZhbHVlKGRhdGFbZWxlbWVudC5uYW1lXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUgPSBkYXRhW2VsZW1lbnQubmFtZV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC50eXBlID09PSAnVEFCTEUnKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnRhYmxlRmlsdGVyc1RvRWxlbWVudFZhbHVlKHRoaXMuX2dldFRhYmxlRmlsdGVycyhkYXRhLCBlbGVtZW50LnFuYW1lKSwgZWxlbWVudC5lbGVtZW50cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBkYXRhLmZpbmQoZiA9PiBmLnByb3BlcnR5ID09PSBlbGVtZW50LnFuYW1lKTtcbiAgICAgICAgdmFsdWUgPSB0aGlzLnNlYXJjaFNlcnZpY2UuZmlsdGVyVG9FbGVtZW50VmFsdWUoZmlsdGVyLCBlbGVtZW50LnR5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG5cbiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdEQVRFVElNRScgJiYgZGF0YVtlbGVtZW50Lm5hbWVdKSB7XG4gICAgICAgIHZhbHVlID0gbmV3IERhdGUoYCR7ZGF0YVtlbGVtZW50Lm5hbWVdfSR7KHR5cGVvZiBkYXRhW2VsZW1lbnQubmFtZV0gPT09ICdzdHJpbmcnID8gZGF0YVtlbGVtZW50Lm5hbWVdLmluZGV4T2YoJ1QnKSA6IGRhdGFbZWxlbWVudC5uYW1lXS50b0lTT1N0cmluZygpLmluZGV4T2YoJ1QnKSkgIT09IC0xID8gJycgOiAnVDAwOjAwOjAwJ31gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gZGF0YVtlbGVtZW50Lm5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9nZXRUYWJsZUZpbHRlcnMoZmlsdGVyczogU2VhcmNoRmlsdGVyW10sIHByb3BlcnR5TmFtZTogc3RyaW5nKTogU2VhcmNoRmlsdGVyW10ge1xuICAgIHJldHVybiBmaWx0ZXJzLmZpbHRlcihmID0+IGYucHJvcGVydHkuc3RhcnRzV2l0aChwcm9wZXJ0eU5hbWUgKyAnLicpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRWYWxpZGF0b3JzKGZvcm1Db250cm9sOiBPYmplY3RGb3JtR3JvdXAsIHNjb3BlOiBGb3JtR2VuU2NvcGUpIHtcbiAgICBpZiAoZm9ybUNvbnRyb2wpIHtcbiAgICAgIGZvciAobGV0IGtleSBpbiBmb3JtQ29udHJvbC5jb250cm9scykge1xuICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUNvbnRyb2wuY29udHJvbHNba2V5XSBhcyBhbnk7XG4gICAgICAgIGlmIChjb250cm9sLmNvbnRyb2xzKSB7XG4gICAgICAgICAgdGhpcy5faW5pdFZhbGlkYXRvcnMoY29udHJvbCwgc2NvcGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjb3BlLmluaXRpYWxWYWxpZGF0b3JzW2NvbnRyb2wuX2VvRm9ybUVsZW1lbnQubmFtZV0gPSBjb250cm9sLnZhbGlkYXRvcjtcbiAgICAgICAgICBjb250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5jb21wb3NlKFxuICAgICAgICAgICAgdGhpcy5fZ2V0VmFsaWRhdG9ycyhzY29wZSwgY29udHJvbC5fZW9Gb3JtRWxlbWVudCkuY29uY2F0KFxuICAgICAgICAgICAgICBbc2NvcGUuaW5pdGlhbFZhbGlkYXRvcnNbY29udHJvbC5fZW9Gb3JtRWxlbWVudC5uYW1lXV0pXG4gICAgICAgICAgKSk7XG4gICAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgKiBCdWlsZCB2YWxpZGF0b3JzIGZvciB0aGUgZ2l2ZW4gZm9ybSBlbGVtZW50IHRvIGJlIGF0dGFjaGVkIHRvXG4gICogYSByZWFjdGl2ZSBmb3JtQ29udHJvbC5cbiAgKlxuICAqIEBwYXJhbSBmb3JtRWxlbWVudCAtIGZvcm0gZWxlbWVudCBvYmplY3RcbiAgKi9cbiAgcHJpdmF0ZSBfZ2V0VmFsaWRhdG9ycyhzY29wZTogRm9ybUdlblNjb3BlLCBmb3JtRWxlbWVudDogYW55KTogVmFsaWRhdG9yRm5bXSB7XG4gICAgbGV0IGVsbVZhbGlkYXRvcnMgPSBGb3JtVmFsaWRhdGlvbi5nZXRWYWxpZGF0b3JzKGZvcm1FbGVtZW50LCBzY29wZS5mb3JtT3B0aW9ucy5mb3JtTW9kZWwuc2l0dWF0aW9uKTtcbiAgICAvLyBhZGQgY3VzdG9tIHZhbGlkYXRvciBmb3Igc2NyaXB0IGVuYWJsZWQgZm9ybXNcbiAgICBpZiAoc2NvcGUuZm9ybUdlblJlc3VsdC5zY3JpcHRpbmdTY29wZSkge1xuICAgICAgZWxtVmFsaWRhdG9ycy5wdXNoKEZvcm1WYWxpZGF0aW9uLmN1c3RvbVNjcmlwdGluZ1ZhbGlkYXRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBlbG1WYWxpZGF0b3JzO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdFNjcmlwdGluZ1Njb3BlKHNjb3BlOiBGb3JtR2VuU2NvcGUsIGZvcm1TY3JpcHRTZXJ2aWNlOiBPYmplY3RGb3JtU2NyaXB0U2VydmljZSkge1xuICAgIGxldCB7ZGF0YSwgYWN0aW9ucywgb2JqZWN0cywgY29udGV4dH0gPSA8T2JqZWN0Rm9ybU9wdGlvbnM+KHNjb3BlLmZvcm1PcHRpb25zIHx8IHt9KTtcblxuICAgIGlmIChzY29wZS5mb3JtR2VuUmVzdWx0LnNjcmlwdGluZ1Njb3BlKSB7XG4gICAgICBzY29wZS5mb3JtR2VuUmVzdWx0LnNjcmlwdGluZ1Njb3BlLnNldE1vZGVsKHNjb3BlLmZvcm1HZW5SZXN1bHQuc2NyaXB0TW9kZWwpO1xuICAgICAgLyoqIHByb3ZpZGUgYWNjZXNzIHRvIGFjdGlvbnMgKHVzZWQgaW5zaWRlIG9mIEJQTS1Gb3JtcykgKi9cbiAgICAgIHNjb3BlLmZvcm1HZW5SZXN1bHQuc2NyaXB0aW5nU2NvcGUuYWN0aW9ucyA9IGFjdGlvbnM7XG4gICAgICAvKiogcHJvdmlkZSBhY2Nlc3MgdG8gYWRkaXRpb25hbCBvYmplY3RzICh1c2VkIGZvciBleGFtcGxlIGluIEJQTS1TdGFydC1Gb3JtcyB0b1xuICAgICAgICogYWRkIGRhdGEgb2YgRE1TLU9iamVjdHMgdG8gc3RhcnQgdGhlIHByb2Nlc3MgZm9yKVxuICAgICAgICovXG4gICAgICBzY29wZS5mb3JtR2VuUmVzdWx0LnNjcmlwdGluZ1Njb3BlLm9iamVjdHMgPSBvYmplY3RzO1xuICAgICAgc2NvcGUuZm9ybUdlblJlc3VsdC5zY3JpcHRpbmdTY29wZS5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgIC8qKiBwcm92aWRlIHJlYWRvbmx5IGFjY2VzcyB0byBpbml0aWFsIGZvcm0gZGF0YSAod2hpY2ggbWF5IGFsc28gY29udGFpbiB2YWx1ZXMgdGhhdFxuICAgICAgICogYXJlIG5vdCByZW5kZXJlZCBhcyBmb3JtIGVsZW1lbnRzIChpbnZpc2libGUgdmFsdWVzKSlcbiAgICAgICAqL1xuICAgICAgc2NvcGUuZm9ybUdlblJlc3VsdC5zY3JpcHRpbmdTY29wZS5kYXRhID0gZGF0YTtcblxuICAgICAgLyoqIGJ5IGRlZmF1bHQsIHNjcmlwdGluZyBzY29wZXMgYXJlIGFwcGxpZWQgdG8gZm9ybXMuIEJ1dCB0YWJsZSBlbGVtZW50cyBjcmVhdGUgdGhlaXIgb3duIHNjb3BlXG4gICAgICAgKiBmb3IgZWRpdGluZyByb3dzLiBCZWluZyBvbmUgb2YgdGhvc2UgaW5uZXIgZm9ybXMgc2hvdWxkIG5vdCBydW4gdGhlIGZvcm0gc2NyaXB0IGFnYWluLCBidXRcbiAgICAgICAqIGluc3RlYWQganVzdCBwcm92aWRlIHRoZSBvYnNlcnZpbmcgYWJpbGl0aWVzIG9mIHRoZSBzY3JpcHRpbmcgc2NvcGUuXG4gICAgICAgKi9cbiAgICAgIGlmICghc2NvcGUuZm9ybU9wdGlvbnMuZGlzYWJsZWQgJiYgIXNjb3BlLmlzSW5uZXJUYWJsZUZvcm0gJiYgc2NvcGUuZm9ybUdlblJlc3VsdC5mb3JtTW9kZWwpIHtcbiAgICAgICAgY29uc3Qgc2NyaXB0TmFtZSA9IHNjb3BlLmZvcm1HZW5SZXN1bHQuZm9ybU1vZGVsLm5hbWUgKyAnXycgKyBzY29wZS5mb3JtR2VuUmVzdWx0LmZvcm1Nb2RlbC5zaXR1YXRpb247XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdleGVjdXRpbmcgZm9ybSBzY3JpcHQgJyArIHNjcmlwdE5hbWUpO1xuICAgICAgICBmb3JtU2NyaXB0U2VydmljZS5ydW5Gb3JtU2NyaXB0KFxuICAgICAgICAgIHNjb3BlLmZvcm1HZW5SZXN1bHQuc2NyaXB0aW5nU2NvcGUsXG4gICAgICAgICAgc2NvcGUuZm9ybUdlblJlc3VsdC5mb3JtTW9kZWwuc2NyaXB0LFxuICAgICAgICAgIHNjcmlwdE5hbWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBlYWNoIHRpbWUgdGhlIHNjcmlwdCBjaGFuZ2VzIGl0cyBpbnRlcm5hbCBtb2RlbC5cbiAgICAgKiBJdCBpcyB1c2VkIHRvIHRyYW5zZmVyIHRoZSBzY3JpcHQgY2hhbmdlcyB0byB0aGUgYWN0dWFsIGZvcm0gbW9kZWwuXG4gICAgICpcbiAgICAgKiBUbyBlbnN1cmUgdGhlIHJpZ2h0IGNvbnRleHQsIHdlIGRlZmluZSBhbiBpbnN0YW5jZSBtZXRob2QgYXMgY2FsbGJhY2sgZm9yIHRoZSBzY3JpcHRpbmcgc2NvcGVcbiAgICAgKiBAc2VlOiBodHRwczovL2Jsb2cuam9obm55cmVpbGx5LmNvbS8yMDE0LzA0L3R5cGVzY3JpcHQtaW5zdGFuY2UtbWV0aG9kcy5odG1sXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZm9ybUNvbnRyb2xOYW1lXG4gICAgICogQHBhcmFtIGNoYW5nZVxuICAgICAqL1xuXG4gIHByaXZhdGUgX2dldFNjcmlwdGluZ01vZGVsQ2hhbmdlZChzY29wZTogRm9ybUdlblNjb3BlKTogRnVuY3Rpb24ge1xuICAgIHJldHVybiAoZm9ybUNvbnRyb2xOYW1lLCBjaGFuZ2UpID0+IHtcblxuICAgICAgLy8gZmluZCB0aGUgdGFyZ2V0IGNvbnRyb2xcbiAgICAgIGxldCBmYzogT2JqZWN0Rm9ybUNvbnRyb2wgPSBzY29wZS5mb3JtR2VuUmVzdWx0LmZvcm1Db250cm9sc1tmb3JtQ29udHJvbE5hbWVdIGFzIE9iamVjdEZvcm1Db250cm9sO1xuICAgICAgaWYgKGZjKSB7XG5cbiAgICAgICAgLy8gY2hhbmdlIG9ubHkgYWxsb3dlZCBwcm9wZXJ0aWVzXG4gICAgICAgIHN3aXRjaCAoY2hhbmdlLm5hbWUpIHtcbiAgICAgICAgICBjYXNlICd2YWx1ZSc6IHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoYW5nZS5uZXdWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc0FycmF5VmFsdWVDaGFuZ2UoZmMsIGNoYW5nZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmYy5fZW9Gb3JtRWxlbWVudC52YWx1ZSA9IGNoYW5nZS5uZXdWYWx1ZTtcbiAgICAgICAgICAgICAgaWYgKGZjLnZhbHVlICE9PSBjaGFuZ2UubmV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBmYy5wYXRjaFZhbHVlKGNoYW5nZS5uZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgZmMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgICAgIGZjLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjb3BlLmZvcm1HZW5SZXN1bHQuZm9ybS5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ3JlcXVpcmVkJzoge1xuICAgICAgICAgICAgaWYgKGZjLl9lb0Zvcm1FbGVtZW50LnJlcXVpcmVkICE9PSBjaGFuZ2UubmV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgZmMuX2VvRm9ybUVsZW1lbnQucmVxdWlyZWQgPSBjaGFuZ2UubmV3VmFsdWU7XG4gICAgICAgICAgICAgIC8vIGFwcGx5IG5ldyB2YWxpZGF0b3JzXG4gICAgICAgICAgICAgIC8vIEBzZWU6IGh0dHBzOi8vc2NvdGNoLmlvL3R1dG9yaWFscy9ob3ctdG8taW1wbGVtZW50LWNvbmRpdGlvbmFsLXZhbGlkYXRpb24taW4tYW5ndWxhci0yLW1vZGVsLWRyaXZlbi1mb3Jtc1xuICAgICAgICAgICAgICBmYy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMuY29tcG9zZSh0aGlzLl9nZXRWYWxpZGF0b3JzKHNjb3BlLCBmYy5fZW9Gb3JtRWxlbWVudCkuY29uY2F0KFtzY29wZS5pbml0aWFsVmFsaWRhdG9yc1tmYy5fZW9Gb3JtRWxlbWVudC5uYW1lXV0pKSk7XG4gICAgICAgICAgICAgIC8vIG5lZWQgdG8gbWFyayBmb3JtIGNvbnRyb2wgYXMgdG91Y2hlZCBiZWNhdXNlIG90aGVyd2lzZSBmb3JtIHZhbGlkYXRpb24gd2lsbCBub3Qgc2hvd1xuICAgICAgICAgICAgICAvLyBlcnJvciBtZXNzYWdlc1xuICAgICAgICAgICAgICBmYy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgICAgIGZjLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdyZWFkb25seSc6IHtcbiAgICAgICAgICAgIGZjLl9lb0Zvcm1FbGVtZW50LnJlYWRvbmx5ID0gY2hhbmdlLm5ld1ZhbHVlO1xuICAgICAgICAgICAgaWYgKGNoYW5nZS5uZXdWYWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBmYy5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmYy5lbmFibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdlcnJvcic6IHtcbiAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShmYy5fZW9Gb3JtRWxlbWVudC5lcnJvcikgIT09IEpTT04uc3RyaW5naWZ5KGNoYW5nZS5uZXdWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgZmMuX2VvRm9ybUVsZW1lbnQuZXJyb3IgPSBjaGFuZ2UubmV3VmFsdWU7XG4gICAgICAgICAgICAgIGZjLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgICAgICAgZmMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIG5ldyBvbnJvd2VkaXQgZnVuY3Rpb24gd2FzIGFwcGxpZWQgYnkgdGhlIHNjcmlwdFxuICAgICAgICAgIGNhc2UgJ29ucm93ZWRpdCc6IHtcbiAgICAgICAgICAgIGZjLl9lb0Zvcm1FbGVtZW50Lm9ucm93ZWRpdCA9IGNoYW5nZS5uZXdWYWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBuZXcgb25jaGFuZ2UgZnVuY3Rpb24gd2FzIGFwcGxpZWQgYnkgdGhlIHNjcmlwdFxuICAgICAgICAgIGNhc2UgJ29uY2hhbmdlJzoge1xuICAgICAgICAgICAgZmMuX2VvRm9ybUVsZW1lbnQub25jaGFuZ2UgPSBjaGFuZ2UubmV3VmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gbmV3IGNvbnRleHRJZCB3YXMgYXBwbGllZCBieSB0aGUgc2NyaXB0XG4gICAgICAgICAgY2FzZSAnY29udGV4dElkJzoge1xuICAgICAgICAgICAgZmMuX2VvRm9ybUVsZW1lbnQuY29udGV4dElkID0gY2hhbmdlLm5ld1ZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIG5ldyBkZXNjcmlwdGlvbiB3YXMgYXBwbGllZCBieSB0aGUgc2NyaXB0XG4gICAgICAgICAgY2FzZSAnZGVzY3JpcHRpb24nOiB7XG4gICAgICAgICAgICBmYy5fZW9Gb3JtRWxlbWVudC5kZXNjcmlwdGlvbiA9IGNoYW5nZS5uZXdWYWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3Byb2Nlc3NBcnJheVZhbHVlQ2hhbmdlKGZjLCBjaGFuZ2UpIHtcbiAgICBjb25zdCBuZXdWYWwgPSBjaGFuZ2UubmV3VmFsdWU7XG4gICAgY29uc3QgdGFyZ2V0VHlwZSA9IGZjLl9lb0Zvcm1FbGVtZW50LnR5cGU7XG4gICAgLy8gZm9yIHNvbWUgdHlwZXMgd2UgaGF2ZSB0byBlbnN1cmUgdGhhdCBtZXRhIGRhdGEgYXJlIHByb3ZpZGVkIGFzIHdlbGxcbiAgICBzd2l0Y2ggKHRhcmdldFR5cGUpIHtcbiAgICAgIGNhc2UgJ09SR0FOSVpBVElPTic6IHtcbiAgICAgICAgdGhpcy5fZ2V0RGF0YU1ldGEoZmMuX2VvRm9ybUVsZW1lbnQsIG5ld1ZhbCkuc3Vic2NyaWJlKG0gPT4ge1xuICAgICAgICAgIGZjLl9lb0Zvcm1FbGVtZW50LmRhdGFNZXRhID0gbTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnQ09ERVNZU1RFTSc6IHtcbiAgICAgICAgaWYgKCFmYy5fZW9Gb3JtRWxlbWVudC5jb2Rlc3lzdGVtLmVudHJpZXMpIHtcbiAgICAgICAgICBmYy5fZW9Gb3JtRWxlbWVudC5jb2Rlc3lzdGVtID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldENvZGVzeXN0ZW0oZmMuX2VvRm9ybUVsZW1lbnQuY29kZXN5c3RlbS5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdUQUJMRSc6IHtcbiAgICAgICAgY29uc3QgZGF0YVRvQmVQcm9jZXNzZWQgPSB7fTtcbiAgICAgICAgZmMuX2VvRm9ybUVsZW1lbnQuZWxlbWVudHMuZm9yRWFjaChlID0+IHtcbiAgICAgICAgICBpZiAoZS50eXBlID09PSAnT1JHQU5JWkFUSU9OJyB8fCBlLnR5cGUgPT09ICdDT0RFU1lTVEVNJykge1xuICAgICAgICAgICAgZGF0YVRvQmVQcm9jZXNzZWRbZS5uYW1lXSA9IGU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGRhdGFUb0JlUHJvY2Vzc2VkKS5sZW5ndGgpIHtcbiAgICAgICAgICBsZXQgb2JzID0gW107XG4gICAgICAgICAgbmV3VmFsLmZvckVhY2gocm93RGF0YSA9PiB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhyb3dEYXRhKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgIGlmIChkYXRhVG9CZVByb2Nlc3NlZFtrZXldKSB7XG4gICAgICAgICAgICAgICAgb2JzLnB1c2godGhpcy5fZ2V0RGF0YU1ldGEoZGF0YVRvQmVQcm9jZXNzZWRba2V5XSwgcm93RGF0YVtrZXldKS5waXBlKFxuICAgICAgICAgICAgICAgICAgdGFwKG0gPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAobSkge1xuICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGFba2V5ICsgJ19tZXRhJ10gPSBtO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb3dEYXRhW2tleSArICdfbWV0YSddO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBmb3JrSm9pbihvYnMpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl91cGRhdGVBcnJheVZhbHVlKGZjLCBuZXdWYWwpKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fdXBkYXRlQXJyYXlWYWx1ZShmYywgbmV3VmFsKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUFycmF5VmFsdWUoZmMsIG5ld1ZhbHVlKSB7XG4gICAgZmMuX2VvRm9ybUVsZW1lbnQudmFsdWUgPSBbXS5jb25jYXQobmV3VmFsdWUpO1xuICAgIGZjLnBhdGNoVmFsdWUoW10uY29uY2F0KG5ld1ZhbHVlKSk7XG4gICAgZmMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIGZjLm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICBwcml2YXRlIFRFTVBfU1RPUkFHRV9FTlRSSUVTX0tFWSA9ICdlby5jbXAub2JqZWN0Zm9ybS50bXBzdG9yYWdlLmVudHJpZXMnO1xuXG4gIC8qKlxuICAgKiBBZGQgYSByZWZlcmVuY2UgdG8gYSB0ZW1wb3JhcnkgbG9jYWxzdG9yYWdlIGVudHJ5IHRoYXQgc2hvdWxkIGJlIGNsZWFyZWQgd2hlbiBhXG4gICAqIG5ldyBicm93c2VyIHNlc3Npb24gc3RhcnRzLiBJbiBjb250ZXh0IG9mIGZvcm1zIHRoaXMgd2lsbCBiZSB1c2VkIHRvIGNsZWFudXAgdGhlXG4gICAqIGxheW91dCBzdGF0ZSBvZiBmb3JtcyAoc2VsZWN0ZWQgdGFicyBldGMuKSB0aGF0IGFyZSBzdG9yZWQgbG9jYWxseSBidXQgc2hvdWxkIG9ubHlcbiAgICogYmUgcGVzaXN0ZWQgZm9yIG9uZSBicm93c2VyIHNlc3Npb24uXG4gICAqIEBwYXJhbSBzdG9yYWdlS2V5IEtleSBvZiB0aGUgbG9jYWxzdG9yYWdlIGl0ZW1cbiAgICovXG4gIGFkZFRlbXBvcmFyeVN0b3JhZ2VFbnRyeShzdG9yYWdlS2V5OiBzdHJpbmcpIHtcbiAgICAvLyBlbnRyaWVzIHdpbGwgdGhlbXNlbHZlcyBiZSBzdG9yZWQgaW4gbG9jYWxzdG9yYWdlIHNvIHdlIGNhbiBjaGVjayBmb3IgZW50cmllc1xuICAgIC8vIHRvIGJlIHJlbW92ZWQgb25jZSB0aGUgYXBwbGljYXRpb24gc3RhcnRzXG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuX2dldFRlbXBvcmFyeVN0b3JhZ2VFbnRyaWVzKCk7XG4gICAgaWYoIWN1cnJlbnQuaW5jbHVkZXMoc3RvcmFnZUtleSkpXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5URU1QX1NUT1JBR0VfRU5UUklFU19LRVksIEpTT04uc3RyaW5naWZ5KFsuLi5jdXJyZW50LCBzdG9yYWdlS2V5XSkpXG4gIH1cblxuICBwcml2YXRlIF9jbGVhclRlbXBvcmFyeVN0b3JhZ2VFbnRyaWVzKCkge1xuICAgIHRoaXMuX2dldFRlbXBvcmFyeVN0b3JhZ2VFbnRyaWVzKCkuZm9yRWFjaChlID0+IGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGUpKTtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlRFTVBfU1RPUkFHRV9FTlRSSUVTX0tFWSk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRUZW1wb3JhcnlTdG9yYWdlRW50cmllcygpOiBzdHJpbmdbXSB7XG4gICAgbGV0IHJlcyA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbnRyaWVzOiBzdHJpbmdbXSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5URU1QX1NUT1JBR0VfRU5UUklFU19LRVkpKTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGVudHJpZXMpKSByZXMgPSBlbnRyaWVzO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoZSlcbiAgICB9XG4gICAgY29uc29sZS5kZWJ1ZyhgRm91bmQgJHtyZXMubGVuZ3RofSB0bXAgZW50cmllcyB0byBiZSByZW1vdmVkYCk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxufVxuIl19
|
|
749
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWZvcm0taGVscGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9vYmplY3QtZm9ybS9vYmplY3QtZm9ybS1oZWxwZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQWMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFTLFVBQVUsRUFBZ0IsYUFBYSxFQUFpQixLQUFLLEVBQWUsTUFBTSxjQUFjLENBQUM7QUFDakgsT0FBTyxFQUFDLGVBQWUsRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQzdFLE9BQU8sRUFBQyxZQUFZLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFLakQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLCtDQUErQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQ25GLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUV0RSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSw4REFBOEQsQ0FBQzs7Ozs7QUF5QnRHLE1BQU0sT0FBTyx1QkFBdUI7SUFNbEMsWUFBb0IsTUFBYyxFQUN4QixnQkFBa0MsRUFDbEMsYUFBNEIsRUFDNUIsYUFBNkIsRUFDN0IsYUFBNEI7UUFKbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUN4QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGtC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QUUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzVCLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRU8sNkJBQTZCO1FBQ25DLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RSxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTywyQkFBMkI7UUFDakMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQWEsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7WUFDMUYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztnQkFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDO1FBQzVDLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNsQixDQUFDO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxNQUFNLDRCQUE0QixDQUFDLENBQUM7UUFDL0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDOzhHQXJ5QlUsdUJBQXVCO2tIQUF2Qix1QkFBdUI7OzJGQUF2Qix1QkFBdUI7a0JBRG5DLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RhdGVQaXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VmFsaWRhdG9yRm4sIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7TG9nZ2VyLCBSYW5nZVZhbHVlLCBTZWFyY2hGaWx0ZXIsIFNlYXJjaFNlcnZpY2UsIFN5c3RlbVNlcnZpY2UsIFV0aWxzLCBTZWFyY2hQYXJhbXN9IGZyb20gJ0Blby1zZGsvY29yZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1BsdWdpbnNTZXJ2aWNlfSBmcm9tICcuLi8uLi9lby1mcmFtZXdvcmstY29yZS9hcGkvcGx1Z2lucy5zZXJ2aWNlJztcbmltcG9ydCB7UmVmZXJlbmNlU2VydmljZX0gZnJvbSAnLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvcmVmZXJlbmNlcy9yZWZlcmVuY2Uuc2VydmljZSc7XG5pbXBvcnQge09iamVjdEZvcm1PcHRpb25zfSBmcm9tICcuL29iamVjdC1mb3JtLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7Rm9ybVZhbGlkYXRpb259IGZyb20gJy4vb2JqZWN0LWZvcm0vZm9ybS12YWxpZGF0aW9uL2Zvcm0tdmFsaWRhdGlvbic7XG5pbXBvcnQge09iamVjdEZvcm1Db250cm9sfSBmcm9tICcuL29iamVjdC1mb3JtL29iamVjdC1mb3JtLWNvbnRyb2wnO1xuaW1wb3J0IHtPYmplY3RGb3JtQ29udHJvbFdyYXBwZXJ9IGZyb20gJy4vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0tY29udHJvbC13cmFwcGVyJztcbmltcG9ydCB7T2JqZWN0Rm9ybUdyb3VwfSBmcm9tICcuL29iamVjdC1mb3JtL29iamVjdC1mb3JtLWdyb3VwLm1vZGVsJztcbmltcG9ydCB7T2JqZWN0Rm9ybVNjcmlwdFNlcnZpY2V9IGZyb20gJy4vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0tc2NyaXB0L29iamVjdC1mb3JtLXNjcmlwdC5zZXJ2aWNlJztcbmltcG9ydCB7T2JqZWN0Rm9ybVNjcmlwdGluZ1Njb3BlfSBmcm9tICcuL29iamVjdC1mb3JtL29iamVjdC1mb3JtLXNjcmlwdC9vYmplY3QtZm9ybS1zY3JpcHRpbmctc2NvcGUnO1xuaW1wb3J0IHtPYmplY3RGb3JtTW9kZWx9IGZyb20gJy4vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0ubW9kZWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1HZW5TY29wZSB7XG4gIGdDb3VudDogbnVtYmVyO1xuICBmb3JtT3B0aW9uczogT2JqZWN0Rm9ybU9wdGlvbnM7XG4gIGlzSW5uZXJUYWJsZUZvcm06IGJvb2xlYW47XG4gIGluaXRpYWxWYWxpZGF0b3JzOiB7W25hbWU6IHN0cmluZ106IFZhbGlkYXRvckZuIHwgbnVsbH07XG4gIGZvcm1HZW5SZXN1bHQ6IEZvcm1HZW5SZXN1bHQ7XG59XG5leHBvcnQgaW50ZXJmYWNlIEZvcm1HZW5SZXN1bHQge1xuICAvLyBGb3JtIGNvbnRyb2xzIGdlbmVyYXRlZCBmcm9tIHRoZSBtb2RlbCBhcyAnUXVpY2sgYWNjZXNzIG9iamVjdCdcbiAgLy8gRm9ybSBlbGVtZW50cyBuYW1lIGlzIGtleSBhbmQgdGhlIHZhbHVlIGlzIHRoZSBmb3JtIGNvbnRyb2wgaXRzZWxmXG4gIGZvcm1Db250cm9sczoge1tuYW1lOiBzdHJpbmddOiBPYmplY3RGb3JtQ29udHJvbH07XG4gIGZvcm1Nb2RlbDogYW55LFxuICAvLyBTdWJzY3JpcHRpb25zIHRvIHZhbHVlIGNoYW5nZXMgb2YgdGhlIGdlbmVyYXRlZCBmb3JtIGNvbnRyb2xzXG4gIC8vIFlvdSBzaG91bGQgYWx3YXlzIHVuc3Vic2NyaWJlIGZyb20gYWxsIG9mIHRoZW0gd2hlbiBjb25zdW1pbmdcbiAgLy8gY29tcG9uZW50IGlzIGRlc3Ryb3llZFxuICBjb250cm9sVmFsdWVTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXTtcbiAgc2NyaXB0aW5nU2NvcGU6IE9iamVjdEZvcm1TY3JpcHRpbmdTY29wZTtcbiAgc2NyaXB0TW9kZWw6IHtbbmFtZTogc3RyaW5nXTogYW55fTtcbiAgZm9ybTogT2JqZWN0Rm9ybUdyb3VwO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT2JqZWN0Rm9ybUhlbHBlclNlcnZpY2Uge1xuXG4gIHByaXZhdGUgZGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUoJ2VuJyk7XG4gIHByaXZhdGUgVEVNUF9TVE9SQUdFX0VOVFJJRVNfS0VZID0gJ2VvLmNtcC5vYmplY3Rmb3JtLnRtcHN0b3JhZ2UuZW50cmllcyc7XG4gIHByaXZhdGUgX2xhdGVzdEZvcm1FbGVtZW50Q2hhbmdlczogQmVoYXZpb3JTdWJqZWN0PFNlYXJjaFBhcmFtcz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlYXJjaFBhcmFtcz4oe30pO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9nZ2VyOiBMb2dnZXIsXG4gICAgcHJpdmF0ZSByZWZlcmVuY2VTZXJ2aWNlOiBSZWZlcmVuY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogU2VhcmNoU2VydmljZSxcbiAgICBwcml2YXRlIHBsdWdpblNlcnZpY2U6IFBsdWdpbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3lzdGVtU2VydmljZTogU3lzdGVtU2VydmljZSkge1xuICAgIHRoaXMuX2NsZWFyVGVtcG9yYXJ5U3RvcmFnZUVudHJpZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXR0ZXIgZm9yIHJldHJpZXZpbmcgdGhlIGxhdGVzdCBmb3JtIGVsZW1lbnQgY2hhbmdlcyBhcyBhbiBvYnNlcnZhYmxlLlxuICAgKlxuICAgKiBUaGlzIGdldHRlciByZXR1cm5zIGFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgbGF0ZXN0IGNoYW5nZXMgdG8gdGhlIGZvcm0gZWxlbWVudHMuXG4gICAqIEl0IGFsbG93cyBzdWJzY3JpYmVycyB0byByZWFjdCB0byBjaGFuZ2VzIGluIHRoZSBmb3JtIGVsZW1lbnRzIGluIHJlYWwtdGltZS5cbiAgICpcbiAgICogQHJldHVybnMge09ic2VydmFibGU8U2VhcmNoUGFyYW1zPn0gLSBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSBsYXRlc3QgZm9ybSBlbGVtZW50IGNoYW5nZXMuXG4gICAqL1xuICBnZXQgbGF0ZXN0Rm9ybUVsZW1lbnRDaGFuZ2VzJCgpOiBPYnNlcnZhYmxlPFNlYXJjaFBhcmFtcz4ge1xuICAgIHJldHVybiB0aGlzLl9sYXRlc3RGb3JtRWxlbWVudENoYW5nZXMuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgcmVhY3RpdmUgZm9ybSBiYXNlZCBvbiBhIGZvcm0gbW9kZWwgdGhhdCBtYXkgYWxzbyBpbmNsdWRlIGZvcm0gc2NyaXB0cy5cbiAgICogQHBhcmFtIGZvcm1PcHRpb25zIGBPYmplY3RGb3JtT3B0aW9uc2AgZGVmaW5pbmcgdGhlIGZvcm1cbiAgICogQHBhcmFtIGZvcm1TY3JpcHRTZXJ2aWNlIEluc3RhbmNlIG9mIGEgYE9iamVjdEZvcm1TY3JpcHRTZXJ2aWNlYC4gVGhpcyBzZXJ2aWNlIGlzIHN1cHBvc2VkIHRvIGJlXG4gICAqIHNjb3BlZCB0byB0aGUgY29tcG9uZW50IHJlbmRlcmluZyB0aGUgZm9ybSAocHJvdmlkZXJzIGFycmF5IGluIGNvbXBvbmVudCBkZWNvcmF0b3IpLlxuICAgKiBAcGFyYW0gaXNJbm5lclRhYmxlRm9ybSB3aGV0aGVyIG9yIG5vdCB0aGUgZm9ybSBpcyBwYXJ0IG9mIGFub3RoZXIgZm9ybSAoYXMgaXMgd2l0aCB0YWJsZSBlZGl0IGZvcm1zKVxuICAgKiBAcmV0dXJucyBBbiBgRm9ybUdlblJlc3VsdGAgb2JqZWN0XG4gICAqL1xuICBidWlsZFJlYWN0aXZlRm9ybShcbiAgICBmb3JtT3B0aW9uczogT2JqZWN0Rm9ybU9wdGlvbnMsXG4gICAgZm9ybVNjcmlwdFNlcnZpY2U6IE9iamVjdEZvcm1TY3JpcHRTZXJ2aWNlLFxuICAgIGlzSW5uZXJUYWJsZUZvcm0/OiBib29sZWFuKTogRm9ybUdlblJlc3VsdCB7XG5cbiAgICBjb25zdCBfc2NvcGU6IEZvcm1HZW5TY29wZSA9IHtcbiAgICAgIGdDb3VudDogMCxcbiAgICAgIGZvcm1PcHRpb25zLFxuICAgICAgaXNJbm5lclRhYmxlRm9ybSxcbiAgICAgIGluaXRpYWxWYWxpZGF0b3JzOiB7fSxcbiAgICAgIGZvcm1HZW5SZXN1bHQ6IHtcbiAgICAgICAgZm9ybUNvbnRyb2xzOiB7fSxcbiAgICAgICAgZm9ybU1vZGVsOiB7fSxcbiAgICAgICAgY29udHJvbFZhbHVlU3Vic2NyaXB0aW9uczogW10sXG4gICAgICAgIHNjcmlwdGluZ1Njb3BlOiB1bmRlZmluZWQsXG4gICAgICAgIHNjcmlwdE1vZGVsOiB7fSxcbiAgICAgICAgZm9ybTogbnVsbFxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGZvcm1Nb2RlbCA9IHRoaXMuX2RhdGFUb0Zvcm0oX3Njb3BlLCBmb3JtT3B0aW9ucy5mb3JtTW9kZWwsIGZvcm1PcHRpb25zLmRhdGEpO1xuICAgIF9zY29wZS5mb3JtR2VuUmVzdWx0LmZvcm1Nb2RlbCA9IGZvcm1Nb2RlbDtcbiAgICBpZiAoIWZvcm1Nb2RlbCkgcmV0dXJuO1xuXG4gICAgLy8gaWYgYSBzY3JpcHQgaXMgYXZhaWxhYmxlLCB3ZSdsbCBpbml0IHRoZSBmb3JtIHNjcmlwdGluZyBmb3IgdGhlXG4gICAgLy8gY3VycmVudCBmb3JtXG4gICAgbGV0IHNjcmlwdGluZ1Njb3BlOiBPYmplY3RGb3JtU2NyaXB0aW5nU2NvcGU7XG4gICAgaWYgKF9zY29wZS5pc0lubmVyVGFibGVGb3JtIHx8IChmb3JtTW9kZWwuc2NyaXB0ICYmIGZvcm1Nb2RlbC5zY3JpcHQubGVuZ3RoID4gMCkpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdhZGRpbmcgZm9ybSBzY3JpcHRpbmcgc2NvcGUnKTtcbiAgICAgIHNjcmlwdGluZ1Njb3BlID0gbmV3IE9iamVjdEZvcm1TY3JpcHRpbmdTY29wZShcbiAgICAgICAgZm9ybU1vZGVsLnNpdHVhdGlvbixcbiAgICAgICAgdGhpcy5fZ2V0U2NyaXB0aW5nTW9kZWxDaGFuZ2VkKF9zY29wZSksXG4gICAgICAgIHRoaXMucGx1Z2luU2VydmljZS5nZXRBcGkoKSxcbiAgICAgICAgX3Njb3BlLmlzSW5uZXJUYWJsZUZvcm1cbiAgICAgICk7XG4gICAgICBzY3JpcHRpbmdTY29wZS5vYmplY3RJZCA9IGZvcm1PcHRpb25zLm9iamVjdElkO1xuICAgIH1cbiAgICBfc2NvcGUuZm9ybUdlblJlc3VsdC5zY3JpcHRpbmdTY29wZSA9IHNjcmlwdGluZ1Njb3BlO1xuXG5cbiAgICBsZXQgZm9ybSA9IG5ldyBPYmplY3RGb3JtR3JvdXAoe30pO1xuICAgIGlmIChmb3JtTW9kZWwuZWxlbWVudHNbMF0gJiYgZm9ybU1vZGVsLmVsZW1lbnRzWzBdLmVsZW1lbnRzKSB7XG4gICAgICB0aGlzLl9hZGRGb3JtQ29udHJvbChfc2NvcGUsIGZvcm0sIGZvcm1Nb2RlbC5lbGVtZW50c1swXSwgJ2NvcmUnKTtcbiAgICB9XG4gICAgaWYgKGZvcm1Nb2RlbC5lbGVtZW50c1sxXSAmJiBmb3JtTW9kZWwuZWxlbWVudHNbMV0uZWxlbWVudHMpIHtcbiAgICAgIHRoaXMuX2FkZEZvcm1Db250cm9sKF9zY29wZSwgZm9ybSwgZm9ybU1vZGVsLmVsZW1lbnRzWzFdLCAnZGF0YScpO1xuICAgIH1cbiAgICBfc2NvcGUuZm9ybUdlblJlc3VsdC5mb3JtID0gZm9ybTtcbiAgICB0aGlzLl9pbml0VmFsaWRhdG9ycyhfc2NvcGUuZm9ybUdlblJlc3VsdC5mb3JtLCBfc2NvcGUpO1xuICAgIHRoaXMuX2luaXRTY3JpcHRpbmdTY29wZShfc2NvcGUsIGZvcm1TY3JpcHRTZXJ2aWNlKTtcbiAgICByZXR1cm4gX3Njb3BlLmZvcm1HZW5SZXN1bHQ7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgZm9ybSBlbGVtZW50IG9iamVjdCB0byBhbiBPYmplY3RGb3JtQ29udHJvbFdyYXBwZXIgd2hpY2ggdGhlbiBjYW4gYmUgdXNlZCB0b1xuICAgKiByZW5kZXIgYSBmcm9tIGNvbnRyb2wuIFJlc3VsdCBjYW4gYmUgdXNlZCBhcyBpbnB1dCBmb3IgRm9ybUVsZW1lbnRDb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBlbGVtZW50IC0gdGhlIGVsZW1lbnQgb2JqZWN0IG9yIGEganNvbiBzdHJpbmdcbiAgICogQHBhcmFtIHNpdHVhdGlvbiAtIG9wdGlvbmFsIHByb3BlcnR5IHRvIHNldCB1cCBhIGZvcm0gc2l0dWF0aW9uIGZvciB0aGUgY29udHJvbCAoZGVmYXVsdCBpcyBFRElUKVxuICAgKiBAcmV0dXJuIHRoZSBjb252ZXJ0ZWQgT2JqZWN0Rm9ybUNvbnRyb2xXcmFwcGVyIG9yIG51bGwgaW4gY2FzZSBvZiBhbiBlcnJvclxuICAgKi9cbiAgZWxlbWVudFRvRm9ybUNvbnRyb2woZWxlbWVudDogYW55LCBzaXR1YXRpb24/OiBzdHJpbmcpOiBPYmplY3RGb3JtQ29udHJvbFdyYXBwZXIge1xuXG4gICAgbGV0IGZvcm1FbGVtZW50O1xuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvcm1FbGVtZW50ID0gSlNPTi5wYXJzZShlbGVtZW50KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBwYXJzZSBmb3JtIGVsZW1lbnQgZnJvbSBqc29uICcsIGZvcm1FbGVtZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9ybUVsZW1lbnQgPSBlbGVtZW50O1xuICAgIH1cblxuICAgIGlmICghZm9ybUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgT2JqZWN0Rm9ybUNvbnRyb2xXcmFwcGVyXG4gICAgbGV0IHdyYXBwZXIgPSBuZXcgT2JqZWN0Rm9ybUNvbnRyb2xXcmFwcGVyKHt9KTtcbiAgICBsZXQgZm9ybVNpdHVhdGlvbiA9IHNpdHVhdGlvbiA/IHNpdHVhdGlvbiA6ICdFRElUJztcblxuICAgIHdyYXBwZXIuX2VvRm9ybUNvbnRyb2xXcmFwcGVyID0ge1xuICAgICAgY29udHJvbE5hbWU6IGZvcm1FbGVtZW50Lm5hbWUsXG4gICAgICBzaXR1YXRpb246IGZvcm1TaXR1YXRpb25cbiAgICB9O1xuXG4gICAgLy8gZm9yIGNvZGVzeXN0ZW0gZWxlbWVudHMgYWRkIGVudHJpZXMgaWYgbm90IHlldCBwcm92aWRlZFxuICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnQ09ERVNZU1RFTScgJiYgKCFmb3JtRWxlbWVudC5jb2Rlc3lzdGVtIHx8ICFmb3JtRWxlbWVudC5jb2Rlc3lzdGVtLmVudHJpZXMpKSB7XG4gICAgICBmb3JtRWxlbWVudC5jb2Rlc3lzdGVtID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldENvZGVzeXN0ZW0oZm9ybUVsZW1lbnQuY29kZXN5c3RlbS5pZCk7XG4gICAgfVxuICAgIC8vIGNyZWF0ZSB0aGUgYWN0dWFsIGZvcm0gY29udHJvbFxuICAgIGxldCBjb250cm9sRGlzYWJsZWQgPSAhIWZvcm1FbGVtZW50LnJlYWRvbmx5O1xuICAgIGxldCBmb3JtQ29udHJvbCA9IG5ldyBPYmplY3RGb3JtQ29udHJvbCh7XG4gICAgICB2YWx1ZTogZm9ybUVsZW1lbnQudmFsdWUsXG4gICAgICBkaXNhYmxlZDogY29udHJvbERpc2FibGVkXG4gICAgfSwgRm9ybVZhbGlkYXRpb24uZ2V0VmFsaWRhdG9ycyhmb3JtRWxlbWVudCwgZm9ybVNpdHVhdGlvbikpO1xuXG4gICAgLy8gRm9ybSBlbGVtZW50cyBpbiBTRUFSQ0ggc2l0dWF0aW9uIG1heSBhcnJpdmUgd2l0aCBhIHZhbHVlIHNldCB0byBOVUxMIChleHBsaWNpdCBzZWFyY2ggZm9yXG4gICAgLy8gZmllbGRzIHRoYXQgYXJlIE5PVCBzZXQpLiBJbiB0aGF0IGNhc2Ugd2UgbmVlZCB0byBwcmVwYXJlIHRoZSBmb3JtIGNvbnRyb2xcbiAgICBpZiAoZm9ybVNpdHVhdGlvbiA9PT0gJ1NFQVJDSCcgJiYgZm9ybUVsZW1lbnQudmFsdWUgPT09IG51bGwpIHtcbiAgICAgIGZvcm1FbGVtZW50LmlzTm90U2V0VmFsdWUgPSB0cnVlO1xuICAgIH1cblxuICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50ID0gZm9ybUVsZW1lbnQ7XG4gICAgd3JhcHBlci5hZGRDb250cm9sKGZvcm1FbGVtZW50Lm5hbWUsIGZvcm1Db250cm9sKTtcblxuICAgIHJldHVybiB3cmFwcGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgZGF0YSBmcm9tIGFuIG9iamVjdCBmb3JtIGJhc2VkIG9uIHNpdHVhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGZvcm0gLSBmb3JtIHRvIGV4dHJhY3QgZGF0YSBmcm9tXG4gICAqIEBwYXJhbSBzaXR1YXRpb24gLSBmb3JtIHNpdHVhdGlvblxuICAgKiBAcGFyYW0gW2luaXRpYWxEYXRhXSAtIG9wdGlvbmFsIGZvcm0gZGF0YSB0byBtYXRjaCB0aGUgY3VycmVudCB2YWx1ZXMgYWdhaW5zdFxuICAgKiBUaGlzIGlzIHJlcXVpcmVkIGZvciBlZGl0aWcgaW5kZXhkYXRhIChFRElUIHNpdHVhdGlvbiksIGJlY2F1c2Ugd2UgaGF2ZSB0byBjb21wYXJlIG5ldyB2YWx1ZXNcbiAgICogYWdhaW5zdCB0aGUgaW5pdGlhbCB2YWx1ZXMuIElmIGEgcHJvcGVydHkgdGhhdCBpcyBjb250YWluZWQgaW4gdGhlIGZvcm1zIGluaXRpYWwgZGF0YSBpcyByZW1vdmVkXG4gICAqIChlLmcuIHNldCB0byBudWxsKSB0aGVuIHdlIGhhdmUgdG8gc2V0IHRoaXMgbnVsbCB2YWx1ZSwgYmVjYXVzZSBvdGhlcndpc2UgdGhlIHNlcnZlciB3b3VsZFxuICAgKiBpZ25vcmUgdGhlIGNoYW5nZXMuXG4gICAqIEBwYXJhbSBpc1RhYmxlUm93RWRpdEZvcm0gRmxhZyBpbmRpY2F0aW5nIHRoYXQgdGhlIHByb3ZpZGVkIGZvcm0gaXMgYW4gaW5saW5lIGZvcm0gdXNlZCBieVxuICAgKiBhIGZvcm1zIHRhYmxlIGVsZW1lbnQgZm9yIGVkaXRpbmcgcm93cy4gVGhvc2UgbmVlZCBhIHNwZWNpYWwgaGFuZGxpbmcuXG4gICAqIEByZXR1cm4gZXh0cmFjdGVkIGRhdGEgYXMgb2JqZWN0XG4gICAqL1xuICBleHRyYWN0Rm9ybURhdGEoZm9ybTogT2JqZWN0Rm9ybUdyb3VwLCBzaXR1YXRpb246IHN0cmluZywgaW5pdGlhbERhdGE/OiBhbnksIGlzVGFibGVSb3dFZGl0Rm9ybT86IGJvb2xlYW4pIHtcbiAgICBsZXQgZXh0cmFjdGVkRGF0YSA9IHt9O1xuICAgIHRoaXMuZ2V0RWxlbWVudFZhbHVlcyhleHRyYWN0ZWREYXRhLCBmb3JtLCBzaXR1YXRpb24gfHwgJ0VESVQnLCBpbml0aWFsRGF0YSwgaXNUYWJsZVJvd0VkaXRGb3JtKTtcbiAgICByZXR1cm4gZXh0cmFjdGVkRGF0YTtcbiAgfVxuXG4gIC8qKlxuICogQWRkIGEgcmVmZXJlbmNlIHRvIGEgdGVtcG9yYXJ5IGxvY2Fsc3RvcmFnZSBlbnRyeSB0aGF0IHNob3VsZCBiZSBjbGVhcmVkIHdoZW4gYVxuICogbmV3IGJyb3dzZXIgc2Vzc2lvbiBzdGFydHMuIEluIGNvbnRleHQgb2YgZm9ybXMgdGhpcyB3aWxsIGJlIHVzZWQgdG8gY2xlYW51cCB0aGVcbiAqIGxheW91dCBzdGF0ZSBvZiBmb3JtcyAoc2VsZWN0ZWQgdGFicyBldGMuKSB0aGF0IGFyZSBzdG9yZWQgbG9jYWxseSBidXQgc2hvdWxkIG9ubHlcbiAqIGJlIHBlc2lzdGVkIGZvciBvbmUgYnJvd3NlciBzZXNzaW9uLlxuICogQHBhcmFtIHN0b3JhZ2VLZXkgS2V5IG9mIHRoZSBsb2NhbHN0b3JhZ2UgaXRlbVxuICovXG4gIGFkZFRlbXBvcmFyeVN0b3JhZ2VFbnRyeShzdG9yYWdlS2V5OiBzdHJpbmcpIHtcbiAgICAvLyBlbnRyaWVzIHdpbGwgdGhlbXNlbHZlcyBiZSBzdG9yZWQgaW4gbG9jYWxzdG9yYWdlIHNvIHdlIGNhbiBjaGVjayBmb3IgZW50cmllc1xuICAgIC8vIHRvIGJlIHJlbW92ZWQgb25jZSB0aGUgYXBwbGljYXRpb24gc3RhcnRzXG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuX2dldFRlbXBvcmFyeVN0b3JhZ2VFbnRyaWVzKCk7XG4gICAgaWYgKCFjdXJyZW50LmluY2x1ZGVzKHN0b3JhZ2VLZXkpKVxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5URU1QX1NUT1JBR0VfRU5UUklFU19LRVksIEpTT04uc3RyaW5naWZ5KFsuLi5jdXJyZW50LCBzdG9yYWdlS2V5XSkpXG4gIH1cblxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBsYXRlc3QgZm9ybSBlbGVtZW50IGNoYW5nZXMgd2l0aCB0aGUgcHJvdmlkZWQgdmFsdWUuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIG1lcmdlcyB0aGUgY3VycmVudCBmb3JtIGVsZW1lbnQgY2hhbmdlcyB3aXRoIHRoZSBuZXcgdmFsdWVcbiAgICogYW5kIGVtaXRzIHRoZSB1cGRhdGVkIGNoYW5nZXMgdG8gdGhlIGBfbGF0ZXN0Rm9ybUVsZW1lbnRDaGFuZ2VzYCBzdWJqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge1NlYXJjaFBhcmFtc30gdmFsdWUgLSBUaGUgbmV3IGZvcm0gZWxlbWVudCBjaGFuZ2VzIHRvIGJlIG1lcmdlZC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICB1cGRhdGVGb3JtRWxlbWVudENoYW5nZXModmFsdWU6IFNlYXJjaFBhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRDaGFuZ2VzID0gdGhpcy5fbGF0ZXN0Rm9ybUVsZW1lbnRDaGFuZ2VzLnZhbHVlO1xuICAgIGNvbnN0IHVwZGF0ZWRDaGFuZ2VzID0gey4uLmN1cnJlbnRDaGFuZ2VzLCAuLi52YWx1ZX07XG4gICAgdGhpcy5fbGF0ZXN0Rm9ybUVsZW1lbnRDaGFuZ2VzLm5leHQodXBkYXRlZENoYW5nZXMpO1xuICB9XG5cbiAgLy8gUmVjdXJzaXZlIG1ldGhvZCB0byBnZXQgdGhlIHZhbHVlcyBmcm9tIGVhY2ggZm9ybSBjb250cm9sLlxuICBwcml2YXRlIGdldEVsZW1lbnRWYWx1ZXMoZGF0YTogYW55LCBmb3JtQ29udHJvbDogT2JqZWN0Rm9ybU1vZGVsLCBzaXR1YXRpb246IHN0cmluZywgaW5pdGlhbERhdGE/OiBhbnksIGlzVGFibGVSb3dFZGl0Rm9ybT86IGJvb2xlYW4pIHtcblxuICAgIGlmICghZm9ybUNvbnRyb2wgfHwgIWZvcm1Db250cm9sLmNvbnRyb2xzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZvcm1Db250cm9sIGluc3RhbmNlb2YgT2JqZWN0Rm9ybUNvbnRyb2xXcmFwcGVyKSB7XG5cbiAgICAgIGNvbnN0IGZjOiBhbnkgPSBmb3JtQ29udHJvbC5jb250cm9sc1tmb3JtQ29udHJvbC5fZW9Gb3JtQ29udHJvbFdyYXBwZXIuY29udHJvbE5hbWVdO1xuXG4gICAgICBpZiAoZmMuX2VvRm9ybUVsZW1lbnQuaXNOb3RTZXRWYWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAvLyBmb3JtIGVsZW1lbnRzIG1heSBleHBsaWNpdGx5IHNldCB0byBoYXZlIE5VTEwgdmFsdWUgKGUuZy4gZnJvbSBTZWFyY2ggZm9ybSBpZiB2YWx1ZXMgYXJlIHJlcXVlc3RlZCB0aGF0IGhhdmUgbm8gdmFsdWVzKVxuICAgICAgICBpZiAoaXNUYWJsZVJvd0VkaXRGb3JtKSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhVmFsdWUoZmMuX2VvRm9ybUVsZW1lbnQubmFtZSwgbnVsbCwgZGF0YSwgZmMuX2VvRm9ybUVsZW1lbnQsIGlzVGFibGVSb3dFZGl0Rm9ybSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhVmFsdWUoZmMuX2VvRm9ybUVsZW1lbnQucW5hbWUsIG51bGwsIGRhdGEsIGZjLl9lb0Zvcm1FbGVtZW50LCBpc1RhYmxlUm93RWRpdEZvcm0pO1xuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSBpZiAoZmMudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdmFsID0gZmMudmFsdWU7XG5cbiAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgbWV0YSBkYXRhIGFyZSBhbHNvIHVwIHRvIGRhdGVcbiAgICAgICAgaWYgKGZjLl9lb0Zvcm1FbGVtZW50LnR5cGUgPT09ICdDT0RFU1lTVEVNJykge1xuICAgICAgICAgIGNvbnN0IGNzID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldENvZGVzeXN0ZW0oZmMuX2VvRm9ybUVsZW1lbnQuY29kZXN5c3RlbS5pZCk7XG4gICAgICAgICAgZmMuX2VvRm9ybUVsZW1lbnQuZGF0YU1ldGEgPSBjcy5lbnRyaWVzLmZpbmQoZSA9PiBlLmRhdGEgPT09IHZhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKHNpdHVhdGlvbikge1xuICAgICAgICAgIGNhc2UgJ1NFQVJDSCc6IHtcbiAgICAgICAgICAgIGlmICh2YWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gcm93IGVkaXRpbmcgZm9ybXMgdXNlIHRoZSBuYW1lIGluc3RlYWQgb2YgdGhlIHFuYW1lIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZVxuICAgICAgICAgICAgICAvLyB0YWJsZXMgZ3JpZCBpc24ndCBhYmxlIHRvIG1hcCB0aGUgZmllbGRzXG4gICAgICAgICAgICAgIGlmICghaXNUYWJsZVJvd0VkaXRGb3JtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhVmFsdWUoZmMuX2VvRm9ybUVsZW1lbnQucW5hbWUsIHZhbCwgZGF0YSwgZmMuX2VvRm9ybUVsZW1lbnQsIGlzVGFibGVSb3dFZGl0Rm9ybSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFWYWx1ZShmYy5fZW9Gb3JtRWxlbWVudC5uYW1lLCB2YWwsIGRhdGEsIGZjLl9lb0Zvcm1FbGVtZW50LCBpc1RhYmxlUm93RWRpdEZvcm0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdDUkVBVEUnOiB7XG4gICAgICAgICAgICAvLyBhbHNvIGFkZCBOVUxMIHZhbHVlcyAob3ZlcnJpZGUgZXhpc3RpbmcgZGVmYXVsdHZhbHVlcylcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YVZhbHVlKGZjLl9lb0Zvcm1FbGVtZW50Lm5hbWUsIHZhbCwgZGF0YSwgZmMuX2VvRm9ybUVsZW1lbnQsIGlzVGFibGVSb3dFZGl0Rm9ybSlcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdFRElUJzoge1xuICAgICAgICAgICAgLy8gaW4gZWRpdCBzaXR1YXRpb24gd2UgaGF2ZSB0byBjb21wYXJlIG5ldyB2YWx1ZXMgYWdhaW5zdCB0aGUgaW5pdGlhbCB2YWx1ZXNcbiAgICAgICAgICAgIC8vIElmIGEgcHJvcGVydHkgdGhhdCBpcyBjb250YWluZWQgaW4gdGhlIGZvcm1zIGluaXRpYWwgZGF0YSBpcyByZW1vdmVkIChlLmcuIHNldCB0byBudWxsKVxuICAgICAgICAgICAgLy8gdGhlbiB3ZSBoYXZlIHRvIHNldCB0aGlzIG51bGwgdmFsdWUsIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBzZXJ2ZXIgd2lsbCBpZ25vcmUgdGhlIGNoYW5nZXNcbiAgICAgICAgICAgIGlmICh2YWwgIT09IG51bGwgfHwgKGluaXRpYWxEYXRhICYmIGluaXRpYWxEYXRhW2ZjLl9lb0Zvcm1FbGVtZW50Lm5hbWVdICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgIC8vIGRhdGFbZmMuX2VvRm9ybUVsZW1lbnQubmFtZV0gPSB2YWw7XG4gICAgICAgICAgICAgIHRoaXMuc2V0RGF0YVZhbHVlKGZjLl9lb0Zvcm1FbGVtZW50Lm5hbWUsIHZhbCwgZGF0YSwgZmMuX2VvRm9ybUVsZW1lbnQsIGlzVGFibGVSb3dFZGl0Rm9ybSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBPYmplY3Qua2V5cyhmb3JtQ29udHJvbC5jb250cm9scylcbiAgICAgICAgLmZvckVhY2goY29udHJvbEtleSA9PiB7XG4gICAgICAgICAgbGV0IGZvcm1Db250cm9sS2V5ZWQgPSA8T2JqZWN0Rm9ybUdyb3VwPmZvcm1Db250cm9sLmNvbnRyb2xzW2NvbnRyb2xLZXldO1xuICAgICAgICAgIHRoaXMuZ2V0RWxlbWVudFZhbHVlcyhkYXRhLCBmb3JtQ29udHJvbEtleWVkLCBzaXR1YXRpb24sIGluaXRpYWxEYXRhLCBpc1RhYmxlUm93RWRpdEZvcm0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldERhdGFWYWx1ZShrZXksIHZhbHVlLCBkYXRhLCBmb3JtRWxlbWVudCwgaXNUYWJsZVJvd0VkaXRGb3JtKSB7XG4gICAgZGF0YVtrZXldID0gdGhpcy5mb3JtYXRWYWx1ZSh2YWx1ZSwgZm9ybUVsZW1lbnQpO1xuXG4gICAgaWYgKGlzVGFibGVSb3dFZGl0Rm9ybSAmJiBmb3JtRWxlbWVudC5kYXRhTWV0YSkge1xuICAgICAgLy8gaW5uZXIgdGFibGVzIG5lZWQgdG8gc2V0IHVwIHRoZSBtZXRhIGRhdGEgYXMgd2VsbFxuICAgICAgZGF0YVtrZXkgKyAnX21ldGEnXSA9IGZvcm1FbGVtZW50LmRhdGFNZXRhO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdFZhbHVlKHZhbHVlLCBmb3JtRWxlbWVudCkge1xuICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnREFURVRJTUUnICYmICFmb3JtRWxlbWVudC53aXRodGltZSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUuZ2V0VGltZSgpKSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCAneXl5eS1NTS1kZCcpO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJhbmdlVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZVZhbHVlKFxuICAgICAgICAgIHZhbHVlLm9wZXJhdG9yLFxuICAgICAgICAgIHZhbHVlLmZpcnN0VmFsdWUgJiYgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUuZmlyc3RWYWx1ZSwgJ3l5eXktTU0tZGQnKSxcbiAgICAgICAgICB2YWx1ZS5zZWNvbmRWYWx1ZSAmJiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZS5zZWNvbmRWYWx1ZSwgJ3l5eXktTU0tZGQnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnVEFCTEUnKSB7XG4gICAgICAoZm9ybUVsZW1lbnQuZWxlbWVudHMgfHwgW10pLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAodmFsdWUgfHwgW10pLmZvckVhY2godiA9PiB2W2VsLm5hbWVdID0gdGhpcy5mb3JtYXRWYWx1ZSh2W2VsLm5hbWVdLCBlbCkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG5cbiAgLy8gRnVuY3Rpb25zIGludm9sdmVkIGluIGJ1aWxkaW5nIGFuIG9iamVjdCBmb3JtXG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZSBtZXRob2QgYWRkaW5nIGEgbmV3IFVudHlwZWRGb3JtQ29udHJvbCAoZ3JvdXAgb3IgY29udHJvbCkgdG8gYSBwYXJlbnQgZm9ybSBncm91cFxuICAgKlxuICAgKiBAcGFyYW0gcGFyZW50R3JvdXAgLSB0aGUgcGFyZW50IGdyb3VwIHRvIGFkZCB0aGUgY29udHJvbCB0b1xuICAgKiBAcGFyYW0gZm9ybUVsZW1lbnQgLSB0aGUgZW5haW8gZm9ybSBtb2RlbCBlbGVtZW50IHRvIGNyZWF0ZSB0aGUgY2hpbGQgY29udHJvbCBmcm9tXG4gICAqIEBwYXJhbSBbdXNlTmFtZV0gLSB1c2UgdGhpcyBuYW1lIGluc3RlYWQgb2YgdGhlIG9uZSBmcm9tIHRoZSBtb2RlbFxuICAgKi9cbiAgcHJpdmF0ZSBfYWRkRm9ybUNvbnRyb2woc2NvcGU6IEZvcm1HZW5TY29wZSwgcGFyZW50R3JvdXA6IE9iamVjdEZvcm1Hcm91cCwgZm9ybUVsZW1lbnQ6IGFueSwgdXNlTmFtZT86IHN0cmluZykge1xuXG4gICAgbGV0IGN0cmw7XG4gICAgbGV0IG5hbWU7XG5cbiAgICAvLyBhZGQgYSBmb3JtIGdyb3VwXG4gICAgaWYgKGZvcm1FbGVtZW50LnR5cGUgPT09ICdvMm1Hcm91cCcgfHwgZm9ybUVsZW1lbnQudHlwZSA9PT0gJ28ybUdyb3VwU3RhY2snKSB7XG5cbiAgICAgIC8vIGRvIG5vdCBhZGQgZ3JvdXBzIHRoYXQgYXJlIGVtcHR5XG4gICAgICBpZiAoIWZvcm1FbGVtZW50LmVsZW1lbnRzIHx8IGZvcm1FbGVtZW50LmVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRm91bmQgZW1wdHkgZm9ybSBncm91cCcsIGZvcm1FbGVtZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjdHJsID0gbmV3IE9iamVjdEZvcm1Hcm91cCh7fSk7XG4gICAgICBjdHJsLl9lb0Zvcm1Hcm91cCA9IHtcbiAgICAgICAgbGFiZWw6IGZvcm1FbGVtZW50LmxhYmVsLFxuICAgICAgICBsYXlvdXQ6IGZvcm1FbGVtZW50LmxheW91dCxcbiAgICAgICAgdHlwZTogZm9ybUVsZW1lbnQudHlwZVxuICAgICAgfTtcblxuICAgICAgaWYgKHVzZU5hbWUgPT09ICdjb3JlJyB8fCB1c2VOYW1lID09PSAnZGF0YScpIHtcbiAgICAgICAgY3RybC5fZW9Gb3JtR3JvdXAubGFiZWwgPSB1c2VOYW1lO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBlIG9mIGZvcm1FbGVtZW50LmVsZW1lbnRzKSB7XG4gICAgICAgIHRoaXMuX2FkZEZvcm1Db250cm9sKHNjb3BlLCBjdHJsLCBlKTtcbiAgICAgIH1cbiAgICAgIG5hbWUgPSB1c2VOYW1lIHx8ICdmZycgKyBzY29wZS5nQ291bnQrKztcbiAgICAgIGN0cmwuX2VvRm9ybUdyb3VwLmlkID0gYCR7c2NvcGUuZm9ybU9wdGlvbnMubGF5b3V0U2V0dGluZ3NJRCB8fCBzY29wZS5mb3JtT3B0aW9ucy5mb3JtTW9kZWwubmFtZX0uJHtuYW1lfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGFkZCBmb3JtIGNvbnRyb2xcbiAgICAgIC8vIFRvIGJlIGFibGUgdG8gaW50ZWdyYXRlIHJlY3Vyc2l2ZSBmb3JtIGNvbnRyb2xzIGludG8gdGhlIG1haW4gZm9ybSxcbiAgICAgIC8vIHdlIGhhdmUgdG8gd3JhcCB0aGVtIGluIGEgZm9ybSBncm91cFxuICAgICAgY3RybCA9IG5ldyBPYmplY3RGb3JtQ29udHJvbFdyYXBwZXIoe30pO1xuICAgICAgY3RybC5fZW9Gb3JtQ29udHJvbFdyYXBwZXIgPSB7XG4gICAgICAgIC8vIHRoZSBuYW1lIG9mIHRoZSB3cmFwcGVkIFVudHlwZWRGb3JtQ29udHJvbFxuICAgICAgICBjb250cm9sTmFtZTogZm9ybUVsZW1lbnQubmFtZSxcbiAgICAgICAgc2l0dWF0aW9uOiBzY29wZS5mb3JtT3B0aW9ucy5mb3JtTW9kZWwuc2l0dWF0aW9uXG4gICAgICB9O1xuICAgICAgaWYgKHNjb3BlLmZvcm1PcHRpb25zLmZvcm1Nb2RlbC5zaXR1YXRpb24gPT09ICdTRUFSQ0gnICYmIGZvcm1FbGVtZW50LnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIGZvcm1FbGVtZW50LmlzTm90U2V0VmFsdWUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgLy8gZG8gbm90IHNldCBhIHJlZmVyZW5jZSBhcyB0aGUgZm9ybSBjb250cm9scyB2YWx1ZVxuICAgICAgLy8gb3RoZXJ3aXNlIHdlIGNvdWxkIG5vdCByZXNldCB0aGUgZm9ybVxuICAgICAgbGV0IHZhbHVlOiBhbnk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShmb3JtRWxlbWVudC52YWx1ZSkpIHtcbiAgICAgICAgLy8gY29weSBieSB2YWx1ZSBmb3IgYXJyYXlzIG9mIG9iamVjdHMgKGUuZy4gdGFibGUgZGF0YSlcbiAgICAgICAgdmFsdWUgPSBbXTtcbiAgICAgICAgZm9ybUVsZW1lbnQudmFsdWUuZm9yRWFjaCgobykgPT4ge1xuICAgICAgICAgIHZhbHVlLnB1c2goVXRpbHMuZm9ybURhdGFQYXJzZShVdGlscy5mb3JtRGF0YVN0cmluZ2lmeShvKSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gZm9ybUVsZW1lbnQudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGZvciBjb2Rlc3lzdGVtIGVsZW1lbnRzIGFkZCBlbnRyaWVzIGlmIG5vdCB5ZXQgcHJvdmlkZWRcbiAgICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnQ09ERVNZU1RFTScgJiYgIWZvcm1FbGVtZW50LmNvZGVzeXN0ZW0uZW50cmllcykge1xuICAgICAgICBmb3JtRWxlbWVudC5jb2Rlc3lzdGVtID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldENvZGVzeXN0ZW0oZm9ybUVsZW1lbnQuY29kZXN5c3RlbS5pZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGNyZWF0ZSB0aGUgYWN0dWFsIGZvcm0gY29udHJvbFxuICAgICAgbGV0IGNvbnRyb2xEaXNhYmxlZCA9IHNjb3BlLmZvcm1PcHRpb25zLmRpc2FibGVkIHx8ICEhZm9ybUVsZW1lbnQucmVhZG9ubHk7XG4gICAgICBsZXQgZm9ybUNvbnRyb2wgPSBuZXcgT2JqZWN0Rm9ybUNvbnRyb2woe1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGRpc2FibGVkOiBjb250cm9sRGlzYWJsZWRcbiAgICAgIH0pO1xuXG4gICAgICBmb3JtRWxlbWVudC5yZWFkb25seSA9IGNvbnRyb2xEaXNhYmxlZDtcblxuICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQgPSBmb3JtRWxlbWVudDtcbiAgICAgIHNjb3BlLmZvcm1HZW5SZXN1bHQuZm9ybUNvbnRyb2xzW2Zvcm1FbGVtZW50Lm5hbWVdID0gZm9ybUNvbnRyb2w7XG5cbiAgICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnQ09ERVNZU1RFTScgfHwgKGZvcm1FbGVtZW50LnR5cGUgPT09ICdTVFJJTkcnICYmIGZvcm1FbGVtZW50LmNsYXNzaWZpY2F0aW9uID09PSAnc2VsZWN0b3InKSkge1xuICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5hcHBseUZpbHRlciA9IChmdW5jOiBGdW5jdGlvbikgPT4ge1xuICAgICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LmZpbHRlckZ1bmN0aW9uID0gZnVuYztcbiAgICAgICAgfTtcbiAgICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQuYXBwbHlEaXNhYmxpbmdGaWx0ZXIgPSAoZnVuYzogRnVuY3Rpb24pID0+IHtcbiAgICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5kaXNhYmxpbmdGaWx0ZXJGdW5jdGlvbiA9IGZ1bmM7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnU1RSSU5HJyAmJiBmb3JtRWxlbWVudC5jbGFzc2lmaWNhdGlvbiA9PT0gJ3NlbGVjdG9yJykge1xuICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5zZXRMaXN0ID0gKGxpc3RPYmplY3Q6IGFueSkgPT4ge1xuICAgICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50Lmxpc3QgPSBsaXN0T2JqZWN0O1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybUVsZW1lbnQudHlwZSA9PT0gJ09SR0FOSVpBVElPTicpIHtcbiAgICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQuc2V0RmlsdGVyID0gKGZpbHRlck9iamVjdDogYW55KSA9PiB7XG4gICAgICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQuZmlsdGVyID0gZmlsdGVyT2JqZWN0O1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybUVsZW1lbnQudHlwZSA9PT0gJ1RBQkxFJykge1xuICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5vYmplY3QgPSBzY29wZS5mb3JtT3B0aW9ucy5vYmplY3Q7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnUkVGRVJFTkNFJykge1xuICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5zZXRRdWVyeUZpbHRlcnMgPSAocXVlcnlGaWx0ZXJzT2JqZWN0OiB7W2ZpZWxkUW5hbWU6IHN0cmluZ106IHtvOiBzdHJpbmcsIHYxOiBhbnksIHYyOiBhbnl9fSwgb2JqZWN0VHlwZXM/OiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LnF1ZXJ5RmlsdGVycyA9IHF1ZXJ5RmlsdGVyc09iamVjdDtcbiAgICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5vYmplY3RUeXBlc0ZpbHRlciA9IG9iamVjdFR5cGVzO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoc2NvcGUuZm9ybU9wdGlvbnMuZm9ybU1vZGVsLnNpdHVhdGlvbiA9PT0gJ1NFQVJDSCcpIHtcbiAgICAgICAgLy8gaW4gc2VhcmNoIHNpdHVhdGlvbiBldmVuIHJlYWRvbmx5IGZpZWxkcyBzaG91bGQgYmUgZWRpdGFibGUgLi4uXG4gICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LnJlYWRvbmx5ID0gZmFsc2U7XG4gICAgICAgIC8vIC4uLiBhbmQgcmVxdWlyZWQgbWFrZXMgbm8gc2Vuc2UgaGVyZVxuICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5yZXF1aXJlZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyByZW1vdmUgZW1wdHkgZGVzY3JpcHRpb25zXG4gICAgICBsZXQgZGVzYyA9IGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LmRlc2NyaXB0aW9uO1xuICAgICAgaWYgKGRlc2MgJiYgZGVzYy50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LmRlc2NyaXB0aW9uID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gYWRkIHRoZSBmb3JtIGVsZW1lbnQgdG8gdGhlIHNjcmlwdCBtb2RlbCB0aGF0IHdpbGwgYmUgaW5qZWN0ZWQgaW50b1xuICAgICAgLy8gdGhlIGZvcm1zIHNjcmlwdGluZyBzY29wZSBsYXRlciBvblxuICAgICAgc2NvcGUuZm9ybUdlblJlc3VsdC5zY3JpcHRNb2RlbFtmb3JtRWxlbWVudC5uYW1lXSA9IGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50O1xuXG4gICAgICAvLyBhcHBseSBjaGFuZ2UgbGlzdGVuZXIgdG8gdGhlIGZvcm0gY29udHJvbCwgdGhhdCB3aWxsIHRyaWdnZXJcbiAgICAgIC8vIHRoZSBmb3JtIGVsZW1lbnRzIG9uQ2hhbmdlIGxpc3RlbmVyXG4gICAgICBsZXQgY29udHJvbFdhdGNoID0gY3RybC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoZm9ybUVsZW1lbnQudHlwZSA9PT0gJ1RBQkxFJyA/IDAgOiA1MDApKTtcbiAgICAgIGNvbnRyb2xXYXRjaC5zdWJzY3JpYmUoKHYpID0+IHtcbiAgICAgICAgaWYgKGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LnR5cGUgPT09ICdSRUZFUkVOQ0UnKSB7XG4gICAgICAgICAgdGhpcy5fZ2V0RGF0YU1ldGEoZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQsIHZbZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQubmFtZV0pLnN1YnNjcmliZShtID0+IHtcbiAgICAgICAgICAgIGlmIChtKSB7XG4gICAgICAgICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LmRhdGFNZXRhID0gZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQubXVsdGlzZWxlY3QgPyBtIDogbVswXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5kYXRhTWV0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlRm9ybUVsZW1lbnRDaGFuZ2VzKHYpO1xuXG4gICAgICAgIGlmIChzY29wZS5mb3JtR2VuUmVzdWx0LnNjcmlwdGluZ1Njb3BlKSB7XG4gICAgICAgICAgc2NvcGUuZm9ybUdlblJlc3VsdC5zY3JpcHRpbmdTY29wZS5tb2RlbENoYW5nZWQodik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgc2NvcGUuZm9ybUdlblJlc3VsdC5jb250cm9sVmFsdWVTdWJzY3JpcHRpb25zLnB1c2goY29udHJvbFdhdGNoKTtcblxuICAgICAgY3RybC5hZGRDb250cm9sKGZvcm1FbGVtZW50Lm5hbWUsIGZvcm1Db250cm9sKTtcbiAgICAgIG5hbWUgPSAnZmdfJyArIGZvcm1FbGVtZW50Lm5hbWU7XG4gICAgfVxuICAgIHBhcmVudEdyb3VwLmFkZENvbnRyb2wobmFtZSwgY3RybCk7XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2UgZGF0YSBpbnRvIGEgZm9ybSBtb2RlbC5cbiAgICpcbiAgICogQHBhcmFtIG1vZGVsIC0gZm9ybSBtb2RlbFxuICAgKiBAcGFyYW0gZGF0YSAtIGRhdGEgb2JqZWN0IG9yIGFycmF5IG9mIFNlYXJjaEZpbHRlciBvYmplY3RzIGluIGNhc2Ugb2YgYSBzZWFyY2ggZm9ybVxuICAgKi9cbiAgcHJpdmF0ZSBfZGF0YVRvRm9ybShzY29wZTogRm9ybUdlblNjb3BlLCBtb2RlbDogYW55LCBkYXRhOiBhbnkpIHtcbiAgICBpZiAobW9kZWwgJiYgZGF0YSkge1xuICAgICAgdGhpcy5fc2V0RWxlbWVudFZhbHVlcyhzY29wZSwgbW9kZWwuZWxlbWVudHMsIGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gbW9kZWw7XG4gIH1cblxuICAvLyByZWN1cnNpdmUgbWV0aG9kIGZvciBhZGRpbmcgdmFsdWVzIHRvIG1vZGVsIGVsZW1lbnRzXG4gIHByaXZhdGUgX3NldEVsZW1lbnRWYWx1ZXMoc2NvcGU6IEZvcm1HZW5TY29wZSwgZWxlbWVudHMsIGRhdGEpIHtcblxuICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICBpZiAodGhpcy5faGFzVmFsdWUoZGF0YSwgZWxlbWVudCkpIHtcblxuICAgICAgICBlbGVtZW50LnZhbHVlID0gdGhpcy5fZ2V0VmFsdWUoc2NvcGUsIGRhdGEsIGVsZW1lbnQpO1xuICAgICAgICBpZiAoZWxlbWVudC52YWx1ZSkge1xuICAgICAgICAgIC8vIGFkZCBtZXRhIGRhdGEgZm9yIHNvbWUgb2YgdGhlIHR5cGVzXG4gICAgICAgICAgdGhpcy5fZmV0Y2hNZXRhRGF0YShzY29wZSwgZGF0YSwgZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSBlbGVtZW50LnZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKGVsZW1lbnQudHlwZSAhPT0gJ1RBQkxFJyAmJiBlbGVtZW50LmVsZW1lbnRzICYmIGVsZW1lbnQuZWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLl9zZXRFbGVtZW50VmFsdWVzKHNjb3BlLCBlbGVtZW50LmVsZW1lbnRzLCBkYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIGluIHNvbWUgY2FzZXMgcmVxdWlyZWQgbWV0YSBkYXRhIG1heSBub3QgYmUgYXZhaWxhYmxlIG9uIHRoZSBlbGVtZW50IGl0c2VsZlxuICAvLyBzbyB0aGV5IGhhdmUgdG8gYmUgZmV0Y2hlZCBhbmQgYWRkZWQgdG8gdGhlIGVsZW1lbnQgZm9yIHRoZSBmb3JtIHRvIGJlIGFibGVcbiAgLy8gdG8gcmVuZGVyIHRoZSBlbGVtZW50IGNvcnJlY3RseVxuICBwcml2YXRlIF9mZXRjaE1ldGFEYXRhKHNjb3BlOiBGb3JtR2VuU2NvcGUsIGRhdGEsIGVsZW1lbnQpIHtcblxuICAgIGlmIChzY29wZS5mb3JtT3B0aW9ucy5mb3JtTW9kZWwuc2l0dWF0aW9uID09PSAnU0VBUkNIJykge1xuICAgICAgLy8gdG9kbzogaG93IHRvIGZldGNoIG1ldGEgZGF0YSBpbiBzZWFyY2ggc2l0dWF0aW9uXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdPUkdBTklaQVRJT04nICYmIGRhdGFbZWxlbWVudC5uYW1lICsgJ19tZXRhJ10pIHtcbiAgICAgICAgZWxlbWVudC5kYXRhTWV0YSA9IGRhdGFbZWxlbWVudC5uYW1lICsgJ19tZXRhJ107XG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ0NPREVTWVNURU0nICYmIGRhdGFbZWxlbWVudC5uYW1lICsgJ19tZXRhJ10pIHtcbiAgICAgICAgZWxlbWVudC5kYXRhTWV0YSA9IGRhdGFbZWxlbWVudC5uYW1lICsgJ19tZXRhJ107XG4gICAgICAgIGVsZW1lbnQuZGVmYXVsdHJlcHJlc2VudGF0aW9uID0gZGF0YVtlbGVtZW50Lm5hbWUgKyAnX21ldGEnXS5kZWZhdWx0cmVwcmVzZW50YXRpb247XG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ1JFRkVSRU5DRScgJiYgZGF0YVtlbGVtZW50Lm5hbWUgKyAnX21ldGEnXSkge1xuICAgICAgICBlbGVtZW50LmRhdGFNZXRhID0gZGF0YVtlbGVtZW50Lm5hbWUgKyAnX21ldGEnXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXREYXRhTWV0YShmb3JtRWxlbWVudDogYW55LCBuZXdWYWx1ZTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgIGlmIChuZXdWYWx1ZSkge1xuICAgICAgc3dpdGNoIChmb3JtRWxlbWVudC50eXBlKSB7XG4gICAgICAgIGNhc2UgJ09SR0FOSVpBVElPTic6IHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5ld1ZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3lzdGVtU2VydmljZS5nZXRPcmdhbml6YXRpb25PYmplY3QobmV3VmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmV3VmFsdWUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9yZ2FuaXphdGlvbk9iamVjdChuZXdWYWx1ZVswXSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXdWYWx1ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9yZ2FuaXphdGlvbk9iamVjdHMobmV3VmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdSRUZFUkVOQ0UnOiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlU2VydmljZS5mZXRjaElEUmVmZXJlbmNlTWV0YURhdGEoQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkgPyBuZXdWYWx1ZSA6IFtuZXdWYWx1ZV0pO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0NPREVTWVNURU0nOiB7XG4gICAgICAgICAgcmV0dXJuIG9mKHRoaXMuc3lzdGVtU2VydmljZS5nZXRDb2Rlc3lzdGVtKGZvcm1FbGVtZW50LmNvZGVzeXN0ZW0uaWQpLmVudHJpZXMuZmluZCgoZW50cnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBlbnRyeS5kZWZhdWx0cmVwcmVzZW50YXRpb24gPT09IG5ld1ZhbHVlO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIF9oYXNWYWx1ZShkYXRhLCBlbGVtZW50KSB7XG5cbiAgICAvLyBkaWZmZXIgYmV0d2VlbiBhcnJheSBvZiBTZWFyY2hGaWx0ZXJzIGFuZCBhIGZvcm0gZGF0YSBvYmplY3RcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ1RBQkxFJykge1xuICAgICAgICByZXR1cm4gISEoZGF0YS5maW5kKChmaWx0ZXIpID0+IGZpbHRlci5wcm9wZXJ0eS5zdGFydHNXaXRoKGVsZW1lbnQucW5hbWUpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gISEoZGF0YS5maW5kKChmaWx0ZXIpID0+IGZpbHRlci5wcm9wZXJ0eSA9PT0gZWxlbWVudC5xbmFtZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGF0YS5oYXNPd25Qcm9wZXJ0eShlbGVtZW50Lm5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldFZhbHVlKHNjb3BlOiBGb3JtR2VuU2NvcGUsIGRhdGEsIGVsZW1lbnQpIHtcblxuICAgIGxldCB2YWx1ZTtcbiAgICBpZiAoc2NvcGUuZm9ybU9wdGlvbnMuZm9ybU1vZGVsLnNpdHVhdGlvbiA9PT0gJ1NFQVJDSCcpIHtcbiAgICAgIGlmIChzY29wZS5pc0lubmVyVGFibGVGb3JtKSB7XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdEQVRFVElNRScgfHwgZWxlbWVudC50eXBlID09PSAnTlVNQkVSJykge1xuICAgICAgICAgIHZhbHVlID0gU2VhcmNoU2VydmljZS50b1JhbmdlVmFsdWUoZGF0YVtlbGVtZW50Lm5hbWVdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IGRhdGFbZWxlbWVudC5uYW1lXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnR5cGUgPT09ICdUQUJMRScpIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLnNlYXJjaFNlcnZpY2UudGFibGVGaWx0ZXJzVG9FbGVtZW50VmFsdWUodGhpcy5fZ2V0VGFibGVGaWx0ZXJzKGRhdGEsIGVsZW1lbnQucW5hbWUpLCBlbGVtZW50LmVsZW1lbnRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IGRhdGEuZmluZChmID0+IGYucHJvcGVydHkgPT09IGVsZW1lbnQucW5hbWUpO1xuICAgICAgICB2YWx1ZSA9IHRoaXMuc2VhcmNoU2VydmljZS5maWx0ZXJUb0VsZW1lbnRWYWx1ZShmaWx0ZXIsIGVsZW1lbnQudHlwZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcblxuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ0RBVEVUSU1FJyAmJiBkYXRhW2VsZW1lbnQubmFtZV0pIHtcbiAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZShgJHtkYXRhW2VsZW1lbnQubmFtZV19JHsodHlwZW9mIGRhdGFbZWxlbWVudC5uYW1lXSA9PT0gJ3N0cmluZycgPyBkYXRhW2VsZW1lbnQubmFtZV0uaW5kZXhPZignVCcpIDogZGF0YVtlbGVtZW50Lm5hbWVdLnRvSVNPU3RyaW5nKCkuaW5kZXhPZignVCcpKSAhPT0gLTEgPyAnJyA6ICdUMDA6MDA6MDAnfWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBkYXRhW2VsZW1lbnQubmFtZV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFRhYmxlRmlsdGVycyhmaWx0ZXJzOiBTZWFyY2hGaWx0ZXJbXSwgcHJvcGVydHlOYW1lOiBzdHJpbmcpOiBTZWFyY2hGaWx0ZXJbXSB7XG4gICAgcmV0dXJuIGZpbHRlcnMuZmlsdGVyKGYgPT4gZi5wcm9wZXJ0eS5zdGFydHNXaXRoKHByb3BlcnR5TmFtZSArICcuJykpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdFZhbGlkYXRvcnMoZm9ybUNvbnRyb2w6IE9iamVjdEZvcm1Hcm91cCwgc2NvcGU6IEZvcm1HZW5TY29wZSkge1xuICAgIGlmIChmb3JtQ29udHJvbCkge1xuICAgICAgZm9yIChsZXQga2V5IGluIGZvcm1Db250cm9sLmNvbnRyb2xzKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtQ29udHJvbC5jb250cm9sc1trZXldIGFzIGFueTtcbiAgICAgICAgaWYgKGNvbnRyb2wuY29udHJvbHMpIHtcbiAgICAgICAgICB0aGlzLl9pbml0VmFsaWRhdG9ycyhjb250cm9sLCBzY29wZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2NvcGUuaW5pdGlhbFZhbGlkYXRvcnNbY29udHJvbC5fZW9Gb3JtRWxlbWVudC5uYW1lXSA9IGNvbnRyb2wudmFsaWRhdG9yO1xuICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLmNvbXBvc2UoXG4gICAgICAgICAgICB0aGlzLl9nZXRWYWxpZGF0b3JzKHNjb3BlLCBjb250cm9sLl9lb0Zvcm1FbGVtZW50KS5jb25jYXQoXG4gICAgICAgICAgICAgIFtzY29wZS5pbml0aWFsVmFsaWRhdG9yc1tjb250cm9sLl9lb0Zvcm1FbGVtZW50Lm5hbWVdXSlcbiAgICAgICAgICApKTtcbiAgICAgICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAqIEJ1aWxkIHZhbGlkYXRvcnMgZm9yIHRoZSBnaXZlbiBmb3JtIGVsZW1lbnQgdG8gYmUgYXR0YWNoZWQgdG9cbiAgKiBhIHJlYWN0aXZlIGZvcm1Db250cm9sLlxuICAqXG4gICogQHBhcmFtIGZvcm1FbGVtZW50IC0gZm9ybSBlbGVtZW50IG9iamVjdFxuICAqL1xuICBwcml2YXRlIF9nZXRWYWxpZGF0b3JzKHNjb3BlOiBGb3JtR2VuU2NvcGUsIGZvcm1FbGVtZW50OiBhbnkpOiBWYWxpZGF0b3JGbltdIHtcbiAgICBsZXQgZWxtVmFsaWRhdG9ycyA9IEZvcm1WYWxpZGF0aW9uLmdldFZhbGlkYXRvcnMoZm9ybUVsZW1lbnQsIHNjb3BlLmZvcm1PcHRpb25zLmZvcm1Nb2RlbC5zaXR1YXRpb24pO1xuICAgIC8vIGFkZCBjdXN0b20gdmFsaWRhdG9yIGZvciBzY3JpcHQgZW5hYmxlZCBmb3Jtc1xuICAgIGlmIChzY29wZS5mb3JtR2VuUmVzdWx0LnNjcmlwdGluZ1Njb3BlKSB7XG4gICAgICBlbG1WYWxpZGF0b3JzLnB1c2goRm9ybVZhbGlkYXRpb24uY3VzdG9tU2NyaXB0aW5nVmFsaWRhdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsbVZhbGlkYXRvcnM7XG4gIH1cblxuICBwcml2YXRlIF9pbml0U2NyaXB0aW5nU2NvcGUoc2NvcGU6IEZvcm1HZW5TY29wZSwgZm9ybVNjcmlwdFNlcnZpY2U6IE9iamVjdEZvcm1TY3JpcHRTZXJ2aWNlKSB7XG4gICAgbGV0IHtkYXRhLCBhY3Rpb25zLCBvYmplY3RzLCBjb250ZXh0fSA9IDxPYmplY3RGb3JtT3B0aW9ucz4oc2NvcGUuZm9ybU9wdGlvbnMgfHwge30pO1xuXG4gICAgaWYgKHNjb3BlLmZvcm1HZW5SZXN1bHQuc2NyaXB0aW5nU2NvcGUpIHtcbiAgICAgIHNjb3BlLmZvcm1HZW5SZXN1bHQuc2NyaXB0aW5nU2NvcGUuc2V0TW9kZWwoc2NvcGUuZm9ybUdlblJlc3VsdC5zY3JpcHRNb2RlbCk7XG4gICAgICAvKiogcHJvdmlkZSBhY2Nlc3MgdG8gYWN0aW9ucyAodXNlZCBpbnNpZGUgb2YgQlBNLUZvcm1zKSAqL1xuICAgICAgc2NvcGUuZm9ybUdlblJlc3VsdC5zY3JpcHRpbmdTY29wZS5hY3Rpb25zID0gYWN0aW9ucztcbiAgICAgIC8qKiBwcm92aWRlIGFjY2VzcyB0byBhZGRpdGlvbmFsIG9iamVjdHMgKHVzZWQgZm9yIGV4YW1wbGUgaW4gQlBNLVN0YXJ0LUZvcm1zIHRvXG4gICAgICAgKiBhZGQgZGF0YSBvZiBETVMtT2JqZWN0cyB0byBzdGFydCB0aGUgcHJvY2VzcyBmb3IpXG4gICAgICAgKi9cbiAgICAgIHNjb3BlLmZvcm1HZW5SZXN1bHQuc2NyaXB0aW5nU2NvcGUub2JqZWN0cyA9IG9iamVjdHM7XG4gICAgICBzY29wZS5mb3JtR2VuUmVzdWx0LnNjcmlwdGluZ1Njb3BlLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgLyoqIHByb3ZpZGUgcmVhZG9ubHkgYWNjZXNzIHRvIGluaXRpYWwgZm9ybSBkYXRhICh3aGljaCBtYXkgYWxzbyBjb250YWluIHZhbHVlcyB0aGF0XG4gICAgICAgKiBhcmUgbm90IHJlbmRlcmVkIGFzIGZvcm0gZWxlbWVudHMgKGludmlzaWJsZSB2YWx1ZXMpKVxuICAgICAgICovXG4gICAgICBzY29wZS5mb3JtR2VuUmVzdWx0LnNjcmlwdGluZ1Njb3BlLmRhdGEgPSBkYXRhO1xuXG4gICAgICAvKiogYnkgZGVmYXVsdCwgc2NyaXB0aW5nIHNjb3BlcyBhcmUgYXBwbGllZCB0byBmb3Jtcy4gQnV0IHRhYmxlIGVsZW1lbnRzIGNyZWF0ZSB0aGVpciBvd24gc2NvcGVcbiAgICAgICAqIGZvciBlZGl0aW5nIHJvd3MuIEJlaW5nIG9uZSBvZiB0aG9zZSBpbm5lciBmb3JtcyBzaG91bGQgbm90IHJ1biB0aGUgZm9ybSBzY3JpcHQgYWdhaW4sIGJ1dFxuICAgICAgICogaW5zdGVhZCBqdXN0IHByb3ZpZGUgdGhlIG9ic2VydmluZyBhYmlsaXRpZXMgb2YgdGhlIHNjcmlwdGluZyBzY29wZS5cbiAgICAgICAqL1xuICAgICAgaWYgKCFzY29wZS5mb3JtT3B0aW9ucy5kaXNhYmxlZCAmJiAhc2NvcGUuaXNJbm5lclRhYmxlRm9ybSAmJiBzY29wZS5mb3JtR2VuUmVzdWx0LmZvcm1Nb2RlbCkge1xuICAgICAgICBjb25zdCBzY3JpcHROYW1lID0gc2NvcGUuZm9ybUdlblJlc3VsdC5mb3JtTW9kZWwubmFtZSArICdfJyArIHNjb3BlLmZvcm1HZW5SZXN1bHQuZm9ybU1vZGVsLnNpdHVhdGlvbjtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ2V4ZWN1dGluZyBmb3JtIHNjcmlwdCAnICsgc2NyaXB0TmFtZSk7XG4gICAgICAgIGZvcm1TY3JpcHRTZXJ2aWNlLnJ1bkZvcm1TY3JpcHQoXG4gICAgICAgICAgc2NvcGUuZm9ybUdlblJlc3VsdC5zY3JpcHRpbmdTY29wZSxcbiAgICAgICAgICBzY29wZS5mb3JtR2VuUmVzdWx0LmZvcm1Nb2RlbC5zY3JpcHQsXG4gICAgICAgICAgc2NyaXB0TmFtZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGVhY2ggdGltZSB0aGUgc2NyaXB0IGNoYW5nZXMgaXRzIGludGVybmFsIG1vZGVsLlxuICAgICAqIEl0IGlzIHVzZWQgdG8gdHJhbnNmZXIgdGhlIHNjcmlwdCBjaGFuZ2VzIHRvIHRoZSBhY3R1YWwgZm9ybSBtb2RlbC5cbiAgICAgKlxuICAgICAqIFRvIGVuc3VyZSB0aGUgcmlnaHQgY29udGV4dCwgd2UgZGVmaW5lIGFuIGluc3RhbmNlIG1ldGhvZCBhcyBjYWxsYmFjayBmb3IgdGhlIHNjcmlwdGluZyBzY29wZVxuICAgICAqIEBzZWU6IGh0dHBzOi8vYmxvZy5qb2hubnlyZWlsbHkuY29tLzIwMTQvMDQvdHlwZXNjcmlwdC1pbnN0YW5jZS1tZXRob2RzLmh0bWxcbiAgICAgKlxuICAgICAqIEBwYXJhbSBmb3JtQ29udHJvbE5hbWVcbiAgICAgKiBAcGFyYW0gY2hhbmdlXG4gICAgICovXG5cbiAgcHJpdmF0ZSBfZ2V0U2NyaXB0aW5nTW9kZWxDaGFuZ2VkKHNjb3BlOiBGb3JtR2VuU2NvcGUpOiBGdW5jdGlvbiB7XG4gICAgcmV0dXJuIChmb3JtQ29udHJvbE5hbWUsIGNoYW5nZSkgPT4ge1xuXG4gICAgICAvLyBmaW5kIHRoZSB0YXJnZXQgY29udHJvbFxuICAgICAgbGV0IGZjOiBPYmplY3RGb3JtQ29udHJvbCA9IHNjb3BlLmZvcm1HZW5SZXN1bHQuZm9ybUNvbnRyb2xzW2Zvcm1Db250cm9sTmFtZV0gYXMgT2JqZWN0Rm9ybUNvbnRyb2w7XG4gICAgICBpZiAoZmMpIHtcblxuICAgICAgICAvLyBjaGFuZ2Ugb25seSBhbGxvd2VkIHByb3BlcnRpZXNcbiAgICAgICAgc3dpdGNoIChjaGFuZ2UubmFtZSkge1xuICAgICAgICAgIGNhc2UgJ3ZhbHVlJzoge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hhbmdlLm5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzQXJyYXlWYWx1ZUNoYW5nZShmYywgY2hhbmdlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZjLl9lb0Zvcm1FbGVtZW50LnZhbHVlID0gY2hhbmdlLm5ld1ZhbHVlO1xuICAgICAgICAgICAgICBpZiAoZmMudmFsdWUgIT09IGNoYW5nZS5uZXdWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGZjLnBhdGNoVmFsdWUoY2hhbmdlLm5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICBmYy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgICAgICAgICAgZmMubWFya0FzRGlydHkoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2NvcGUuZm9ybUdlblJlc3VsdC5mb3JtLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAncmVxdWlyZWQnOiB7XG4gICAgICAgICAgICBpZiAoZmMuX2VvRm9ybUVsZW1lbnQucmVxdWlyZWQgIT09IGNoYW5nZS5uZXdWYWx1ZSkge1xuICAgICAgICAgICAgICBmYy5fZW9Gb3JtRWxlbWVudC5yZXF1aXJlZCA9IGNoYW5nZS5uZXdWYWx1ZTtcbiAgICAgICAgICAgICAgLy8gYXBwbHkgbmV3IHZhbGlkYXRvcnNcbiAgICAgICAgICAgICAgLy8gQHNlZTogaHR0cHM6Ly9zY290Y2guaW8vdHV0b3JpYWxzL2hvdy10by1pbXBsZW1lbnQtY29uZGl0aW9uYWwtdmFsaWRhdGlvbi1pbi1hbmd1bGFyLTItbW9kZWwtZHJpdmVuLWZvcm1zXG4gICAgICAgICAgICAgIGZjLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5jb21wb3NlKHRoaXMuX2dldFZhbGlkYXRvcnMoc2NvcGUsIGZjLl9lb0Zvcm1FbGVtZW50KS5jb25jYXQoW3Njb3BlLmluaXRpYWxWYWxpZGF0b3JzW2ZjLl9lb0Zvcm1FbGVtZW50Lm5hbWVdXSkpKTtcbiAgICAgICAgICAgICAgLy8gbmVlZCB0byBtYXJrIGZvcm0gY29udHJvbCBhcyB0b3VjaGVkIGJlY2F1c2Ugb3RoZXJ3aXNlIGZvcm0gdmFsaWRhdGlvbiB3aWxsIG5vdCBzaG93XG4gICAgICAgICAgICAgIC8vIGVycm9yIG1lc3NhZ2VzXG4gICAgICAgICAgICAgIGZjLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgICAgICAgZmMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ3JlYWRvbmx5Jzoge1xuICAgICAgICAgICAgZmMuX2VvRm9ybUVsZW1lbnQucmVhZG9ubHkgPSBjaGFuZ2UubmV3VmFsdWU7XG4gICAgICAgICAgICBpZiAoY2hhbmdlLm5ld1ZhbHVlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIGZjLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZjLmVuYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ2Vycm9yJzoge1xuICAgICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGZjLl9lb0Zvcm1FbGVtZW50LmVycm9yKSAhPT0gSlNPTi5zdHJpbmdpZnkoY2hhbmdlLm5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgICBmYy5fZW9Gb3JtRWxlbWVudC5lcnJvciA9IGNoYW5nZS5uZXdWYWx1ZTtcbiAgICAgICAgICAgICAgZmMubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICAgICAgICBmYy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gbmV3IG9ucm93ZWRpdCBmdW5jdGlvbiB3YXMgYXBwbGllZCBieSB0aGUgc2NyaXB0XG4gICAgICAgICAgY2FzZSAnb25yb3dlZGl0Jzoge1xuICAgICAgICAgICAgZmMuX2VvRm9ybUVsZW1lbnQub25yb3dlZGl0ID0gY2hhbmdlLm5ld1ZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIG5ldyBvbmNoYW5nZSBmdW5jdGlvbiB3YXMgYXBwbGllZCBieSB0aGUgc2NyaXB0XG4gICAgICAgICAgY2FzZSAnb25jaGFuZ2UnOiB7XG4gICAgICAgICAgICBmYy5fZW9Gb3JtRWxlbWVudC5vbmNoYW5nZSA9IGNoYW5nZS5uZXdWYWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBuZXcgY29udGV4dElkIHdhcyBhcHBsaWVkIGJ5IHRoZSBzY3JpcHRcbiAgICAgICAgICBjYXNlICdjb250ZXh0SWQnOiB7XG4gICAgICAgICAgICBmYy5fZW9Gb3JtRWxlbWVudC5jb250ZXh0SWQgPSBjaGFuZ2UubmV3VmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gbmV3IGRlc2NyaXB0aW9uIHdhcyBhcHBsaWVkIGJ5IHRoZSBzY3JpcHRcbiAgICAgICAgICBjYXNlICdkZXNjcmlwdGlvbic6IHtcbiAgICAgICAgICAgIGZjLl9lb0Zvcm1FbGVtZW50LmRlc2NyaXB0aW9uID0gY2hhbmdlLm5ld1ZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcHJvY2Vzc0FycmF5VmFsdWVDaGFuZ2UoZmMsIGNoYW5nZSkge1xuICAgIGNvbnN0IG5ld1ZhbCA9IGNoYW5nZS5uZXdWYWx1ZTtcbiAgICBjb25zdCB0YXJnZXRUeXBlID0gZmMuX2VvRm9ybUVsZW1lbnQudHlwZTtcbiAgICAvLyBmb3Igc29tZSB0eXBlcyB3ZSBoYXZlIHRvIGVuc3VyZSB0aGF0IG1ldGEgZGF0YSBhcmUgcHJvdmlkZWQgYXMgd2VsbFxuICAgIHN3aXRjaCAodGFyZ2V0VHlwZSkge1xuICAgICAgY2FzZSAnT1JHQU5JWkFUSU9OJzoge1xuICAgICAgICB0aGlzLl9nZXREYXRhTWV0YShmYy5fZW9Gb3JtRWxlbWVudCwgbmV3VmFsKS5zdWJzY3JpYmUobSA9PiB7XG4gICAgICAgICAgZmMuX2VvRm9ybUVsZW1lbnQuZGF0YU1ldGEgPSBtO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdDT0RFU1lTVEVNJzoge1xuICAgICAgICBpZiAoIWZjLl9lb0Zvcm1FbGVtZW50LmNvZGVzeXN0ZW0uZW50cmllcykge1xuICAgICAgICAgIGZjLl9lb0Zvcm1FbGVtZW50LmNvZGVzeXN0ZW0gPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0Q29kZXN5c3RlbShmYy5fZW9Gb3JtRWxlbWVudC5jb2Rlc3lzdGVtLmlkKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ1RBQkxFJzoge1xuICAgICAgICBjb25zdCBkYXRhVG9CZVByb2Nlc3NlZCA9IHt9O1xuICAgICAgICBmYy5fZW9Gb3JtRWxlbWVudC5lbGVtZW50cy5mb3JFYWNoKGUgPT4ge1xuICAgICAgICAgIGlmIChlLnR5cGUgPT09ICdPUkdBTklaQVRJT04nIHx8IGUudHlwZSA9PT0gJ0NPREVTWVNURU0nKSB7XG4gICAgICAgICAgICBkYXRhVG9CZVByb2Nlc3NlZFtlLm5hbWVdID0gZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZGF0YVRvQmVQcm9jZXNzZWQpLmxlbmd0aCkge1xuICAgICAgICAgIGxldCBvYnMgPSBbXTtcbiAgICAgICAgICBuZXdWYWwuZm9yRWFjaChyb3dEYXRhID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHJvd0RhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgaWYgKGRhdGFUb0JlUHJvY2Vzc2VkW2tleV0pIHtcbiAgICAgICAgICAgICAgICBvYnMucHVzaCh0aGlzLl9nZXREYXRhTWV0YShkYXRhVG9CZVByb2Nlc3NlZFtrZXldLCByb3dEYXRhW2tleV0pLnBpcGUoXG4gICAgICAgICAgICAgICAgICB0YXAobSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcm93RGF0YVtrZXkgKyAnX21ldGEnXSA9IG07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvd0RhdGFba2V5ICsgJ19tZXRhJ107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGZvcmtKb2luKG9icykuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3VwZGF0ZUFycmF5VmFsdWUoZmMsIG5ld1ZhbCkpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl91cGRhdGVBcnJheVZhbHVlKGZjLCBuZXdWYWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlQXJyYXlWYWx1ZShmYywgbmV3VmFsdWUpIHtcbiAgICBmYy5fZW9Gb3JtRWxlbWVudC52YWx1ZSA9IFtdLmNvbmNhdChuZXdWYWx1ZSk7XG4gICAgZmMucGF0Y2hWYWx1ZShbXS5jb25jYXQobmV3VmFsdWUpKTtcbiAgICBmYy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgZmMubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NsZWFyVGVtcG9yYXJ5U3RvcmFnZUVudHJpZXMoKSB7XG4gICAgdGhpcy5fZ2V0VGVtcG9yYXJ5U3RvcmFnZUVudHJpZXMoKS5mb3JFYWNoKGUgPT4gbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZSkpO1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuVEVNUF9TVE9SQUdFX0VOVFJJRVNfS0VZKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFRlbXBvcmFyeVN0b3JhZ2VFbnRyaWVzKCk6IHN0cmluZ1tdIHtcbiAgICBsZXQgcmVzID0gW107XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVudHJpZXM6IHN0cmluZ1tdID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlRFTVBfU1RPUkFHRV9FTlRSSUVTX0tFWSkpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZW50cmllcykpIHJlcyA9IGVudHJpZXM7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhlKVxuICAgIH1cbiAgICBjb25zb2xlLmRlYnVnKGBGb3VuZCAke3Jlcy5sZW5ndGh9IHRtcCBlbnRyaWVzIHRvIGJlIHJlbW92ZWRgKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG5cblxufVxuIl19
|
|
@@ -62,9 +62,21 @@ export class EoDialogComponent {
|
|
|
62
62
|
});
|
|
63
63
|
this.overlayRef.afterClosed$.subscribe(() => this.hide.emit());
|
|
64
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Closes the dialog if it is currently visible.
|
|
67
|
+
*
|
|
68
|
+
* This method sets the `_visible` property to `false` if the dialog is visible,
|
|
69
|
+
* closes the overlay reference if it exists, and emits the `visibleChange` event
|
|
70
|
+
* with the updated visibility status.
|
|
71
|
+
*/
|
|
65
72
|
closeDialog() {
|
|
66
|
-
if (this.
|
|
73
|
+
if (this._visible) {
|
|
74
|
+
this._visible = false;
|
|
75
|
+
}
|
|
76
|
+
if (this.overlayRef) {
|
|
67
77
|
this.overlayRef.close();
|
|
78
|
+
}
|
|
79
|
+
this.visibleChange.emit(this._visible);
|
|
68
80
|
}
|
|
69
81
|
togglePreview() {
|
|
70
82
|
this.showPreview = !this.showPreview;
|
|
@@ -127,4 +139,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
|
|
|
127
139
|
}], visible: [{
|
|
128
140
|
type: Input
|
|
129
141
|
}] } });
|
|
130
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW8tZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tZnJhbWV3b3JrL3VpL2VvLWRpYWxvZy9lby1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvdWkvZW8tZGlhbG9nL2VvLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFXdkIsTUFBTSxPQUFPLGlCQUFpQjtJQStCNUIsSUFDSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxHQUFHO1FBQ2IsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLFFBQVEsSUFBSSxHQUFHO1lBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFBO1FBQzdDLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDOUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENB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QkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQUdILE9BQU87c0JBRFYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2RrUG9ydGFsT3V0bGV0fSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQZW5kaW5nQ2hhbmdlc1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL3BlbmRpbmctY2hhbmdlcy9wZW5kaW5nLWNoYW5nZXMuc2VydmljZSc7XG5cbmltcG9ydCB7WXZjT3ZlcmxheVJlZiwgWXZjT3ZlcmxheVNlcnZpY2V9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9vdmVybGF5JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VvLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VvLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEVvRGlhbG9nQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICBAVmlld0NoaWxkKENka1BvcnRhbE91dGxldCkgcG9ydGFsT3V0bGV0OiBDZGtQb3J0YWxPdXRsZXQ7XG4gIEBWaWV3Q2hpbGQoJ2RpYWxvZ0NvbnRlbnQnKSBkaWFsb2dDb250ZW50OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIHByaXZhdGUgb3ZlcmxheVJlZjogWXZjT3ZlcmxheVJlZjtcbiAgcHJpdmF0ZSBfdmlzaWJsZSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGhhc1ByZXZpZXdGaWxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN1YnRpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN0eWxlQ2xhc3MgPSAnJztcblxuICAvLyBhcnJheSBvZiBwZW5kaW5nVGFzayBJRHMgdG8gYmUgY2hlY2tlZCBiZWZvcmUgdGhlIGRpYWxvZyBjbG9zZXNcbiAgQElucHV0KCkgZGlydHlDaGVjazogc3RyaW5nIHwgc3RyaW5nW10gPSBbXTtcblxuICBASW5wdXQoKSBtaW5XaWR0aDogbnVtYmVyIHwgc3RyaW5nID0gMjAwO1xuICBASW5wdXQoKSBtaW5IZWlnaHQgPSAnYXV0byc7XG4gIEBJbnB1dCgpIGhlaWdodDogc3RyaW5nO1xuICBASW5wdXQoKSB3aWR0aDogc3RyaW5nO1xuICBASW5wdXQoKSBmb2N1c09uU2hvdyA9IHRydWU7XG4gIEBJbnB1dCgpIGFsaWduOiAnY2VudGVyJyB8ICdzdGFydCcgPSAnY2VudGVyJztcbiAgQElucHV0KCkgaXNGb3JtVGFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd1ByZXZpZXcgPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgb25Ub2dnbGVQcmV2aWV3OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHZpc2libGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgaGlkZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzaG93OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASW5wdXQoKVxuICBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZTtcbiAgfVxuXG4gIHNldCB2aXNpYmxlKHZhbCkge1xuICAgIGlmICh2YWwgIT09IHRoaXMuX3Zpc2libGUgJiYgdmFsKSB0aGlzLm9wZW4oKVxuICAgIGlmICh2YWwgIT09IHRoaXMuX3Zpc2libGUgJiYgdGhpcy5fdmlzaWJsZSkgdGhpcy5jbG9zZURpYWxvZygpXG4gICAgdGhpcy5fdmlzaWJsZSA9ICEhdmFsO1xuICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHRoaXMuX3Zpc2libGUpO1xuICAgIHRoaXMuX3Zpc2libGUgPyB0aGlzLnNob3cuZW1pdCh2YWwpIDogdGhpcy5oaWRlLmVtaXQodmFsKTtcbiAgfVxuXG5cblxuICBjYW5DbG9zZSA9ICgpOiBib29sZWFuID0+IHtcbiAgICBpZiAodGhpcy5kaXJ0eUNoZWNrKSB7XG4gICAgICByZXR1cm4gIXRoaXMucGVuZGluZ0NoYW5nZXMuY2hlY2tGb3JQZW5kaW5nVGFza3ModGhpcy5kaXJ0eUNoZWNrKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHBlbmRpbmdDaGFuZ2VzOiBQZW5kaW5nQ2hhbmdlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBvdmVybGF5OiBZdmNPdmVybGF5U2VydmljZSxcbiAgKSB7IH1cblxuICBwcml2YXRlIG9wZW4oKSB7XG4gICAgaWYoIXRoaXMuZGlhbG9nQ29udGVudCkgcmV0dXJuO1xuICAgIC8vIFdlIGNyZWF0ZSB0aGUgb3ZlcmxheVxuICAgIHRoaXMub3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5vcGVuKHRoaXMuZGlhbG9nQ29udGVudCwgbnVsbCwge1xuICAgICAgZGlzcG9zZU9uTmF2aWdhdGlvbjogdHJ1ZSxcbiAgICAgIG1pbkhlaWdodDogdGhpcy5taW5IZWlnaHQsXG4gICAgICBtaW5XaWR0aDogdGhpcy5taW5XaWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQsXG4gICAgICB3aWR0aDogdGhpcy53aWR0aCxcbiAgICAgIGNhbkNsb3NlOiB0aGlzLmNhbkNsb3NlXG4gICAgfSlcbiAgICB0aGlzLm92ZXJsYXlSZWYuYWZ0ZXJDbG9zZWQkLnN1YnNjcmliZSgoKSA9PiB0aGlzLmhpZGUuZW1pdCgpKVxuICB9XG5cbiAgY2xvc2VEaWFsb2coKSB7XG4gICAgaWYodGhpcy5vdmVybGF5UmVmKSB0aGlzLm92ZXJsYXlSZWYuY2xvc2UoKTtcbiAgfVxuXG4gIHRvZ2dsZVByZXZpZXcoKSB7XG4gICAgdGhpcy5zaG93UHJldmlldyA9ICF0aGlzLnNob3dQcmV2aWV3O1xuICAgIHRoaXMub25Ub2dnbGVQcmV2aWV3LmVtaXQoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdmlzaWJsZSkge3RoaXMub3BlbigpO31cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgdGhpcy5jbG9zZURpYWxvZygpXG4gIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjZGlhbG9nQ29udGVudD5cbiAgPGRpdiBjbGFzcz1cImVvLWRpYWxvZ1wiIFtuZ0NsYXNzXT1cInN0eWxlQ2xhc3MgfHwgJydcIiBlb1J0bEF3YXJlPVwiZGlyXCI+XG4gICAgPGhlYWRlciBjbGFzcz1cImVvLWRpYWxvZy1oZWFkZXJcIiBbbmdDbGFzc109XCJzdHlsZUNsYXNzID8gc3R5bGVDbGFzcyArICctLWhlYWRlciAnIDogJydcIj5cbiAgICAgIDxoNSBjbGFzcz1cImhlYWRsaW5lXCI+e3t0aXRsZX19PC9oNT5cbiAgICAgIDxoNiAqbmdJZj1cInN1YnRpdGxlXCIgY2xhc3M9XCJzdWJ0aXRsZVwiPnt7c3VidGl0bGV9fTwvaDY+XG4gICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19jbGVhci5zdmcnXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIlxuICAgICAgICBjbGFzcz1cImJ1dHRvbiB3aGl0ZSBlby1kaWFsb2ctY2xvc2VcIj48L2VvLWljb24+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNGb3JtVGFibGUgJiYgaGFzUHJldmlld0ZpbGVcIj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dQcmV2aWV3XCIgKGNsaWNrKT1cInRvZ2dsZVByZXZpZXcoKVwiIGNsYXNzPVwiYnV0dG9uLXByZXZpZXctdG9nZ2xlXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX3ByZXZpZXdfY2xvc2Uuc3ZnJ1wiPlxuICAgICAgICAgICAgPC9lby1pY29uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZS1wcmV2aWV3LXRvZ2dsZVwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZW8uZm9ybS50YWJsZS5kaWFsb2cucHJldmlldy5oaWRlXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIXNob3dQcmV2aWV3XCIgKGNsaWNrKT1cInRvZ2dsZVByZXZpZXcoKVwiIGNsYXNzPVwiYnV0dG9uLXByZXZpZXctdG9nZ2xlXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX3ByZXZpZXdfc2hvdy5zdmcnXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZS1wcmV2aWV3LXRvZ2dsZVwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZW8uZm9ybS50YWJsZS5kaWFsb2cucHJldmlldy5zaG93XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9oZWFkZXI+XG4gICAgPGRpdiBjbGFzcz1cImVvLWRpYWxvZy1jb250ZW50XCIgW25nQ2xhc3NdPVwic3R5bGVDbGFzcyA/IHN0eWxlQ2xhc3MgKyAnLS1jb250ZW50ICcgOiAnJ1wiIGNka1RyYXBGb2N1cyBbY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmVdPVwidHJ1ZVwiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW8tZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tZnJhbWV3b3JrL3VpL2VvLWRpYWxvZy9lby1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvdWkvZW8tZGlhbG9nL2VvLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFXdkIsTUFBTSxPQUFPLGlCQUFpQjtJQStCNUIsSUFDSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxHQUFHO1FBQ2IsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLFFBQVEsSUFBSSxHQUFHO1lBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFBO1FBQzdDLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDOUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENB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aUJBQWlCO2tCQU43QixTQUFTOytCQUNFLFdBQVcsaUJBR04saUJBQWlCLENBQUMsSUFBSTswSEFLVCxZQUFZO3NCQUF2QyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ0UsYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlO2dCQUtqQixjQUFjO3NCQUF0QixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBR0gsT0FBTztzQkFEVixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDZGtQb3J0YWxPdXRsZXR9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BlbmRpbmdDaGFuZ2VzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvcGVuZGluZy1jaGFuZ2VzL3BlbmRpbmctY2hhbmdlcy5zZXJ2aWNlJztcblxuaW1wb3J0IHtZdmNPdmVybGF5UmVmLCBZdmNPdmVybGF5U2VydmljZX0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL292ZXJsYXknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlby1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vZW8tZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZW8tZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgRW9EaWFsb2dDb21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBWaWV3Q2hpbGQoQ2RrUG9ydGFsT3V0bGV0KSBwb3J0YWxPdXRsZXQ6IENka1BvcnRhbE91dGxldDtcbiAgQFZpZXdDaGlsZCgnZGlhbG9nQ29udGVudCcpIGRpYWxvZ0NvbnRlbnQ6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgcHJpdmF0ZSBvdmVybGF5UmVmOiBZdmNPdmVybGF5UmVmO1xuICBwcml2YXRlIF92aXNpYmxlID0gZmFsc2U7XG5cbiAgQElucHV0KCkgaGFzUHJldmlld0ZpbGUgPSBmYWxzZTtcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZztcbiAgQElucHV0KCkgc3VidGl0bGU6IHN0cmluZztcbiAgQElucHV0KCkgc3R5bGVDbGFzcyA9ICcnO1xuXG4gIC8vIGFycmF5IG9mIHBlbmRpbmdUYXNrIElEcyB0byBiZSBjaGVja2VkIGJlZm9yZSB0aGUgZGlhbG9nIGNsb3Nlc1xuICBASW5wdXQoKSBkaXJ0eUNoZWNrOiBzdHJpbmcgfCBzdHJpbmdbXSA9IFtdO1xuXG4gIEBJbnB1dCgpIG1pbldpZHRoOiBudW1iZXIgfCBzdHJpbmcgPSAyMDA7XG4gIEBJbnB1dCgpIG1pbkhlaWdodCA9ICdhdXRvJztcbiAgQElucHV0KCkgaGVpZ2h0OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHdpZHRoOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZvY3VzT25TaG93ID0gdHJ1ZTtcbiAgQElucHV0KCkgYWxpZ246ICdjZW50ZXInIHwgJ3N0YXJ0JyA9ICdjZW50ZXInO1xuICBASW5wdXQoKSBpc0Zvcm1UYWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93UHJldmlldyA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBvblRvZ2dsZVByZXZpZXc6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgdmlzaWJsZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBoaWRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNob3c6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBJbnB1dCgpXG4gIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xuICB9XG5cbiAgc2V0IHZpc2libGUodmFsKSB7XG4gICAgaWYgKHZhbCAhPT0gdGhpcy5fdmlzaWJsZSAmJiB2YWwpIHRoaXMub3BlbigpXG4gICAgaWYgKHZhbCAhPT0gdGhpcy5fdmlzaWJsZSAmJiB0aGlzLl92aXNpYmxlKSB0aGlzLmNsb3NlRGlhbG9nKClcbiAgICB0aGlzLl92aXNpYmxlID0gISF2YWw7XG4gICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQodGhpcy5fdmlzaWJsZSk7XG4gICAgdGhpcy5fdmlzaWJsZSA/IHRoaXMuc2hvdy5lbWl0KHZhbCkgOiB0aGlzLmhpZGUuZW1pdCh2YWwpO1xuICB9XG5cblxuXG4gIGNhbkNsb3NlID0gKCk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICh0aGlzLmRpcnR5Q2hlY2spIHtcbiAgICAgIHJldHVybiAhdGhpcy5wZW5kaW5nQ2hhbmdlcy5jaGVja0ZvclBlbmRpbmdUYXNrcyh0aGlzLmRpcnR5Q2hlY2spXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcGVuZGluZ0NoYW5nZXM6IFBlbmRpbmdDaGFuZ2VzU2VydmljZSxcbiAgICBwcml2YXRlIG92ZXJsYXk6IFl2Y092ZXJsYXlTZXJ2aWNlLFxuICApIHsgfVxuXG4gIHByaXZhdGUgb3BlbigpIHtcbiAgICBpZighdGhpcy5kaWFsb2dDb250ZW50KSByZXR1cm47XG4gICAgLy8gV2UgY3JlYXRlIHRoZSBvdmVybGF5XG4gICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5Lm9wZW4odGhpcy5kaWFsb2dDb250ZW50LCBudWxsLCB7XG4gICAgICBkaXNwb3NlT25OYXZpZ2F0aW9uOiB0cnVlLFxuICAgICAgbWluSGVpZ2h0OiB0aGlzLm1pbkhlaWdodCxcbiAgICAgIG1pbldpZHRoOiB0aGlzLm1pbldpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCxcbiAgICAgIHdpZHRoOiB0aGlzLndpZHRoLFxuICAgICAgY2FuQ2xvc2U6IHRoaXMuY2FuQ2xvc2VcbiAgICB9KVxuICAgIHRoaXMub3ZlcmxheVJlZi5hZnRlckNsb3NlZCQuc3Vic2NyaWJlKCgpID0+IHRoaXMuaGlkZS5lbWl0KCkpXG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBkaWFsb2cgaWYgaXQgaXMgY3VycmVudGx5IHZpc2libGUuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGBfdmlzaWJsZWAgcHJvcGVydHkgdG8gYGZhbHNlYCBpZiB0aGUgZGlhbG9nIGlzIHZpc2libGUsXG4gICAqIGNsb3NlcyB0aGUgb3ZlcmxheSByZWZlcmVuY2UgaWYgaXQgZXhpc3RzLCBhbmQgZW1pdHMgdGhlIGB2aXNpYmxlQ2hhbmdlYCBldmVudFxuICAgKiB3aXRoIHRoZSB1cGRhdGVkIHZpc2liaWxpdHkgc3RhdHVzLlxuICAgKi9cbiAgY2xvc2VEaWFsb2coKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3Zpc2libGUpIHtcbiAgICAgIHRoaXMuX3Zpc2libGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vdmVybGF5UmVmKSB7XG4gICAgICB0aGlzLm92ZXJsYXlSZWYuY2xvc2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh0aGlzLl92aXNpYmxlKTtcbiAgfVxuXG4gIHRvZ2dsZVByZXZpZXcoKSB7XG4gICAgdGhpcy5zaG93UHJldmlldyA9ICF0aGlzLnNob3dQcmV2aWV3O1xuICAgIHRoaXMub25Ub2dnbGVQcmV2aWV3LmVtaXQoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdmlzaWJsZSkge3RoaXMub3BlbigpO31cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgdGhpcy5jbG9zZURpYWxvZygpXG4gIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjZGlhbG9nQ29udGVudD5cbiAgPGRpdiBjbGFzcz1cImVvLWRpYWxvZ1wiIFtuZ0NsYXNzXT1cInN0eWxlQ2xhc3MgfHwgJydcIiBlb1J0bEF3YXJlPVwiZGlyXCI+XG4gICAgPGhlYWRlciBjbGFzcz1cImVvLWRpYWxvZy1oZWFkZXJcIiBbbmdDbGFzc109XCJzdHlsZUNsYXNzID8gc3R5bGVDbGFzcyArICctLWhlYWRlciAnIDogJydcIj5cbiAgICAgIDxoNSBjbGFzcz1cImhlYWRsaW5lXCI+e3t0aXRsZX19PC9oNT5cbiAgICAgIDxoNiAqbmdJZj1cInN1YnRpdGxlXCIgY2xhc3M9XCJzdWJ0aXRsZVwiPnt7c3VidGl0bGV9fTwvaDY+XG4gICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19jbGVhci5zdmcnXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIlxuICAgICAgICBjbGFzcz1cImJ1dHRvbiB3aGl0ZSBlby1kaWFsb2ctY2xvc2VcIj48L2VvLWljb24+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNGb3JtVGFibGUgJiYgaGFzUHJldmlld0ZpbGVcIj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dQcmV2aWV3XCIgKGNsaWNrKT1cInRvZ2dsZVByZXZpZXcoKVwiIGNsYXNzPVwiYnV0dG9uLXByZXZpZXctdG9nZ2xlXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX3ByZXZpZXdfY2xvc2Uuc3ZnJ1wiPlxuICAgICAgICAgICAgPC9lby1pY29uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZS1wcmV2aWV3LXRvZ2dsZVwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZW8uZm9ybS50YWJsZS5kaWFsb2cucHJldmlldy5oaWRlXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIXNob3dQcmV2aWV3XCIgKGNsaWNrKT1cInRvZ2dsZVByZXZpZXcoKVwiIGNsYXNzPVwiYnV0dG9uLXByZXZpZXctdG9nZ2xlXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX3ByZXZpZXdfc2hvdy5zdmcnXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZS1wcmV2aWV3LXRvZ2dsZVwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZW8uZm9ybS50YWJsZS5kaWFsb2cucHJldmlldy5zaG93XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9oZWFkZXI+XG4gICAgPGRpdiBjbGFzcz1cImVvLWRpYWxvZy1jb250ZW50XCIgW25nQ2xhc3NdPVwic3R5bGVDbGFzcyA/IHN0eWxlQ2xhc3MgKyAnLS1jb250ZW50ICcgOiAnJ1wiIGNka1RyYXBGb2N1cyBbY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmVdPVwidHJ1ZVwiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|