slate-angular 14.1.1 → 14.1.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/esm2020/components/editable/editable.component.mjs +5 -7
- package/esm2020/utils/environment.mjs +3 -3
- package/esm2020/view/base.mjs +17 -7
- package/fesm2015/slate-angular.mjs +22 -14
- package/fesm2015/slate-angular.mjs.map +1 -1
- package/fesm2020/slate-angular.mjs +22 -14
- package/fesm2020/slate-angular.mjs.map +1 -1
- package/package.json +1 -1
- package/styles/index.scss +1 -1
- package/view/base.d.ts +2 -0
|
@@ -10,7 +10,6 @@ import Hotkeys from '../../utils/hotkeys';
|
|
|
10
10
|
import { extractBeforeInputEvent } from '../../custom-event/BeforeInputEventPlugin';
|
|
11
11
|
import { BEFORE_INPUT_EVENTS } from '../../custom-event/before-input-polyfill';
|
|
12
12
|
import { SlateErrorCode } from '../../types/error';
|
|
13
|
-
import Debug from 'debug';
|
|
14
13
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
15
14
|
import { HistoryEditor } from 'slate-history';
|
|
16
15
|
import { isDecoratorRangeListEqual } from '../../utils';
|
|
@@ -18,7 +17,6 @@ import { check, normalize } from '../../utils/global-normalize';
|
|
|
18
17
|
import * as i0 from "@angular/core";
|
|
19
18
|
import * as i1 from "../string/template.component";
|
|
20
19
|
import * as i2 from "../children/children.component";
|
|
21
|
-
const timeDebug = Debug('slate-angular-time');
|
|
22
20
|
// not correctly clipboardData on beforeinput
|
|
23
21
|
const forceOnDOMPaste = IS_SAFARI;
|
|
24
22
|
export class SlateEditableComponent {
|
|
@@ -85,6 +83,10 @@ export class SlateEditableComponent {
|
|
|
85
83
|
if (decorateChange) {
|
|
86
84
|
this.forceFlush();
|
|
87
85
|
}
|
|
86
|
+
const placeholderChange = simpleChanges['placeholder'];
|
|
87
|
+
if (placeholderChange) {
|
|
88
|
+
this.detectContext();
|
|
89
|
+
}
|
|
88
90
|
const readonlyChange = simpleChanges['readonly'];
|
|
89
91
|
if (readonlyChange) {
|
|
90
92
|
IS_READONLY.set(this.editor, this.readonly);
|
|
@@ -219,13 +221,10 @@ export class SlateEditableComponent {
|
|
|
219
221
|
this.onChangeCallback(this.editor.children);
|
|
220
222
|
}
|
|
221
223
|
ngAfterViewChecked() {
|
|
222
|
-
timeDebug('editable ngAfterViewChecked');
|
|
223
224
|
}
|
|
224
225
|
ngDoCheck() {
|
|
225
|
-
timeDebug('editable ngDoCheck');
|
|
226
226
|
}
|
|
227
227
|
forceFlush() {
|
|
228
|
-
timeDebug('start data sync');
|
|
229
228
|
this.detectContext();
|
|
230
229
|
this.cdr.detectChanges();
|
|
231
230
|
// repair collaborative editing when Chinese input is interrupted by other users' cursors
|
|
@@ -262,7 +261,6 @@ export class SlateEditableComponent {
|
|
|
262
261
|
}, 0);
|
|
263
262
|
}
|
|
264
263
|
this.toNativeSelection();
|
|
265
|
-
timeDebug('end data sync');
|
|
266
264
|
}
|
|
267
265
|
initializeContext() {
|
|
268
266
|
this.context = {
|
|
@@ -1066,4 +1064,4 @@ const preventInsertFromComposition = (event, editor) => {
|
|
|
1066
1064
|
textNode.splitText(textNode.length - insertText.length).remove();
|
|
1067
1065
|
}
|
|
1068
1066
|
};
|
|
1069
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvZWRpdGFibGUvZWRpdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvZWRpdGFibGUvZWRpdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFFVCxLQUFLLEVBQ0wsU0FBUyxFQUNULFdBQVcsRUFFWCxVQUFVLEVBQ1YsdUJBQXVCLEVBS3ZCLFVBQVUsRUFLYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUosT0FBTyxFQUFxQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFhLElBQUksRUFBYyxNQUFNLE9BQU8sQ0FBQztBQUNqSCxPQUFPLFlBQVksTUFBTSxXQUFXLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFHSCxTQUFTLEVBR1QsWUFBWSxFQUNaLG9CQUFvQixFQUVwQixjQUFjLEVBQ2pCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBb0MsU0FBUyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkksT0FBTyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUFDMUMsT0FBTyxFQUFvQix1QkFBdUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEQsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7OztBQUdoRSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUU5Qyw2Q0FBNkM7QUFDN0MsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBb0JsQyxNQUFNLE9BQU8sc0JBQXNCO0lBeUUvQixZQUNXLFVBQXNCLEVBQ3RCLFNBQW9CLEVBQ3BCLEdBQXNCLEVBQ3JCLE1BQWMsRUFDZCxRQUFrQjtRQUpuQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQVU7UUExRXRCLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRWpDLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3Qix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDNUIsa0JBQWEsR0FBRyxJQUF5QixDQUFDO1FBRWhDLG9CQUFlLEdBQW1CLEVBQUUsQ0FBQztRQUl2QyxzQkFBaUIsR0FBZSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFMUMscUJBQWdCLEdBQXFCLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQVU5QyxhQUFRLEdBQWtDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUluRCxxQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUFFakMsWUFBTyxHQUEyQixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFFN0MsYUFBUSxHQUFHLEtBQUssQ0FBQztRQW1CMUIsWUFBWTtRQUVaLGtCQUFrQjtRQUNULGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFTyxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN6QixrQkFBYSxHQUFHLE9BQU8sQ0FBQztRQUM3QixjQUFTLEdBQUcsS0FBSyxDQUFDO0lBZ0I5QyxDQUFDO0lBZEwsSUFBSSxxQkFBcUI7UUFDckIsT0FBTyx3QkFBd0IsQ0FBQztJQUNwQyxDQUFDO0lBY0QsUUFBUTtRQUNKLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksTUFBTSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzNELGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbEUsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEUsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7WUFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNqQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQy9CLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRXpCLDBEQUEwRDtRQUMxRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRS9DLG9CQUFvQjtRQUNwQixJQUFJLFlBQVksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEUsWUFBWSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELFdBQVcsQ0FBQyxhQUE0QjtRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNuQixPQUFPO1NBQ1Y7UUFDRCxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsSUFBSSxjQUFjLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ3JCO1FBQ0QsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELElBQUksY0FBYyxFQUFFO1lBQ2hCLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQU87UUFDcEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBQ0QsaUJBQWlCLENBQUMsRUFBTztRQUNyQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBZ0I7UUFDdkIsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUN2QixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7YUFDaEM7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7b0JBQ2hCLElBQUksRUFBRSxjQUFjLENBQUMsaUJBQWlCO29CQUN0QyxJQUFJLEVBQUUseUJBQXlCO29CQUMvQixJQUFJLEVBQUUsS0FBSztpQkFDZCxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzNDO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUMzQjtJQUNMLENBQUM7SUFFRCxVQUFVO1FBQ04sSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLGdCQUFnQixDQUNqQixpQkFBaUIsRUFDakIsS0FBSyxDQUFDLEVBQUU7WUFDSixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM1QixDQUFDLEVBQ0QsTUFBTSxDQUFDLFFBQVEsQ0FDbEIsQ0FBQztRQUNGLElBQUksd0JBQXdCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDMUU7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzRCxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsSUFBSTtZQUNBLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakUsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQztZQUMvQixNQUFNLFlBQVksR0FBSSxJQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO1lBRXZELElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUM1RSxPQUFPO2FBQ1Y7WUFFRCxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQztZQUVyRCxzREFBc0Q7WUFDdEQsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDaEMsT0FBTzthQUNWO1lBRUQsdURBQXVEO1lBQ3ZELGlEQUFpRDtZQUNqRCxNQUFNLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBRSxDQUFDO1lBQzFELElBQUksdUJBQXVCLEdBQUcsS0FBSyxDQUFDO1lBQ3BDLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ25HLHVCQUF1QixHQUFHLElBQUksQ0FBQzthQUNsQztZQUVELGlHQUFpRztZQUNqRyxJQUNJLGVBQWU7Z0JBQ2YsdUJBQXVCO2dCQUN2QixTQUFTO2dCQUNULGVBQWUsQ0FBQyxZQUFZLENBQUM7Z0JBQzdCLEtBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUNoRjtnQkFDRSxPQUFPO2FBQ1Y7WUFFRCx3RUFBd0U7WUFDeEUsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxFQUFFO2dCQUNoRCxPQUFPO2FBQ1Y7WUFFRCw4REFBOEQ7WUFDOUQsc0VBQXNFO1lBQ3RFLCtEQUErRDtZQUMvRCxxREFBcUQ7WUFDckQsSUFBSSxTQUFTLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUU7Z0JBQzlELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDOUUsT0FBTTthQUNUO1lBRUQsNERBQTREO1lBQzVELE1BQU0sRUFBRSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztZQUVoQyxNQUFNLFdBQVcsR0FBRyxTQUFTLElBQUksYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBRWxGLElBQUksV0FBVyxFQUFFO2dCQUNiLG1FQUFtRTtnQkFDbkUsZ0RBQWdEO2dCQUNoRCxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQzdCLG1DQUFtQztvQkFDbkMsWUFBWSxDQUFDLGdCQUFnQixDQUN6QixXQUFXLENBQUMsWUFBWSxFQUN4QixXQUFXLENBQUMsU0FBUyxFQUNyQixXQUFXLENBQUMsY0FBYyxFQUMxQixXQUFXLENBQUMsV0FBVyxDQUMxQixDQUFDO2lCQUNMO3FCQUFNO29CQUNILG1DQUFtQztvQkFDbkMsWUFBWSxDQUFDLGdCQUFnQixDQUN6QixXQUFXLENBQUMsY0FBYyxFQUMxQixXQUFXLENBQUMsV0FBVyxFQUN2QixXQUFXLENBQUMsWUFBWSxFQUN4QixXQUFXLENBQUMsU0FBUyxDQUN4QixDQUFDO2lCQUNMO2FBQ0o7aUJBQU07Z0JBQ0gsWUFBWSxDQUFDLGVBQWUsRUFBRSxDQUFDO2FBQ2xDO1lBRUQsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWix1RUFBdUU7Z0JBQ3ZFLHlEQUF5RDtnQkFDekQsSUFBSSxXQUFXLElBQUksVUFBVSxFQUFFO29CQUMzQixFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQ2Q7Z0JBRUQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztZQUNyQyxDQUFDLENBQUMsQ0FBQztTQUNOO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDWixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7U0FDM0Y7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsU0FBUyxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELFNBQVM7UUFDTCxTQUFTLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsVUFBVTtRQUNOLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLHlGQUF5RjtRQUN6RixnRUFBZ0U7UUFDaEUsMEVBQTBFO1FBQzFFLHVDQUF1QztRQUN2QywwREFBMEQ7UUFDMUQsd0VBQXdFO1FBQ3hFLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixnR0FBZ0c7WUFDaEcsZ0hBQWdIO1lBQ2hILGlFQUFpRTtZQUNqRSw2R0FBNkc7WUFDN0csVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMxRSxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ25FLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztnQkFDckIscUJBQXFCO2dCQUNyQixXQUFXLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRTtvQkFDdEUsSUFBSSxJQUFJLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQztvQkFDckMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDO29CQUMxQix3QkFBd0I7b0JBQ3hCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTt3QkFDM0IsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3hCO29CQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTt3QkFDekIsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7cUJBQ3pDO29CQUNELFdBQVcsSUFBSSxJQUFJLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUU7b0JBQzdDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2lCQUM1QjtZQUNMLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNUO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxpQkFBaUI7UUFDYixJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ1gsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVM7WUFDaEMsV0FBVyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUN2QyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQzFCLENBQUM7SUFDTixDQUFDO0lBRUQscUJBQXFCO1FBQ2pCLElBQUksQ0FBQyxXQUFXLEdBQUc7WUFDZixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQ2pDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDdkMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtTQUM1QyxDQUFDO0lBQ04sQ0FBQztJQUVELGFBQWE7UUFDVCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMvQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUztZQUNoRCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUTtZQUN2QyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUTtZQUN2QyxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxFQUFFO1lBQ25FLElBQUksQ0FBQyxPQUFPLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2dCQUNuQixTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTO2dCQUNoQyxXQUFXLEVBQUUsV0FBVztnQkFDeEIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7YUFDMUIsQ0FBQztTQUNMO0lBQ0wsQ0FBQztJQUVELDBCQUEwQixDQUFDLE1BQWM7UUFDckMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2pEO1FBRUQsSUFDSSxJQUFJLENBQUMsV0FBVztZQUNoQixNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQzVCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUM1QjtZQUNFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFBO1lBQ3RDLE9BQU87Z0JBQ0g7b0JBQ0ksV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO29CQUM3QixNQUFNLEVBQUUsS0FBSztvQkFDYixLQUFLLEVBQUUsS0FBSztpQkFDZjthQUNKLENBQUE7U0FDSjthQUFNO1lBQ0gsT0FBTyxFQUFFLENBQUE7U0FDWjtJQUNMLENBQUM7SUFFRCxtQkFBbUI7UUFDZixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFdBQVc7WUFDM0MsQ0FBQyxDQUFDLEVBQUU7WUFDSixDQUFDLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNsRCxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsc0JBQXNCLENBQUMsQ0FBQztRQUM1QyxPQUFPLFdBQVcsQ0FBQztJQUN2QixDQUFDO0lBRUQscUJBQXFCO0lBQ2IsZ0JBQWdCLENBQUMsU0FBaUIsRUFBRSxRQUF1QixFQUFFLFNBQWlDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYTtRQUMvSCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQVksRUFBRSxFQUFFO1lBQ3RELE1BQU0sZ0JBQWdCLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4RixJQUFJLGdCQUFnQixFQUFFO2dCQUNsQixJQUFJLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzthQUNoRDtZQUNELFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVPLGdCQUFnQjtRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUM5RSxJQUFJO2dCQUNBLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQ2hFLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxJQUFJLENBQUM7Z0JBQy9CLE1BQU0sRUFBRSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzdELE1BQU0sWUFBWSxHQUFJLElBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBRXZELElBQUksYUFBYSxLQUFLLEVBQUUsRUFBRTtvQkFDdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7b0JBQ25DLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDckM7cUJBQU07b0JBQ0gsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ2xDO2dCQUVELElBQUksQ0FBQyxZQUFZLEVBQUU7b0JBQ2YsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDM0M7Z0JBRUQsTUFBTSxhQUFhLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDekQsTUFBTSx1QkFBdUIsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDbEksSUFBSSxDQUFDLHVCQUF1QixFQUFFO29CQUMxQixVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDakMsT0FBTztpQkFDVjtnQkFFRCx1R0FBdUc7Z0JBQ3ZHLG9GQUFvRjtnQkFDcEYsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUNwRSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLEVBQUU7b0JBQ3ZHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxFQUFFO3dCQUNqRCw0QkFBNEI7d0JBQzVCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO3FCQUM1QjtpQkFDSjtxQkFBTTtvQkFDSCxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ3pDO2FBQ0o7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDWixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMscUJBQXFCLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7YUFDMUY7U0FDSjtJQUNMLENBQUM7SUFFTyxnQkFBZ0IsQ0FDcEIsS0FNQztRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNoRSxNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUM3SixJQUFJO2dCQUNBLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUM7Z0JBQzdCLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDO2dCQUNsQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksU0FBUyxDQUFDO2dCQUMzRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBRXZCLHVFQUF1RTtnQkFDdkUsb0VBQW9FO2dCQUNwRSxJQUFJLFNBQVMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQ3ZFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO29CQUNyRSxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7b0JBQzdDLE9BQU87aUJBQ1Y7Z0JBRUQsUUFBUSxJQUFJLEVBQUU7b0JBQ1YsS0FBSyxxQkFBcUIsQ0FBQztvQkFDM0IsS0FBSyxhQUFhLENBQUM7b0JBQ25CLEtBQUssY0FBYyxDQUFDLENBQUM7d0JBQ2pCLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQzlCLE1BQU07cUJBQ1Q7b0JBRUQsS0FBSyxlQUFlLENBQUM7b0JBQ3JCLEtBQUssc0JBQXNCLENBQUMsQ0FBQzt3QkFDekIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDN0IsTUFBTTtxQkFDVDtvQkFFRCxLQUFLLHVCQUF1QixDQUFDLENBQUM7d0JBQzFCLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQzlCLE1BQU07cUJBQ1Q7b0JBRUQsS0FBSyxzQkFBc0IsQ0FBQyxDQUFDO3dCQUN6QixNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO3dCQUNoRCxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO3dCQUMvQyxNQUFNO3FCQUNUO29CQUVELEtBQUssd0JBQXdCLENBQUMsQ0FBQzt3QkFDM0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQzt3QkFDakQsTUFBTTtxQkFDVDtvQkFFRCxLQUFLLHdCQUF3QixDQUFDLENBQUM7d0JBQzNCLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7d0JBQ2hELE1BQU07cUJBQ1Q7b0JBRUQsS0FBSyx1QkFBdUIsQ0FBQyxDQUFDO3dCQUMxQixNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO3dCQUNoRCxNQUFNO3FCQUNUO29CQUVELEtBQUssdUJBQXVCLENBQUMsQ0FBQzt3QkFDMUIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQzt3QkFDL0MsTUFBTTtxQkFDVDtvQkFFRCxLQUFLLG9CQUFvQixDQUFDLENBQUM7d0JBQ3ZCLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7d0JBQ2hELE1BQU07cUJBQ1Q7b0JBRUQsS0FBSyxtQkFBbUIsQ0FBQyxDQUFDO3dCQUN0QixNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO3dCQUMvQyxNQUFNO3FCQUNUO29CQUVELEtBQUssaUJBQWlCLENBQUM7b0JBQ3ZCLEtBQUssaUJBQWlCLENBQUMsQ0FBQzt3QkFDcEIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDM0IsTUFBTTtxQkFDVDtvQkFFRCxLQUFLLHVCQUF1QixDQUFDLENBQUM7d0JBQzFCLGdFQUFnRTt3QkFDaEUsd0ZBQXdGO3dCQUN4Rix3Q0FBd0M7d0JBQ3hDLDJDQUEyQzt3QkFDM0MsMkVBQTJFO3dCQUMzRSx5RUFBeUU7d0JBQ3pFLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO3dCQUN6Qiw0QkFBNEIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUNwRDtvQkFDRCxLQUFLLGdCQUFnQixDQUFDO29CQUN0QixLQUFLLGlCQUFpQixDQUFDO29CQUN2QixLQUFLLGdCQUFnQixDQUFDO29CQUN0QixLQUFLLHVCQUF1QixDQUFDO29CQUM3QixLQUFLLFlBQVksQ0FBQyxDQUFDO3dCQUNmLHlEQUF5RDt3QkFDekQsbUVBQW1FO3dCQUNuRSxzREFBc0Q7d0JBQ3RELElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEtBQUssY0FBYyxFQUFFOzRCQUMzQyxhQUFhLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFvQixDQUFDLENBQUM7eUJBQzFEOzZCQUFNLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFOzRCQUNqQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzt5QkFDbkM7d0JBQ0QsTUFBTTtxQkFDVDtpQkFDSjthQUNKO1lBQUMsT0FBTyxLQUFLLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQzNGO1NBQ0o7SUFDTCxDQUFDO0lBRU8sU0FBUyxDQUFDLEtBQWlCO1FBQy9CLElBQ0ksSUFBSSxDQUFDLFFBQVE7WUFDYixJQUFJLENBQUMsbUJBQW1CO1lBQ3hCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQzdDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUMxQztZQUNFLE9BQU87U0FDVjtRQUVELE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXBELCtEQUErRDtRQUMvRCw0REFBNEQ7UUFDNUQsa0VBQWtFO1FBQ2xFLDZEQUE2RDtRQUM3RCxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pFLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQzNDLE9BQU87U0FDVjtRQUVELE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDaEMsTUFBTSxFQUFFLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU3RCxnRUFBZ0U7UUFDaEUsa0VBQWtFO1FBQ2xFLCtCQUErQjtRQUMvQixJQUFJLGFBQWEsS0FBSyxFQUFFLEVBQUU7WUFDdEIsT0FBTztTQUNWO1FBRUQsa0VBQWtFO1FBQ2xFLHFEQUFxRDtRQUNyRCxJQUFJLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxhQUFhLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLEVBQUU7WUFDaEYsT0FBTztTQUNWO1FBRUQsa0VBQWtFO1FBQ2xFLGtFQUFrRTtRQUNsRSwwQ0FBMEM7UUFDMUMsSUFBSSxhQUFhLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLEVBQUU7WUFDM0csTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBRW5FLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN0RCxPQUFPO2FBQ1Y7U0FDSjtRQUVELFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyxVQUFVLENBQUMsS0FBaUI7UUFDaEMsSUFDSSxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQ2QsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNwQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUMxQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUN6QjtZQUNFLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEUsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM5QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFMUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDMUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFFdEQsSUFBSSxTQUFTLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUMvRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQy9DLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN6QztTQUNKO0lBQ0wsQ0FBQztJQUVPLG1CQUFtQixDQUFDLEtBQXVCO1FBQy9DLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzFELFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ3JHLG1FQUFtRTtZQUNuRSw0REFBNEQ7WUFDNUQsK0RBQStEO1lBQy9ELDZEQUE2RDtZQUM3RCxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUU7Z0JBQ3ZELDRCQUE0QixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2pELE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDOUM7WUFFRCxvREFBb0Q7WUFDcEQsOERBQThEO1lBQzlELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVPLHFCQUFxQixDQUFDLEtBQXVCO1FBQ2pELE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRWxDLElBQUksU0FBUyxFQUFFO1lBQ1gsZ0RBQWdEO1lBQ2hELElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDN0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzthQUNyQjtTQUNKO1FBQ0QsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7WUFDdkcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7U0FDM0I7UUFDRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU8sU0FBUyxDQUFDLEtBQXFCO1FBQ25DLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELE1BQU0sY0FBYyxHQUFHLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hILElBQUksQ0FBQyxjQUFjLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEcsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLGFBQWEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzNFO0lBQ0wsQ0FBQztJQUVPLFFBQVEsQ0FBQyxLQUFxQjtRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzVHLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixhQUFhLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2RSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUVsQyxJQUFJLFNBQVMsRUFBRTtnQkFDWCxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUM1QztTQUNKO0lBQ0wsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFnQjtRQUNsQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3ZGLGdFQUFnRTtZQUNoRSwyREFBMkQ7WUFDM0QsMERBQTBEO1lBQzFELE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFbEUsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ2xDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUMxQjtTQUNKO0lBQ0wsQ0FBQztJQUVPLGNBQWMsQ0FBQyxLQUFnQjtRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMxRyxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN2RCxNQUFNLFNBQVMsR0FDWCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO2dCQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBRXhELDhEQUE4RDtZQUM5RCxtREFBbUQ7WUFDbkQsSUFBSSxTQUFTLEVBQUU7Z0JBQ1gsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUM5QyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDekM7WUFFRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1lBRWpDLGFBQWEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzFFO0lBQ0wsQ0FBQztJQUVPLFNBQVMsQ0FBQyxLQUFnQjtRQUM5QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3JHLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixrRUFBa0U7WUFDbEUsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUV0Qyx5Q0FBeUM7WUFDekMsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDMUQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUVoQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVqQyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtnQkFDM0IsSUFBSSxZQUFZLEVBQUU7b0JBQ2QsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7d0JBQ3RCLEVBQUUsRUFBRSxZQUFZO3FCQUNuQixDQUFDLENBQUM7aUJBQ047Z0JBRUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQzthQUNyQztZQUVELGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRXZDLG1FQUFtRTtZQUNuRSwrQ0FBK0M7WUFDL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ2xDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDL0I7U0FDSjtJQUNMLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBZ0I7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLG9CQUFvQixJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3JJLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7U0FDckM7SUFDTCxDQUFDO0lBRU8sVUFBVSxDQUFDLEtBQVk7UUFDM0IsSUFDSSxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQ2QsQ0FBQyxJQUFJLENBQUMsbUJBQW1CO1lBQ3pCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUM1QyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUM1QztZQUNFLE1BQU0sRUFBRSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0QsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUE7WUFFdkMsZ0VBQWdFO1lBQ2hFLGdFQUFnRTtZQUNoRSwyREFBMkQ7WUFDM0QsSUFBSSxVQUFVLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUU7Z0JBQ25DLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCxPQUFPO2FBQ1Y7WUFFRCxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDckM7SUFDTCxDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQW9CO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNoRSxNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQy9CLElBQ0ksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUNkLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3ZDLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxJQUFJLGdEQUFnRDtZQUM5RixDQUFDLElBQUksQ0FBQyxXQUFXO1lBQ2pCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQzlDO1lBQ0UsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQzFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUM7WUFFN0IsTUFBTSxPQUFPLEdBQ1QsTUFBTSxDQUFDLFFBQVEsQ0FDZixTQUFTLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMvQyxDQUFBO1lBQ0wsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUM7WUFFM0QsSUFBSTtnQkFDQSxtREFBbUQ7Z0JBQ25ELCtEQUErRDtnQkFDL0QsZ0VBQWdFO2dCQUNoRSxrQ0FBa0M7Z0JBQ2xDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRTtvQkFDN0IsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUV2QixJQUFJLGFBQWEsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUU7d0JBQ3ZDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztxQkFDakI7b0JBRUQsT0FBTztpQkFDVjtnQkFFRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUU7b0JBQzdCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFFdkIsSUFBSSxhQUFhLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFO3dCQUN2QyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7cUJBQ2pCO29CQUVELE9BQU87aUJBQ1Y7Z0JBRUQsOERBQThEO2dCQUM5RCw4REFBOEQ7Z0JBQzlELDBEQUEwRDtnQkFDMUQsZUFBZTtnQkFDZixJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsRUFBRTtvQkFDekMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN2QixVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQ3pELE9BQU87aUJBQ1Y7Z0JBRUQsSUFBSSxPQUFPLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLEVBQUU7b0JBQ3hDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDdkIsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztvQkFDMUMsT0FBTztpQkFDVjtnQkFFRCxJQUFJLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsRUFBRTtvQkFDM0MsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN2QixVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTt3QkFDcEIsSUFBSSxFQUFFLE1BQU07d0JBQ1osSUFBSSxFQUFFLE9BQU87d0JBQ2IsT0FBTyxFQUFFLElBQUk7cUJBQ2hCLENBQUMsQ0FBQztvQkFDSCxPQUFPO2lCQUNWO2dCQUVELElBQUksT0FBTyxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxFQUFFO29CQUMxQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3ZCLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFDekQsT0FBTztpQkFDVjtnQkFFRCxnRUFBZ0U7Z0JBQ2hFLDZEQUE2RDtnQkFDN0QsK0RBQStEO2dCQUMvRCw2REFBNkQ7Z0JBQzdELFVBQVU7Z0JBQ1YsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxFQUFFO29CQUNyQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBRXZCLElBQUksU0FBUyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUU7d0JBQzNDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztxQkFDaEQ7eUJBQU07d0JBQ0gsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztxQkFDbEQ7b0JBRUQsT0FBTztpQkFDVjtnQkFFRCxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUU7b0JBQ3BDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFFdkIsSUFBSSxTQUFTLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRTt3QkFDM0MsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztxQkFDL0M7eUJBQU07d0JBQ0gsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztxQkFDaEQ7b0JBRUQsT0FBTztpQkFDVjtnQkFFRCxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsRUFBRTtvQkFDekMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUV2QixJQUFJLFNBQVMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFO3dCQUMxQyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO3FCQUNqRDtvQkFFRCxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFDM0QsT0FBTztpQkFDVjtnQkFFRCxJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsRUFBRTtvQkFDeEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUV2QixJQUFJLFNBQVMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFO3dCQUMxQyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO3FCQUNqRDtvQkFFRCxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7b0JBQzFELE9BQU87aUJBQ1Y7Z0JBRUQsd0VBQXdFO2dCQUN4RSw0REFBNEQ7Z0JBQzVELDJEQUEyRDtnQkFDM0QsSUFBSSxDQUFDLHdCQUF3QixFQUFFO29CQUMzQiwrREFBK0Q7b0JBQy9ELCtDQUErQztvQkFDL0MsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksT0FBTyxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxFQUFFO3dCQUMzRyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ3ZCLE9BQU87cUJBQ1Y7b0JBRUQsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxFQUFFO3dCQUNuQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ3ZCLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQzNCLE9BQU87cUJBQ1Y7b0JBRUQsSUFBSSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLEVBQUU7d0JBQ3ZDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFFdkIsSUFBSSxTQUFTLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTs0QkFDMUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQzt5QkFDNUQ7NkJBQU07NEJBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQzt5QkFDakM7d0JBRUQsT0FBTztxQkFDVjtvQkFFRCxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLEVBQUU7d0JBQ3RDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFFdkIsSUFBSSxTQUFTLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTs0QkFDMUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQzt5QkFDM0Q7NkJBQU07NEJBQ0gsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQzt5QkFDaEM7d0JBRUQsT0FBTztxQkFDVjtvQkFFRCxJQUFJLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsRUFBRTt3QkFDM0MsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUV2QixJQUFJLFNBQVMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFOzRCQUMxQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO3lCQUM1RDs2QkFBTTs0QkFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO3lCQUNuRDt3QkFFRCxPQUFPO3FCQUNWO29CQUVELElBQUksT0FBTyxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxFQUFFO3dCQUMxQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBRXZCLElBQUksU0FBUyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUU7NEJBQzFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7eUJBQzNEOzZCQUFNOzRCQUNILE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7eUJBQ2xEO3dCQUVELE9BQU87cUJBQ1Y7b0JBRUQsSUFBSSxPQUFPLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLEVBQUU7d0JBQzNDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFFdkIsSUFBSSxTQUFTLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTs0QkFDMUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQzt5QkFDNUQ7NkJBQU07NEJBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQzt5QkFDbkQ7d0JBRUQsT0FBTztxQkFDVjtvQkFFRCxJQUFJLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsRUFBRTt3QkFDMUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUV2QixJQUFJLFNBQVMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFOzRCQUMxQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO3lCQUMzRDs2QkFBTTs0QkFDSCxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO3lCQUNsRDt3QkFFRCxPQUFPO3FCQUNWO2lCQUNKO3FCQUFNO29CQUNILElBQUksU0FBUyxJQUFJLFNBQVMsRUFBRTt3QkFDeEIsd0VBQXdFO3dCQUN4RSxrRUFBa0U7d0JBQ2xFLElBQ0ksU0FBUzs0QkFDVCxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUM7Z0NBQ2xDLE9BQU8sQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7NEJBQ3pDLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQzlCOzRCQUNFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQzNCLE1BQU0sRUFDTixTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDeEIsQ0FBQTs0QkFDRCxJQUNJLE9BQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO2dDQUM5QixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUM7Z0NBQ2xDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxFQUN0QztnQ0FDRSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUE7Z0NBQ3RCLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7Z0NBQ2hELE9BQU07NkJBQ1Q7eUJBQ0o7cUJBQ0o7aUJBQ0o7YUFDSjtZQUFDLE9BQU8sS0FBSyxFQUFFO2dCQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUN2RjtTQUNKO0lBQ0wsQ0FBQztJQUVPLFVBQVUsQ0FBQyxLQUFxQjtRQUNwQyx3RUFBd0U7UUFDeEUsK0NBQStDO1FBQy9DLDJFQUEyRTtRQUMzRSxrREFBa0Q7UUFDbEQsb0VBQW9FO1FBQ3BFLElBQ0ksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDMUMsQ0FBQyxDQUFDLHdCQUF3QixJQUFJLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxJQUFJLGVBQWUsQ0FBQztZQUM3RSxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQ2QsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQzlDO1lBQ0UsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDOUQ7SUFDTCxDQUFDO0lBRU8scUJBQXFCLENBQUMsS0FBdUI7UUFDakQsd0VBQXdFO1FBQ3hFLDhEQUE4RDtRQUM5RCw4Q0FBOEM7UUFDOUMsSUFDSSxDQUFDLHdCQUF3QjtZQUN6QixDQUFDLElBQUksQ0FBQyxRQUFRO1lBQ2QsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQzVELGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFDMUQ7WUFDRSxLQUFLLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ25DLElBQUk7Z0JBQ0EsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDM0MsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3RDO2dCQUNELDRCQUE0QjtnQkFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7b0JBQ25CLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDeEM7YUFDSjtZQUFDLE9BQU8sS0FBSyxFQUFFO2dCQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUM1RjtTQUNKO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQVksRUFBRSxPQUFnQztRQUNwRSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1YsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDZixPQUFPLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsWUFBWTtJQUVaLFdBQVc7UUFDUCxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUMxQyxjQUFjLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsbUJBQW1CLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDOzttSEF4bENRLHNCQUFzQjt1R0FBdEIsc0JBQXNCLHdzQ0FOcEIsQ0FBQztZQUNSLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztZQUNyRCxLQUFLLEVBQUUsSUFBSTtTQUNkLENBQUMscVBBeUVvRCxVQUFVLGdFQ2hKcEUsMExBQ2tFOzJGRHdFckQsc0JBQXNCO2tCQWxCbEMsU0FBUzsrQkFDSSxnQkFBZ0IsUUFDcEI7d0JBQ0YsS0FBSyxFQUFFLDBCQUEwQjt3QkFDakMsd0JBQXdCLEVBQUUsNkJBQTZCO3dCQUN2RCxhQUFhLEVBQUUsa0NBQWtDO3dCQUNqRCxtQkFBbUIsRUFBRSw2Q0FBNkM7d0JBQ2xFLG9CQUFvQixFQUFFLGdEQUFnRDt3QkFDdEUsdUJBQXVCLEVBQUUsbURBQW1EO3FCQUMvRSxtQkFFZ0IsdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxDQUFDOzRCQUNSLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHVCQUF1QixDQUFDOzRCQUNyRCxLQUFLLEVBQUUsSUFBSTt5QkFDZCxDQUFDO3FNQXFCTyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBSUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRWlDLGVBQWU7c0JBQXJELFdBQVc7dUJBQUMsd0JBQXdCO2dCQUNBLGFBQWE7c0JBQWpELFdBQVc7dUJBQUMsc0JBQXNCO2dCQUNILFNBQVM7c0JBQXhDLFdBQVc7dUJBQUMsaUJBQWlCO2dCQU9vQixpQkFBaUI7c0JBQWxFLFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNvQixrQkFBa0I7c0JBQXJGLFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7O0FBb2hDdEU7O0dBRUc7QUFFSCxNQUFNLGlCQUFpQixHQUFHLENBQUMsTUFBcUIsRUFBRSxNQUEwQixFQUFxQixFQUFFO0lBQy9GLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzdGLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFXLEVBQUUsQ0FBVyxFQUFFLEVBQUU7SUFDOUMsT0FBTyxDQUNILENBQUMsQ0FBQyxDQUFDLGNBQWMsS0FBSyxDQUFDLENBQUMsY0FBYztRQUNsQyxDQUFDLENBQUMsV0FBVyxLQUFLLENBQUMsQ0FBQyxXQUFXO1FBQy9CLENBQUMsQ0FBQyxZQUFZLEtBQUssQ0FBQyxDQUFDLFlBQVk7UUFDakMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDLGNBQWMsS0FBSyxDQUFDLENBQUMsWUFBWTtZQUNoQyxDQUFDLENBQUMsV0FBVyxLQUFLLENBQUMsQ0FBQyxTQUFTO1lBQzdCLENBQUMsQ0FBQyxZQUFZLEtBQUssQ0FBQyxDQUFDLGNBQWM7WUFDbkMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQ3JDLENBQUM7QUFDTixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUVILE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBcUIsRUFBRSxNQUEwQixFQUFxQixFQUFFO0lBQ3ZGLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3pFLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBRUgsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLE1BQXFCLEVBQUUsTUFBMEIsRUFBVyxFQUFFO0lBQ3RGLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksYUFBYSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDekYsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQUM7QUFFRixNQUFNLGVBQWUsR0FBRyxDQUFDLFlBQTBCLEVBQUUsRUFBRTtJQUNuRCxPQUFPLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLElBQUksWUFBWSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDM0osQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsSUFBSSxZQUFZLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO0FBQy9KLENBQUMsQ0FBQTtBQUVEOzs7R0FHRztBQUNILE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxLQUFZLEVBQUUsTUFBcUIsRUFBRSxFQUFFO0lBQ3pFLE1BQU0sS0FBSyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUMxRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDN0IsT0FBTztLQUNWO0lBQ0QsTUFBTSxVQUFVLEdBQUksS0FBMEIsQ0FBQyxJQUFJLENBQUM7SUFDcEQsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0MsaURBQWlEO0lBQ2pELElBQUksVUFBVSxJQUFJLFlBQVksQ0FBQyxVQUFVLFlBQVksSUFBSSxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUNuSCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDO1FBQ3pDLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7S0FDcEU7QUFDTCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBPbkluaXQsXG4gICAgSW5wdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIFJlbmRlcmVyMixcbiAgICBFbGVtZW50UmVmLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIE9uRGVzdHJveSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBOZ1pvbmUsXG4gICAgSW5qZWN0b3IsXG4gICAgZm9yd2FyZFJlZixcbiAgICBPbkNoYW5nZXMsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIERvQ2hlY2tcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOT0RFX1RPX0VMRU1FTlQsIElTX0ZPQ1VTRUQsIEVESVRPUl9UT19FTEVNRU5ULCBFTEVNRU5UX1RPX05PREUsIElTX1JFQURPTkxZLCBFRElUT1JfVE9fT05fQ0hBTkdFLCBFRElUT1JfVE9fV0lORE9XIH0gZnJvbSAnLi4vLi4vdXRpbHMvd2Vhay1tYXBzJztcbmltcG9ydCB7IFRleHQgYXMgU2xhdGVUZXh0LCBFbGVtZW50LCBUcmFuc2Zvcm1zLCBFZGl0b3IsIFJhbmdlLCBQYXRoLCBOb2RlRW50cnksIE5vZGUsIERlc2NlbmRhbnQgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgZ2V0RGlyZWN0aW9uIGZyb20gJ2RpcmVjdGlvbic7XG5pbXBvcnQgeyBBbmd1bGFyRWRpdG9yIH0gZnJvbSAnLi4vLi4vcGx1Z2lucy9hbmd1bGFyLWVkaXRvcic7XG5pbXBvcnQge1xuICAgIERPTUVsZW1lbnQsXG4gICAgRE9NTm9kZSxcbiAgICBpc0RPTU5vZGUsXG4gICAgRE9NU3RhdGljUmFuZ2UsXG4gICAgRE9NUmFuZ2UsXG4gICAgaXNET01FbGVtZW50LFxuICAgIGlzUGxhaW5UZXh0T25seVBhc3RlLFxuICAgIERPTVNlbGVjdGlvbixcbiAgICBnZXREZWZhdWx0Vmlld1xufSBmcm9tICcuLi8uLi91dGlscy9kb20nO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSVNfRklSRUZPWCwgSVNfU0FGQVJJLCBJU19FREdFX0xFR0FDWSwgSVNfQ0hST01FX0xFR0FDWSwgSVNfQ0hST01FLCBIQVNfQkVGT1JFX0lOUFVUX1NVUFBPUlQgfSBmcm9tICcuLi8uLi91dGlscy9lbnZpcm9ubWVudCc7XG5pbXBvcnQgSG90a2V5cyBmcm9tICcuLi8uLi91dGlscy9ob3RrZXlzJztcbmltcG9ydCB7IEJlZm9yZUlucHV0RXZlbnQsIGV4dHJhY3RCZWZvcmVJbnB1dEV2ZW50IH0gZnJvbSAnLi4vLi4vY3VzdG9tLWV2ZW50L0JlZm9yZUlucHV0RXZlbnRQbHVnaW4nO1xuaW1wb3J0IHsgQkVGT1JFX0lOUFVUX0VWRU5UUyB9IGZyb20gJy4uLy4uL2N1c3RvbS1ldmVudC9iZWZvcmUtaW5wdXQtcG9seWZpbGwnO1xuaW1wb3J0IHsgU2xhdGVFcnJvckNvZGUgfSBmcm9tICcuLi8uLi90eXBlcy9lcnJvcic7XG5pbXBvcnQgRGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IHsgU2xhdGVTdHJpbmdUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uL3N0cmluZy90ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTbGF0ZUNoaWxkcmVuQ29udGV4dCwgU2xhdGVWaWV3Q29udGV4dCB9IGZyb20gJy4uLy4uL3ZpZXcvY29udGV4dCc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL3R5cGVzL3ZpZXcnO1xuaW1wb3J0IHsgSGlzdG9yeUVkaXRvciB9IGZyb20gJ3NsYXRlLWhpc3RvcnknO1xuaW1wb3J0IHsgaXNEZWNvcmF0b3JSYW5nZUxpc3RFcXVhbCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IGNoZWNrLCBub3JtYWxpemUgfSBmcm9tICcuLi8uLi91dGlscy9nbG9iYWwtbm9ybWFsaXplJztcbmltcG9ydCB7IFNsYXRlUGxhY2Vob2xkZXIgfSBmcm9tICcuLi8uLi90eXBlcy9mZWF0dXJlJztcblxuY29uc3QgdGltZURlYnVnID0gRGVidWcoJ3NsYXRlLWFuZ3VsYXItdGltZScpO1xuXG4vLyBub3QgY29ycmVjdGx5IGNsaXBib2FyZERhdGEgb24gYmVmb3JlaW5wdXRcbmNvbnN0IGZvcmNlT25ET01QYXN0ZSA9IElTX1NBRkFSSTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzbGF0ZS1lZGl0YWJsZScsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ3NsYXRlLWVkaXRhYmxlLWNvbnRhaW5lcicsXG4gICAgICAgICdbYXR0ci5jb250ZW50ZWRpdGFibGVdJzogJ3JlYWRvbmx5ID8gdW5kZWZpbmVkIDogdHJ1ZScsXG4gICAgICAgICdbYXR0ci5yb2xlXSc6IGByZWFkb25seSA/IHVuZGVmaW5lZCA6ICd0ZXh0Ym94J2AsXG4gICAgICAgICdbYXR0ci5zcGVsbENoZWNrXSc6IGAhaGFzQmVmb3JlSW5wdXRTdXBwb3J0ID8gZmFsc2UgOiBzcGVsbENoZWNrYCxcbiAgICAgICAgJ1thdHRyLmF1dG9Db3JyZWN0XSc6IGAhaGFzQmVmb3JlSW5wdXRTdXBwb3J0ID8gJ2ZhbHNlJyA6IGF1dG9Db3JyZWN0YCxcbiAgICAgICAgJ1thdHRyLmF1dG9DYXBpdGFsaXplXSc6IGAhaGFzQmVmb3JlSW5wdXRTdXBwb3J0ID8gJ2ZhbHNlJyA6IGF1dG9DYXBpdGFsaXplYFxuICAgIH0sXG4gICAgdGVtcGxhdGVVcmw6ICdlZGl0YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbe1xuICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2xhdGVFZGl0YWJsZUNvbXBvbmVudCksXG4gICAgICAgIG11bHRpOiB0cnVlXG4gICAgfV1cbn0pXG5leHBvcnQgY2xhc3MgU2xhdGVFZGl0YWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQsIERvQ2hlY2sge1xuICAgIHZpZXdDb250ZXh0OiBTbGF0ZVZpZXdDb250ZXh0O1xuICAgIGNvbnRleHQ6IFNsYXRlQ2hpbGRyZW5Db250ZXh0O1xuXG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBpc0NvbXBvc2luZyA9IGZhbHNlO1xuICAgIGlzRHJhZ2dpbmdJbnRlcm5hbGx5ID0gZmFsc2U7XG4gICAgaXNVcGRhdGluZ1NlbGVjdGlvbiA9IGZhbHNlO1xuICAgIGxhdGVzdEVsZW1lbnQgPSBudWxsIGFzIERPTUVsZW1lbnQgfCBudWxsO1xuXG4gICAgcHJvdGVjdGVkIG1hbnVhbExpc3RlbmVyczogKCgpID0+IHZvaWQpW10gPSBbXTtcblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZWQ6IGJvb2xlYW47XG5cbiAgICBwcml2YXRlIG9uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gKCkgPT4geyB9O1xuXG4gICAgcHJpdmF0ZSBvbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gKCkgPT4geyB9O1xuXG4gICAgQElucHV0KCkgZWRpdG9yOiBBbmd1bGFyRWRpdG9yO1xuXG4gICAgQElucHV0KCkgcmVuZGVyRWxlbWVudDogKGVsZW1lbnQ6IEVsZW1lbnQpID0+IFZpZXdUeXBlIHwgbnVsbDtcblxuICAgIEBJbnB1dCgpIHJlbmRlckxlYWY6ICh0ZXh0OiBTbGF0ZVRleHQpID0+IFZpZXdUeXBlIHwgbnVsbDtcblxuICAgIEBJbnB1dCgpIHJlbmRlclRleHQ6ICh0ZXh0OiBTbGF0ZVRleHQpID0+IFZpZXdUeXBlIHwgbnVsbDtcblxuICAgIEBJbnB1dCgpIGRlY29yYXRlOiAoZW50cnk6IE5vZGVFbnRyeSkgPT4gUmFuZ2VbXSA9ICgpID0+IFtdO1xuXG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXJEZWNvcmF0ZTogKGVkaXRvcjogRWRpdG9yKSA9PiBTbGF0ZVBsYWNlaG9sZGVyW107XG5cbiAgICBASW5wdXQoKSBpc1N0cmljdERlY29yYXRlOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpIHRyYWNrQnk6IChub2RlOiBFbGVtZW50KSA9PiBhbnkgPSAoKSA9PiBudWxsO1xuXG4gICAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgICAvLyNyZWdpb24gaW5wdXQgZXZlbnQgaGFuZGxlclxuICAgIEBJbnB1dCgpIGJlZm9yZUlucHV0OiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkO1xuICAgIEBJbnB1dCgpIGJsdXI6IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG4gICAgQElucHV0KCkgY2xpY2s6IChldmVudDogTW91c2VFdmVudCkgPT4gdm9pZDtcbiAgICBASW5wdXQoKSBjb21wb3NpdGlvbkVuZDogKGV2ZW50OiBDb21wb3NpdGlvbkV2ZW50KSA9PiB2b2lkO1xuICAgIEBJbnB1dCgpIGNvbXBvc2l0aW9uU3RhcnQ6IChldmVudDogQ29tcG9zaXRpb25FdmVudCkgPT4gdm9pZDtcbiAgICBASW5wdXQoKSBjb3B5OiAoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSA9PiB2b2lkO1xuICAgIEBJbnB1dCgpIGN1dDogKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkgPT4gdm9pZDtcbiAgICBASW5wdXQoKSBkcmFnT3ZlcjogKGV2ZW50OiBEcmFnRXZlbnQpID0+IHZvaWQ7XG4gICAgQElucHV0KCkgZHJhZ1N0YXJ0OiAoZXZlbnQ6IERyYWdFdmVudCkgPT4gdm9pZDtcbiAgICBASW5wdXQoKSBkcmFnRW5kOiAoZXZlbnQ6IERyYWdFdmVudCkgPT4gdm9pZDtcbiAgICBASW5wdXQoKSBkcm9wOiAoZXZlbnQ6IERyYWdFdmVudCkgPT4gdm9pZDtcbiAgICBASW5wdXQoKSBmb2N1czogKGV2ZW50OiBFdmVudCkgPT4gdm9pZDtcbiAgICBASW5wdXQoKSBrZXlkb3duOiAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHZvaWQ7XG4gICAgQElucHV0KCkgcGFzdGU6IChldmVudDogQ2xpcGJvYXJkRXZlbnQpID0+IHZvaWQ7XG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gRE9NIGF0dHJcbiAgICBASW5wdXQoKSBzcGVsbENoZWNrID0gZmFsc2U7XG4gICAgQElucHV0KCkgYXV0b0NvcnJlY3QgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBhdXRvQ2FwaXRhbGl6ZSA9IGZhbHNlO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtc2xhdGUtZWRpdG9yJykgZGF0YVNsYXRlRWRpdG9yID0gdHJ1ZTtcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1zbGF0ZS1ub2RlJykgZGF0YVNsYXRlTm9kZSA9ICd2YWx1ZSc7XG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtZ3JhbW0nKSBkYXRhR3JhbW0gPSBmYWxzZTtcblxuICAgIGdldCBoYXNCZWZvcmVJbnB1dFN1cHBvcnQoKSB7XG4gICAgICAgIHJldHVybiBIQVNfQkVGT1JFX0lOUFVUX1NVUFBPUlQ7XG4gICAgfVxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgQFZpZXdDaGlsZCgndGVtcGxhdGVDb21wb25lbnQnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0ZW1wbGF0ZUNvbXBvbmVudDogU2xhdGVTdHJpbmdUZW1wbGF0ZUNvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKCd0ZW1wbGF0ZUNvbXBvbmVudCcsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pIHRlbXBsYXRlRWxlbWVudFJlZjogRWxlbWVudFJlZjxhbnk+O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwdWJsaWMgcmVuZGVyZXIyOiBSZW5kZXJlcjIsXG4gICAgICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvclxuICAgICkgeyB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5lZGl0b3IuaW5qZWN0b3IgPSB0aGlzLmluamVjdG9yO1xuICAgICAgICB0aGlzLmVkaXRvci5jaGlsZHJlbiA9IFtdO1xuICAgICAgICBsZXQgd2luZG93ID0gZ2V0RGVmYXVsdFZpZXcodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBFRElUT1JfVE9fV0lORE9XLnNldCh0aGlzLmVkaXRvciwgd2luZG93KTtcbiAgICAgICAgRURJVE9SX1RPX0VMRU1FTlQuc2V0KHRoaXMuZWRpdG9yLCB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIE5PREVfVE9fRUxFTUVOVC5zZXQodGhpcy5lZGl0b3IsIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgRUxFTUVOVF9UT19OT0RFLnNldCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5lZGl0b3IpO1xuICAgICAgICBJU19SRUFET05MWS5zZXQodGhpcy5lZGl0b3IsIHRoaXMucmVhZG9ubHkpO1xuICAgICAgICBFRElUT1JfVE9fT05fQ0hBTkdFLnNldCh0aGlzLmVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplVmlld0NvbnRleHQoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplQ29udGV4dCgpO1xuXG4gICAgICAgIC8vIHJlbW92ZSB1bnVzZWQgRE9NLCBqdXN0IGtlZXAgdGVtcGxhdGVDb21wb25lbnQgaW5zdGFuY2VcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmUoKTtcblxuICAgICAgICAvLyBhZGQgYnJvd3NlciBjbGFzc1xuICAgICAgICBsZXQgYnJvd3NlckNsYXNzID0gSVNfRklSRUZPWCA/ICdmaXJlZm94JyA6IChJU19TQUZBUkkgPyAnc2FmYXJpJyA6ICcnKTtcbiAgICAgICAgYnJvd3NlckNsYXNzICYmIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoYnJvd3NlckNsYXNzKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhzaW1wbGVDaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlY29yYXRlQ2hhbmdlID0gc2ltcGxlQ2hhbmdlc1snZGVjb3JhdGUnXTtcbiAgICAgICAgaWYgKGRlY29yYXRlQ2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmZvcmNlRmx1c2goKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWFkb25seUNoYW5nZSA9IHNpbXBsZUNoYW5nZXNbJ3JlYWRvbmx5J107XG4gICAgICAgIGlmIChyZWFkb25seUNoYW5nZSkge1xuICAgICAgICAgICAgSVNfUkVBRE9OTFkuc2V0KHRoaXMuZWRpdG9yLCB0aGlzLnJlYWRvbmx5KTtcbiAgICAgICAgICAgIHRoaXMuZGV0ZWN0Q29udGV4dCgpO1xuICAgICAgICAgICAgdGhpcy50b1NsYXRlU2VsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gICAgfVxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICAgIH1cblxuICAgIHdyaXRlVmFsdWUodmFsdWU6IEVsZW1lbnRbXSkge1xuICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2sodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IuY2hpbGRyZW4gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3Iub25FcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFNsYXRlRXJyb3JDb2RlLkludmFsaWRWYWx1ZUVycm9yLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnaW5pdGlhbGl6ZSBpbnZhbGlkIGRhdGEnLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB2YWx1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLmNoaWxkcmVuID0gbm9ybWFsaXplKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUNvbnRleHQoKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHdpbmRvdyA9IEFuZ3VsYXJFZGl0b3IuZ2V0V2luZG93KHRoaXMuZWRpdG9yKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgJ3NlbGVjdGlvbmNoYW5nZScsXG4gICAgICAgICAgICBldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b1NsYXRlU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgd2luZG93LmRvY3VtZW50XG4gICAgICAgICk7XG4gICAgICAgIGlmIChIQVNfQkVGT1JFX0lOUFVUX1NVUFBPUlQpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JlaW5wdXQnLCB0aGlzLm9uRE9NQmVmb3JlSW5wdXQuYmluZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5vbkRPTUJsdXIuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uRE9NQ2xpY2suYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25lbmQnLCB0aGlzLm9uRE9NQ29tcG9zaXRpb25FbmQuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25zdGFydCcsIHRoaXMub25ET01Db21wb3NpdGlvblN0YXJ0LmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2NvcHknLCB0aGlzLm9uRE9NQ29weS5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdjdXQnLCB0aGlzLm9uRE9NQ3V0LmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcy5vbkRPTURyYWdPdmVyLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMub25ET01EcmFnU3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMub25ET01EcmFnRW5kLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCB0aGlzLm9uRE9NRHJvcC5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMub25ET01Gb2N1cy5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbkRPTUtleWRvd24uYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncGFzdGUnLCB0aGlzLm9uRE9NUGFzdGUuYmluZCh0aGlzKSk7XG4gICAgICAgIEJFRk9SRV9JTlBVVF9FVkVOVFMuZm9yRWFjaChldmVudCA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQubmFtZSwgKCkgPT4geyB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdG9OYXRpdmVTZWxlY3Rpb24oKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gdGhpcy5lZGl0b3I7XG4gICAgICAgICAgICBjb25zdCByb290ID0gQW5ndWxhckVkaXRvci5maW5kRG9jdW1lbnRPclNoYWRvd1Jvb3QodGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgY29uc3QgeyBhY3RpdmVFbGVtZW50IH0gPSByb290O1xuICAgICAgICAgICAgY29uc3QgZG9tU2VsZWN0aW9uID0gKHJvb3QgYXMgRG9jdW1lbnQpLmdldFNlbGVjdGlvbigpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pc0NvbXBvc2luZyB8fCAhZG9tU2VsZWN0aW9uIHx8ICFBbmd1bGFyRWRpdG9yLmlzRm9jdXNlZCh0aGlzLmVkaXRvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGhhc0RvbVNlbGVjdGlvbiA9IGRvbVNlbGVjdGlvbi50eXBlICE9PSAnTm9uZSc7XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBET00gc2VsZWN0aW9uIGlzIHByb3Blcmx5IHVuc2V0LCB3ZSdyZSBkb25lLlxuICAgICAgICAgICAgaWYgKCFzZWxlY3Rpb24gJiYgIWhhc0RvbVNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgdGhlIERPTSBzZWxlY3Rpb24gaXMgYWxyZWFkeSBjb3JyZWN0LCB3ZSdyZSBkb25lLlxuICAgICAgICAgICAgLy8gdmVyaWZ5IHRoYXQgdGhlIGRvbSBzZWxlY3Rpb24gaXMgaW4gdGhlIGVkaXRvclxuICAgICAgICAgICAgY29uc3QgZWRpdG9yRWxlbWVudCA9IEVESVRPUl9UT19FTEVNRU5ULmdldCh0aGlzLmVkaXRvcikhO1xuICAgICAgICAgICAgbGV0IGhhc0RvbVNlbGVjdGlvbkluRWRpdG9yID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoZWRpdG9yRWxlbWVudC5jb250YWlucyhkb21TZWxlY3Rpb24uYW5jaG9yTm9kZSkgJiYgZWRpdG9yRWxlbWVudC5jb250YWlucyhkb21TZWxlY3Rpb24uZm9jdXNOb2RlKSkge1xuICAgICAgICAgICAgICAgIGhhc0RvbVNlbGVjdGlvbkluRWRpdG9yID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgdGhlIERPTSBzZWxlY3Rpb24gaXMgaW4gdGhlIGVkaXRvciBhbmQgdGhlIGVkaXRvciBzZWxlY3Rpb24gaXMgYWxyZWFkeSBjb3JyZWN0LCB3ZSdyZSBkb25lLlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhc0RvbVNlbGVjdGlvbiAmJlxuICAgICAgICAgICAgICAgIGhhc0RvbVNlbGVjdGlvbkluRWRpdG9yICYmXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uICYmXG4gICAgICAgICAgICAgICAgaGFzU3RyaW5nVGFyZ2V0KGRvbVNlbGVjdGlvbikgJiZcbiAgICAgICAgICAgICAgICBSYW5nZS5lcXVhbHMoQW5ndWxhckVkaXRvci50b1NsYXRlUmFuZ2UodGhpcy5lZGl0b3IsIGRvbVNlbGVjdGlvbiksIHNlbGVjdGlvbilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcHJldmVudCB1cGRhdGluZyBuYXRpdmUgc2VsZWN0aW9uIHdoZW4gYWN0aXZlIGVsZW1lbnQgaXMgdm9pZCBlbGVtZW50XG4gICAgICAgICAgICBpZiAoaXNUYXJnZXRJbnNpZGVWb2lkKHRoaXMuZWRpdG9yLCBhY3RpdmVFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gd2hlbiA8RWRpdGFibGUvPiBpcyBiZWluZyBjb250cm9sbGVkIHRocm91Z2ggZXh0ZXJuYWwgdmFsdWVcbiAgICAgICAgICAgIC8vIHRoZW4gaXRzIGNoaWxkcmVuIG1pZ2h0IGp1c3QgY2hhbmdlIC0gRE9NIHJlc3BvbmRzIHRvIGl0IG9uIGl0cyBvd25cbiAgICAgICAgICAgIC8vIGJ1dCBTbGF0ZSdzIHZhbHVlIGlzIG5vdCBiZWluZyB1cGRhdGVkIHRocm91Z2ggYW55IG9wZXJhdGlvblxuICAgICAgICAgICAgLy8gYW5kIHRodXMgaXQgZG9lc24ndCB0cmFuc2Zvcm0gc2VsZWN0aW9uIG9uIGl0cyBvd25cbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb24gJiYgIUFuZ3VsYXJFZGl0b3IuaGFzUmFuZ2UodGhpcy5lZGl0b3IsIHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5zZWxlY3Rpb24gPSBBbmd1bGFyRWRpdG9yLnRvU2xhdGVSYW5nZSh0aGlzLmVkaXRvciwgZG9tU2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZSBET00gc2VsZWN0aW9uIGlzIG91dCBvZiBzeW5jLCBzbyB1cGRhdGUgaXQuXG4gICAgICAgICAgICBjb25zdCBlbCA9IEFuZ3VsYXJFZGl0b3IudG9ET01Ob2RlKHRoaXMuZWRpdG9yLCB0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICB0aGlzLmlzVXBkYXRpbmdTZWxlY3Rpb24gPSB0cnVlO1xuXG4gICAgICAgICAgICBjb25zdCBuZXdEb21SYW5nZSA9IHNlbGVjdGlvbiAmJiBBbmd1bGFyRWRpdG9yLnRvRE9NUmFuZ2UodGhpcy5lZGl0b3IsIHNlbGVjdGlvbik7XG5cbiAgICAgICAgICAgIGlmIChuZXdEb21SYW5nZSkge1xuICAgICAgICAgICAgICAgIC8vIENPTVBBVDogU2luY2UgdGhlIERPTSByYW5nZSBoYXMgbm8gY29uY2VwdCBvZiBiYWNrd2FyZHMvZm9yd2FyZHNcbiAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGNoZWNrIGFuZCBkbyB0aGUgcmlnaHQgdGhpbmcgaGVyZS5cbiAgICAgICAgICAgICAgICBpZiAoUmFuZ2UuaXNCYWNrd2FyZChzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgICAgICAgICAgICAgIGRvbVNlbGVjdGlvbi5zZXRCYXNlQW5kRXh0ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3RG9tUmFuZ2UuZW5kQ29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3RG9tUmFuZ2UuZW5kT2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3RG9tUmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdEb21SYW5nZS5zdGFydE9mZnNldFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgICAgICAgICAgICAgIGRvbVNlbGVjdGlvbi5zZXRCYXNlQW5kRXh0ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3RG9tUmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdEb21SYW5nZS5zdGFydE9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0RvbVJhbmdlLmVuZENvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0RvbVJhbmdlLmVuZE9mZnNldFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZG9tU2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBDT01QQVQ6IEluIEZpcmVmb3gsIGl0J3Mgbm90IGVub3VnaCB0byBjcmVhdGUgYSByYW5nZSwgeW91IGFsc28gbmVlZFxuICAgICAgICAgICAgICAgIC8vIHRvIGZvY3VzIHRoZSBjb250ZW50ZWRpdGFibGUgZWxlbWVudCB0b28uICgyMDE2LzExLzE2KVxuICAgICAgICAgICAgICAgIGlmIChuZXdEb21SYW5nZSAmJiBJU19GSVJFRk9YKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5pc1VwZGF0aW5nU2VsZWN0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLm9uRXJyb3IoeyBjb2RlOiBTbGF0ZUVycm9yQ29kZS5Ub05hdGl2ZVNlbGVjdGlvbkVycm9yLCBuYXRpdmVFcnJvcjogZXJyb3IgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLmZvcmNlRmx1c2goKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHRoaXMuZWRpdG9yLmNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgICAgIHRpbWVEZWJ1ZygnZWRpdGFibGUgbmdBZnRlclZpZXdDaGVja2VkJyk7XG4gICAgfVxuXG4gICAgbmdEb0NoZWNrKCkge1xuICAgICAgICB0aW1lRGVidWcoJ2VkaXRhYmxlIG5nRG9DaGVjaycpO1xuICAgIH1cblxuICAgIGZvcmNlRmx1c2goKSB7XG4gICAgICAgIHRpbWVEZWJ1Zygnc3RhcnQgZGF0YSBzeW5jJyk7XG4gICAgICAgIHRoaXMuZGV0ZWN0Q29udGV4dCgpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIC8vIHJlcGFpciBjb2xsYWJvcmF0aXZlIGVkaXRpbmcgd2hlbiBDaGluZXNlIGlucHV0IGlzIGludGVycnVwdGVkIGJ5IG90aGVyIHVzZXJzJyBjdXJzb3JzXG4gICAgICAgIC8vIHdoZW4gdGhlIERPTUVsZW1lbnQgd2hlcmUgdGhlIHNlbGVjdGlvbiBpcyBsb2NhdGVkIGlzIHJlbW92ZWRcbiAgICAgICAgLy8gdGhlIGNvbXBvc2l0aW9udXBkYXRlIGFuZCBjb21wb3NpdGlvbmVuZCBldmVudHMgd2lsbCBubyBsb25nZXIgYmUgZmlyZWRcbiAgICAgICAgLy8gc28gaXNDb21wb3NpbmcgbmVlZHMgdG8gYmUgY29ycmVjdGVkXG4gICAgICAgIC8vIG5lZWQgZXhlYyBhZnRlciB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCkgdG8gcmVuZGVyIEhUTUxcbiAgICAgICAgLy8gbmVlZCBleGVjIGJlZm9yZSB0aGlzLnRvTmF0aXZlU2VsZWN0aW9uKCkgdG8gY29ycmVjdCBuYXRpdmUgc2VsZWN0aW9uXG4gICAgICAgIGlmICh0aGlzLmlzQ29tcG9zaW5nKSB7XG4gICAgICAgICAgICAvLyBDb21wb3NpdGlvbiBpbnB1dCB0ZXh0IGJlIG5vdCByZW5kZXJlZCB3aGVuIHVzZXIgY29tcG9zaXRpb24gaW5wdXQgd2l0aCBzZWxlY3Rpb24gaXMgZXhwYW5kZWRcbiAgICAgICAgICAgIC8vIEF0IHRoaXMgdGltZSwgdGhlIGZvbGxvd2luZyBtYXRjaGluZyBjb25kaXRpb25zIGFyZSBtZXQsIGFzc2lnbiBpc0NvbXBvc2luZyB0byBmYWxzZSwgYW5kIHRoZSBzdGF0dXMgaXMgd3JvbmdcbiAgICAgICAgICAgIC8vIHRoaXMgdGltZSBjb25kaXRpb24gaXMgdHJ1ZSBhbmQgaXNDb21wb3NpaW5nIGlzIGFzc2lnbmVkIGZhbHNlXG4gICAgICAgICAgICAvLyBUaGVyZWZvcmUsIG5lZWQgdG8gd2FpdCBmb3IgdGhlIGNvbXBvc2l0aW9uIGlucHV0IHRleHQgdG8gYmUgcmVuZGVyZWQgYmVmb3JlIHBlcmZvcm1pbmcgY29uZGl0aW9uIG1hdGNoaW5nXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IE5vZGUuZ2V0KHRoaXMuZWRpdG9yLCB0aGlzLmVkaXRvci5zZWxlY3Rpb24uYW5jaG9yLnBhdGgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHRET01Ob2RlID0gQW5ndWxhckVkaXRvci50b0RPTU5vZGUodGhpcy5lZGl0b3IsIHRleHROb2RlKTtcbiAgICAgICAgICAgICAgICBsZXQgdGV4dENvbnRlbnQgPSAnJztcbiAgICAgICAgICAgICAgICAvLyBza2lwIGRlY29yYXRlIHRleHRcbiAgICAgICAgICAgICAgICB0ZXh0RE9NTm9kZS5xdWVyeVNlbGVjdG9yQWxsKCdbZWRpdGFibGUtdGV4dF0nKS5mb3JFYWNoKChzdHJpbmdET01Ob2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZXh0ID0gc3RyaW5nRE9NTm9kZS50ZXh0Q29udGVudDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgemVyb0NoYXIgPSAnXFx1RkVGRic7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSB6ZXJvIHdpdGggY2hhclxuICAgICAgICAgICAgICAgICAgICBpZiAodGV4dC5zdGFydHNXaXRoKHplcm9DaGFyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRleHQuZW5kc1dpdGgoemVyb0NoYXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZSgwLCB0ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50ICs9IHRleHQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKE5vZGUuc3RyaW5nKHRleHROb2RlKS5lbmRzV2l0aCh0ZXh0Q29udGVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NvbXBvc2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9OYXRpdmVTZWxlY3Rpb24oKTtcbiAgICAgICAgdGltZURlYnVnKCdlbmQgZGF0YSBzeW5jJyk7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZUNvbnRleHQoKSB7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IHtcbiAgICAgICAgICAgIHBhcmVudDogdGhpcy5lZGl0b3IsXG4gICAgICAgICAgICBzZWxlY3Rpb246IHRoaXMuZWRpdG9yLnNlbGVjdGlvbixcbiAgICAgICAgICAgIGRlY29yYXRpb25zOiB0aGlzLmdlbmVyYXRlRGVjb3JhdGlvbnMoKSxcbiAgICAgICAgICAgIGRlY29yYXRlOiB0aGlzLmRlY29yYXRlLFxuICAgICAgICAgICAgcmVhZG9ubHk6IHRoaXMucmVhZG9ubHlcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplVmlld0NvbnRleHQoKSB7XG4gICAgICAgIHRoaXMudmlld0NvbnRleHQgPSB7XG4gICAgICAgICAgICBlZGl0b3I6IHRoaXMuZWRpdG9yLFxuICAgICAgICAgICAgcmVuZGVyRWxlbWVudDogdGhpcy5yZW5kZXJFbGVtZW50LFxuICAgICAgICAgICAgcmVuZGVyTGVhZjogdGhpcy5yZW5kZXJMZWFmLFxuICAgICAgICAgICAgcmVuZGVyVGV4dDogdGhpcy5yZW5kZXJUZXh0LFxuICAgICAgICAgICAgdHJhY2tCeTogdGhpcy50cmFja0J5LFxuICAgICAgICAgICAgaXNTdHJpY3REZWNvcmF0ZTogdGhpcy5pc1N0cmljdERlY29yYXRlLFxuICAgICAgICAgICAgdGVtcGxhdGVDb21wb25lbnQ6IHRoaXMudGVtcGxhdGVDb21wb25lbnRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBkZXRlY3RDb250ZXh0KCkge1xuICAgICAgICBjb25zdCBkZWNvcmF0aW9ucyA9IHRoaXMuZ2VuZXJhdGVEZWNvcmF0aW9ucygpO1xuICAgICAgICBpZiAodGhpcy5jb250ZXh0LnNlbGVjdGlvbiAhPT0gdGhpcy5lZGl0b3Iuc2VsZWN0aW9uIHx8XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZGVjb3JhdGUgIT09IHRoaXMuZGVjb3JhdGUgfHxcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5yZWFkb25seSAhPT0gdGhpcy5yZWFkb25seSB8fFxuICAgICAgICAgICAgIWlzRGVjb3JhdG9yUmFuZ2VMaXN0RXF1YWwodGhpcy5jb250ZXh0LmRlY29yYXRpb25zLCBkZWNvcmF0aW9ucykpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IHRoaXMuZWRpdG9yLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogdGhpcy5lZGl0b3Iuc2VsZWN0aW9uLFxuICAgICAgICAgICAgICAgIGRlY29yYXRpb25zOiBkZWNvcmF0aW9ucyxcbiAgICAgICAgICAgICAgICBkZWNvcmF0ZTogdGhpcy5kZWNvcmF0ZSxcbiAgICAgICAgICAgICAgICByZWFkb25seTogdGhpcy5yZWFkb25seVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBvc2VQbGFjZWhvbGRlckRlY29yYXRlKGVkaXRvcjogRWRpdG9yKSB7XG4gICAgICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyRGVjb3JhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBsYWNlaG9sZGVyRGVjb3JhdGUoZWRpdG9yKSB8fCBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXIgJiZcbiAgICAgICAgICAgIGVkaXRvci5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgIEFycmF5LmZyb20oTm9kZS50ZXh0cyhlZGl0b3IpKS5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgIE5vZGUuc3RyaW5nKGVkaXRvcikgPT09ICcnXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBFZGl0b3Iuc3RhcnQoZWRpdG9yLCBbXSlcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgYW5jaG9yOiBzdGFydCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXM6IHN0YXJ0LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdlbmVyYXRlRGVjb3JhdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGRlY29yYXRpb25zID0gdGhpcy5kZWNvcmF0ZShbdGhpcy5lZGl0b3IsIFtdXSk7XG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyRGVjb3JhdGlvbnMgPSB0aGlzLmlzQ29tcG9zaW5nXG4gICAgICAgICAgICA/IFtdXG4gICAgICAgICAgICA6IHRoaXMuY29tcG9zZVBsYWNlaG9sZGVyRGVjb3JhdGUodGhpcy5lZGl0b3IpXG4gICAgICAgIGRlY29yYXRpb25zLnB1c2goLi4ucGxhY2Vob2xkZXJEZWNvcmF0aW9ucyk7XG4gICAgICAgIHJldHVybiBkZWNvcmF0aW9ucztcbiAgICB9XG5cbiAgICAvLyNyZWdpb24gZXZlbnQgcHJveHlcbiAgICBwcml2YXRlIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyLCB0YXJnZXQ6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLm1hbnVhbExpc3RlbmVycy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlcjIubGlzdGVuKHRhcmdldCwgZXZlbnROYW1lLCAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmVmb3JlSW5wdXRFdmVudCA9IGV4dHJhY3RCZWZvcmVJbnB1dEV2ZW50KGV2ZW50LnR5cGUsIG51bGwsIGV2ZW50LCBldmVudC50YXJnZXQpO1xuICAgICAgICAgICAgICAgIGlmIChiZWZvcmVJbnB1dEV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25GYWxsYmFja0JlZm9yZUlucHV0KGJlZm9yZUlucHV0RXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsaXN0ZW5lcihldmVudCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgdG9TbGF0ZVNlbGVjdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29tcG9zaW5nICYmICF0aGlzLmlzVXBkYXRpbmdTZWxlY3Rpb24gJiYgIXRoaXMuaXNEcmFnZ2luZ0ludGVybmFsbHkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdCA9IEFuZ3VsYXJFZGl0b3IuZmluZERvY3VtZW50T3JTaGFkb3dSb290KHRoaXMuZWRpdG9yKVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgYWN0aXZlRWxlbWVudCB9ID0gcm9vdDtcbiAgICAgICAgICAgICAgICBjb25zdCBlbCA9IEFuZ3VsYXJFZGl0b3IudG9ET01Ob2RlKHRoaXMuZWRpdG9yLCB0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICAgICAgY29uc3QgZG9tU2VsZWN0aW9uID0gKHJvb3QgYXMgRG9jdW1lbnQpLmdldFNlbGVjdGlvbigpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZUVsZW1lbnQgPT09IGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGF0ZXN0RWxlbWVudCA9IGFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIElTX0ZPQ1VTRUQuc2V0KHRoaXMuZWRpdG9yLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBJU19GT0NVU0VELmRlbGV0ZSh0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFkb21TZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybXMuZGVzZWxlY3QodGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGVkaXRvckVsZW1lbnQgPSBFRElUT1JfVE9fRUxFTUVOVC5nZXQodGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhc0RvbVNlbGVjdGlvbkluRWRpdG9yID0gZWRpdG9yRWxlbWVudC5jb250YWlucyhkb21TZWxlY3Rpb24uYW5jaG9yTm9kZSkgJiYgZWRpdG9yRWxlbWVudC5jb250YWlucyhkb21TZWxlY3Rpb24uZm9jdXNOb2RlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWhhc0RvbVNlbGVjdGlvbkluRWRpdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuZGVzZWxlY3QodGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gdHJ5IHRvIGdldCB0aGUgc2VsZWN0aW9uIGRpcmVjdGx5LCBiZWNhdXNlIHNvbWUgdGVycmlibGUgY2FzZSBjYW4gYmUgbm9ybWFsaXplIGZvciBub3JtYWxpemVET01Qb2ludFxuICAgICAgICAgICAgICAgIC8vIGZvciBleGFtcGxlLCBkb3VibGUtY2xpY2sgdGhlIGxhc3QgY2VsbCBvZiB0aGUgdGFibGUgdG8gc2VsZWN0IGEgbm9uLWVkaXRhYmxlIERPTVxuICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gQW5ndWxhckVkaXRvci50b1NsYXRlUmFuZ2UodGhpcy5lZGl0b3IsIGRvbVNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yLnNlbGVjdGlvbiAmJiBSYW5nZS5lcXVhbHMocmFuZ2UsIHRoaXMuZWRpdG9yLnNlbGVjdGlvbikgJiYgIWhhc1N0cmluZ1RhcmdldChkb21TZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNUYXJnZXRJbnNpZGVWb2lkKHRoaXMuZWRpdG9yLCBhY3RpdmVFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yY2UgYWRqdXN0IERPTVNlbGVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b05hdGl2ZVNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QodGhpcy5lZGl0b3IsIHJhbmdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLm9uRXJyb3IoeyBjb2RlOiBTbGF0ZUVycm9yQ29kZS5Ub1NsYXRlU2VsZWN0aW9uRXJyb3IsIG5hdGl2ZUVycm9yOiBlcnJvciB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRPTUJlZm9yZUlucHV0KFxuICAgICAgICBldmVudDogRXZlbnQgJiB7XG4gICAgICAgICAgICBpbnB1dFR5cGU6IHN0cmluZztcbiAgICAgICAgICAgIGlzQ29tcG9zaW5nOiBib29sZWFuO1xuICAgICAgICAgICAgZGF0YTogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgIGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyIHwgbnVsbDtcbiAgICAgICAgICAgIGdldFRhcmdldFJhbmdlcygpOiBET01TdGF0aWNSYW5nZVtdO1xuICAgICAgICB9XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgICAgICBjb25zdCByb290ID0gQW5ndWxhckVkaXRvci5maW5kRG9jdW1lbnRPclNoYWRvd1Jvb3QodGhpcy5lZGl0b3IpXG4gICAgICAgIGNvbnN0IHsgYWN0aXZlRWxlbWVudCB9ID0gcm9vdDtcbiAgICAgICAgaWYgKCF0aGlzLnJlYWRvbmx5ICYmIGhhc0VkaXRhYmxlVGFyZ2V0KGVkaXRvciwgZXZlbnQudGFyZ2V0KSAmJiAhaXNUYXJnZXRJbnNpZGVWb2lkKGVkaXRvciwgYWN0aXZlRWxlbWVudCkgJiYgIXRoaXMuaXNET01FdmVudEhhbmRsZWQoZXZlbnQsIHRoaXMuYmVmb3JlSW5wdXQpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSBlZGl0b3I7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBpbnB1dFR5cGU6IHR5cGUgfSA9IGV2ZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBldmVudC5kYXRhVHJhbnNmZXIgfHwgZXZlbnQuZGF0YSB8fCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgIC8vIENPTVBBVDogSWYgdGhlIHNlbGVjdGlvbiBpcyBleHBhbmRlZCwgZXZlbiBpZiB0aGUgY29tbWFuZCBzZWVtcyBsaWtlXG4gICAgICAgICAgICAgICAgLy8gYSBkZWxldGUgZm9yd2FyZC9iYWNrd2FyZCBjb21tYW5kIGl0IHNob3VsZCBkZWxldGUgdGhlIHNlbGVjdGlvbi5cbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIFJhbmdlLmlzRXhwYW5kZWQoc2VsZWN0aW9uKSAmJiB0eXBlLnN0YXJ0c1dpdGgoJ2RlbGV0ZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHR5cGUuZW5kc1dpdGgoJ0JhY2t3YXJkJykgPyAnYmFja3dhcmQnIDogJ2ZvcndhcmQnO1xuICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRnJhZ21lbnQoZWRpdG9yLCB7IGRpcmVjdGlvbiB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdkZWxldGVCeUNvbXBvc2l0aW9uJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVsZXRlQnlDdXQnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkZWxldGVCeURyYWcnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRnJhZ21lbnQoZWRpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVsZXRlQ29udGVudCc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RlbGV0ZUNvbnRlbnRGb3J3YXJkJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZvcndhcmQoZWRpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVsZXRlQ29udGVudEJhY2t3YXJkJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUJhY2t3YXJkKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RlbGV0ZUVudGlyZVNvZnRMaW5lJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUJhY2t3YXJkKGVkaXRvciwgeyB1bml0OiAnbGluZScgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRm9yd2FyZChlZGl0b3IsIHsgdW5pdDogJ2xpbmUnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkZWxldGVIYXJkTGluZUJhY2t3YXJkJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUJhY2t3YXJkKGVkaXRvciwgeyB1bml0OiAnYmxvY2snIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkZWxldGVTb2Z0TGluZUJhY2t3YXJkJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUJhY2t3YXJkKGVkaXRvciwgeyB1bml0OiAnbGluZScgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RlbGV0ZUhhcmRMaW5lRm9yd2FyZCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVGb3J3YXJkKGVkaXRvciwgeyB1bml0OiAnYmxvY2snIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkZWxldGVTb2Z0TGluZUZvcndhcmQnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRm9yd2FyZChlZGl0b3IsIHsgdW5pdDogJ2xpbmUnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkZWxldGVXb3JkQmFja3dhcmQnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlQmFja3dhcmQoZWRpdG9yLCB7IHVuaXQ6ICd3b3JkJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVsZXRlV29yZEZvcndhcmQnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRm9yd2FyZChlZGl0b3IsIHsgdW5pdDogJ3dvcmQnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbnNlcnRMaW5lQnJlYWsnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbnNlcnRQYXJhZ3JhcGgnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuaW5zZXJ0QnJlYWsoZWRpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5zZXJ0RnJvbUNvbXBvc2l0aW9uJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ09NUEFUOiBpbiBzYWZhcmksIGBjb21wb3NpdGlvbmVuZGAgZXZlbnQgaXMgZGlzcGF0Y2hlZCBhZnRlclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGJlZm9yZWlucHV0IGV2ZW50IHdpdGggdGhlIGlucHV0VHlwZSBcImluc2VydEZyb21Db21wb3NpdGlvblwiIGhhcyBiZWVuIGRpc3BhdGNoZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvaW5wdXQtZXZlbnRzLTIvXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGUgZm9sbG93aW5nIGNvZGUgaXMgdGhlIHJpZ2h0IGxvZ2ljXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIERPTSBzZWxlY3Rpb24gaW4gc3luYyB3aWxsIGJlIGV4ZWMgYmVmb3JlIGBjb21wb3NpdGlvbmVuZGAgZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzQ29tcG9zaW5nIGlzIHRydWUgd2lsbCBwcmV2ZW50IERPTSBzZWxlY3Rpb24gYmVpbmcgdXBkYXRlIGNvcnJlY3RseS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNDb21wb3NpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZlbnRJbnNlcnRGcm9tQ29tcG9zaXRpb24oZXZlbnQsIHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbnNlcnRGcm9tRHJvcCc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2luc2VydEZyb21QYXN0ZSc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2luc2VydEZyb21ZYW5rJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5zZXJ0UmVwbGFjZW1lbnRUZXh0JzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5zZXJ0VGV4dCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSBhIHdlYWsgY29tcGFyaXNvbiBpbnN0ZWFkIG9mICdpbnN0YW5jZW9mJyB0byBhbGxvd1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvZ3JhbW1hdGljIGFjY2VzcyBvZiBwYXN0ZSBldmVudHMgY29taW5nIGZyb20gZXh0ZXJuYWwgd2luZG93c1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGlrZSBjeXByZXNzIHdoZXJlIGN5LndpbmRvdyBkb2VzIG5vdCB3b3JrIHJlYWxpYmx5XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YT8uY29uc3RydWN0b3IubmFtZSA9PT0gJ0RhdGFUcmFuc2ZlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbmd1bGFyRWRpdG9yLmluc2VydERhdGEoZWRpdG9yLCBkYXRhIGFzIERhdGFUcmFuc2Zlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5pbnNlcnRUZXh0KGVkaXRvciwgZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3Iub25FcnJvcih7IGNvZGU6IFNsYXRlRXJyb3JDb2RlLk9uRE9NQmVmb3JlSW5wdXRFcnJvciwgbmF0aXZlRXJyb3I6IGVycm9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRPTUJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5yZWFkb25seSB8fFxuICAgICAgICAgICAgdGhpcy5pc1VwZGF0aW5nU2VsZWN0aW9uIHx8XG4gICAgICAgICAgICAhaGFzRWRpdGFibGVUYXJnZXQodGhpcy5lZGl0b3IsIGV2ZW50LnRhcmdldCkgfHxcbiAgICAgICAgICAgIHRoaXMuaXNET01FdmVudEhhbmRsZWQoZXZlbnQsIHRoaXMuYmx1cilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3aW5kb3cgPSBBbmd1bGFyRWRpdG9yLmdldFdpbmRvdyh0aGlzLmVkaXRvcik7XG5cbiAgICAgICAgLy8gQ09NUEFUOiBJZiB0aGUgY3VycmVudCBgYWN0aXZlRWxlbWVudGAgaXMgc3RpbGwgdGhlIHByZXZpb3VzXG4gICAgICAgIC8vIG9uZSwgdGhpcyBpcyBkdWUgdG8gdGhlIHdpbmRvdyBiZWluZyBibHVycmVkIHdoZW4gdGhlIHRhYlxuICAgICAgICAvLyBpdHNlbGYgYmVjb21lcyB1bmZvY3VzZWQsIHNvIHdlIHdhbnQgdG8gYWJvcnQgZWFybHkgdG8gYWxsb3cgdG9cbiAgICAgICAgLy8gZWRpdG9yIHRvIHN0YXkgZm9jdXNlZCB3aGVuIHRoZSB0YWIgYmVjb21lcyBmb2N1c2VkIGFnYWluLlxuICAgICAgICBjb25zdCByb290ID0gQW5ndWxhckVkaXRvci5maW5kRG9jdW1lbnRPclNoYWRvd1Jvb3QodGhpcy5lZGl0b3IpO1xuICAgICAgICBpZiAodGhpcy5sYXRlc3RFbGVtZW50ID09PSByb290LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgcmVsYXRlZFRhcmdldCB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IGVsID0gQW5ndWxhckVkaXRvci50b0RPTU5vZGUodGhpcy5lZGl0b3IsIHRoaXMuZWRpdG9yKTtcblxuICAgICAgICAvLyBDT01QQVQ6IFRoZSBldmVudCBzaG91bGQgYmUgaWdub3JlZCBpZiB0aGUgZm9jdXMgaXMgcmV0dXJuaW5nXG4gICAgICAgIC8vIHRvIHRoZSBlZGl0b3IgZnJvbSBhbiBlbWJlZGRlZCBlZGl0YWJsZSBlbGVtZW50IChlZy4gYW4gPGlucHV0PlxuICAgICAgICAvLyBlbGVtZW50IGluc2lkZSBhIHZvaWQgbm9kZSkuXG4gICAgICAgIGlmIChyZWxhdGVkVGFyZ2V0ID09PSBlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ09NUEFUOiBUaGUgZXZlbnQgc2hvdWxkIGJlIGlnbm9yZWQgaWYgdGhlIGZvY3VzIGlzIG1vdmluZyBmcm9tXG4gICAgICAgIC8vIHRoZSBlZGl0b3IgdG8gaW5zaWRlIGEgdm9pZCBub2RlJ3Mgc3BhY2VyIGVsZW1lbnQuXG4gICAgICAgIGlmIChpc0RPTUVsZW1lbnQocmVsYXRlZFRhcmdldCkgJiYgcmVsYXRlZFRhcmdldC5oYXNBdHRyaWJ1dGUoJ2RhdGEtc2xhdGUtc3BhY2VyJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENPTVBBVDogVGhlIGV2ZW50IHNob3VsZCBiZSBpZ25vcmVkIGlmIHRoZSBmb2N1cyBpcyBtb3ZpbmcgdG8gYVxuICAgICAgICAvLyBub24tIGVkaXRhYmxlIHNlY3Rpb24gb2YgYW4gZWxlbWVudCB0aGF0IGlzbid0IGEgdm9pZCBub2RlIChlZy5cbiAgICAgICAgLy8gYSBsaXN0IGl0ZW0gb2YgdGhlIGNoZWNrIGxpc3QgZXhhbXBsZSkuXG4gICAgICAgIGlmIChyZWxhdGVkVGFyZ2V0ICE9IG51bGwgJiYgaXNET01Ob2RlKHJlbGF0ZWRUYXJnZXQpICYmIEFuZ3VsYXJFZGl0b3IuaGFzRE9NTm9kZSh0aGlzLmVkaXRvciwgcmVsYXRlZFRhcmdldCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBBbmd1bGFyRWRpdG9yLnRvU2xhdGVOb2RlKHRoaXMuZWRpdG9yLCByZWxhdGVkVGFyZ2V0KTtcblxuICAgICAgICAgICAgaWYgKEVsZW1lbnQuaXNFbGVtZW50KG5vZGUpICYmICF0aGlzLmVkaXRvci5pc1ZvaWQobm9kZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBJU19GT0NVU0VELmRlbGV0ZSh0aGlzLmVkaXRvcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRPTUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLnJlYWRvbmx5ICYmXG4gICAgICAgICAgICBoYXNUYXJnZXQodGhpcy5lZGl0b3IsIGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICAgICAgICF0aGlzLmlzRE9NRXZlbnRIYW5kbGVkKGV2ZW50LCB0aGlzLmNsaWNrKSAmJlxuICAgICAgICAgICAgaXNET01Ob2RlKGV2ZW50LnRhcmdldClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gQW5ndWxhckVkaXRvci50b1NsYXRlTm9kZSh0aGlzLmVkaXRvciwgZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBBbmd1bGFyRWRpdG9yLmZpbmRQYXRoKHRoaXMuZWRpdG9yLCBub2RlKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gRWRpdG9yLnN0YXJ0KHRoaXMuZWRpdG9yLCBwYXRoKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IEVkaXRvci5lbmQodGhpcy5lZGl0b3IsIHBhdGgpO1xuXG4gICAgICAgICAgICBjb25zdCBzdGFydFZvaWQgPSBFZGl0b3Iudm9pZCh0aGlzLmVkaXRvciwgeyBhdDogc3RhcnQgfSk7XG4gICAgICAgICAgICBjb25zdCBlbmRWb2lkID0gRWRpdG9yLnZvaWQodGhpcy5lZGl0b3IsIHsgYXQ6IGVuZCB9KTtcblxuICAgICAgICAgICAgaWYgKHN0YXJ0Vm9pZCAmJiBlbmRWb2lkICYmIFBhdGguZXF1YWxzKHN0YXJ0Vm9pZFsxXSwgZW5kVm9pZFsxXSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IEVkaXRvci5yYW5nZSh0aGlzLmVkaXRvciwgc3RhcnQpO1xuICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KHRoaXMuZWRpdG9yLCByYW5nZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRE9NQ29tcG9zaXRpb25FbmQoZXZlbnQ6IENvbXBvc2l0aW9uRXZlbnQpIHtcbiAgICAgICAgaWYgKCFldmVudC5kYXRhICYmICFSYW5nZS5pc0NvbGxhcHNlZCh0aGlzLmVkaXRvci5zZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICBUcmFuc2Zvcm1zLmRlbGV0ZSh0aGlzLmVkaXRvcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc0VkaXRhYmxlVGFyZ2V0KHRoaXMuZWRpdG9yLCBldmVudC50YXJnZXQpICYmICF0aGlzLmlzRE9NRXZlbnRIYW5kbGVkKGV2ZW50LCB0aGlzLmNvbXBvc2l0aW9uRW5kKSkge1xuICAgICAgICAgICAgLy8gQ09NUEFUOiBJbiBDaHJvbWUvRmlyZWZveCwgYGJlZm9yZWlucHV0YCBldmVudHMgZm9yIGNvbXBvc2l0aW9uc1xuICAgICAgICAgICAgLy8gYXJlbid0IGNvcnJlY3QgYW5kIG5ldmVyIGZpcmUgdGhlIFwiaW5zZXJ0RnJvbUNvbXBvc2l0aW9uXCJcbiAgICAgICAgICAgIC8vIHR5cGUgdGhhdCB3ZSBuZWVkLiBTbyBpbnN0ZWFkLCBpbnNlcnQgd2hlbmV2ZXIgYSBjb21wb3NpdGlvblxuICAgICAgICAgICAgLy8gZW5kcyBzaW5jZSBpdCB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIGNvbW1pdHRlZCB0byB0aGUgRE9NLlxuICAgICAgICAgICAgaWYgKHRoaXMuaXNDb21wb3NpbmcgPT09IHRydWUgJiYgIUlTX1NBRkFSSSAmJiBldmVudC5kYXRhKSB7XG4gICAgICAgICAgICAgICAgcHJldmVudEluc2VydEZyb21Db21wb3NpdGlvbihldmVudCwgdGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgICAgIEVkaXRvci5pbnNlcnRUZXh0KHRoaXMuZWRpdG9yLCBldmVudC5kYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ09NUEFUOiBJbiBGaXJlZm94IDg3LjAgQ29tcG9zaXRpb25FbmQgZmlyZSB0d2ljZVxuICAgICAgICAgICAgLy8gc28gd2UgbmVlZCBhdm9pZCByZXBlYXQgaXNuZXJ0VGV4dCBieSBpc0NvbXBvc2luZyA9PT0gdHJ1ZSxcbiAgICAgICAgICAgIHRoaXMuaXNDb21wb3NpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRldGVjdENvbnRleHQoKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25ET01Db21wb3NpdGlvblN0YXJ0KGV2ZW50OiBDb21wb3NpdGlvbkV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSB0aGlzLmVkaXRvcjtcblxuICAgICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAvLyBzb2x2ZSB0aGUgcHJvYmxlbSBvZiBjcm9zcyBub2RlIENoaW5lc2UgaW5wdXRcbiAgICAgICAgICAgIGlmIChSYW5nZS5pc0V4cGFuZGVkKHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRnJhZ21lbnQodGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VGbHVzaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNFZGl0YWJsZVRhcmdldCh0aGlzLmVkaXRvciwgZXZlbnQudGFyZ2V0KSAmJiAhdGhpcy5pc0RPTUV2ZW50SGFuZGxlZChldmVudCwgdGhpcy5jb21wb3NpdGlvblN0YXJ0KSkge1xuICAgICAgICAgICAgdGhpcy5pc0NvbXBvc2luZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXRlY3RDb250ZXh0KCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRE9NQ29weShldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcbiAgICAgICAgY29uc3Qgd2luZG93ID0gQW5ndWxhckVkaXRvci5nZXRXaW5kb3codGhpcy5lZGl0b3IpO1xuICAgICAgICBjb25zdCBpc091dHNpZGVTbGF0ZSA9ICFoYXNTdHJpbmdUYXJnZXQod2luZG93LmdldFNlbGVjdGlvbigpKSAmJiBpc1RhcmdldEluc2lkZVZvaWQodGhpcy5lZGl0b3IsIGV2ZW50LnRhcmdldCk7XG4gICAgICAgIGlmICghaXNPdXRzaWRlU2xhdGUgJiYgaGFzVGFyZ2V0KHRoaXMuZWRpdG9yLCBldmVudC50YXJnZXQpICYmICF0aGlzLmlzRE9NRXZlbnRIYW5kbGVkKGV2ZW50LCB0aGlzLmNvcHkpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgQW5ndWxhckVkaXRvci5zZXRGcmFnbWVudERhdGEodGhpcy5lZGl0b3IsIGV2ZW50LmNsaXBib2FyZERhdGEsICdjb3B5Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRE9NQ3V0KGV2ZW50OiBDbGlwYm9hcmRFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMucmVhZG9ubHkgJiYgaGFzRWRpdGFibGVUYXJnZXQodGhpcy5lZGl0b3IsIGV2ZW50LnRhcmdldCkgJiYgIXRoaXMuaXNET01FdmVudEhhbmRsZWQoZXZlbnQsIHRoaXMuY3V0KSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIEFuZ3VsYXJFZGl0b3Iuc2V0RnJhZ21lbnREYXRhKHRoaXMuZWRpdG9yLCBldmVudC5jbGlwYm9hcmREYXRhLCAnY3V0Jyk7XG4gICAgICAgICAgICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gdGhpcy5lZGl0b3I7XG5cbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBBbmd1bGFyRWRpdG9yLmRlbGV0ZUN1dERhdGEodGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRPTURyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICAgICAgaWYgKGhhc1RhcmdldCh0aGlzLmVkaXRvciwgZXZlbnQudGFyZ2V0KSAmJiAhdGhpcy5pc0RPTUV2ZW50SGFuZGxlZChldmVudCwgdGhpcy5kcmFnT3ZlcikpIHtcbiAgICAgICAgICAgIC8vIE9ubHkgd2hlbiB0aGUgdGFyZ2V0IGlzIHZvaWQsIGNhbGwgYHByZXZlbnREZWZhdWx0YCB0byBzaWduYWxcbiAgICAgICAgICAgIC8vIHRoYXQgZHJvcHMgYXJlIGFsbG93ZWQuIEVkaXRhYmxlIGNvbnRlbnQgaXMgZHJvcHBhYmxlIGJ5XG4gICAgICAgICAgICAvLyBkZWZhdWx0LCBhbmQgY2FsbGluZyBgcHJldmVudERlZmF1bHRgIGhpZGVzIHRoZSBjdXJzb3IuXG4gICAgICAgICAgICBjb25zdCBub2RlID0gQW5ndWxhckVkaXRvci50b1NsYXRlTm9kZSh0aGlzLmVkaXRvciwgZXZlbnQudGFyZ2V0KTtcblxuICAgICAgICAgICAgaWYgKEVkaXRvci5pc1ZvaWQodGhpcy5lZGl0b3IsIG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25ET01EcmFnU3RhcnQoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMucmVhZG9ubHkgJiYgaGFzVGFyZ2V0KHRoaXMuZWRpdG9yLCBldmVudC50YXJnZXQpICYmICF0aGlzLmlzRE9NRXZlbnRIYW5kbGVkKGV2ZW50LCB0aGlzLmRyYWdTdGFydCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBBbmd1bGFyRWRpdG9yLnRvU2xhdGVOb2RlKHRoaXMuZWRpdG9yLCBldmVudC50YXJnZXQpO1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IEFuZ3VsYXJFZGl0b3IuZmluZFBhdGgodGhpcy5lZGl0b3IsIG5vZGUpO1xuICAgICAgICAgICAgY29uc3Qgdm9pZE1hdGNoID1cbiAgICAgICAgICAgICAgICBFZGl0b3IuaXNWb2lkKHRoaXMuZWRpdG9yLCBub2RlKSB8fFxuICAgICAgICAgICAgICAgIEVkaXRvci52b2lkKHRoaXMuZWRpdG9yLCB7IGF0OiBwYXRoLCB2b2lkczogdHJ1ZSB9KTtcblxuICAgICAgICAgICAgLy8gSWYgc3RhcnRpbmcgYSBkcmFnIG9uIGEgdm9pZCBub2RlLCBtYWtlIHN1cmUgaXQgaXMgc2VsZWN0ZWRcbiAgICAgICAgICAgIC8vIHNvIHRoYXQgaXQgc2hvd3MgdXAgaW4gdGhlIHNlbGVjdGlvbidzIGZyYWdtZW50LlxuICAgICAgICAgICAgaWYgKHZvaWRNYXRjaCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gRWRpdG9yLnJhbmdlKHRoaXMuZWRpdG9yLCBwYXRoKTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdCh0aGlzLmVkaXRvciwgcmFuZ2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmlzRHJhZ2dpbmdJbnRlcm5hbGx5ID0gdHJ1ZTtcblxuICAgICAgICAgICAgQW5ndWxhckVkaXRvci5zZXRGcmFnbWVudERhdGEodGhpcy5lZGl0b3IsIGV2ZW50LmRhdGFUcmFuc2ZlciwgJ2RyYWcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25ET01Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICAgICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgICAgIGlmICghdGhpcy5yZWFkb25seSAmJiBoYXNUYXJnZXQodGhpcy5lZGl0b3IsIGV2ZW50LnRhcmdldCkgJiYgIXRoaXMuaXNET01FdmVudEhhbmRsZWQoZXZlbnQsIHRoaXMuZHJvcCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAvLyBLZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBkcmFnZ2VkIHJhbmdlIGJlZm9yZSB1cGRhdGluZyBzZWxlY3Rpb25cbiAgICAgICAgICAgIGNvbnN0IGRyYWdnZWRSYW5nZSA9IGVkaXRvci5zZWxlY3Rpb247XG5cbiAgICAgICAgICAgIC8vIEZpbmQgdGhlIHJhbmdlIHdoZXJlIHRoZSBkcm9wIGhhcHBlbmVkXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IEFuZ3VsYXJFZGl0b3IuZmluZEV2ZW50UmFuZ2UoZWRpdG9yLCBldmVudCk7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gZXZlbnQuZGF0YVRyYW5zZmVyO1xuXG4gICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIHJhbmdlKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNEcmFnZ2luZ0ludGVybmFsbHkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZHJhZ2dlZFJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuZGVsZXRlKGVkaXRvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXQ6IGRyYWdnZWRSYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RyYWdnaW5nSW50ZXJuYWxseSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBBbmd1bGFyRWRpdG9yLmluc2VydERhdGEoZWRpdG9yLCBkYXRhKTtcblxuICAgICAgICAgICAgLy8gV2hlbiBkcmFnZ2luZyBmcm9tIGFub3RoZXIgc291cmNlIGludG8gdGhlIGVkaXRvciwgaXQncyBwb3NzaWJsZVxuICAgICAgICAgICAgLy8gdGhhdCB0aGUgY3VycmVudCBlZGl0b3IgZG9lcyBub3QgaGF2ZSBmb2N1cy5cbiAgICAgICAgICAgIGlmICghQW5ndWxhckVkaXRvci5pc0ZvY3VzZWQoZWRpdG9yKSkge1xuICAgICAgICAgICAgICAgIEFuZ3VsYXJFZGl0b3IuZm9jdXMoZWRpdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25ET01EcmFnRW5kKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlYWRvbmx5ICYmIHRoaXMuaXNEcmFnZ2luZ0ludGVybmFsbHkgJiYgaGFzVGFyZ2V0KHRoaXMuZWRpdG9yLCBldmVudC50YXJnZXQpICYmICF0aGlzLmlzRE9NRXZlbnRIYW5kbGVkKGV2ZW50LCB0aGlzLmRyYWdFbmQpKSB7XG4gICAgICAgICAgICB0aGlzLmlzRHJhZ2dpbmdJbnRlcm5hbGx5ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRE9NRm9jdXMoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLnJlYWRvbmx5ICYmXG4gICAgICAgICAgICAhdGhpcy5pc1VwZGF0aW5nU2VsZWN0aW9uICYmXG4gICAgICAgICAgICBoYXNFZGl0YWJsZVRhcmdldCh0aGlzLmVkaXRvciwgZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAgICAgIXRoaXMuaXNET01FdmVudEhhbmRsZWQoZXZlbnQsIHRoaXMuZm9jdXMpXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgZWwgPSBBbmd1bGFyRWRpdG9yLnRvRE9NTm9kZSh0aGlzLmVkaXRvciwgdGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgY29uc3Qgcm9vdCA9IEFuZ3VsYXJFZGl0b3IuZmluZERvY3VtZW50T3JTaGFkb3dSb290KHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgIHRoaXMubGF0ZXN0RWxlbWVudCA9IHJvb3QuYWN0aXZlRWxlbWVudFxuXG4gICAgICAgICAgICAvLyBDT01QQVQ6IElmIHRoZSBlZGl0b3IgaGFzIG5lc3RlZCBlZGl0YWJsZSBlbGVtZW50cywgdGhlIGZvY3VzXG4gICAgICAgICAgICAvLyBjYW4gZ28gdG8gdGhlbS4gSW4gRmlyZWZveCwgdGhpcyBtdXN0IGJlIHByZXZlbnRlZCBiZWNhdXNlIGl0XG4gICAgICAgICAgICAvLyByZXN1bHRzIGluIGlzc3VlcyB3aXRoIGtleWJvYXJkIG5hdmlnYXRpb24uICgyMDE3LzAzLzMwKVxuICAgICAgICAgICAgaWYgKElTX0ZJUkVGT1ggJiYgZXZlbnQudGFyZ2V0ICE9PSBlbCkge1xuICAgICAgICAgICAgICAgIGVsLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBJU19GT0NVU0VELnNldCh0aGlzLmVkaXRvciwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRE9NS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICAgICAgY29uc3Qgcm9vdCA9IEFuZ3VsYXJFZGl0b3IuZmluZERvY3VtZW50T3JTaGFkb3dSb290KHRoaXMuZWRpdG9yKVxuICAgICAgICBjb25zdCB7IGFjdGl2ZUVsZW1lbnQgfSA9IHJvb3Q7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLnJlYWRvbmx5ICYmXG4gICAgICAgICAgICBoYXNFZGl0YWJsZVRhcmdldChlZGl0b3IsIGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICAgICAgICFpc1RhcmdldEluc2lkZVZvaWQoZWRpdG9yLCBhY3RpdmVFbGVtZW50KSAmJiAvLyBzdG9wIGZpcmUga2V5ZG93biBoYW5kbGUgd2hlbiBmb2N1cyB2b2lkIG5vZGVcbiAgICAgICAgICAgICF0aGlzLmlzQ29tcG9zaW5nICYmXG4gICAgICAgICAgICAhdGhpcy5pc0RPTUV2ZW50SGFuZGxlZChldmVudCwgdGhpcy5rZXlkb3duKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IG5hdGl2ZUV2ZW50ID0gZXZlbnQ7XG4gICAgICAgICAgICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gZWRpdG9yO1xuXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID1cbiAgICAgICAgICAgICAgICBlZGl0b3IuY2hpbGRyZW5bXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uICE9PSBudWxsID8gc2VsZWN0aW9uLmZvY3VzLnBhdGhbMF0gOiAwXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgY29uc3QgaXNSVEwgPSBnZXREaXJlY3Rpb24oTm9kZS5zdHJpbmcoZWxlbWVudCkpID09PSAncnRsJztcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBDT01QQVQ6IFNpbmNlIHdlIHByZXZlbnQgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb25cbiAgICAgICAgICAgICAgICAvLyBgYmVmb3JlaW5wdXRgIGV2ZW50cywgdGhlIGJyb3dzZXIgZG9lc24ndCB0aGluayB0aGVyZSdzIGV2ZXJcbiAgICAgICAgICAgICAgICAvLyBhbnkgaGlzdG9yeSBzdGFjayB0byB1bmRvIG9yIHJlZG8sIHNvIHdlIGhhdmUgdG8gbWFuYWdlIHRoZXNlXG4gICAgICAgICAgICAgICAgLy8gaG90a2V5cyBvdXJzZWx2ZXMuICgyMDE5LzExLzA2KVxuICAgICAgICAgICAgICAgIGlmIChIb3RrZXlzLmlzUmVkbyhuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoSGlzdG9yeUVkaXRvci5pc0hpc3RvcnlFZGl0b3IoZWRpdG9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLnJlZG8oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc1VuZG8obmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKEhpc3RvcnlFZGl0b3IuaXNIaXN0b3J5RWRpdG9yKGVkaXRvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvci51bmRvKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gQ09NUEFUOiBDZXJ0YWluIGJyb3dzZXJzIGRvbid0IGhhbmRsZSB0aGUgc2VsZWN0aW9uIHVwZGF0ZXNcbiAgICAgICAgICAgICAgICAvLyBwcm9wZXJseS4gSW4gQ2hyb21lLCB0aGUgc2VsZWN0aW9uIGlzbid0IHByb3Blcmx5IGV4dGVuZGVkLlxuICAgICAgICAgICAgICAgIC8vIEFuZCBpbiBGaXJlZm94LCB0aGUgc2VsZWN0aW9uIGlzbid0IHByb3Blcmx5IGNvbGxhcHNlZC5cbiAgICAgICAgICAgICAgICAvLyAoMjAxNy8xMC8xNylcbiAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc01vdmVMaW5lQmFja3dhcmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMubW92ZShlZGl0b3IsIHsgdW5pdDogJ2xpbmUnLCByZXZlcnNlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNNb3ZlTGluZUZvcndhcmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMubW92ZShlZGl0b3IsIHsgdW5pdDogJ2xpbmUnIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNFeHRlbmRMaW5lQmFja3dhcmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMubW92ZShlZGl0b3IsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaXQ6ICdsaW5lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2U6ICdmb2N1cycsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXZlcnNlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNFeHRlbmRMaW5lRm9yd2FyZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5tb3ZlKGVkaXRvciwgeyB1bml0OiAnbGluZScsIGVkZ2U6ICdmb2N1cycgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBDT01QQVQ6IElmIGEgdm9pZCBub2RlIGlzIHNlbGVjdGVkLCBvciBhIHplcm8td2lkdGggdGV4dCBub2RlXG4gICAgICAgICAgICAgICAgLy8gYWRqYWNlbnQgdG8gYW4gaW5saW5lIGlzIHNlbGVjdGVkLCB3ZSBuZWVkIHRvIGhhbmRsZSB0aGVzZVxuICAgICAgICAgICAgICAgIC8vIGhvdGtleXMgbWFudWFsbHkgYmVjYXVzZSBicm93c2VycyB3b24ndCBiZSBhYmxlIHRvIHNraXAgb3ZlclxuICAgICAgICAgICAgICAgIC8vIHRoZSB2b2lkIG5vZGUgd2l0aCB0aGUgemVyby13aWR0aCBzcGFjZSBub3QgYmVpbmcgYW4gZW1wdHlcbiAgICAgICAgICAgICAgICAvLyBzdHJpbmcuXG4gICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNNb3ZlQmFja3dhcmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBSYW5nZS5pc0NvbGxhcHNlZChzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLm1vdmUoZWRpdG9yLCB7IHJldmVyc2U6ICFpc1JUTCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuY29sbGFwc2UoZWRpdG9yLCB7IGVkZ2U6ICdzdGFydCcgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNNb3ZlRm9yd2FyZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIFJhbmdlLmlzQ29sbGFwc2VkKHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMubW92ZShlZGl0b3IsIHsgcmV2ZXJzZTogaXNSVEwgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLmNvbGxhcHNlKGVkaXRvciwgeyBlZGdlOiAnZW5kJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc01vdmVXb3JkQmFja3dhcmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBSYW5nZS5pc0V4cGFuZGVkKHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuY29sbGFwc2UoZWRpdG9yLCB7IGVkZ2U6ICdmb2N1cycgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMubW92ZShlZGl0b3IsIHsgdW5pdDogJ3dvcmQnLCByZXZlcnNlOiAhaXNSVEwgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc01vdmVXb3JkRm9yd2FyZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIFJhbmdlLmlzRXhwYW5kZWQoc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5jb2xsYXBzZShlZGl0b3IsIHsgZWRnZTogJ2ZvY3VzJyB9KVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5tb3ZlKGVkaXRvciwgeyB1bml0OiAnd29yZCcsIHJldmVyc2U6IGlzUlRMIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gQ09NUEFUOiBDZXJ0YWluIGJyb3dzZXJzIGRvbid0IHN1cHBvcnQgdGhlIGBiZWZvcmVpbnB1dGAgZXZlbnQsIHNvIHdlXG4gICAgICAgICAgICAgICAgLy8gZmFsbCBiYWNrIHRvIGd1ZXNzaW5nIGF0IHRoZSBpbnB1dCBpbnRlbnRpb24gZm9yIGhvdGtleXMuXG4gICAgICAgICAgICAgICAgLy8gQ09NUEFUOiBJbiBpT1MsIHNvbWUgb2YgdGhlc2UgaG90a2V5cyBhcmUgaGFuZGxlZCBpbiB0aGVcbiAgICAgICAgICAgICAgICBpZiAoIUhBU19CRUZPUkVfSU5QVVRfU1VQUE9SVCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGEgY29yZSBiZWhhdmlvciBmb3IgdGhlc2UsIGJ1dCB0aGV5IGNoYW5nZSB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gRE9NIGlmIHdlIGRvbid0IHByZXZlbnQgdGhlbSwgc28gd2UgaGF2ZSB0by5cbiAgICAgICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNCb2xkKG5hdGl2ZUV2ZW50KSB8fCBIb3RrZXlzLmlzSXRhbGljKG5hdGl2ZUV2ZW50KSB8fCBIb3RrZXlzLmlzVHJhbnNwb3NlQ2hhcmFjdGVyKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChIb3RrZXlzLmlzU3BsaXRCbG9jayhuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuaW5zZXJ0QnJlYWsoZWRpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChIb3RrZXlzLmlzRGVsZXRlQmFja3dhcmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIFJhbmdlLmlzRXhwYW5kZWQoc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVGcmFnbWVudChlZGl0b3IsIHsgZGlyZWN0aW9uOiAnYmFja3dhcmQnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlQmFja3dhcmQoZWRpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNEZWxldGVGb3J3YXJkKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBSYW5nZS5pc0V4cGFuZGVkKHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRnJhZ21lbnQoZWRpdG9yLCB7IGRpcmVjdGlvbjogJ2ZvcndhcmQnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRm9yd2FyZChlZGl0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc0RlbGV0ZUxpbmVCYWNrd2FyZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb24gJiYgUmFuZ2UuaXNFeHBhbmRlZChzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZyYWdtZW50KGVkaXRvciwgeyBkaXJlY3Rpb246ICdiYWNrd2FyZCcgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVCYWNrd2FyZChlZGl0b3IsIHsgdW5pdDogJ2xpbmUnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc0RlbGV0ZUxpbmVGb3J3YXJkKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBSYW5nZS5pc0V4cGFuZGVkKHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRnJhZ21lbnQoZWRpdG9yLCB7IGRpcmVjdGlvbjogJ2ZvcndhcmQnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRm9yd2FyZChlZGl0b3IsIHsgdW5pdDogJ2xpbmUnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc0RlbGV0ZVdvcmRCYWNrd2FyZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb24gJiYgUmFuZ2UuaXNFeHBhbmRlZChzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZyYWdtZW50KGVkaXRvciwgeyBkaXJlY3Rpb246ICdiYWNrd2FyZCcgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVCYWNrd2FyZChlZGl0b3IsIHsgdW5pdDogJ3dvcmQnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc0RlbGV0ZVdvcmRGb3J3YXJkKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBSYW5nZS5pc0V4cGFuZGVkKHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRnJhZ21lbnQoZWRpdG9yLCB7IGRpcmVjdGlvbjogJ2ZvcndhcmQnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRm9yd2FyZChlZGl0b3IsIHsgdW5pdDogJ3dvcmQnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoSVNfQ0hST01FIHx8IElTX1NBRkFSSSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ09NUEFUOiBDaHJvbWUgYW5kIFNhZmFyaSBzdXBwb3J0IGBiZWZvcmVpbnB1dGAgZXZlbnQgYnV0IGRvIG5vdCBmaXJlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbiBldmVudCB3aGVuIGRlbGV0aW5nIGJhY2t3YXJkcyBpbiBhIHNlbGVjdGVkIHZvaWQgaW5saW5lIG5vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSG90a2V5cy5pc0RlbGV0ZUJhY2t3YXJkKG5hdGl2ZUV2ZW50KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3RrZXlzLmlzRGVsZXRlRm9yd2FyZChuYXRpdmVFdmVudCkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmFuZ2UuaXNDb2xsYXBzZWQoc2VsZWN0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudE5vZGUgPSBOb2RlLnBhcmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yLnBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50LmlzRWxlbWVudChjdXJyZW50Tm9kZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmlzVm9pZChlZGl0b3IsIGN1cnJlbnROb2RlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuaXNJbmxpbmUoZWRpdG9yLCBjdXJyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlQmFja3dhcmQoZWRpdG9yLCB7IHVuaXQ6ICdibG9jaycgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5vbkVycm9yKHsgY29kZTogU2xhdGVFcnJvckNvZGUuT25ET01LZXlkb3duRXJyb3IsIG5hdGl2ZUVycm9yOiBlcnJvciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25ET01QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcbiAgICAgICAgLy8gQ09NUEFUOiBDZXJ0YWluIGJyb3dzZXJzIGRvbid0IHN1cHBvcnQgdGhlIGBiZWZvcmVpbnB1dGAgZXZlbnQsIHNvIHdlXG4gICAgICAgIC8vIGZhbGwgYmFjayB0byBSZWFjdCdzIGBvblBhc3RlYCBoZXJlIGluc3RlYWQuXG4gICAgICAgIC8vIENPTVBBVDogRmlyZWZveCwgQ2hyb21lIGFuZCBTYWZhcmkgYXJlIG5vdCBlbWl0dGluZyBgYmVmb3JlaW5wdXRgIGV2ZW50c1xuICAgICAgICAvLyB3aGVuIFwicGFzdGUgd2l0aG91dCBmb3JtYXR0aW5nXCIgb3B0aW9uIGlzIHVzZWQuXG4gICAgICAgIC8vIFRoaXMgdW5mb3J0dW5hdGVseSBuZWVkcyB0byBiZSBoYW5kbGVkIHdpdGggcGFzdGUgZXZlbnRzIGluc3RlYWQuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmlzRE9NRXZlbnRIYW5kbGVkKGV2ZW50LCB0aGlzLnBhc3RlKSAmJlxuICAgICAgICAgICAgKCFIQVNfQkVGT1JFX0lOUFVUX1NVUFBPUlQgfHwgaXNQbGFpblRleHRPbmx5UGFzdGUoZXZlbnQpIHx8IGZvcmNlT25ET01QYXN0ZSkgJiZcbiAgICAgICAgICAgICF0aGlzLnJlYWRvbmx5ICYmXG4gICAgICAgICAgICBoYXNFZGl0YWJsZVRhcmdldCh0aGlzLmVkaXRvciwgZXZlbnQudGFyZ2V0KVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBBbmd1bGFyRWRpdG9yLmluc2VydERhdGEodGhpcy5lZGl0b3IsIGV2ZW50LmNsaXBib2FyZERhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkZhbGxiYWNrQmVmb3JlSW5wdXQoZXZlbnQ6IEJlZm9yZUlucHV0RXZlbnQpIHtcbiAgICAgICAgLy8gQ09NUEFUOiBDZXJ0YWluIGJyb3dzZXJzIGRvbid0IHN1cHBvcnQgdGhlIGBiZWZvcmVpbnB1dGAgZXZlbnQsIHNvIHdlXG4gICAgICAgIC8vIGZhbGwgYmFjayB0byBSZWFjdCdzIGxlYWt5IHBvbHlmaWxsIGluc3RlYWQganVzdCBmb3IgaXQuIEl0XG4gICAgICAgIC8vIG9ubHkgd29ya3MgZm9yIHRoZSBgaW5zZXJ0VGV4dGAgaW5wdXQgdHlwZS5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIUhBU19CRUZPUkVfSU5QVVRfU1VQUE9SVCAmJlxuICAgICAgICAgICAgIXRoaXMucmVhZG9ubHkgJiZcbiAgICAgICAgICAgICF0aGlzLmlzRE9NRXZlbnRIYW5kbGVkKGV2ZW50Lm5hdGl2ZUV2ZW50LCB0aGlzLmJlZm9yZUlucHV0KSAmJlxuICAgICAgICAgICAgaGFzRWRpdGFibGVUYXJnZXQodGhpcy5lZGl0b3IsIGV2ZW50Lm5hdGl2ZUV2ZW50LnRhcmdldClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBldmVudC5uYXRpdmVFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gZXZlbnQuZGF0YTtcbiAgICAgICAgICAgICAgICBpZiAoIVJhbmdlLmlzQ29sbGFwc2VkKHRoaXMuZWRpdG9yLnNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZyYWdtZW50KHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8ganVzdCBoYW5kbGUgTm9uLUlNRSBpbnB1dFxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0NvbXBvc2luZykge1xuICAgICAgICAgICAgICAgICAgICBFZGl0b3IuaW5zZXJ0VGV4dCh0aGlzLmVkaXRvciwgdGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5vbkVycm9yKHsgY29kZTogU2xhdGVFcnJvckNvZGUuVG9OYXRpdmVTZWxlY3Rpb25FcnJvciwgbmF0aXZlRXJyb3I6IGVycm9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0RPTUV2ZW50SGFuZGxlZChldmVudDogRXZlbnQsIGhhbmRsZXI/OiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkKSB7XG4gICAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZXIoZXZlbnQpO1xuICAgICAgICByZXR1cm4gZXZlbnQuZGVmYXVsdFByZXZlbnRlZDtcbiAgICB9XG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgTk9ERV9UT19FTEVNRU5ULmRlbGV0ZSh0aGlzLmVkaXRvcik7XG4gICAgICAgIHRoaXMubWFudWFsTGlzdGVuZXJzLmZvckVhY2gobWFudWFsTGlzdGVuZXIgPT4ge1xuICAgICAgICAgICAgbWFudWFsTGlzdGVuZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICAgICAgRURJVE9SX1RPX09OX0NIQU5HRS5kZWxldGUodGhpcy5lZGl0b3IpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgdGFyZ2V0IGlzIGVkaXRhYmxlIGFuZCBpbiB0aGUgZWRpdG9yLlxuICovXG5cbmNvbnN0IGhhc0VkaXRhYmxlVGFyZ2V0ID0gKGVkaXRvcjogQW5ndWxhckVkaXRvciwgdGFyZ2V0OiBFdmVudFRhcmdldCB8IG51bGwpOiB0YXJnZXQgaXMgRE9NTm9kZSA9PiB7XG4gICAgcmV0dXJuIGlzRE9NTm9kZSh0YXJnZXQpICYmIEFuZ3VsYXJFZGl0b3IuaGFzRE9NTm9kZShlZGl0b3IsIHRhcmdldCwgeyBlZGl0YWJsZTogdHJ1ZSB9KTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgdHdvIERPTSByYW5nZSBvYmplY3RzIGFyZSBlcXVhbC5cbiAqL1xuY29uc3QgaXNSYW5nZUVxdWFsID0gKGE6IERPTVJhbmdlLCBiOiBET01SYW5nZSkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICAgIChhLnN0YXJ0Q29udGFpbmVyID09PSBiLnN0YXJ0Q29udGFpbmVyICYmXG4gICAgICAgICAgICBhLnN0YXJ0T2Zmc2V0ID09PSBiLnN0YXJ0T2Zmc2V0ICYmXG4gICAgICAgICAgICBhLmVuZENvbnRhaW5lciA9PT0gYi5lbmRDb250YWluZXIgJiZcbiAgICAgICAgICAgIGEuZW5kT2Zmc2V0ID09PSBiLmVuZE9mZnNldCkgfHxcbiAgICAgICAgKGEuc3RhcnRDb250YWluZXIgPT09IGIuZW5kQ29udGFpbmVyICYmXG4gICAgICAgICAgICBhLnN0YXJ0T2Zmc2V0ID09PSBiLmVuZE9mZnNldCAmJlxuICAgICAgICAgICAgYS5lbmRDb250YWluZXIgPT09IGIuc3RhcnRDb250YWluZXIgJiZcbiAgICAgICAgICAgIGEuZW5kT2Zmc2V0ID09PSBiLnN0YXJ0T2Zmc2V0KVxuICAgICk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSB0YXJnZXQgaXMgaW4gdGhlIGVkaXRvci5cbiAqL1xuXG5jb25zdCBoYXNUYXJnZXQgPSAoZWRpdG9yOiBBbmd1bGFyRWRpdG9yLCB0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCk6IHRhcmdldCBpcyBET01Ob2RlID0+IHtcbiAgICByZXR1cm4gaXNET01Ob2RlKHRhcmdldCkgJiYgQW5ndWxhckVkaXRvci5oYXNET01Ob2RlKGVkaXRvciwgdGFyZ2V0KTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHRhcmdldCBpcyBpbnNpZGUgdm9pZCBhbmQgaW4gdGhlIGVkaXRvci5cbiAqL1xuXG5jb25zdCBpc1RhcmdldEluc2lkZVZvaWQgPSAoZWRpdG9yOiBBbmd1bGFyRWRpdG9yLCB0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IHNsYXRlTm9kZSA9IGhhc1RhcmdldChlZGl0b3IsIHRhcmdldCkgJiYgQW5ndWxhckVkaXRvci50b1NsYXRlTm9kZShlZGl0b3IsIHRhcmdldCk7XG4gICAgcmV0dXJuIEVkaXRvci5pc1ZvaWQoZWRpdG9yLCBzbGF0ZU5vZGUpO1xufTtcblxuY29uc3QgaGFzU3RyaW5nVGFyZ2V0ID0gKGRvbVNlbGVjdGlvbjogRE9NU2VsZWN0aW9uKSA9PiB7XG4gICAgcmV0dXJuIChkb21TZWxlY3Rpb24uYW5jaG9yTm9kZS5wYXJlbnRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGF0YS1zbGF0ZS1zdHJpbmcnKSB8fCBkb21TZWxlY3Rpb24uYW5jaG9yTm9kZS5wYXJlbnRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGF0YS1zbGF0ZS16ZXJvLXdpZHRoJykpICYmXG4gICAgICAgIChkb21TZWxlY3Rpb24uZm9jdXNOb2RlLnBhcmVudEVsZW1lbnQuaGFzQXR0cmlidXRlKCdkYXRhLXNsYXRlLXN0cmluZycpIHx8IGRvbVNlbGVjdGlvbi5mb2N1c05vZGUucGFyZW50RWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2RhdGEtc2xhdGUtemVyby13aWR0aCcpKTtcbn1cblxuLyoqXG4gKiByZW1vdmUgZGVmYXVsdCBpbnNlcnQgZnJvbSBjb21wb3NpdGlvblxuICogQHBhcmFtIHRleHRcbiAqL1xuY29uc3QgcHJldmVudEluc2VydEZyb21Db21wb3NpdGlvbiA9IChldmVudDogRXZlbnQsIGVkaXRvcjogQW5ndWxhckVkaXRvcikgPT4ge1xuICAgIGNvbnN0IHR5cGVzID0gWydjb21wb3NpdGlvbmVuZCcsICdpbnNlcnRGcm9tQ29tcG9zaXRpb24nXTtcbiAgICBpZiAoIXR5cGVzLmluY2x1ZGVzKGV2ZW50LnR5cGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5zZXJ0VGV4dCA9IChldmVudCBhcyBDb21wb3NpdGlvbkV2ZW50KS5kYXRhO1xuICAgIGNvbnN0IHdpbmRvdyA9IEFuZ3VsYXJFZGl0b3IuZ2V0V2luZG93KGVkaXRvcik7XG4gICAgY29uc3QgZG9tU2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIC8vIGVuc3VyZSB0ZXh0IG5vZGUgaW5zZXJ0IGNvbXBvc2l0aW9uIGlucHV0IHRleHRcbiAgICBpZiAoaW5zZXJ0VGV4dCAmJiBkb21TZWxlY3Rpb24uYW5jaG9yTm9kZSBpbnN0YW5jZW9mIFRleHQgJiYgZG9tU2VsZWN0aW9uLmFuY2hvck5vZGUudGV4dENvbnRlbnQuZW5kc1dpdGgoaW5zZXJ0VGV4dCkpIHtcbiAgICAgICAgY29uc3QgdGV4dE5vZGUgPSBkb21TZWxlY3Rpb24uYW5jaG9yTm9kZTtcbiAgICAgICAgdGV4dE5vZGUuc3BsaXRUZXh0KHRleHROb2RlLmxlbmd0aCAtIGluc2VydFRleHQubGVuZ3RoKS5yZW1vdmUoKTtcbiAgICB9XG59XG4iLCI8c2xhdGUtY2hpbGRyZW4gW2NoaWxkcmVuXT1cImVkaXRvci5jaGlsZHJlblwiIFtjb250ZXh0XT1cImNvbnRleHRcIiBbdmlld0NvbnRleHRdPVwidmlld0NvbnRleHRcIj48L3NsYXRlLWNoaWxkcmVuPlxuPHNsYXRlLXN0cmluZy10ZW1wbGF0ZSAjdGVtcGxhdGVDb21wb25lbnQ+PC9zbGF0ZS1zdHJpbmctdGVtcGxhdGU+Il19
|
|
1067
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvZWRpdGFibGUvZWRpdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvZWRpdGFibGUvZWRpdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFFVCxLQUFLLEVBQ0wsU0FBUyxFQUNULFdBQVcsRUFFWCxVQUFVLEVBQ1YsdUJBQXVCLEVBS3ZCLFVBQVUsRUFLYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUosT0FBTyxFQUFxQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFhLElBQUksRUFBYyxNQUFNLE9BQU8sQ0FBQztBQUNqSCxPQUFPLFlBQVksTUFBTSxXQUFXLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFHSCxTQUFTLEVBR1QsWUFBWSxFQUNaLG9CQUFvQixFQUVwQixjQUFjLEVBQ2pCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBb0MsU0FBUyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkksT0FBTyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUFDMUMsT0FBTyxFQUFvQix1QkFBdUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3RHLE9BQU8sRUFB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SCxNQUFNLDRCQUE0QixHQUFHLENBQUMsS0FBWSxFQUFFLE1BQXFCLEVBQUUsRUFBRTtJQUN6RSxNQUFNLEtBQUssR0FBRyxDQUFDLGdCQUFnQixFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFDMUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzdCLE9BQU87S0FDVjtJQUNELE1BQU0sVUFBVSxHQUFJLEtBQTBCLENBQUMsSUFBSSxDQUFDO0lBQ3BELE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0MsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzNDLGlEQUFpRDtJQUNqRCxJQUFJLFVBQVUsSUFBSSxZQUFZLENBQUMsVUFBVSxZQUFZLElBQUksSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDbkgsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQztRQUN6QyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ3BFO0FBQ0wsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgT25Jbml0LFxuICAgIElucHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBIb3N0QmluZGluZyxcbiAgICBSZW5kZXJlcjIsXG4gICAgRWxlbWVudFJlZixcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgTmdab25lLFxuICAgIEluamVjdG9yLFxuICAgIGZvcndhcmRSZWYsXG4gICAgT25DaGFuZ2VzLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgICBEb0NoZWNrXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTk9ERV9UT19FTEVNRU5ULCBJU19GT0NVU0VELCBFRElUT1JfVE9fRUxFTUVOVCwgRUxFTUVOVF9UT19OT0RFLCBJU19SRUFET05MWSwgRURJVE9SX1RPX09OX0NIQU5HRSwgRURJVE9SX1RPX1dJTkRPVyB9IGZyb20gJy4uLy4uL3V0aWxzL3dlYWstbWFwcyc7XG5pbXBvcnQgeyBUZXh0IGFzIFNsYXRlVGV4dCwgRWxlbWVudCwgVHJhbnNmb3JtcywgRWRpdG9yLCBSYW5nZSwgUGF0aCwgTm9kZUVudHJ5LCBOb2RlLCBEZXNjZW5kYW50IH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IGdldERpcmVjdGlvbiBmcm9tICdkaXJlY3Rpb24nO1xuaW1wb3J0IHsgQW5ndWxhckVkaXRvciB9IGZyb20gJy4uLy4uL3BsdWdpbnMvYW5ndWxhci1lZGl0b3InO1xuaW1wb3J0IHtcbiAgICBET01FbGVtZW50LFxuICAgIERPTU5vZGUsXG4gICAgaXNET01Ob2RlLFxuICAgIERPTVN0YXRpY1JhbmdlLFxuICAgIERPTVJhbmdlLFxuICAgIGlzRE9NRWxlbWVudCxcbiAgICBpc1BsYWluVGV4dE9ubHlQYXN0ZSxcbiAgICBET01TZWxlY3Rpb24sXG4gICAgZ2V0RGVmYXVsdFZpZXdcbn0gZnJvbSAnLi4vLi4vdXRpbHMvZG9tJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElTX0ZJUkVGT1gsIElTX1NBRkFSSSwgSVNfRURHRV9MRUdBQ1ksIElTX0NIUk9NRV9MRUdBQ1ksIElTX0NIUk9NRSwgSEFTX0JFRk9SRV9JTlBVVF9TVVBQT1JUIH0gZnJvbSAnLi4vLi4vdXRpbHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IEhvdGtleXMgZnJvbSAnLi4vLi4vdXRpbHMvaG90a2V5cyc7XG5pbXBvcnQgeyBCZWZvcmVJbnB1dEV2ZW50LCBleHRyYWN0QmVmb3JlSW5wdXRFdmVudCB9IGZyb20gJy4uLy4uL2N1c3RvbS1ldmVudC9CZWZvcmVJbnB1dEV2ZW50UGx1Z2luJztcbmltcG9ydCB7IEJFRk9SRV9JTlBVVF9FVkVOVFMgfSBmcm9tICcuLi8uLi9jdXN0b20tZXZlbnQvYmVmb3JlLWlucHV0LXBvbHlmaWxsJztcbmltcG9ydCB7IFNsYXRlRXJyb3JDb2RlIH0gZnJvbSAnLi4vLi4vdHlwZXMvZXJyb3InO1xuaW1wb3J0IHsgU2xhdGVTdHJpbmdUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uL3N0cmluZy90ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTbGF0ZUNoaWxkcmVuQ29udGV4dCwgU2xhdGVWaWV3Q29udGV4dCB9IGZyb20gJy4uLy4uL3ZpZXcvY29udGV4dCc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL3R5cGVzL3ZpZXcnO1xuaW1wb3J0IHsgSGlzdG9yeUVkaXRvciB9IGZyb20gJ3NsYXRlLWhpc3RvcnknO1xuaW1wb3J0IHsgaXNEZWNvcmF0b3JSYW5nZUxpc3RFcXVhbCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IGNoZWNrLCBub3JtYWxpemUgfSBmcm9tICcuLi8uLi91dGlscy9nbG9iYWwtbm9ybWFsaXplJztcbmltcG9ydCB7IFNsYXRlUGxhY2Vob2xkZXIgfSBmcm9tICcuLi8uLi90eXBlcy9mZWF0dXJlJztcblxuLy8gbm90IGNvcnJlY3RseSBjbGlwYm9hcmREYXRhIG9uIGJlZm9yZWlucHV0XG5jb25zdCBmb3JjZU9uRE9NUGFzdGUgPSBJU19TQUZBUkk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2xhdGUtZWRpdGFibGUnLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdzbGF0ZS1lZGl0YWJsZS1jb250YWluZXInLFxuICAgICAgICAnW2F0dHIuY29udGVudGVkaXRhYmxlXSc6ICdyZWFkb25seSA/IHVuZGVmaW5lZCA6IHRydWUnLFxuICAgICAgICAnW2F0dHIucm9sZV0nOiBgcmVhZG9ubHkgPyB1bmRlZmluZWQgOiAndGV4dGJveCdgLFxuICAgICAgICAnW2F0dHIuc3BlbGxDaGVja10nOiBgIWhhc0JlZm9yZUlucHV0U3VwcG9ydCA/IGZhbHNlIDogc3BlbGxDaGVja2AsXG4gICAgICAgICdbYXR0ci5hdXRvQ29ycmVjdF0nOiBgIWhhc0JlZm9yZUlucHV0U3VwcG9ydCA/ICdmYWxzZScgOiBhdXRvQ29ycmVjdGAsXG4gICAgICAgICdbYXR0ci5hdXRvQ2FwaXRhbGl6ZV0nOiBgIWhhc0JlZm9yZUlucHV0U3VwcG9ydCA/ICdmYWxzZScgOiBhdXRvQ2FwaXRhbGl6ZWBcbiAgICB9LFxuICAgIHRlbXBsYXRlVXJsOiAnZWRpdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW3tcbiAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNsYXRlRWRpdGFibGVDb21wb25lbnQpLFxuICAgICAgICBtdWx0aTogdHJ1ZVxuICAgIH1dXG59KVxuZXhwb3J0IGNsYXNzIFNsYXRlRWRpdGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkLCBEb0NoZWNrIHtcbiAgICB2aWV3Q29udGV4dDogU2xhdGVWaWV3Q29udGV4dDtcbiAgICBjb250ZXh0OiBTbGF0ZUNoaWxkcmVuQ29udGV4dDtcblxuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgaXNDb21wb3NpbmcgPSBmYWxzZTtcbiAgICBpc0RyYWdnaW5nSW50ZXJuYWxseSA9IGZhbHNlO1xuICAgIGlzVXBkYXRpbmdTZWxlY3Rpb24gPSBmYWxzZTtcbiAgICBsYXRlc3RFbGVtZW50ID0gbnVsbCBhcyBET01FbGVtZW50IHwgbnVsbDtcblxuICAgIHByb3RlY3RlZCBtYW51YWxMaXN0ZW5lcnM6ICgoKSA9PiB2b2lkKVtdID0gW107XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVkOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBvblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9ICgpID0+IHsgfTtcblxuICAgIHByaXZhdGUgb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9ICgpID0+IHsgfTtcblxuICAgIEBJbnB1dCgpIGVkaXRvcjogQW5ndWxhckVkaXRvcjtcblxuICAgIEBJbnB1dCgpIHJlbmRlckVsZW1lbnQ6IChlbGVtZW50OiBFbGVtZW50KSA9PiBWaWV3VHlwZSB8IG51bGw7XG5cbiAgICBASW5wdXQoKSByZW5kZXJMZWFmOiAodGV4dDogU2xhdGVUZXh0KSA9PiBWaWV3VHlwZSB8IG51bGw7XG5cbiAgICBASW5wdXQoKSByZW5kZXJUZXh0OiAodGV4dDogU2xhdGVUZXh0KSA9PiBWaWV3VHlwZSB8IG51bGw7XG5cbiAgICBASW5wdXQoKSBkZWNvcmF0ZTogKGVudHJ5OiBOb2RlRW50cnkpID0+IFJhbmdlW10gPSAoKSA9PiBbXTtcblxuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyRGVjb3JhdGU6IChlZGl0b3I6IEVkaXRvcikgPT4gU2xhdGVQbGFjZWhvbGRlcltdO1xuXG4gICAgQElucHV0KCkgaXNTdHJpY3REZWNvcmF0ZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBASW5wdXQoKSB0cmFja0J5OiAobm9kZTogRWxlbWVudCkgPT4gYW55ID0gKCkgPT4gbnVsbDtcblxuICAgIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgLy8jcmVnaW9uIGlucHV0IGV2ZW50IGhhbmRsZXJcbiAgICBASW5wdXQoKSBiZWZvcmVJbnB1dDogKGV2ZW50OiBFdmVudCkgPT4gdm9pZDtcbiAgICBASW5wdXQoKSBibHVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkO1xuICAgIEBJbnB1dCgpIGNsaWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gICAgQElucHV0KCkgY29tcG9zaXRpb25FbmQ6IChldmVudDogQ29tcG9zaXRpb25FdmVudCkgPT4gdm9pZDtcbiAgICBASW5wdXQoKSBjb21wb3NpdGlvblN0YXJ0OiAoZXZlbnQ6IENvbXBvc2l0aW9uRXZlbnQpID0+IHZvaWQ7XG4gICAgQElucHV0KCkgY29weTogKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkgPT4gdm9pZDtcbiAgICBASW5wdXQoKSBjdXQ6IChldmVudDogQ2xpcGJvYXJkRXZlbnQpID0+IHZvaWQ7XG4gICAgQElucHV0KCkgZHJhZ092ZXI6IChldmVudDogRHJhZ0V2ZW50KSA9PiB2b2lkO1xuICAgIEBJbnB1dCgpIGRyYWdTdGFydDogKGV2ZW50OiBEcmFnRXZlbnQpID0+IHZvaWQ7XG4gICAgQElucHV0KCkgZHJhZ0VuZDogKGV2ZW50OiBEcmFnRXZlbnQpID0+IHZvaWQ7XG4gICAgQElucHV0KCkgZHJvcDogKGV2ZW50OiBEcmFnRXZlbnQpID0+IHZvaWQ7XG4gICAgQElucHV0KCkgZm9jdXM6IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG4gICAgQElucHV0KCkga2V5ZG93bjogKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkO1xuICAgIEBJbnB1dCgpIHBhc3RlOiAoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSA9PiB2b2lkO1xuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIERPTSBhdHRyXG4gICAgQElucHV0KCkgc3BlbGxDaGVjayA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGF1dG9Db3JyZWN0ID0gZmFsc2U7XG4gICAgQElucHV0KCkgYXV0b0NhcGl0YWxpemUgPSBmYWxzZTtcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXNsYXRlLWVkaXRvcicpIGRhdGFTbGF0ZUVkaXRvciA9IHRydWU7XG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtc2xhdGUtbm9kZScpIGRhdGFTbGF0ZU5vZGUgPSAndmFsdWUnO1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLWdyYW1tJykgZGF0YUdyYW1tID0gZmFsc2U7XG5cbiAgICBnZXQgaGFzQmVmb3JlSW5wdXRTdXBwb3J0KCkge1xuICAgICAgICByZXR1cm4gSEFTX0JFRk9SRV9JTlBVVF9TVVBQT1JUO1xuICAgIH1cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlQ29tcG9uZW50JywgeyBzdGF0aWM6IHRydWUgfSkgdGVtcGxhdGVDb21wb25lbnQ6IFNsYXRlU3RyaW5nVGVtcGxhdGVDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgndGVtcGxhdGVDb21wb25lbnQnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogRWxlbWVudFJlZiB9KSB0ZW1wbGF0ZUVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8YW55PjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHVibGljIHJlbmRlcmVyMjogUmVuZGVyZXIyLFxuICAgICAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3JcbiAgICApIHsgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZWRpdG9yLmluamVjdG9yID0gdGhpcy5pbmplY3RvcjtcbiAgICAgICAgdGhpcy5lZGl0b3IuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgbGV0IHdpbmRvdyA9IGdldERlZmF1bHRWaWV3KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgRURJVE9SX1RPX1dJTkRPVy5zZXQodGhpcy5lZGl0b3IsIHdpbmRvdyk7XG4gICAgICAgIEVESVRPUl9UT19FTEVNRU5ULnNldCh0aGlzLmVkaXRvciwgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBOT0RFX1RPX0VMRU1FTlQuc2V0KHRoaXMuZWRpdG9yLCB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIEVMRU1FTlRfVE9fTk9ERS5zZXQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMuZWRpdG9yKTtcbiAgICAgICAgSVNfUkVBRE9OTFkuc2V0KHRoaXMuZWRpdG9yLCB0aGlzLnJlYWRvbmx5KTtcbiAgICAgICAgRURJVE9SX1RPX09OX0NIQU5HRS5zZXQodGhpcy5lZGl0b3IsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVZpZXdDb250ZXh0KCk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUNvbnRleHQoKTtcblxuICAgICAgICAvLyByZW1vdmUgdW51c2VkIERPTSwganVzdCBrZWVwIHRlbXBsYXRlQ29tcG9uZW50IGluc3RhbmNlXG4gICAgICAgIHRoaXMudGVtcGxhdGVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlKCk7XG5cbiAgICAgICAgLy8gYWRkIGJyb3dzZXIgY2xhc3NcbiAgICAgICAgbGV0IGJyb3dzZXJDbGFzcyA9IElTX0ZJUkVGT1ggPyAnZmlyZWZveCcgOiAoSVNfU0FGQVJJID8gJ3NhZmFyaScgOiAnJyk7XG4gICAgICAgIGJyb3dzZXJDbGFzcyAmJiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGJyb3dzZXJDbGFzcyk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoc2ltcGxlQ2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWNvcmF0ZUNoYW5nZSA9IHNpbXBsZUNoYW5nZXNbJ2RlY29yYXRlJ107XG4gICAgICAgIGlmIChkZWNvcmF0ZUNoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5mb3JjZUZsdXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJDaGFuZ2UgPSBzaW1wbGVDaGFuZ2VzWydwbGFjZWhvbGRlciddO1xuICAgICAgICBpZiAocGxhY2Vob2xkZXJDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuZGV0ZWN0Q29udGV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlYWRvbmx5Q2hhbmdlID0gc2ltcGxlQ2hhbmdlc1sncmVhZG9ubHknXTtcbiAgICAgICAgaWYgKHJlYWRvbmx5Q2hhbmdlKSB7XG4gICAgICAgICAgICBJU19SRUFET05MWS5zZXQodGhpcy5lZGl0b3IsIHRoaXMucmVhZG9ubHkpO1xuICAgICAgICAgICAgdGhpcy5kZXRlY3RDb250ZXh0KCk7XG4gICAgICAgICAgICB0aGlzLnRvU2xhdGVTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogRWxlbWVudFtdKSB7XG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChjaGVjayh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5jaGlsZHJlbiA9IHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5vbkVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogU2xhdGVFcnJvckNvZGUuSW52YWxpZFZhbHVlRXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdpbml0aWFsaXplIGludmFsaWQgZGF0YScsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHZhbHVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IuY2hpbGRyZW4gPSBub3JtYWxpemUodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQ29udGV4dCgpO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0aWFsaXplKCkge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgd2luZG93ID0gQW5ndWxhckVkaXRvci5nZXRXaW5kb3codGhpcy5lZGl0b3IpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICAnc2VsZWN0aW9uY2hhbmdlJyxcbiAgICAgICAgICAgIGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvU2xhdGVTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKEhBU19CRUZPUkVfSU5QVVRfU1VQUE9SVCkge1xuICAgICAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmVpbnB1dCcsIHRoaXMub25ET01CZWZvcmVJbnB1dC5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLm9uRE9NQmx1ci5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25ET01DbGljay5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdjb21wb3NpdGlvbmVuZCcsIHRoaXMub25ET01Db21wb3NpdGlvbkVuZC5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdjb21wb3NpdGlvbnN0YXJ0JywgdGhpcy5vbkRPTUNvbXBvc2l0aW9uU3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY29weScsIHRoaXMub25ET01Db3B5LmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2N1dCcsIHRoaXMub25ET01DdXQuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzLm9uRE9NRHJhZ092ZXIuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgdGhpcy5vbkRPTURyYWdTdGFydC5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgdGhpcy5vbkRPTURyYWdFbmQuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIHRoaXMub25ET01Ecm9wLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbkRPTUZvY3VzLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLm9uRE9NS2V5ZG93bi5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdwYXN0ZScsIHRoaXMub25ET01QYXN0ZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgQkVGT1JFX0lOUFVUX0VWRU5UUy5mb3JFYWNoKGV2ZW50ID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudC5uYW1lLCAoKSA9PiB7IH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0b05hdGl2ZVNlbGVjdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSB0aGlzLmVkaXRvcjtcbiAgICAgICAgICAgIGNvbnN0IHJvb3QgPSBBbmd1bGFyRWRpdG9yLmZpbmREb2N1bWVudE9yU2hhZG93Um9vdCh0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICBjb25zdCB7IGFjdGl2ZUVsZW1lbnQgfSA9IHJvb3Q7XG4gICAgICAgICAgICBjb25zdCBkb21TZWxlY3Rpb24gPSAocm9vdCBhcyBEb2N1bWVudCkuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzQ29tcG9zaW5nIHx8ICFkb21TZWxlY3Rpb24gfHwgIUFuZ3VsYXJFZGl0b3IuaXNGb2N1c2VkKHRoaXMuZWRpdG9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaGFzRG9tU2VsZWN0aW9uID0gZG9tU2VsZWN0aW9uLnR5cGUgIT09ICdOb25lJztcblxuICAgICAgICAgICAgLy8gSWYgdGhlIERPTSBzZWxlY3Rpb24gaXMgcHJvcGVybHkgdW5zZXQsIHdlJ3JlIGRvbmUuXG4gICAgICAgICAgICBpZiAoIXNlbGVjdGlvbiAmJiAhaGFzRG9tU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB0aGUgRE9NIHNlbGVjdGlvbiBpcyBhbHJlYWR5IGNvcnJlY3QsIHdlJ3JlIGRvbmUuXG4gICAgICAgICAgICAvLyB2ZXJpZnkgdGhhdCB0aGUgZG9tIHNlbGVjdGlvbiBpcyBpbiB0aGUgZWRpdG9yXG4gICAgICAgICAgICBjb25zdCBlZGl0b3JFbGVtZW50ID0gRURJVE9SX1RPX0VMRU1FTlQuZ2V0KHRoaXMuZWRpdG9yKSE7XG4gICAgICAgICAgICBsZXQgaGFzRG9tU2VsZWN0aW9uSW5FZGl0b3IgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChlZGl0b3JFbGVtZW50LmNvbnRhaW5zKGRvbVNlbGVjdGlvbi5hbmNob3JOb2RlKSAmJiBlZGl0b3JFbGVtZW50LmNvbnRhaW5zKGRvbVNlbGVjdGlvbi5mb2N1c05vZGUpKSB7XG4gICAgICAgICAgICAgICAgaGFzRG9tU2VsZWN0aW9uSW5FZGl0b3IgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB0aGUgRE9NIHNlbGVjdGlvbiBpcyBpbiB0aGUgZWRpdG9yIGFuZCB0aGUgZWRpdG9yIHNlbGVjdGlvbiBpcyBhbHJlYWR5IGNvcnJlY3QsIHdlJ3JlIGRvbmUuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaGFzRG9tU2VsZWN0aW9uICYmXG4gICAgICAgICAgICAgICAgaGFzRG9tU2VsZWN0aW9uSW5FZGl0b3IgJiZcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24gJiZcbiAgICAgICAgICAgICAgICBoYXNTdHJpbmdUYXJnZXQoZG9tU2VsZWN0aW9uKSAmJlxuICAgICAgICAgICAgICAgIFJhbmdlLmVxdWFscyhBbmd1bGFyRWRpdG9yLnRvU2xhdGVSYW5nZSh0aGlzLmVkaXRvciwgZG9tU2VsZWN0aW9uKSwgc2VsZWN0aW9uKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBwcmV2ZW50IHVwZGF0aW5nIG5hdGl2ZSBzZWxlY3Rpb24gd2hlbiBhY3RpdmUgZWxlbWVudCBpcyB2b2lkIGVsZW1lbnRcbiAgICAgICAgICAgIGlmIChpc1RhcmdldEluc2lkZVZvaWQodGhpcy5lZGl0b3IsIGFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB3aGVuIDxFZGl0YWJsZS8+IGlzIGJlaW5nIGNvbnRyb2xsZWQgdGhyb3VnaCBleHRlcm5hbCB2YWx1ZVxuICAgICAgICAgICAgLy8gdGhlbiBpdHMgY2hpbGRyZW4gbWlnaHQganVzdCBjaGFuZ2UgLSBET00gcmVzcG9uZHMgdG8gaXQgb24gaXRzIG93blxuICAgICAgICAgICAgLy8gYnV0IFNsYXRlJ3MgdmFsdWUgaXMgbm90IGJlaW5nIHVwZGF0ZWQgdGhyb3VnaCBhbnkgb3BlcmF0aW9uXG4gICAgICAgICAgICAvLyBhbmQgdGh1cyBpdCBkb2Vzbid0IHRyYW5zZm9ybSBzZWxlY3Rpb24gb24gaXRzIG93blxuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiAhQW5ndWxhckVkaXRvci5oYXNSYW5nZSh0aGlzLmVkaXRvciwgc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLnNlbGVjdGlvbiA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZVJhbmdlKHRoaXMuZWRpdG9yLCBkb21TZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UgdGhlIERPTSBzZWxlY3Rpb24gaXMgb3V0IG9mIHN5bmMsIHNvIHVwZGF0ZSBpdC5cbiAgICAgICAgICAgIGNvbnN0IGVsID0gQW5ndWxhckVkaXRvci50b0RPTU5vZGUodGhpcy5lZGl0b3IsIHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ1NlbGVjdGlvbiA9IHRydWU7XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld0RvbVJhbmdlID0gc2VsZWN0aW9uICYmIEFuZ3VsYXJFZGl0b3IudG9ET01SYW5nZSh0aGlzLmVkaXRvciwgc2VsZWN0aW9uKTtcblxuICAgICAgICAgICAgaWYgKG5ld0RvbVJhbmdlKSB7XG4gICAgICAgICAgICAgICAgLy8gQ09NUEFUOiBTaW5jZSB0aGUgRE9NIHJhbmdlIGhhcyBubyBjb25jZXB0IG9mIGJhY2t3YXJkcy9mb3J3YXJkc1xuICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gY2hlY2sgYW5kIGRvIHRoZSByaWdodCB0aGluZyBoZXJlLlxuICAgICAgICAgICAgICAgIGlmIChSYW5nZS5pc0JhY2t3YXJkKHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgICAgICAgICAgICAgZG9tU2VsZWN0aW9uLnNldEJhc2VBbmRFeHRlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdEb21SYW5nZS5lbmRDb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdEb21SYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdEb21SYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0RvbVJhbmdlLnN0YXJ0T2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgICAgICAgICAgICAgZG9tU2VsZWN0aW9uLnNldEJhc2VBbmRFeHRlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdEb21SYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0RvbVJhbmdlLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3RG9tUmFuZ2UuZW5kQ29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3RG9tUmFuZ2UuZW5kT2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb21TZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIENPTVBBVDogSW4gRmlyZWZveCwgaXQncyBub3QgZW5vdWdoIHRvIGNyZWF0ZSBhIHJhbmdlLCB5b3UgYWxzbyBuZWVkXG4gICAgICAgICAgICAgICAgLy8gdG8gZm9jdXMgdGhlIGNvbnRlbnRlZGl0YWJsZSBlbGVtZW50IHRvby4gKDIwMTYvMTEvMTYpXG4gICAgICAgICAgICAgICAgaWYgKG5ld0RvbVJhbmdlICYmIElTX0ZJUkVGT1gpIHtcbiAgICAgICAgICAgICAgICAgICAgZWwuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmlzVXBkYXRpbmdTZWxlY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5lZGl0b3Iub25FcnJvcih7IGNvZGU6IFNsYXRlRXJyb3JDb2RlLlRvTmF0aXZlU2VsZWN0aW9uRXJyb3IsIG5hdGl2ZUVycm9yOiBlcnJvciB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuZm9yY2VGbHVzaCgpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodGhpcy5lZGl0b3IuY2hpbGRyZW4pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICB9XG5cbiAgICBuZ0RvQ2hlY2soKSB7XG4gICAgfVxuXG4gICAgZm9yY2VGbHVzaCgpIHtcbiAgICAgICAgdGhpcy5kZXRlY3RDb250ZXh0KCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgLy8gcmVwYWlyIGNvbGxhYm9yYXRpdmUgZWRpdGluZyB3aGVuIENoaW5lc2UgaW5wdXQgaXMgaW50ZXJydXB0ZWQgYnkgb3RoZXIgdXNlcnMnIGN1cnNvcnNcbiAgICAgICAgLy8gd2hlbiB0aGUgRE9NRWxlbWVudCB3aGVyZSB0aGUgc2VsZWN0aW9uIGlzIGxvY2F0ZWQgaXMgcmVtb3ZlZFxuICAgICAgICAvLyB0aGUgY29tcG9zaXRpb251cGRhdGUgYW5kIGNvbXBvc2l0aW9uZW5kIGV2ZW50cyB3aWxsIG5vIGxvbmdlciBiZSBmaXJlZFxuICAgICAgICAvLyBzbyBpc0NvbXBvc2luZyBuZWVkcyB0byBiZSBjb3JyZWN0ZWRcbiAgICAgICAgLy8gbmVlZCBleGVjIGFmdGVyIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSB0byByZW5kZXIgSFRNTFxuICAgICAgICAvLyBuZWVkIGV4ZWMgYmVmb3JlIHRoaXMudG9OYXRpdmVTZWxlY3Rpb24oKSB0byBjb3JyZWN0IG5hdGl2ZSBzZWxlY3Rpb25cbiAgICAgICAgaWYgKHRoaXMuaXNDb21wb3NpbmcpIHtcbiAgICAgICAgICAgIC8vIENvbXBvc2l0aW9uIGlucHV0IHRleHQgYmUgbm90IHJlbmRlcmVkIHdoZW4gdXNlciBjb21wb3NpdGlvbiBpbnB1dCB3aXRoIHNlbGVjdGlvbiBpcyBleHBhbmRlZFxuICAgICAgICAgICAgLy8gQXQgdGhpcyB0aW1lLCB0aGUgZm9sbG93aW5nIG1hdGNoaW5nIGNvbmRpdGlvbnMgYXJlIG1ldCwgYXNzaWduIGlzQ29tcG9zaW5nIHRvIGZhbHNlLCBhbmQgdGhlIHN0YXR1cyBpcyB3cm9uZ1xuICAgICAgICAgICAgLy8gdGhpcyB0aW1lIGNvbmRpdGlvbiBpcyB0cnVlIGFuZCBpc0NvbXBvc2lpbmcgaXMgYXNzaWduZWQgZmFsc2VcbiAgICAgICAgICAgIC8vIFRoZXJlZm9yZSwgbmVlZCB0byB3YWl0IGZvciB0aGUgY29tcG9zaXRpb24gaW5wdXQgdGV4dCB0byBiZSByZW5kZXJlZCBiZWZvcmUgcGVyZm9ybWluZyBjb25kaXRpb24gbWF0Y2hpbmdcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gTm9kZS5nZXQodGhpcy5lZGl0b3IsIHRoaXMuZWRpdG9yLnNlbGVjdGlvbi5hbmNob3IucGF0aCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dERPTU5vZGUgPSBBbmd1bGFyRWRpdG9yLnRvRE9NTm9kZSh0aGlzLmVkaXRvciwgdGV4dE5vZGUpO1xuICAgICAgICAgICAgICAgIGxldCB0ZXh0Q29udGVudCA9ICcnO1xuICAgICAgICAgICAgICAgIC8vIHNraXAgZGVjb3JhdGUgdGV4dFxuICAgICAgICAgICAgICAgIHRleHRET01Ob2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tlZGl0YWJsZS10ZXh0XScpLmZvckVhY2goKHN0cmluZ0RPTU5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRleHQgPSBzdHJpbmdET01Ob2RlLnRleHRDb250ZW50O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB6ZXJvQ2hhciA9ICdcXHVGRUZGJztcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHplcm8gd2l0aCBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0LnN0YXJ0c1dpdGgoemVyb0NoYXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGV4dC5lbmRzV2l0aCh6ZXJvQ2hhcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIHRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnQgKz0gdGV4dDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoTm9kZS5zdHJpbmcodGV4dE5vZGUpLmVuZHNXaXRoKHRleHRDb250ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQ29tcG9zaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b05hdGl2ZVNlbGVjdGlvbigpO1xuICAgIH1cblxuICAgIGluaXRpYWxpemVDb250ZXh0KCkge1xuICAgICAgICB0aGlzLmNvbnRleHQgPSB7XG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMuZWRpdG9yLFxuICAgICAgICAgICAgc2VsZWN0aW9uOiB0aGlzLmVkaXRvci5zZWxlY3Rpb24sXG4gICAgICAgICAgICBkZWNvcmF0aW9uczogdGhpcy5nZW5lcmF0ZURlY29yYXRpb25zKCksXG4gICAgICAgICAgICBkZWNvcmF0ZTogdGhpcy5kZWNvcmF0ZSxcbiAgICAgICAgICAgIHJlYWRvbmx5OiB0aGlzLnJlYWRvbmx5XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZVZpZXdDb250ZXh0KCkge1xuICAgICAgICB0aGlzLnZpZXdDb250ZXh0ID0ge1xuICAgICAgICAgICAgZWRpdG9yOiB0aGlzLmVkaXRvcixcbiAgICAgICAgICAgIHJlbmRlckVsZW1lbnQ6IHRoaXMucmVuZGVyRWxlbWVudCxcbiAgICAgICAgICAgIHJlbmRlckxlYWY6IHRoaXMucmVuZGVyTGVhZixcbiAgICAgICAgICAgIHJlbmRlclRleHQ6IHRoaXMucmVuZGVyVGV4dCxcbiAgICAgICAgICAgIHRyYWNrQnk6IHRoaXMudHJhY2tCeSxcbiAgICAgICAgICAgIGlzU3RyaWN0RGVjb3JhdGU6IHRoaXMuaXNTdHJpY3REZWNvcmF0ZSxcbiAgICAgICAgICAgIHRlbXBsYXRlQ29tcG9uZW50OiB0aGlzLnRlbXBsYXRlQ29tcG9uZW50XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZGV0ZWN0Q29udGV4dCgpIHtcbiAgICAgICAgY29uc3QgZGVjb3JhdGlvbnMgPSB0aGlzLmdlbmVyYXRlRGVjb3JhdGlvbnMoKTtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zZWxlY3Rpb24gIT09IHRoaXMuZWRpdG9yLnNlbGVjdGlvbiB8fFxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmRlY29yYXRlICE9PSB0aGlzLmRlY29yYXRlIHx8XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQucmVhZG9ubHkgIT09IHRoaXMucmVhZG9ubHkgfHxcbiAgICAgICAgICAgICFpc0RlY29yYXRvclJhbmdlTGlzdEVxdWFsKHRoaXMuY29udGV4dC5kZWNvcmF0aW9ucywgZGVjb3JhdGlvbnMpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgcGFyZW50OiB0aGlzLmVkaXRvcixcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb246IHRoaXMuZWRpdG9yLnNlbGVjdGlvbixcbiAgICAgICAgICAgICAgICBkZWNvcmF0aW9uczogZGVjb3JhdGlvbnMsXG4gICAgICAgICAgICAgICAgZGVjb3JhdGU6IHRoaXMuZGVjb3JhdGUsXG4gICAgICAgICAgICAgICAgcmVhZG9ubHk6IHRoaXMucmVhZG9ubHlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wb3NlUGxhY2Vob2xkZXJEZWNvcmF0ZShlZGl0b3I6IEVkaXRvcikge1xuICAgICAgICBpZiAodGhpcy5wbGFjZWhvbGRlckRlY29yYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wbGFjZWhvbGRlckRlY29yYXRlKGVkaXRvcikgfHwgW107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyICYmXG4gICAgICAgICAgICBlZGl0b3IuY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICBBcnJheS5mcm9tKE5vZGUudGV4dHMoZWRpdG9yKSkubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICBOb2RlLnN0cmluZyhlZGl0b3IpID09PSAnJ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gRWRpdG9yLnN0YXJ0KGVkaXRvciwgW10pXG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICAgIGFuY2hvcjogc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzOiBzdGFydCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZW5lcmF0ZURlY29yYXRpb25zKCkge1xuICAgICAgICBjb25zdCBkZWNvcmF0aW9ucyA9IHRoaXMuZGVjb3JhdGUoW3RoaXMuZWRpdG9yLCBbXV0pO1xuICAgICAgICBjb25zdCBwbGFjZWhvbGRlckRlY29yYXRpb25zID0gdGhpcy5pc0NvbXBvc2luZ1xuICAgICAgICAgICAgPyBbXVxuICAgICAgICAgICAgOiB0aGlzLmNvbXBvc2VQbGFjZWhvbGRlckRlY29yYXRlKHRoaXMuZWRpdG9yKVxuICAgICAgICBkZWNvcmF0aW9ucy5wdXNoKC4uLnBsYWNlaG9sZGVyRGVjb3JhdGlvbnMpO1xuICAgICAgICByZXR1cm4gZGVjb3JhdGlvbnM7XG4gICAgfVxuXG4gICAgLy8jcmVnaW9uIGV2ZW50IHByb3h5XG4gICAgcHJpdmF0ZSBhZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lciwgdGFyZ2V0OiBIVE1MRWxlbWVudCB8IERvY3VtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5tYW51YWxMaXN0ZW5lcnMucHVzaChcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIyLmxpc3Rlbih0YXJnZXQsIGV2ZW50TmFtZSwgKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJlZm9yZUlucHV0RXZlbnQgPSBleHRyYWN0QmVmb3JlSW5wdXRFdmVudChldmVudC50eXBlLCBudWxsLCBldmVudCwgZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBpZiAoYmVmb3JlSW5wdXRFdmVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRmFsbGJhY2tCZWZvcmVJbnB1dChiZWZvcmVJbnB1dEV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGlzdGVuZXIoZXZlbnQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvU2xhdGVTZWxlY3Rpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0NvbXBvc2luZyAmJiAhdGhpcy5pc1VwZGF0aW5nU2VsZWN0aW9uICYmICF0aGlzLmlzRHJhZ2dpbmdJbnRlcm5hbGx5KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvb3QgPSBBbmd1bGFyRWRpdG9yLmZpbmREb2N1bWVudE9yU2hhZG93Um9vdCh0aGlzLmVkaXRvcilcbiAgICAgICAgICAgICAgICBjb25zdCB7IGFjdGl2ZUVsZW1lbnQgfSA9IHJvb3Q7XG4gICAgICAgICAgICAgICAgY29uc3QgZWwgPSBBbmd1bGFyRWRpdG9yLnRvRE9NTm9kZSh0aGlzLmVkaXRvciwgdGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvbVNlbGVjdGlvbiA9IChyb290IGFzIERvY3VtZW50KS5nZXRTZWxlY3Rpb24oKTtcblxuICAgICAgICAgICAgICAgIGlmIChhY3RpdmVFbGVtZW50ID09PSBlbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhdGVzdEVsZW1lbnQgPSBhY3RpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBJU19GT0NVU0VELnNldCh0aGlzLmVkaXRvciwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgSVNfRk9DVVNFRC5kZWxldGUodGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghZG9tU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1zLmRlc2VsZWN0KHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBlZGl0b3JFbGVtZW50ID0gRURJVE9SX1RPX0VMRU1FTlQuZ2V0KHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgICAgICBjb25zdCBoYXNEb21TZWxlY3Rpb25JbkVkaXRvciA9IGVkaXRvckVsZW1lbnQuY29udGFpbnMoZG9tU2VsZWN0aW9uLmFuY2hvck5vZGUpICYmIGVkaXRvckVsZW1lbnQuY29udGFpbnMoZG9tU2VsZWN0aW9uLmZvY3VzTm9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNEb21TZWxlY3Rpb25JbkVkaXRvcikge1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLmRlc2VsZWN0KHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHRyeSB0byBnZXQgdGhlIHNlbGVjdGlvbiBkaXJlY3RseSwgYmVjYXVzZSBzb21lIHRlcnJpYmxlIGNhc2UgY2FuIGJlIG5vcm1hbGl6ZSBmb3Igbm9ybWFsaXplRE9NUG9pbnRcbiAgICAgICAgICAgICAgICAvLyBmb3IgZXhhbXBsZSwgZG91YmxlLWNsaWNrIHRoZSBsYXN0IGNlbGwgb2YgdGhlIHRhYmxlIHRvIHNlbGVjdCBhIG5vbi1lZGl0YWJsZSBET01cbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZVJhbmdlKHRoaXMuZWRpdG9yLCBkb21TZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVkaXRvci5zZWxlY3Rpb24gJiYgUmFuZ2UuZXF1YWxzKHJhbmdlLCB0aGlzLmVkaXRvci5zZWxlY3Rpb24pICYmICFoYXNTdHJpbmdUYXJnZXQoZG9tU2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVGFyZ2V0SW5zaWRlVm9pZCh0aGlzLmVkaXRvciwgYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvcmNlIGFkanVzdCBET01TZWxlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9OYXRpdmVTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KHRoaXMuZWRpdG9yLCByYW5nZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5vbkVycm9yKHsgY29kZTogU2xhdGVFcnJvckNvZGUuVG9TbGF0ZVNlbGVjdGlvbkVycm9yLCBuYXRpdmVFcnJvcjogZXJyb3IgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25ET01CZWZvcmVJbnB1dChcbiAgICAgICAgZXZlbnQ6IEV2ZW50ICYge1xuICAgICAgICAgICAgaW5wdXRUeXBlOiBzdHJpbmc7XG4gICAgICAgICAgICBpc0NvbXBvc2luZzogYm9vbGVhbjtcbiAgICAgICAgICAgIGRhdGE6IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICBkYXRhVHJhbnNmZXI6IERhdGFUcmFuc2ZlciB8IG51bGw7XG4gICAgICAgICAgICBnZXRUYXJnZXRSYW5nZXMoKTogRE9NU3RhdGljUmFuZ2VbXTtcbiAgICAgICAgfVxuICAgICkge1xuICAgICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICAgICAgY29uc3Qgcm9vdCA9IEFuZ3VsYXJFZGl0b3IuZmluZERvY3VtZW50T3JTaGFkb3dSb290KHRoaXMuZWRpdG9yKVxuICAgICAgICBjb25zdCB7IGFjdGl2ZUVsZW1lbnQgfSA9IHJvb3Q7XG4gICAgICAgIGlmICghdGhpcy5yZWFkb25seSAmJiBoYXNFZGl0YWJsZVRhcmdldChlZGl0b3IsIGV2ZW50LnRhcmdldCkgJiYgIWlzVGFyZ2V0SW5zaWRlVm9pZChlZGl0b3IsIGFjdGl2ZUVsZW1lbnQpICYmICF0aGlzLmlzRE9NRXZlbnRIYW5kbGVkKGV2ZW50LCB0aGlzLmJlZm9yZUlucHV0KSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gZWRpdG9yO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgaW5wdXRUeXBlOiB0eXBlIH0gPSBldmVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gZXZlbnQuZGF0YVRyYW5zZmVyIHx8IGV2ZW50LmRhdGEgfHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAvLyBDT01QQVQ6IElmIHRoZSBzZWxlY3Rpb24gaXMgZXhwYW5kZWQsIGV2ZW4gaWYgdGhlIGNvbW1hbmQgc2VlbXMgbGlrZVxuICAgICAgICAgICAgICAgIC8vIGEgZGVsZXRlIGZvcndhcmQvYmFja3dhcmQgY29tbWFuZCBpdCBzaG91bGQgZGVsZXRlIHRoZSBzZWxlY3Rpb24uXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBSYW5nZS5pc0V4cGFuZGVkKHNlbGVjdGlvbikgJiYgdHlwZS5zdGFydHNXaXRoKCdkZWxldGUnKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSB0eXBlLmVuZHNXaXRoKCdCYWNrd2FyZCcpID8gJ2JhY2t3YXJkJyA6ICdmb3J3YXJkJztcbiAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZyYWdtZW50KGVkaXRvciwgeyBkaXJlY3Rpb24gfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVsZXRlQnlDb21wb3NpdGlvbic6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RlbGV0ZUJ5Q3V0JzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVsZXRlQnlEcmFnJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZyYWdtZW50KGVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RlbGV0ZUNvbnRlbnQnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkZWxldGVDb250ZW50Rm9yd2FyZCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVGb3J3YXJkKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RlbGV0ZUNvbnRlbnRCYWNrd2FyZCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVCYWNrd2FyZChlZGl0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkZWxldGVFbnRpcmVTb2Z0TGluZSc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVCYWNrd2FyZChlZGl0b3IsIHsgdW5pdDogJ2xpbmUnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZvcndhcmQoZWRpdG9yLCB7IHVuaXQ6ICdsaW5lJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVsZXRlSGFyZExpbmVCYWNrd2FyZCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVCYWNrd2FyZChlZGl0b3IsIHsgdW5pdDogJ2Jsb2NrJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVsZXRlU29mdExpbmVCYWNrd2FyZCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVCYWNrd2FyZChlZGl0b3IsIHsgdW5pdDogJ2xpbmUnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkZWxldGVIYXJkTGluZUZvcndhcmQnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRm9yd2FyZChlZGl0b3IsIHsgdW5pdDogJ2Jsb2NrJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVsZXRlU29mdExpbmVGb3J3YXJkJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZvcndhcmQoZWRpdG9yLCB7IHVuaXQ6ICdsaW5lJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVsZXRlV29yZEJhY2t3YXJkJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUJhY2t3YXJkKGVkaXRvciwgeyB1bml0OiAnd29yZCcgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RlbGV0ZVdvcmRGb3J3YXJkJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZvcndhcmQoZWRpdG9yLCB7IHVuaXQ6ICd3b3JkJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5zZXJ0TGluZUJyZWFrJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5zZXJ0UGFyYWdyYXBoJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmluc2VydEJyZWFrKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2luc2VydEZyb21Db21wb3NpdGlvbic6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENPTVBBVDogaW4gc2FmYXJpLCBgY29tcG9zaXRpb25lbmRgIGV2ZW50IGlzIGRpc3BhdGNoZWQgYWZ0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBiZWZvcmVpbnB1dCBldmVudCB3aXRoIHRoZSBpbnB1dFR5cGUgXCJpbnNlcnRGcm9tQ29tcG9zaXRpb25cIiBoYXMgYmVlbiBkaXNwYXRjaGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2lucHV0LWV2ZW50cy0yL1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gdGhlIGZvbGxvd2luZyBjb2RlIGlzIHRoZSByaWdodCBsb2dpY1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBET00gc2VsZWN0aW9uIGluIHN5bmMgd2lsbCBiZSBleGVjIGJlZm9yZSBgY29tcG9zaXRpb25lbmRgIGV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpc0NvbXBvc2luZyBpcyB0cnVlIHdpbGwgcHJldmVudCBET00gc2VsZWN0aW9uIGJlaW5nIHVwZGF0ZSBjb3JyZWN0bHkuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQ29tcG9zaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50SW5zZXJ0RnJvbUNvbXBvc2l0aW9uKGV2ZW50LCB0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5zZXJ0RnJvbURyb3AnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbnNlcnRGcm9tUGFzdGUnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbnNlcnRGcm9tWWFuayc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2luc2VydFJlcGxhY2VtZW50VGV4dCc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2luc2VydFRleHQnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2UgYSB3ZWFrIGNvbXBhcmlzb24gaW5zdGVhZCBvZiAnaW5zdGFuY2VvZicgdG8gYWxsb3dcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb2dyYW1tYXRpYyBhY2Nlc3Mgb2YgcGFzdGUgZXZlbnRzIGNvbWluZyBmcm9tIGV4dGVybmFsIHdpbmRvd3NcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpa2UgY3lwcmVzcyB3aGVyZSBjeS53aW5kb3cgZG9lcyBub3Qgd29yayByZWFsaWJseVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGE/LmNvbnN0cnVjdG9yLm5hbWUgPT09ICdEYXRhVHJhbnNmZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5ndWxhckVkaXRvci5pbnNlcnREYXRhKGVkaXRvciwgZGF0YSBhcyBEYXRhVHJhbnNmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuaW5zZXJ0VGV4dChlZGl0b3IsIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLm9uRXJyb3IoeyBjb2RlOiBTbGF0ZUVycm9yQ29kZS5PbkRPTUJlZm9yZUlucHV0RXJyb3IsIG5hdGl2ZUVycm9yOiBlcnJvciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25ET01CbHVyKGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMucmVhZG9ubHkgfHxcbiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ1NlbGVjdGlvbiB8fFxuICAgICAgICAgICAgIWhhc0VkaXRhYmxlVGFyZ2V0KHRoaXMuZWRpdG9yLCBldmVudC50YXJnZXQpIHx8XG4gICAgICAgICAgICB0aGlzLmlzRE9NRXZlbnRIYW5kbGVkKGV2ZW50LCB0aGlzLmJsdXIpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgd2luZG93ID0gQW5ndWxhckVkaXRvci5nZXRXaW5kb3codGhpcy5lZGl0b3IpO1xuXG4gICAgICAgIC8vIENPTVBBVDogSWYgdGhlIGN1cnJlbnQgYGFjdGl2ZUVsZW1lbnRgIGlzIHN0aWxsIHRoZSBwcmV2aW91c1xuICAgICAgICAvLyBvbmUsIHRoaXMgaXMgZHVlIHRvIHRoZSB3aW5kb3cgYmVpbmcgYmx1cnJlZCB3aGVuIHRoZSB0YWJcbiAgICAgICAgLy8gaXRzZWxmIGJlY29tZXMgdW5mb2N1c2VkLCBzbyB3ZSB3YW50IHRvIGFib3J0IGVhcmx5IHRvIGFsbG93IHRvXG4gICAgICAgIC8vIGVkaXRvciB0byBzdGF5IGZvY3VzZWQgd2hlbiB0aGUgdGFiIGJlY29tZXMgZm9jdXNlZCBhZ2Fpbi5cbiAgICAgICAgY29uc3Qgcm9vdCA9IEFuZ3VsYXJFZGl0b3IuZmluZERvY3VtZW50T3JTaGFkb3dSb290KHRoaXMuZWRpdG9yKTtcbiAgICAgICAgaWYgKHRoaXMubGF0ZXN0RWxlbWVudCA9PT0gcm9vdC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHJlbGF0ZWRUYXJnZXQgfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBlbCA9IEFuZ3VsYXJFZGl0b3IudG9ET01Ob2RlKHRoaXMuZWRpdG9yLCB0aGlzLmVkaXRvcik7XG5cbiAgICAgICAgLy8gQ09NUEFUOiBUaGUgZXZlbnQgc2hvdWxkIGJlIGlnbm9yZWQgaWYgdGhlIGZvY3VzIGlzIHJldHVybmluZ1xuICAgICAgICAvLyB0byB0aGUgZWRpdG9yIGZyb20gYW4gZW1iZWRkZWQgZWRpdGFibGUgZWxlbWVudCAoZWcuIGFuIDxpbnB1dD5cbiAgICAgICAgLy8gZWxlbWVudCBpbnNpZGUgYSB2b2lkIG5vZGUpLlxuICAgICAgICBpZiAocmVsYXRlZFRhcmdldCA9PT0gZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENPTVBBVDogVGhlIGV2ZW50IHNob3VsZCBiZSBpZ25vcmVkIGlmIHRoZSBmb2N1cyBpcyBtb3ZpbmcgZnJvbVxuICAgICAgICAvLyB0aGUgZWRpdG9yIHRvIGluc2lkZSBhIHZvaWQgbm9kZSdzIHNwYWNlciBlbGVtZW50LlxuICAgICAgICBpZiAoaXNET01FbGVtZW50KHJlbGF0ZWRUYXJnZXQpICYmIHJlbGF0ZWRUYXJnZXQuaGFzQXR0cmlidXRlKCdkYXRhLXNsYXRlLXNwYWNlcicpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDT01QQVQ6IFRoZSBldmVudCBzaG91bGQgYmUgaWdub3JlZCBpZiB0aGUgZm9jdXMgaXMgbW92aW5nIHRvIGFcbiAgICAgICAgLy8gbm9uLSBlZGl0YWJsZSBzZWN0aW9uIG9mIGFuIGVsZW1lbnQgdGhhdCBpc24ndCBhIHZvaWQgbm9kZSAoZWcuXG4gICAgICAgIC8vIGEgbGlzdCBpdGVtIG9mIHRoZSBjaGVjayBsaXN0IGV4YW1wbGUpLlxuICAgICAgICBpZiAocmVsYXRlZFRhcmdldCAhPSBudWxsICYmIGlzRE9NTm9kZShyZWxhdGVkVGFyZ2V0KSAmJiBBbmd1bGFyRWRpdG9yLmhhc0RPTU5vZGUodGhpcy5lZGl0b3IsIHJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gQW5ndWxhckVkaXRvci50b1NsYXRlTm9kZSh0aGlzLmVkaXRvciwgcmVsYXRlZFRhcmdldCk7XG5cbiAgICAgICAgICAgIGlmIChFbGVtZW50LmlzRWxlbWVudChub2RlKSAmJiAhdGhpcy5lZGl0b3IuaXNWb2lkKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgSVNfRk9DVVNFRC5kZWxldGUodGhpcy5lZGl0b3IpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25ET01DbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5yZWFkb25seSAmJlxuICAgICAgICAgICAgaGFzVGFyZ2V0KHRoaXMuZWRpdG9yLCBldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhdGhpcy5pc0RPTUV2ZW50SGFuZGxlZChldmVudCwgdGhpcy5jbGljaykgJiZcbiAgICAgICAgICAgIGlzRE9NTm9kZShldmVudC50YXJnZXQpXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZU5vZGUodGhpcy5lZGl0b3IsIGV2ZW50LnRhcmdldCk7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gQW5ndWxhckVkaXRvci5maW5kUGF0aCh0aGlzLmVkaXRvciwgbm9kZSk7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IEVkaXRvci5zdGFydCh0aGlzLmVkaXRvciwgcGF0aCk7XG4gICAgICAgICAgICBjb25zdCBlbmQgPSBFZGl0b3IuZW5kKHRoaXMuZWRpdG9yLCBwYXRoKTtcblxuICAgICAgICAgICAgY29uc3Qgc3RhcnRWb2lkID0gRWRpdG9yLnZvaWQodGhpcy5lZGl0b3IsIHsgYXQ6IHN0YXJ0IH0pO1xuICAgICAgICAgICAgY29uc3QgZW5kVm9pZCA9IEVkaXRvci52b2lkKHRoaXMuZWRpdG9yLCB7IGF0OiBlbmQgfSk7XG5cbiAgICAgICAgICAgIGlmIChzdGFydFZvaWQgJiYgZW5kVm9pZCAmJiBQYXRoLmVxdWFscyhzdGFydFZvaWRbMV0sIGVuZFZvaWRbMV0pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBFZGl0b3IucmFuZ2UodGhpcy5lZGl0b3IsIHN0YXJ0KTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdCh0aGlzLmVkaXRvciwgcmFuZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRPTUNvbXBvc2l0aW9uRW5kKGV2ZW50OiBDb21wb3NpdGlvbkV2ZW50KSB7XG4gICAgICAgIGlmICghZXZlbnQuZGF0YSAmJiAhUmFuZ2UuaXNDb2xsYXBzZWQodGhpcy5lZGl0b3Iuc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgVHJhbnNmb3Jtcy5kZWxldGUodGhpcy5lZGl0b3IpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNFZGl0YWJsZVRhcmdldCh0aGlzLmVkaXRvciwgZXZlbnQudGFyZ2V0KSAmJiAhdGhpcy5pc0RPTUV2ZW50SGFuZGxlZChldmVudCwgdGhpcy5jb21wb3NpdGlvbkVuZCkpIHtcbiAgICAgICAgICAgIC8vIENPTVBBVDogSW4gQ2hyb21lL0ZpcmVmb3gsIGBiZWZvcmVpbnB1dGAgZXZlbnRzIGZvciBjb21wb3NpdGlvbnNcbiAgICAgICAgICAgIC8vIGFyZW4ndCBjb3JyZWN0IGFuZCBuZXZlciBmaXJlIHRoZSBcImluc2VydEZyb21Db21wb3NpdGlvblwiXG4gICAgICAgICAgICAvLyB0eXBlIHRoYXQgd2UgbmVlZC4gU28gaW5zdGVhZCwgaW5zZXJ0IHdoZW5ldmVyIGEgY29tcG9zaXRpb25cbiAgICAgICAgICAgIC8vIGVuZHMgc2luY2UgaXQgd2lsbCBhbHJlYWR5IGhhdmUgYmVlbiBjb21taXR0ZWQgdG8gdGhlIERPTS5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzQ29tcG9zaW5nID09PSB0cnVlICYmICFJU19TQUZBUkkgJiYgZXZlbnQuZGF0YSkge1xuICAgICAgICAgICAgICAgIHByZXZlbnRJbnNlcnRGcm9tQ29tcG9zaXRpb24oZXZlbnQsIHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgICAgICBFZGl0b3IuaW5zZXJ0VGV4dCh0aGlzLmVkaXRvciwgZXZlbnQuZGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENPTVBBVDogSW4gRmlyZWZveCA4Ny4wIENvbXBvc2l0aW9uRW5kIGZpcmUgdHdpY2VcbiAgICAgICAgICAgIC8vIHNvIHdlIG5lZWQgYXZvaWQgcmVwZWF0IGlzbmVydFRleHQgYnkgaXNDb21wb3NpbmcgPT09IHRydWUsXG4gICAgICAgICAgICB0aGlzLmlzQ29tcG9zaW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXRlY3RDb250ZXh0KCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRE9NQ29tcG9zaXRpb25TdGFydChldmVudDogQ29tcG9zaXRpb25FdmVudCkge1xuICAgICAgICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gdGhpcy5lZGl0b3I7XG5cbiAgICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICAgICAgLy8gc29sdmUgdGhlIHByb2JsZW0gb2YgY3Jvc3Mgbm9kZSBDaGluZXNlIGlucHV0XG4gICAgICAgICAgICBpZiAoUmFuZ2UuaXNFeHBhbmRlZChzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZyYWdtZW50KHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcmNlRmx1c2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzRWRpdGFibGVUYXJnZXQodGhpcy5lZGl0b3IsIGV2ZW50LnRhcmdldCkgJiYgIXRoaXMuaXNET01FdmVudEhhbmRsZWQoZXZlbnQsIHRoaXMuY29tcG9zaXRpb25TdGFydCkpIHtcbiAgICAgICAgICAgIHRoaXMuaXNDb21wb3NpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGV0ZWN0Q29udGV4dCgpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRPTUNvcHkoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHdpbmRvdyA9IEFuZ3VsYXJFZGl0b3IuZ2V0V2luZG93KHRoaXMuZWRpdG9yKTtcbiAgICAgICAgY29uc3QgaXNPdXRzaWRlU2xhdGUgPSAhaGFzU3RyaW5nVGFyZ2V0KHdpbmRvdy5nZXRTZWxlY3Rpb24oKSkgJiYgaXNUYXJnZXRJbnNpZGVWb2lkKHRoaXMuZWRpdG9yLCBldmVudC50YXJnZXQpO1xuICAgICAgICBpZiAoIWlzT3V0c2lkZVNsYXRlICYmIGhhc1RhcmdldCh0aGlzLmVkaXRvciwgZXZlbnQudGFyZ2V0KSAmJiAhdGhpcy5pc0RPTUV2ZW50SGFuZGxlZChldmVudCwgdGhpcy5jb3B5KSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIEFuZ3VsYXJFZGl0b3Iuc2V0RnJhZ21lbnREYXRhKHRoaXMuZWRpdG9yLCBldmVudC5jbGlwYm9hcmREYXRhLCAnY29weScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRPTUN1dChldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlYWRvbmx5ICYmIGhhc0VkaXRhYmxlVGFyZ2V0KHRoaXMuZWRpdG9yLCBldmVudC50YXJnZXQpICYmICF0aGlzLmlzRE9NRXZlbnRIYW5kbGVkKGV2ZW50LCB0aGlzLmN1dCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBBbmd1bGFyRWRpdG9yLnNldEZyYWdtZW50RGF0YSh0aGlzLmVkaXRvciwgZXZlbnQuY2xpcGJvYXJkRGF0YSwgJ2N1dCcpO1xuICAgICAgICAgICAgY29uc3QgeyBzZWxlY3Rpb24gfSA9IHRoaXMuZWRpdG9yO1xuXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgQW5ndWxhckVkaXRvci5kZWxldGVDdXREYXRhKHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25ET01EcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgICAgIGlmIChoYXNUYXJnZXQodGhpcy5lZGl0b3IsIGV2ZW50LnRhcmdldCkgJiYgIXRoaXMuaXNET01FdmVudEhhbmRsZWQoZXZlbnQsIHRoaXMuZHJhZ092ZXIpKSB7XG4gICAgICAgICAgICAvLyBPbmx5IHdoZW4gdGhlIHRhcmdldCBpcyB2b2lkLCBjYWxsIGBwcmV2ZW50RGVmYXVsdGAgdG8gc2lnbmFsXG4gICAgICAgICAgICAvLyB0aGF0IGRyb3BzIGFyZSBhbGxvd2VkLiBFZGl0YWJsZSBjb250ZW50IGlzIGRyb3BwYWJsZSBieVxuICAgICAgICAgICAgLy8gZGVmYXVsdCwgYW5kIGNhbGxpbmcgYHByZXZlbnREZWZhdWx0YCBoaWRlcyB0aGUgY3Vyc29yLlxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZU5vZGUodGhpcy5lZGl0b3IsIGV2ZW50LnRhcmdldCk7XG5cbiAgICAgICAgICAgIGlmIChFZGl0b3IuaXNWb2lkKHRoaXMuZWRpdG9yLCBub2RlKSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRE9NRHJhZ1N0YXJ0KGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlYWRvbmx5ICYmIGhhc1RhcmdldCh0aGlzLmVkaXRvciwgZXZlbnQudGFyZ2V0KSAmJiAhdGhpcy5pc0RPTUV2ZW50SGFuZGxlZChldmVudCwgdGhpcy5kcmFnU3RhcnQpKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gQW5ndWxhckVkaXRvci50b1NsYXRlTm9kZSh0aGlzLmVkaXRvciwgZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBBbmd1bGFyRWRpdG9yLmZpbmRQYXRoKHRoaXMuZWRpdG9yLCBub2RlKTtcbiAgICAgICAgICAgIGNvbnN0IHZvaWRNYXRjaCA9XG4gICAgICAgICAgICAgICAgRWRpdG9yLmlzVm9pZCh0aGlzLmVkaXRvciwgbm9kZSkgfHxcbiAgICAgICAgICAgICAgICBFZGl0b3Iudm9pZCh0aGlzLmVkaXRvciwgeyBhdDogcGF0aCwgdm9pZHM6IHRydWUgfSk7XG5cbiAgICAgICAgICAgIC8vIElmIHN0YXJ0aW5nIGEgZHJhZyBvbiBhIHZvaWQgbm9kZSwgbWFrZSBzdXJlIGl0IGlzIHNlbGVjdGVkXG4gICAgICAgICAgICAvLyBzbyB0aGF0IGl0IHNob3dzIHVwIGluIHRoZSBzZWxlY3Rpb24ncyBmcmFnbWVudC5cbiAgICAgICAgICAgIGlmICh2b2lkTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IEVkaXRvci5yYW5nZSh0aGlzLmVkaXRvciwgcGF0aCk7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QodGhpcy5lZGl0b3IsIHJhbmdlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pc0RyYWdnaW5nSW50ZXJuYWxseSA9IHRydWU7XG5cbiAgICAgICAgICAgIEFuZ3VsYXJFZGl0b3Iuc2V0RnJhZ21lbnREYXRhKHRoaXMuZWRpdG9yLCBldmVudC5kYXRhVHJhbnNmZXIsICdkcmFnJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRE9NRHJvcChldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgICAgICBpZiAoIXRoaXMucmVhZG9ubHkgJiYgaGFzVGFyZ2V0KHRoaXMuZWRpdG9yLCBldmVudC50YXJnZXQpICYmICF0aGlzLmlzRE9NRXZlbnRIYW5kbGVkKGV2ZW50LCB0aGlzLmRyb3ApKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgLy8gS2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgZHJhZ2dlZCByYW5nZSBiZWZvcmUgdXBkYXRpbmcgc2VsZWN0aW9uXG4gICAgICAgICAgICBjb25zdCBkcmFnZ2VkUmFuZ2UgPSBlZGl0b3Iuc2VsZWN0aW9uO1xuXG4gICAgICAgICAgICAvLyBGaW5kIHRoZSByYW5nZSB3aGVyZSB0aGUgZHJvcCBoYXBwZW5lZFxuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBBbmd1bGFyRWRpdG9yLmZpbmRFdmVudFJhbmdlKGVkaXRvciwgZXZlbnQpO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGV2ZW50LmRhdGFUcmFuc2ZlcjtcblxuICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QoZWRpdG9yLCByYW5nZSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzRHJhZ2dpbmdJbnRlcm5hbGx5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGRyYWdnZWRSYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLmRlbGV0ZShlZGl0b3IsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0OiBkcmFnZ2VkUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuaXNEcmFnZ2luZ0ludGVybmFsbHkgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQW5ndWxhckVkaXRvci5pbnNlcnREYXRhKGVkaXRvciwgZGF0YSk7XG5cbiAgICAgICAgICAgIC8vIFdoZW4gZHJhZ2dpbmcgZnJvbSBhbm90aGVyIHNvdXJjZSBpbnRvIHRoZSBlZGl0b3IsIGl0J3MgcG9zc2libGVcbiAgICAgICAgICAgIC8vIHRoYXQgdGhlIGN1cnJlbnQgZWRpdG9yIGRvZXMgbm90IGhhdmUgZm9jdXMuXG4gICAgICAgICAgICBpZiAoIUFuZ3VsYXJFZGl0b3IuaXNGb2N1c2VkKGVkaXRvcikpIHtcbiAgICAgICAgICAgICAgICBBbmd1bGFyRWRpdG9yLmZvY3VzKGVkaXRvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRE9NRHJhZ0VuZChldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5yZWFkb25seSAmJiB0aGlzLmlzRHJhZ2dpbmdJbnRlcm5hbGx5ICYmIGhhc1RhcmdldCh0aGlzLmVkaXRvciwgZXZlbnQudGFyZ2V0KSAmJiAhdGhpcy5pc0RPTUV2ZW50SGFuZGxlZChldmVudCwgdGhpcy5kcmFnRW5kKSkge1xuICAgICAgICAgICAgdGhpcy5pc0RyYWdnaW5nSW50ZXJuYWxseSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRPTUZvY3VzKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5yZWFkb25seSAmJlxuICAgICAgICAgICAgIXRoaXMuaXNVcGRhdGluZ1NlbGVjdGlvbiAmJlxuICAgICAgICAgICAgaGFzRWRpdGFibGVUYXJnZXQodGhpcy5lZGl0b3IsIGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICAgICAgICF0aGlzLmlzRE9NRXZlbnRIYW5kbGVkKGV2ZW50LCB0aGlzLmZvY3VzKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGVsID0gQW5ndWxhckVkaXRvci50b0RPTU5vZGUodGhpcy5lZGl0b3IsIHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgIGNvbnN0IHJvb3QgPSBBbmd1bGFyRWRpdG9yLmZpbmREb2N1bWVudE9yU2hhZG93Um9vdCh0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICB0aGlzLmxhdGVzdEVsZW1lbnQgPSByb290LmFjdGl2ZUVsZW1lbnRcblxuICAgICAgICAgICAgLy8gQ09NUEFUOiBJZiB0aGUgZWRpdG9yIGhhcyBuZXN0ZWQgZWRpdGFibGUgZWxlbWVudHMsIHRoZSBmb2N1c1xuICAgICAgICAgICAgLy8gY2FuIGdvIHRvIHRoZW0uIEluIEZpcmVmb3gsIHRoaXMgbXVzdCBiZSBwcmV2ZW50ZWQgYmVjYXVzZSBpdFxuICAgICAgICAgICAgLy8gcmVzdWx0cyBpbiBpc3N1ZXMgd2l0aCBrZXlib2FyZCBuYXZpZ2F0aW9uLiAoMjAxNy8wMy8zMClcbiAgICAgICAgICAgIGlmIChJU19GSVJFRk9YICYmIGV2ZW50LnRhcmdldCAhPT0gZWwpIHtcbiAgICAgICAgICAgICAgICBlbC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgSVNfRk9DVVNFRC5zZXQodGhpcy5lZGl0b3IsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRPTUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBBbmd1bGFyRWRpdG9yLmZpbmREb2N1bWVudE9yU2hhZG93Um9vdCh0aGlzLmVkaXRvcilcbiAgICAgICAgY29uc3QgeyBhY3RpdmVFbGVtZW50IH0gPSByb290O1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5yZWFkb25seSAmJlxuICAgICAgICAgICAgaGFzRWRpdGFibGVUYXJnZXQoZWRpdG9yLCBldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhaXNUYXJnZXRJbnNpZGVWb2lkKGVkaXRvciwgYWN0aXZlRWxlbWVudCkgJiYgLy8gc3RvcCBmaXJlIGtleWRvd24gaGFuZGxlIHdoZW4gZm9jdXMgdm9pZCBub2RlXG4gICAgICAgICAgICAhdGhpcy5pc0NvbXBvc2luZyAmJlxuICAgICAgICAgICAgIXRoaXMuaXNET01FdmVudEhhbmRsZWQoZXZlbnQsIHRoaXMua2V5ZG93bilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBuYXRpdmVFdmVudCA9IGV2ZW50O1xuICAgICAgICAgICAgY29uc3QgeyBzZWxlY3Rpb24gfSA9IGVkaXRvcjtcblxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9XG4gICAgICAgICAgICAgICAgZWRpdG9yLmNoaWxkcmVuW1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvbiAhPT0gbnVsbCA/IHNlbGVjdGlvbi5mb2N1cy5wYXRoWzBdIDogMFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIGNvbnN0IGlzUlRMID0gZ2V0RGlyZWN0aW9uKE5vZGUuc3RyaW5nKGVsZW1lbnQpKSA9PT0gJ3J0bCc7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgLy8gQ09NUEFUOiBTaW5jZSB3ZSBwcmV2ZW50IHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9uXG4gICAgICAgICAgICAgICAgLy8gYGJlZm9yZWlucHV0YCBldmVudHMsIHRoZSBicm93c2VyIGRvZXNuJ3QgdGhpbmsgdGhlcmUncyBldmVyXG4gICAgICAgICAgICAgICAgLy8gYW55IGhpc3Rvcnkgc3RhY2sgdG8gdW5kbyBvciByZWRvLCBzbyB3ZSBoYXZlIHRvIG1hbmFnZSB0aGVzZVxuICAgICAgICAgICAgICAgIC8vIGhvdGtleXMgb3Vyc2VsdmVzLiAoMjAxOS8xMS8wNilcbiAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc1JlZG8obmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKEhpc3RvcnlFZGl0b3IuaXNIaXN0b3J5RWRpdG9yKGVkaXRvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvci5yZWRvKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNVbmRvKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChIaXN0b3J5RWRpdG9yLmlzSGlzdG9yeUVkaXRvcihlZGl0b3IpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IudW5kbygpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIENPTVBBVDogQ2VydGFpbiBicm93c2VycyBkb24ndCBoYW5kbGUgdGhlIHNlbGVjdGlvbiB1cGRhdGVzXG4gICAgICAgICAgICAgICAgLy8gcHJvcGVybHkuIEluIENocm9tZSwgdGhlIHNlbGVjdGlvbiBpc24ndCBwcm9wZXJseSBleHRlbmRlZC5cbiAgICAgICAgICAgICAgICAvLyBBbmQgaW4gRmlyZWZveCwgdGhlIHNlbGVjdGlvbiBpc24ndCBwcm9wZXJseSBjb2xsYXBzZWQuXG4gICAgICAgICAgICAgICAgLy8gKDIwMTcvMTAvMTcpXG4gICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNNb3ZlTGluZUJhY2t3YXJkKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLm1vdmUoZWRpdG9yLCB7IHVuaXQ6ICdsaW5lJywgcmV2ZXJzZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChIb3RrZXlzLmlzTW92ZUxpbmVGb3J3YXJkKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLm1vdmUoZWRpdG9yLCB7IHVuaXQ6ICdsaW5lJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChIb3RrZXlzLmlzRXh0ZW5kTGluZUJhY2t3YXJkKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLm1vdmUoZWRpdG9yLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1bml0OiAnbGluZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBlZGdlOiAnZm9jdXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChIb3RrZXlzLmlzRXh0ZW5kTGluZUZvcndhcmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMubW92ZShlZGl0b3IsIHsgdW5pdDogJ2xpbmUnLCBlZGdlOiAnZm9jdXMnIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gQ09NUEFUOiBJZiBhIHZvaWQgbm9kZSBpcyBzZWxlY3RlZCwgb3IgYSB6ZXJvLXdpZHRoIHRleHQgbm9kZVxuICAgICAgICAgICAgICAgIC8vIGFkamFjZW50IHRvIGFuIGlubGluZSBpcyBzZWxlY3RlZCwgd2UgbmVlZCB0byBoYW5kbGUgdGhlc2VcbiAgICAgICAgICAgICAgICAvLyBob3RrZXlzIG1hbnVhbGx5IGJlY2F1c2UgYnJvd3NlcnMgd29uJ3QgYmUgYWJsZSB0byBza2lwIG92ZXJcbiAgICAgICAgICAgICAgICAvLyB0aGUgdm9pZCBub2RlIHdpdGggdGhlIHplcm8td2lkdGggc3BhY2Ugbm90IGJlaW5nIGFuIGVtcHR5XG4gICAgICAgICAgICAgICAgLy8gc3RyaW5nLlxuICAgICAgICAgICAgICAgIGlmIChIb3RrZXlzLmlzTW92ZUJhY2t3YXJkKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb24gJiYgUmFuZ2UuaXNDb2xsYXBzZWQoc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5tb3ZlKGVkaXRvciwgeyByZXZlcnNlOiAhaXNSVEwgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLmNvbGxhcHNlKGVkaXRvciwgeyBlZGdlOiAnc3RhcnQnIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChIb3RrZXlzLmlzTW92ZUZvcndhcmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBSYW5nZS5pc0NvbGxhcHNlZChzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLm1vdmUoZWRpdG9yLCB7IHJldmVyc2U6IGlzUlRMIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5jb2xsYXBzZShlZGl0b3IsIHsgZWRnZTogJ2VuZCcgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNNb3ZlV29yZEJhY2t3YXJkKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb24gJiYgUmFuZ2UuaXNFeHBhbmRlZChzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLmNvbGxhcHNlKGVkaXRvciwgeyBlZGdlOiAnZm9jdXMnIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLm1vdmUoZWRpdG9yLCB7IHVuaXQ6ICd3b3JkJywgcmV2ZXJzZTogIWlzUlRMIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNNb3ZlV29yZEZvcndhcmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBSYW5nZS5pc0V4cGFuZGVkKHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuY29sbGFwc2UoZWRpdG9yLCB7IGVkZ2U6ICdmb2N1cycgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMubW92ZShlZGl0b3IsIHsgdW5pdDogJ3dvcmQnLCByZXZlcnNlOiBpc1JUTCB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIENPTVBBVDogQ2VydGFpbiBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSBgYmVmb3JlaW5wdXRgIGV2ZW50LCBzbyB3ZVxuICAgICAgICAgICAgICAgIC8vIGZhbGwgYmFjayB0byBndWVzc2luZyBhdCB0aGUgaW5wdXQgaW50ZW50aW9uIGZvciBob3RrZXlzLlxuICAgICAgICAgICAgICAgIC8vIENPTVBBVDogSW4gaU9TLCBzb21lIG9mIHRoZXNlIGhvdGtleXMgYXJlIGhhbmRsZWQgaW4gdGhlXG4gICAgICAgICAgICAgICAgaWYgKCFIQVNfQkVGT1JFX0lOUFVUX1NVUFBPUlQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIGNvcmUgYmVoYXZpb3IgZm9yIHRoZXNlLCBidXQgdGhleSBjaGFuZ2UgdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIERPTSBpZiB3ZSBkb24ndCBwcmV2ZW50IHRoZW0sIHNvIHdlIGhhdmUgdG8uXG4gICAgICAgICAgICAgICAgICAgIGlmIChIb3RrZXlzLmlzQm9sZChuYXRpdmVFdmVudCkgfHwgSG90a2V5cy5pc0l0YWxpYyhuYXRpdmVFdmVudCkgfHwgSG90a2V5cy5pc1RyYW5zcG9zZUNoYXJhY3RlcihuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc1NwbGl0QmxvY2sobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmluc2VydEJyZWFrKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc0RlbGV0ZUJhY2t3YXJkKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBSYW5nZS5pc0V4cGFuZGVkKHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRnJhZ21lbnQoZWRpdG9yLCB7IGRpcmVjdGlvbjogJ2JhY2t3YXJkJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUJhY2t3YXJkKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChIb3RrZXlzLmlzRGVsZXRlRm9yd2FyZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb24gJiYgUmFuZ2UuaXNFeHBhbmRlZChzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZyYWdtZW50KGVkaXRvciwgeyBkaXJlY3Rpb246ICdmb3J3YXJkJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZvcndhcmQoZWRpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNEZWxldGVMaW5lQmFja3dhcmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIFJhbmdlLmlzRXhwYW5kZWQoc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVGcmFnbWVudChlZGl0b3IsIHsgZGlyZWN0aW9uOiAnYmFja3dhcmQnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlQmFja3dhcmQoZWRpdG9yLCB7IHVuaXQ6ICdsaW5lJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNEZWxldGVMaW5lRm9yd2FyZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb24gJiYgUmFuZ2UuaXNFeHBhbmRlZChzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZyYWdtZW50KGVkaXRvciwgeyBkaXJlY3Rpb246ICdmb3J3YXJkJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZvcndhcmQoZWRpdG9yLCB7IHVuaXQ6ICdsaW5lJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNEZWxldGVXb3JkQmFja3dhcmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIFJhbmdlLmlzRXhwYW5kZWQoc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVGcmFnbWVudChlZGl0b3IsIHsgZGlyZWN0aW9uOiAnYmFja3dhcmQnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlQmFja3dhcmQoZWRpdG9yLCB7IHVuaXQ6ICd3b3JkJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNEZWxldGVXb3JkRm9yd2FyZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb24gJiYgUmFuZ2UuaXNFeHBhbmRlZChzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZyYWdtZW50KGVkaXRvciwgeyBkaXJlY3Rpb246ICdmb3J3YXJkJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZvcndhcmQoZWRpdG9yLCB7IHVuaXQ6ICd3b3JkJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKElTX0NIUk9NRSB8fCBJU19TQUZBUkkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENPTVBBVDogQ2hyb21lIGFuZCBTYWZhcmkgc3VwcG9ydCBgYmVmb3JlaW5wdXRgIGV2ZW50IGJ1dCBkbyBub3QgZmlyZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW4gZXZlbnQgd2hlbiBkZWxldGluZyBiYWNrd2FyZHMgaW4gYSBzZWxlY3RlZCB2b2lkIGlubGluZSBub2RlXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKEhvdGtleXMuaXNEZWxldGVCYWNrd2FyZChuYXRpdmVFdmVudCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG90a2V5cy5pc0RlbGV0ZUZvcndhcmQobmF0aXZlRXZlbnQpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhbmdlLmlzQ29sbGFwc2VkKHNlbGVjdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gTm9kZS5wYXJlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmFuY2hvci5wYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudC5pc0VsZW1lbnQoY3VycmVudE5vZGUpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5pc1ZvaWQoZWRpdG9yLCBjdXJyZW50Tm9kZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmlzSW5saW5lKGVkaXRvciwgY3VycmVudE5vZGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUJhY2t3YXJkKGVkaXRvciwgeyB1bml0OiAnYmxvY2snIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3Iub25FcnJvcih7IGNvZGU6IFNsYXRlRXJyb3JDb2RlLk9uRE9NS2V5ZG93bkVycm9yLCBuYXRpdmVFcnJvcjogZXJyb3IgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRE9NUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XG4gICAgICAgIC8vIENPTVBBVDogQ2VydGFpbiBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSBgYmVmb3JlaW5wdXRgIGV2ZW50LCBzbyB3ZVxuICAgICAgICAvLyBmYWxsIGJhY2sgdG8gUmVhY3QncyBgb25QYXN0ZWAgaGVyZSBpbnN0ZWFkLlxuICAgICAgICAvLyBDT01QQVQ6IEZpcmVmb3gsIENocm9tZSBhbmQgU2FmYXJpIGFyZSBub3QgZW1pdHRpbmcgYGJlZm9yZWlucHV0YCBldmVudHNcbiAgICAgICAgLy8gd2hlbiBcInBhc3RlIHdpdGhvdXQgZm9ybWF0dGluZ1wiIG9wdGlvbiBpcyB1c2VkLlxuICAgICAgICAvLyBUaGlzIHVuZm9ydHVuYXRlbHkgbmVlZHMgdG8gYmUgaGFuZGxlZCB3aXRoIHBhc3RlIGV2ZW50cyBpbnN0ZWFkLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5pc0RPTUV2ZW50SGFuZGxlZChldmVudCwgdGhpcy5wYXN0ZSkgJiZcbiAgICAgICAgICAgICghSEFTX0JFRk9SRV9JTlBVVF9TVVBQT1JUIHx8IGlzUGxhaW5UZXh0T25seVBhc3RlKGV2ZW50KSB8fCBmb3JjZU9uRE9NUGFzdGUpICYmXG4gICAgICAgICAgICAhdGhpcy5yZWFkb25seSAmJlxuICAgICAgICAgICAgaGFzRWRpdGFibGVUYXJnZXQodGhpcy5lZGl0b3IsIGV2ZW50LnRhcmdldClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgQW5ndWxhckVkaXRvci5pbnNlcnREYXRhKHRoaXMuZWRpdG9yLCBldmVudC5jbGlwYm9hcmREYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25GYWxsYmFja0JlZm9yZUlucHV0KGV2ZW50OiBCZWZvcmVJbnB1dEV2ZW50KSB7XG4gICAgICAgIC8vIENPTVBBVDogQ2VydGFpbiBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSBgYmVmb3JlaW5wdXRgIGV2ZW50LCBzbyB3ZVxuICAgICAgICAvLyBmYWxsIGJhY2sgdG8gUmVhY3QncyBsZWFreSBwb2x5ZmlsbCBpbnN0ZWFkIGp1c3QgZm9yIGl0LiBJdFxuICAgICAgICAvLyBvbmx5IHdvcmtzIGZvciB0aGUgYGluc2VydFRleHRgIGlucHV0IHR5cGUuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFIQVNfQkVGT1JFX0lOUFVUX1NVUFBPUlQgJiZcbiAgICAgICAgICAgICF0aGlzLnJlYWRvbmx5ICYmXG4gICAgICAgICAgICAhdGhpcy5pc0RPTUV2ZW50SGFuZGxlZChldmVudC5uYXRpdmVFdmVudCwgdGhpcy5iZWZvcmVJbnB1dCkgJiZcbiAgICAgICAgICAgIGhhc0VkaXRhYmxlVGFyZ2V0KHRoaXMuZWRpdG9yLCBldmVudC5uYXRpdmVFdmVudC50YXJnZXQpXG4gICAgICAgICkge1xuICAgICAgICAgICAgZXZlbnQubmF0aXZlRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IGV2ZW50LmRhdGE7XG4gICAgICAgICAgICAgICAgaWYgKCFSYW5nZS5pc0NvbGxhcHNlZCh0aGlzLmVkaXRvci5zZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVGcmFnbWVudCh0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGp1c3QgaGFuZGxlIE5vbi1JTUUgaW5wdXRcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNDb21wb3NpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmluc2VydFRleHQodGhpcy5lZGl0b3IsIHRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3Iub25FcnJvcih7IGNvZGU6IFNsYXRlRXJyb3JDb2RlLlRvTmF0aXZlU2VsZWN0aW9uRXJyb3IsIG5hdGl2ZUVycm9yOiBlcnJvciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNET01FdmVudEhhbmRsZWQoZXZlbnQ6IEV2ZW50LCBoYW5kbGVyPzogKGV2ZW50OiBFdmVudCkgPT4gdm9pZCkge1xuICAgICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVyKGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQ7XG4gICAgfVxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIE5PREVfVE9fRUxFTUVOVC5kZWxldGUodGhpcy5lZGl0b3IpO1xuICAgICAgICB0aGlzLm1hbnVhbExpc3RlbmVycy5mb3JFYWNoKG1hbnVhbExpc3RlbmVyID0+IHtcbiAgICAgICAgICAgIG1hbnVhbExpc3RlbmVyKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgICAgIEVESVRPUl9UT19PTl9DSEFOR0UuZGVsZXRlKHRoaXMuZWRpdG9yKTtcbiAgICB9XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHRhcmdldCBpcyBlZGl0YWJsZSBhbmQgaW4gdGhlIGVkaXRvci5cbiAqL1xuXG5jb25zdCBoYXNFZGl0YWJsZVRhcmdldCA9IChlZGl0b3I6IEFuZ3VsYXJFZGl0b3IsIHRhcmdldDogRXZlbnRUYXJnZXQgfCBudWxsKTogdGFyZ2V0IGlzIERPTU5vZGUgPT4ge1xuICAgIHJldHVybiBpc0RPTU5vZGUodGFyZ2V0KSAmJiBBbmd1bGFyRWRpdG9yLmhhc0RPTU5vZGUoZWRpdG9yLCB0YXJnZXQsIHsgZWRpdGFibGU6IHRydWUgfSk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIHR3byBET00gcmFuZ2Ugb2JqZWN0cyBhcmUgZXF1YWwuXG4gKi9cbmNvbnN0IGlzUmFuZ2VFcXVhbCA9IChhOiBET01SYW5nZSwgYjogRE9NUmFuZ2UpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgICAoYS5zdGFydENvbnRhaW5lciA9PT0gYi5zdGFydENvbnRhaW5lciAmJlxuICAgICAgICAgICAgYS5zdGFydE9mZnNldCA9PT0gYi5zdGFydE9mZnNldCAmJlxuICAgICAgICAgICAgYS5lbmRDb250YWluZXIgPT09IGIuZW5kQ29udGFpbmVyICYmXG4gICAgICAgICAgICBhLmVuZE9mZnNldCA9PT0gYi5lbmRPZmZzZXQpIHx8XG4gICAgICAgIChhLnN0YXJ0Q29udGFpbmVyID09PSBiLmVuZENvbnRhaW5lciAmJlxuICAgICAgICAgICAgYS5zdGFydE9mZnNldCA9PT0gYi5lbmRPZmZzZXQgJiZcbiAgICAgICAgICAgIGEuZW5kQ29udGFpbmVyID09PSBiLnN0YXJ0Q29udGFpbmVyICYmXG4gICAgICAgICAgICBhLmVuZE9mZnNldCA9PT0gYi5zdGFydE9mZnNldClcbiAgICApO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgdGFyZ2V0IGlzIGluIHRoZSBlZGl0b3IuXG4gKi9cblxuY29uc3QgaGFzVGFyZ2V0ID0gKGVkaXRvcjogQW5ndWxhckVkaXRvciwgdGFyZ2V0OiBFdmVudFRhcmdldCB8IG51bGwpOiB0YXJnZXQgaXMgRE9NTm9kZSA9PiB7XG4gICAgcmV0dXJuIGlzRE9NTm9kZSh0YXJnZXQpICYmIEFuZ3VsYXJFZGl0b3IuaGFzRE9NTm9kZShlZGl0b3IsIHRhcmdldCk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSB0YXJnZXQgaXMgaW5zaWRlIHZvaWQgYW5kIGluIHRoZSBlZGl0b3IuXG4gKi9cblxuY29uc3QgaXNUYXJnZXRJbnNpZGVWb2lkID0gKGVkaXRvcjogQW5ndWxhckVkaXRvciwgdGFyZ2V0OiBFdmVudFRhcmdldCB8IG51bGwpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBzbGF0ZU5vZGUgPSBoYXNUYXJnZXQoZWRpdG9yLCB0YXJnZXQpICYmIEFuZ3VsYXJFZGl0b3IudG9TbGF0ZU5vZGUoZWRpdG9yLCB0YXJnZXQpO1xuICAgIHJldHVybiBFZGl0b3IuaXNWb2lkKGVkaXRvciwgc2xhdGVOb2RlKTtcbn07XG5cbmNvbnN0IGhhc1N0cmluZ1RhcmdldCA9IChkb21TZWxlY3Rpb246IERPTVNlbGVjdGlvbikgPT4ge1xuICAgIHJldHVybiAoZG9tU2VsZWN0aW9uLmFuY2hvck5vZGUucGFyZW50RWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2RhdGEtc2xhdGUtc3RyaW5nJykgfHwgZG9tU2VsZWN0aW9uLmFuY2hvck5vZGUucGFyZW50RWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2RhdGEtc2xhdGUtemVyby13aWR0aCcpKSAmJlxuICAgICAgICAoZG9tU2VsZWN0aW9uLmZvY3VzTm9kZS5wYXJlbnRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGF0YS1zbGF0ZS1zdHJpbmcnKSB8fCBkb21TZWxlY3Rpb24uZm9jdXNOb2RlLnBhcmVudEVsZW1lbnQuaGFzQXR0cmlidXRlKCdkYXRhLXNsYXRlLXplcm8td2lkdGgnKSk7XG59XG5cbi8qKlxuICogcmVtb3ZlIGRlZmF1bHQgaW5zZXJ0IGZyb20gY29tcG9zaXRpb25cbiAqIEBwYXJhbSB0ZXh0XG4gKi9cbmNvbnN0IHByZXZlbnRJbnNlcnRGcm9tQ29tcG9zaXRpb24gPSAoZXZlbnQ6IEV2ZW50LCBlZGl0b3I6IEFuZ3VsYXJFZGl0b3IpID0+IHtcbiAgICBjb25zdCB0eXBlcyA9IFsnY29tcG9zaXRpb25lbmQnLCAnaW5zZXJ0RnJvbUNvbXBvc2l0aW9uJ107XG4gICAgaWYgKCF0eXBlcy5pbmNsdWRlcyhldmVudC50eXBlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluc2VydFRleHQgPSAoZXZlbnQgYXMgQ29tcG9zaXRpb25FdmVudCkuZGF0YTtcbiAgICBjb25zdCB3aW5kb3cgPSBBbmd1bGFyRWRpdG9yLmdldFdpbmRvdyhlZGl0b3IpO1xuICAgIGNvbnN0IGRvbVNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAvLyBlbnN1cmUgdGV4dCBub2RlIGluc2VydCBjb21wb3NpdGlvbiBpbnB1dCB0ZXh0XG4gICAgaWYgKGluc2VydFRleHQgJiYgZG9tU2VsZWN0aW9uLmFuY2hvck5vZGUgaW5zdGFuY2VvZiBUZXh0ICYmIGRvbVNlbGVjdGlvbi5hbmNob3JOb2RlLnRleHRDb250ZW50LmVuZHNXaXRoKGluc2VydFRleHQpKSB7XG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9tU2VsZWN0aW9uLmFuY2hvck5vZGU7XG4gICAgICAgIHRleHROb2RlLnNwbGl0VGV4dCh0ZXh0Tm9kZS5sZW5ndGggLSBpbnNlcnRUZXh0Lmxlbmd0aCkucmVtb3ZlKCk7XG4gICAgfVxufVxuIiwiPHNsYXRlLWNoaWxkcmVuIFtjaGlsZHJlbl09XCJlZGl0b3IuY2hpbGRyZW5cIiBbY29udGV4dF09XCJjb250ZXh0XCIgW3ZpZXdDb250ZXh0XT1cInZpZXdDb250ZXh0XCI+PC9zbGF0ZS1jaGlsZHJlbj5cbjxzbGF0ZS1zdHJpbmctdGVtcGxhdGUgI3RlbXBsYXRlQ29tcG9uZW50Pjwvc2xhdGUtc3RyaW5nLXRlbXBsYXRlPiJdfQ==
|