@magic-xpa/engine 4.900.0-dev491.7 → 4.901.0-ang15-dev491.310
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/src/ClientManager.mjs +56 -15
- package/esm2020/src/CurrentClientVersion.mjs +2 -2
- package/esm2020/src/bridge/MagicBridge.mjs +3 -3
- package/esm2020/src/commands/ClientToServer/DataviewCommand.mjs +6 -6
- package/esm2020/src/commands/ClientToServer/EvaluateCommand.mjs +4 -4
- package/esm2020/src/commands/ClientToServer/EventCommand.mjs +8 -8
- package/esm2020/src/commands/ClientToServer/ExecOperCommand.mjs +4 -4
- package/esm2020/src/commands/ClientToServer/IniputForceWriteCommand.mjs +5 -5
- package/esm2020/src/commands/ClientToServer/RecomputeCommand.mjs +7 -7
- package/esm2020/src/commands/ClientToServer/TransactionCommand.mjs +6 -6
- package/esm2020/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +8 -8
- package/esm2020/src/commands/ServerToClient/ResultCommand.mjs +7 -7
- package/esm2020/src/data/DataView.mjs +34 -34
- package/esm2020/src/data/DataviewManager.mjs +7 -7
- package/esm2020/src/data/Field.mjs +3 -2
- package/esm2020/src/data/Record.mjs +10 -10
- package/esm2020/src/data/TaskTransactionManager.mjs +4 -4
- package/esm2020/src/data/XMLBasedDcValuesBuilder.mjs +5 -5
- package/esm2020/src/env/Environment.mjs +7 -7
- package/esm2020/src/env/LanguageData.mjs +10 -5
- package/esm2020/src/event/EventsManager.mjs +2 -2
- package/esm2020/src/event/RunTimeEvent.mjs +16 -16
- package/esm2020/src/exp/ExpressionEvaluator.mjs +2 -2
- package/esm2020/src/gui/FormsTable.mjs +8 -8
- package/esm2020/src/gui/MgControl.mjs +12 -11
- package/esm2020/src/gui/MgForm.mjs +4 -22
- package/esm2020/src/http/HttpManager.mjs +8 -8
- package/esm2020/src/remote/RemoteCommandsProcessor.mjs +22 -22
- package/esm2020/src/rt/DataviewHeaderBase.mjs +16 -16
- package/esm2020/src/rt/Operation.mjs +3 -3
- package/esm2020/src/rt/RecomputeTable.mjs +12 -4
- package/esm2020/src/rt/RemoteDataviewHeader.mjs +10 -7
- package/esm2020/src/security/UserDetails.mjs +12 -12
- package/esm2020/src/tasks/MGData.mjs +4 -4
- package/esm2020/src/tasks/RCTimer.mjs +10 -10
- package/esm2020/src/tasks/RemoteTaskService.mjs +3 -3
- package/esm2020/src/tasks/Task.mjs +56 -48
- package/esm2020/src/util/PrmMap.mjs +5 -5
- package/esm2020/src/util/ReturnResult.mjs +7 -7
- package/esm2020/src/util/Scrambler.mjs +3 -2
- package/esm2020/src/util/cookie.service.mjs +2 -2
- package/fesm2015/magic-xpa-engine.mjs +375 -325
- package/fesm2015/magic-xpa-engine.mjs.map +1 -1
- package/fesm2020/magic-xpa-engine.mjs +368 -318
- package/fesm2020/magic-xpa-engine.mjs.map +1 -1
- package/package.json +6 -6
- package/src/ClientManager.d.ts +2 -1
- package/src/bridge/MagicBridge.d.ts +1 -1
- package/src/gui/MgForm.d.ts +1 -3
- package/src/tasks/RemoteTaskService.d.ts +1 -1
- package/src/tasks/Task.d.ts +1 -1
- package/magic-xpa-engine.d.ts +0 -2
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
import { DataviewManagerBase } from "./DataviewManagerBase";
|
|
2
2
|
import { RemoteDataviewManager } from "../remote/RemoteDataviewManager";
|
|
3
3
|
export class DataviewManager extends DataviewManagerBase {
|
|
4
|
-
constructor(task) {
|
|
5
|
-
super(task);
|
|
6
|
-
this.RemoteDataviewManager = null;
|
|
7
|
-
this.HasRemoteData = true;
|
|
8
|
-
this.RemoteDataviewManager = new RemoteDataviewManager(task);
|
|
9
|
-
}
|
|
10
4
|
get TaskService() {
|
|
11
5
|
return this.Task.TaskService;
|
|
12
6
|
}
|
|
@@ -21,8 +15,14 @@ export class DataviewManager extends DataviewManagerBase {
|
|
|
21
15
|
get VirtualDataviewManager() {
|
|
22
16
|
return this.TaskService.GetDataviewManagerForVirtuals(this.Task);
|
|
23
17
|
}
|
|
18
|
+
constructor(task) {
|
|
19
|
+
super(task);
|
|
20
|
+
this.RemoteDataviewManager = null;
|
|
21
|
+
this.HasRemoteData = true;
|
|
22
|
+
this.RemoteDataviewManager = new RemoteDataviewManager(task);
|
|
23
|
+
}
|
|
24
24
|
async Execute(command) {
|
|
25
25
|
return await this.CurrentDataviewManager.Execute(command);
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YXZpZXdNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy9kYXRhL0RhdGF2aWV3TWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQVF0RSxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxtQkFBbUI7SUFJdEQsSUFBWSxXQUFXO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksc0JBQXNCO1FBQ3hCLElBQUksTUFBMkIsQ0FBQztRQUNoQyxJQUFJLElBQUksQ0FBQyxhQUFhO1lBQ3BCLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7O1lBRXBDLE1BQU0sR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUM7UUFFdkMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELElBQVksc0JBQXNCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQU1ELFlBQVksSUFBVTtRQUNwQixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUExQmQsMEJBQXFCLEdBQTBCLElBQUksQ0FBQztRQUNwRCxrQkFBYSxHQUFZLElBQUksQ0FBQztRQTBCNUIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBdUI7UUFDbEMsT0FBTyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEYXRhdmlld01hbmFnZXJCYXNlfSBmcm9tIFwiLi9EYXRhdmlld01hbmFnZXJCYXNlXCI7XHJcbmltcG9ydCB7VGFza1NlcnZpY2VCYXNlfSBmcm9tIFwiLi4vdGFza3MvVGFza1NlcnZpY2VCYXNlXCI7XHJcbmltcG9ydCB7UmVtb3RlRGF0YXZpZXdNYW5hZ2VyfSBmcm9tIFwiLi4vcmVtb3RlL1JlbW90ZURhdGF2aWV3TWFuYWdlclwiO1xyXG5pbXBvcnQge0lDbGllbnRDb21tYW5kfSBmcm9tIFwiLi4vY29tbWFuZHMvSUNsaWVudENvbW1hbmRcIjtcclxuaW1wb3J0IHtUYXNrfSBmcm9tIFwiLi4vdGFza3MvVGFza1wiO1xyXG5pbXBvcnQge1JldHVyblJlc3VsdH0gZnJvbSBcIi4uL3V0aWwvUmV0dXJuUmVzdWx0XCI7XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyBkYXRhdmlldyBtYW5hZ2VyIG9mIHRoZSB0YXNrXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBEYXRhdmlld01hbmFnZXIgZXh0ZW5kcyBEYXRhdmlld01hbmFnZXJCYXNlIHtcclxuICBSZW1vdGVEYXRhdmlld01hbmFnZXI6IFJlbW90ZURhdGF2aWV3TWFuYWdlciA9IG51bGw7XHJcbiAgSGFzUmVtb3RlRGF0YTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHByaXZhdGUgZ2V0IFRhc2tTZXJ2aWNlKCk6IFRhc2tTZXJ2aWNlQmFzZSB7XHJcbiAgICByZXR1cm4gdGhpcy5UYXNrLlRhc2tTZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IEN1cnJlbnREYXRhdmlld01hbmFnZXIoKTogRGF0YXZpZXdNYW5hZ2VyQmFzZSB7XHJcbiAgICBsZXQgcmVzdWx0OiBEYXRhdmlld01hbmFnZXJCYXNlO1xyXG4gICAgaWYgKHRoaXMuSGFzUmVtb3RlRGF0YSlcclxuICAgICAgcmVzdWx0ID0gdGhpcy5SZW1vdGVEYXRhdmlld01hbmFnZXI7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJlc3VsdCA9IHRoaXMuVmlydHVhbERhdGF2aWV3TWFuYWdlcjtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXQgVmlydHVhbERhdGF2aWV3TWFuYWdlcigpOiBEYXRhdmlld01hbmFnZXJCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLlRhc2tTZXJ2aWNlLkdldERhdGF2aWV3TWFuYWdlckZvclZpcnR1YWxzKHRoaXMuVGFzayk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIENUT1JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRhc2tcIj48L3BhcmFtPlxyXG4gIGNvbnN0cnVjdG9yKHRhc2s6IFRhc2spIHtcclxuICAgIHN1cGVyKHRhc2spO1xyXG4gICAgdGhpcy5SZW1vdGVEYXRhdmlld01hbmFnZXIgPSBuZXcgUmVtb3RlRGF0YXZpZXdNYW5hZ2VyKHRhc2spO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgRXhlY3V0ZShjb21tYW5kOiBJQ2xpZW50Q29tbWFuZCk6IFByb21pc2U8UmV0dXJuUmVzdWx0PiB7XHJcbiAgICAgcmV0dXJuIGF3YWl0IHRoaXMuQ3VycmVudERhdGF2aWV3TWFuYWdlci5FeGVjdXRlKGNvbW1hbmQpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -118,7 +118,8 @@ export class Field extends FieldBase {
|
|
|
118
118
|
}
|
|
119
119
|
break;
|
|
120
120
|
case ConstInterface.MG_ATTR_CHACHED_FLD_ID:
|
|
121
|
-
|
|
121
|
+
if (data[0] != "")
|
|
122
|
+
this.CacheTableFldIdx = NNumber.Parse(data[1]);
|
|
122
123
|
break;
|
|
123
124
|
case ConstInterface.MG_ATTR_LOCATE:
|
|
124
125
|
this.Locate = new Boundary(this.getTask(), NNumber.Parse(data[1]), NNumber.Parse(data[0]), this.getType(), this.getSize(), this.CacheTableFldIdx);
|
|
@@ -642,4 +643,4 @@ Field.LEAVE_FLAGS = false;
|
|
|
642
643
|
Field.NUM0 = null;
|
|
643
644
|
Field.NUM1 = null;
|
|
644
645
|
Field._variableChangeEvts = new List();
|
|
645
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL2RhdGEvRmllbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLG9CQUFvQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN0SCxPQUFPLEVBQ0wsU0FBUyxFQUNULGlCQUFpQixFQUNqQixNQUFNLEVBQ04sWUFBWSxFQUNaLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLGVBQWUsRUFDZixZQUFZLEVBQ1osU0FBUyxFQUNWLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLFFBQVEsRUFDUixnQkFBZ0IsRUFDaEIsTUFBTSxFQUNOLFFBQVEsRUFFUixRQUFRLEVBQ1IsR0FBRyxFQUNILFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUcvRCxPQUFPLEVBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDNUQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFakQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFaEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFB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LEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFLRCxJQUFJLHlCQUF5QjtRQUMzQixPQUFPLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFlLElBQUksQ0FBQyxTQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELGFBQWEsQ0FBQyxpQkFBMEI7UUFFdEMsSUFBSSxpQkFBaUIsRUFBRTtZQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUNuQixPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7YUFDSTtZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNuQixPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O0FBeGhDTSxpQkFBVyxHQUFZLEtBQUssQ0FBQztBQUVyQixVQUFJLEdBQWEsSUFBSSxDQUFDO0FBQ3RCLFVBQUksR0FBYSxJQUFJLENBQUM7QUFpQ3RCLHlCQUFtQixHQUErQixJQUFJLElBQUksRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBcHBsaWNhdGlvbkV4Y2VwdGlvbiwgRGVidWcsIExpc3QsIE5OdW1iZXIsIE5TdHJpbmcsIFJlZlBhcmFtLCBpc051bGxPclVuZGVmaW5lZH0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7XHJcbiAgQ29uc3RhbnRzLFxyXG4gIEludGVybmFsSW50ZXJmYWNlLFxyXG4gIExvZ2dlcixcclxuICBNc2dJbnRlcmZhY2UsXHJcbiAgUElDSW50ZXJmYWNlLFxyXG4gIFN0b3JhZ2VBdHRyaWJ1dGUsXHJcbiAgU3RyVXRpbCxcclxuICBVdGlsU3RyQnl0ZU1vZGUsXHJcbiAgWE1MQ29uc3RhbnRzLFxyXG4gIFhtbFBhcnNlclxyXG59IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcbmltcG9ydCB7XHJcbiAgQmxvYlR5cGUsXHJcbiAgRGlzcGxheUNvbnZlcnRvcixcclxuICBFeHBWYWwsXHJcbiAgRmllbGREZWYsXHJcbiAgTWdDb250cm9sQmFzZSxcclxuICBOVU1fVFlQRSxcclxuICBQSUMsXHJcbiAgVmVjdG9yVHlwZVxyXG59IGZyb20gXCJAbWFnaWMteHBhL2d1aVwiO1xyXG5cclxuaW1wb3J0IHtZZXNOb0V4cH0gZnJvbSBcIi4uL2V4cC9ZZXNOb0V4cFwiO1xyXG5pbXBvcnQge0V4cHJlc3Npb259IGZyb20gXCIuLi9leHAvRXhwcmVzc2lvblwiO1xyXG5pbXBvcnQge0V4cHJlc3Npb25FdmFsdWF0b3J9IGZyb20gXCIuLi9leHAvRXhwcmVzc2lvbkV2YWx1YXRvclwiO1xyXG5pbXBvcnQge01nRm9ybX0gZnJvbSBcIi4uL2d1aS9NZ0Zvcm1cIjtcclxuaW1wb3J0IHtNZ0NvbnRyb2x9IGZyb20gXCIuLi9ndWkvTWdDb250cm9sXCI7XHJcbmltcG9ydCB7UmVjb21wdXRlLCBSZWNvbXB1dGVfUmNtcEJ5fSBmcm9tIFwiLi4vcnQvUmVjb21wdXRlXCI7XHJcbmltcG9ydCB7Qm91bmRhcnl9IGZyb20gXCIuLi9ydC9Cb3VuZGFyeVwiO1xyXG5pbXBvcnQge0FyZ3VtZW50c0xpc3R9IGZyb20gXCIuLi9ydC9Bcmd1bWVudHNMaXN0XCI7XHJcbmltcG9ydCB7Q29uc3RJbnRlcmZhY2V9IGZyb20gXCIuLi9Db25zdEludGVyZmFjZVwiO1xyXG5pbXBvcnQge1Rhc2t9IGZyb20gXCIuLi90YXNrcy9UYXNrXCI7XHJcbmltcG9ydCB7UnVuVGltZUV2ZW50fSBmcm9tIFwiLi4vZXZlbnQvUnVuVGltZUV2ZW50XCI7XHJcbmltcG9ydCB7UmVjb3JkfSBmcm9tIFwiLi9SZWNvcmRcIjtcclxuaW1wb3J0IHtEYXRhVmlld30gZnJvbSBcIi4vRGF0YVZpZXdcIjtcclxuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tIFwiLi4vZW52L0Vudmlyb25tZW50XCI7XHJcbmltcG9ydCB7IEZpZWxkQmFzZSB9IGZyb20gXCIuL0ZpZWxkQmFzZVwiO1xyXG5pbXBvcnQgeyBMYXN0Rm9jdXNlZE1hbmFnZXIgfSBmcm9tIFwiLi4vcnQvTGFzdEZvY3VzZWRNYW5hZ2VyXCI7XHJcbmltcG9ydCB7IExhbmd1YWdlRGF0YSB9IGZyb20gXCIuLi9lbnYvTGFuZ3VhZ2VEYXRhXCI7XHJcbmltcG9ydCB7IEFjY2Vzc0hlbHBlciB9IGZyb20gXCIuLi9BY2Nlc3NIZWxwZXJcIjtcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgZGF0YSBmb3IgPGZsZGggLi4uPlxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgRmllbGQgZXh0ZW5kcyBGaWVsZEJhc2Uge1xyXG4gIHN0YXRpYyBMRUFWRV9GTEFHUzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBOVU0wOiBOVU1fVFlQRSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgTlVNMTogTlVNX1RZUEUgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIF9saW5rRXhwOiBZZXNOb0V4cCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfcmVjb21wdXRlOiBSZWNvbXB1dGUgPSBudWxsO1xyXG4gIENhY2hlVGFibGVGbGRJZHg6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfY2F1c2VUYWJsZUludmFsaWRhdGlvbjogYm9vbGVhbiA9IGZhbHNlOyAvLyBjaGFuZ2UgaW4gdGhpcyBmaWVsZCB3aWxsIGNhdXNlIGludmFsaWRhdGlvbiBvZiBhbGwgcm93cyBpbiB0YWJsZVxyXG4gIHByaXZhdGUgX2Zvcm06IE1nRm9ybSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfaGFzQ2hhbmdlRXZlbnQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gaWYgVFJVRSwgdGhlcmUgaXMgYSBoYW5kbGVyIHRvIHJ1biB3aGVuIHRoaXMgZmllbGQgaXMgdXBkYXRlZFxyXG4gIHByaXZhdGUgX2hhc1pvb21IYW5kbGVyOiBib29sZWFuID0gZmFsc2U7IC8vIGlmIFRSVUUsIHRoZXJlIGlzIGEgem9vbSBoYW5kbGVyIGZvciB0aGlzIGZpZWxkXHJcbiAgcHJpdmF0ZSBfaW5FdmFsUHJvY2VzczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2luaXRFeHA6IEV4cHJlc3Npb24gPSBudWxsO1xyXG4gIHByaXZhdGUgX2ludmFsaWRWYWx1ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBfaXNMaW5rRmxkOiBib29sZWFuID0gZmFsc2U7IC8vIGlmIFRSVUUsIGl0IG1lYW5zIHRoYXQgdGhlIGZpZWxkIGJlbG9uZ3MgdG8gYSBsaW5rXHJcbiAgcHJpdmF0ZSBfaXNWaXJ0dWFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfZGF0YXZpZXdIZWFkZXJJZDogbnVtYmVyID0gLTE7ICAvLyBtZW1iZXJzIHJlbGF0ZWQgdG8gdGFibGUgY2FjaGVcclxuICBwcml2YXRlIF9saW5rQ3JlYXRlOiBib29sZWFuID0gZmFsc2U7IC8vIElmIHRydWUgdGhlbiBpdCdzIGEgcmVhbCBmaWVsZCB3aGljaCBiZWxvbmdzIHRvIGxpbmsgY3JlYXRlLlxyXG4gIExvY2F0ZTogQm91bmRhcnkgPSBudWxsO1xyXG4gIFJhbmdlOiBCb3VuZGFyeSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfaXNQYXJhbTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2lzRXhwb3NlZFJvdXRlUGFyYW06IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9pc0V4cG9zZWRUb0NsaWVudDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBfcHJldklzTnVsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3ByZXZWYWx1ZTogc3RyaW5nID0gbnVsbDtcclxuICBwcml2YXRlIF90YWJsZU5hbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfaW5kZXhJblRhYmxlOiBudW1iZXIgPSAtMTtcclxuXHJcbiAgcHJpdmF0ZSBfdmlyQXNSZWFsOiBib29sZWFuID0gZmFsc2U7IC8vIElmIHRydWUgdGhlbiBhIHZpcnR1YWwgZmllbGQgaXMgY29tcHV0ZWQgYXMgcmVhbCAobmVlZGVkIGZvciBsaW5rIHJldCB2YWx1ZSlcclxuICBwcm90ZWN0ZWQgX3ZhbDogc3RyaW5nID0gbnVsbDtcclxuICBwcml2YXRlIG1vZGlmaWVkQXRMZWFzdE9uY2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9pc051bGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9jbGVhclZlY3RvclR5cGU6IGJvb2xlYW4gPSB0cnVlOyAvLyBkbyB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgdmVjdG9yIG9iamVjdFxyXG4gIHByaXZhdGUgX3ZlY3RvclR5cGU6IFZlY3RvclR5cGUgPSBudWxsOyAvLyB0aGUgdmVjdG9yIHJlcHJlc2VudGF0aW9uXHJcblxyXG4gIHByaXZhdGUgc3RhdGljIF92YXJpYWJsZUNoYW5nZUV2dHM6IExpc3Q8RmllbGQgfCBSdW5UaW1lRXZlbnQ+ID0gbmV3IExpc3QoKTsgLy8gZm9yIFZhcmlhYmxlIENoYW5nZSBldmVudCBleGVjdXRpb24sIHByZXZpb3VzbHkgdXNlZCB2aWEgZ2V0UGVuZGluZ1ZhckNoYW5nZUV2ZW50c1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ1RPUlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkYXRhdmlld1wiPmEgcmVmZXJlbmNlIHRvIHRoZSBkYXRhdmlldzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZFwiPmNvdW50ZXIgb2YgdGhlIGZpZWxkIGluIEZpZWxkVGFibGU8L3BhcmFtPlxyXG4gIGNvbnN0cnVjdG9yKGRhdGF2aWV3OiBEYXRhVmlldywgaWQ6IG51bWJlcikge1xyXG4gICAgc3VwZXIoaWQpO1xyXG4gICAgaWYgKEZpZWxkLk5VTTAgPT09IG51bGwpIHtcclxuICAgICAgRmllbGQuTlVNMCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgICBGaWVsZC5OVU0xID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICAgIEZpZWxkLk5VTTAuTlVNXzRfTE9ORygwKTtcclxuICAgICAgRmllbGQuTlVNMS5OVU1fNF9MT05HKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2RhdGF2aWV3ID0gZGF0YXZpZXc7XHJcbiAgICB0aGlzLl9saW5rRXhwID0gbmV3IFllc05vRXhwKGZhbHNlKTtcclxuICAgIEZpZWxkRGVmLl9kZWZhdWx0X2RhdGUgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmRpc3AybWcoUElDSW50ZXJmYWNlLkRFRkFVTFRfREFURSxcclxuICAgICAgbmV3IFBJQyhcIjZcIiwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDLCBzdXBlci5nZXRUYXNrKCkuZ2V0Q29tcElkeCgpKSxcclxuICAgICAgc3VwZXIuZ2V0VGFzaygpLmdldENvbXBJZHgoKSxcclxuICAgICAgQmxvYlR5cGUuQ09OVEVOVF9UWVBFX1VOS05PV04pO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldCBWaXJBc1JlYWwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmlyQXNSZWFsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IElzVmlydHVhbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc1ZpcnR1YWw7XHJcbiAgfVxyXG5cclxuICBnZXQgSXNFeHBvc2VkUm91dGVQYXJhbSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc0V4cG9zZWRSb3V0ZVBhcmFtO1xyXG4gIH1cclxuXHJcbiAgZ2V0IElzRXhwb3NlZFRvQ2xpZW50KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzRXhwb3NlZFRvQ2xpZW50O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBpbmRleCBpbiB0YWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0IEluZGV4SW5UYWJsZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luZGV4SW5UYWJsZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIGZpZWxkIGF0dHJpYnV0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJvdGVjdGVkIHNldEF0dHJpYnV0ZShhdHRyaWJ1dGU6IHN0cmluZywgdmFsdWVTdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGlzVGFnUHJvY2Vzc2VkOiBib29sZWFuID0gc3VwZXIuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWVTdHIpO1xyXG4gICAgaWYgKCFpc1RhZ1Byb2Nlc3NlZCkge1xyXG4gICAgICBsZXQgZGF0YTogc3RyaW5nW10gPSBTdHJVdGlsLnRva2VuaXplKHZhbHVlU3RyLCBcIixcIik7XHJcbiAgICAgIGlzVGFnUHJvY2Vzc2VkID0gdHJ1ZTtcclxuICAgICAgc3dpdGNoIChhdHRyaWJ1dGUpIHtcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVklSVFVBTDpcclxuICAgICAgICAgIHRoaXMuX2lzVmlydHVhbCA9IChYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKSAhPT0gMCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfUEFSQU06XHJcbiAgICAgICAgICB0aGlzLl9pc1BhcmFtID0gKFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpICE9PSAwKTtcclxuICAgICAgICAgIGlmICghdGhpcy5faXNWaXJ0dWFsICYmIHRoaXMuX2lzUGFyYW0pXHJcbiAgICAgICAgICAvLyBwb3NzaWJsZSBlcnJvciAtIHdlIHJlbHkgb24gdGhlIG9yZGVyIG9mIFhNTCBhdHRyaWJ1dGVzXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcclxuICAgICAgICAgICAgICBcImluIEZpZWxkLmluaXRFbGVtZW50cygpOiBub24gdmlydHVhbCBmaWVsZCBpcyBkZWZpbmVkIGFzIGEgcGFyYW1ldGVyXCIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0VYUE9TRURfUk9VVEVfUEFSQU1TOlxyXG4gICAgICAgICAgdGhpcy5faXNFeHBvc2VkUm91dGVQYXJhbSA9IChYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKSAhPT0gMCk7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuX2lzUGFyYW0gJiYgdGhpcy5faXNFeHBvc2VkUm91dGVQYXJhbSlcclxuICAgICAgICAgIC8vIHBvc3NpYmxlIGVycm9yIC0gd2UgcmVseSBvbiB0aGUgb3JkZXIgb2YgWE1MIGF0dHJpYnV0ZXNcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFxyXG4gICAgICAgICAgICAgIFwiaW4gRmllbGQuaW5pdEVsZW1lbnRzKCk6IG5vbiBwYXJhbWV0ZXIgZmllbGQgaXMgZGVmaW5lZCBhcyBhIGV4cG9zZWQgcm91dGUgcGFyYW1ldGVyXCIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0VYUE9TRURfVE9fQ0xJRU5UOlxyXG4gICAgICAgICAgLy8gVGhlIGZsYWcgd2FzIHNlcmlhbGl6ZWQgb25seSBmb3Igc2VydmVyIHZhcmlhYmxlIChleHBvc2UgdG8gY2xpZW50ID0gMCApXHJcbiAgICAgICAgICBpZiAoWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cikgPT0gMClcclxuICAgICAgICAgICAgdGhpcy5faXNFeHBvc2VkVG9DbGllbnQgPSBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9WSVJfQVNfUkVBTDpcclxuICAgICAgICAgIHRoaXMuX3ZpckFzUmVhbCA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9MTktfQ1JFQVRFOlxyXG4gICAgICAgICAgdGhpcy5fbGlua0NyZWF0ZSA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9MTktFWFA6XHJcbiAgICAgICAgICB0aGlzLl9saW5rRXhwLnNldFZhbCg8VGFzaz4odGhpcy5nZXRUYXNrKCkpLCB2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVEFCTEVfTkFNRTpcclxuICAgICAgICAgIHRoaXMuX3RhYmxlTmFtZSA9IFhtbFBhcnNlci51bmVzY2FwZSh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSU5ERVhfSU5fVEFCTEU6XHJcbiAgICAgICAgICB0aGlzLl9pbmRleEluVGFibGUgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9JTklUOlxyXG4gICAgICAgICAgbGV0IGV4cE51bTogbnVtYmVyID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICB0aGlzLl9pbml0RXhwID0gKDxUYXNrPnRoaXMuZ2V0VGFzaygpKS5nZXRFeHBCeUlkKGV4cE51bSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX05BTUU6IHtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NIQUNIRURfRkxEX0lEOlxyXG4gICAgICAgICAgLy8gTUdfQVRUUl9DSEFDSEVEX0ZMRCBpcyBpbiB0aGUgZm9ybWF0IG9mIGNhY2hlZFRhYmxlSWQsZmxkXHJcbiAgICAgICAgICB0aGlzLkNhY2hlVGFibGVGbGRJZHggPSBOTnVtYmVyLlBhcnNlKGRhdGFbMV0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0xPQ0FURTpcclxuICAgICAgICAgIC8vIGxvY2F0ZSBpcyBpbiB0aGUgZm9ybWF0IG9mIG1heCxtaW4gZXhwcmVzc2lvbiBudW0gKC0xIGlmIG5vbiBleGlzdHMpXHJcbiAgICAgICAgICB0aGlzLkxvY2F0ZSA9IG5ldyBCb3VuZGFyeSg8VGFzaz50aGlzLmdldFRhc2soKSwgTk51bWJlci5QYXJzZShkYXRhWzFdKSwgTk51bWJlci5QYXJzZShkYXRhWzBdKSwgdGhpcy5nZXRUeXBlKCksIHRoaXMuZ2V0U2l6ZSgpLCB0aGlzLkNhY2hlVGFibGVGbGRJZHgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1JBTkdFOlxyXG4gICAgICAgICAgLy8gcmFuZ2UgaXMgaW4gdGhlIGZvcm1hdCBvZiBtYXgsbWluIGV4cHJlc3Npb24gbnVtICgtMSBpZiBub24gZXhpc3RzKVxyXG4gICAgICAgICAgdGhpcy5SYW5nZSA9IG5ldyBCb3VuZGFyeSg8VGFzaz50aGlzLmdldFRhc2soKSwgTk51bWJlci5QYXJzZShkYXRhWzFdKSwgTk51bWJlci5QYXJzZShkYXRhWzBdKSwgdGhpcy5nZXRUeXBlKCksIHRoaXMuZ2V0U2l6ZSgpLCB0aGlzLkNhY2hlVGFibGVGbGRJZHgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0xJTks6XHJcbiAgICAgICAgICB0aGlzLl9kYXRhdmlld0hlYWRlcklkID0gTk51bWJlci5QYXJzZSh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSVNfTElOS19GSUVMRDpcclxuICAgICAgICAgIHRoaXMuX2lzTGlua0ZsZCA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBpc1RhZ1Byb2Nlc3NlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKE5TdHJpbmcuRm9ybWF0KFwiVW5yZWNvZ25pemVkIGF0dHJpYnV0ZTogJ3swfSdcIiwgYXR0cmlidXRlKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzVGFnUHJvY2Vzc2VkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCBhIHJlZmVyZW5jZSB0byB0aGUgUmVjb21wdXRlIE9iamVjdCBvZiB0aGlzIGZpZWxkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlY29tcFJlZlwiPnJlZmVyZW5jZSB0byBSZWNvbXB1dGUgT2JqZWN0PC9wYXJhbT5cclxuICBzZXRSZWNvbXB1dGUocmVjb21wUmVmOiBSZWNvbXB1dGUpOiB2b2lkIHtcclxuICAgIHRoaXMuX3JlY29tcHV0ZSA9IHJlY29tcFJlZjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmVtb3ZlcyB0aGUgc3BlY2lmaWMgc3ViZm9ybSB0YXNrIGZyb20gdGhlIHJlY29tcHV0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3ViZm9ybVRhc2tcIj48L3BhcmFtPlxyXG4gIFJlbW92ZVN1YmZvcm1Gcm9tUmVjb21wdXRlKHN1YmZvcm1UYXNrOiBUYXNrKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fcmVjb21wdXRlICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX3JlY29tcHV0ZS5SZW1vdmVTdWJmb3JtKHN1YmZvcm1UYXNrKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gSW5zZXJ0IHRoZSBzcGVjaWZpYyBzdWJmb3JtIHRhc2sgaW50byB0aGUgZmllbGQgcmVjb21wdXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdWJmb3JtVGFza1wiPjwvcGFyYW0+XHJcbiAgQWRkU3ViZm9ybVJlY29tcHV0ZShzdWJmb3JtVGFzazogVGFzayk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3JlY29tcHV0ZSA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9yZWNvbXB1dGUgPSBuZXcgUmVjb21wdXRlKCk7XHJcbiAgICAgIHRoaXMuX3JlY29tcHV0ZS5UYXNrID0gPFRhc2s+c3VwZXIuZ2V0VGFzaygpO1xyXG4gICAgICB0aGlzLl9yZWNvbXB1dGUuT3duZXJGbGQgPSB0aGlzO1xyXG4gICAgICB0aGlzLl9yZWNvbXB1dGUuUmNtcE1vZGUgPSBSZWNvbXB1dGVfUmNtcEJ5LkNMSUVOVDtcclxuICAgIH1cclxuICAgIHRoaXMuX3JlY29tcHV0ZS5BZGRTdWJmb3JtKHN1YmZvcm1UYXNrKTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IGEgcmVmZXJlbmNlIHRvIGEgY29udHJvbCBhdHRhY2hlZCB0byB0aGlzIGZpZWxkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxcIj50aGUgY29udHJvbCB3aGljaCBpcyBhdHRhY2hlZCB0byB0aGlzIGZpZWxkPC9wYXJhbT5cclxuICBTZXRDb250cm9sKGN0cmw6IE1nQ29udHJvbEJhc2UpOiB2b2lkIHtcclxuICAgIHN1cGVyLlNldENvbnRyb2woY3RybCk7XHJcblxyXG4gICAgaWYgKHRoaXMuX2lzVmlydHVhbCAmJiBjdHJsLklzUmVwZWF0YWJsZSAmJiB0aGlzLl9pbml0RXhwID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX2NhdXNlVGFibGVJbnZhbGlkYXRpb24gPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNvbXB1dGUgdGhlIGZpZWxkIGluaXQgZXhwcmVzc2lvbiBvciBnZXQgaXRzIHZhbHVlIGZyb20gdGhlIGRhdGF2aWV3LCBzZXRcclxuICAvLy8gICB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIChhbmQgdXBkYXRlIHRoZSBkaXNwbGF5KVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZWNvbXB1dGVcIj50ZWxscyB0aGUgY29tcHV0ZSB0byBzdGFydCB0aGUgcmVjb21wdXRlIGNoYWluIGFuZCByZWNvbXB1dGVcclxuICAvLy8gICB0aGUgZXhwcmVzc2lvbiBvZiB0aGlzIGZpZWxkIChpZiBpdCBpcyByZWFsKVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIHB1YmxpYyBhc3luYyBjb21wdXRlKHJlY29tcHV0ZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHJlc3VsdDogUmVmUGFyYW08c3RyaW5nPiA9IG5ldyBSZWZQYXJhbSh0aGlzLmdldFZhbHVlKGZhbHNlKSk7XHJcbiAgICBsZXQgaXNOdWxsRmxkOiBSZWZQYXJhbTxib29sZWFuPiA9IG5ldyBSZWZQYXJhbSh0aGlzLl9pc051bGwpO1xyXG4gICAgbGV0IHJlYyA9ICg8RGF0YVZpZXc+dGhpcy5fZGF0YXZpZXcpLmdldEN1cnJSZWMoKTtcclxuICAgIGxldCB0YXNrID0gPFRhc2s+c3VwZXIuZ2V0VGFzaygpO1xyXG5cclxuICAgIGxldCB6ZXJvUmVhbDogYm9vbGVhbiA9IHRoaXMuX2xpbmtDcmVhdGUgJiYgcmVjLkluQ29tcHV0ZSAmJiAhcmVjb21wdXRlICYmIHRhc2suZ2V0TW9kZSgpID09PSBDb25zdGFudHMuVEFTS19NT0RFX0NSRUFURTtcclxuICAgIC8vIFFDUiAjOTk5MDI0IC0gemVybyBsbmsgY3JlYXRlIHZhbHVlcyBkdXJpbmcgY29tcHV0ZVxyXG5cclxuICAgIGlmICh0aGlzLl9mb3JtID09IG51bGwpXHJcbiAgICAgIHRoaXMuX2Zvcm0gPSA8TWdGb3JtPnRhc2suZ2V0Rm9ybSgpO1xyXG5cclxuICAgIC8vIG5vIG5lZWQgdG8gemVybyByZWFscyBpZiB3ZSBhcmUgcmVjb3ZlcmluZyBhIHJlY29yZC5cclxuICAgIGlmICgodGhpcy5fZm9ybSAhPSBudWxsICYmIHRoaXMuX2Zvcm0uSW5SZXN0b3JlKSB8fCBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5HZXRTdG9wRXhlY3V0aW9uRmxhZygpKVxyXG4gICAgICB6ZXJvUmVhbCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBydEV2dDogUnVuVGltZUV2ZW50ID0gQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuZ2V0TGFzdFJ0RXZlbnQoKTtcclxuICAgIGxldCBjb21wdXRlT25DYW5jZWxFdmVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgaWYgKHJ0RXZ0ICE9IG51bGwpXHJcbiAgICAgIGNvbXB1dGVPbkNhbmNlbEV2ZW50ID0gcnRFdnQuZ2V0SW50ZXJuYWxDb2RlKCkgPT09IEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DQU5DRUw7XHJcblxyXG4gICAgLy8gdmlydHVhbCBhcyByZWFsIGlzIGVzcGVjaWFsbHkgZm9yIGZpZWxkcyB3aGljaCBhcmUgdXNlZCBhcyBhIFwicmV0dXJuIHZhbHVlXCJcclxuICAgIC8vIG9mIGEgbGluay4gVGhlaXIgdmFsdWUgaXMgcmV0dXJuZWQgYnkgdGhlIGxpbmsgcmVzdWx0IGFuZCBub3QgYnkgdGhlIGluaXQgZXhwcmVzc2lvbi5cclxuICAgIC8vIHdoZW4gdGhlIGZvcm0gaXMgcmVzdG9yaW5nIHRoZSBjdXJyIHJvdyB3ZSBzaG91bGRuJ3QgY29tcHV0ZSB0aGUgaW5pdCBleHByZXNzaW9uXHJcbiAgICAvLyBidXQgdG8gdXNlIHRoZSB2YWx1ZSBmcm9tIHRoZSByZWNvcmQgKGJ5IGdldFZhbHVlKVxyXG4gICAgLy8gUUNSIzkyNjc1ODogV2hlbiBUYXNrJ3MgbW9kZSBpcyBDcmVhdGUsIGluaXQgZm9yIHJlYWwgZmllbGQgc2hvdWxkIGJlIGV2YWx1YXRlZCBvbmx5IHdoZW4gaXQgY29tZXMgZm9yIGNhbmNlbCBldmVudChsYXN0IHJ1bnRpbWUgZXZlbnQgaXMgY2FuY2VsIGV2ZW50KS5cclxuICAgIC8vIFdoaWxlIGNyZWF0aW5nIGEgbmV3IHJlY29yZCwgaW5pdCB3aWxsIGJlIGV2YWx1YXRlZCBiZWNhdXNlIG9mIGNvbmRpdGlvbiByZWMuaXNOZXdSZWMoKS4gKEl0IGlzIHRoZSByZWZpeCBvZiBRQ1IjOTk0MDcyKVxyXG4gICAgaWYgKCF0aGlzLl92aXJBc1JlYWwgJiYgKHRoaXMuX2Zvcm0gPT0gbnVsbCB8fCAhdGhpcy5fZm9ybS5JblJlc3RvcmUpICYmXHJcbiAgICAgICgodGhpcy5faXNWaXJ0dWFsIHx8ICh0YXNrLmdldE1vZGUoKSA9PT0gQ29uc3RhbnRzLlRBU0tfTU9ERV9DUkVBVEUgJiYgY29tcHV0ZU9uQ2FuY2VsRXZlbnQpKSB8fCByZWNvbXB1dGUgfHxcclxuICAgICAgICB6ZXJvUmVhbCB8fCByZWMuaXNOZXdSZWMoKSAmJiAhcmVjLmlzQ29tcHV0ZWQoKSkpIHtcclxuICAgICAgaWYgKCF0YXNrLkRhdGFWaWV3LmlzRW1wdHlEYXRhdmlldygpIHx8ICh0YXNrLkRhdGFWaWV3LmlzRW1wdHlEYXRhdmlldygpICYmICF0aGlzLlBhcnRPZkRhdGF2aWV3KSkge1xyXG4gICAgICAgIC8vIFFDUiAjNzc1NTA4OiBmb3IgZGF0YXZpZXdzLCB3aGljaCBhcmUgY29tcHV0ZWQgYnkgdGhlIHNlcnZlciwgcHJldmVudFxyXG4gICAgICAgIC8vIGNvbXB1dGluZyB0aGUgaW5pdCBleHByZXNzaW9uIHdoaWxlIGluIGNvbXB1dGUgb2YgdGhlIHJlY29yZCBiZWNhdXNlIHRoZVxyXG4gICAgICAgIC8vIHNlcnZlciBoYXZlIGFscmVhZHkgZG9uZSBpdFxyXG4gICAgICAgIGlmICgodGhpcy5faXNWaXJ0dWFsIHx8IHRhc2suZ2V0TW9kZSgpID09PSBDb25zdGFudHMuVEFTS19NT0RFX0NSRUFURSkgfHwgKDxEYXRhVmlldz50aGlzLl9kYXRhdmlldykuY29tcHV0ZUJ5Q2xpZW50KCkgfHxcclxuICAgICAgICAgICFyZWMuSW5Db21wdXRlIHx8IHplcm9SZWFsIHx8IHJlYy5sYXRlQ29tcHV0ZSgpKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5faW5pdEV4cCAhPSBudWxsKSB7XHJcblxyXG5cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5FdmFsdWF0ZUluaXRFeHByZXNzaW9uKHJlc3VsdCwgaXNOdWxsRmxkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHplcm9SZWFsKVxyXG4gICAgICAgICAgICByZXN1bHQudmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX2ludmFsaWRWYWx1ZSkge1xyXG4gICAgICB0aGlzLl9wcmV2VmFsdWUgPSByZXN1bHQudmFsdWU7XHJcbiAgICAgIHRoaXMuX3ByZXZJc051bGwgPSBpc051bGxGbGQudmFsdWU7XHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLnNldFZhbHVlKHJlc3VsdC52YWx1ZSwgaXNOdWxsRmxkLnZhbHVlLCByZWNvbXB1dGUsIGZhbHNlLCByZWNvbXB1dGUgJiYgIXRoaXMuX2lzVmlydHVhbCwgZmFsc2UsIGZhbHNlKTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGV2YWx1YXRlIGluaXQgZXhwcmVzc2lvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzdWx0XCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpc051bGxGbGRcIj48L3BhcmFtPlxyXG4gIGFzeW5jIEV2YWx1YXRlSW5pdEV4cHJlc3Npb24ocmVzdWx0OiBSZWZQYXJhbTxzdHJpbmc+LCBpc051bGxGbGQ6IFJlZlBhcmFtPGJvb2xlYW4+KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBEZWJ1Zy5Bc3NlcnQodGhpcy5faW5pdEV4cCAhPT0gbnVsbCk7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLl9pbkV2YWxQcm9jZXNzID0gdHJ1ZTtcclxuICAgICAgcmVzdWx0LnZhbHVlID0gYXdhaXQgdGhpcy5faW5pdEV4cC5ldmFsdWF0ZVdpdGhSZXN1bHRUeXBlQW5kTGVuZ3RoKHRoaXMuX3R5cGUsIHRoaXMuX3NpemUpO1xyXG4gICAgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgIHRoaXMuX2luRXZhbFByb2Nlc3MgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpc051bGxGbGQudmFsdWUgPSAocmVzdWx0LnZhbHVlID09PSBudWxsKTtcclxuICAgIGlmIChpc051bGxGbGQudmFsdWUgJiYgdGhpcy5OdWxsQWxsb3dlZCkge1xyXG4gICAgICByZXN1bHQudmFsdWUgPSB0aGlzLmdldFZhbHVlKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLy8vXHJcbiAgLy8vLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLy8vIDxwYXJhbSBuYW1lPVwicmVjb21wdXRlXCI+PC9wYXJhbT5cclxuICAvLy8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgLy8gYm9vbCBTaG91bGRSZWNvbXB1dGUoYm9vbCByZWNvbXB1dGUpXHJcbiAgLy8ge1xyXG4gIC8vICAgaWYgKHJlY29tcHV0ZSlcclxuICAvLyAgIHtcclxuICAvLyAgICAgIGJvb2wgY29tcHV0ZWRCeUZldGNoID0gIUlzVmlydHVhbCB8fCBWaXJBc1JlYWw7XHJcbiAgLy8gICAgICBpZiAoY29tcHV0ZWRCeUZldGNoKVxyXG4gIC8vICAgICAge1xyXG4gIC8vICAgICAgICAgVGFzayB0YXNrID0gKFRhc2spZ2V0VGFzaygpO1xyXG4gIC8vICAgICAgICAgRGF0YXZpZXdIZWFkZXJCYXNlIGhlYWRlciA9IHRhc2suZ2V0RGF0YXZpZXdIZWFkZXJzKCkuZ2V0RGF0YXZpZXdIZWFkZXJCeUlkKF9kYXRhdmlld0hlYWRlcklkKTtcclxuICAvLyAgICAgICAgIC8vbG9jYWwgZGF0YXZhc2UgYWxyZWFkeSBjb21wdXRlZCB0aGUgcmVjb3JkIGFzIHNlcnZlciBkb2VzXHJcbiAgLy8gICAgICAgICBpZiAoaGVhZGVyIGlzIExvY2FsRGF0YXZpZXdIZWFkZXIpXHJcbiAgLy8gICAgICAgICB7XHJcbiAgLy8gICAgICAgICAgICAgdmFyIHJlYyA9ICgoRGF0YVZpZXcpX2RhdGF2aWV3KS5nZXRDdXJyUmVjKCk7XHJcbiAgLy8gICAgICAgICAgICAgcmV0dXJuICFyZWMuSW5Db21wdXRlO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICAgcmV0dXJuIHJlY29tcHV0ZTtcclxuICAvLyB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBmcm9tIHRoZSBjdXJyZW50IHJlY29yZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjaGVja051bGxBcml0aG1ldGljXCI+aWYgdHJ1ZSB0aGVuIHRoZSBudWxsIGFyaXRobWV0aWMgZW52aXJvbm1lbnRcclxuICAvLy8gICBzZXR0aW5nIGlzIHVzZWQgdG8gcmV0dXJuIG51bGwgd2hlbiBcIm51bGxpZnlcIiBjb21wdXRhdGlvbiBpcyBuZWVkZWRcclxuICAvLy8gPC9wYXJhbT5cclxuICBnZXRWYWx1ZShjaGVja051bGxBcml0aG1ldGljOiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIC8vIGlmIHdlIG5lZWQgdG8gcmV0dXJuIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgZmllbGRcclxuICAgIGlmICgoPFRhc2s+c3VwZXIuZ2V0VGFzaygpKS5nZXRFdmFsT2xkVmFsdWVzKCkpXHJcbiAgICAgIHJldHVybiB0aGlzLmdldE9yaWdpbmFsVmFsdWUoKTtcclxuICAgIGlmICh0aGlzLl9pbnZhbGlkVmFsdWUpXHJcbiAgICAgIHRoaXMudGFrZVZhbEZyb21SZWMoKTtcclxuICAgIGlmICh0aGlzLl9pc051bGwpXHJcbiAgICAgIHRoaXMuX3ZhbCA9IHRoaXMuZ2V0VmFsdWVGb3JOdWxsKGNoZWNrTnVsbEFyaXRobWV0aWMpO1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibmV3VmFsdWVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaXNOdWxsXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgaXNDaGFuZ2VkKG5ld1ZhbHVlOiBzdHJpbmcsIGlzTnVsbDogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ByZXZWYWx1ZSAhPT0gbnVsbCAmJiAoISh0aGlzLl9wcmV2VmFsdWUgPT09IG5ld1ZhbHVlKSB8fCB0aGlzLl9wcmV2SXNOdWxsICE9PSBpc051bGwpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIGJ5IHRha2luZyBpdCBmcm9tIHRoZSBjdXJyZW50IHJlY29yZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgdGFrZVZhbEZyb21SZWMoKTogdm9pZCB7XHJcbiAgICBsZXQgcmVjOiBSZWNvcmQgPSAoPERhdGFWaWV3PnRoaXMuX2RhdGF2aWV3KS5nZXRDdXJyUmVjKCk7XHJcbiAgICBpZiAocmVjICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX3ZhbCA9IHJlYy5HZXRGaWVsZFZhbHVlKHRoaXMuX2lkKTtcclxuICAgICAgdGhpcy5faXNOdWxsID0gcmVjLklzTnVsbCh0aGlzLl9pZCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5faW52YWxpZFZhbHVlKSB7XHJcbiAgICAgIGlmIChyZWMgIT09IG51bGwgJiYgdGhpcy5fY2F1c2VUYWJsZUludmFsaWRhdGlvbiAmJiB0aGlzLmlzQ2hhbmdlZCh0aGlzLl92YWwsIHRoaXMuX2lzTnVsbCkgJiYgdGhpcy5fZm9ybSAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJlYy5zZXRDYXVzZUludmFsaWRhdGlvbih0cnVlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9wcmV2VmFsdWUgPSB0aGlzLl92YWw7XHJcbiAgICAgIHRoaXMuX3ByZXZJc051bGwgPSB0aGlzLl9pc051bGw7XHJcbiAgICAgIHRoaXMuX2ludmFsaWRWYWx1ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gWkVSTyBUSEUgVkVDVE9SIE9CSkVDVFxyXG4gICAgdGhpcy5fdmVjdG9yVHlwZSA9IG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgZmllbGQgd2l0aG91dCB1cGRhdGluZyB0aGUgZmllbGQgdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldE9yaWdpbmFsVmFsdWUoKTogc3RyaW5nIHtcclxuICAgIGxldCBvcmlnaW5hbFJlYzogUmVjb3JkID0gKDxEYXRhVmlldz50aGlzLl9kYXRhdmlldykuZ2V0T3JpZ2luYWxSZWMoKTtcclxuXHJcbiAgICBpZiAob3JpZ2luYWxSZWMuSXNOdWxsKHRoaXMuX2lkKSlcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0TWFnaWNEZWZhdWx0VmFsdWUoKTtcclxuXHJcbiAgICByZXR1cm4gb3JpZ2luYWxSZWMuR2V0RmllbGRWYWx1ZSh0aGlzLl9pZCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgaXMgb3JpZ2luYWwgdmFsdWUgb2YgdGhlIGZpZWxkIHdhcyBudWxsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBpc09yaWdpbmFsVmFsdWVOdWxsKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IG9yaWdpbmFsUmVjOiBSZWNvcmQgPSAoPERhdGFWaWV3PnRoaXMuX2RhdGF2aWV3KS5nZXRPcmlnaW5hbFJlYygpO1xyXG4gICAgcmV0dXJuIG9yaWdpbmFsUmVjLklzTnVsbCh0aGlzLl9pZCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHZhbHVlIGJ5IHJlYyBpZHhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWR4XCI+cmVjb3JkIGlkeDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBnZXRWYWx1ZUJ5UmVjSWR4KGlkeDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCByZWM6IFJlY29yZCA9ICg8RGF0YVZpZXc+dGhpcy5fZGF0YXZpZXcpLmdldFJlY0J5SWR4KGlkeCk7XHJcbiAgICBsZXQgZmllbGRWYWx1ZTogc3RyaW5nID0gcmVjLkdldEZpZWxkVmFsdWUodGhpcy5faWQpO1xyXG4gICAgcmV0dXJuIHJlYy5Jc051bGwodGhpcy5faWQpID8gdGhpcy5nZXRWYWx1ZUZvck51bGwoZmFsc2UpIDogZmllbGRWYWx1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgbW9kaWZpZWRBdExlYXN0T25jZSBmbGFnXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldE1vZGlmaWVkQXRMZWFzdE9uY2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RpZmllZEF0TGVhc3RPbmNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiBudWxsIGlmIHZhbHVlIG9mIGZpZWxkIGZvciB0aGUgcmVjb3JkIGlzIG51bGxcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWR4XCI+cmVjb3JkIGlkeDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBpc051bGxCeVJlY0lkeChpZHg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHJlYzogUmVjb3JkID0gKDxEYXRhVmlldz50aGlzLl9kYXRhdmlldykuZ2V0UmVjQnlJZHgoaWR4KTtcclxuICAgIHJldHVybiByZWMuSXNOdWxsKHRoaXMuX2lkKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRydWUgaWYgZmllbGQncyB2YWx1ZSBmb3IgcmVjb3JkIGlkeCByZWNpZHggZXF1YWxzIHRvIG1nVmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm1nVmFsdWVcIj52YWx1ZSB0byBjb21wYXJlICA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImlzTnVsbEZsZFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidHlwZVwiPnR5cGUgb2YgdmFsdWU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlY0lkeFwiPnJlY0lkeCBvZiB0aGUgcmVjb3JkPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGlzRXF1YWwobWdWYWx1ZTogc3RyaW5nLCBpc051bGxGbGQ6IGJvb2xlYW4sIHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIHJlY0lkeDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVjID0gPFJlY29yZD4oKDxEYXRhVmlldz50aGlzLl9kYXRhdmlldykuZ2V0UmVjQnlJZHgocmVjSWR4KSk7XHJcbiAgICBsZXQgdmFsc0VxdWFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZiAocmVjICE9IG51bGwpIHtcclxuICAgICAgbGV0IGZpZWxkVmFsdWU6IHN0cmluZyA9IHJlYy5HZXRGaWVsZFZhbHVlKHRoaXMuX2lkKTtcclxuICAgICAgbGV0IGZpZWxzSXNOdWxsOiBib29sZWFuID0gcmVjLklzTnVsbCh0aGlzLl9pZCk7XHJcbiAgICAgIHZhbHNFcXVhbCA9IEV4cHJlc3Npb25FdmFsdWF0b3IubWdWYWxzRXF1YWwoZmllbGRWYWx1ZSwgZmllbHNJc051bGwsIHRoaXMuX3R5cGUsIG1nVmFsdWUsIGlzTnVsbEZsZCwgdHlwZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsc0VxdWFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoaXMgZmllbGQgd2hpY2ggc2hvdWxkIGJlIGluc2VydGVkIGludG8gYSBuZXcgcmVjLCB3aGVuIGl0XHJcbiAgLy8vICAgaXMgY3JlYXRlZC4gVGhpcyB3aWxsIHVzdWFsbHkgYmUgdGhlIGZpZWxkJ3MgZGVmYXVsdCB2YWx1ZSwgdW5sZXNzIHRoZXJlIGlzIGFcclxuICAvLy8gICB2aXJ0dWFsIGZpZWxkIHdpdGhvdXQgYW4gaW5pdCBleHByZXNzaW9uLiBJbiB0aGlzIGNhc2UsIHRoZSBjdXJyZW50IHZhbHVlIHdpbGwgYmVcclxuICAvLy8gICByZXR1cm5lZC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNsb2JiZXJlZE9ubHlcIj5jbG9iYmVyZWRPbmx5IGlzIHRydWUgaWYgd2Ugd2FudCB0byBvbmx5IHRha2UgdGhlIHZhbHVlcyBvZiB0aGUgdmlydHVhbHMgd2l0aCBubyBpbml0IGV4cHJlc3Npb248L3BhcmFtPlxyXG4gIGdldE5ld1JlY1ZhbHVlKGNsb2JiZXJlZE9ubHk6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuX2lzVmlydHVhbCAmJiB0aGlzLl9pbml0RXhwID09IG51bGwpXHJcbiAgICAgIHJldHVybiB0aGlzLl92YWw7XHJcbiAgICByZXR1cm4gIWNsb2JiZXJlZE9ubHkgPyB0aGlzLmdldERlZmF1bHRWYWx1ZSgpIDogbnVsbDtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNldFZhbHVlQW5kU3RhcnRSZWNvbXB1dGUodmFsOiBzdHJpbmcsIGlzTnVsbEZsZDogYm9vbGVhbiwgcmVjb21wdXRlOiBib29sZWFuLCBzZXRSZWNvcmRVcGRhdGVkOiBib29sZWFuLCBpc0FyZ1VwZGF0ZTogYm9vbGVhbiwgZW5mb3JjZVZhcmlhYmxlQ2hhbmdlPzogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGVuZm9yY2VWYXJpYWJsZUNoYW5nZSkpXHJcbiAgICAgIGVuZm9yY2VWYXJpYWJsZUNoYW5nZSA9IGZhbHNlO1xyXG4gICAgYXdhaXQgdGhpcy5zZXRWYWx1ZUFuZFN0YXJ0UmVjb21wdXRlXzEodmFsLCBpc051bGxGbGQsIHJlY29tcHV0ZSwgc2V0UmVjb3JkVXBkYXRlZCwgaXNBcmdVcGRhdGUsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjYWxsIHRoZSBzZXQgdmFsdWUgZnVuY3Rpb24gZnJvbSB0aGUgXCJvdXRlclwiIHdvcmxkLiBUaGlzIHdpbGwgdHJpZ2dlciB0aGUgcmVjb21wdXRlXHJcbiAgLy8vICAgY2hhaW4uIFdoZW4gcmVjb21wdXRlIGlzIGRvbmUgLSByZWZyZXNoIGNvbnRyb2xzIHdoaWNoIGFyZSBleHByZXNzaW9uIGRlcGVuZGVudC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbFwiPnRoZSBuZXcgdmFsdWUgb2YgdGhlIGZpZWxkPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpc051bGxGbGRcIj5pZiB0cnVlIHRoZW4gdGhlIHZhbHVlIGlzIG51bGw8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlY29tcHV0ZVwiPnN0YXRlcyB3aGV0aGVyIHRvIGV4ZWN1dGUgcmVjb21wdXRlIHdoZW4gc2V0dGluZyB0aGUgdmFsdWU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlY29tcHV0ZU9ubHlXaGVuVXBkYXRlVmFsdWVcIj46IGRvIHRoZSByZWNvbXB1dGUgb25seSB3aGVuIHRoZSB2YWx1ZSB3YXMgdXBkYXRlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzZXRSZWNvcmRVcGRhdGVkXCI+dGVsbHMgd2hldGhlciB0byBkZWZpbmUgdGhlIHJlY29yZCBhcyB1cGRhdGVkPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpc0FyZ1VwZGF0ZVwiPnRydWUgaWYgY2FsbGVkIGZvciBoYW5kbGVyIGFyZ3VtZW50LXBhcmFtZXRlciBjb3B5PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJlbmZvcmNlVmFyaWFibGVDaGFuZ2VcIj5leGVjdXRlIHZhaWFibGUgY2hhbmdlIGV2ZW4gd2hlbiByZWNvbXB1dGUgaXMgZmFsc2U8L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgc2V0VmFsdWVBbmRTdGFydFJlY29tcHV0ZV8xKHZhbDogc3RyaW5nLCBpc051bGxGbGQ6IGJvb2xlYW4sIHJlY29tcHV0ZTogYm9vbGVhbiwgc2V0UmVjb3JkVXBkYXRlZDogYm9vbGVhbiwgaXNBcmdVcGRhdGU6IGJvb2xlYW4sIGVuZm9yY2VWYXJpYWJsZUNoYW5nZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHRhc2sgPSA8VGFzaz50aGlzLmdldFRhc2soKTtcclxuICAgIGlmICh0YXNrICE9IG51bGwpXHJcbiAgICAgIHRhc2suVmV3Rmlyc3QrKztcclxuXHJcbiAgICBsZXQgdmFsdWVXYXNVcGRhdGVkOiBib29sZWFuID0gYXdhaXQgdGhpcy5zZXRWYWx1ZSh2YWwsIGlzTnVsbEZsZCwgcmVjb21wdXRlLCBzZXRSZWNvcmRVcGRhdGVkLCAhdGhpcy5faXNWaXJ0dWFsLCBpc0FyZ1VwZGF0ZSwgZW5mb3JjZVZhcmlhYmxlQ2hhbmdlKTtcclxuXHJcbiAgICAvLyBBIGZpZWxkIHRoYXQgaXMgYW4gZXZlbnQgaGFuZGxlciBmaWVsZCBjYW5ub3QgYXBwZWFyIGFzIGEgcHJvcGVydHkgaW4gZ3VpLiBubyBuZWVkIHRvIHJlZnJlc2ggYWxsXHJcbiAgICAvLyBmb3JtK2NvbnRyb2xzIHByb3BlcnRpZXMgZXhwcmVzc2lvbnMgZm9yIGl0LlxyXG4gICAgaWYgKHRhc2sgIT09IG51bGwgJiYgdGFzay5WZXdGaXJzdCA9PT0gMSAmJiB0aGlzLl9mb3JtICE9PSBudWxsICYmICF0aGlzLklzRXZlbnRIYW5kbGVyRmllbGQpIHtcclxuICAgICAgaWYgKHJlY29tcHV0ZSAmJiB2YWx1ZVdhc1VwZGF0ZWQpXHJcbiAgICAgICAgYXdhaXQgdGhpcy5fZm9ybS5yZWZyZXNoT25FeHByZXNzaW9ucygpO1xyXG5cclxuICAgIH1cclxuICAgIGlmICh0YXNrICE9IG51bGwpXHJcbiAgICAgIHRhc2suVmV3Rmlyc3QtLTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBpbiB0aGUgY3VycmVudCByZWNvcmQgYW5kIHVwZGF0ZSB0aGUgZGlzcGxheVxyXG4gIC8vLyAgIHRoZSBmaWVsZCBtdXN0IGJlIGluIGEgbWFnaWMgaW50ZXJuYWwgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJuZXdWYWxcIj50aGUgbmV3IHZhbHVlIG9mIHRoZSBmaWVsZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaXNOdWxsRmxkXCI+aWYgdHJ1ZSB0aGVuIHRoZSB2YWx1ZSBpcyBudWxsPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZWNvbXB1dGVcIj5zdGF0ZXMgd2hldGhlciB0byBleGVjdXRlIHJlY29tcHV0ZSB3aGVuIHNldHRpbmcgdGhlIHZhbHVlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzZXRSZWNvcmRNb2RpZmllZFwiPnN0YXRlcyB3aGV0aGVyIHRvIGRlZmluZSB0aGUgcmVjb3JkIGFzIG1vZGlmaWVkPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzZXRDcnNyTW9kaWZpZWRcIj5zdGF0ZXMgd2hldGhlciB0byBkZWZpbmUgdGhlIGN1cnNvciBvZiB0aGUgZmllbGQgYXMgbW9kaWZpZWQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImlzQXJnVXBkYXRlXCI+dHJ1ZSBpZiBjYWxsZWQgZm9yIGhhbmRsZXIgYXJndW1lbnQtcGFyYW1ldGVyIGNvcHk8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz50aGUgcmV0dXJuIHZhbHVlIHdhcyB1cGRhdGVkIDwvcmV0dXJucz5cclxuICBwcml2YXRlIGFzeW5jIHNldFZhbHVlKG5ld1ZhbDogc3RyaW5nLCBpc051bGxGbGQ6IGJvb2xlYW4sIHJlY29tcHV0ZTogYm9vbGVhbiwgc2V0UmVjb3JkTW9kaWZpZWQ6IGJvb2xlYW4sIHNldENyc3JNb2RpZmllZDogYm9vbGVhbiwgaXNBcmdVcGRhdGU6IGJvb2xlYW4sIGVuZm9yY2VWYWxpYWJsZUNoYW5nZTogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgbGV0IHJlYzogUmVjb3JkO1xyXG4gICAgbGV0IHJlY0ZsZFZhbDogc3RyaW5nO1xyXG4gICAgbGV0IHZhbHNFcXVhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IHJlbWFpbmRlcjogbnVtYmVyO1xyXG4gICAgbGV0IHplcm9SZWFsOiBib29sZWFuO1xyXG4gICAgbGV0IGFyZ3M6IEFyZ3VtZW50c0xpc3QgPSBudWxsO1xyXG4gICAgbGV0IG1haW5DdHJsID0gdGhpcy5nZXRDdHJsKCk7XHJcbiAgICBsZXQgcGVuZGluZ0V2ZW50czogbnVtYmVyO1xyXG4gICAgbGV0IGV2dHM6IExpc3Q8RmllbGQgfCBSdW5UaW1lRXZlbnQ+O1xyXG4gICAgbGV0IGZvcmNlVXBkYXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgY2hlY2tGb3JWYXJpYWJsZUNoYW5nZTogYm9vbGVhbiA9IHJlY29tcHV0ZSB8fCBlbmZvcmNlVmFsaWFibGVDaGFuZ2U7XHJcblxyXG4gICAgbGV0IHRhc2sgPSA8VGFzaz50aGlzLmdldFRhc2soKTtcclxuICAgIGlmICh0aGlzLl9mb3JtID09PSBudWxsKVxyXG4gICAgICB0aGlzLl9mb3JtID0gPE1nRm9ybT50YXNrLmdldEZvcm0oKTtcclxuXHJcbiAgICBpZiAoaXNOdWxsRmxkICYmICF0aGlzLk51bGxBbGxvd2VkICYmIHRoaXMuX3R5cGUgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpIHtcclxuICAgICAgbmV3VmFsID0gdGhpcy5nZXREZWZhdWx0VmFsdWUoKTtcclxuICAgICAgaXNOdWxsRmxkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUUNSIzgwNTM2NDogRm9yIGFueSBmaWVsZCwgd2Ugc3RvcmUgdGhlIHZhbHVlIGluIGZpZWxkIGFzIGl0IGlzICh3aXRob3V0IGNoZWNraW5nIHRoZSBwaWN0dXJlKS5cclxuICAgIC8vIEJ1dCBmb3IgTnVtZXJpYyBmaWVsZCwgaWYgcGljdHVyZSBkb2VzIG5vdCBjb250YWluIGRlY2ltYWxzIHRoZW4gd2Ugc2hvdWxkIHJvdW5kIG9mZiB0aGUgdmFsdWUgYW5kIHRoZW4gc2F2ZSB0aGlzIHZhbHVlIGluIGZpZWxkXHJcbiAgICAvLyBvdGhlcndpc2UgaXQgd2lsbCBnaXZlIHdyb25nIGNhbGN1bGF0aW9uLiBTbyBhbHdheXMgcm91bmQgb2ZmIHRoZSB2YWx1ZSBkZXBlbmRpbmcgb24gcGljdHVyZSdzIGRlY2ltYWwuXHJcbiAgICAvLyBjaGVjayBpZiBuZXdWYWwgaXMgXCJsb25nXCIgc2luY2UgdGhlcmUgaXMgbm8gcmVhc29uIHRvIHJvdW5kIGFuIGFscmVhZHkgd2hvbGUgbnVtYmVyXHJcbiAgICBpZiAodGhpcy5fdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDICYmIG5ld1ZhbCAhPSBudWxsICYmICFOVU1fVFlQRS5udW1IZXhTdHJJc0xvbmcobmV3VmFsKSkge1xyXG4gICAgICBsZXQgbnVtVmFsID0gbmV3IE5VTV9UWVBFKG5ld1ZhbCk7XHJcbiAgICAgIGxldCBwaWMgPSBuZXcgUElDKHRoaXMuX3BpY3R1cmUsIHRoaXMuX3R5cGUsIHN1cGVyLmdldFRhc2soKS5nZXRDb21wSWR4KCkpO1xyXG4gICAgICBsZXQgZGVjczogbnVtYmVyID0gcGljLmdldERlYygpO1xyXG4gICAgICBudW1WYWwucm91bmQoZGVjcyk7XHJcbiAgICAgIG5ld1ZhbCA9IG51bVZhbC50b1hNTHJlY29yZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlYyA9ICg8RGF0YVZpZXc+dGhpcy5fZGF0YXZpZXcpLmdldEN1cnJSZWMoKTtcclxuICAgIGlmIChyZWMgPT0gbnVsbClcclxuICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKExhbmd1YWdlRGF0YS5JbnN0YW5jZS5nZXRDb25zdE1lc3NhZ2UoTXNnSW50ZXJmYWNlLlJUX1NUUl9OT19SRUNTX0lOX1JORykpO1xyXG5cclxuICAgIC8vIGRvbid0IGFsbG93IHVwZGF0aW5nIFJFQUwgZmllbGRzLCB1bmxlc3MgJ2FsbG93IHVwZGF0ZSBpbiBxdWVyeSBtb2RlJyBpcyBzZXQgdG8gVFJVRVxyXG4gICAgaWYgKCF0aGlzLklzVmlydHVhbCAmJlxyXG4gICAgICAodGFzay5nZXRNb2RlKCkgPT09IENvbnN0YW50cy5UQVNLX01PREVfUVVFUlkgJiZcclxuICAgICAgICAhRW52aXJvbm1lbnQuSW5zdGFuY2UuYWxsb3dVcGRhdGVJblF1ZXJ5TW9kZSh0YXNrLmdldENvbXBJZHgoKSlcclxuICAgICAgICB8fCByZWMuSW5Gb3JjZVVwZGF0ZSAmJiByZWMuSW5Db21wdXRlKSlcclxuICAgICAgcmV0dXJuICF2YWxzRXF1YWw7XHJcblxyXG4gICAgaWYgKGNoZWNrRm9yVmFyaWFibGVDaGFuZ2UgJiYgdGhpcy5nZXRIYXNDaGFuZ2VFdmVudCgpKSB7XHJcbiAgICAgIGxldCBhcmdzTGlzdCA9IG5ldyBBcnJheSgyKTtcclxuICAgICAgYXJnc0xpc3RbMF0gPSBuZXcgRXhwVmFsKFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQywgZmFsc2UsXHJcbiAgICAgICAgKG1haW5DdHJsICE9PSBudWxsICYmIG1haW5DdHJsLklzSW50ZXJhY3RpdmVVcGRhdGVcclxuICAgICAgICAgID8gRmllbGQuTlVNMC50b1hNTHJlY29yZCgpXHJcbiAgICAgICAgICA6IEZpZWxkLk5VTTEudG9YTUxyZWNvcmQoKSkpO1xyXG4gICAgICBhcmdzTGlzdFsxXSA9IG5ldyBFeHBWYWwodGhpcy5nZXRUeXBlKCksIHRoaXMuaXNOdWxsKCksIHRoaXMuZ2V0VmFsdWUoZmFsc2UpKTtcclxuICAgICAgYXJncyA9IG5ldyBBcmd1bWVudHNMaXN0KGFyZ3NMaXN0KTtcclxuICAgIH1cclxuICAgIGlmIChtYWluQ3RybCAhPSBudWxsKVxyXG4gICAgICBtYWluQ3RybC5Jc0ludGVyYWN0aXZlVXBkYXRlID0gZmFsc2U7XHJcblxyXG4gICAgLy8gdXBkYXRlIHRoZSBmaWVsZCBpbiB0aGUgY3VycmVudCByZWNvcmRcclxuICAgIGlmICh0aGlzLl90eXBlICE9PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUgJiYgVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0RCQ1MoKSkge1xyXG4gICAgICAvLyBjb3VudCB0aGUgbnVtYmVyIG9mIGJ5dGVzLCBub3QgY2hhcmFjdGVycyAoSlBOOiBEQkNTIHN1cHBvcnQpXHJcbiAgICAgIGlmIChuZXdWYWwgIT0gbnVsbClcclxuICAgICAgICByZW1haW5kZXIgPSB0aGlzLl9zaXplIC0gVXRpbFN0ckJ5dGVNb2RlLmxlbkIobmV3VmFsKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHJlbWFpbmRlciA9IDA7XHJcblxyXG4gICAgICBpZiAobmV3VmFsICE9IG51bGwgJiYgdGhpcy5fdHlwZSAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CICYmIHRoaXMuX3R5cGUgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IgJiZcclxuICAgICAgICByZW1haW5kZXIgPCAwKVxyXG4gICAgICAgIHRoaXMuX3ZhbCA9IFV0aWxTdHJCeXRlTW9kZS5sZWZ0QihuZXdWYWwsIHRoaXMuX3NpemUpO1xyXG4gICAgICBlbHNlIGlmICh0aGlzLl90eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBICYmIHJlbWFpbmRlciA+IDApXHJcbiAgICAgICAgdGhpcy5fdmFsID0gbmV3VmFsICsgTlN0cmluZy5Gcm9tQ2hhcnModGhpcy5fc3BhY2VzLCAwICwgcmVtYWluZGVyKTtcclxuICAgICAgZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CKVxyXG4gICAgICAgIHRoaXMuX3ZhbCA9IEJsb2JUeXBlLmNvcHlCbG9iKHRoaXMuX3ZhbCwgbmV3VmFsKTtcclxuICAgICAgZWxzZSB0aGlzLl92YWwgPSBuZXdWYWw7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKG5ld1ZhbCAhPSBudWxsKVxyXG4gICAgICAgIHJlbWFpbmRlciA9IHRoaXMuX3NpemUgLSBuZXdWYWwubGVuZ3RoO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgcmVtYWluZGVyID0gMDtcclxuXHJcbiAgICAgIGlmIChuZXdWYWwgIT0gbnVsbCAmJiB0aGlzLl90eXBlICE9PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IgJiYgdGhpcy5fdHlwZSAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUiAmJiByZW1haW5kZXIgPCAwKVxyXG4gICAgICAgIHRoaXMuX3ZhbCA9IG5ld1ZhbC5zdWJzdHIoMCwgdGhpcy5fc2l6ZSk7XHJcbiAgICAgIGVsc2UgaWYgKCh0aGlzLl90eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8IHRoaXMuX3R5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSkgJiYgcmVtYWluZGVyID4gMClcclxuICAgICAgICB0aGlzLl92YWwgPSBuZXdWYWwgKyAgTlN0cmluZy5Gcm9tQ2hhcnModGhpcy5fc3BhY2VzLCAwICwgcmVtYWluZGVyKTtcclxuICAgICAgZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CKSB7XHJcbiAgICAgICAgLy8gRW5zdXJlIF92YWwgaXMgbm90IG51bGwsIHNvIHRoYXQgdGhlIGJsb2IgY29weSB3aWxsIGJlXHJcbiAgICAgICAgLy8gZG9uZSBjb3JyZWN0bHksIGFjY29yZGluZyB0byB0aGUgZmllbGQncyBibG9iIHR5cGUuXHJcbiAgICAgICAgaWYgKHRoaXMuX3ZhbCA9PT0gbnVsbClcclxuICAgICAgICAgIHRoaXMuX3ZhbCA9IHRoaXMuZ2V0TWFnaWNEZWZhdWx0VmFsdWUoKTtcclxuICAgICAgICB0aGlzLl92YWwgPSBCbG9iVHlwZS5jb3B5QmxvYih0aGlzLl92YWwsIG5ld1ZhbCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB0aGlzLl92YWwgPSBuZXdWYWw7XHJcbiAgICB9XHJcbiAgICAvLyBJZiBkb3RuZXQgdmFyIGlzIHVwZGF0ZWQgd2l0aCBuZXcgYmxvYnByZWZpeCwgdmFsc0VxdWFsIGlzIGZhbHNlLCB3ZSBzaG91bGQgbm90IGNoZWNrIGluIHJlY29yZC5cclxuICAgIHtcclxuICAgICAgcmVjRmxkVmFsID0gcmVjLkdldEZpZWxkVmFsdWUodGhpcy5faWQpO1xyXG5cclxuICAgICAgLy8gSW4gb3JkZXIgdG8gY29tcGFyZSwgSWYgdmlydHVhbCdzIG9sZCB2YWx1ZSBpcyB0YWtlbiBmcm9tIHJlY29yZCwgdGhlbiBvbGQgaXNOdWxsIHZhbHVlIGFsc28gc2hvdWxkIGJlIHRha2VuIGZyb20gcmVjb3JkLlxyXG4gICAgICAvLyBUaGlzIHNob3VsZCBiZSBkb25lIG9ubHkgaWYgbm90IGluIHJlLWNvbXB1dGUgLyBub3QgYXJndW1lbnQgLyBubyBpbml0RXhwLilcclxuICAgICAgLy8gTWFpbmx5ICwgdGhpcyBpcyBuZWVkZWQsIHdoZW4gY3Vyc29yIGlzIHBhcmtlZCBvbiBvbmUgcmVjb3JkIGFuZCB2aXJ0dWFsIGlzIG1vZGlmaWVkIGZyb20gbnVsbCB0byBub25udWxsIG9yIHZpY2V2ZXJzYSBhbmRcclxuICAgICAgLy8gbm93IGlmIGN1cnNvciBtb3ZlcyBmcm9tIG9uZSByZWNvcmQgdG8gbmV4dCByZWNvcmQsIFdlIG5lZWQgdG8gIGdldCB0aGUgb2xkIG51bGwgdmFsdWUgZnJvbSByZWNvcmQuXHJcblxyXG4gICAgICBsZXQgb2xkTnVsbFZhbDogYm9vbGVhbiA9IHRoaXMuX2lzTnVsbDtcclxuICAgICAgaWYgKCFyZWNvbXB1dGUgJiYgIWlzQXJnVXBkYXRlICYmIHRoaXMuX2luaXRFeHAgPT0gbnVsbClcclxuICAgICAgICBvbGROdWxsVmFsID0gcmVjLklzTnVsbCh0aGlzLl9pZCk7XHJcblxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHZhbHNFcXVhbCA9IEV4cHJlc3Npb25FdmFsdWF0b3IubWdWYWxzRXF1YWwodGhpcy5fdmFsLCBpc051bGxGbGQsIHRoaXMuX3R5cGUsIHJlY0ZsZFZhbCwgb2xkTnVsbFZhbCwgdGhpcy5fdHlwZSk7XHJcbiAgICAgIH1cclxuICAgICAgY2F0Y2ggKGV4Y2VwdGlvbikge1xyXG4gICAgICAgIHRoaXMuX3ZhbCA9IHRoaXMuZ2V0TWFnaWNEZWZhdWx0VmFsdWUoKTtcclxuICAgICAgICB2YWxzRXF1YWwgPSBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIC8vIHplcm8gdGhlIHZlY3RvclxyXG4gICAgaWYgKHRoaXMuX2NsZWFyVmVjdG9yVHlwZSlcclxuICAgICAgdGhpcy5fdmVjdG9yVHlwZSA9IG51bGw7XHJcbiAgICBpZiAodGhpcy5faW52YWxpZFZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX2ludmFsaWRWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICByZWMuY2xlYXJGbGFnKHRoaXMuX2lkLCBSZWNvcmQuRkxBR19VUERBVEVEKTtcclxuICAgICAgcmVjLmNsZWFyRmxhZyh0aGlzLl9pZCwgUmVjb3JkLkZMQUdfTU9ESUZJRUQpO1xyXG4gICAgfVxyXG4gICAgLy8gZHVyaW5nIGNvbXB1dGUsIHdlIHNob3VsZCB6ZXJvIGZpZWxkcyB3aGljaCBiZWxvbmcgdG8gbGluayBjcmVhdGUuXHJcbiAgICB6ZXJvUmVhbCA9IHRoaXMuX2xpbmtDcmVhdGUgJiYgcmVjLkluQ29tcHV0ZSAmJiAhcmVjb21wdXRlICYmICh0aGlzLl9mb3JtID09IG51bGwgfHwgIXRoaXMuX2Zvcm0uSW5SZXN0b3JlKSAmJlxyXG4gICAgICAhQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuR2V0U3RvcEV4ZWN1dGlvbkZsYWcoKTtcclxuXHJcbiAgICAvLyBWaXJ0dWFscyB3aXRob3V0IGluaXQgZXhwcmVzc2lvbiBhcmUgY29waWVkIGZyb20gb25lIHJlY29yZCB0byBhbm90aGVyLCBldmVuIGF0XHJcbiAgICAvLyBjb21wdXRlIHRpbWUgKG5vIHJlY29tcHV0ZSkuIE5ldmVydGhlbGVzcywgaW4gY2FzZSB0aGVpciB2YWx1ZSBjaGFuZ2VzLCB3ZSBtdXN0XHJcbiAgICAvLyBwZXJmb3JtIHJlY29tcHV0ZS5cclxuICAgIGlmICgodGhpcy5faXNWaXJ0dWFsIHx8IHplcm9SZWFsKSAmJiAhcmVjLmlzTmV3UmVjKCkgJiYgIXZhbHNFcXVhbClcclxuICAgICAgZm9yY2VVcGRhdGUgPSB0cnVlO1xyXG5cclxuICAgIC8vIGlmIHRoZSByZWNvbXB1dGUgaXMgZmFsc2UgaXQgbWVhbnMgdGhhdCB0aGUgdXNlciBpcyBzZXR0aW5nIGEgdmFsdWVcclxuICAgIC8vIHRoYXQgaXRzIHNvdXJjZSBpcyB0aGUgcmVjb3JkLCB0aHVzLCB3ZSBkb24ndCBoYXZlIHRvIHVwZGF0ZSB0aGUgcmVjb3JkLlxyXG4gICAgLy8gaWYgdGhlIHJlY29tcHV0ZSBpcyB0cnVlLCBnbyBhaGVhZCBhbmQgdXBkYXRlIHRoZSByZWNvcmQuXHJcbiAgICBpZiAoY2hlY2tGb3JWYXJpYWJsZUNoYW5nZSB8fCBmb3JjZVVwZGF0ZSB8fCByZWMuaXNOZXdSZWMoKSkge1xyXG4gICAgICB0aGlzLlVwZGF0ZU51bGwoaXNOdWxsRmxkLCByZWMpO1xyXG5cclxuICAgICAgaWYgKHNldENyc3JNb2RpZmllZClcclxuICAgICAgICByZWMuc2V0RmxhZyh0aGlzLl9pZCwgUmVjb3JkLkZMQUdfQ1JTUl9NT0RJRklFRCk7XHJcbiAgICAgIHJlYy5zZXRGaWVsZFZhbHVlKHRoaXMuX2lkLCB0aGlzLl92YWwsIHNldFJlY29yZE1vZGlmaWVkKTtcclxuICAgICAgZXZ0cyA9IEZpZWxkLl92YXJpYWJsZUNoYW5nZUV2dHM7XHJcbiAgICAgIHBlbmRpbmdFdmVudHMgPSBldnRzLmxlbmd0aDtcclxuICAgICAgaWYgKGNoZWNrRm9yVmFyaWFibGVDaGFuZ2UgJiYgdGhpcy5nZXRIYXNDaGFuZ2VFdmVudCgpICYmICFldnRzLkNvbnRhaW5zKHRoaXMpICYmICF2YWxzRXF1YWwpIHtcclxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHZhcmlhYmxlIGNoYW5nZSBoYW5kbGVyIC0gc2F2ZSB2YWx1ZSBhbmQgcHJlcGFyZSBwYXJhbXNcclxuICAgICAgICBsZXQgcnRFdnQgPSBuZXcgUnVuVGltZUV2ZW50KHRoaXMpO1xyXG4gICAgICAgIHJ0RXZ0LnNldEludGVybmFsKEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9WQVJJQUJMRSk7XHJcbiAgICAgICAgcnRFdnQuc2V0QXJnTGlzdChhcmdzKTtcclxuICAgICAgICBldnRzLnB1c2godGhpcyk7XHJcbiAgICAgICAgZXZ0cy5wdXNoKHJ0RXZ0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gY2hlY2sgZm9yIHJlY29tcHV0ZSBhbmQgZXhlY3V0ZSBpdFxyXG4gICAgICAvLyBRQ1IgIzI5OTYwOSwgaWYgd2UgYXJlIGluIGxvY2FsIGRhdGF2aWV3IG1hbmFnZXIsIHdlIGNhbiBvbmx5IGNvbXB1dGUuXHJcbiAgICAgIC8vIFJlY29tcHV0ZSBpcyBub3QgYWxsb3dlZCwgc2luY2UgaXQgd2lsbCBiZSBleGVjdXRlZCBtdWx0aXBsZSB0aW1lc1xyXG4gICAgICBpZiAodGhpcy5fcmVjb21wdXRlICE9IG51bGwgJiYgKHJlY29tcHV0ZSB8fCBmb3JjZVVwZGF0ZSkgJiYgISg8RGF0YVZpZXc+dGhpcy5fZGF0YXZpZXcpLkluTG9jYWxEYXRhdmlld0NvbW1hbmQpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgLy8gaWYgZmllbGQgY2F1c2VkIHRhYmxlIGludmFsaWRhdGlvbiBhbmQgaXQncyB2YWx1ZSB3YXMgY2hhbmdlZFxyXG4gICAgICAgICAgaWYgKGZvcmNlVXBkYXRlKVxyXG4gICAgICAgICAgICByZWMuSW5Gb3JjZVVwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLl9yZWNvbXB1dGUuZXhlY3V0ZShyZWMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICBpZiAoZm9yY2VVcGRhdGUpXHJcbiAgICAgICAgICAgIHJlYy5JbkZvcmNlVXBkYXRlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLl9jYXVzZVRhYmxlSW52YWxpZGF0aW9uICYmIHRoaXMuaXNDaGFuZ2VkKHRoaXMuX3ZhbCwgaXNOdWxsRmxkKSlcclxuICAgICAgICByZWMuc2V0Q2F1c2VJbnZhbGlkYXRpb24odHJ1ZSk7XHJcblxyXG4gICAgICAvLyBEb24ndCB1cGRhdGUgY29udHJvbHMgd2hpbGUgZmV0Y2hpbmcgcmVjb3JkcyBmcm9tIGxvY2FsIGRhdGFiYXNlLiBJZiB0aGUgdGFzayBoYXMgYSB0YWJsZSBjb250cm9sLCB0aGVuIGFjdHVhbCBjb250cm9scyBvbiB0aGVcclxuICAgICAgLy8gcm93cyBhcmUgY3JlYXRlZCBhZnRlciBuby4gb2Ygcm93cyBpcyBrbm93biAoYW5kIHRoaXMgaXMgYWZ0ZXIgdGhlIGRhdGEgaXMgYXZhaWFsYWJsZSkuIFNvLCB3aGlsZSBmZXRjaGluZyByZWNvcmRzLCBjb250cm9scyBpblxyXG4gICAgICAvLyB0YWJsZSBhcmUgbm90IHlldCBjcmVhdGVkIGFuZCBoZW5jZSB0aGVyZSBpcyBhbiBhc3NlcnQgd2hpbGUgdHJ5aW5nIHRvIHVwZGF0ZSB0aGUgY29udHJvbHMuIEFmdGVyIHNraXBwaW5nIHRoaXMgdXBkYXRlLCB0aGUgY29udHJvbHNcclxuICAgICAgLy8gYXJlIHVwZGF0ZWQgZnJvbSBvdGhlciBwbGFjZXMgKHJlZnJlc2hUYWJsZSwgY29tbW9uSGFuZGxlckJlZm9yZSwgaGFuZGxlUm93RGF0YUN1clBhZ2UgZXRjIGxpa2UgaXQgaGFwcGVucyBmb3Igc2VydmVyIGRhdGEpXHJcbiAgICAgIGlmICgocmVjb21wdXRlIHx8IGZvcmNlVXBkYXRlKSAmJiAhKDxEYXRhVmlldz50aGlzLl9kYXRhdmlldykuSW5Mb2NhbERhdGF2aWV3Q29tbWFuZCAmJiBtYWluQ3RybCAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKG1haW5DdHJsLmlzQ2hvaWNlQ29udHJvbCgpKVxyXG4gICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFJpZ2h0IGFmdGVyIHdlIGV4aXQgdGhlIHRvcG1vc3QgdXBkYXRlIC0gZXhlY3V0ZSBhbGwgdmFyaWFibGUgY2hhbmdlIGV2ZW50cy5cclxuICAgICAgLy8gbm90ZSB0aGF0IGR1cmluZyB0aGlzIGV4ZWN1dGlvbiwgbmV3IG9uZXMgbWF5IGJlIGNyZWF0ZWQuXHJcbiAgICAgIGlmIChwZW5kaW5nRXZlbnRzID09PSAwICYmIGNoZWNrRm9yVmFyaWFibGVDaGFuZ2UgJiYgdGhpcy5nZXRIYXNDaGFuZ2VFdmVudCgpKSB7XHJcbiAgICAgICAgd2hpbGUgKGV2dHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgbGV0IGV2dCA9IDxSdW5UaW1lRXZlbnQ+ZXZ0cy5nZXRfSXRlbSgxKTtcclxuICAgICAgICAgIGV2dHMuUmVtb3ZlQXQoMCk7XHJcbiAgICAgICAgICBldnRzLlJlbW92ZUF0KDApO1xyXG4gICAgICAgICAgaWYgKExhc3RGb2N1c2VkTWFuYWdlci5JbnN0YW5jZS5nZXRMYXN0Rm9jdXNlZFRhc2soKSA9PSBudWxsKVxyXG4gICAgICAgICAgICBldnQuc2V0VGFzayg8VGFzaz50aGlzLmdldFRhc2soKSk7XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHRhc2tSZWY6IFRhc2sgPSBMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0TGFzdEZvY3VzZWRUYXNrKCk7XHJcbiAgICAgICAgICAgIC8vIElmIHdlIGFyZSBpbiB2YXJpYWJsZSBjaGFuZ2UgZXZlbnQgYW5kIFRhc2tTdWZmaXggaXMgZXhlY3V0ZWQsIGl0IG1lYW5zIHdlIGFyZSBoZXJlIGZyb21cclxuICAgICAgICAgICAgLy8gdXBkYXRlIGFyZ3VtZW50cyB3aGlsZSBjbG9zaW5nIHRoZSB0YXNrLiBJbiBzdWNoIGNhc2UsIHdlIHNob3VsZCBzZXQgdGhlIGV2ZW50IHRhc2sgYXMgUGF0aFBhcmVudFRhc2tcclxuICAgICAgICAgICAgLy8gYW5kIG5vdCB0aGUgdGFzayBpdHNlbGYuXHJcbiAgICAgICAgICAgIGlmICh0YXNrUmVmLlRhc2tTdWZmaXhFeGVjdXRlZCkge1xyXG4gICAgICAgICAgICAgIHRhc2tSZWYgPSAodGFza1JlZi5QYXRoUGFyZW50VGFzayAhPSBudWxsKSA/IDxUYXNrPnRhc2tSZWYuUGF0aFBhcmVudFRhc2sgOiB0YXNrUmVmO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGV2dC5zZXRUYXNrKHRhc2tSZWYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZXZ0LnNldEN0cmwoTGFzdEZvY3VzZWRNYW5hZ2VyLmdldExhc3RGb2N1c2VkQ29udHJvbCgpKTtcclxuICAgICAgICAgIGF3YWl0IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmhhbmRsZUV2ZW50KGV2dCwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gIzc3NjAzMSAtIHRoZSBmaWVsZCBzaG91bGQgYmUgbWFya2VkIG1vZGlmaWVkIG9ubHkgaWYgdmFsIGFyZSBub3QgZXF1YWwuIE90aGVyd2lzZSwgZXZlbiBmb3IgbnVsbCBmaWVsZCBwYXJhbXRlciBwYXNzaW5nXHJcbiAgICAvLyBvciBzYW1lIHZhbHVlIHVwZGF0ZSwgaXQgaXMgbWFya2VkIGFzIG1vZGlmaWVkIGFuZCBSUyBpcyBleGVjdXRlZC5cclxuICAgIGlmIChyZWNvbXB1dGUgJiYgIXZhbHNFcXVhbClcclxuICAgICAgdGhpcy5zZXRNb2RpZmllZCgpO1xyXG4gICAgcmV0dXJuICF2YWxzRXF1YWw7XHJcbiAgfVxyXG5cclxuICBVcGRhdGVOdWxsKGlzTnVsbEZsZDogYm9vbGVhbiwgcmVjOiBSZWNvcmQpOiB2b2lkIHtcclxuICAgIGlmIChpc051bGxGbGQpXHJcbiAgICAgIHJlYy5zZXRGbGFnKHRoaXMuX2lkLCBSZWNvcmQuRkxBR19OVUxMKTtcclxuICAgIGVsc2VcclxuICAgICAgcmVjLmNsZWFyRmxhZyh0aGlzLl9pZCwgUmVjb3JkLkZMQUdfTlVMTCk7XHJcbiAgICB0aGlzLl9pc051bGwgPSBpc051bGxGbGQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IGEgdmVjIGNlbGxcclxuICAvLy8gICBjYW4gbm90IGJlIGV4ZWN1dGVkIHdpdGhvdXQgdGhlIGxvZ2ljIGZyb20gZXZhbF9vcF92ZWNHZXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWR4XCI+dGhlIGNlbGwgaW5kZXggaW4gdGhlIHZlY3RvciBzdHJhdHMgZnJvbSAxPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm5ld1ZhbFwiPnRoZSBuZXcgdmFsdWU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsSXNOdWxsXCI+aXMgdGhlIGJldyB2YWx1ZSBudWxsPC9wYXJhbT5cclxuICBhc3luYyBzZXRDZWxsVmVjVmFsdWUoaWR4OiBudW1iZXIsIG5ld1ZhbDogc3RyaW5nLCB2YWxJc051bGw6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCByZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLl90eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSB7XHJcbiAgICAgIC8vIGluaXRpYWxpemVkIHRoZSB2ZWN0b3Igb2JqZWN0IGlmIG5lZWRlZFxyXG4gICAgICBpZiAodGhpcy5fdmVjdG9yVHlwZSA9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5fdmVjdG9yVHlwZSA9IHRoaXMuaXNOdWxsKClcclxuICAgICAgICAgID8gbmV3IFZlY3RvclR5cGUodGhpcy5fdmVjQ2VsbHNUeXBlLCB0aGlzLl92ZWNDZWxsc0NvbnRlbnRUeXBlLCB0aGlzLkRlZmF1bHRWYWx1ZSwgdGhpcy5pc051bGxEZWZhdWx0KCksXHJcbiAgICAgICAgICB0aGlzLk51bGxBbGxvd2VkLCB0aGlzLl92ZWNDZWxsc1NpemUpXHJcbiAgICAgICAgICA6IG5ldyBWZWN0b3JUeXBlKHRoaXMuX3ZhbCk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gaWYgdmVjQ2VsbHNUeXBlIGlzIEJMT0IsIGNvbnZlcnQgZGF0YSBpbnRvIGJsb2JcclxuICAgICAgaWYgKHRoaXMuX3ZlY0NlbGxzVHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CKSB7XHJcbiAgICAgICAgbGV0IHRtcE5ld1ZhbDogc3RyaW5nID0gdGhpcy5nZXRDZWxsRGVmdWFsdFZhbHVlKCk7XHJcbiAgICAgICAgbmV3VmFsID0gQmxvYlR5cGUuY29weUJsb2IodG1wTmV3VmFsLCBuZXdWYWwpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXMgPSB0aGlzLl92ZWN0b3JUeXBlLnNldFZlY0NlbGwoaWR4LCBuZXdWYWwsIHZhbElzTnVsbCk7XHJcbiAgICAgIC8vIHN0YXJ0IHJlY29tcHV0ZVxyXG4gICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYXJWZWN0b3JUeXBlID0gZmFsc2U7XHJcbiAgICAgICAgLy8gUUNSIDk4NDU2MyBkbyBub3Qgc2V0IHRoZSByZWNvcmQgYXMgY2hhbmdlZFxyXG4gICAgICAgIGF3YWl0IHRoaXMuc2V0VmFsdWVBbmRTdGFydFJlY29tcHV0ZSh0aGlzLl92ZWN0b3JUeXBlLnRvU3RyaW5nKCksIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuX2NsZWFyVmVjdG9yVHlwZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgY2VsbCB2YWx1ZSBvZiBhIGdpdmVuIGNlbGwgaW4gdGhlIHZlY3RvclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgY2VsbCdzIHZhbHVlIGFzIHN0cmluZzwvcmV0dXJucz5cclxuICBnZXRWZWNDZWxsVmFsdWUoaWR4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuX3R5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpIHtcclxuICAgICAgLy8gaWYgd2UgYXJlIGhlcmUgdGhhbiB0aGUgZmlsZWQgbXVzdCBoYXZlIG5vbmUgbnVsbCB2YWx1ZSBvZiBhIHZlY3RvclxyXG4gICAgICBpZiAodGhpcy5fdmVjdG9yVHlwZSA9PSBudWxsKVxyXG4gICAgICAgIHRoaXMuX3ZlY3RvclR5cGUgPSBuZXcgVmVjdG9yVHlwZSh0aGlzLl92YWwpO1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuX3ZlY3RvclR5cGUuZ2V0VmVjQ2VsbChpZHgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSByZWNvbXB1dGVkIHZhcmlhYmxlIHRvIHRydWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldFJlY29tcHV0ZWQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgaW52YWxpZGF0ZSB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkLiBBbiBpbnZhbGlkIHZhbHVlIGZvcmNlcyB1cyB0byByZS1jYWxjdWxhdGUgdGhlIGZpZWxkJ3NcclxuICAvLy8gICB2YWx1ZSBieSBjb3B5aW5nIGl0IGZyb20gdGhlIGRhdGF2aWV3LlxyXG4gIC8vLyAgIHVzZWQgd2hlbiBzd2l0Y2hpbmcgdG8gYW5vdGhlciByZWNvcmRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZm9yY2VJbnZhbGlkYXRlXCI+LSBEb250IGNoZWNrIHRoZSBmaWVsZCdzIHR5cGUgYW5kIG1ha2UgaXQgaW52YWxpZCAodXN1YWxseSBWaXJ0dWFsc1xyXG4gIC8vLyAgIHdpdGhvdXQgaW5pdCBleHByZXNzaW9uIGFyZSBuZXZlciBpbnZhbGlkYXRlZCwgc2luY2UgdGhleSByZXRhaW4gdGhlaXIgdmFsdWUgd2hlbiBtb3ZpbmdcclxuICAvLy8gICBiZXR3ZWVuIHJlY29yZHMpLlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNsZWFyRmxhZ3NcIj48L3BhcmFtPlxyXG4gIGludmFsaWRhdGUoZm9yY2VJbnZhbGlkYXRlOiBib29sZWFuLCBjbGVhckZsYWdzOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBsZXQgcmVjOiBSZWNvcmQgPSAoPERhdGFWaWV3PnRoaXMuX2RhdGF2aWV3KS5nZXRDdXJyUmVjKCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLl9pc1ZpcnR1YWwgfHwgdGhpcy5fdmlyQXNSZWFsIHx8IHRoaXMuX2luaXRFeHAgIT09IG51bGwgfHwgZm9yY2VJbnZhbGlkYXRlKSB7XHJcbiAgICAgIHRoaXMuX2ludmFsaWRWYWx1ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoY2xlYXJGbGFncyAmJiByZWMgIT09IG51bGwpIHtcclxuICAgICAgcmVjLmNsZWFyRmxhZyh0aGlzLl9pZCwgUmVjb3JkLkZMQUdfVVBEQVRFRCk7XHJcbiAgICAgIHJlYy5jbGVhckZsYWcodGhpcy5faWQsIFJlY29yZC5GTEFHX01PRElGSUVEKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgTmFtZSBvZiB0YWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHVibGljIGdldFRhYmxlTmFtZSgpOiBTdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuX3RhYmxlTmFtZSA9PSBudWxsKVxyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIHJldHVybiB0aGlzLl90YWJsZU5hbWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZm9yIGdldCBWQVJOQU1FIGZ1bmN0aW9uIHVzZVxyXG4gIC8vLyAgIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHRhYmxlIG5hbWUgd2hlcmUgdGhlIHZhcmlhYmxlIG9yaWdpbmF0ZXMsXHJcbiAgLy8vICAgY29uY2F0ZW5hdGVkIHdpdGggJy4nIGFuZCB0aGUgdmFyaWFibGUgZGVzY3JpcHRpb24gb2YgdGhlIHZhcmlhYmxlIGluIHRoYXQgdGFibGUuXHJcbiAgLy8vICAgSWYgdGhlIHZhcmlhYmxlIGlzIGEgdmlydHVhbCBvbmUsIHRoZW4gdGhlIHRhYmxlIG5hbWUgd291bGQgaW5kaWNhdGUgJ1ZpcnR1YWwnLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHVibGljIGdldE5hbWUoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLl9pc1BhcmFtKVxyXG4gICAgICByZXR1cm4gXCJQYXJhbWV0ZXIuXCIgKyB0aGlzLmdldFZhck5hbWUoKTtcclxuICAgIGVsc2UgaWYgKHRoaXMuX2lzVmlydHVhbClcclxuICAgICAgcmV0dXJuIFwiVmlydHVhbC5cIiArIHRoaXMuZ2V0VmFyTmFtZSgpO1xyXG4gICAgZWxzZSByZXR1cm4gdGhpcy5nZXRUYWJsZU5hbWUoKSArIFwiLlwiICsgdGhpcy5nZXRWYXJOYW1lKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdGVzdCBmb3IgYSBudWxsaXR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgaXNOdWxsKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCg8VGFzaz5zdXBlci5nZXRUYXNrKCkpLmdldEV2YWxPbGRWYWx1ZXMoKSlcclxuICAgICAgcmV0dXJuIHRoaXMuaXNPcmlnaW5hbFZhbHVlTnVsbCgpO1xyXG4gICAgZWxzZSBpZiAodGhpcy5faW52YWxpZFZhbHVlKVxyXG4gICAgICB0aGlzLnRha2VWYWxGcm9tUmVjKCk7XHJcbiAgICByZXR1cm4gdGhpcy5faXNOdWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgUHJldklzTnVsbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9wcmV2SXNOdWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRlc3QgZm9yIGFuIG1vZGlmaWVkIGZsYWdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGlzTW9kaWZpZWQoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgY3VyclJlYzogUmVjb3JkID0gKDxEYXRhVmlldz50aGlzLl9kYXRhdmlldykuZ2V0Q3VyclJlYygpO1xyXG4gICAgcmV0dXJuIGN1cnJSZWMuaXNGbGRNb2RpZmllZCh0aGlzLl9pZCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSBtb2RpZmllZCBmbGFnXHJcbiAgLy8vICAgcGxlYXNlIG5vdGUgdGhhdCBjbGVhcmluZyB0aGUgZmxhZyBpcyBkb25lIGV4cGxpY2l0bHlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldE1vZGlmaWVkKCk6IHZvaWQge1xyXG4gICAgbGV0IHJlYzogUmVjb3JkID0gKCg8RGF0YVZpZXc+dGhpcy5fZGF0YXZpZXcpLmdldEN1cnJSZWMoKSk7XHJcbiAgICByZWMuc2V0RmxhZyh0aGlzLl9pZCwgUmVjb3JkLkZMQUdfTU9ESUZJRUQpO1xyXG5cclxuICAgIC8vIFRoaXMgZmxhZyB3aWxsIGJlIHNldCBhcyBGTEFHX01PRElGSUVEIGFuZCBuZXZlciBjbGVhcmVkLiBRY3IgIzkyNjgxNVxyXG4gICAgcmVjLnNldEZsYWcodGhpcy5faWQsIFJlY29yZC5GTEFHX01PRElGSUVEX0FUTEVBU1RfT05DRSk7XHJcbiAgICBpZiAodGhpcy5Jc1ZpcnR1YWwpXHJcbiAgICAgIHRoaXMubW9kaWZpZWRBdExlYXN0T25jZSA9IHRydWU7XHJcbiAgICAvLyB0aGUgc2V0dGluZyBvZiB0aGUgcmVjb3JkIG1vZGlmaWVkIGZsYWcgaXMgZG9uZSBleHBsaWNpdGx5XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSB1cGRhdGVkIGZsYWdcclxuICAvLy8gICBwbGVhc2Ugbm90ZSB0aGF0IGNsZWFyaW5nIHRoZSBmbGFnIGlzIGRvbmUgZXhwbGljaXRseVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0VXBkYXRlZCgpOiB2b2lkIHtcclxuICAgIGxldCBjdXJyUmVjOiBSZWNvcmQgPSAoPERhdGFWaWV3PnRoaXMuX2RhdGF2aWV3KS5nZXRDdXJyUmVjKCk7XHJcbiAgICBjdXJyUmVjLnNldEZsYWcodGhpcy5faWQsIFJlY29yZC5GTEFHX1VQREFURUQpO1xyXG4gICAgY3VyclJlYy5zZXRVcGRhdGVkKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0cnVlIGlmIHRoaXMgZmllbGQgaXMgYSBwYXJhbWV0ZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGlzUGFyYW0oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNQYXJhbTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIGlmIHRoZSBmaWVsZCBpbiBldmFsdWF0aW9uIHByb2Nlc3NcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGlzSW5FdmFsUHJvY2VzcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pbkV2YWxQcm9jZXNzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdHJ1ZSBpZiB0aGUgZmllbGQgaGFzIGFuIGluaXQgZXhwcmVzc2lvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgaGFzSW5pdEV4cCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pbml0RXhwICE9PSBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdHJ1ZSBpZiB0aGUgc2VydmVyIHJlY29tcHV0ZXMgdGhpcyBmaWVsZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgaXNTZXJ2ZXJSY21wKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlY29tcHV0ZSAhPT0gbnVsbCAmJiB0aGlzLl9yZWNvbXB1dGUuaXNTZXJ2ZXJSY21wKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgcGljdHVyZSBvZiB0aGUgZmllbGQgYXMgYSBzdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFBpY3R1cmUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9waWN0dXJlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIHRoZSBpZCBvZiB0aGUgbGluayB0aGlzIGZpZWxkIGJlbG9uZyB0b1xyXG4gIC8vLyAgIGlmIGRvZXMgbm90IGJlbG9uZyB0byBhbnkgbGluayByZXR1cm4gLTFcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldERhdGF2aWV3SGVhZGVySWQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhdmlld0hlYWRlcklkO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHdoZXRoZXIgdGhlIGZpZWxkIGJlbG9uZ3MgdG8gYSBsaW5rIG9yIG5vdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0IElzTGlua0ZpZWxkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzTGlua0ZsZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBldmFsdWF0ZXMgYW5kIHJldHVybnMgdGhlIGluaXQgZXhwcmVzc2lvbiB2YWx1ZSBvZiB0aGlzIGZpZWxkIChudWxsIGlmIHRoZXJlIGlzIG5vbilcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHB1YmxpYyBhc3luYyBnZXRJbml0RXhwVmFsKHJlczogUmVmUGFyYW08c3RyaW5nPiwgaXNOdWxsOiBSZWZQYXJhbTxib29sZWFuPik6IFByb21pc2U8dm9pZD4ge1xyXG5cclxuICAgIGlmICh0aGlzLl9pbml0RXhwICE9IG51bGwpXHJcbiAgICAgIGF3YWl0IHRoaXMuRXZhbHVhdGVJbml0RXhwcmVzc2lvbihyZXMsIGlzTnVsbCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJlcy52YWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKCk7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldHMgdGhlIGhhc0NoYW5nZUV2ZW50IGZsYWcgdG8gVFJVRVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0SGFzQ2hhbmdlRXZlbnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9oYXNDaGFuZ2VFdmVudCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0cmlldmVzIHRoZSBoYXNDaGFuZ2VFdmVudCBmbGFnXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGdldEhhc0NoYW5nZUV2ZW50KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hhc0NoYW5nZUV2ZW50O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCBoYXNab29tSGFuZGxlciB0byB0cnVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXRIYXNab29tSGFuZGxlcigpOiB2b2lkIHtcclxuICAgIHRoaXMuX2hhc1pvb21IYW5kbGVyID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGhhc1pvb21IYW5kbGVyXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBnZXRIYXNab29tSGFuZGxlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9oYXNab29tSGFuZGxlcjtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0cnVlIGlmIGluIHRoaXMgZmllbGQgd2lsbCBjYXVzZSBpbnZhbGlkYXRpb24gb2YgYWxsIHJvd3MgaW4gdGFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgaXNDYXVzZVRhYmxlSW52YWxpZGF0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhdXNlVGFibGVJbnZhbGlkYXRpb247XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IGNhdXNlIFRhYmxlIEludmFsaWRhdGlvbiBtZW1iZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY2F1c2VUYWJsZUludmFsaWRhdGlvblwiPjwvcGFyYW0+XHJcbiAgY2F1c2VUYWJsZUludmFsaWRhdGlvbihjYXVzZVRhYmxlSW52YWxpZGF0aW9uOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jYXVzZVRhYmxlSW52YWxpZGF0aW9uID0gY2F1c2VUYWJsZUludmFsaWRhdGlvbjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB3aGVuIHZhbHVlIGlzIG51bGwsIGdldCB2YWx1ZSB0aGF0IHJlcHJlc2VudCBudWxsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNoZWNrTnVsbEFyaXRobWV0aWNcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgZ2V0VmFsdWVGb3JOdWxsKGNoZWNrTnVsbEFyaXRobWV0aWM6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgbGV0IHZhbDogc3RyaW5nO1xyXG4gICAgaWYgKHRoaXMuTnVsbEFsbG93ZWQpIHtcclxuXHJcbiAgICAgIGlmIChjaGVja051bGxBcml0aG1ldGljICYmIHN1cGVyLmdldFRhc2soKS5nZXROdWxsQXJpdGhtZXRpYygpID09PSBDb25zdGFudHMuTlVMTF9BUklUSF9OVUxMSUZZKSB7XHJcbiAgICAgICAgdmFsID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5fbnVsbFZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLl9udWxsVmFsdWUgPSBzdXBlci5nZXRNYWdpY0RlZmF1bHRWYWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YWwgPSB0aGlzLl9udWxsVmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB2YWwgPSBzdXBlci5nZXRNYWdpY0RlZmF1bHRWYWx1ZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBjb250cm9sIHdoaWNoIGlzIGF0dGFjaGVkIHRvIHRoZSBmaWVsZCBhbmQgcmVzaWRlcyBvbiB0aGUgc2FtZSB0YXNrXHJcbiAgLy8vICAgb2Ygb2YgdGhlIGZpZWxkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgZ2V0Q3RybCgpOiBNZ0NvbnRyb2wge1xyXG4gICAgbGV0IGN0cmw6IE1nQ29udHJvbDtcclxuXHJcbiAgICBpZiAodGhpcy5fY29udHJvbHMgIT0gbnVsbCkge1xyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5fY29udHJvbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjdHJsID0gPE1nQ29udHJvbD50aGlzLl9jb250cm9scy5nZXRfSXRlbShpKTtcclxuICAgICAgICBpZiAoY3RybC5nZXRGb3JtKCkuZ2V0VGFzaygpID09PSB0aGlzLmdldFRhc2soKSlcclxuICAgICAgICAgIHJldHVybiBjdHJsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB1cGRhdGUgdGhlIGRpc3BsYXlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGFzeW5jIHVwZGF0ZURpc3BsYXkoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCBzdXBlci51cGRhdGVEaXNwbGF5V2l0aFZhbHVlKHRoaXMuZ2V0RGlzcFZhbHVlKCksIHRoaXMuaXNOdWxsKCkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgdmFsdWUgdG8gZGlzcGxheVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHVibGljIGdldERpc3BWYWx1ZSgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuaXNOdWxsKCkpIHtcclxuICAgICAgaWYgKHRoaXMuX251bGxEaXNwbGF5ICE9IG51bGwpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVsbERpc3BsYXkoKTtcclxuICAgICAgZWxzZSByZXR1cm4gc3VwZXIuZ2V0TWFnaWNEZWZhdWx0VmFsdWUoKTtcclxuICAgIH1cclxuICAgIGVsc2UgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyB0cnVlLCBpZiByYW5nZSBjb25kaXRpb24gc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhlIGllbGQgZHVyaW5nIGNvbXB1dGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldCBTaG91bGRDaGVja1JhbmdlSW5Db21wdXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuSXNMaW5rRmllbGQgfHwgKHRoaXMuSXNWaXJ0dWFsICYmICg8RGF0YVZpZXc+dGhpcy5fZGF0YXZpZXcpLkhhc01haW5UYWJsZSk7XHJcbiAgfVxyXG5cclxuICBJc0ZvckFyZ3VtZW50KHRhc2tIYXNQYXJhbWV0ZXJzOiBib29sZWFuKTogYm9vbGVhbiB7XHJcbiAgICAvLyBJZiB3ZSBuZWVkIGEgcGFyYW1ldGVyIGFuZCB0aGUgZmllbGQgaXMgbm90IG9uZVxyXG4gICAgaWYgKHRhc2tIYXNQYXJhbWV0ZXJzKSB7XHJcbiAgICAgIGlmICghdGhpcy5pc1BhcmFtKCkpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoIXRoaXMuSXNWaXJ0dWFsKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbn1cclxuIl19
|
|
646
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL2RhdGEvRmllbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLG9CQUFvQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN0SCxPQUFPLEVBQ0wsU0FBUyxFQUNULGlCQUFpQixFQUNqQixNQUFNLEVBQ04sWUFBWSxFQUNaLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLGVBQWUsRUFDZixZQUFZLEVBQ1osU0FBUyxFQUNWLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLFFBQVEsRUFDUixnQkFBZ0IsRUFDaEIsTUFBTSxFQUNOLFFBQVEsRUFFUixRQUFRLEVBQ1IsR0FBRyxFQUNILFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUcvRCxPQUFPLEVBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDNUQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFakQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFaEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFB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Q0FBQztTQUMxQzs7WUFDSSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUtELElBQUkseUJBQXlCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQWUsSUFBSSxDQUFDLFNBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBRUQsYUFBYSxDQUFDLGlCQUEwQjtRQUV0QyxJQUFJLGlCQUFpQixFQUFFO1lBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ25CLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FDRjthQUNJO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ25CLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7QUF6aENNLGlCQUFXLEdBQVksS0FBSyxDQUFDO0FBRXJCLFVBQUksR0FBYSxJQUFJLENBQUM7QUFDdEIsVUFBSSxHQUFhLElBQUksQ0FBQztBQWlDdEIseUJBQW1CLEdBQStCLElBQUksSUFBSSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FwcGxpY2F0aW9uRXhjZXB0aW9uLCBEZWJ1ZywgTGlzdCwgTk51bWJlciwgTlN0cmluZywgUmVmUGFyYW0sIGlzTnVsbE9yVW5kZWZpbmVkfSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuaW1wb3J0IHtcclxuICBDb25zdGFudHMsXHJcbiAgSW50ZXJuYWxJbnRlcmZhY2UsXHJcbiAgTG9nZ2VyLFxyXG4gIE1zZ0ludGVyZmFjZSxcclxuICBQSUNJbnRlcmZhY2UsXHJcbiAgU3RvcmFnZUF0dHJpYnV0ZSxcclxuICBTdHJVdGlsLFxyXG4gIFV0aWxTdHJCeXRlTW9kZSxcclxuICBYTUxDb25zdGFudHMsXHJcbiAgWG1sUGFyc2VyXHJcbn0gZnJvbSBcIkBtYWdpYy14cGEvdXRpbHNcIjtcclxuaW1wb3J0IHtcclxuICBCbG9iVHlwZSxcclxuICBEaXNwbGF5Q29udmVydG9yLFxyXG4gIEV4cFZhbCxcclxuICBGaWVsZERlZixcclxuICBNZ0NvbnRyb2xCYXNlLFxyXG4gIE5VTV9UWVBFLFxyXG4gIFBJQyxcclxuICBWZWN0b3JUeXBlXHJcbn0gZnJvbSBcIkBtYWdpYy14cGEvZ3VpXCI7XHJcblxyXG5pbXBvcnQge1llc05vRXhwfSBmcm9tIFwiLi4vZXhwL1llc05vRXhwXCI7XHJcbmltcG9ydCB7RXhwcmVzc2lvbn0gZnJvbSBcIi4uL2V4cC9FeHByZXNzaW9uXCI7XHJcbmltcG9ydCB7RXhwcmVzc2lvbkV2YWx1YXRvcn0gZnJvbSBcIi4uL2V4cC9FeHByZXNzaW9uRXZhbHVhdG9yXCI7XHJcbmltcG9ydCB7TWdGb3JtfSBmcm9tIFwiLi4vZ3VpL01nRm9ybVwiO1xyXG5pbXBvcnQge01nQ29udHJvbH0gZnJvbSBcIi4uL2d1aS9NZ0NvbnRyb2xcIjtcclxuaW1wb3J0IHtSZWNvbXB1dGUsIFJlY29tcHV0ZV9SY21wQnl9IGZyb20gXCIuLi9ydC9SZWNvbXB1dGVcIjtcclxuaW1wb3J0IHtCb3VuZGFyeX0gZnJvbSBcIi4uL3J0L0JvdW5kYXJ5XCI7XHJcbmltcG9ydCB7QXJndW1lbnRzTGlzdH0gZnJvbSBcIi4uL3J0L0FyZ3VtZW50c0xpc3RcIjtcclxuaW1wb3J0IHtDb25zdEludGVyZmFjZX0gZnJvbSBcIi4uL0NvbnN0SW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7VGFza30gZnJvbSBcIi4uL3Rhc2tzL1Rhc2tcIjtcclxuaW1wb3J0IHtSdW5UaW1lRXZlbnR9IGZyb20gXCIuLi9ldmVudC9SdW5UaW1lRXZlbnRcIjtcclxuaW1wb3J0IHtSZWNvcmR9IGZyb20gXCIuL1JlY29yZFwiO1xyXG5pbXBvcnQge0RhdGFWaWV3fSBmcm9tIFwiLi9EYXRhVmlld1wiO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gXCIuLi9lbnYvRW52aXJvbm1lbnRcIjtcclxuaW1wb3J0IHsgRmllbGRCYXNlIH0gZnJvbSBcIi4vRmllbGRCYXNlXCI7XHJcbmltcG9ydCB7IExhc3RGb2N1c2VkTWFuYWdlciB9IGZyb20gXCIuLi9ydC9MYXN0Rm9jdXNlZE1hbmFnZXJcIjtcclxuaW1wb3J0IHsgTGFuZ3VhZ2VEYXRhIH0gZnJvbSBcIi4uL2Vudi9MYW5ndWFnZURhdGFcIjtcclxuaW1wb3J0IHsgQWNjZXNzSGVscGVyIH0gZnJvbSBcIi4uL0FjY2Vzc0hlbHBlclwiO1xyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBkYXRhIGZvciA8ZmxkaCAuLi4+XHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBGaWVsZCBleHRlbmRzIEZpZWxkQmFzZSB7XHJcbiAgc3RhdGljIExFQVZFX0ZMQUdTOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIE5VTTA6IE5VTV9UWVBFID0gbnVsbDtcclxuICBwcml2YXRlIHN0YXRpYyBOVU0xOiBOVU1fVFlQRSA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgX2xpbmtFeHA6IFllc05vRXhwID0gbnVsbDtcclxuICBwcml2YXRlIF9yZWNvbXB1dGU6IFJlY29tcHV0ZSA9IG51bGw7XHJcbiAgQ2FjaGVUYWJsZUZsZElkeDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9jYXVzZVRhYmxlSW52YWxpZGF0aW9uOiBib29sZWFuID0gZmFsc2U7IC8vIGNoYW5nZSBpbiB0aGlzIGZpZWxkIHdpbGwgY2F1c2UgaW52YWxpZGF0aW9uIG9mIGFsbCByb3dzIGluIHRhYmxlXHJcbiAgcHJpdmF0ZSBfZm9ybTogTWdGb3JtID0gbnVsbDtcclxuICBwcml2YXRlIF9oYXNDaGFuZ2VFdmVudDogYm9vbGVhbiA9IGZhbHNlOyAvLyBpZiBUUlVFLCB0aGVyZSBpcyBhIGhhbmRsZXIgdG8gcnVuIHdoZW4gdGhpcyBmaWVsZCBpcyB1cGRhdGVkXHJcbiAgcHJpdmF0ZSBfaGFzWm9vbUhhbmRsZXI6IGJvb2xlYW4gPSBmYWxzZTsgLy8gaWYgVFJVRSwgdGhlcmUgaXMgYSB6b29tIGhhbmRsZXIgZm9yIHRoaXMgZmllbGRcclxuICBwcml2YXRlIF9pbkV2YWxQcm9jZXNzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaW5pdEV4cDogRXhwcmVzc2lvbiA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfaW52YWxpZFZhbHVlOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcml2YXRlIF9pc0xpbmtGbGQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gaWYgVFJVRSwgaXQgbWVhbnMgdGhhdCB0aGUgZmllbGQgYmVsb25ncyB0byBhIGxpbmtcclxuICBwcml2YXRlIF9pc1ZpcnR1YWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9kYXRhdmlld0hlYWRlcklkOiBudW1iZXIgPSAtMTsgIC8vIG1lbWJlcnMgcmVsYXRlZCB0byB0YWJsZSBjYWNoZVxyXG4gIHByaXZhdGUgX2xpbmtDcmVhdGU6IGJvb2xlYW4gPSBmYWxzZTsgLy8gSWYgdHJ1ZSB0aGVuIGl0J3MgYSByZWFsIGZpZWxkIHdoaWNoIGJlbG9uZ3MgdG8gbGluayBjcmVhdGUuXHJcbiAgTG9jYXRlOiBCb3VuZGFyeSA9IG51bGw7XHJcbiAgUmFuZ2U6IEJvdW5kYXJ5ID0gbnVsbDtcclxuICBwcml2YXRlIF9pc1BhcmFtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaXNFeHBvc2VkUm91dGVQYXJhbTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2lzRXhwb3NlZFRvQ2xpZW50OiBib29sZWFuID0gdHJ1ZTtcclxuICBwcml2YXRlIF9wcmV2SXNOdWxsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcHJldlZhbHVlOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX3RhYmxlTmFtZTogc3RyaW5nID0gbnVsbDtcclxuICBwcml2YXRlIF9pbmRleEluVGFibGU6IG51bWJlciA9IC0xO1xyXG5cclxuICBwcml2YXRlIF92aXJBc1JlYWw6IGJvb2xlYW4gPSBmYWxzZTsgLy8gSWYgdHJ1ZSB0aGVuIGEgdmlydHVhbCBmaWVsZCBpcyBjb21wdXRlZCBhcyByZWFsIChuZWVkZWQgZm9yIGxpbmsgcmV0IHZhbHVlKVxyXG4gIHByb3RlY3RlZCBfdmFsOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgbW9kaWZpZWRBdExlYXN0T25jZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2lzTnVsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2NsZWFyVmVjdG9yVHlwZTogYm9vbGVhbiA9IHRydWU7IC8vIGRvIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSB2ZWN0b3Igb2JqZWN0XHJcbiAgcHJpdmF0ZSBfdmVjdG9yVHlwZTogVmVjdG9yVHlwZSA9IG51bGw7IC8vIHRoZSB2ZWN0b3IgcmVwcmVzZW50YXRpb25cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgX3ZhcmlhYmxlQ2hhbmdlRXZ0czogTGlzdDxGaWVsZCB8IFJ1blRpbWVFdmVudD4gPSBuZXcgTGlzdCgpOyAvLyBmb3IgVmFyaWFibGUgQ2hhbmdlIGV2ZW50IGV4ZWN1dGlvbiwgcHJldmlvdXNseSB1c2VkIHZpYSBnZXRQZW5kaW5nVmFyQ2hhbmdlRXZlbnRzXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDVE9SXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRhdGF2aWV3XCI+YSByZWZlcmVuY2UgdG8gdGhlIGRhdGF2aWV3PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkXCI+Y291bnRlciBvZiB0aGUgZmllbGQgaW4gRmllbGRUYWJsZTwvcGFyYW0+XHJcbiAgY29uc3RydWN0b3IoZGF0YXZpZXc6IERhdGFWaWV3LCBpZDogbnVtYmVyKSB7XHJcbiAgICBzdXBlcihpZCk7XHJcbiAgICBpZiAoRmllbGQuTlVNMCA9PT0gbnVsbCkge1xyXG4gICAgICBGaWVsZC5OVU0wID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICAgIEZpZWxkLk5VTTEgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgICAgRmllbGQuTlVNMC5OVU1fNF9MT05HKDApO1xyXG4gICAgICBGaWVsZC5OVU0xLk5VTV80X0xPTkcoMSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZGF0YXZpZXcgPSBkYXRhdmlldztcclxuICAgIHRoaXMuX2xpbmtFeHAgPSBuZXcgWWVzTm9FeHAoZmFsc2UpO1xyXG4gICAgRmllbGREZWYuX2RlZmF1bHRfZGF0ZSA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZGlzcDJtZyhQSUNJbnRlcmZhY2UuREVGQVVMVF9EQVRFLFxyXG4gICAgICBuZXcgUElDKFwiNlwiLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMsIHN1cGVyLmdldFRhc2soKS5nZXRDb21wSWR4KCkpLFxyXG4gICAgICBzdXBlci5nZXRUYXNrKCkuZ2V0Q29tcElkeCgpLFxyXG4gICAgICBCbG9iVHlwZS5DT05URU5UX1RZUEVfVU5LTk9XTik7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0IFZpckFzUmVhbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl92aXJBc1JlYWw7XHJcbiAgfVxyXG5cclxuICBnZXQgSXNWaXJ0dWFsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzVmlydHVhbDtcclxuICB9XHJcblxyXG4gIGdldCBJc0V4cG9zZWRSb3V0ZVBhcmFtKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzRXhwb3NlZFJvdXRlUGFyYW07XHJcbiAgfVxyXG5cclxuICBnZXQgSXNFeHBvc2VkVG9DbGllbnQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNFeHBvc2VkVG9DbGllbnQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGluZGV4IGluIHRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXQgSW5kZXhJblRhYmxlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5kZXhJblRhYmxlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgZmllbGQgYXR0cmlidXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcm90ZWN0ZWQgc2V0QXR0cmlidXRlKGF0dHJpYnV0ZTogc3RyaW5nLCB2YWx1ZVN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaXNUYWdQcm9jZXNzZWQ6IGJvb2xlYW4gPSBzdXBlci5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZVN0cik7XHJcbiAgICBpZiAoIWlzVGFnUHJvY2Vzc2VkKSB7XHJcbiAgICAgIGxldCBkYXRhOiBzdHJpbmdbXSA9IFN0clV0aWwudG9rZW5pemUodmFsdWVTdHIsIFwiLFwiKTtcclxuICAgICAgaXNUYWdQcm9jZXNzZWQgPSB0cnVlO1xyXG4gICAgICBzd2l0Y2ggKGF0dHJpYnV0ZSkge1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9WSVJUVUFMOlxyXG4gICAgICAgICAgdGhpcy5faXNWaXJ0dWFsID0gKFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpICE9PSAwKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9QQVJBTTpcclxuICAgICAgICAgIHRoaXMuX2lzUGFyYW0gPSAoWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cikgIT09IDApO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLl9pc1ZpcnR1YWwgJiYgdGhpcy5faXNQYXJhbSlcclxuICAgICAgICAgIC8vIHBvc3NpYmxlIGVycm9yIC0gd2UgcmVseSBvbiB0aGUgb3JkZXIgb2YgWE1MIGF0dHJpYnV0ZXNcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFxyXG4gICAgICAgICAgICAgIFwiaW4gRmllbGQuaW5pdEVsZW1lbnRzKCk6IG5vbiB2aXJ0dWFsIGZpZWxkIGlzIGRlZmluZWQgYXMgYSBwYXJhbWV0ZXJcIik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRVhQT1NFRF9ST1VURV9QQVJBTVM6XHJcbiAgICAgICAgICB0aGlzLl9pc0V4cG9zZWRSb3V0ZVBhcmFtID0gKFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpICE9PSAwKTtcclxuICAgICAgICAgIGlmICghdGhpcy5faXNQYXJhbSAmJiB0aGlzLl9pc0V4cG9zZWRSb3V0ZVBhcmFtKVxyXG4gICAgICAgICAgLy8gcG9zc2libGUgZXJyb3IgLSB3ZSByZWx5IG9uIHRoZSBvcmRlciBvZiBYTUwgYXR0cmlidXRlc1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXHJcbiAgICAgICAgICAgICAgXCJpbiBGaWVsZC5pbml0RWxlbWVudHMoKTogbm9uIHBhcmFtZXRlciBmaWVsZCBpcyBkZWZpbmVkIGFzIGEgZXhwb3NlZCByb3V0ZSBwYXJhbWV0ZXJcIik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRVhQT1NFRF9UT19DTElFTlQ6XHJcbiAgICAgICAgICAvLyBUaGUgZmxhZyB3YXMgc2VyaWFsaXplZCBvbmx5IGZvciBzZXJ2ZXIgdmFyaWFibGUgKGV4cG9zZSB0byBjbGllbnQgPSAwIClcclxuICAgICAgICAgIGlmIChYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKSA9PSAwKVxyXG4gICAgICAgICAgICB0aGlzLl9pc0V4cG9zZWRUb0NsaWVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1ZJUl9BU19SRUFMOlxyXG4gICAgICAgICAgdGhpcy5fdmlyQXNSZWFsID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0xOS19DUkVBVEU6XHJcbiAgICAgICAgICB0aGlzLl9saW5rQ3JlYXRlID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0xOS0VYUDpcclxuICAgICAgICAgIHRoaXMuX2xpbmtFeHAuc2V0VmFsKDxUYXNrPih0aGlzLmdldFRhc2soKSksIHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9UQUJMRV9OQU1FOlxyXG4gICAgICAgICAgdGhpcy5fdGFibGVOYW1lID0gWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9JTkRFWF9JTl9UQUJMRTpcclxuICAgICAgICAgIHRoaXMuX2luZGV4SW5UYWJsZSA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0lOSVQ6XHJcbiAgICAgICAgICBsZXQgZXhwTnVtOiBudW1iZXIgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIHRoaXMuX2luaXRFeHAgPSAoPFRhc2s+dGhpcy5nZXRUYXNrKCkpLmdldEV4cEJ5SWQoZXhwTnVtKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfTkFNRToge1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ0hBQ0hFRF9GTERfSUQ6XHJcbiAgICAgICAgICAvLyBNR19BVFRSX0NIQUNIRURfRkxEIGlzIGluIHRoZSBmb3JtYXQgb2YgY2FjaGVkVGFibGVJZCxmbGRcclxuICAgICAgICAgIGlmIChkYXRhWzBdICE9IFwiXCIpXHJcbiAgICAgICAgICAgIHRoaXMuQ2FjaGVUYWJsZUZsZElkeCA9IE5OdW1iZXIuUGFyc2UoZGF0YVsxXSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfTE9DQVRFOlxyXG4gICAgICAgICAgLy8gbG9jYXRlIGlzIGluIHRoZSBmb3JtYXQgb2YgbWF4LG1pbiBleHByZXNzaW9uIG51bSAoLTEgaWYgbm9uIGV4aXN0cylcclxuICAgICAgICAgIHRoaXMuTG9jYXRlID0gbmV3IEJvdW5kYXJ5KDxUYXNrPnRoaXMuZ2V0VGFzaygpLCBOTnVtYmVyLlBhcnNlKGRhdGFbMV0pLCBOTnVtYmVyLlBhcnNlKGRhdGFbMF0pLCB0aGlzLmdldFR5cGUoKSwgdGhpcy5nZXRTaXplKCksIHRoaXMuQ2FjaGVUYWJsZUZsZElkeCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfUkFOR0U6XHJcbiAgICAgICAgICAvLyByYW5nZSBpcyBpbiB0aGUgZm9ybWF0IG9mIG1heCxtaW4gZXhwcmVzc2lvbiBudW0gKC0xIGlmIG5vbiBleGlzdHMpXHJcbiAgICAgICAgICB0aGlzLlJhbmdlID0gbmV3IEJvdW5kYXJ5KDxUYXNrPnRoaXMuZ2V0VGFzaygpLCBOTnVtYmVyLlBhcnNlKGRhdGFbMV0pLCBOTnVtYmVyLlBhcnNlKGRhdGFbMF0pLCB0aGlzLmdldFR5cGUoKSwgdGhpcy5nZXRTaXplKCksIHRoaXMuQ2FjaGVUYWJsZUZsZElkeCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfTElOSzpcclxuICAgICAgICAgIHRoaXMuX2RhdGF2aWV3SGVhZGVySWQgPSBOTnVtYmVyLlBhcnNlKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9JU19MSU5LX0ZJRUxEOlxyXG4gICAgICAgICAgdGhpcy5faXNMaW5rRmxkID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGlzVGFnUHJvY2Vzc2VkID0gZmFsc2U7XHJcbiAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coTlN0cmluZy5Gb3JtYXQoXCJVbnJlY29nbml6ZWQgYXR0cmlidXRlOiAnezB9J1wiLCBhdHRyaWJ1dGUpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNUYWdQcm9jZXNzZWQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBSZWNvbXB1dGUgT2JqZWN0IG9mIHRoaXMgZmllbGRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVjb21wUmVmXCI+cmVmZXJlbmNlIHRvIFJlY29tcHV0ZSBPYmplY3Q8L3BhcmFtPlxyXG4gIHNldFJlY29tcHV0ZShyZWNvbXBSZWY6IFJlY29tcHV0ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fcmVjb21wdXRlID0gcmVjb21wUmVmO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBSZW1vdmVzIHRoZSBzcGVjaWZpYyBzdWJmb3JtIHRhc2sgZnJvbSB0aGUgcmVjb21wdXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdWJmb3JtVGFza1wiPjwvcGFyYW0+XHJcbiAgUmVtb3ZlU3ViZm9ybUZyb21SZWNvbXB1dGUoc3ViZm9ybVRhc2s6IFRhc2spOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9yZWNvbXB1dGUgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5fcmVjb21wdXRlLlJlbW92ZVN1YmZvcm0oc3ViZm9ybVRhc2spO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBJbnNlcnQgdGhlIHNwZWNpZmljIHN1YmZvcm0gdGFzayBpbnRvIHRoZSBmaWVsZCByZWNvbXB1dGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN1YmZvcm1UYXNrXCI+PC9wYXJhbT5cclxuICBBZGRTdWJmb3JtUmVjb21wdXRlKHN1YmZvcm1UYXNrOiBUYXNrKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fcmVjb21wdXRlID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX3JlY29tcHV0ZSA9IG5ldyBSZWNvbXB1dGUoKTtcclxuICAgICAgdGhpcy5fcmVjb21wdXRlLlRhc2sgPSA8VGFzaz5zdXBlci5nZXRUYXNrKCk7XHJcbiAgICAgIHRoaXMuX3JlY29tcHV0ZS5Pd25lckZsZCA9IHRoaXM7XHJcbiAgICAgIHRoaXMuX3JlY29tcHV0ZS5SY21wTW9kZSA9IFJlY29tcHV0ZV9SY21wQnkuQ0xJRU5UO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fcmVjb21wdXRlLkFkZFN1YmZvcm0oc3ViZm9ybVRhc2spO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgYSByZWZlcmVuY2UgdG8gYSBjb250cm9sIGF0dGFjaGVkIHRvIHRoaXMgZmllbGRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RybFwiPnRoZSBjb250cm9sIHdoaWNoIGlzIGF0dGFjaGVkIHRvIHRoaXMgZmllbGQ8L3BhcmFtPlxyXG4gIFNldENvbnRyb2woY3RybDogTWdDb250cm9sQmFzZSk6IHZvaWQge1xyXG4gICAgc3VwZXIuU2V0Q29udHJvbChjdHJsKTtcclxuXHJcbiAgICBpZiAodGhpcy5faXNWaXJ0dWFsICYmIGN0cmwuSXNSZXBlYXRhYmxlICYmIHRoaXMuX2luaXRFeHAgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5fY2F1c2VUYWJsZUludmFsaWRhdGlvbiA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY29tcHV0ZSB0aGUgZmllbGQgaW5pdCBleHByZXNzaW9uIG9yIGdldCBpdHMgdmFsdWUgZnJvbSB0aGUgZGF0YXZpZXcsIHNldFxyXG4gIC8vLyAgIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgKGFuZCB1cGRhdGUgdGhlIGRpc3BsYXkpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlY29tcHV0ZVwiPnRlbGxzIHRoZSBjb21wdXRlIHRvIHN0YXJ0IHRoZSByZWNvbXB1dGUgY2hhaW4gYW5kIHJlY29tcHV0ZVxyXG4gIC8vLyAgIHRoZSBleHByZXNzaW9uIG9mIHRoaXMgZmllbGQgKGlmIGl0IGlzIHJlYWwpXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgcHVibGljIGFzeW5jIGNvbXB1dGUocmVjb21wdXRlOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgcmVzdWx0OiBSZWZQYXJhbTxzdHJpbmc+ID0gbmV3IFJlZlBhcmFtKHRoaXMuZ2V0VmFsdWUoZmFsc2UpKTtcclxuICAgIGxldCBpc051bGxGbGQ6IFJlZlBhcmFtPGJvb2xlYW4+ID0gbmV3IFJlZlBhcmFtKHRoaXMuX2lzTnVsbCk7XHJcbiAgICBsZXQgcmVjID0gKDxEYXRhVmlldz50aGlzLl9kYXRhdmlldykuZ2V0Q3VyclJlYygpO1xyXG4gICAgbGV0IHRhc2sgPSA8VGFzaz5zdXBlci5nZXRUYXNrKCk7XHJcblxyXG4gICAgbGV0IHplcm9SZWFsOiBib29sZWFuID0gdGhpcy5fbGlua0NyZWF0ZSAmJiByZWMuSW5Db21wdXRlICYmICFyZWNvbXB1dGUgJiYgdGFzay5nZXRNb2RlKCkgPT09IENvbnN0YW50cy5UQVNLX01PREVfQ1JFQVRFO1xyXG4gICAgLy8gUUNSICM5OTkwMjQgLSB6ZXJvIGxuayBjcmVhdGUgdmFsdWVzIGR1cmluZyBjb21wdXRlXHJcblxyXG4gICAgaWYgKHRoaXMuX2Zvcm0gPT0gbnVsbClcclxuICAgICAgdGhpcy5fZm9ybSA9IDxNZ0Zvcm0+dGFzay5nZXRGb3JtKCk7XHJcblxyXG4gICAgLy8gbm8gbmVlZCB0byB6ZXJvIHJlYWxzIGlmIHdlIGFyZSByZWNvdmVyaW5nIGEgcmVjb3JkLlxyXG4gICAgaWYgKCh0aGlzLl9mb3JtICE9IG51bGwgJiYgdGhpcy5fZm9ybS5JblJlc3RvcmUpIHx8IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLkdldFN0b3BFeGVjdXRpb25GbGFnKCkpXHJcbiAgICAgIHplcm9SZWFsID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IHJ0RXZ0OiBSdW5UaW1lRXZlbnQgPSBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5nZXRMYXN0UnRFdmVudCgpO1xyXG4gICAgbGV0IGNvbXB1dGVPbkNhbmNlbEV2ZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZiAocnRFdnQgIT0gbnVsbClcclxuICAgICAgY29tcHV0ZU9uQ2FuY2VsRXZlbnQgPSBydEV2dC5nZXRJbnRlcm5hbENvZGUoKSA9PT0gSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NBTkNFTDtcclxuXHJcbiAgICAvLyB2aXJ0dWFsIGFzIHJlYWwgaXMgZXNwZWNpYWxseSBmb3IgZmllbGRzIHdoaWNoIGFyZSB1c2VkIGFzIGEgXCJyZXR1cm4gdmFsdWVcIlxyXG4gICAgLy8gb2YgYSBsaW5rLiBUaGVpciB2YWx1ZSBpcyByZXR1cm5lZCBieSB0aGUgbGluayByZXN1bHQgYW5kIG5vdCBieSB0aGUgaW5pdCBleHByZXNzaW9uLlxyXG4gICAgLy8gd2hlbiB0aGUgZm9ybSBpcyByZXN0b3JpbmcgdGhlIGN1cnIgcm93IHdlIHNob3VsZG4ndCBjb21wdXRlIHRoZSBpbml0IGV4cHJlc3Npb25cclxuICAgIC8vIGJ1dCB0byB1c2UgdGhlIHZhbHVlIGZyb20gdGhlIHJlY29yZCAoYnkgZ2V0VmFsdWUpXHJcbiAgICAvLyBRQ1IjOTI2NzU4OiBXaGVuIFRhc2sncyBtb2RlIGlzIENyZWF0ZSwgaW5pdCBmb3IgcmVhbCBmaWVsZCBzaG91bGQgYmUgZXZhbHVhdGVkIG9ubHkgd2hlbiBpdCBjb21lcyBmb3IgY2FuY2VsIGV2ZW50KGxhc3QgcnVudGltZSBldmVudCBpcyBjYW5jZWwgZXZlbnQpLlxyXG4gICAgLy8gV2hpbGUgY3JlYXRpbmcgYSBuZXcgcmVjb3JkLCBpbml0IHdpbGwgYmUgZXZhbHVhdGVkIGJlY2F1c2Ugb2YgY29uZGl0aW9uIHJlYy5pc05ld1JlYygpLiAoSXQgaXMgdGhlIHJlZml4IG9mIFFDUiM5OTQwNzIpXHJcbiAgICBpZiAoIXRoaXMuX3ZpckFzUmVhbCAmJiAodGhpcy5fZm9ybSA9PSBudWxsIHx8ICF0aGlzLl9mb3JtLkluUmVzdG9yZSkgJiZcclxuICAgICAgKCh0aGlzLl9pc1ZpcnR1YWwgfHwgKHRhc2suZ2V0TW9kZSgpID09PSBDb25zdGFudHMuVEFTS19NT0RFX0NSRUFURSAmJiBjb21wdXRlT25DYW5jZWxFdmVudCkpIHx8IHJlY29tcHV0ZSB8fFxyXG4gICAgICAgIHplcm9SZWFsIHx8IHJlYy5pc05ld1JlYygpICYmICFyZWMuaXNDb21wdXRlZCgpKSkge1xyXG4gICAgICBpZiAoIXRhc2suRGF0YVZpZXcuaXNFbXB0eURhdGF2aWV3KCkgfHwgKHRhc2suRGF0YVZpZXcuaXNFbXB0eURhdGF2aWV3KCkgJiYgIXRoaXMuUGFydE9mRGF0YXZpZXcpKSB7XHJcbiAgICAgICAgLy8gUUNSICM3NzU1MDg6IGZvciBkYXRhdmlld3MsIHdoaWNoIGFyZSBjb21wdXRlZCBieSB0aGUgc2VydmVyLCBwcmV2ZW50XHJcbiAgICAgICAgLy8gY29tcHV0aW5nIHRoZSBpbml0IGV4cHJlc3Npb24gd2hpbGUgaW4gY29tcHV0ZSBvZiB0aGUgcmVjb3JkIGJlY2F1c2UgdGhlXHJcbiAgICAgICAgLy8gc2VydmVyIGhhdmUgYWxyZWFkeSBkb25lIGl0XHJcbiAgICAgICAgaWYgKCh0aGlzLl9pc1ZpcnR1YWwgfHwgdGFzay5nZXRNb2RlKCkgPT09IENvbnN0YW50cy5UQVNLX01PREVfQ1JFQVRFKSB8fCAoPERhdGFWaWV3PnRoaXMuX2RhdGF2aWV3KS5jb21wdXRlQnlDbGllbnQoKSB8fFxyXG4gICAgICAgICAgIXJlYy5JbkNvbXB1dGUgfHwgemVyb1JlYWwgfHwgcmVjLmxhdGVDb21wdXRlKCkpIHtcclxuICAgICAgICAgIGlmICh0aGlzLl9pbml0RXhwICE9IG51bGwpIHtcclxuXHJcblxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLkV2YWx1YXRlSW5pdEV4cHJlc3Npb24ocmVzdWx0LCBpc051bGxGbGQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAoemVyb1JlYWwpXHJcbiAgICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5faW52YWxpZFZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX3ByZXZWYWx1ZSA9IHJlc3VsdC52YWx1ZTtcclxuICAgICAgdGhpcy5fcHJldklzTnVsbCA9IGlzTnVsbEZsZC52YWx1ZTtcclxuICAgIH1cclxuICAgIGF3YWl0IHRoaXMuc2V0VmFsdWUocmVzdWx0LnZhbHVlLCBpc051bGxGbGQudmFsdWUsIHJlY29tcHV0ZSwgZmFsc2UsIHJlY29tcHV0ZSAmJiAhdGhpcy5faXNWaXJ0dWFsLCBmYWxzZSwgZmFsc2UpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gZXZhbHVhdGUgaW5pdCBleHByZXNzaW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXN1bHRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImlzTnVsbEZsZFwiPjwvcGFyYW0+XHJcbiAgYXN5bmMgRXZhbHVhdGVJbml0RXhwcmVzc2lvbihyZXN1bHQ6IFJlZlBhcmFtPHN0cmluZz4sIGlzTnVsbEZsZDogUmVmUGFyYW08Ym9vbGVhbj4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIERlYnVnLkFzc2VydCh0aGlzLl9pbml0RXhwICE9PSBudWxsKTtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuX2luRXZhbFByb2Nlc3MgPSB0cnVlO1xyXG4gICAgICByZXN1bHQudmFsdWUgPSBhd2FpdCB0aGlzLl9pbml0RXhwLmV2YWx1YXRlV2l0aFJlc3VsdFR5cGVBbmRMZW5ndGgodGhpcy5fdHlwZSwgdGhpcy5fc2l6ZSk7XHJcbiAgICB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgdGhpcy5faW5FdmFsUHJvY2VzcyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTnVsbEZsZC52YWx1ZSA9IChyZXN1bHQudmFsdWUgPT09IG51bGwpO1xyXG4gICAgaWYgKGlzTnVsbEZsZC52YWx1ZSAmJiB0aGlzLk51bGxBbGxvd2VkKSB7XHJcbiAgICAgIHJlc3VsdC52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vLy8gPHN1bW1hcnk+XHJcbiAgLy8vLy9cclxuICAvLy8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vLy8gPHBhcmFtIG5hbWU9XCJyZWNvbXB1dGVcIj48L3BhcmFtPlxyXG4gIC8vLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICAvLyBib29sIFNob3VsZFJlY29tcHV0ZShib29sIHJlY29tcHV0ZSlcclxuICAvLyB7XHJcbiAgLy8gICBpZiAocmVjb21wdXRlKVxyXG4gIC8vICAge1xyXG4gIC8vICAgICAgYm9vbCBjb21wdXRlZEJ5RmV0Y2ggPSAhSXNWaXJ0dWFsIHx8IFZpckFzUmVhbDtcclxuICAvLyAgICAgIGlmIChjb21wdXRlZEJ5RmV0Y2gpXHJcbiAgLy8gICAgICB7XHJcbiAgLy8gICAgICAgICBUYXNrIHRhc2sgPSAoVGFzaylnZXRUYXNrKCk7XHJcbiAgLy8gICAgICAgICBEYXRhdmlld0hlYWRlckJhc2UgaGVhZGVyID0gdGFzay5nZXREYXRhdmlld0hlYWRlcnMoKS5nZXREYXRhdmlld0hlYWRlckJ5SWQoX2RhdGF2aWV3SGVhZGVySWQpO1xyXG4gIC8vICAgICAgICAgLy9sb2NhbCBkYXRhdmFzZSBhbHJlYWR5IGNvbXB1dGVkIHRoZSByZWNvcmQgYXMgc2VydmVyIGRvZXNcclxuICAvLyAgICAgICAgIGlmIChoZWFkZXIgaXMgTG9jYWxEYXRhdmlld0hlYWRlcilcclxuICAvLyAgICAgICAgIHtcclxuICAvLyAgICAgICAgICAgICB2YXIgcmVjID0gKChEYXRhVmlldylfZGF0YXZpZXcpLmdldEN1cnJSZWMoKTtcclxuICAvLyAgICAgICAgICAgICByZXR1cm4gIXJlYy5JbkNvbXB1dGU7XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICB9XHJcbiAgLy8gICB9XHJcbiAgLy8gICByZXR1cm4gcmVjb21wdXRlO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIGZyb20gdGhlIGN1cnJlbnQgcmVjb3JkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNoZWNrTnVsbEFyaXRobWV0aWNcIj5pZiB0cnVlIHRoZW4gdGhlIG51bGwgYXJpdGhtZXRpYyBlbnZpcm9ubWVudFxyXG4gIC8vLyAgIHNldHRpbmcgaXMgdXNlZCB0byByZXR1cm4gbnVsbCB3aGVuIFwibnVsbGlmeVwiIGNvbXB1dGF0aW9uIGlzIG5lZWRlZFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIGdldFZhbHVlKGNoZWNrTnVsbEFyaXRobWV0aWM6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgLy8gaWYgd2UgbmVlZCB0byByZXR1cm4gdGhlIG9yaWdpbmFsIHZhbHVlIG9mIHRoZSBmaWVsZFxyXG4gICAgaWYgKCg8VGFzaz5zdXBlci5nZXRUYXNrKCkpLmdldEV2YWxPbGRWYWx1ZXMoKSlcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3JpZ2luYWxWYWx1ZSgpO1xyXG4gICAgaWYgKHRoaXMuX2ludmFsaWRWYWx1ZSlcclxuICAgICAgdGhpcy50YWtlVmFsRnJvbVJlYygpO1xyXG4gICAgaWYgKHRoaXMuX2lzTnVsbClcclxuICAgICAgdGhpcy5fdmFsID0gdGhpcy5nZXRWYWx1ZUZvck51bGwoY2hlY2tOdWxsQXJpdGhtZXRpYyk7XHJcbiAgICByZXR1cm4gdGhpcy5fdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuZXdWYWx1ZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpc051bGxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBpc0NoYW5nZWQobmV3VmFsdWU6IHN0cmluZywgaXNOdWxsOiBib29sZWFuKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJldlZhbHVlICE9PSBudWxsICYmICghKHRoaXMuX3ByZXZWYWx1ZSA9PT0gbmV3VmFsdWUpIHx8IHRoaXMuX3ByZXZJc051bGwgIT09IGlzTnVsbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgYnkgdGFraW5nIGl0IGZyb20gdGhlIGN1cnJlbnQgcmVjb3JkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICB0YWtlVmFsRnJvbVJlYygpOiB2b2lkIHtcclxuICAgIGxldCByZWM6IFJlY29yZCA9ICg8RGF0YVZpZXc+dGhpcy5fZGF0YXZpZXcpLmdldEN1cnJSZWMoKTtcclxuICAgIGlmIChyZWMgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5fdmFsID0gcmVjLkdldEZpZWxkVmFsdWUodGhpcy5faWQpO1xyXG4gICAgICB0aGlzLl9pc051bGwgPSByZWMuSXNOdWxsKHRoaXMuX2lkKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9pbnZhbGlkVmFsdWUpIHtcclxuICAgICAgaWYgKHJlYyAhPT0gbnVsbCAmJiB0aGlzLl9jYXVzZVRhYmxlSW52YWxpZGF0aW9uICYmIHRoaXMuaXNDaGFuZ2VkKHRoaXMuX3ZhbCwgdGhpcy5faXNOdWxsKSAmJiB0aGlzLl9mb3JtICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmVjLnNldENhdXNlSW52YWxpZGF0aW9uKHRydWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX3ByZXZWYWx1ZSA9IHRoaXMuX3ZhbDtcclxuICAgICAgdGhpcy5fcHJldklzTnVsbCA9IHRoaXMuX2lzTnVsbDtcclxuICAgICAgdGhpcy5faW52YWxpZFZhbHVlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBaRVJPIFRIRSBWRUNUT1IgT0JKRUNUXHJcbiAgICB0aGlzLl92ZWN0b3JUeXBlID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIG9yaWdpbmFsIHZhbHVlIG9mIHRoZSBmaWVsZCB3aXRob3V0IHVwZGF0aW5nIHRoZSBmaWVsZCB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0T3JpZ2luYWxWYWx1ZSgpOiBzdHJpbmcge1xyXG4gICAgbGV0IG9yaWdpbmFsUmVjOiBSZWNvcmQgPSAoPERhdGFWaWV3PnRoaXMuX2RhdGF2aWV3KS5nZXRPcmlnaW5hbFJlYygpO1xyXG5cclxuICAgIGlmIChvcmlnaW5hbFJlYy5Jc051bGwodGhpcy5faWQpKVxyXG4gICAgICByZXR1cm4gdGhpcy5nZXRNYWdpY0RlZmF1bHRWYWx1ZSgpO1xyXG5cclxuICAgIHJldHVybiBvcmlnaW5hbFJlYy5HZXRGaWVsZFZhbHVlKHRoaXMuX2lkKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBpcyBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgZmllbGQgd2FzIG51bGxcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGlzT3JpZ2luYWxWYWx1ZU51bGwoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgb3JpZ2luYWxSZWM6IFJlY29yZCA9ICg8RGF0YVZpZXc+dGhpcy5fZGF0YXZpZXcpLmdldE9yaWdpbmFsUmVjKCk7XHJcbiAgICByZXR1cm4gb3JpZ2luYWxSZWMuSXNOdWxsKHRoaXMuX2lkKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdmFsdWUgYnkgcmVjIGlkeFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZHhcIj5yZWNvcmQgaWR4PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldFZhbHVlQnlSZWNJZHgoaWR4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IHJlYzogUmVjb3JkID0gKDxEYXRhVmlldz50aGlzLl9kYXRhdmlldykuZ2V0UmVjQnlJZHgoaWR4KTtcclxuICAgIGxldCBmaWVsZFZhbHVlOiBzdHJpbmcgPSByZWMuR2V0RmllbGRWYWx1ZSh0aGlzLl9pZCk7XHJcbiAgICByZXR1cm4gcmVjLklzTnVsbCh0aGlzLl9pZCkgPyB0aGlzLmdldFZhbHVlRm9yTnVsbChmYWxzZSkgOiBmaWVsZFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBtb2RpZmllZEF0TGVhc3RPbmNlIGZsYWdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgZ2V0TW9kaWZpZWRBdExlYXN0T25jZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGlmaWVkQXRMZWFzdE9uY2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIG51bGwgaWYgdmFsdWUgb2YgZmllbGQgZm9yIHRoZSByZWNvcmQgaXMgbnVsbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZHhcIj5yZWNvcmQgaWR4PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGlzTnVsbEJ5UmVjSWR4KGlkeDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVjOiBSZWNvcmQgPSAoPERhdGFWaWV3PnRoaXMuX2RhdGF2aWV3KS5nZXRSZWNCeUlkeChpZHgpO1xyXG4gICAgcmV0dXJuIHJlYy5Jc051bGwodGhpcy5faWQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdHJ1ZSBpZiBmaWVsZCdzIHZhbHVlIGZvciByZWNvcmQgaWR4IHJlY2lkeCBlcXVhbHMgdG8gbWdWYWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibWdWYWx1ZVwiPnZhbHVlIHRvIGNvbXBhcmUgIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaXNOdWxsRmxkXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0eXBlXCI+dHlwZSBvZiB2YWx1ZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVjSWR4XCI+cmVjSWR4IG9mIHRoZSByZWNvcmQ8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgaXNFcXVhbChtZ1ZhbHVlOiBzdHJpbmcsIGlzTnVsbEZsZDogYm9vbGVhbiwgdHlwZTogU3RvcmFnZUF0dHJpYnV0ZSwgcmVjSWR4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGxldCByZWMgPSA8UmVjb3JkPigoPERhdGFWaWV3PnRoaXMuX2RhdGF2aWV3KS5nZXRSZWNCeUlkeChyZWNJZHgpKTtcclxuICAgIGxldCB2YWxzRXF1YWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGlmIChyZWMgIT0gbnVsbCkge1xyXG4gICAgICBsZXQgZmllbGRWYWx1ZTogc3RyaW5nID0gcmVjLkdldEZpZWxkVmFsdWUodGhpcy5faWQpO1xyXG4gICAgICBsZXQgZmllbHNJc051bGw6IGJvb2xlYW4gPSByZWMuSXNOdWxsKHRoaXMuX2lkKTtcclxuICAgICAgdmFsc0VxdWFsID0gRXhwcmVzc2lvbkV2YWx1YXRvci5tZ1ZhbHNFcXVhbChmaWVsZFZhbHVlLCBmaWVsc0lzTnVsbCwgdGhpcy5fdHlwZSwgbWdWYWx1ZSwgaXNOdWxsRmxkLCB0eXBlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWxzRXF1YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZCB3aGljaCBzaG91bGQgYmUgaW5zZXJ0ZWQgaW50byBhIG5ldyByZWMsIHdoZW4gaXRcclxuICAvLy8gICBpcyBjcmVhdGVkLiBUaGlzIHdpbGwgdXN1YWxseSBiZSB0aGUgZmllbGQncyBkZWZhdWx0IHZhbHVlLCB1bmxlc3MgdGhlcmUgaXMgYVxyXG4gIC8vLyAgIHZpcnR1YWwgZmllbGQgd2l0aG91dCBhbiBpbml0IGV4cHJlc3Npb24uIEluIHRoaXMgY2FzZSwgdGhlIGN1cnJlbnQgdmFsdWUgd2lsbCBiZVxyXG4gIC8vLyAgIHJldHVybmVkLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY2xvYmJlcmVkT25seVwiPmNsb2JiZXJlZE9ubHkgaXMgdHJ1ZSBpZiB3ZSB3YW50IHRvIG9ubHkgdGFrZSB0aGUgdmFsdWVzIG9mIHRoZSB2aXJ0dWFscyB3aXRoIG5vIGluaXQgZXhwcmVzc2lvbjwvcGFyYW0+XHJcbiAgZ2V0TmV3UmVjVmFsdWUoY2xvYmJlcmVkT25seTogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5faXNWaXJ0dWFsICYmIHRoaXMuX2luaXRFeHAgPT0gbnVsbClcclxuICAgICAgcmV0dXJuIHRoaXMuX3ZhbDtcclxuICAgIHJldHVybiAhY2xvYmJlcmVkT25seSA/IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKCkgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2V0VmFsdWVBbmRTdGFydFJlY29tcHV0ZSh2YWw6IHN0cmluZywgaXNOdWxsRmxkOiBib29sZWFuLCByZWNvbXB1dGU6IGJvb2xlYW4sIHNldFJlY29yZFVwZGF0ZWQ6IGJvb2xlYW4sIGlzQXJnVXBkYXRlOiBib29sZWFuLCBlbmZvcmNlVmFyaWFibGVDaGFuZ2U/OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoZW5mb3JjZVZhcmlhYmxlQ2hhbmdlKSlcclxuICAgICAgZW5mb3JjZVZhcmlhYmxlQ2hhbmdlID0gZmFsc2U7XHJcbiAgICBhd2FpdCB0aGlzLnNldFZhbHVlQW5kU3RhcnRSZWNvbXB1dGVfMSh2YWwsIGlzTnVsbEZsZCwgcmVjb21wdXRlLCBzZXRSZWNvcmRVcGRhdGVkLCBpc0FyZ1VwZGF0ZSwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNhbGwgdGhlIHNldCB2YWx1ZSBmdW5jdGlvbiBmcm9tIHRoZSBcIm91dGVyXCIgd29ybGQuIFRoaXMgd2lsbCB0cmlnZ2VyIHRoZSByZWNvbXB1dGVcclxuICAvLy8gICBjaGFpbi4gV2hlbiByZWNvbXB1dGUgaXMgZG9uZSAtIHJlZnJlc2ggY29udHJvbHMgd2hpY2ggYXJlIGV4cHJlc3Npb24gZGVwZW5kZW50LlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsXCI+dGhlIG5ldyB2YWx1ZSBvZiB0aGUgZmllbGQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImlzTnVsbEZsZFwiPmlmIHRydWUgdGhlbiB0aGUgdmFsdWUgaXMgbnVsbDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVjb21wdXRlXCI+c3RhdGVzIHdoZXRoZXIgdG8gZXhlY3V0ZSByZWNvbXB1dGUgd2hlbiBzZXR0aW5nIHRoZSB2YWx1ZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVjb21wdXRlT25seVdoZW5VcGRhdGVWYWx1ZVwiPjogZG8gdGhlIHJlY29tcHV0ZSBvbmx5IHdoZW4gdGhlIHZhbHVlIHdhcyB1cGRhdGU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInNldFJlY29yZFVwZGF0ZWRcIj50ZWxscyB3aGV0aGVyIHRvIGRlZmluZSB0aGUgcmVjb3JkIGFzIHVwZGF0ZWQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImlzQXJnVXBkYXRlXCI+dHJ1ZSBpZiBjYWxsZWQgZm9yIGhhbmRsZXIgYXJndW1lbnQtcGFyYW1ldGVyIGNvcHk8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImVuZm9yY2VWYXJpYWJsZUNoYW5nZVwiPmV4ZWN1dGUgdmFpYWJsZSBjaGFuZ2UgZXZlbiB3aGVuIHJlY29tcHV0ZSBpcyBmYWxzZTwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBzZXRWYWx1ZUFuZFN0YXJ0UmVjb21wdXRlXzEodmFsOiBzdHJpbmcsIGlzTnVsbEZsZDogYm9vbGVhbiwgcmVjb21wdXRlOiBib29sZWFuLCBzZXRSZWNvcmRVcGRhdGVkOiBib29sZWFuLCBpc0FyZ1VwZGF0ZTogYm9vbGVhbiwgZW5mb3JjZVZhcmlhYmxlQ2hhbmdlOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgdGFzayA9IDxUYXNrPnRoaXMuZ2V0VGFzaygpO1xyXG4gICAgaWYgKHRhc2sgIT0gbnVsbClcclxuICAgICAgdGFzay5WZXdGaXJzdCsrO1xyXG5cclxuICAgIGxldCB2YWx1ZVdhc1VwZGF0ZWQ6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLnNldFZhbHVlKHZhbCwgaXNOdWxsRmxkLCByZWNvbXB1dGUsIHNldFJlY29yZFVwZGF0ZWQsICF0aGlzLl9pc1ZpcnR1YWwsIGlzQXJnVXBkYXRlLCBlbmZvcmNlVmFyaWFibGVDaGFuZ2UpO1xyXG5cclxuICAgIC8vIEEgZmllbGQgdGhhdCBpcyBhbiBldmVudCBoYW5kbGVyIGZpZWxkIGNhbm5vdCBhcHBlYXIgYXMgYSBwcm9wZXJ0eSBpbiBndWkuIG5vIG5lZWQgdG8gcmVmcmVzaCBhbGxcclxuICAgIC8vIGZvcm0rY29udHJvbHMgcHJvcGVydGllcyBleHByZXNzaW9ucyBmb3IgaXQuXHJcbiAgICBpZiAodGFzayAhPT0gbnVsbCAmJiB0YXNrLlZld0ZpcnN0ID09PSAxICYmIHRoaXMuX2Zvcm0gIT09IG51bGwgJiYgIXRoaXMuSXNFdmVudEhhbmRsZXJGaWVsZCkge1xyXG4gICAgICBpZiAocmVjb21wdXRlICYmIHZhbHVlV2FzVXBkYXRlZClcclxuICAgICAgICBhd2FpdCB0aGlzLl9mb3JtLnJlZnJlc2hPbkV4cHJlc3Npb25zKCk7XHJcblxyXG4gICAgfVxyXG4gICAgaWYgKHRhc2sgIT0gbnVsbClcclxuICAgICAgdGFzay5WZXdGaXJzdC0tO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIGluIHRoZSBjdXJyZW50IHJlY29yZCBhbmQgdXBkYXRlIHRoZSBkaXNwbGF5XHJcbiAgLy8vICAgdGhlIGZpZWxkIG11c3QgYmUgaW4gYSBtYWdpYyBpbnRlcm5hbCBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm5ld1ZhbFwiPnRoZSBuZXcgdmFsdWUgb2YgdGhlIGZpZWxkPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpc051bGxGbGRcIj5pZiB0cnVlIHRoZW4gdGhlIHZhbHVlIGlzIG51bGw8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlY29tcHV0ZVwiPnN0YXRlcyB3aGV0aGVyIHRvIGV4ZWN1dGUgcmVjb21wdXRlIHdoZW4gc2V0dGluZyB0aGUgdmFsdWU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInNldFJlY29yZE1vZGlmaWVkXCI+c3RhdGVzIHdoZXRoZXIgdG8gZGVmaW5lIHRoZSByZWNvcmQgYXMgbW9kaWZpZWQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInNldENyc3JNb2RpZmllZFwiPnN0YXRlcyB3aGV0aGVyIHRvIGRlZmluZSB0aGUgY3Vyc29yIG9mIHRoZSBmaWVsZCBhcyBtb2RpZmllZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaXNBcmdVcGRhdGVcIj50cnVlIGlmIGNhbGxlZCBmb3IgaGFuZGxlciBhcmd1bWVudC1wYXJhbWV0ZXIgY29weTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPnRoZSByZXR1cm4gdmFsdWUgd2FzIHVwZGF0ZWQgPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgYXN5bmMgc2V0VmFsdWUobmV3VmFsOiBzdHJpbmcsIGlzTnVsbEZsZDogYm9vbGVhbiwgcmVjb21wdXRlOiBib29sZWFuLCBzZXRSZWNvcmRNb2RpZmllZDogYm9vbGVhbiwgc2V0Q3Jzck1vZGlmaWVkOiBib29sZWFuLCBpc0FyZ1VwZGF0ZTogYm9vbGVhbiwgZW5mb3JjZVZhbGlhYmxlQ2hhbmdlOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBsZXQgcmVjOiBSZWNvcmQ7XHJcbiAgICBsZXQgcmVjRmxkVmFsOiBzdHJpbmc7XHJcbiAgICBsZXQgdmFsc0VxdWFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgcmVtYWluZGVyOiBudW1iZXI7XHJcbiAgICBsZXQgemVyb1JlYWw6IGJvb2xlYW47XHJcbiAgICBsZXQgYXJnczogQXJndW1lbnRzTGlzdCA9IG51bGw7XHJcbiAgICBsZXQgbWFpbkN0cmwgPSB0aGlzLmdldEN0cmwoKTtcclxuICAgIGxldCBwZW5kaW5nRXZlbnRzOiBudW1iZXI7XHJcbiAgICBsZXQgZXZ0czogTGlzdDxGaWVsZCB8IFJ1blRpbWVFdmVudD47XHJcbiAgICBsZXQgZm9yY2VVcGRhdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBjaGVja0ZvclZhcmlhYmxlQ2hhbmdlOiBib29sZWFuID0gcmVjb21wdXRlIHx8IGVuZm9yY2VWYWxpYWJsZUNoYW5nZTtcclxuXHJcbiAgICBsZXQgdGFzayA9IDxUYXNrPnRoaXMuZ2V0VGFzaygpO1xyXG4gICAgaWYgKHRoaXMuX2Zvcm0gPT09IG51bGwpXHJcbiAgICAgIHRoaXMuX2Zvcm0gPSA8TWdGb3JtPnRhc2suZ2V0Rm9ybSgpO1xyXG5cclxuICAgIGlmIChpc051bGxGbGQgJiYgIXRoaXMuTnVsbEFsbG93ZWQgJiYgdGhpcy5fdHlwZSAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUikge1xyXG4gICAgICBuZXdWYWwgPSB0aGlzLmdldERlZmF1bHRWYWx1ZSgpO1xyXG4gICAgICBpc051bGxGbGQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBRQ1IjODA1MzY0OiBGb3IgYW55IGZpZWxkLCB3ZSBzdG9yZSB0aGUgdmFsdWUgaW4gZmllbGQgYXMgaXQgaXMgKHdpdGhvdXQgY2hlY2tpbmcgdGhlIHBpY3R1cmUpLlxyXG4gICAgLy8gQnV0IGZvciBOdW1lcmljIGZpZWxkLCBpZiBwaWN0dXJlIGRvZXMgbm90IGNvbnRhaW4gZGVjaW1hbHMgdGhlbiB3ZSBzaG91bGQgcm91bmQgb2ZmIHRoZSB2YWx1ZSBhbmQgdGhlbiBzYXZlIHRoaXMgdmFsdWUgaW4gZmllbGRcclxuICAgIC8vIG90aGVyd2lzZSBpdCB3aWxsIGdpdmUgd3JvbmcgY2FsY3VsYXRpb24uIFNvIGFsd2F5cyByb3VuZCBvZmYgdGhlIHZhbHVlIGRlcGVuZGluZyBvbiBwaWN0dXJlJ3MgZGVjaW1hbC5cclxuICAgIC8vIGNoZWNrIGlmIG5ld1ZhbCBpcyBcImxvbmdcIiBzaW5jZSB0aGVyZSBpcyBubyByZWFzb24gdG8gcm91bmQgYW4gYWxyZWFkeSB3aG9sZSBudW1iZXJcclxuICAgIGlmICh0aGlzLl90eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMgJiYgbmV3VmFsICE9IG51bGwgJiYgIU5VTV9UWVBFLm51bUhleFN0cklzTG9uZyhuZXdWYWwpKSB7XHJcbiAgICAgIGxldCBudW1WYWwgPSBuZXcgTlVNX1RZUEUobmV3VmFsKTtcclxuICAgICAgbGV0IHBpYyA9IG5ldyBQSUModGhpcy5fcGljdHVyZSwgdGhpcy5fdHlwZSwgc3VwZXIuZ2V0VGFzaygpLmdldENvbXBJZHgoKSk7XHJcbiAgICAgIGxldCBkZWNzOiBudW1iZXIgPSBwaWMuZ2V0RGVjKCk7XHJcbiAgICAgIG51bVZhbC5yb3VuZChkZWNzKTtcclxuICAgICAgbmV3VmFsID0gbnVtVmFsLnRvWE1McmVjb3JkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVjID0gKDxEYXRhVmlldz50aGlzLl9kYXRhdmlldykuZ2V0Q3VyclJlYygpO1xyXG4gICAgaWYgKHJlYyA9PSBudWxsKVxyXG4gICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oTGFuZ3VhZ2VEYXRhLkluc3RhbmNlLmdldENvbnN0TWVzc2FnZShNc2dJbnRlcmZhY2UuUlRfU1RSX05PX1JFQ1NfSU5fUk5HKSk7XHJcblxyXG4gICAgLy8gZG9uJ3QgYWxsb3cgdXBkYXRpbmcgUkVBTCBmaWVsZHMsIHVubGVzcyAnYWxsb3cgdXBkYXRlIGluIHF1ZXJ5IG1vZGUnIGlzIHNldCB0byBUUlVFXHJcbiAgICBpZiAoIXRoaXMuSXNWaXJ0dWFsICYmXHJcbiAgICAgICh0YXNrLmdldE1vZGUoKSA9PT0gQ29uc3RhbnRzLlRBU0tfTU9ERV9RVUVSWSAmJlxyXG4gICAgICAgICFFbnZpcm9ubWVudC5JbnN0YW5jZS5hbGxvd1VwZGF0ZUluUXVlcnlNb2RlKHRhc2suZ2V0Q29tcElkeCgpKVxyXG4gICAgICAgIHx8IHJlYy5JbkZvcmNlVXBkYXRlICYmIHJlYy5JbkNvbXB1dGUpKVxyXG4gICAgICByZXR1cm4gIXZhbHNFcXVhbDtcclxuXHJcbiAgICBpZiAoY2hlY2tGb3JWYXJpYWJsZUNoYW5nZSAmJiB0aGlzLmdldEhhc0NoYW5nZUV2ZW50KCkpIHtcclxuICAgICAgbGV0IGFyZ3NMaXN0ID0gbmV3IEFycmF5KDIpO1xyXG4gICAgICBhcmdzTGlzdFswXSA9IG5ldyBFeHBWYWwoU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDLCBmYWxzZSxcclxuICAgICAgICAobWFpbkN0cmwgIT09IG51bGwgJiYgbWFpbkN0cmwuSXNJbnRlcmFjdGl2ZVVwZGF0ZVxyXG4gICAgICAgICAgPyBGaWVsZC5OVU0wLnRvWE1McmVjb3JkKClcclxuICAgICAgICAgIDogRmllbGQuTlVNMS50b1hNTHJlY29yZCgpKSk7XHJcbiAgICAgIGFyZ3NMaXN0WzFdID0gbmV3IEV4cFZhbCh0aGlzLmdldFR5cGUoKSwgdGhpcy5pc051bGwoKSwgdGhpcy5nZXRWYWx1ZShmYWxzZSkpO1xyXG4gICAgICBhcmdzID0gbmV3IEFyZ3VtZW50c0xpc3QoYXJnc0xpc3QpO1xyXG4gICAgfVxyXG4gICAgaWYgKG1haW5DdHJsICE9IG51bGwpXHJcbiAgICAgIG1haW5DdHJsLklzSW50ZXJhY3RpdmVVcGRhdGUgPSBmYWxzZTtcclxuXHJcbiAgICAvLyB1cGRhdGUgdGhlIGZpZWxkIGluIHRoZSBjdXJyZW50IHJlY29yZFxyXG4gICAgaWYgKHRoaXMuX3R5cGUgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSAmJiBVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpKSB7XHJcbiAgICAgIC8vIGNvdW50IHRoZSBudW1iZXIgb2YgYnl0ZXMsIG5vdCBjaGFyYWN0ZXJzIChKUE46IERCQ1Mgc3VwcG9ydClcclxuICAgICAgaWYgKG5ld1ZhbCAhPSBudWxsKVxyXG4gICAgICAgIHJlbWFpbmRlciA9IHRoaXMuX3NpemUgLSBVdGlsU3RyQnl0ZU1vZGUubGVuQihuZXdWYWwpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgcmVtYWluZGVyID0gMDtcclxuXHJcbiAgICAgIGlmIChuZXdWYWwgIT0gbnVsbCAmJiB0aGlzLl90eXBlICE9PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IgJiYgdGhpcy5fdHlwZSAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUiAmJlxyXG4gICAgICAgIHJlbWFpbmRlciA8IDApXHJcbiAgICAgICAgdGhpcy5fdmFsID0gVXRpbFN0ckJ5dGVNb2RlLmxlZnRCKG5ld1ZhbCwgdGhpcy5fc2l6ZSk7XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgJiYgcmVtYWluZGVyID4gMClcclxuICAgICAgICB0aGlzLl92YWwgPSBuZXdWYWwgKyBOU3RyaW5nLkZyb21DaGFycyh0aGlzLl9zcGFjZXMsIDAgLCByZW1haW5kZXIpO1xyXG4gICAgICBlbHNlIGlmICh0aGlzLl90eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IpXHJcbiAgICAgICAgdGhpcy5fdmFsID0gQmxvYlR5cGUuY29weUJsb2IodGhpcy5fdmFsLCBuZXdWYWwpO1xyXG4gICAgICBlbHNlIHRoaXMuX3ZhbCA9IG5ld1ZhbDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAobmV3VmFsICE9IG51bGwpXHJcbiAgICAgICAgcmVtYWluZGVyID0gdGhpcy5fc2l6ZSAtIG5ld1ZhbC5sZW5ndGg7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICByZW1haW5kZXIgPSAwO1xyXG5cclxuICAgICAgaWYgKG5ld1ZhbCAhPSBudWxsICYmIHRoaXMuX3R5cGUgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiAmJiB0aGlzLl90eXBlICE9PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SICYmIHJlbWFpbmRlciA8IDApXHJcbiAgICAgICAgdGhpcy5fdmFsID0gbmV3VmFsLnN1YnN0cigwLCB0aGlzLl9zaXplKTtcclxuICAgICAgZWxzZSBpZiAoKHRoaXMuX3R5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgfHwgdGhpcy5fdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSAmJiByZW1haW5kZXIgPiAwKVxyXG4gICAgICAgIHRoaXMuX3ZhbCA9IG5ld1ZhbCArICBOU3RyaW5nLkZyb21DaGFycyh0aGlzLl9zcGFjZXMsIDAgLCByZW1haW5kZXIpO1xyXG4gICAgICBlbHNlIGlmICh0aGlzLl90eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IpIHtcclxuICAgICAgICAvLyBFbnN1cmUgX3ZhbCBpcyBub3QgbnVsbCwgc28gdGhhdCB0aGUgYmxvYiBjb3B5IHdpbGwgYmVcclxuICAgICAgICAvLyBkb25lIGNvcnJlY3RseSwgYWNjb3JkaW5nIHRvIHRoZSBmaWVsZCdzIGJsb2IgdHlwZS5cclxuICAgICAgICBpZiAodGhpcy5fdmFsID09PSBudWxsKVxyXG4gICAgICAgICAgdGhpcy5fdmFsID0gdGhpcy5nZXRNYWdpY0RlZmF1bHRWYWx1ZSgpO1xyXG4gICAgICAgIHRoaXMuX3ZhbCA9IEJsb2JUeXBlLmNvcHlCbG9iKHRoaXMuX3ZhbCwgbmV3VmFsKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHRoaXMuX3ZhbCA9IG5ld1ZhbDtcclxuICAgIH1cclxuICAgIC8vIElmIGRvdG5ldCB2YXIgaXMgdXBkYXRlZCB3aXRoIG5ldyBibG9icHJlZml4LCB2YWxzRXF1YWwgaXMgZmFsc2UsIHdlIHNob3VsZCBub3QgY2hlY2sgaW4gcmVjb3JkLlxyXG4gICAge1xyXG4gICAgICByZWNGbGRWYWwgPSByZWMuR2V0RmllbGRWYWx1ZSh0aGlzLl9pZCk7XHJcblxyXG4gICAgICAvLyBJbiBvcmRlciB0byBjb21wYXJlLCBJZiB2aXJ0dWFsJ3Mgb2xkIHZhbHVlIGlzIHRha2VuIGZyb20gcmVjb3JkLCB0aGVuIG9sZCBpc051bGwgdmFsdWUgYWxzbyBzaG91bGQgYmUgdGFrZW4gZnJvbSByZWNvcmQuXHJcbiAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIGRvbmUgb25seSBpZiBub3QgaW4gcmUtY29tcHV0ZSAvIG5vdCBhcmd1bWVudCAvIG5vIGluaXRFeHAuKVxyXG4gICAgICAvLyBNYWlubHkgLCB0aGlzIGlzIG5lZWRlZCwgd2hlbiBjdXJzb3IgaXMgcGFya2VkIG9uIG9uZSByZWNvcmQgYW5kIHZpcnR1YWwgaXMgbW9kaWZpZWQgZnJvbSBudWxsIHRvIG5vbm51bGwgb3IgdmljZXZlcnNhIGFuZFxyXG4gICAgICAvLyBub3cgaWYgY3Vyc29yIG1vdmVzIGZyb20gb25lIHJlY29yZCB0byBuZXh0IHJlY29yZCwgV2UgbmVlZCB0byAgZ2V0IHRoZSBvbGQgbnVsbCB2YWx1ZSBmcm9tIHJlY29yZC5cclxuXHJcbiAgICAgIGxldCBvbGROdWxsVmFsOiBib29sZWFuID0gdGhpcy5faXNOdWxsO1xyXG4gICAgICBpZiAoIXJlY29tcHV0ZSAmJiAhaXNBcmdVcGRhdGUgJiYgdGhpcy5faW5pdEV4cCA9PSBudWxsKVxyXG4gICAgICAgIG9sZE51bGxWYWwgPSByZWMuSXNOdWxsKHRoaXMuX2lkKTtcclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdmFsc0VxdWFsID0gRXhwcmVzc2lvbkV2YWx1YXRvci5tZ1ZhbHNFcXVhbCh0aGlzLl92YWwsIGlzTnVsbEZsZCwgdGhpcy5fdHlwZSwgcmVjRmxkVmFsLCBvbGROdWxsVmFsLCB0aGlzLl90eXBlKTtcclxuICAgICAgfVxyXG4gICAgICBjYXRjaCAoZXhjZXB0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5fdmFsID0gdGhpcy5nZXRNYWdpY0RlZmF1bHRWYWx1ZSgpO1xyXG4gICAgICAgIHZhbHNFcXVhbCA9IGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgLy8gemVybyB0aGUgdmVjdG9yXHJcbiAgICBpZiAodGhpcy5fY2xlYXJWZWN0b3JUeXBlKVxyXG4gICAgICB0aGlzLl92ZWN0b3JUeXBlID0gbnVsbDtcclxuICAgIGlmICh0aGlzLl9pbnZhbGlkVmFsdWUpIHtcclxuICAgICAgdGhpcy5faW52YWxpZFZhbHVlID0gZmFsc2U7XHJcbiAgICAgIHJlYy5jbGVhckZsYWcodGhpcy5faWQsIFJlY29yZC5GTEFHX1VQREFURUQpO1xyXG4gICAgICByZWMuY2xlYXJGbGFnKHRoaXMuX2lkLCBSZWNvcmQuRkxBR19NT0RJRklFRCk7XHJcbiAgICB9XHJcbiAgICAvLyBkdXJpbmcgY29tcHV0ZSwgd2Ugc2hvdWxkIHplcm8gZmllbGRzIHdoaWNoIGJlbG9uZyB0byBsaW5rIGNyZWF0ZS5cclxuICAgIHplcm9SZWFsID0gdGhpcy5fbGlua0NyZWF0ZSAmJiByZWMuSW5Db21wdXRlICYmICFyZWNvbXB1dGUgJiYgKHRoaXMuX2Zvcm0gPT0gbnVsbCB8fCAhdGhpcy5fZm9ybS5JblJlc3RvcmUpICYmXHJcbiAgICAgICFBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5HZXRTdG9wRXhlY3V0aW9uRmxhZygpO1xyXG5cclxuICAgIC8vIFZpcnR1YWxzIHdpdGhvdXQgaW5pdCBleHByZXNzaW9uIGFyZSBjb3BpZWQgZnJvbSBvbmUgcmVjb3JkIHRvIGFub3RoZXIsIGV2ZW4gYXRcclxuICAgIC8vIGNvbXB1dGUgdGltZSAobm8gcmVjb21wdXRlKS4gTmV2ZXJ0aGVsZXNzLCBpbiBjYXNlIHRoZWlyIHZhbHVlIGNoYW5nZXMsIHdlIG11c3RcclxuICAgIC8vIHBlcmZvcm0gcmVjb21wdXRlLlxyXG4gICAgaWYgKCh0aGlzLl9pc1ZpcnR1YWwgfHwgemVyb1JlYWwpICYmICFyZWMuaXNOZXdSZWMoKSAmJiAhdmFsc0VxdWFsKVxyXG4gICAgICBmb3JjZVVwZGF0ZSA9IHRydWU7XHJcblxyXG4gICAgLy8gaWYgdGhlIHJlY29tcHV0ZSBpcyBmYWxzZSBpdCBtZWFucyB0aGF0IHRoZSB1c2VyIGlzIHNldHRpbmcgYSB2YWx1ZVxyXG4gICAgLy8gdGhhdCBpdHMgc291cmNlIGlzIHRoZSByZWNvcmQsIHRodXMsIHdlIGRvbid0IGhhdmUgdG8gdXBkYXRlIHRoZSByZWNvcmQuXHJcbiAgICAvLyBpZiB0aGUgcmVjb21wdXRlIGlzIHRydWUsIGdvIGFoZWFkIGFuZCB1cGRhdGUgdGhlIHJlY29yZC5cclxuICAgIGlmIChjaGVja0ZvclZhcmlhYmxlQ2hhbmdlIHx8IGZvcmNlVXBkYXRlIHx8IHJlYy5pc05ld1JlYygpKSB7XHJcbiAgICAgIHRoaXMuVXBkYXRlTnVsbChpc051bGxGbGQsIHJlYyk7XHJcblxyXG4gICAgICBpZiAoc2V0Q3Jzck1vZGlmaWVkKVxyXG4gICAgICAgIHJlYy5zZXRGbGFnKHRoaXMuX2lkLCBSZWNvcmQuRkxBR19DUlNSX01PRElGSUVEKTtcclxuICAgICAgcmVjLnNldEZpZWxkVmFsdWUodGhpcy5faWQsIHRoaXMuX3ZhbCwgc2V0UmVjb3JkTW9kaWZpZWQpO1xyXG4gICAgICBldnRzID0gRmllbGQuX3ZhcmlhYmxlQ2hhbmdlRXZ0cztcclxuICAgICAgcGVuZGluZ0V2ZW50cyA9IGV2dHMubGVuZ3RoO1xyXG4gICAgICBpZiAoY2hlY2tGb3JWYXJpYWJsZUNoYW5nZSAmJiB0aGlzLmdldEhhc0NoYW5nZUV2ZW50KCkgJiYgIWV2dHMuQ29udGFpbnModGhpcykgJiYgIXZhbHNFcXVhbCkge1xyXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgdmFyaWFibGUgY2hhbmdlIGhhbmRsZXIgLSBzYXZlIHZhbHVlIGFuZCBwcmVwYXJlIHBhcmFtc1xyXG4gICAgICAgIGxldCBydEV2dCA9IG5ldyBSdW5UaW1lRXZlbnQodGhpcyk7XHJcbiAgICAgICAgcnRFdnQuc2V0SW50ZXJuYWwoSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1ZBUklBQkxFKTtcclxuICAgICAgICBydEV2dC5zZXRBcmdMaXN0KGFyZ3MpO1xyXG4gICAgICAgIGV2dHMucHVzaCh0aGlzKTtcclxuICAgICAgICBldnRzLnB1c2gocnRFdnQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBjaGVjayBmb3IgcmVjb21wdXRlIGFuZCBleGVjdXRlIGl0XHJcbiAgICAgIC8vIFFDUiAjMjk5NjA5LCBpZiB3ZSBhcmUgaW4gbG9jYWwgZGF0YXZpZXcgbWFuYWdlciwgd2UgY2FuIG9ubHkgY29tcHV0ZS5cclxuICAgICAgLy8gUmVjb21wdXRlIGlzIG5vdCBhbGxvd2VkLCBzaW5jZSBpdCB3aWxsIGJlIGV4ZWN1dGVkIG11bHRpcGxlIHRpbWVzXHJcbiAgICAgIGlmICh0aGlzLl9yZWNvbXB1dGUgIT0gbnVsbCAmJiAocmVjb21wdXRlIHx8IGZvcmNlVXBkYXRlKSAmJiAhKDxEYXRhVmlldz50aGlzLl9kYXRhdmlldykuSW5Mb2NhbERhdGF2aWV3Q29tbWFuZCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAvLyBpZiBmaWVsZCBjYXVzZWQgdGFibGUgaW52YWxpZGF0aW9uIGFuZCBpdCdzIHZhbHVlIHdhcyBjaGFuZ2VkXHJcbiAgICAgICAgICBpZiAoZm9yY2VVcGRhdGUpXHJcbiAgICAgICAgICAgIHJlYy5JbkZvcmNlVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuX3JlY29tcHV0ZS5leGVjdXRlKHJlYyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgIGlmIChmb3JjZVVwZGF0ZSlcclxuICAgICAgICAgICAgcmVjLkluRm9yY2VVcGRhdGUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuX2NhdXNlVGFibGVJbnZhbGlkYXRpb24gJiYgdGhpcy5pc0NoYW5nZWQodGhpcy5fdmFsLCBpc051bGxGbGQpKVxyXG4gICAgICAgIHJlYy5zZXRDYXVzZUludmFsaWRhdGlvbih0cnVlKTtcclxuXHJcbiAgICAgIC8vIERvbid0IHVwZGF0ZSBjb250cm9scyB3aGlsZSBmZXRjaGluZyByZWNvcmRzIGZyb20gbG9jYWwgZGF0YWJhc2UuIElmIHRoZSB0YXNrIGhhcyBhIHRhYmxlIGNvbnRyb2wsIHRoZW4gYWN0dWFsIGNvbnRyb2xzIG9uIHRoZVxyXG4gICAgICAvLyByb3dzIGFyZSBjcmVhdGVkIGFmdGVyIG5vLiBvZiByb3dzIGlzIGtub3duIChhbmQgdGhpcyBpcyBhZnRlciB0aGUgZGF0YSBpcyBhdmFpYWxhYmxlKS4gU28sIHdoaWxlIGZldGNoaW5nIHJlY29yZHMsIGNvbnRyb2xzIGluXHJcbiAgICAgIC8vIHRhYmxlIGFyZSBub3QgeWV0IGNyZWF0ZWQgYW5kIGhlbmNlIHRoZXJlIGlzIGFuIGFzc2VydCB3aGlsZSB0cnlpbmcgdG8gdXBkYXRlIHRoZSBjb250cm9scy4gQWZ0ZXIgc2tpcHBpbmcgdGhpcyB1cGRhdGUsIHRoZSBjb250cm9sc1xyXG4gICAgICAvLyBhcmUgdXBkYXRlZCBmcm9tIG90aGVyIHBsYWNlcyAocmVmcmVzaFRhYmxlLCBjb21tb25IYW5kbGVyQmVmb3JlLCBoYW5kbGVSb3dEYXRhQ3VyUGFnZSBldGMgbGlrZSBpdCBoYXBwZW5zIGZvciBzZXJ2ZXIgZGF0YSlcclxuICAgICAgaWYgKChyZWNvbXB1dGUgfHwgZm9yY2VVcGRhdGUpICYmICEoPERhdGFWaWV3PnRoaXMuX2RhdGF2aWV3KS5JbkxvY2FsRGF0YXZpZXdDb21tYW5kICYmIG1haW5DdHJsICE9IG51bGwpIHtcclxuICAgICAgICBpZiAobWFpbkN0cmwuaXNDaG9pY2VDb250cm9sKCkpXHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZURpc3BsYXkoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUmlnaHQgYWZ0ZXIgd2UgZXhpdCB0aGUgdG9wbW9zdCB1cGRhdGUgLSBleGVjdXRlIGFsbCB2YXJpYWJsZSBjaGFuZ2UgZXZlbnRzLlxyXG4gICAgICAvLyBub3RlIHRoYXQgZHVyaW5nIHRoaXMgZXhlY3V0aW9uLCBuZXcgb25lcyBtYXkgYmUgY3JlYXRlZC5cclxuICAgICAgaWYgKHBlbmRpbmdFdmVudHMgPT09IDAgJiYgY2hlY2tGb3JWYXJpYWJsZUNoYW5nZSAmJiB0aGlzLmdldEhhc0NoYW5nZUV2ZW50KCkpIHtcclxuICAgICAgICB3aGlsZSAoZXZ0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBsZXQgZXZ0ID0gPFJ1blRpbWVFdmVudD5ldnRzLmdldF9JdGVtKDEpO1xyXG4gICAgICAgICAgZXZ0cy5SZW1vdmVBdCgwKTtcclxuICAgICAgICAgIGV2dHMuUmVtb3ZlQXQoMCk7XHJcbiAgICAgICAgICBpZiAoTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldExhc3RGb2N1c2VkVGFzaygpID09IG51bGwpXHJcbiAgICAgICAgICAgIGV2dC5zZXRUYXNrKDxUYXNrPnRoaXMuZ2V0VGFzaygpKTtcclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgdGFza1JlZjogVGFzayA9IExhc3RGb2N1c2VkTWFuYWdlci5JbnN0YW5jZS5nZXRMYXN0Rm9jdXNlZFRhc2soKTtcclxuICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGluIHZhcmlhYmxlIGNoYW5nZSBldmVudCBhbmQgVGFza1N1ZmZpeCBpcyBleGVjdXRlZCwgaXQgbWVhbnMgd2UgYXJlIGhlcmUgZnJvbVxyXG4gICAgICAgICAgICAvLyB1cGRhdGUgYXJndW1lbnRzIHdoaWxlIGNsb3NpbmcgdGhlIHRhc2suIEluIHN1Y2ggY2FzZSwgd2Ugc2hvdWxkIHNldCB0aGUgZXZlbnQgdGFzayBhcyBQYXRoUGFyZW50VGFza1xyXG4gICAgICAgICAgICAvLyBhbmQgbm90IHRoZSB0YXNrIGl0c2VsZi5cclxuICAgICAgICAgICAgaWYgKHRhc2tSZWYuVGFza1N1ZmZpeEV4ZWN1dGVkKSB7XHJcbiAgICAgICAgICAgICAgdGFza1JlZiA9ICh0YXNrUmVmLlBhdGhQYXJlbnRUYXNrICE9IG51bGwpID8gPFRhc2s+dGFza1JlZi5QYXRoUGFyZW50VGFzayA6IHRhc2tSZWY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZXZ0LnNldFRhc2sodGFza1JlZik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBldnQuc2V0Q3RybChMYXN0Rm9jdXNlZE1hbmFnZXIuZ2V0TGFzdEZvY3VzZWRDb250cm9sKCkpO1xyXG4gICAgICAgICAgYXdhaXQgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuaGFuZGxlRXZlbnQoZXZ0LCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyAjNzc2MDMxIC0gdGhlIGZpZWxkIHNob3VsZCBiZSBtYXJrZWQgbW9kaWZpZWQgb25seSBpZiB2YWwgYXJlIG5vdCBlcXVhbC4gT3RoZXJ3aXNlLCBldmVuIGZvciBudWxsIGZpZWxkIHBhcmFtdGVyIHBhc3NpbmdcclxuICAgIC8vIG9yIHNhbWUgdmFsdWUgdXBkYXRlLCBpdCBpcyBtYXJrZWQgYXMgbW9kaWZpZWQgYW5kIFJTIGlzIGV4ZWN1dGVkLlxyXG4gICAgaWYgKHJlY29tcHV0ZSAmJiAhdmFsc0VxdWFsKVxyXG4gICAgICB0aGlzLnNldE1vZGlmaWVkKCk7XHJcbiAgICByZXR1cm4gIXZhbHNFcXVhbDtcclxuICB9XHJcblxyXG4gIFVwZGF0ZU51bGwoaXNOdWxsRmxkOiBib29sZWFuLCByZWM6IFJlY29yZCk6IHZvaWQge1xyXG4gICAgaWYgKGlzTnVsbEZsZClcclxuICAgICAgcmVjLnNldEZsYWcodGhpcy5faWQsIFJlY29yZC5GTEFHX05VTEwpO1xyXG4gICAgZWxzZVxyXG4gICAgICByZWMuY2xlYXJGbGFnKHRoaXMuX2lkLCBSZWNvcmQuRkxBR19OVUxMKTtcclxuICAgIHRoaXMuX2lzTnVsbCA9IGlzTnVsbEZsZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgYSB2ZWMgY2VsbFxyXG4gIC8vLyAgIGNhbiBub3QgYmUgZXhlY3V0ZWQgd2l0aG91dCB0aGUgbG9naWMgZnJvbSBldmFsX29wX3ZlY0dldFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZHhcIj50aGUgY2VsbCBpbmRleCBpbiB0aGUgdmVjdG9yIHN0cmF0cyBmcm9tIDE8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibmV3VmFsXCI+dGhlIG5ldyB2YWx1ZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxJc051bGxcIj5pcyB0aGUgYmV3IHZhbHVlIG51bGw8L3BhcmFtPlxyXG4gIGFzeW5jIHNldENlbGxWZWNWYWx1ZShpZHg6IG51bWJlciwgbmV3VmFsOiBzdHJpbmcsIHZhbElzTnVsbDogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgbGV0IHJlczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuX3R5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpIHtcclxuICAgICAgLy8gaW5pdGlhbGl6ZWQgdGhlIHZlY3RvciBvYmplY3QgaWYgbmVlZGVkXHJcbiAgICAgIGlmICh0aGlzLl92ZWN0b3JUeXBlID09IG51bGwpIHtcclxuICAgICAgICB0aGlzLl92ZWN0b3JUeXBlID0gdGhpcy5pc051bGwoKVxyXG4gICAgICAgICAgPyBuZXcgVmVjdG9yVHlwZSh0aGlzLl92ZWNDZWxsc1R5cGUsIHRoaXMuX3ZlY0NlbGxzQ29udGVudFR5cGUsIHRoaXMuRGVmYXVsdFZhbHVlLCB0aGlzLmlzTnVsbERlZmF1bHQoKSxcclxuICAgICAgICAgIHRoaXMuTnVsbEFsbG93ZWQsIHRoaXMuX3ZlY0NlbGxzU2l6ZSlcclxuICAgICAgICAgIDogbmV3IFZlY3RvclR5cGUodGhpcy5fdmFsKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBpZiB2ZWNDZWxsc1R5cGUgaXMgQkxPQiwgY29udmVydCBkYXRhIGludG8gYmxvYlxyXG4gICAgICBpZiAodGhpcy5fdmVjQ2VsbHNUeXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IpIHtcclxuICAgICAgICBsZXQgdG1wTmV3VmFsOiBzdHJpbmcgPSB0aGlzLmdldENlbGxEZWZ1YWx0VmFsdWUoKTtcclxuICAgICAgICBuZXdWYWwgPSBCbG9iVHlwZS5jb3B5QmxvYih0bXBOZXdWYWwsIG5ld1ZhbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlcyA9IHRoaXMuX3ZlY3RvclR5cGUuc2V0VmVjQ2VsbChpZHgsIG5ld1ZhbCwgdmFsSXNOdWxsKTtcclxuICAgICAgLy8gc3RhcnQgcmVjb21wdXRlXHJcbiAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICB0aGlzLl9jbGVhclZlY3RvclR5cGUgPSBmYWxzZTtcclxuICAgICAgICAvLyBRQ1IgOTg0NTYzIGRvIG5vdCBzZXQgdGhlIHJlY29yZCBhcyBjaGFuZ2VkXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRWYWx1ZUFuZFN0YXJ0UmVjb21wdXRlKHRoaXMuX3ZlY3RvclR5cGUudG9TdHJpbmcoKSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5fY2xlYXJWZWN0b3JUeXBlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBjZWxsIHZhbHVlIG9mIGEgZ2l2ZW4gY2VsbCBpbiB0aGUgdmVjdG9yXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBjZWxsJ3MgdmFsdWUgYXMgc3RyaW5nPC9yZXR1cm5zPlxyXG4gIGdldFZlY0NlbGxWYWx1ZShpZHg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5fdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUikge1xyXG4gICAgICAvLyBpZiB3ZSBhcmUgaGVyZSB0aGFuIHRoZSBmaWxlZCBtdXN0IGhhdmUgbm9uZSBudWxsIHZhbHVlIG9mIGEgdmVjdG9yXHJcbiAgICAgIGlmICh0aGlzLl92ZWN0b3JUeXBlID09IG51bGwpXHJcbiAgICAgICAgdGhpcy5fdmVjdG9yVHlwZSA9IG5ldyBWZWN0b3JUeXBlKHRoaXMuX3ZhbCk7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5fdmVjdG9yVHlwZS5nZXRWZWNDZWxsKGlkeCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIHJlY29tcHV0ZWQgdmFyaWFibGUgdG8gdHJ1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0UmVjb21wdXRlZCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBpbnZhbGlkYXRlIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQuIEFuIGludmFsaWQgdmFsdWUgZm9yY2VzIHVzIHRvIHJlLWNhbGN1bGF0ZSB0aGUgZmllbGQnc1xyXG4gIC8vLyAgIHZhbHVlIGJ5IGNvcHlpbmcgaXQgZnJvbSB0aGUgZGF0YXZpZXcuXHJcbiAgLy8vICAgdXNlZCB3aGVuIHN3aXRjaGluZyB0byBhbm90aGVyIHJlY29yZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJmb3JjZUludmFsaWRhdGVcIj4tIERvbnQgY2hlY2sgdGhlIGZpZWxkJ3MgdHlwZSBhbmQgbWFrZSBpdCBpbnZhbGlkICh1c3VhbGx5IFZpcnR1YWxzXHJcbiAgLy8vICAgd2l0aG91dCBpbml0IGV4cHJlc3Npb24gYXJlIG5ldmVyIGludmFsaWRhdGVkLCBzaW5jZSB0aGV5IHJldGFpbiB0aGVpciB2YWx1ZSB3aGVuIG1vdmluZ1xyXG4gIC8vLyAgIGJldHdlZW4gcmVjb3JkcykuXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY2xlYXJGbGFnc1wiPjwvcGFyYW0+XHJcbiAgaW52YWxpZGF0ZShmb3JjZUludmFsaWRhdGU6IGJvb2xlYW4sIGNsZWFyRmxhZ3M6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGxldCByZWM6IFJlY29yZCA9ICg8RGF0YVZpZXc+dGhpcy5fZGF0YXZpZXcpLmdldEN1cnJSZWMoKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX2lzVmlydHVhbCB8fCB0aGlzLl92aXJBc1JlYWwgfHwgdGhpcy5faW5pdEV4cCAhPT0gbnVsbCB8fCBmb3JjZUludmFsaWRhdGUpIHtcclxuICAgICAgdGhpcy5faW52YWxpZFZhbHVlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChjbGVhckZsYWdzICYmIHJlYyAhPT0gbnVsbCkge1xyXG4gICAgICByZWMuY2xlYXJGbGFnKHRoaXMuX2lkLCBSZWNvcmQuRkxBR19VUERBVEVEKTtcclxuICAgICAgcmVjLmNsZWFyRmxhZyh0aGlzLl9pZCwgUmVjb3JkLkZMQUdfTU9ESUZJRUQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBOYW1lIG9mIHRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgZ2V0VGFibGVOYW1lKCk6IFN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5fdGFibGVOYW1lID09IG51bGwpXHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlTmFtZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBmb3IgZ2V0IFZBUk5BTUUgZnVuY3Rpb24gdXNlXHJcbiAgLy8vICAgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgdGFibGUgbmFtZSB3aGVyZSB0aGUgdmFyaWFibGUgb3JpZ2luYXRlcyxcclxuICAvLy8gICBjb25jYXRlbmF0ZWQgd2l0aCAnLicgYW5kIHRoZSB2YXJpYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgdmFyaWFibGUgaW4gdGhhdCB0YWJsZS5cclxuICAvLy8gICBJZiB0aGUgdmFyaWFibGUgaXMgYSB2aXJ0dWFsIG9uZSwgdGhlbiB0aGUgdGFibGUgbmFtZSB3b3VsZCBpbmRpY2F0ZSAnVmlydHVhbCcuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgZ2V0TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuX2lzUGFyYW0pXHJcbiAgICAgIHJldHVybiBcIlBhcmFtZXRlci5cIiArIHRoaXMuZ2V0VmFyTmFtZSgpO1xyXG4gICAgZWxzZSBpZiAodGhpcy5faXNWaXJ0dWFsKVxyXG4gICAgICByZXR1cm4gXCJWaXJ0dWFsLlwiICsgdGhpcy5nZXRWYXJOYW1lKCk7XHJcbiAgICBlbHNlIHJldHVybiB0aGlzLmdldFRhYmxlTmFtZSgpICsgXCIuXCIgKyB0aGlzLmdldFZhck5hbWUoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0ZXN0IGZvciBhIG51bGxpdHlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHB1YmxpYyBpc051bGwoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoKDxUYXNrPnN1cGVyLmdldFRhc2soKSkuZ2V0RXZhbE9sZFZhbHVlcygpKVxyXG4gICAgICByZXR1cm4gdGhpcy5pc09yaWdpbmFsVmFsdWVOdWxsKCk7XHJcbiAgICBlbHNlIGlmICh0aGlzLl9pbnZhbGlkVmFsdWUpXHJcbiAgICAgIHRoaXMudGFrZVZhbEZyb21SZWMoKTtcclxuICAgIHJldHVybiB0aGlzLl9pc051bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBQcmV2SXNOdWxsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ByZXZJc051bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdGVzdCBmb3IgYW4gbW9kaWZpZWQgZmxhZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgaXNNb2RpZmllZCgpOiBib29sZWFuIHtcclxuICAgIGxldCBjdXJyUmVjOiBSZWNvcmQgPSAoPERhdGFWaWV3PnRoaXMuX2RhdGF2aWV3KS5nZXRDdXJyUmVjKCk7XHJcbiAgICByZXR1cm4gY3VyclJlYy5pc0ZsZE1vZGlmaWVkKHRoaXMuX2lkKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIG1vZGlmaWVkIGZsYWdcclxuICAvLy8gICBwbGVhc2Ugbm90ZSB0aGF0IGNsZWFyaW5nIHRoZSBmbGFnIGlzIGRvbmUgZXhwbGljaXRseVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0TW9kaWZpZWQoKTogdm9pZCB7XHJcbiAgICBsZXQgcmVjOiBSZWNvcmQgPSAoKDxEYXRhVmlldz50aGlzLl9kYXRhdmlldykuZ2V0Q3VyclJlYygpKTtcclxuICAgIHJlYy5zZXRGbGFnKHRoaXMuX2lkLCBSZWNvcmQuRkxBR19NT0RJRklFRCk7XHJcblxyXG4gICAgLy8gVGhpcyBmbGFnIHdpbGwgYmUgc2V0IGFzIEZMQUdfTU9ESUZJRUQgYW5kIG5ldmVyIGNsZWFyZWQuIFFjciAjOTI2ODE1XHJcbiAgICByZWMuc2V0RmxhZyh0aGlzLl9pZCwgUmVjb3JkLkZMQUdfTU9ESUZJRURfQVRMRUFTVF9PTkNFKTtcclxuICAgIGlmICh0aGlzLklzVmlydHVhbClcclxuICAgICAgdGhpcy5tb2RpZmllZEF0TGVhc3RPbmNlID0gdHJ1ZTtcclxuICAgIC8vIHRoZSBzZXR0aW5nIG9mIHRoZSByZWNvcmQgbW9kaWZpZWQgZmxhZyBpcyBkb25lIGV4cGxpY2l0bHlcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIHVwZGF0ZWQgZmxhZ1xyXG4gIC8vLyAgIHBsZWFzZSBub3RlIHRoYXQgY2xlYXJpbmcgdGhlIGZsYWcgaXMgZG9uZSBleHBsaWNpdGx5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXRVcGRhdGVkKCk6IHZvaWQge1xyXG4gICAgbGV0IGN1cnJSZWM6IFJlY29yZCA9ICg8RGF0YVZpZXc+dGhpcy5fZGF0YXZpZXcpLmdldEN1cnJSZWMoKTtcclxuICAgIGN1cnJSZWMuc2V0RmxhZyh0aGlzLl9pZCwgUmVjb3JkLkZMQUdfVVBEQVRFRCk7XHJcbiAgICBjdXJyUmVjLnNldFVwZGF0ZWQoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRydWUgaWYgdGhpcyBmaWVsZCBpcyBhIHBhcmFtZXRlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgaXNQYXJhbSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc1BhcmFtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgaWYgdGhlIGZpZWxkIGluIGV2YWx1YXRpb24gcHJvY2Vzc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgaXNJbkV2YWxQcm9jZXNzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luRXZhbFByb2Nlc3M7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0cnVlIGlmIHRoZSBmaWVsZCBoYXMgYW4gaW5pdCBleHByZXNzaW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBoYXNJbml0RXhwKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luaXRFeHAgIT09IG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0cnVlIGlmIHRoZSBzZXJ2ZXIgcmVjb21wdXRlcyB0aGlzIGZpZWxkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBpc1NlcnZlclJjbXAoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVjb21wdXRlICE9PSBudWxsICYmIHRoaXMuX3JlY29tcHV0ZS5pc1NlcnZlclJjbXAoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBwaWN0dXJlIG9mIHRoZSBmaWVsZCBhcyBhIHN0cmluZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0UGljdHVyZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BpY3R1cmU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgdGhlIGlkIG9mIHRoZSBsaW5rIHRoaXMgZmllbGQgYmVsb25nIHRvXHJcbiAgLy8vICAgaWYgZG9lcyBub3QgYmVsb25nIHRvIGFueSBsaW5rIHJldHVybiAtMVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0RGF0YXZpZXdIZWFkZXJJZCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGF2aWV3SGVhZGVySWQ7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgd2hldGhlciB0aGUgZmllbGQgYmVsb25ncyB0byBhIGxpbmsgb3Igbm90XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXQgSXNMaW5rRmllbGQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNMaW5rRmxkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGV2YWx1YXRlcyBhbmQgcmV0dXJucyB0aGUgaW5pdCBleHByZXNzaW9uIHZhbHVlIG9mIHRoaXMgZmllbGQgKG51bGwgaWYgdGhlcmUgaXMgbm9uKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHVibGljIGFzeW5jIGdldEluaXRFeHBWYWwocmVzOiBSZWZQYXJhbTxzdHJpbmc+LCBpc051bGw6IFJlZlBhcmFtPGJvb2xlYW4+KTogUHJvbWlzZTx2b2lkPiB7XHJcblxyXG4gICAgaWYgKHRoaXMuX2luaXRFeHAgIT0gbnVsbClcclxuICAgICAgYXdhaXQgdGhpcy5FdmFsdWF0ZUluaXRFeHByZXNzaW9uKHJlcywgaXNOdWxsKTtcclxuICAgIGVsc2VcclxuICAgICAgcmVzLnZhbHVlID0gdGhpcy5nZXREZWZhdWx0VmFsdWUoKTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0cyB0aGUgaGFzQ2hhbmdlRXZlbnQgZmxhZyB0byBUUlVFXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXRIYXNDaGFuZ2VFdmVudCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2hhc0NoYW5nZUV2ZW50ID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXRyaWV2ZXMgdGhlIGhhc0NoYW5nZUV2ZW50IGZsYWdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZ2V0SGFzQ2hhbmdlRXZlbnQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faGFzQ2hhbmdlRXZlbnQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IGhhc1pvb21IYW5kbGVyIHRvIHRydWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldEhhc1pvb21IYW5kbGVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5faGFzWm9vbUhhbmRsZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgaGFzWm9vbUhhbmRsZXJcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIGdldEhhc1pvb21IYW5kbGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hhc1pvb21IYW5kbGVyO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRydWUgaWYgaW4gdGhpcyBmaWVsZCB3aWxsIGNhdXNlIGludmFsaWRhdGlvbiBvZiBhbGwgcm93cyBpbiB0YWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBpc0NhdXNlVGFibGVJbnZhbGlkYXRpb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2F1c2VUYWJsZUludmFsaWRhdGlvbjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgY2F1c2UgVGFibGUgSW52YWxpZGF0aW9uIG1lbWJlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjYXVzZVRhYmxlSW52YWxpZGF0aW9uXCI+PC9wYXJhbT5cclxuICBjYXVzZVRhYmxlSW52YWxpZGF0aW9uKGNhdXNlVGFibGVJbnZhbGlkYXRpb246IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX2NhdXNlVGFibGVJbnZhbGlkYXRpb24gPSBjYXVzZVRhYmxlSW52YWxpZGF0aW9uO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHdoZW4gdmFsdWUgaXMgbnVsbCwgZ2V0IHZhbHVlIHRoYXQgcmVwcmVzZW50IG51bGxcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY2hlY2tOdWxsQXJpdGhtZXRpY1wiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBnZXRWYWx1ZUZvck51bGwoY2hlY2tOdWxsQXJpdGhtZXRpYzogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBsZXQgdmFsOiBzdHJpbmc7XHJcbiAgICBpZiAodGhpcy5OdWxsQWxsb3dlZCkge1xyXG5cclxuICAgICAgaWYgKGNoZWNrTnVsbEFyaXRobWV0aWMgJiYgc3VwZXIuZ2V0VGFzaygpLmdldE51bGxBcml0aG1ldGljKCkgPT09IENvbnN0YW50cy5OVUxMX0FSSVRIX05VTExJRlkpIHtcclxuICAgICAgICB2YWwgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLl9udWxsVmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuX251bGxWYWx1ZSA9IHN1cGVyLmdldE1hZ2ljRGVmYXVsdFZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhbCA9IHRoaXMuX251bGxWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHZhbCA9IHN1cGVyLmdldE1hZ2ljRGVmYXVsdFZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIGNvbnRyb2wgd2hpY2ggaXMgYXR0YWNoZWQgdG8gdGhlIGZpZWxkIGFuZCByZXNpZGVzIG9uIHRoZSBzYW1lIHRhc2tcclxuICAvLy8gICBvZiBvZiB0aGUgZmllbGRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHB1YmxpYyBnZXRDdHJsKCk6IE1nQ29udHJvbCB7XHJcbiAgICBsZXQgY3RybDogTWdDb250cm9sO1xyXG5cclxuICAgIGlmICh0aGlzLl9jb250cm9scyAhPSBudWxsKSB7XHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLl9jb250cm9scy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGN0cmwgPSA8TWdDb250cm9sPnRoaXMuX2NvbnRyb2xzLmdldF9JdGVtKGkpO1xyXG4gICAgICAgIGlmIChjdHJsLmdldEZvcm0oKS5nZXRUYXNrKCkgPT09IHRoaXMuZ2V0VGFzaygpKVxyXG4gICAgICAgICAgcmV0dXJuIGN0cmw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHVwZGF0ZSB0aGUgZGlzcGxheVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYXN5bmMgdXBkYXRlRGlzcGxheSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHN1cGVyLnVwZGF0ZURpc3BsYXlXaXRoVmFsdWUodGhpcy5nZXREaXNwVmFsdWUoKSwgdGhpcy5pc051bGwoKSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSB2YWx1ZSB0byBkaXNwbGF5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgZ2V0RGlzcFZhbHVlKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5pc051bGwoKSkge1xyXG4gICAgICBpZiAodGhpcy5fbnVsbERpc3BsYXkgIT0gbnVsbClcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXROdWxsRGlzcGxheSgpO1xyXG4gICAgICBlbHNlIHJldHVybiBzdXBlci5nZXRNYWdpY0RlZmF1bHRWYWx1ZSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSByZXR1cm4gdGhpcy5nZXRWYWx1ZShmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHRydWUsIGlmIHJhbmdlIGNvbmRpdGlvbiBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgaWVsZCBkdXJpbmcgY29tcHV0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0IFNob3VsZENoZWNrUmFuZ2VJbkNvbXB1dGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5Jc0xpbmtGaWVsZCB8fCAodGhpcy5Jc1ZpcnR1YWwgJiYgKDxEYXRhVmlldz50aGlzLl9kYXRhdmlldykuSGFzTWFpblRhYmxlKTtcclxuICB9XHJcblxyXG4gIElzRm9yQXJndW1lbnQodGFza0hhc1BhcmFtZXRlcnM6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIC8vIElmIHdlIG5lZWQgYSBwYXJhbWV0ZXIgYW5kIHRoZSBmaWVsZCBpcyBub3Qgb25lXHJcbiAgICBpZiAodGFza0hhc1BhcmFtZXRlcnMpIHtcclxuICAgICAgaWYgKCF0aGlzLmlzUGFyYW0oKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICghdGhpcy5Jc1ZpcnR1YWwpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxufVxyXG4iXX0=
|