@magic-xpa/engine 4.801.0-dev481.233 → 4.801.0-dev481.237
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/bundles/magic-xpa-engine.umd.js +153 -167
- package/bundles/magic-xpa-engine.umd.js.map +1 -1
- package/bundles/magic-xpa-engine.umd.min.js +1 -1
- package/bundles/magic-xpa-engine.umd.min.js.map +1 -1
- package/esm2015/src/ClientManager.js +2 -2
- package/esm2015/src/CurrentClientVersion.js +2 -2
- package/esm2015/src/GUIManager.js +2 -2
- package/esm2015/src/GuiEventsProcessor.js +5 -5
- package/esm2015/src/commands/ClientToServer/BrowserEscEventCommand.js +2 -2
- package/esm2015/src/commands/ClientToServer/ClientOriginatedCommand.js +2 -2
- package/esm2015/src/commands/ClientToServer/ClientOriginatedCommandSerializer.js +3 -3
- package/esm2015/src/commands/ClientToServer/ColumnSortEventCommand.js +2 -2
- package/esm2015/src/commands/ClientToServer/ComputeEventCommand.js +2 -2
- package/esm2015/src/commands/ClientToServer/ContextTerminationEventCommand.js +2 -2
- package/esm2015/src/commands/ClientToServer/ContextTimeoutResetCommand.js +2 -2
- package/esm2015/src/commands/ClientToServer/DataviewCommand.js +2 -2
- package/esm2015/src/commands/ClientToServer/EvaluateCommand.js +2 -2
- package/esm2015/src/commands/ClientToServer/EventCommand.js +2 -2
- package/esm2015/src/commands/ClientToServer/ExecOperCommand.js +2 -2
- package/esm2015/src/commands/ClientToServer/FetchDataControlValuesEventCommand.js +2 -2
- package/esm2015/src/commands/ClientToServer/IndexChangeEventCommand.js +2 -2
- package/esm2015/src/commands/ClientToServer/IniputForceWriteCommand.js +2 -2
- package/esm2015/src/commands/ClientToServer/NonReversibleExitEventCommand.js +2 -2
- package/esm2015/src/commands/ClientToServer/QueryCommand.js +2 -2
- package/esm2015/src/commands/ClientToServer/RecomputeCommand.js +2 -2
- package/esm2015/src/commands/ClientToServer/RefreshEventCommand.js +2 -2
- package/esm2015/src/commands/ClientToServer/RefreshScreenEventCommand.js +2 -2
- package/esm2015/src/commands/ClientToServer/RollbackEventCommand.js +2 -2
- package/esm2015/src/commands/ClientToServer/SubformOpenEventCommand.js +2 -2
- package/esm2015/src/commands/ClientToServer/SubformRefreshEventCommand.js +2 -2
- package/esm2015/src/commands/ClientToServer/TransactionCommand.js +2 -2
- package/esm2015/src/commands/ClientToServer/WriteMessageToServerLogCommand.js +2 -2
- package/esm2015/src/data/DataView.js +2 -2
- package/esm2015/src/data/Field.js +2 -2
- package/esm2015/src/data/Record.js +4 -4
- package/esm2015/src/data/RecordsTable.js +2 -2
- package/esm2015/src/data/TaskTransactionManager.js +2 -2
- package/esm2015/src/data/XMLBasedDcValuesBuilder.js +3 -3
- package/esm2015/src/env/Environment.js +1 -7
- package/esm2015/src/event/Event.js +6 -14
- package/esm2015/src/event/EventsManager.js +32 -32
- package/esm2015/src/event/IEventsManager.js +1 -1
- package/esm2015/src/event/RunTimeEvent.js +7 -7
- package/esm2015/src/exp/ExpressionEvaluator.js +21 -21
- package/esm2015/src/exp/ExpressionLocalJpn.js +3 -3
- package/esm2015/src/gui/MgControl.js +1 -1
- package/esm2015/src/gui/MgForm.js +9 -9
- package/esm2015/src/http/client/HttpClientAsync.js +4 -4
- package/esm2015/src/http/client/HttpClientBase.js +4 -4
- package/esm2015/src/http/client/HttpClientSync.js +3 -3
- package/esm2015/src/remote/RemoteCommandsProcessor.js +7 -8
- package/esm2015/src/rt/Boundary.js +4 -4
- package/esm2015/src/rt/DataviewHeaderBase.js +1 -1
- package/esm2015/src/rt/DataviewHeaderFactory.js +2 -2
- package/esm2015/src/rt/DataviewHeadersSaxHandler.js +2 -2
- package/esm2015/src/rt/Operation.js +5 -5
- package/esm2015/src/rt/RemoteDataviewHeader.js +6 -6
- package/esm2015/src/rt/Transaction.js +2 -2
- package/esm2015/src/tasks/MGDataCollection.js +3 -3
- package/esm2015/src/tasks/RemoteTaskService.js +3 -3
- package/esm2015/src/tasks/Task.js +9 -9
- package/esm2015/src/tasks/TaskServiceBase.js +1 -1
- package/esm2015/src/tasks/sort/SortCollection.js +4 -4
- package/esm2015/src/util/FlowMonitorQueue.js +2 -2
- package/esm2015/src/util/Process.js +2 -2
- package/esm2015/src/util/ReturnResult.js +3 -3
- package/fesm2015/magic-xpa-engine.js +153 -167
- package/fesm2015/magic-xpa-engine.js.map +1 -1
- package/package.json +4 -4
- package/src/GuiEventsProcessor.d.ts +1 -1
- package/src/commands/ClientToServer/BrowserEscEventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/ClientOriginatedCommand.d.ts +1 -2
- package/src/commands/ClientToServer/ColumnSortEventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/ComputeEventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/ContextTerminationEventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/ContextTimeoutResetCommand.d.ts +1 -2
- package/src/commands/ClientToServer/DataviewCommand.d.ts +1 -2
- package/src/commands/ClientToServer/EvaluateCommand.d.ts +1 -2
- package/src/commands/ClientToServer/EventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/ExecOperCommand.d.ts +1 -2
- package/src/commands/ClientToServer/FetchDataControlValuesEventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/IndexChangeEventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/IniputForceWriteCommand.d.ts +1 -2
- package/src/commands/ClientToServer/NonReversibleExitEventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/QueryCommand.d.ts +1 -2
- package/src/commands/ClientToServer/RecomputeCommand.d.ts +1 -2
- package/src/commands/ClientToServer/RefreshEventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/RefreshScreenEventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/RollbackEventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/SubformOpenEventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/SubformRefreshEventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/TransactionCommand.d.ts +1 -2
- package/src/commands/ClientToServer/WriteMessageToServerLogCommand.d.ts +1 -2
- package/src/data/RecordsTable.d.ts +1 -2
- package/src/data/XMLBasedDcValuesBuilder.d.ts +1 -1
- package/src/env/Environment.d.ts +0 -3
- package/src/event/Event.d.ts +0 -3
- package/src/event/EventsManager.d.ts +7 -8
- package/src/event/IEventsManager.d.ts +5 -6
- package/src/exp/ExpressionEvaluator.d.ts +2 -2
- package/src/exp/ExpressionLocalJpn.d.ts +2 -2
- package/src/gui/MgForm.d.ts +4 -4
- package/src/http/client/HttpClientAsync.d.ts +2 -2
- package/src/http/client/HttpClientBase.d.ts +2 -2
- package/src/http/client/HttpClientSync.d.ts +2 -2
- package/src/remote/RemoteCommandsProcessor.d.ts +1 -1
- package/src/rt/DataviewHeaderBase.d.ts +1 -1
- package/src/rt/DataviewHeaderFactory.d.ts +1 -1
- package/src/rt/Operation.d.ts +1 -1
- package/src/rt/RemoteDataviewHeader.d.ts +1 -2
- package/src/rt/Transaction.d.ts +1 -1
- package/src/tasks/RemoteTaskService.d.ts +2 -3
- package/src/tasks/Task.d.ts +1 -1
- package/src/tasks/TaskServiceBase.d.ts +2 -4
- package/src/tasks/sort/SortCollection.d.ts +2 -3
- package/src/util/FlowMonitorQueue.d.ts +1 -1
- package/src/util/Process.d.ts +1 -1
|
@@ -56,7 +56,7 @@ export class Field extends FieldBase {
|
|
|
56
56
|
}
|
|
57
57
|
this._dataview = dataview;
|
|
58
58
|
this._linkExp = new YesNoExp(false);
|
|
59
|
-
FieldDef._default_date = DisplayConvertor.Instance.disp2mg(PICInterface.DEFAULT_DATE,
|
|
59
|
+
FieldDef._default_date = DisplayConvertor.Instance.disp2mg(PICInterface.DEFAULT_DATE, new PIC("6", StorageAttribute.NUMERIC, super.getTask().getCompIdx()), super.getTask().getCompIdx(), BlobType.CONTENT_TYPE_UNKNOWN);
|
|
60
60
|
}
|
|
61
61
|
get VirAsReal() {
|
|
62
62
|
return this._virAsReal;
|
|
@@ -669,4 +669,4 @@ Field.LEAVE_FLAGS = false;
|
|
|
669
669
|
Field.NUM0 = null;
|
|
670
670
|
Field.NUM1 = null;
|
|
671
671
|
Field._variableChangeEvts = new List();
|
|
672
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL2RhdGEvRmllbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbkcsT0FBTyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLFlBQVksRUFDWixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLE9BQU8sRUFDUCxlQUFlLEVBQ2YsWUFBWSxFQUNaLFNBQVMsRUFDVixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFDTCxRQUFRLEVBQ1IsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFDTixRQUFRLEVBRVIsUUFBUSxFQUNSLEdBQUcsRUFDSCxVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFHL0QsT0FBTyxFQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzVELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRWpELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRWhDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsV0FBVyxFQUFF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QkFDMUIsT0FBTyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztTQUMxQzs7WUFDSSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUtELElBQUkseUJBQXlCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQWUsSUFBSSxDQUFDLFNBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBRUQsYUFBYSxDQUFDLGlCQUEwQjtRQUV0QyxJQUFJLGlCQUFpQixFQUFFO1lBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ25CLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FDRjthQUNJO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ25CLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7QUF4aENNLGlCQUFXLEdBQVksS0FBSyxDQUFDO0FBRXJCLFVBQUksR0FBYSxJQUFJLENBQUM7QUFDdEIsVUFBSSxHQUFhLElBQUksQ0FBQztBQWlDdEIseUJBQW1CLEdBQStCLElBQUksSUFBSSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FwcGxpY2F0aW9uRXhjZXB0aW9uLCBEZWJ1ZywgTGlzdCwgTk51bWJlciwgTlN0cmluZywgUmVmUGFyYW19IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5pbXBvcnQge1xyXG4gIENvbnN0YW50cyxcclxuICBJbnRlcm5hbEludGVyZmFjZSxcclxuICBMb2dnZXIsXHJcbiAgTXNnSW50ZXJmYWNlLFxyXG4gIFBJQ0ludGVyZmFjZSxcclxuICBTdG9yYWdlQXR0cmlidXRlLFxyXG4gIFN0clV0aWwsXHJcbiAgVXRpbFN0ckJ5dGVNb2RlLFxyXG4gIFhNTENvbnN0YW50cyxcclxuICBYbWxQYXJzZXJcclxufSBmcm9tIFwiQG1hZ2ljLXhwYS91dGlsc1wiO1xyXG5pbXBvcnQge1xyXG4gIEJsb2JUeXBlLFxyXG4gIERpc3BsYXlDb252ZXJ0b3IsXHJcbiAgRXhwVmFsLFxyXG4gIEZpZWxkRGVmLFxyXG4gIE1nQ29udHJvbEJhc2UsXHJcbiAgTlVNX1RZUEUsXHJcbiAgUElDLFxyXG4gIFZlY3RvclR5cGVcclxufSBmcm9tIFwiQG1hZ2ljLXhwYS9ndWlcIjtcclxuXHJcbmltcG9ydCB7WWVzTm9FeHB9IGZyb20gXCIuLi9leHAvWWVzTm9FeHBcIjtcclxuaW1wb3J0IHtFeHByZXNzaW9ufSBmcm9tIFwiLi4vZXhwL0V4cHJlc3Npb25cIjtcclxuaW1wb3J0IHtFeHByZXNzaW9uRXZhbHVhdG9yfSBmcm9tIFwiLi4vZXhwL0V4cHJlc3Npb25FdmFsdWF0b3JcIjtcclxuaW1wb3J0IHtNZ0Zvcm19IGZyb20gXCIuLi9ndWkvTWdGb3JtXCI7XHJcbmltcG9ydCB7TWdDb250cm9sfSBmcm9tIFwiLi4vZ3VpL01nQ29udHJvbFwiO1xyXG5pbXBvcnQge1JlY29tcHV0ZSwgUmVjb21wdXRlX1JjbXBCeX0gZnJvbSBcIi4uL3J0L1JlY29tcHV0ZVwiO1xyXG5pbXBvcnQge0JvdW5kYXJ5fSBmcm9tIFwiLi4vcnQvQm91bmRhcnlcIjtcclxuaW1wb3J0IHtBcmd1bWVudHNMaXN0fSBmcm9tIFwiLi4vcnQvQXJndW1lbnRzTGlzdFwiO1xyXG5pbXBvcnQge0NvbnN0SW50ZXJmYWNlfSBmcm9tIFwiLi4vQ29uc3RJbnRlcmZhY2VcIjtcclxuaW1wb3J0IHtUYXNrfSBmcm9tIFwiLi4vdGFza3MvVGFza1wiO1xyXG5pbXBvcnQge1J1blRpbWVFdmVudH0gZnJvbSBcIi4uL2V2ZW50L1J1blRpbWVFdmVudFwiO1xyXG5pbXBvcnQge1JlY29yZH0gZnJvbSBcIi4vUmVjb3JkXCI7XHJcbmltcG9ydCB7RGF0YVZpZXd9IGZyb20gXCIuL0RhdGFWaWV3XCI7XHJcbmltcG9ydCB7aXNOdWxsT3JVbmRlZmluZWR9IGZyb20gXCJ1dGlsXCI7XHJcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSBcIi4uL2Vudi9FbnZpcm9ubWVudFwiO1xyXG5pbXBvcnQgeyBGaWVsZEJhc2UgfSBmcm9tIFwiLi9GaWVsZEJhc2VcIjtcclxuaW1wb3J0IHsgTGFzdEZvY3VzZWRNYW5hZ2VyIH0gZnJvbSBcIi4uL3J0L0xhc3RGb2N1c2VkTWFuYWdlclwiO1xyXG5pbXBvcnQgeyBMYW5ndWFnZURhdGEgfSBmcm9tIFwiLi4vZW52L0xhbmd1YWdlRGF0YVwiO1xyXG5pbXBvcnQgeyBBY2Nlc3NIZWxwZXIgfSBmcm9tIFwiLi4vQWNjZXNzSGVscGVyXCI7XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGRhdGEgZm9yIDxmbGRoIC4uLj5cclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIEZpZWxkIGV4dGVuZHMgRmllbGRCYXNlIHtcclxuICBzdGF0aWMgTEVBVkVfRkxBR1M6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgTlVNMDogTlVNX1RZUEUgPSBudWxsO1xyXG4gIHByaXZhdGUgc3RhdGljIE5VTTE6IE5VTV9UWVBFID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBfbGlua0V4cDogWWVzTm9FeHAgPSBudWxsO1xyXG4gIHByaXZhdGUgX3JlY29tcHV0ZTogUmVjb21wdXRlID0gbnVsbDtcclxuICBDYWNoZVRhYmxlRmxkSWR4OiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX2NhdXNlVGFibGVJbnZhbGlkYXRpb246IGJvb2xlYW4gPSBmYWxzZTsgLy8gY2hhbmdlIGluIHRoaXMgZmllbGQgd2lsbCBjYXVzZSBpbnZhbGlkYXRpb24gb2YgYWxsIHJvd3MgaW4gdGFibGVcclxuICBwcml2YXRlIF9mb3JtOiBNZ0Zvcm0gPSBudWxsO1xyXG4gIHByaXZhdGUgX2hhc0NoYW5nZUV2ZW50OiBib29sZWFuID0gZmFsc2U7IC8vIGlmIFRSVUUsIHRoZXJlIGlzIGEgaGFuZGxlciB0byBydW4gd2hlbiB0aGlzIGZpZWxkIGlzIHVwZGF0ZWRcclxuICBwcml2YXRlIF9oYXNab29tSGFuZGxlcjogYm9vbGVhbiA9IGZhbHNlOyAvLyBpZiBUUlVFLCB0aGVyZSBpcyBhIHpvb20gaGFuZGxlciBmb3IgdGhpcyBmaWVsZFxyXG4gIHByaXZhdGUgX2luRXZhbFByb2Nlc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9pbml0RXhwOiBFeHByZXNzaW9uID0gbnVsbDtcclxuICBwcml2YXRlIF9pbnZhbGlkVmFsdWU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByaXZhdGUgX2lzTGlua0ZsZDogYm9vbGVhbiA9IGZhbHNlOyAvLyBpZiBUUlVFLCBpdCBtZWFucyB0aGF0IHRoZSBmaWVsZCBiZWxvbmdzIHRvIGEgbGlua1xyXG4gIHByaXZhdGUgX2lzVmlydHVhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2RhdGF2aWV3SGVhZGVySWQ6IG51bWJlciA9IC0xOyAgLy8gbWVtYmVycyByZWxhdGVkIHRvIHRhYmxlIGNhY2hlXHJcbiAgcHJpdmF0ZSBfbGlua0NyZWF0ZTogYm9vbGVhbiA9IGZhbHNlOyAvLyBJZiB0cnVlIHRoZW4gaXQncyBhIHJlYWwgZmllbGQgd2hpY2ggYmVsb25ncyB0byBsaW5rIGNyZWF0ZS5cclxuICBMb2NhdGU6IEJvdW5kYXJ5ID0gbnVsbDtcclxuICBSYW5nZTogQm91bmRhcnkgPSBudWxsO1xyXG4gIHByaXZhdGUgX2lzUGFyYW06IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9pc0V4cG9zZWRSb3V0ZVBhcmFtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaXNFeHBvc2VkVG9DbGllbnQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByaXZhdGUgX3ByZXZJc051bGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9wcmV2VmFsdWU6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfdGFibGVOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX2luZGV4SW5UYWJsZTogbnVtYmVyID0gLTE7XHJcblxyXG4gIHByaXZhdGUgX3ZpckFzUmVhbDogYm9vbGVhbiA9IGZhbHNlOyAvLyBJZiB0cnVlIHRoZW4gYSB2aXJ0dWFsIGZpZWxkIGlzIGNvbXB1dGVkIGFzIHJlYWwgKG5lZWRlZCBmb3IgbGluayByZXQgdmFsdWUpXHJcbiAgcHJvdGVjdGVkIF92YWw6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBtb2RpZmllZEF0TGVhc3RPbmNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaXNOdWxsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfY2xlYXJWZWN0b3JUeXBlOiBib29sZWFuID0gdHJ1ZTsgLy8gZG8gd2UgbmVlZCB0byB1cGRhdGUgdGhlIHZlY3RvciBvYmplY3RcclxuICBwcml2YXRlIF92ZWN0b3JUeXBlOiBWZWN0b3JUeXBlID0gbnVsbDsgLy8gdGhlIHZlY3RvciByZXByZXNlbnRhdGlvblxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBfdmFyaWFibGVDaGFuZ2VFdnRzOiBMaXN0PEZpZWxkIHwgUnVuVGltZUV2ZW50PiA9IG5ldyBMaXN0KCk7IC8vIGZvciBWYXJpYWJsZSBDaGFuZ2UgZXZlbnQgZXhlY3V0aW9uLCBwcmV2aW91c2x5IHVzZWQgdmlhIGdldFBlbmRpbmdWYXJDaGFuZ2VFdmVudHNcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENUT1JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGF0YXZpZXdcIj5hIHJlZmVyZW5jZSB0byB0aGUgZGF0YXZpZXc8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWRcIj5jb3VudGVyIG9mIHRoZSBmaWVsZCBpbiBGaWVsZFRhYmxlPC9wYXJhbT5cclxuICBjb25zdHJ1Y3RvcihkYXRhdmlldzogRGF0YVZpZXcsIGlkOiBudW1iZXIpIHtcclxuICAgIHN1cGVyKGlkKTtcclxuICAgIGlmIChGaWVsZC5OVU0wID09PSBudWxsKSB7XHJcbiAgICAgIEZpZWxkLk5VTTAgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgICAgRmllbGQuTlVNMSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgICBGaWVsZC5OVU0wLk5VTV80X0xPTkcoMCk7XHJcbiAgICAgIEZpZWxkLk5VTTEuTlVNXzRfTE9ORygxKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9kYXRhdmlldyA9IGRhdGF2aWV3O1xyXG4gICAgdGhpcy5fbGlua0V4cCA9IG5ldyBZZXNOb0V4cChmYWxzZSk7XHJcbiAgICBGaWVsZERlZi5fZGVmYXVsdF9kYXRlID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5kaXNwMm1nKFBJQ0ludGVyZmFjZS5ERUZBVUxUX0RBVEUsIG51bGwsXHJcbiAgICAgIG5ldyBQSUMoXCI2XCIsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQywgc3VwZXIuZ2V0VGFzaygpLmdldENvbXBJZHgoKSksXHJcbiAgICAgIHN1cGVyLmdldFRhc2soKS5nZXRDb21wSWR4KCksXHJcbiAgICAgIEJsb2JUeXBlLkNPTlRFTlRfVFlQRV9VTktOT1dOKTtcclxuICB9XHJcblxyXG5cclxuICBnZXQgVmlyQXNSZWFsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZpckFzUmVhbDtcclxuICB9XHJcblxyXG4gIGdldCBJc1ZpcnR1YWwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNWaXJ0dWFsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IElzRXhwb3NlZFJvdXRlUGFyYW0oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNFeHBvc2VkUm91dGVQYXJhbTtcclxuICB9XHJcblxyXG4gIGdldCBJc0V4cG9zZWRUb0NsaWVudCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc0V4cG9zZWRUb0NsaWVudDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gaW5kZXggaW4gdGFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldCBJbmRleEluVGFibGUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9pbmRleEluVGFibGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSBmaWVsZCBhdHRyaWJ1dGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByb3RlY3RlZCBzZXRBdHRyaWJ1dGUoYXR0cmlidXRlOiBzdHJpbmcsIHZhbHVlU3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCBpc1RhZ1Byb2Nlc3NlZDogYm9vbGVhbiA9IHN1cGVyLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlU3RyKTtcclxuICAgIGlmICghaXNUYWdQcm9jZXNzZWQpIHtcclxuICAgICAgbGV0IGRhdGE6IHN0cmluZ1tdID0gU3RyVXRpbC50b2tlbml6ZSh2YWx1ZVN0ciwgXCIsXCIpO1xyXG4gICAgICBpc1RhZ1Byb2Nlc3NlZCA9IHRydWU7XHJcbiAgICAgIHN3aXRjaCAoYXR0cmlidXRlKSB7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1ZJUlRVQUw6XHJcbiAgICAgICAgICB0aGlzLl9pc1ZpcnR1YWwgPSAoWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cikgIT09IDApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1BBUkFNOlxyXG4gICAgICAgICAgdGhpcy5faXNQYXJhbSA9IChYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKSAhPT0gMCk7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuX2lzVmlydHVhbCAmJiB0aGlzLl9pc1BhcmFtKVxyXG4gICAgICAgICAgLy8gcG9zc2libGUgZXJyb3IgLSB3ZSByZWx5IG9uIHRoZSBvcmRlciBvZiBYTUwgYXR0cmlidXRlc1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXHJcbiAgICAgICAgICAgICAgXCJpbiBGaWVsZC5pbml0RWxlbWVudHMoKTogbm9uIHZpcnR1YWwgZmllbGQgaXMgZGVmaW5lZCBhcyBhIHBhcmFtZXRlclwiKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9FWFBPU0VEX1JPVVRFX1BBUkFNUzpcclxuICAgICAgICAgIHRoaXMuX2lzRXhwb3NlZFJvdXRlUGFyYW0gPSAoWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cikgIT09IDApO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLl9pc1BhcmFtICYmIHRoaXMuX2lzRXhwb3NlZFJvdXRlUGFyYW0pXHJcbiAgICAgICAgICAvLyBwb3NzaWJsZSBlcnJvciAtIHdlIHJlbHkgb24gdGhlIG9yZGVyIG9mIFhNTCBhdHRyaWJ1dGVzXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcclxuICAgICAgICAgICAgICBcImluIEZpZWxkLmluaXRFbGVtZW50cygpOiBub24gcGFyYW1ldGVyIGZpZWxkIGlzIGRlZmluZWQgYXMgYSBleHBvc2VkIHJvdXRlIHBhcmFtZXRlclwiKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9FWFBPU0VEX1RPX0NMSUVOVDpcclxuICAgICAgICAgIC8vIFRoZSBmbGFnIHdhcyBzZXJpYWxpemVkIG9ubHkgZm9yIHNlcnZlciB2YXJpYWJsZSAoZXhwb3NlIHRvIGNsaWVudCA9IDAgKVxyXG4gICAgICAgICAgaWYgKFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpID09IDApXHJcbiAgICAgICAgICAgIHRoaXMuX2lzRXhwb3NlZFRvQ2xpZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVklSX0FTX1JFQUw6XHJcbiAgICAgICAgICB0aGlzLl92aXJBc1JlYWwgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfTE5LX0NSRUFURTpcclxuICAgICAgICAgIHRoaXMuX2xpbmtDcmVhdGUgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfTE5LRVhQOlxyXG4gICAgICAgICAgdGhpcy5fbGlua0V4cC5zZXRWYWwoPFRhc2s+KHRoaXMuZ2V0VGFzaygpKSwgdmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RBQkxFX05BTUU6XHJcbiAgICAgICAgICB0aGlzLl90YWJsZU5hbWUgPSBYbWxQYXJzZXIudW5lc2NhcGUodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0lOREVYX0lOX1RBQkxFOlxyXG4gICAgICAgICAgdGhpcy5faW5kZXhJblRhYmxlID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSU5JVDpcclxuICAgICAgICAgIGxldCBleHBOdW06IG51bWJlciA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgdGhpcy5faW5pdEV4cCA9ICg8VGFzaz50aGlzLmdldFRhc2soKSkuZ2V0RXhwQnlJZChleHBOdW0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9OQU1FOiB7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DSEFDSEVEX0ZMRF9JRDpcclxuICAgICAgICAgIC8vIE1HX0FUVFJfQ0hBQ0hFRF9GTEQgaXMgaW4gdGhlIGZvcm1hdCBvZiBjYWNoZWRUYWJsZUlkLGZsZFxyXG4gICAgICAgICAgdGhpcy5DYWNoZVRhYmxlRmxkSWR4ID0gTk51bWJlci5QYXJzZShkYXRhWzFdKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9MT0NBVEU6XHJcbiAgICAgICAgICAvLyBsb2NhdGUgaXMgaW4gdGhlIGZvcm1hdCBvZiBtYXgsbWluIGV4cHJlc3Npb24gbnVtICgtMSBpZiBub24gZXhpc3RzKVxyXG4gICAgICAgICAgdGhpcy5Mb2NhdGUgPSBuZXcgQm91bmRhcnkoPFRhc2s+dGhpcy5nZXRUYXNrKCksIE5OdW1iZXIuUGFyc2UoZGF0YVsxXSksIE5OdW1iZXIuUGFyc2UoZGF0YVswXSksIHRoaXMuZ2V0VHlwZSgpLCB0aGlzLmdldFNpemUoKSwgdGhpcy5DYWNoZVRhYmxlRmxkSWR4KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9SQU5HRTpcclxuICAgICAgICAgIC8vIHJhbmdlIGlzIGluIHRoZSBmb3JtYXQgb2YgbWF4LG1pbiBleHByZXNzaW9uIG51bSAoLTEgaWYgbm9uIGV4aXN0cylcclxuICAgICAgICAgIHRoaXMuUmFuZ2UgPSBuZXcgQm91bmRhcnkoPFRhc2s+dGhpcy5nZXRUYXNrKCksIE5OdW1iZXIuUGFyc2UoZGF0YVsxXSksIE5OdW1iZXIuUGFyc2UoZGF0YVswXSksIHRoaXMuZ2V0VHlwZSgpLCB0aGlzLmdldFNpemUoKSwgdGhpcy5DYWNoZVRhYmxlRmxkSWR4KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9MSU5LOlxyXG4gICAgICAgICAgdGhpcy5fZGF0YXZpZXdIZWFkZXJJZCA9IE5OdW1iZXIuUGFyc2UodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0lTX0xJTktfRklFTEQ6XHJcbiAgICAgICAgICB0aGlzLl9pc0xpbmtGbGQgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgaXNUYWdQcm9jZXNzZWQgPSBmYWxzZTtcclxuICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhOU3RyaW5nLkZvcm1hdChcIlVucmVjb2duaXplZCBhdHRyaWJ1dGU6ICd7MH0nXCIsIGF0dHJpYnV0ZSkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBpc1RhZ1Byb2Nlc3NlZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgYSByZWZlcmVuY2UgdG8gdGhlIFJlY29tcHV0ZSBPYmplY3Qgb2YgdGhpcyBmaWVsZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZWNvbXBSZWZcIj5yZWZlcmVuY2UgdG8gUmVjb21wdXRlIE9iamVjdDwvcGFyYW0+XHJcbiAgc2V0UmVjb21wdXRlKHJlY29tcFJlZjogUmVjb21wdXRlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yZWNvbXB1dGUgPSByZWNvbXBSZWY7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFJlbW92ZXMgdGhlIHNwZWNpZmljIHN1YmZvcm0gdGFzayBmcm9tIHRoZSByZWNvbXB1dGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN1YmZvcm1UYXNrXCI+PC9wYXJhbT5cclxuICBSZW1vdmVTdWJmb3JtRnJvbVJlY29tcHV0ZShzdWJmb3JtVGFzazogVGFzayk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3JlY29tcHV0ZSAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9yZWNvbXB1dGUuUmVtb3ZlU3ViZm9ybShzdWJmb3JtVGFzayk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEluc2VydCB0aGUgc3BlY2lmaWMgc3ViZm9ybSB0YXNrIGludG8gdGhlIGZpZWxkIHJlY29tcHV0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3ViZm9ybVRhc2tcIj48L3BhcmFtPlxyXG4gIEFkZFN1YmZvcm1SZWNvbXB1dGUoc3ViZm9ybVRhc2s6IFRhc2spOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9yZWNvbXB1dGUgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5fcmVjb21wdXRlID0gbmV3IFJlY29tcHV0ZSgpO1xyXG4gICAgICB0aGlzLl9yZWNvbXB1dGUuVGFzayA9IDxUYXNrPnN1cGVyLmdldFRhc2soKTtcclxuICAgICAgdGhpcy5fcmVjb21wdXRlLk93bmVyRmxkID0gdGhpcztcclxuICAgICAgdGhpcy5fcmVjb21wdXRlLlJjbXBNb2RlID0gUmVjb21wdXRlX1JjbXBCeS5DTElFTlQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9yZWNvbXB1dGUuQWRkU3ViZm9ybShzdWJmb3JtVGFzayk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCBhIHJlZmVyZW5jZSB0byBhIGNvbnRyb2wgYXR0YWNoZWQgdG8gdGhpcyBmaWVsZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdHJsXCI+dGhlIGNvbnRyb2wgd2hpY2ggaXMgYXR0YWNoZWQgdG8gdGhpcyBmaWVsZDwvcGFyYW0+XHJcbiAgU2V0Q29udHJvbChjdHJsOiBNZ0NvbnRyb2xCYXNlKTogdm9pZCB7XHJcbiAgICBzdXBlci5TZXRDb250cm9sKGN0cmwpO1xyXG5cclxuICAgIGlmICh0aGlzLl9pc1ZpcnR1YWwgJiYgY3RybC5Jc1JlcGVhdGFibGUgJiYgdGhpcy5faW5pdEV4cCA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9jYXVzZVRhYmxlSW52YWxpZGF0aW9uID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjb21wdXRlIHRoZSBmaWVsZCBpbml0IGV4cHJlc3Npb24gb3IgZ2V0IGl0cyB2YWx1ZSBmcm9tIHRoZSBkYXRhdmlldywgc2V0XHJcbiAgLy8vICAgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCAoYW5kIHVwZGF0ZSB0aGUgZGlzcGxheSlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVjb21wdXRlXCI+dGVsbHMgdGhlIGNvbXB1dGUgdG8gc3RhcnQgdGhlIHJlY29tcHV0ZSBjaGFpbiBhbmQgcmVjb21wdXRlXHJcbiAgLy8vICAgdGhlIGV4cHJlc3Npb24gb2YgdGhpcyBmaWVsZCAoaWYgaXQgaXMgcmVhbClcclxuICAvLy8gPC9wYXJhbT5cclxuICBwdWJsaWMgYXN5bmMgY29tcHV0ZShyZWNvbXB1dGU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCByZXN1bHQ6IFJlZlBhcmFtPHN0cmluZz4gPSBuZXcgUmVmUGFyYW0odGhpcy5nZXRWYWx1ZShmYWxzZSkpO1xyXG4gICAgbGV0IGlzTnVsbEZsZDogUmVmUGFyYW08Ym9vbGVhbj4gPSBuZXcgUmVmUGFyYW0odGhpcy5faXNOdWxsKTtcclxuICAgIGxldCByZWMgPSAoPERhdGFWaWV3PnRoaXMuX2RhdGF2aWV3KS5nZXRDdXJyUmVjKCk7XHJcbiAgICBsZXQgdGFzayA9IDxUYXNrPnN1cGVyLmdldFRhc2soKTtcclxuXHJcbiAgICBsZXQgemVyb1JlYWw6IGJvb2xlYW4gPSB0aGlzLl9saW5rQ3JlYXRlICYmIHJlYy5JbkNvbXB1dGUgJiYgIXJlY29tcHV0ZSAmJiB0YXNrLmdldE1vZGUoKSA9PT0gQ29uc3RhbnRzLlRBU0tfTU9ERV9DUkVBVEU7XHJcbiAgICAvLyBRQ1IgIzk5OTAyNCAtIHplcm8gbG5rIGNyZWF0ZSB2YWx1ZXMgZHVyaW5nIGNvbXB1dGVcclxuXHJcbiAgICBpZiAodGhpcy5fZm9ybSA9PSBudWxsKVxyXG4gICAgICB0aGlzLl9mb3JtID0gPE1nRm9ybT50YXNrLmdldEZvcm0oKTtcclxuXHJcbiAgICAvLyBubyBuZWVkIHRvIHplcm8gcmVhbHMgaWYgd2UgYXJlIHJlY292ZXJpbmcgYSByZWNvcmQuXHJcbiAgICBpZiAoKHRoaXMuX2Zvcm0gIT0gbnVsbCAmJiB0aGlzLl9mb3JtLkluUmVzdG9yZSkgfHwgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuR2V0U3RvcEV4ZWN1dGlvbkZsYWcoKSlcclxuICAgICAgemVyb1JlYWwgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgcnRFdnQ6IFJ1blRpbWVFdmVudCA9IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmdldExhc3RSdEV2ZW50KCk7XHJcbiAgICBsZXQgY29tcHV0ZU9uQ2FuY2VsRXZlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGlmIChydEV2dCAhPSBudWxsKVxyXG4gICAgICBjb21wdXRlT25DYW5jZWxFdmVudCA9IHJ0RXZ0LmdldEludGVybmFsQ29kZSgpID09PSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ0FOQ0VMO1xyXG5cclxuICAgIC8vIHZpcnR1YWwgYXMgcmVhbCBpcyBlc3BlY2lhbGx5IGZvciBmaWVsZHMgd2hpY2ggYXJlIHVzZWQgYXMgYSBcInJldHVybiB2YWx1ZVwiXHJcbiAgICAvLyBvZiBhIGxpbmsuIFRoZWlyIHZhbHVlIGlzIHJldHVybmVkIGJ5IHRoZSBsaW5rIHJlc3VsdCBhbmQgbm90IGJ5IHRoZSBpbml0IGV4cHJlc3Npb24uXHJcbiAgICAvLyB3aGVuIHRoZSBmb3JtIGlzIHJlc3RvcmluZyB0aGUgY3VyciByb3cgd2Ugc2hvdWxkbid0IGNvbXB1dGUgdGhlIGluaXQgZXhwcmVzc2lvblxyXG4gICAgLy8gYnV0IHRvIHVzZSB0aGUgdmFsdWUgZnJvbSB0aGUgcmVjb3JkIChieSBnZXRWYWx1ZSlcclxuICAgIC8vIFFDUiM5MjY3NTg6IFdoZW4gVGFzaydzIG1vZGUgaXMgQ3JlYXRlLCBpbml0IGZvciByZWFsIGZpZWxkIHNob3VsZCBiZSBldmFsdWF0ZWQgb25seSB3aGVuIGl0IGNvbWVzIGZvciBjYW5jZWwgZXZlbnQobGFzdCBydW50aW1lIGV2ZW50IGlzIGNhbmNlbCBldmVudCkuXHJcbiAgICAvLyBXaGlsZSBjcmVhdGluZyBhIG5ldyByZWNvcmQsIGluaXQgd2lsbCBiZSBldmFsdWF0ZWQgYmVjYXVzZSBvZiBjb25kaXRpb24gcmVjLmlzTmV3UmVjKCkuIChJdCBpcyB0aGUgcmVmaXggb2YgUUNSIzk5NDA3MilcclxuICAgIGlmICghdGhpcy5fdmlyQXNSZWFsICYmICh0aGlzLl9mb3JtID09IG51bGwgfHwgIXRoaXMuX2Zvcm0uSW5SZXN0b3JlKSAmJlxyXG4gICAgICAoKHRoaXMuX2lzVmlydHVhbCB8fCAodGFzay5nZXRNb2RlKCkgPT09IENvbnN0YW50cy5UQVNLX01PREVfQ1JFQVRFICYmIGNvbXB1dGVPbkNhbmNlbEV2ZW50KSkgfHwgcmVjb21wdXRlIHx8XHJcbiAgICAgICAgemVyb1JlYWwgfHwgcmVjLmlzTmV3UmVjKCkgJiYgIXJlYy5pc0NvbXB1dGVkKCkpKSB7XHJcbiAgICAgIGlmICghdGFzay5EYXRhVmlldy5pc0VtcHR5RGF0YXZpZXcoKSB8fCAodGFzay5EYXRhVmlldy5pc0VtcHR5RGF0YXZpZXcoKSAmJiAhdGhpcy5QYXJ0T2ZEYXRhdmlldykpIHtcclxuICAgICAgICAvLyBRQ1IgIzc3NTUwODogZm9yIGRhdGF2aWV3cywgd2hpY2ggYXJlIGNvbXB1dGVkIGJ5IHRoZSBzZXJ2ZXIsIHByZXZlbnRcclxuICAgICAgICAvLyBjb21wdXRpbmcgdGhlIGluaXQgZXhwcmVzc2lvbiB3aGlsZSBpbiBjb21wdXRlIG9mIHRoZSByZWNvcmQgYmVjYXVzZSB0aGVcclxuICAgICAgICAvLyBzZXJ2ZXIgaGF2ZSBhbHJlYWR5IGRvbmUgaXRcclxuICAgICAgICBpZiAoKHRoaXMuX2lzVmlydHVhbCB8fCB0YXNrLmdldE1vZGUoKSA9PT0gQ29uc3RhbnRzLlRBU0tfTU9ERV9DUkVBVEUpIHx8ICg8RGF0YVZpZXc+dGhpcy5fZGF0YXZpZXcpLmNvbXB1dGVCeUNsaWVudCgpIHx8XHJcbiAgICAgICAgICAhcmVjLkluQ29tcHV0ZSB8fCB6ZXJvUmVhbCB8fCByZWMubGF0ZUNvbXB1dGUoKSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2luaXRFeHAgIT0gbnVsbCkge1xyXG5cclxuXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuRXZhbHVhdGVJbml0RXhwcmVzc2lvbihyZXN1bHQsIGlzTnVsbEZsZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh6ZXJvUmVhbClcclxuICAgICAgICAgICAgcmVzdWx0LnZhbHVlID0gdGhpcy5nZXREZWZhdWx0VmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9pbnZhbGlkVmFsdWUpIHtcclxuICAgICAgdGhpcy5fcHJldlZhbHVlID0gcmVzdWx0LnZhbHVlO1xyXG4gICAgICB0aGlzLl9wcmV2SXNOdWxsID0gaXNOdWxsRmxkLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5zZXRWYWx1ZShyZXN1bHQudmFsdWUsIGlzTnVsbEZsZC52YWx1ZSwgcmVjb21wdXRlLCBmYWxzZSwgcmVjb21wdXRlICYmICF0aGlzLl9pc1ZpcnR1YWwsIGZhbHNlLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBldmFsdWF0ZSBpbml0IGV4cHJlc3Npb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc3VsdFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaXNOdWxsRmxkXCI+PC9wYXJhbT5cclxuICBhc3luYyBFdmFsdWF0ZUluaXRFeHByZXNzaW9uKHJlc3VsdDogUmVmUGFyYW08c3RyaW5nPiwgaXNOdWxsRmxkOiBSZWZQYXJhbTxib29sZWFuPik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgRGVidWcuQXNzZXJ0KHRoaXMuX2luaXRFeHAgIT09IG51bGwpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5faW5FdmFsUHJvY2VzcyA9IHRydWU7XHJcbiAgICAgIHJlc3VsdC52YWx1ZSA9IGF3YWl0IHRoaXMuX2luaXRFeHAuZXZhbHVhdGVXaXRoUmVzdWx0VHlwZUFuZExlbmd0aCh0aGlzLl90eXBlLCB0aGlzLl9zaXplKTtcclxuICAgIH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICB0aGlzLl9pbkV2YWxQcm9jZXNzID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaXNOdWxsRmxkLnZhbHVlID0gKHJlc3VsdC52YWx1ZSA9PT0gbnVsbCk7XHJcbiAgICBpZiAoaXNOdWxsRmxkLnZhbHVlICYmIHRoaXMuTnVsbEFsbG93ZWQpIHtcclxuICAgICAgcmVzdWx0LnZhbHVlID0gdGhpcy5nZXRWYWx1ZShmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8vLyA8c3VtbWFyeT5cclxuICAvLy8vL1xyXG4gIC8vLy8vIDwvc3VtbWFyeT5cclxuICAvLy8vLyA8cGFyYW0gbmFtZT1cInJlY29tcHV0ZVwiPjwvcGFyYW0+XHJcbiAgLy8vLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIC8vIGJvb2wgU2hvdWxkUmVjb21wdXRlKGJvb2wgcmVjb21wdXRlKVxyXG4gIC8vIHtcclxuICAvLyAgIGlmIChyZWNvbXB1dGUpXHJcbiAgLy8gICB7XHJcbiAgLy8gICAgICBib29sIGNvbXB1dGVkQnlGZXRjaCA9ICFJc1ZpcnR1YWwgfHwgVmlyQXNSZWFsO1xyXG4gIC8vICAgICAgaWYgKGNvbXB1dGVkQnlGZXRjaClcclxuICAvLyAgICAgIHtcclxuICAvLyAgICAgICAgIFRhc2sgdGFzayA9IChUYXNrKWdldFRhc2soKTtcclxuICAvLyAgICAgICAgIERhdGF2aWV3SGVhZGVyQmFzZSBoZWFkZXIgPSB0YXNrLmdldERhdGF2aWV3SGVhZGVycygpLmdldERhdGF2aWV3SGVhZGVyQnlJZChfZGF0YXZpZXdIZWFkZXJJZCk7XHJcbiAgLy8gICAgICAgICAvL2xvY2FsIGRhdGF2YXNlIGFscmVhZHkgY29tcHV0ZWQgdGhlIHJlY29yZCBhcyBzZXJ2ZXIgZG9lc1xyXG4gIC8vICAgICAgICAgaWYgKGhlYWRlciBpcyBMb2NhbERhdGF2aWV3SGVhZGVyKVxyXG4gIC8vICAgICAgICAge1xyXG4gIC8vICAgICAgICAgICAgIHZhciByZWMgPSAoKERhdGFWaWV3KV9kYXRhdmlldykuZ2V0Q3VyclJlYygpO1xyXG4gIC8vICAgICAgICAgICAgIHJldHVybiAhcmVjLkluQ29tcHV0ZTtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgIH1cclxuICAvLyAgIH1cclxuICAvLyAgIHJldHVybiByZWNvbXB1dGU7XHJcbiAgLy8gfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgZnJvbSB0aGUgY3VycmVudCByZWNvcmRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY2hlY2tOdWxsQXJpdGhtZXRpY1wiPmlmIHRydWUgdGhlbiB0aGUgbnVsbCBhcml0aG1ldGljIGVudmlyb25tZW50XHJcbiAgLy8vICAgc2V0dGluZyBpcyB1c2VkIHRvIHJldHVybiBudWxsIHdoZW4gXCJudWxsaWZ5XCIgY29tcHV0YXRpb24gaXMgbmVlZGVkXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgZ2V0VmFsdWUoY2hlY2tOdWxsQXJpdGhtZXRpYzogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICAvLyBpZiB3ZSBuZWVkIHRvIHJldHVybiB0aGUgb3JpZ2luYWwgdmFsdWUgb2YgdGhlIGZpZWxkXHJcbiAgICBpZiAoKDxUYXNrPnN1cGVyLmdldFRhc2soKSkuZ2V0RXZhbE9sZFZhbHVlcygpKVxyXG4gICAgICByZXR1cm4gdGhpcy5nZXRPcmlnaW5hbFZhbHVlKCk7XHJcbiAgICBpZiAodGhpcy5faW52YWxpZFZhbHVlKVxyXG4gICAgICB0aGlzLnRha2VWYWxGcm9tUmVjKCk7XHJcbiAgICBpZiAodGhpcy5faXNOdWxsKVxyXG4gICAgICB0aGlzLl92YWwgPSB0aGlzLmdldFZhbHVlRm9yTnVsbChjaGVja051bGxBcml0aG1ldGljKTtcclxuICAgIHJldHVybiB0aGlzLl92YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm5ld1ZhbHVlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlzTnVsbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIGlzQ2hhbmdlZChuZXdWYWx1ZTogc3RyaW5nLCBpc051bGw6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9wcmV2VmFsdWUgIT09IG51bGwgJiYgKCEodGhpcy5fcHJldlZhbHVlID09PSBuZXdWYWx1ZSkgfHwgdGhpcy5fcHJldklzTnVsbCAhPT0gaXNOdWxsKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBieSB0YWtpbmcgaXQgZnJvbSB0aGUgY3VycmVudCByZWNvcmRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHRha2VWYWxGcm9tUmVjKCk6IHZvaWQge1xyXG4gICAgbGV0IHJlYzogUmVjb3JkID0gKDxEYXRhVmlldz50aGlzLl9kYXRhdmlldykuZ2V0Q3VyclJlYygpO1xyXG4gICAgaWYgKHJlYyAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl92YWwgPSByZWMuR2V0RmllbGRWYWx1ZSh0aGlzLl9pZCk7XHJcbiAgICAgIHRoaXMuX2lzTnVsbCA9IHJlYy5Jc051bGwodGhpcy5faWQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX2ludmFsaWRWYWx1ZSkge1xyXG4gICAgICBpZiAocmVjICE9PSBudWxsICYmIHRoaXMuX2NhdXNlVGFibGVJbnZhbGlkYXRpb24gJiYgdGhpcy5pc0NoYW5nZWQodGhpcy5fdmFsLCB0aGlzLl9pc051bGwpICYmIHRoaXMuX2Zvcm0gIT09IG51bGwpIHtcclxuICAgICAgICByZWMuc2V0Q2F1c2VJbnZhbGlkYXRpb24odHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fcHJldlZhbHVlID0gdGhpcy5fdmFsO1xyXG4gICAgICB0aGlzLl9wcmV2SXNOdWxsID0gdGhpcy5faXNOdWxsO1xyXG4gICAgICB0aGlzLl9pbnZhbGlkVmFsdWUgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIFpFUk8gVEhFIFZFQ1RPUiBPQkpFQ1RcclxuICAgIHRoaXMuX3ZlY3RvclR5cGUgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgb3JpZ2luYWwgdmFsdWUgb2YgdGhlIGZpZWxkIHdpdGhvdXQgdXBkYXRpbmcgdGhlIGZpZWxkIHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRPcmlnaW5hbFZhbHVlKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgb3JpZ2luYWxSZWM6IFJlY29yZCA9ICg8RGF0YVZpZXc+dGhpcy5fZGF0YXZpZXcpLmdldE9yaWdpbmFsUmVjKCk7XHJcblxyXG4gICAgaWYgKG9yaWdpbmFsUmVjLklzTnVsbCh0aGlzLl9pZCkpXHJcbiAgICAgIHJldHVybiB0aGlzLmdldE1hZ2ljRGVmYXVsdFZhbHVlKCk7XHJcblxyXG4gICAgcmV0dXJuIG9yaWdpbmFsUmVjLkdldEZpZWxkVmFsdWUodGhpcy5faWQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGlzIG9yaWdpbmFsIHZhbHVlIG9mIHRoZSBmaWVsZCB3YXMgbnVsbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgaXNPcmlnaW5hbFZhbHVlTnVsbCgpOiBib29sZWFuIHtcclxuICAgIGxldCBvcmlnaW5hbFJlYzogUmVjb3JkID0gKDxEYXRhVmlldz50aGlzLl9kYXRhdmlldykuZ2V0T3JpZ2luYWxSZWMoKTtcclxuICAgIHJldHVybiBvcmlnaW5hbFJlYy5Jc051bGwodGhpcy5faWQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB2YWx1ZSBieSByZWMgaWR4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkeFwiPnJlY29yZCBpZHg8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgZ2V0VmFsdWVCeVJlY0lkeChpZHg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgcmVjOiBSZWNvcmQgPSAoPERhdGFWaWV3PnRoaXMuX2RhdGF2aWV3KS5nZXRSZWNCeUlkeChpZHgpO1xyXG4gICAgbGV0IGZpZWxkVmFsdWU6IHN0cmluZyA9IHJlYy5HZXRGaWVsZFZhbHVlKHRoaXMuX2lkKTtcclxuICAgIHJldHVybiByZWMuSXNOdWxsKHRoaXMuX2lkKSA/IHRoaXMuZ2V0VmFsdWVGb3JOdWxsKGZhbHNlKSA6IGZpZWxkVmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IG1vZGlmaWVkQXRMZWFzdE9uY2UgZmxhZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBnZXRNb2RpZmllZEF0TGVhc3RPbmNlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubW9kaWZpZWRBdExlYXN0T25jZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gbnVsbCBpZiB2YWx1ZSBvZiBmaWVsZCBmb3IgdGhlIHJlY29yZCBpcyBudWxsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkeFwiPnJlY29yZCBpZHg8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgaXNOdWxsQnlSZWNJZHgoaWR4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGxldCByZWM6IFJlY29yZCA9ICg8RGF0YVZpZXc+dGhpcy5fZGF0YXZpZXcpLmdldFJlY0J5SWR4KGlkeCk7XHJcbiAgICByZXR1cm4gcmVjLklzTnVsbCh0aGlzLl9pZCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0cnVlIGlmIGZpZWxkJ3MgdmFsdWUgZm9yIHJlY29yZCBpZHggcmVjaWR4IGVxdWFscyB0byBtZ1ZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtZ1ZhbHVlXCI+dmFsdWUgdG8gY29tcGFyZSAgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpc051bGxGbGRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInR5cGVcIj50eXBlIG9mIHZhbHVlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZWNJZHhcIj5yZWNJZHggb2YgdGhlIHJlY29yZDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBpc0VxdWFsKG1nVmFsdWU6IHN0cmluZywgaXNOdWxsRmxkOiBib29sZWFuLCB0eXBlOiBTdG9yYWdlQXR0cmlidXRlLCByZWNJZHg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHJlYyA9IDxSZWNvcmQ+KCg8RGF0YVZpZXc+dGhpcy5fZGF0YXZpZXcpLmdldFJlY0J5SWR4KHJlY0lkeCkpO1xyXG4gICAgbGV0IHZhbHNFcXVhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgaWYgKHJlYyAhPSBudWxsKSB7XHJcbiAgICAgIGxldCBmaWVsZFZhbHVlOiBzdHJpbmcgPSByZWMuR2V0RmllbGRWYWx1ZSh0aGlzLl9pZCk7XHJcbiAgICAgIGxldCBmaWVsc0lzTnVsbDogYm9vbGVhbiA9IHJlYy5Jc051bGwodGhpcy5faWQpO1xyXG4gICAgICB2YWxzRXF1YWwgPSBFeHByZXNzaW9uRXZhbHVhdG9yLm1nVmFsc0VxdWFsKGZpZWxkVmFsdWUsIGZpZWxzSXNOdWxsLCB0aGlzLl90eXBlLCBtZ1ZhbHVlLCBpc051bGxGbGQsIHR5cGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHNFcXVhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIHdoaWNoIHNob3VsZCBiZSBpbnNlcnRlZCBpbnRvIGEgbmV3IHJlYywgd2hlbiBpdFxyXG4gIC8vLyAgIGlzIGNyZWF0ZWQuIFRoaXMgd2lsbCB1c3VhbGx5IGJlIHRoZSBmaWVsZCdzIGRlZmF1bHQgdmFsdWUsIHVubGVzcyB0aGVyZSBpcyBhXHJcbiAgLy8vICAgdmlydHVhbCBmaWVsZCB3aXRob3V0IGFuIGluaXQgZXhwcmVzc2lvbi4gSW4gdGhpcyBjYXNlLCB0aGUgY3VycmVudCB2YWx1ZSB3aWxsIGJlXHJcbiAgLy8vICAgcmV0dXJuZWQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjbG9iYmVyZWRPbmx5XCI+Y2xvYmJlcmVkT25seSBpcyB0cnVlIGlmIHdlIHdhbnQgdG8gb25seSB0YWtlIHRoZSB2YWx1ZXMgb2YgdGhlIHZpcnR1YWxzIHdpdGggbm8gaW5pdCBleHByZXNzaW9uPC9wYXJhbT5cclxuICBnZXROZXdSZWNWYWx1ZShjbG9iYmVyZWRPbmx5OiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLl9pc1ZpcnR1YWwgJiYgdGhpcy5faW5pdEV4cCA9PSBudWxsKVxyXG4gICAgICByZXR1cm4gdGhpcy5fdmFsO1xyXG4gICAgcmV0dXJuICFjbG9iYmVyZWRPbmx5ID8gdGhpcy5nZXREZWZhdWx0VmFsdWUoKSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzZXRWYWx1ZUFuZFN0YXJ0UmVjb21wdXRlKHZhbDogc3RyaW5nLCBpc051bGxGbGQ6IGJvb2xlYW4sIHJlY29tcHV0ZTogYm9vbGVhbiwgc2V0UmVjb3JkVXBkYXRlZDogYm9vbGVhbiwgaXNBcmdVcGRhdGU6IGJvb2xlYW4sIGVuZm9yY2VWYXJpYWJsZUNoYW5nZT86IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChpc051bGxPclVuZGVmaW5lZChlbmZvcmNlVmFyaWFibGVDaGFuZ2UpKVxyXG4gICAgICBlbmZvcmNlVmFyaWFibGVDaGFuZ2UgPSBmYWxzZTtcclxuICAgIGF3YWl0IHRoaXMuc2V0VmFsdWVBbmRTdGFydFJlY29tcHV0ZV8xKHZhbCwgaXNOdWxsRmxkLCByZWNvbXB1dGUsIHNldFJlY29yZFVwZGF0ZWQsIGlzQXJnVXBkYXRlLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY2FsbCB0aGUgc2V0IHZhbHVlIGZ1bmN0aW9uIGZyb20gdGhlIFwib3V0ZXJcIiB3b3JsZC4gVGhpcyB3aWxsIHRyaWdnZXIgdGhlIHJlY29tcHV0ZVxyXG4gIC8vLyAgIGNoYWluLiBXaGVuIHJlY29tcHV0ZSBpcyBkb25lIC0gcmVmcmVzaCBjb250cm9scyB3aGljaCBhcmUgZXhwcmVzc2lvbiBkZXBlbmRlbnQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWxcIj50aGUgbmV3IHZhbHVlIG9mIHRoZSBmaWVsZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaXNOdWxsRmxkXCI+aWYgdHJ1ZSB0aGVuIHRoZSB2YWx1ZSBpcyBudWxsPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZWNvbXB1dGVcIj5zdGF0ZXMgd2hldGhlciB0byBleGVjdXRlIHJlY29tcHV0ZSB3aGVuIHNldHRpbmcgdGhlIHZhbHVlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZWNvbXB1dGVPbmx5V2hlblVwZGF0ZVZhbHVlXCI+OiBkbyB0aGUgcmVjb21wdXRlIG9ubHkgd2hlbiB0aGUgdmFsdWUgd2FzIHVwZGF0ZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic2V0UmVjb3JkVXBkYXRlZFwiPnRlbGxzIHdoZXRoZXIgdG8gZGVmaW5lIHRoZSByZWNvcmQgYXMgdXBkYXRlZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaXNBcmdVcGRhdGVcIj50cnVlIGlmIGNhbGxlZCBmb3IgaGFuZGxlciBhcmd1bWVudC1wYXJhbWV0ZXIgY29weTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZW5mb3JjZVZhcmlhYmxlQ2hhbmdlXCI+ZXhlY3V0ZSB2YWlhYmxlIGNoYW5nZSBldmVuIHdoZW4gcmVjb21wdXRlIGlzIGZhbHNlPC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIHNldFZhbHVlQW5kU3RhcnRSZWNvbXB1dGVfMSh2YWw6IHN0cmluZywgaXNOdWxsRmxkOiBib29sZWFuLCByZWNvbXB1dGU6IGJvb2xlYW4sIHNldFJlY29yZFVwZGF0ZWQ6IGJvb2xlYW4sIGlzQXJnVXBkYXRlOiBib29sZWFuLCBlbmZvcmNlVmFyaWFibGVDaGFuZ2U6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCB0YXNrID0gPFRhc2s+dGhpcy5nZXRUYXNrKCk7XHJcbiAgICBpZiAodGFzayAhPSBudWxsKVxyXG4gICAgICB0YXNrLlZld0ZpcnN0Kys7XHJcblxyXG4gICAgbGV0IHZhbHVlV2FzVXBkYXRlZDogYm9vbGVhbiA9IGF3YWl0IHRoaXMuc2V0VmFsdWUodmFsLCBpc051bGxGbGQsIHJlY29tcHV0ZSwgc2V0UmVjb3JkVXBkYXRlZCwgIXRoaXMuX2lzVmlydHVhbCwgaXNBcmdVcGRhdGUsIGVuZm9yY2VWYXJpYWJsZUNoYW5nZSk7XHJcblxyXG4gICAgLy8gQSBmaWVsZCB0aGF0IGlzIGFuIGV2ZW50IGhhbmRsZXIgZmllbGQgY2Fubm90IGFwcGVhciBhcyBhIHByb3BlcnR5IGluIGd1aS4gbm8gbmVlZCB0byByZWZyZXNoIGFsbFxyXG4gICAgLy8gZm9ybStjb250cm9scyBwcm9wZXJ0aWVzIGV4cHJlc3Npb25zIGZvciBpdC5cclxuICAgIGlmICh0YXNrICE9PSBudWxsICYmIHRhc2suVmV3Rmlyc3QgPT09IDEgJiYgdGhpcy5fZm9ybSAhPT0gbnVsbCAmJiAhdGhpcy5Jc0V2ZW50SGFuZGxlckZpZWxkKSB7XHJcbiAgICAgIGlmIChyZWNvbXB1dGUgJiYgdmFsdWVXYXNVcGRhdGVkKVxyXG4gICAgICAgIGF3YWl0IHRoaXMuX2Zvcm0ucmVmcmVzaE9uRXhwcmVzc2lvbnMoKTtcclxuXHJcbiAgICB9XHJcbiAgICBpZiAodGFzayAhPSBudWxsKVxyXG4gICAgICB0YXNrLlZld0ZpcnN0LS07XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgaW4gdGhlIGN1cnJlbnQgcmVjb3JkIGFuZCB1cGRhdGUgdGhlIGRpc3BsYXlcclxuICAvLy8gICB0aGUgZmllbGQgbXVzdCBiZSBpbiBhIG1hZ2ljIGludGVybmFsIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibmV3VmFsXCI+dGhlIG5ldyB2YWx1ZSBvZiB0aGUgZmllbGQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImlzTnVsbEZsZFwiPmlmIHRydWUgdGhlbiB0aGUgdmFsdWUgaXMgbnVsbDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVjb21wdXRlXCI+c3RhdGVzIHdoZXRoZXIgdG8gZXhlY3V0ZSByZWNvbXB1dGUgd2hlbiBzZXR0aW5nIHRoZSB2YWx1ZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic2V0UmVjb3JkTW9kaWZpZWRcIj5zdGF0ZXMgd2hldGhlciB0byBkZWZpbmUgdGhlIHJlY29yZCBhcyBtb2RpZmllZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic2V0Q3Jzck1vZGlmaWVkXCI+c3RhdGVzIHdoZXRoZXIgdG8gZGVmaW5lIHRoZSBjdXJzb3Igb2YgdGhlIGZpZWxkIGFzIG1vZGlmaWVkPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpc0FyZ1VwZGF0ZVwiPnRydWUgaWYgY2FsbGVkIGZvciBoYW5kbGVyIGFyZ3VtZW50LXBhcmFtZXRlciBjb3B5PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+dGhlIHJldHVybiB2YWx1ZSB3YXMgdXBkYXRlZCA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBhc3luYyBzZXRWYWx1ZShuZXdWYWw6IHN0cmluZywgaXNOdWxsRmxkOiBib29sZWFuLCByZWNvbXB1dGU6IGJvb2xlYW4sIHNldFJlY29yZE1vZGlmaWVkOiBib29sZWFuLCBzZXRDcnNyTW9kaWZpZWQ6IGJvb2xlYW4sIGlzQXJnVXBkYXRlOiBib29sZWFuLCBlbmZvcmNlVmFsaWFibGVDaGFuZ2U6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCByZWM6IFJlY29yZDtcclxuICAgIGxldCByZWNGbGRWYWw6IHN0cmluZztcclxuICAgIGxldCB2YWxzRXF1YWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCByZW1haW5kZXI6IG51bWJlcjtcclxuICAgIGxldCB6ZXJvUmVhbDogYm9vbGVhbjtcclxuICAgIGxldCBhcmdzOiBBcmd1bWVudHNMaXN0ID0gbnVsbDtcclxuICAgIGxldCBtYWluQ3RybCA9IHRoaXMuZ2V0Q3RybCgpO1xyXG4gICAgbGV0IHBlbmRpbmdFdmVudHM6IG51bWJlcjtcclxuICAgIGxldCBldnRzOiBMaXN0PEZpZWxkIHwgUnVuVGltZUV2ZW50PjtcclxuICAgIGxldCBmb3JjZVVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IGNoZWNrRm9yVmFyaWFibGVDaGFuZ2U6IGJvb2xlYW4gPSByZWNvbXB1dGUgfHwgZW5mb3JjZVZhbGlhYmxlQ2hhbmdlO1xyXG5cclxuICAgIGxldCB0YXNrID0gPFRhc2s+dGhpcy5nZXRUYXNrKCk7XHJcbiAgICBpZiAodGhpcy5fZm9ybSA9PT0gbnVsbClcclxuICAgICAgdGhpcy5fZm9ybSA9IDxNZ0Zvcm0+dGFzay5nZXRGb3JtKCk7XHJcblxyXG4gICAgaWYgKGlzTnVsbEZsZCAmJiAhdGhpcy5OdWxsQWxsb3dlZCAmJiB0aGlzLl90eXBlICE9PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSB7XHJcbiAgICAgIG5ld1ZhbCA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKCk7XHJcbiAgICAgIGlzTnVsbEZsZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFFDUiM4MDUzNjQ6IEZvciBhbnkgZmllbGQsIHdlIHN0b3JlIHRoZSB2YWx1ZSBpbiBmaWVsZCBhcyBpdCBpcyAod2l0aG91dCBjaGVja2luZyB0aGUgcGljdHVyZSkuXHJcbiAgICAvLyBCdXQgZm9yIE51bWVyaWMgZmllbGQsIGlmIHBpY3R1cmUgZG9lcyBub3QgY29udGFpbiBkZWNpbWFscyB0aGVuIHdlIHNob3VsZCByb3VuZCBvZmYgdGhlIHZhbHVlIGFuZCB0aGVuIHNhdmUgdGhpcyB2YWx1ZSBpbiBmaWVsZFxyXG4gICAgLy8gb3RoZXJ3aXNlIGl0IHdpbGwgZ2l2ZSB3cm9uZyBjYWxjdWxhdGlvbi4gU28gYWx3YXlzIHJvdW5kIG9mZiB0aGUgdmFsdWUgZGVwZW5kaW5nIG9uIHBpY3R1cmUncyBkZWNpbWFsLlxyXG4gICAgLy8gY2hlY2sgaWYgbmV3VmFsIGlzIFwibG9uZ1wiIHNpbmNlIHRoZXJlIGlzIG5vIHJlYXNvbiB0byByb3VuZCBhbiBhbHJlYWR5IHdob2xlIG51bWJlclxyXG4gICAgaWYgKHRoaXMuX3R5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyAmJiBuZXdWYWwgIT0gbnVsbCAmJiAhTlVNX1RZUEUubnVtSGV4U3RySXNMb25nKG5ld1ZhbCkpIHtcclxuICAgICAgbGV0IG51bVZhbCA9IG5ldyBOVU1fVFlQRShuZXdWYWwpO1xyXG4gICAgICBsZXQgcGljID0gbmV3IFBJQyh0aGlzLl9waWN0dXJlLCB0aGlzLl90eXBlLCBzdXBlci5nZXRUYXNrKCkuZ2V0Q29tcElkeCgpKTtcclxuICAgICAgbGV0IGRlY3M6IG51bWJlciA9IHBpYy5nZXREZWMoKTtcclxuICAgICAgbnVtVmFsLnJvdW5kKGRlY3MpO1xyXG4gICAgICBuZXdWYWwgPSBudW1WYWwudG9YTUxyZWNvcmQoKTtcclxuICAgIH1cclxuXHJcbiAgICByZWMgPSAoPERhdGFWaWV3PnRoaXMuX2RhdGF2aWV3KS5nZXRDdXJyUmVjKCk7XHJcbiAgICBpZiAocmVjID09IG51bGwpXHJcbiAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihMYW5ndWFnZURhdGEuSW5zdGFuY2UuZ2V0Q29uc3RNZXNzYWdlKE1zZ0ludGVyZmFjZS5SVF9TVFJfTk9fUkVDU19JTl9STkcpKTtcclxuXHJcbiAgICAvLyBkb24ndCBhbGxvdyB1cGRhdGluZyBSRUFMIGZpZWxkcywgdW5sZXNzICdhbGxvdyB1cGRhdGUgaW4gcXVlcnkgbW9kZScgaXMgc2V0IHRvIFRSVUVcclxuICAgIGlmICghdGhpcy5Jc1ZpcnR1YWwgJiZcclxuICAgICAgKHRhc2suZ2V0TW9kZSgpID09PSBDb25zdGFudHMuVEFTS19NT0RFX1FVRVJZICYmXHJcbiAgICAgICAgIUVudmlyb25tZW50Lkluc3RhbmNlLmFsbG93VXBkYXRlSW5RdWVyeU1vZGUodGFzay5nZXRDb21wSWR4KCkpXHJcbiAgICAgICAgfHwgcmVjLkluRm9yY2VVcGRhdGUgJiYgcmVjLkluQ29tcHV0ZSkpXHJcbiAgICAgIHJldHVybiAhdmFsc0VxdWFsO1xyXG5cclxuICAgIGlmIChjaGVja0ZvclZhcmlhYmxlQ2hhbmdlICYmIHRoaXMuZ2V0SGFzQ2hhbmdlRXZlbnQoKSkge1xyXG4gICAgICBsZXQgYXJnc0xpc3QgPSBuZXcgQXJyYXkoMik7XHJcbiAgICAgIGFyZ3NMaXN0WzBdID0gbmV3IEV4cFZhbChTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMsIGZhbHNlLFxyXG4gICAgICAgIChtYWluQ3RybCAhPT0gbnVsbCAmJiBtYWluQ3RybC5Jc0ludGVyYWN0aXZlVXBkYXRlXHJcbiAgICAgICAgICA/IEZpZWxkLk5VTTAudG9YTUxyZWNvcmQoKVxyXG4gICAgICAgICAgOiBGaWVsZC5OVU0xLnRvWE1McmVjb3JkKCkpKTtcclxuICAgICAgYXJnc0xpc3RbMV0gPSBuZXcgRXhwVmFsKHRoaXMuZ2V0VHlwZSgpLCB0aGlzLmlzTnVsbCgpLCB0aGlzLmdldFZhbHVlKGZhbHNlKSk7XHJcbiAgICAgIGFyZ3MgPSBuZXcgQXJndW1lbnRzTGlzdChhcmdzTGlzdCk7XHJcbiAgICB9XHJcbiAgICBpZiAobWFpbkN0cmwgIT0gbnVsbClcclxuICAgICAgbWFpbkN0cmwuSXNJbnRlcmFjdGl2ZVVwZGF0ZSA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHVwZGF0ZSB0aGUgZmllbGQgaW4gdGhlIGN1cnJlbnQgcmVjb3JkXHJcbiAgICBpZiAodGhpcy5fdHlwZSAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFICYmIFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkpIHtcclxuICAgICAgLy8gY291bnQgdGhlIG51bWJlciBvZiBieXRlcywgbm90IGNoYXJhY3RlcnMgKEpQTjogREJDUyBzdXBwb3J0KVxyXG4gICAgICBpZiAobmV3VmFsICE9IG51bGwpXHJcbiAgICAgICAgcmVtYWluZGVyID0gdGhpcy5fc2l6ZSAtIFV0aWxTdHJCeXRlTW9kZS5sZW5CKG5ld1ZhbCk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICByZW1haW5kZXIgPSAwO1xyXG5cclxuICAgICAgaWYgKG5ld1ZhbCAhPSBudWxsICYmIHRoaXMuX3R5cGUgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiAmJiB0aGlzLl90eXBlICE9PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SICYmXHJcbiAgICAgICAgcmVtYWluZGVyIDwgMClcclxuICAgICAgICB0aGlzLl92YWwgPSBVdGlsU3RyQnl0ZU1vZGUubGVmdEIobmV3VmFsLCB0aGlzLl9zaXplKTtcclxuICAgICAgZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSAmJiByZW1haW5kZXIgPiAwKVxyXG4gICAgICAgIHRoaXMuX3ZhbCA9IG5ld1ZhbCArIE5TdHJpbmcuRnJvbUNoYXJzKHRoaXMuX3NwYWNlcywgMCAsIHJlbWFpbmRlcik7XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQilcclxuICAgICAgICB0aGlzLl92YWwgPSBCbG9iVHlwZS5jb3B5QmxvYih0aGlzLl92YWwsIG5ld1ZhbCk7XHJcbiAgICAgIGVsc2UgdGhpcy5fdmFsID0gbmV3VmFsO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChuZXdWYWwgIT0gbnVsbClcclxuICAgICAgICByZW1haW5kZXIgPSB0aGlzLl9zaXplIC0gbmV3VmFsLmxlbmd0aDtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHJlbWFpbmRlciA9IDA7XHJcblxyXG4gICAgICBpZiAobmV3VmFsICE9IG51bGwgJiYgdGhpcy5fdHlwZSAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CICYmIHRoaXMuX3R5cGUgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IgJiYgcmVtYWluZGVyIDwgMClcclxuICAgICAgICB0aGlzLl92YWwgPSBuZXdWYWwuc3Vic3RyKDAsIHRoaXMuX3NpemUpO1xyXG4gICAgICBlbHNlIGlmICgodGhpcy5fdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCB0aGlzLl90eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpICYmIHJlbWFpbmRlciA+IDApXHJcbiAgICAgICAgdGhpcy5fdmFsID0gbmV3VmFsICsgIE5TdHJpbmcuRnJvbUNoYXJzKHRoaXMuX3NwYWNlcywgMCAsIHJlbWFpbmRlcik7XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQikge1xyXG4gICAgICAgIC8vIEVuc3VyZSBfdmFsIGlzIG5vdCBudWxsLCBzbyB0aGF0IHRoZSBibG9iIGNvcHkgd2lsbCBiZVxyXG4gICAgICAgIC8vIGRvbmUgY29ycmVjdGx5LCBhY2NvcmRpbmcgdG8gdGhlIGZpZWxkJ3MgYmxvYiB0eXBlLlxyXG4gICAgICAgIGlmICh0aGlzLl92YWwgPT09IG51bGwpXHJcbiAgICAgICAgICB0aGlzLl92YWwgPSB0aGlzLmdldE1hZ2ljRGVmYXVsdFZhbHVlKCk7XHJcbiAgICAgICAgdGhpcy5fdmFsID0gQmxvYlR5cGUuY29weUJsb2IodGhpcy5fdmFsLCBuZXdWYWwpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgdGhpcy5fdmFsID0gbmV3VmFsO1xyXG4gICAgfVxyXG4gICAgLy8gSWYgZG90bmV0IHZhciBpcyB1cGRhdGVkIHdpdGggbmV3IGJsb2JwcmVmaXgsIHZhbHNFcXVhbCBpcyBmYWxzZSwgd2Ugc2hvdWxkIG5vdCBjaGVjayBpbiByZWNvcmQuXHJcbiAgICB7XHJcbiAgICAgIHJlY0ZsZFZhbCA9IHJlYy5HZXRGaWVsZFZhbHVlKHRoaXMuX2lkKTtcclxuXHJcbiAgICAgIC8vIEluIG9yZGVyIHRvIGNvbXBhcmUsIElmIHZpcnR1YWwncyBvbGQgdmFsdWUgaXMgdGFrZW4gZnJvbSByZWNvcmQsIHRoZW4gb2xkIGlzTnVsbCB2YWx1ZSBhbHNvIHNob3VsZCBiZSB0YWtlbiBmcm9tIHJlY29yZC5cclxuICAgICAgLy8gVGhpcyBzaG91bGQgYmUgZG9uZSBvbmx5IGlmIG5vdCBpbiByZS1jb21wdXRlIC8gbm90IGFyZ3VtZW50IC8gbm8gaW5pdEV4cC4pXHJcbiAgICAgIC8vIE1haW5seSAsIHRoaXMgaXMgbmVlZGVkLCB3aGVuIGN1cnNvciBpcyBwYXJrZWQgb24gb25lIHJlY29yZCBhbmQgdmlydHVhbCBpcyBtb2RpZmllZCBmcm9tIG51bGwgdG8gbm9ubnVsbCBvciB2aWNldmVyc2EgYW5kXHJcbiAgICAgIC8vIG5vdyBpZiBjdXJzb3IgbW92ZXMgZnJvbSBvbmUgcmVjb3JkIHRvIG5leHQgcmVjb3JkLCBXZSBuZWVkIHRvICBnZXQgdGhlIG9sZCBudWxsIHZhbHVlIGZyb20gcmVjb3JkLlxyXG5cclxuICAgICAgbGV0IG9sZE51bGxWYWw6IGJvb2xlYW4gPSB0aGlzLl9pc051bGw7XHJcbiAgICAgIGlmICghcmVjb21wdXRlICYmICFpc0FyZ1VwZGF0ZSAmJiB0aGlzLl9pbml0RXhwID09IG51bGwpXHJcbiAgICAgICAgb2xkTnVsbFZhbCA9IHJlYy5Jc051bGwodGhpcy5faWQpO1xyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICB2YWxzRXF1YWwgPSBFeHByZXNzaW9uRXZhbHVhdG9yLm1nVmFsc0VxdWFsKHRoaXMuX3ZhbCwgaXNOdWxsRmxkLCB0aGlzLl90eXBlLCByZWNGbGRWYWwsIG9sZE51bGxWYWwsIHRoaXMuX3R5cGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGNhdGNoIChleGNlcHRpb24pIHtcclxuICAgICAgICB0aGlzLl92YWwgPSB0aGlzLmdldE1hZ2ljRGVmYXVsdFZhbHVlKCk7XHJcbiAgICAgICAgdmFsc0VxdWFsID0gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgICAvLyB6ZXJvIHRoZSB2ZWN0b3JcclxuICAgIGlmICh0aGlzLl9jbGVhclZlY3RvclR5cGUpXHJcbiAgICAgIHRoaXMuX3ZlY3RvclR5cGUgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMuX2ludmFsaWRWYWx1ZSkge1xyXG4gICAgICB0aGlzLl9pbnZhbGlkVmFsdWUgPSBmYWxzZTtcclxuICAgICAgcmVjLmNsZWFyRmxhZyh0aGlzLl9pZCwgUmVjb3JkLkZMQUdfVVBEQVRFRCk7XHJcbiAgICAgIHJlYy5jbGVhckZsYWcodGhpcy5faWQsIFJlY29yZC5GTEFHX01PRElGSUVEKTtcclxuICAgIH1cclxuICAgIC8vIGR1cmluZyBjb21wdXRlLCB3ZSBzaG91bGQgemVybyBmaWVsZHMgd2hpY2ggYmVsb25nIHRvIGxpbmsgY3JlYXRlLlxyXG4gICAgemVyb1JlYWwgPSB0aGlzLl9saW5rQ3JlYXRlICYmIHJlYy5JbkNvbXB1dGUgJiYgIXJlY29tcHV0ZSAmJiAodGhpcy5fZm9ybSA9PSBudWxsIHx8ICF0aGlzLl9mb3JtLkluUmVzdG9yZSkgJiZcclxuICAgICAgIUFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLkdldFN0b3BFeGVjdXRpb25GbGFnKCk7XHJcblxyXG4gICAgLy8gVmlydHVhbHMgd2l0aG91dCBpbml0IGV4cHJlc3Npb24gYXJlIGNvcGllZCBmcm9tIG9uZSByZWNvcmQgdG8gYW5vdGhlciwgZXZlbiBhdFxyXG4gICAgLy8gY29tcHV0ZSB0aW1lIChubyByZWNvbXB1dGUpLiBOZXZlcnRoZWxlc3MsIGluIGNhc2UgdGhlaXIgdmFsdWUgY2hhbmdlcywgd2UgbXVzdFxyXG4gICAgLy8gcGVyZm9ybSByZWNvbXB1dGUuXHJcbiAgICBpZiAoKHRoaXMuX2lzVmlydHVhbCB8fCB6ZXJvUmVhbCkgJiYgIXJlYy5pc05ld1JlYygpICYmICF2YWxzRXF1YWwpXHJcbiAgICAgIGZvcmNlVXBkYXRlID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBpZiB0aGUgcmVjb21wdXRlIGlzIGZhbHNlIGl0IG1lYW5zIHRoYXQgdGhlIHVzZXIgaXMgc2V0dGluZyBhIHZhbHVlXHJcbiAgICAvLyB0aGF0IGl0cyBzb3VyY2UgaXMgdGhlIHJlY29yZCwgdGh1cywgd2UgZG9uJ3QgaGF2ZSB0byB1cGRhdGUgdGhlIHJlY29yZC5cclxuICAgIC8vIGlmIHRoZSByZWNvbXB1dGUgaXMgdHJ1ZSwgZ28gYWhlYWQgYW5kIHVwZGF0ZSB0aGUgcmVjb3JkLlxyXG4gICAgaWYgKGNoZWNrRm9yVmFyaWFibGVDaGFuZ2UgfHwgZm9yY2VVcGRhdGUgfHwgcmVjLmlzTmV3UmVjKCkpIHtcclxuICAgICAgdGhpcy5VcGRhdGVOdWxsKGlzTnVsbEZsZCwgcmVjKTtcclxuXHJcbiAgICAgIGlmIChzZXRDcnNyTW9kaWZpZWQpXHJcbiAgICAgICAgcmVjLnNldEZsYWcodGhpcy5faWQsIFJlY29yZC5GTEFHX0NSU1JfTU9ESUZJRUQpO1xyXG4gICAgICByZWMuc2V0RmllbGRWYWx1ZSh0aGlzLl9pZCwgdGhpcy5fdmFsLCBzZXRSZWNvcmRNb2RpZmllZCk7XHJcbiAgICAgIGV2dHMgPSBGaWVsZC5fdmFyaWFibGVDaGFuZ2VFdnRzO1xyXG4gICAgICBwZW5kaW5nRXZlbnRzID0gZXZ0cy5sZW5ndGg7XHJcbiAgICAgIGlmIChjaGVja0ZvclZhcmlhYmxlQ2hhbmdlICYmIHRoaXMuZ2V0SGFzQ2hhbmdlRXZlbnQoKSAmJiAhZXZ0cy5Db250YWlucyh0aGlzKSAmJiAhdmFsc0VxdWFsKSB7XHJcbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSB2YXJpYWJsZSBjaGFuZ2UgaGFuZGxlciAtIHNhdmUgdmFsdWUgYW5kIHByZXBhcmUgcGFyYW1zXHJcbiAgICAgICAgbGV0IHJ0RXZ0ID0gbmV3IFJ1blRpbWVFdmVudCh0aGlzKTtcclxuICAgICAgICBydEV2dC5zZXRJbnRlcm5hbChJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVkFSSUFCTEUpO1xyXG4gICAgICAgIHJ0RXZ0LnNldEFyZ0xpc3QoYXJncyk7XHJcbiAgICAgICAgZXZ0cy5wdXNoKHRoaXMpO1xyXG4gICAgICAgIGV2dHMucHVzaChydEV2dCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGNoZWNrIGZvciByZWNvbXB1dGUgYW5kIGV4ZWN1dGUgaXRcclxuICAgICAgLy8gUUNSICMyOTk2MDksIGlmIHdlIGFyZSBpbiBsb2NhbCBkYXRhdmlldyBtYW5hZ2VyLCB3ZSBjYW4gb25seSBjb21wdXRlLlxyXG4gICAgICAvLyBSZWNvbXB1dGUgaXMgbm90IGFsbG93ZWQsIHNpbmNlIGl0IHdpbGwgYmUgZXhlY3V0ZWQgbXVsdGlwbGUgdGltZXNcclxuICAgICAgaWYgKHRoaXMuX3JlY29tcHV0ZSAhPSBudWxsICYmIChyZWNvbXB1dGUgfHwgZm9yY2VVcGRhdGUpICYmICEoPERhdGFWaWV3PnRoaXMuX2RhdGF2aWV3KS5JbkxvY2FsRGF0YXZpZXdDb21tYW5kKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIC8vIGlmIGZpZWxkIGNhdXNlZCB0YWJsZSBpbnZhbGlkYXRpb24gYW5kIGl0J3MgdmFsdWUgd2FzIGNoYW5nZWRcclxuICAgICAgICAgIGlmIChmb3JjZVVwZGF0ZSlcclxuICAgICAgICAgICAgcmVjLkluRm9yY2VVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5fcmVjb21wdXRlLmV4ZWN1dGUocmVjKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgaWYgKGZvcmNlVXBkYXRlKVxyXG4gICAgICAgICAgICByZWMuSW5Gb3JjZVVwZGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5fY2F1c2VUYWJsZUludmFsaWRhdGlvbiAmJiB0aGlzLmlzQ2hhbmdlZCh0aGlzLl92YWwsIGlzTnVsbEZsZCkpXHJcbiAgICAgICAgcmVjLnNldENhdXNlSW52YWxpZGF0aW9uKHRydWUpO1xyXG5cclxuICAgICAgLy8gRG9uJ3QgdXBkYXRlIGNvbnRyb2xzIHdoaWxlIGZldGNoaW5nIHJlY29yZHMgZnJvbSBsb2NhbCBkYXRhYmFzZS4gSWYgdGhlIHRhc2sgaGFzIGEgdGFibGUgY29udHJvbCwgdGhlbiBhY3R1YWwgY29udHJvbHMgb24gdGhlXHJcbiAgICAgIC8vIHJvd3MgYXJlIGNyZWF0ZWQgYWZ0ZXIgbm8uIG9mIHJvd3MgaXMga25vd24gKGFuZCB0aGlzIGlzIGFmdGVyIHRoZSBkYXRhIGlzIGF2YWlhbGFibGUpLiBTbywgd2hpbGUgZmV0Y2hpbmcgcmVjb3JkcywgY29udHJvbHMgaW5cclxuICAgICAgLy8gdGFibGUgYXJlIG5vdCB5ZXQgY3JlYXRlZCBhbmQgaGVuY2UgdGhlcmUgaXMgYW4gYXNzZXJ0IHdoaWxlIHRyeWluZyB0byB1cGRhdGUgdGhlIGNvbnRyb2xzLiBBZnRlciBza2lwcGluZyB0aGlzIHVwZGF0ZSwgdGhlIGNvbnRyb2xzXHJcbiAgICAgIC8vIGFyZSB1cGRhdGVkIGZyb20gb3RoZXIgcGxhY2VzIChyZWZyZXNoVGFibGUsIGNvbW1vbkhhbmRsZXJCZWZvcmUsIGhhbmRsZVJvd0RhdGFDdXJQYWdlIGV0YyBsaWtlIGl0IGhhcHBlbnMgZm9yIHNlcnZlciBkYXRhKVxyXG4gICAgICBpZiAoKHJlY29tcHV0ZSB8fCBmb3JjZVVwZGF0ZSkgJiYgISg8RGF0YVZpZXc+dGhpcy5fZGF0YXZpZXcpLkluTG9jYWxEYXRhdmlld0NvbW1hbmQgJiYgbWFpbkN0cmwgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChtYWluQ3RybC5pc0Nob2ljZUNvbnRyb2woKSlcclxuICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlRGlzcGxheSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBSaWdodCBhZnRlciB3ZSBleGl0IHRoZSB0b3Btb3N0IHVwZGF0ZSAtIGV4ZWN1dGUgYWxsIHZhcmlhYmxlIGNoYW5nZSBldmVudHMuXHJcbiAgICAgIC8vIG5vdGUgdGhhdCBkdXJpbmcgdGhpcyBleGVjdXRpb24sIG5ldyBvbmVzIG1heSBiZSBjcmVhdGVkLlxyXG4gICAgICBpZiAocGVuZGluZ0V2ZW50cyA9PT0gMCAmJiBjaGVja0ZvclZhcmlhYmxlQ2hhbmdlICYmIHRoaXMuZ2V0SGFzQ2hhbmdlRXZlbnQoKSkge1xyXG4gICAgICAgIHdoaWxlIChldnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGxldCBldnQgPSA8UnVuVGltZUV2ZW50PmV2dHMuZ2V0X0l0ZW0oMSk7XHJcbiAgICAgICAgICBldnRzLlJlbW92ZUF0KDApO1xyXG4gICAgICAgICAgZXZ0cy5SZW1vdmVBdCgwKTtcclxuICAgICAgICAgIGlmIChMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0TGFzdEZvY3VzZWRUYXNrKCkgPT0gbnVsbClcclxuICAgICAgICAgICAgZXZ0LnNldFRhc2soPFRhc2s+dGhpcy5nZXRUYXNrKCkpO1xyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCB0YXNrUmVmOiBUYXNrID0gTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldExhc3RGb2N1c2VkVGFzaygpO1xyXG4gICAgICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gdmFyaWFibGUgY2hhbmdlIGV2ZW50IGFuZCBUYXNrU3VmZml4IGlzIGV4ZWN1dGVkLCBpdCBtZWFucyB3ZSBhcmUgaGVyZSBmcm9tXHJcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBhcmd1bWVudHMgd2hpbGUgY2xvc2luZyB0aGUgdGFzay4gSW4gc3VjaCBjYXNlLCB3ZSBzaG91bGQgc2V0IHRoZSBldmVudCB0YXNrIGFzIFBhdGhQYXJlbnRUYXNrXHJcbiAgICAgICAgICAgIC8vIGFuZCBub3QgdGhlIHRhc2sgaXRzZWxmLlxyXG4gICAgICAgICAgICBpZiAodGFza1JlZi5UYXNrU3VmZml4RXhlY3V0ZWQpIHtcclxuICAgICAgICAgICAgICB0YXNrUmVmID0gKHRhc2tSZWYuUGF0aFBhcmVudFRhc2sgIT0gbnVsbCkgPyA8VGFzaz50YXNrUmVmLlBhdGhQYXJlbnRUYXNrIDogdGFza1JlZjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBldnQuc2V0VGFzayh0YXNrUmVmKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGV2dC5zZXRDdHJsKExhc3RGb2N1c2VkTWFuYWdlci5nZXRMYXN0Rm9jdXNlZENvbnRyb2woKSk7XHJcbiAgICAgICAgICBhd2FpdCBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5oYW5kbGVFdmVudChldnQsIGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vICM3NzYwMzEgLSB0aGUgZmllbGQgc2hvdWxkIGJlIG1hcmtlZCBtb2RpZmllZCBvbmx5IGlmIHZhbCBhcmUgbm90IGVxdWFsLiBPdGhlcndpc2UsIGV2ZW4gZm9yIG51bGwgZmllbGQgcGFyYW10ZXIgcGFzc2luZ1xyXG4gICAgLy8gb3Igc2FtZSB2YWx1ZSB1cGRhdGUsIGl0IGlzIG1hcmtlZCBhcyBtb2RpZmllZCBhbmQgUlMgaXMgZXhlY3V0ZWQuXHJcbiAgICBpZiAocmVjb21wdXRlICYmICF2YWxzRXF1YWwpXHJcbiAgICAgIHRoaXMuc2V0TW9kaWZpZWQoKTtcclxuICAgIHJldHVybiAhdmFsc0VxdWFsO1xyXG4gIH1cclxuXHJcbiAgVXBkYXRlTnVsbChpc051bGxGbGQ6IGJvb2xlYW4sIHJlYzogUmVjb3JkKTogdm9pZCB7XHJcbiAgICBpZiAoaXNOdWxsRmxkKVxyXG4gICAgICByZWMuc2V0RmxhZyh0aGlzLl9pZCwgUmVjb3JkLkZMQUdfTlVMTCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJlYy5jbGVhckZsYWcodGhpcy5faWQsIFJlY29yZC5GTEFHX05VTEwpO1xyXG4gICAgdGhpcy5faXNOdWxsID0gaXNOdWxsRmxkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCBhIHZlYyBjZWxsXHJcbiAgLy8vICAgY2FuIG5vdCBiZSBleGVjdXRlZCB3aXRob3V0IHRoZSBsb2dpYyBmcm9tIGV2YWxfb3BfdmVjR2V0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkeFwiPnRoZSBjZWxsIGluZGV4IGluIHRoZSB2ZWN0b3Igc3RyYXRzIGZyb20gMTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuZXdWYWxcIj50aGUgbmV3IHZhbHVlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbElzTnVsbFwiPmlzIHRoZSBiZXcgdmFsdWUgbnVsbDwvcGFyYW0+XHJcbiAgYXN5bmMgc2V0Q2VsbFZlY1ZhbHVlKGlkeDogbnVtYmVyLCBuZXdWYWw6IHN0cmluZywgdmFsSXNOdWxsOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBsZXQgcmVzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5fdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUikge1xyXG4gICAgICAvLyBpbml0aWFsaXplZCB0aGUgdmVjdG9yIG9iamVjdCBpZiBuZWVkZWRcclxuICAgICAgaWYgKHRoaXMuX3ZlY3RvclR5cGUgPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX3ZlY3RvclR5cGUgPSB0aGlzLmlzTnVsbCgpXHJcbiAgICAgICAgICA/IG5ldyBWZWN0b3JUeXBlKHRoaXMuX3ZlY0NlbGxzVHlwZSwgdGhpcy5fdmVjQ2VsbHNDb250ZW50VHlwZSwgdGhpcy5EZWZhdWx0VmFsdWUsIHRoaXMuaXNOdWxsRGVmYXVsdCgpLFxyXG4gICAgICAgICAgdGhpcy5OdWxsQWxsb3dlZCwgdGhpcy5fdmVjQ2VsbHNTaXplKVxyXG4gICAgICAgICAgOiBuZXcgVmVjdG9yVHlwZSh0aGlzLl92YWwpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGlmIHZlY0NlbGxzVHlwZSBpcyBCTE9CLCBjb252ZXJ0IGRhdGEgaW50byBibG9iXHJcbiAgICAgIGlmICh0aGlzLl92ZWNDZWxsc1R5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQikge1xyXG4gICAgICAgIGxldCB0bXBOZXdWYWw6IHN0cmluZyA9IHRoaXMuZ2V0Q2VsbERlZnVhbHRWYWx1ZSgpO1xyXG4gICAgICAgIG5ld1ZhbCA9IEJsb2JUeXBlLmNvcHlCbG9iKHRtcE5ld1ZhbCwgbmV3VmFsKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmVzID0gdGhpcy5fdmVjdG9yVHlwZS5zZXRWZWNDZWxsKGlkeCwgbmV3VmFsLCB2YWxJc051bGwpO1xyXG4gICAgICAvLyBzdGFydCByZWNvbXB1dGVcclxuICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgIHRoaXMuX2NsZWFyVmVjdG9yVHlwZSA9IGZhbHNlO1xyXG4gICAgICAgIC8vIFFDUiA5ODQ1NjMgZG8gbm90IHNldCB0aGUgcmVjb3JkIGFzIGNoYW5nZWRcclxuICAgICAgICBhd2FpdCB0aGlzLnNldFZhbHVlQW5kU3RhcnRSZWNvbXB1dGUodGhpcy5fdmVjdG9yVHlwZS50b1N0cmluZygpLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTtcclxuICAgICAgICB0aGlzLl9jbGVhclZlY3RvclR5cGUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIGNlbGwgdmFsdWUgb2YgYSBnaXZlbiBjZWxsIGluIHRoZSB2ZWN0b3JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGNlbGwncyB2YWx1ZSBhcyBzdHJpbmc8L3JldHVybnM+XHJcbiAgZ2V0VmVjQ2VsbFZhbHVlKGlkeDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLl90eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSB7XHJcbiAgICAgIC8vIGlmIHdlIGFyZSBoZXJlIHRoYW4gdGhlIGZpbGVkIG11c3QgaGF2ZSBub25lIG51bGwgdmFsdWUgb2YgYSB2ZWN0b3JcclxuICAgICAgaWYgKHRoaXMuX3ZlY3RvclR5cGUgPT0gbnVsbClcclxuICAgICAgICB0aGlzLl92ZWN0b3JUeXBlID0gbmV3IFZlY3RvclR5cGUodGhpcy5fdmFsKTtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLl92ZWN0b3JUeXBlLmdldFZlY0NlbGwoaWR4KTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgcmVjb21wdXRlZCB2YXJpYWJsZSB0byB0cnVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXRSZWNvbXB1dGVkKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGludmFsaWRhdGUgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZC4gQW4gaW52YWxpZCB2YWx1ZSBmb3JjZXMgdXMgdG8gcmUtY2FsY3VsYXRlIHRoZSBmaWVsZCdzXHJcbiAgLy8vICAgdmFsdWUgYnkgY29weWluZyBpdCBmcm9tIHRoZSBkYXRhdmlldy5cclxuICAvLy8gICB1c2VkIHdoZW4gc3dpdGNoaW5nIHRvIGFub3RoZXIgcmVjb3JkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImZvcmNlSW52YWxpZGF0ZVwiPi0gRG9udCBjaGVjayB0aGUgZmllbGQncyB0eXBlIGFuZCBtYWtlIGl0IGludmFsaWQgKHVzdWFsbHkgVmlydHVhbHNcclxuICAvLy8gICB3aXRob3V0IGluaXQgZXhwcmVzc2lvbiBhcmUgbmV2ZXIgaW52YWxpZGF0ZWQsIHNpbmNlIHRoZXkgcmV0YWluIHRoZWlyIHZhbHVlIHdoZW4gbW92aW5nXHJcbiAgLy8vICAgYmV0d2VlbiByZWNvcmRzKS5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjbGVhckZsYWdzXCI+PC9wYXJhbT5cclxuICBpbnZhbGlkYXRlKGZvcmNlSW52YWxpZGF0ZTogYm9vbGVhbiwgY2xlYXJGbGFnczogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgbGV0IHJlYzogUmVjb3JkID0gKDxEYXRhVmlldz50aGlzLl9kYXRhdmlldykuZ2V0Q3VyclJlYygpO1xyXG5cclxuICAgIGlmICghdGhpcy5faXNWaXJ0dWFsIHx8IHRoaXMuX3ZpckFzUmVhbCB8fCB0aGlzLl9pbml0RXhwICE9PSBudWxsIHx8IGZvcmNlSW52YWxpZGF0ZSkge1xyXG4gICAgICB0aGlzLl9pbnZhbGlkVmFsdWUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKGNsZWFyRmxhZ3MgJiYgcmVjICE9PSBudWxsKSB7XHJcbiAgICAgIHJlYy5jbGVhckZsYWcodGhpcy5faWQsIFJlY29yZC5GTEFHX1VQREFURUQpO1xyXG4gICAgICByZWMuY2xlYXJGbGFnKHRoaXMuX2lkLCBSZWNvcmQuRkxBR19NT0RJRklFRCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IE5hbWUgb2YgdGFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHB1YmxpYyBnZXRUYWJsZU5hbWUoKTogU3RyaW5nIHtcclxuICAgIGlmICh0aGlzLl90YWJsZU5hbWUgPT0gbnVsbClcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICByZXR1cm4gdGhpcy5fdGFibGVOYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGZvciBnZXQgVkFSTkFNRSBmdW5jdGlvbiB1c2VcclxuICAvLy8gICBBIHN0cmluZyBjb250YWluaW5nIHRoZSB0YWJsZSBuYW1lIHdoZXJlIHRoZSB2YXJpYWJsZSBvcmlnaW5hdGVzLFxyXG4gIC8vLyAgIGNvbmNhdGVuYXRlZCB3aXRoICcuJyBhbmQgdGhlIHZhcmlhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSB2YXJpYWJsZSBpbiB0aGF0IHRhYmxlLlxyXG4gIC8vLyAgIElmIHRoZSB2YXJpYWJsZSBpcyBhIHZpcnR1YWwgb25lLCB0aGVuIHRoZSB0YWJsZSBuYW1lIHdvdWxkIGluZGljYXRlICdWaXJ0dWFsJy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHB1YmxpYyBnZXROYW1lKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5faXNQYXJhbSlcclxuICAgICAgcmV0dXJuIFwiUGFyYW1ldGVyLlwiICsgdGhpcy5nZXRWYXJOYW1lKCk7XHJcbiAgICBlbHNlIGlmICh0aGlzLl9pc1ZpcnR1YWwpXHJcbiAgICAgIHJldHVybiBcIlZpcnR1YWwuXCIgKyB0aGlzLmdldFZhck5hbWUoKTtcclxuICAgIGVsc2UgcmV0dXJuIHRoaXMuZ2V0VGFibGVOYW1lKCkgKyBcIi5cIiArIHRoaXMuZ2V0VmFyTmFtZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRlc3QgZm9yIGEgbnVsbGl0eVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHVibGljIGlzTnVsbCgpOiBib29sZWFuIHtcclxuICAgIGlmICgoPFRhc2s+c3VwZXIuZ2V0VGFzaygpKS5nZXRFdmFsT2xkVmFsdWVzKCkpXHJcbiAgICAgIHJldHVybiB0aGlzLmlzT3JpZ2luYWxWYWx1ZU51bGwoKTtcclxuICAgIGVsc2UgaWYgKHRoaXMuX2ludmFsaWRWYWx1ZSlcclxuICAgICAgdGhpcy50YWtlVmFsRnJvbVJlYygpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzTnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIFByZXZJc051bGwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJldklzTnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0ZXN0IGZvciBhbiBtb2RpZmllZCBmbGFnXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBpc01vZGlmaWVkKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGN1cnJSZWM6IFJlY29yZCA9ICg8RGF0YVZpZXc+dGhpcy5fZGF0YXZpZXcpLmdldEN1cnJSZWMoKTtcclxuICAgIHJldHVybiBjdXJyUmVjLmlzRmxkTW9kaWZpZWQodGhpcy5faWQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgbW9kaWZpZWQgZmxhZ1xyXG4gIC8vLyAgIHBsZWFzZSBub3RlIHRoYXQgY2xlYXJpbmcgdGhlIGZsYWcgaXMgZG9uZSBleHBsaWNpdGx5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXRNb2RpZmllZCgpOiB2b2lkIHtcclxuICAgIGxldCByZWM6IFJlY29yZCA9ICgoPERhdGFWaWV3PnRoaXMuX2RhdGF2aWV3KS5nZXRDdXJyUmVjKCkpO1xyXG4gICAgcmVjLnNldEZsYWcodGhpcy5faWQsIFJlY29yZC5GTEFHX01PRElGSUVEKTtcclxuXHJcbiAgICAvLyBUaGlzIGZsYWcgd2lsbCBiZSBzZXQgYXMgRkxBR19NT0RJRklFRCBhbmQgbmV2ZXIgY2xlYXJlZC4gUWNyICM5MjY4MTVcclxuICAgIHJlYy5zZXRGbGFnKHRoaXMuX2lkLCBSZWNvcmQuRkxBR19NT0RJRklFRF9BVExFQVNUX09OQ0UpO1xyXG4gICAgaWYgKHRoaXMuSXNWaXJ0dWFsKVxyXG4gICAgICB0aGlzLm1vZGlmaWVkQXRMZWFzdE9uY2UgPSB0cnVlO1xyXG4gICAgLy8gdGhlIHNldHRpbmcgb2YgdGhlIHJlY29yZCBtb2RpZmllZCBmbGFnIGlzIGRvbmUgZXhwbGljaXRseVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgdXBkYXRlZCBmbGFnXHJcbiAgLy8vICAgcGxlYXNlIG5vdGUgdGhhdCBjbGVhcmluZyB0aGUgZmxhZyBpcyBkb25lIGV4cGxpY2l0bHlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldFVwZGF0ZWQoKTogdm9pZCB7XHJcbiAgICBsZXQgY3VyclJlYzogUmVjb3JkID0gKDxEYXRhVmlldz50aGlzLl9kYXRhdmlldykuZ2V0Q3VyclJlYygpO1xyXG4gICAgY3VyclJlYy5zZXRGbGFnKHRoaXMuX2lkLCBSZWNvcmQuRkxBR19VUERBVEVEKTtcclxuICAgIGN1cnJSZWMuc2V0VXBkYXRlZCgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdHJ1ZSBpZiB0aGlzIGZpZWxkIGlzIGEgcGFyYW1ldGVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBpc1BhcmFtKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzUGFyYW07XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBpZiB0aGUgZmllbGQgaW4gZXZhbHVhdGlvbiBwcm9jZXNzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBpc0luRXZhbFByb2Nlc3MoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5FdmFsUHJvY2VzcztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRydWUgaWYgdGhlIGZpZWxkIGhhcyBhbiBpbml0IGV4cHJlc3Npb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGhhc0luaXRFeHAoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5pdEV4cCAhPT0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRydWUgaWYgdGhlIHNlcnZlciByZWNvbXB1dGVzIHRoaXMgZmllbGRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGlzU2VydmVyUmNtcCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9yZWNvbXB1dGUgIT09IG51bGwgJiYgdGhpcy5fcmVjb21wdXRlLmlzU2VydmVyUmNtcCgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIHBpY3R1cmUgb2YgdGhlIGZpZWxkIGFzIGEgc3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRQaWN0dXJlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGljdHVyZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSB0aGUgaWQgb2YgdGhlIGxpbmsgdGhpcyBmaWVsZCBiZWxvbmcgdG9cclxuICAvLy8gICBpZiBkb2VzIG5vdCBiZWxvbmcgdG8gYW55IGxpbmsgcmV0dXJuIC0xXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXREYXRhdmlld0hlYWRlcklkKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YXZpZXdIZWFkZXJJZDtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB3aGV0aGVyIHRoZSBmaWVsZCBiZWxvbmdzIHRvIGEgbGluayBvciBub3RcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldCBJc0xpbmtGaWVsZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc0xpbmtGbGQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZXZhbHVhdGVzIGFuZCByZXR1cm5zIHRoZSBpbml0IGV4cHJlc3Npb24gdmFsdWUgb2YgdGhpcyBmaWVsZCAobnVsbCBpZiB0aGVyZSBpcyBub24pXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgYXN5bmMgZ2V0SW5pdEV4cFZhbChyZXM6IFJlZlBhcmFtPHN0cmluZz4sIGlzTnVsbDogUmVmUGFyYW08Ym9vbGVhbj4pOiBQcm9taXNlPHZvaWQ+IHtcclxuXHJcbiAgICBpZiAodGhpcy5faW5pdEV4cCAhPSBudWxsKVxyXG4gICAgICBhd2FpdCB0aGlzLkV2YWx1YXRlSW5pdEV4cHJlc3Npb24ocmVzLCBpc051bGwpO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXMudmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXRzIHRoZSBoYXNDaGFuZ2VFdmVudCBmbGFnIHRvIFRSVUVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldEhhc0NoYW5nZUV2ZW50KCk6IHZvaWQge1xyXG4gICAgdGhpcy5faGFzQ2hhbmdlRXZlbnQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHJpZXZlcyB0aGUgaGFzQ2hhbmdlRXZlbnQgZmxhZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBnZXRIYXNDaGFuZ2VFdmVudCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9oYXNDaGFuZ2VFdmVudDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgaGFzWm9vbUhhbmRsZXIgdG8gdHJ1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0SGFzWm9vbUhhbmRsZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9oYXNab29tSGFuZGxlciA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHJldHVybnM+IHRoZSBoYXNab29tSGFuZGxlclxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgZ2V0SGFzWm9vbUhhbmRsZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faGFzWm9vbUhhbmRsZXI7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdHJ1ZSBpZiBpbiB0aGlzIGZpZWxkIHdpbGwgY2F1c2UgaW52YWxpZGF0aW9uIG9mIGFsbCByb3dzIGluIHRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGlzQ2F1c2VUYWJsZUludmFsaWRhdGlvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9jYXVzZVRhYmxlSW52YWxpZGF0aW9uO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCBjYXVzZSBUYWJsZSBJbnZhbGlkYXRpb24gbWVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNhdXNlVGFibGVJbnZhbGlkYXRpb25cIj48L3BhcmFtPlxyXG4gIGNhdXNlVGFibGVJbnZhbGlkYXRpb24oY2F1c2VUYWJsZUludmFsaWRhdGlvbjogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5fY2F1c2VUYWJsZUludmFsaWRhdGlvbiA9IGNhdXNlVGFibGVJbnZhbGlkYXRpb247XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgd2hlbiB2YWx1ZSBpcyBudWxsLCBnZXQgdmFsdWUgdGhhdCByZXByZXNlbnQgbnVsbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjaGVja051bGxBcml0aG1ldGljXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldFZhbHVlRm9yTnVsbChjaGVja051bGxBcml0aG1ldGljOiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIGxldCB2YWw6IHN0cmluZztcclxuICAgIGlmICh0aGlzLk51bGxBbGxvd2VkKSB7XHJcblxyXG4gICAgICBpZiAoY2hlY2tOdWxsQXJpdGhtZXRpYyAmJiBzdXBlci5nZXRUYXNrKCkuZ2V0TnVsbEFyaXRobWV0aWMoKSA9PT0gQ29uc3RhbnRzLk5VTExfQVJJVEhfTlVMTElGWSkge1xyXG4gICAgICAgIHZhbCA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX251bGxWYWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5fbnVsbFZhbHVlID0gc3VwZXIuZ2V0TWFnaWNEZWZhdWx0VmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFsID0gdGhpcy5fbnVsbFZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdmFsID0gc3VwZXIuZ2V0TWFnaWNEZWZhdWx0VmFsdWUoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgY29udHJvbCB3aGljaCBpcyBhdHRhY2hlZCB0byB0aGUgZmllbGQgYW5kIHJlc2lkZXMgb24gdGhlIHNhbWUgdGFza1xyXG4gIC8vLyAgIG9mIG9mIHRoZSBmaWVsZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHVibGljIGdldEN0cmwoKTogTWdDb250cm9sIHtcclxuICAgIGxldCBjdHJsOiBNZ0NvbnRyb2w7XHJcblxyXG4gICAgaWYgKHRoaXMuX2NvbnRyb2xzICE9IG51bGwpIHtcclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuX2NvbnRyb2xzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY3RybCA9IDxNZ0NvbnRyb2w+dGhpcy5fY29udHJvbHMuZ2V0X0l0ZW0oaSk7XHJcbiAgICAgICAgaWYgKGN0cmwuZ2V0Rm9ybSgpLmdldFRhc2soKSA9PT0gdGhpcy5nZXRUYXNrKCkpXHJcbiAgICAgICAgICByZXR1cm4gY3RybDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdXBkYXRlIHRoZSBkaXNwbGF5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBhc3luYyB1cGRhdGVEaXNwbGF5KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgc3VwZXIudXBkYXRlRGlzcGxheVdpdGhWYWx1ZSh0aGlzLmdldERpc3BWYWx1ZSgpLCB0aGlzLmlzTnVsbCgpKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIHZhbHVlIHRvIGRpc3BsYXlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHB1YmxpYyBnZXREaXNwVmFsdWUoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmlzTnVsbCgpKSB7XHJcbiAgICAgIGlmICh0aGlzLl9udWxsRGlzcGxheSAhPSBudWxsKVxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE51bGxEaXNwbGF5KCk7XHJcbiAgICAgIGVsc2UgcmV0dXJuIHN1cGVyLmdldE1hZ2ljRGVmYXVsdFZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHJldHVybiB0aGlzLmdldFZhbHVlKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gdHJ1ZSwgaWYgcmFuZ2UgY29uZGl0aW9uIHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoZSBpZWxkIGR1cmluZyBjb21wdXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXQgU2hvdWxkQ2hlY2tSYW5nZUluQ29tcHV0ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLklzTGlua0ZpZWxkIHx8ICh0aGlzLklzVmlydHVhbCAmJiAoPERhdGFWaWV3PnRoaXMuX2RhdGF2aWV3KS5IYXNNYWluVGFibGUpO1xyXG4gIH1cclxuXHJcbiAgSXNGb3JBcmd1bWVudCh0YXNrSGFzUGFyYW1ldGVyczogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgLy8gSWYgd2UgbmVlZCBhIHBhcmFtZXRlciBhbmQgdGhlIGZpZWxkIGlzIG5vdCBvbmVcclxuICAgIGlmICh0YXNrSGFzUGFyYW1ldGVycykge1xyXG4gICAgICBpZiAoIXRoaXMuaXNQYXJhbSgpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLklzVmlydHVhbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
672
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL2RhdGEvRmllbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbkcsT0FBTyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLFlBQVksRUFDWixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLE9BQU8sRUFDUCxlQUFlLEVBQ2YsWUFBWSxFQUNaLFNBQVMsRUFDVixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFDTCxRQUFRLEVBQ1IsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFDTixRQUFRLEVBRVIsUUFBUSxFQUNSLEdBQUcsRUFDSCxVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFHL0QsT0FBTyxFQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzVELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRWpELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRWhDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsV0FBVyxFQUFF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LEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1NBQzFDOztZQUNJLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBS0QsSUFBSSx5QkFBeUI7UUFDM0IsT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBZSxJQUFJLENBQUMsU0FBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRCxhQUFhLENBQUMsaUJBQTBCO1FBRXRDLElBQUksaUJBQWlCLEVBQUU7WUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDbkIsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO2FBQ0k7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDbkIsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOztBQXhoQ00saUJBQVcsR0FBWSxLQUFLLENBQUM7QUFFckIsVUFBSSxHQUFhLElBQUksQ0FBQztBQUN0QixVQUFJLEdBQWEsSUFBSSxDQUFDO0FBaUN0Qix5QkFBbUIsR0FBK0IsSUFBSSxJQUFJLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXBwbGljYXRpb25FeGNlcHRpb24sIERlYnVnLCBMaXN0LCBOTnVtYmVyLCBOU3RyaW5nLCBSZWZQYXJhbX0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7XHJcbiAgQ29uc3RhbnRzLFxyXG4gIEludGVybmFsSW50ZXJmYWNlLFxyXG4gIExvZ2dlcixcclxuICBNc2dJbnRlcmZhY2UsXHJcbiAgUElDSW50ZXJmYWNlLFxyXG4gIFN0b3JhZ2VBdHRyaWJ1dGUsXHJcbiAgU3RyVXRpbCxcclxuICBVdGlsU3RyQnl0ZU1vZGUsXHJcbiAgWE1MQ29uc3RhbnRzLFxyXG4gIFhtbFBhcnNlclxyXG59IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcbmltcG9ydCB7XHJcbiAgQmxvYlR5cGUsXHJcbiAgRGlzcGxheUNvbnZlcnRvcixcclxuICBFeHBWYWwsXHJcbiAgRmllbGREZWYsXHJcbiAgTWdDb250cm9sQmFzZSxcclxuICBOVU1fVFlQRSxcclxuICBQSUMsXHJcbiAgVmVjdG9yVHlwZVxyXG59IGZyb20gXCJAbWFnaWMteHBhL2d1aVwiO1xyXG5cclxuaW1wb3J0IHtZZXNOb0V4cH0gZnJvbSBcIi4uL2V4cC9ZZXNOb0V4cFwiO1xyXG5pbXBvcnQge0V4cHJlc3Npb259IGZyb20gXCIuLi9leHAvRXhwcmVzc2lvblwiO1xyXG5pbXBvcnQge0V4cHJlc3Npb25FdmFsdWF0b3J9IGZyb20gXCIuLi9leHAvRXhwcmVzc2lvbkV2YWx1YXRvclwiO1xyXG5pbXBvcnQge01nRm9ybX0gZnJvbSBcIi4uL2d1aS9NZ0Zvcm1cIjtcclxuaW1wb3J0IHtNZ0NvbnRyb2x9IGZyb20gXCIuLi9ndWkvTWdDb250cm9sXCI7XHJcbmltcG9ydCB7UmVjb21wdXRlLCBSZWNvbXB1dGVfUmNtcEJ5fSBmcm9tIFwiLi4vcnQvUmVjb21wdXRlXCI7XHJcbmltcG9ydCB7Qm91bmRhcnl9IGZyb20gXCIuLi9ydC9Cb3VuZGFyeVwiO1xyXG5pbXBvcnQge0FyZ3VtZW50c0xpc3R9IGZyb20gXCIuLi9ydC9Bcmd1bWVudHNMaXN0XCI7XHJcbmltcG9ydCB7Q29uc3RJbnRlcmZhY2V9IGZyb20gXCIuLi9Db25zdEludGVyZmFjZVwiO1xyXG5pbXBvcnQge1Rhc2t9IGZyb20gXCIuLi90YXNrcy9UYXNrXCI7XHJcbmltcG9ydCB7UnVuVGltZUV2ZW50fSBmcm9tIFwiLi4vZXZlbnQvUnVuVGltZUV2ZW50XCI7XHJcbmltcG9ydCB7UmVjb3JkfSBmcm9tIFwiLi9SZWNvcmRcIjtcclxuaW1wb3J0IHtEYXRhVmlld30gZnJvbSBcIi4vRGF0YVZpZXdcIjtcclxuaW1wb3J0IHtpc051bGxPclVuZGVmaW5lZH0gZnJvbSBcInV0aWxcIjtcclxuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tIFwiLi4vZW52L0Vudmlyb25tZW50XCI7XHJcbmltcG9ydCB7IEZpZWxkQmFzZSB9IGZyb20gXCIuL0ZpZWxkQmFzZVwiO1xyXG5pbXBvcnQgeyBMYXN0Rm9jdXNlZE1hbmFnZXIgfSBmcm9tIFwiLi4vcnQvTGFzdEZvY3VzZWRNYW5hZ2VyXCI7XHJcbmltcG9ydCB7IExhbmd1YWdlRGF0YSB9IGZyb20gXCIuLi9lbnYvTGFuZ3VhZ2VEYXRhXCI7XHJcbmltcG9ydCB7IEFjY2Vzc0hlbHBlciB9IGZyb20gXCIuLi9BY2Nlc3NIZWxwZXJcIjtcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgZGF0YSBmb3IgPGZsZGggLi4uPlxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgRmllbGQgZXh0ZW5kcyBGaWVsZEJhc2Uge1xyXG4gIHN0YXRpYyBMRUFWRV9GTEFHUzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBOVU0wOiBOVU1fVFlQRSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgTlVNMTogTlVNX1RZUEUgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIF9saW5rRXhwOiBZZXNOb0V4cCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfcmVjb21wdXRlOiBSZWNvbXB1dGUgPSBudWxsO1xyXG4gIENhY2hlVGFibGVGbGRJZHg6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfY2F1c2VUYWJsZUludmFsaWRhdGlvbjogYm9vbGVhbiA9IGZhbHNlOyAvLyBjaGFuZ2UgaW4gdGhpcyBmaWVsZCB3aWxsIGNhdXNlIGludmFsaWRhdGlvbiBvZiBhbGwgcm93cyBpbiB0YWJsZVxyXG4gIHByaXZhdGUgX2Zvcm06IE1nRm9ybSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfaGFzQ2hhbmdlRXZlbnQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gaWYgVFJVRSwgdGhlcmUgaXMgYSBoYW5kbGVyIHRvIHJ1biB3aGVuIHRoaXMgZmllbGQgaXMgdXBkYXRlZFxyXG4gIHByaXZhdGUgX2hhc1pvb21IYW5kbGVyOiBib29sZWFuID0gZmFsc2U7IC8vIGlmIFRSVUUsIHRoZXJlIGlzIGEgem9vbSBoYW5kbGVyIGZvciB0aGlzIGZpZWxkXHJcbiAgcHJpdmF0ZSBfaW5FdmFsUHJvY2VzczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2luaXRFeHA6IEV4cHJlc3Npb24gPSBudWxsO1xyXG4gIHByaXZhdGUgX2ludmFsaWRWYWx1ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBfaXNMaW5rRmxkOiBib29sZWFuID0gZmFsc2U7IC8vIGlmIFRSVUUsIGl0IG1lYW5zIHRoYXQgdGhlIGZpZWxkIGJlbG9uZ3MgdG8gYSBsaW5rXHJcbiAgcHJpdmF0ZSBfaXNWaXJ0dWFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfZGF0YXZpZXdIZWFkZXJJZDogbnVtYmVyID0gLTE7ICAvLyBtZW1iZXJzIHJlbGF0ZWQgdG8gdGFibGUgY2FjaGVcclxuICBwcml2YXRlIF9saW5rQ3JlYXRlOiBib29sZWFuID0gZmFsc2U7IC8vIElmIHRydWUgdGhlbiBpdCdzIGEgcmVhbCBmaWVsZCB3aGljaCBiZWxvbmdzIHRvIGxpbmsgY3JlYXRlLlxyXG4gIExvY2F0ZTogQm91bmRhcnkgPSBudWxsO1xyXG4gIFJhbmdlOiBCb3VuZGFyeSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfaXNQYXJhbTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2lzRXhwb3NlZFJvdXRlUGFyYW06IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9pc0V4cG9zZWRUb0NsaWVudDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBfcHJldklzTnVsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3ByZXZWYWx1ZTogc3RyaW5nID0gbnVsbDtcclxuICBwcml2YXRlIF90YWJsZU5hbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfaW5kZXhJblRhYmxlOiBudW1iZXIgPSAtMTtcclxuXHJcbiAgcHJpdmF0ZSBfdmlyQXNSZWFsOiBib29sZWFuID0gZmFsc2U7IC8vIElmIHRydWUgdGhlbiBhIHZpcnR1YWwgZmllbGQgaXMgY29tcHV0ZWQgYXMgcmVhbCAobmVlZGVkIGZvciBsaW5rIHJldCB2YWx1ZSlcclxuICBwcm90ZWN0ZWQgX3ZhbDogc3RyaW5nID0gbnVsbDtcclxuICBwcml2YXRlIG1vZGlmaWVkQXRMZWFzdE9uY2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9pc051bGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9jbGVhclZlY3RvclR5cGU6IGJvb2xlYW4gPSB0cnVlOyAvLyBkbyB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgdmVjdG9yIG9iamVjdFxyXG4gIHByaXZhdGUgX3ZlY3RvclR5cGU6IFZlY3RvclR5cGUgPSBudWxsOyAvLyB0aGUgdmVjdG9yIHJlcHJlc2VudGF0aW9uXHJcblxyXG4gIHByaXZhdGUgc3RhdGljIF92YXJpYWJsZUNoYW5nZUV2dHM6IExpc3Q8RmllbGQgfCBSdW5UaW1lRXZlbnQ+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
|