@magic-xpa/engine 4.900.0-dev491.7 → 4.901.0-dev491.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/src/ClientManager.mjs +46 -5
- package/esm2020/src/CurrentClientVersion.mjs +2 -2
- package/esm2020/src/bridge/MagicBridge.mjs +3 -3
- package/esm2020/src/data/Field.mjs +3 -2
- package/esm2020/src/env/LanguageData.mjs +10 -5
- package/esm2020/src/event/EventsManager.mjs +2 -2
- package/esm2020/src/exp/ExpressionEvaluator.mjs +2 -2
- package/esm2020/src/gui/MgControl.mjs +3 -2
- package/esm2020/src/gui/MgForm.mjs +2 -1
- package/esm2020/src/rt/Operation.mjs +3 -3
- package/esm2020/src/rt/RecomputeTable.mjs +12 -4
- package/esm2020/src/rt/RemoteDataviewHeader.mjs +10 -7
- package/esm2020/src/tasks/RemoteTaskService.mjs +3 -3
- package/esm2020/src/tasks/Task.mjs +15 -7
- package/esm2020/src/util/Scrambler.mjs +3 -2
- package/esm2020/src/util/cookie.service.mjs +2 -2
- package/fesm2015/magic-xpa-engine.mjs +109 -36
- package/fesm2015/magic-xpa-engine.mjs.map +1 -1
- package/fesm2020/magic-xpa-engine.mjs +102 -33
- package/fesm2020/magic-xpa-engine.mjs.map +1 -1
- package/package.json +4 -4
- package/src/ClientManager.d.ts +2 -1
- package/src/bridge/MagicBridge.d.ts +1 -1
- package/src/tasks/RemoteTaskService.d.ts +1 -1
- package/src/tasks/Task.d.ts +1 -1
|
@@ -342,8 +342,8 @@ export class Operation {
|
|
|
342
342
|
if (rtEvnt !== null) {
|
|
343
343
|
this._routeParams = rtEvnt.getRouteParamList();
|
|
344
344
|
if ((await rtEvnt.getArgList().getArg(0).getValue(StorageAttribute.ALPHA, 0)).trim() === this._routerPath &&
|
|
345
|
-
((rtEvnt.getArgList().getArg(1).skipArg()) ||
|
|
346
|
-
(await rtEvnt.getArgList().getArg(1).getValue(StorageAttribute.ALPHA, 0)).trim() === this._originalRouterOutletName))
|
|
345
|
+
((rtEvnt.getArgList().getArg(1).skipArg() && destSubForm === this._task.getForm().DefaultRouterOutlet) ||
|
|
346
|
+
(!rtEvnt.getArgList().getArg(1).skipArg() && (await rtEvnt.getArgList().getArg(1).getValue(StorageAttribute.ALPHA, 0)).trim() === this._originalRouterOutletName)))
|
|
347
347
|
canRoute = true;
|
|
348
348
|
if (!canRoute)
|
|
349
349
|
return false;
|
|
@@ -732,4 +732,4 @@ export class Operation {
|
|
|
732
732
|
return this._rtEvt;
|
|
733
733
|
}
|
|
734
734
|
}
|
|
735
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlcmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy9ydC9PcGVyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixLQUFLLEVBQ0wsS0FBSyxFQUVMLE9BQU8sRUFDUCxPQUFPLEVBRVAsTUFBTSxFQUNQLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUVMLFNBQVMsRUFDVCxNQUFNLEVBQ04sZ0JBQWdCLEVBQ2hCLHFCQUFxQixFQUNyQixPQUFPLEVBQ1AsZUFBZSxFQUNmLFlBQVksRUFDWixTQUFTLEVBQ1YsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixPQUFPLEVBQ0wsUUFBUSxFQUVSLFFBQVEsRUFDUixhQUFhLEVBQ2IsTUFBTSxFQUVOLCtCQUErQixFQUMvQixVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBS2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRTdFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFMUQsT0FBTyxF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QUFDO2dCQUNsRSxNQUFNO1NBQ1Q7SUFDSCxDQUFDO0lBTUQsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBTUQsbUJBQW1CO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBTUQscUJBQXFCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLGdDQUFnQyxFQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQU1ELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBcHBsaWNhdGlvbkV4Y2VwdGlvbixcclxuICBEZWJ1ZyxcclxuICBJbnQzMixcclxuICBMaXN0LFxyXG4gIE5OdW1iZXIsXHJcbiAgTlN0cmluZyxcclxuICBTdHJpbmdCdWlsZGVyLFxyXG4gIFRocmVhZFxyXG59IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQ2FsbE9wZXJhdGlvbk1vZGUsXHJcbiAgQ29uc3RhbnRzLFxyXG4gIExvZ2dlcixcclxuICBTdG9yYWdlQXR0cmlidXRlLFxyXG4gIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjayxcclxuICBTdHJVdGlsLFxyXG4gIFV0aWxTdHJCeXRlTW9kZSxcclxuICBYTUxDb25zdGFudHMsXHJcbiAgWG1sUGFyc2VyXHJcbn0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIENvbW1hbmRzLFxyXG4gIE1nQ29udHJvbEJhc2UsXHJcbiAgTlVNX1RZUEUsXHJcbiAgUHJvcEludGVyZmFjZSxcclxuICBTdHlsZXMsXHJcbiAgVGFza0RlZmluaXRpb25JZCxcclxuICBUYXNrRGVmaW5pdGlvbklkVGFibGVTYXhIYW5kbGVyLFxyXG4gIFZlY3RvclR5cGVcclxufSBmcm9tICdAbWFnaWMteHBhL2d1aSc7XHJcblxyXG5pbXBvcnQgeyBZZXNOb0V4cCB9IGZyb20gJy4uL2V4cC9ZZXNOb0V4cCc7XHJcbmltcG9ydCB7IEFyZ3VtZW50c0xpc3QgfSBmcm9tICcuL0FyZ3VtZW50c0xpc3QnO1xyXG5pbXBvcnQgeyBJQ2xpZW50Q29tbWFuZCB9IGZyb20gJy4uL2NvbW1hbmRzL0lDbGllbnRDb21tYW5kJztcclxuaW1wb3J0IHsgRXhwcmVzc2lvbiB9IGZyb20gJy4uL2V4cC9FeHByZXNzaW9uJztcclxuaW1wb3J0IHsgRXZlbnRIYW5kbGVyIH0gZnJvbSAnLi4vZXZlbnQvRXZlbnRIYW5kbGVyJztcclxuaW1wb3J0IHsgRmllbGQgfSBmcm9tICcuLi9kYXRhL0ZpZWxkJztcclxuaW1wb3J0IHsgUnVuVGltZUV2ZW50IH0gZnJvbSAnLi4vZXZlbnQvUnVuVGltZUV2ZW50JztcclxuaW1wb3J0IHsgTWdGb3JtIH0gZnJvbSAnLi4vZ3VpL01nRm9ybSc7XHJcbmltcG9ydCB7IENvbW1hbmRGYWN0b3J5IH0gZnJvbSAnLi4vY29tbWFuZHMvQ2xpZW50VG9TZXJ2ZXIvQ29tbWFuZEZhY3RvcnknO1xyXG5pbXBvcnQgeyBGbG93TW9uaXRvclF1ZXVlIH0gZnJvbSAnLi4vdXRpbC9GbG93TW9uaXRvclF1ZXVlJztcclxuaW1wb3J0IHsgRXhlY09wZXJDb21tYW5kIH0gZnJvbSAnLi4vY29tbWFuZHMvQ2xpZW50VG9TZXJ2ZXIvRXhlY09wZXJDb21tYW5kJztcclxuaW1wb3J0IHsgTWdDb250cm9sIH0gZnJvbSAnLi4vZ3VpL01nQ29udHJvbCc7XHJcbmltcG9ydCB7IENvbnN0SW50ZXJmYWNlIH0gZnJvbSAnLi4vQ29uc3RJbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBUYXNrIH0gZnJvbSAnLi4vdGFza3MvVGFzayc7XHJcbmltcG9ydCB7IEZsb3dNb25pdG9ySW50ZXJmYWNlIH0gZnJvbSAnLi4vRmxvd01vbml0b3JJbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBMYW5ndWFnZURhdGEgfSBmcm9tICcuLi9lbnYvTGFuZ3VhZ2VEYXRhJztcclxuaW1wb3J0IHsgTGFzdEZvY3VzZWRNYW5hZ2VyIH0gZnJvbSAnLi9MYXN0Rm9jdXNlZE1hbmFnZXInO1xyXG5pbXBvcnQgeyBDb21tYW5kc1RhYmxlIH0gZnJvbSAnLi4vQ29tbWFuZHNUYWJsZSc7XHJcbmltcG9ydCB7IEFjY2Vzc0hlbHBlciwgQ2xlYXJFdmVudHNPblN0b3BFeGVjdXRpb24gfSBmcm9tICcuLi9BY2Nlc3NIZWxwZXInO1xyXG5pbXBvcnQgeyBHVUlNYW5hZ2VyIH0gZnJvbSAnLi4vR1VJTWFuYWdlcic7XHJcblxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBkYXRhIGZvciA8b3Blcj4gdGFnXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBPcGVyYXRpb24ge1xyXG4gIHByaXZhdGUgX2NvbmRFeHA6IFllc05vRXhwID0gbmV3IFllc05vRXhwKHRydWUpO1xyXG4gIHByaXZhdGUgX3JldGFpbkZvY3VzOiBZZXNOb0V4cCA9IG5ldyBZZXNOb0V4cChmYWxzZSk7XHJcbiAgcHJpdmF0ZSBfd2FpdEV4cDogWWVzTm9FeHAgPSBuZXcgWWVzTm9FeHAoZmFsc2UpO1xyXG4gIHByaXZhdGUgX3N5bmNEYXRhOiBZZXNOb0V4cCA9IG5ldyBZZXNOb0V4cChmYWxzZSk7IC8vIGNhbGwgb3BlcmF0aW9uOiBTeW5jIGRhdGFcclxuICBwcml2YXRlIF9hcmdMaXN0OiBBcmd1bWVudHNMaXN0ID0gbnVsbDtcclxuICBwcml2YXRlIF9ibG9ja0Nsb3NlOiBudW1iZXIgPSAwO1xyXG4gIC8vIGluIEJsb2NrIEJlZ2luL0Vsc2UvTG9vcCBvcGVyYXRpb246IHRoZSBvcGVyYXRpb24gaWQgd2hpY2ggaXMgdGhlIGVuZCBvZiB0aGUgZXhlY3V0aW9uIGJsb2NrIChlbHNlL2VuZClcclxuICBwcml2YXRlIF9ibG9ja0VuZDogbnVtYmVyID0gMDsgIC8vIGluIEJsb2NrIEJlZ2luL0Vsc2UvTG9vcCBvcGVyYXRpb246IHRoZSBCbG9jayBFbmQgb3BlcmF0aW9uIHRoYXQgZW5kcyB0aGUgbmVzdGluZyBsZXZlbFxyXG4gIHByaXZhdGUgX2J1dHRvbnM6IHN0cmluZyA9ICdcXDAnOyAvLyBidXR0b25zIG9mIHZlcmlmeSBvcHJcclxuICBwcml2YXRlIF9jaGVja0J5U2VydmVyOiBib29sZWFuID0gZmFsc2U7IC8vIGZvciBDYWxsIG9wZXJhdGlvbiB3aXRoIHN1YmZvcm0gZGVzdGluYXRpb25cclxuICBwcml2YXRlIF9jbWRUb1NlcnZlcjogSUNsaWVudENvbW1hbmQgPSBudWxsOyAvLyBkZWZhdWx0IGJ1dHRvbiBvZiB2ZXJpZnkgb3ByXHJcbiAgcHJpdmF0ZSBfZGlzcGxheTogc3RyaW5nID0gJ1MnOyAvLyBTdGF0dXMgbGluZSB8IG1lc3NhZ2UgQm94XHJcbiAgcHJpdmF0ZSBfZXJyTG9nQXBwZW5kOiBib29sZWFuID0gZmFsc2U7IC8vIGFwcGVuZCB0byBlcnJvciBsb2cgZm9yIHZlcmlmeSBvcHJcclxuICBwcml2YXRlIF9ldnRIYW5kbGVyOiBFdmVudEhhbmRsZXIgPSBudWxsO1xyXG4gIHByaXZhdGUgX2V4ZWNPblNlcnZlcjogYm9vbGVhbiA9IGZhbHNlOyAvLyBmb3IgYmxvY2sgaWYgd2hpY2ggc2hvdWxkIGJlIGV4ZWN1dGVkIG9uIHRoZSBzZXJ2ZXJcclxuICBwcml2YXRlIF9leGVjT25DbGllbnQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gZm9yIGJsb2NrIGlmIHdoaWNoIG11c3QgYmUgZXhlY3V0ZWQgb24gdGhlIGNsaWVudFxyXG4gIHByaXZhdGUgX2V4cDogRXhwcmVzc2lvbiA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfZmllbGQ6IEZpZWxkID0gbnVsbDsgLy8gcmVmZXJlbmNlIHRvIHRoZSBmaWVsZFxyXG4gIHByaXZhdGUgX2ltYWdlOiBzdHJpbmcgPSAnXFwwJzsgLy8gaW1hZ2Ugb2YgdmVyaWZ5IG9wclxyXG4gIHByaXZhdGUgX2luY3JlbWVudGFsOiBib29sZWFuID0gZmFsc2U7ICAvLyBJTkNSLT50cnVlLCBOT1JNQUwtPmZhbHNlIChob3cgYXR0cmlidXRlKVxyXG4gIHByaXZhdGUgX21vZGU6IHN0cmluZyA9ICdcXDAnOyAvLyBFcnJvcnxXYXJuaW5nXHJcbiAgcHJpdmF0ZSBfcHVibGljTmFtZTogc3RyaW5nID0gbnVsbDtcclxuICBwcml2YXRlIF9yZXR1cm5WYWw6IEZpZWxkID0gbnVsbDsgLy8gcmV0dXJuIHZhbHVlIG9mIHZlcmlmeSBvcHJcclxuICBwcml2YXRlIF9ydEV2dDogUnVuVGltZUV2ZW50ID0gbnVsbDsgLy8gZm9yIFJhaXNlIGV2ZW50XHJcbiAgcHJpdmF0ZSBfc2VydmVySWQ6IG51bWJlciA9IC0xO1xyXG4gIC8vIHRoZSBpbmRleCBvZiB0aGlzIG9wZXJhdGlvbiBpbiB0aGUgc2VydmVyJ3MgZmxvdyAoMCBtZWFucyBpdCdzIHRoZSBmaXJzdCBvcGVyYXRpb24gaW4gdGhlIGhhbmRsZXIsIDEgZm9yIHRoZSBzZWNvbmQgZXRjLikuIFZhbGlkIGZvcjogU2VydmVyXHJcbiAgcHJpdmF0ZSBjYWxsZWRUYXNrRGVmaW5pdGlvbklkOiBUYXNrRGVmaW5pdGlvbklkID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBfc3ViZm9ybUN0cmxOYW1lOiBzdHJpbmcgPSBudWxsOyAvLyBmb3IgQ2FsbCBvcGVyYXRpb24gd2l0aCBzdWJmb3JtIGRlc3RpbmF0aW9uXHJcbiAgcHJpdmF0ZSBfc3VidHlwZTogc3RyaW5nID0gJ1xcMCc7IC8vIElmfEVsc2V8TG9vcFxyXG4gIHByaXZhdGUgX3Rhc2s6IFRhc2sgPSBudWxsOyAvLyB0aGUgdGFzayBvZiB0aGUgb3BlcmF0aW9uXHJcbiAgcHJpdmF0ZSBfdGV4dDogc3RyaW5nID0gbnVsbDsgLy8gdGhlIHZlcmlmeSBtZXNzYWdlXHJcbiAgcHJpdmF0ZSBfdGl0bGU6IHN0cmluZyA9IG51bGw7IC8vIHRpdGxlIG9mIHZlcmlmeSBvcHJcclxuICBwcml2YXRlIF90aXRsZUV4cDogRXhwcmVzc2lvbiA9IG51bGw7IC8vIGV4cHJlc3Npb24gYXR0YWNoZWQgdG8gdGl0bGUgb2YgdmVyaWZ5IG9wclxyXG4gIHByaXZhdGUgX3R5cGU6IG51bWJlciA9IDA7IC8vIG9wZXJhdGlvbiBudW1iZXIgKGxpa2UgaW4gTWFnaWMpXHJcbiAgcHJpdmF0ZSBfdW5kbzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHByaXZhdGUgX2lzUm91dGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9yb3V0ZXJQYXRoOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX29yaWdpbmFsUm91dGVyT3V0bGV0TmFtZTogc3RyaW5nID0gbnVsbDtcclxuICBwcml2YXRlIF9yb3V0ZVBhcmFtczogTGlzdDxhbnk+ID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgfVxyXG5cclxuICBnZXQgQ2FsbGVkVGFza0RlZmluaXRpb25JZCgpOiBUYXNrRGVmaW5pdGlvbklkIHtcclxuICAgIHJldHVybiB0aGlzLmNhbGxlZFRhc2tEZWZpbml0aW9uSWQ7XHJcbiAgfVxyXG5cclxuICBPcGVyQ2FsbE1vZGU6IENhbGxPcGVyYXRpb25Nb2RlID0gMDtcclxuXHJcbiAgc2V0IFRhc2sodmFsdWU6IFRhc2spIHtcclxuICAgIHRoaXMuX3Rhc2sgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBUYXNrKCk6IFRhc2sge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Rhc2s7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIEltbWVkaWF0ZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLl93YWl0RXhwLmdldFZhbCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBwYXJzZSBhbiBvcGVyYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGZpbGxEYXRhKHRhc2tSZWY6IFRhc2ssIGV2dEhhbmRsZXI6IEV2ZW50SGFuZGxlciwgcGFyc2VyOiBYbWxQYXJzZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Rhc2sgPSB0YXNrUmVmO1xyXG4gICAgdGhpcy5fZXZ0SGFuZGxlciA9IGV2dEhhbmRsZXI7XHJcblxyXG4gICAgd2hpbGUgKHRoaXMuaW5pdElubmVyT2JqZWN0cyhwYXJzZXIsIHBhcnNlci5nZXROZXh0VGFnKCksIHRhc2tSZWYpKSB7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgaW5pdCBpbm5lciBhdHRyaWJ1dGVzIG9mIE9wZXJhdGlvbiBvYmplY3Qgb24gcGFyc2luZyB0aW1lXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGluaXRJbm5lck9iamVjdHMocGFyc2VyOiBYbWxQYXJzZXIsIGZvdW5kVGFnTmFtZTogc3RyaW5nLCB0YXNrUmVmOiBUYXNrKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZm91bmRUYWdOYW1lID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKGZvdW5kVGFnTmFtZSA9PT0gQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VWRU5UKSB7XHJcbiAgICAgIHRoaXMuX3J0RXZ0ID0gbmV3IFJ1blRpbWVFdmVudCh0YXNrUmVmKTtcclxuICAgICAgdGhpcy5fcnRFdnQuZmlsbERhdGEocGFyc2VyLCB0YXNrUmVmKTtcclxuICAgIH0gZWxzZSBpZiAoZm91bmRUYWdOYW1lID09PSBDb25zdEludGVyZmFjZS5NR19UQUdfT1BFUikge1xyXG4gICAgICB0aGlzLmZpbGxBdHRyaWJ1dGVzKHBhcnNlciwgdGFza1JlZik7XHJcbiAgICB9IGVsc2UgaWYgKGZvdW5kVGFnTmFtZSA9PT0gXCIvXCIgKyBDb25zdEludGVyZmFjZS5NR19UQUdfT1BFUikge1xyXG4gICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7IC8vIHNldEN1cnJJbmRleChYbWxQYXJzZXIuaXNOZXh0VGFnQ2xvc2VkKE1HX1RBR19DT05UUk9MKSk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAoZm91bmRUYWdOYW1lID09PSBYTUxDb25zdGFudHMuTUdfVEFHX1RBU0tERUZJTklUSU9OSURfRU5UUlkpIHtcclxuICAgICAgdGhpcy5Jbml0VGFza0RlZmluaXRpb25JRChwYXJzZXIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiVGhlcmUgaXMgbm8gc3VjaCB0YWcgaW4gT3BlcmF0aW9uLiBJbnNlcnQgZWxzZSBpZiB0byBPcGVyYXRpb24uaW5pdElubmVyT2JqZWN0cyBmb3IgXCIgKyBmb3VuZFRhZ05hbWUpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBvcGVyYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza1JlZlwiPnRoZSB0YXNrIG9mIHRoZSBoYW5kbGVyIGN1cnJlbnQ8L3BhcmFtPlxyXG4gIHByaXZhdGUgZmlsbEF0dHJpYnV0ZXMocGFyc2VyOiBYbWxQYXJzZXIsIHRhc2tSZWY6IFRhc2spOiB2b2lkIHtcclxuICAgIGxldCB0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPjtcclxuICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuXHJcbiAgICBpZiAoZW5kQ29udGV4dCAhPT0gLTEgJiYgZW5kQ29udGV4dCA8IHBhcnNlci5nZXRYTUxkYXRhKCkubGVuZ3RoKSB7XHJcblxyXG4gICAgICAvLyBsYXN0IHBvc2l0aW9uIG9mIGl0cyB0YWdcclxuICAgICAgbGV0IHRhZzogU3RyaW5nID0gcGFyc2VyLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KTtcclxuICAgICAgcGFyc2VyLmFkZDJDdXJySW5kZXgodGFnLmluZGV4T2YoQ29uc3RJbnRlcmZhY2UuTUdfVEFHX09QRVIpICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX09QRVIubGVuZ3RoKTtcclxuXHJcbiAgICAgIHRva2Vuc1ZlY3RvciA9IFhtbFBhcnNlci5nZXRUb2tlbnMocGFyc2VyLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KSwgWE1MQ29uc3RhbnRzLlhNTF9BVFRSX0RFTElNKTtcclxuICAgICAgdGhpcy5pbml0RWxlbWVudHModG9rZW5zVmVjdG9yLCB0YXNrUmVmKTtcclxuXHJcbiAgICAgIC8vIGluaXQgaW5uZXIgcmVmZXJlbmNlOlxyXG4gICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KGVuZENvbnRleHQgKyBYTUxDb25zdGFudHMuVEFHX0NMT1NFLmxlbmd0aCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcImluIENvbW1hbmQuRmlsbERhdGEoKSBvdXQgb2Ygc3RyaW5nIGJvdW5kc1wiKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBNYWtlIGluaXRpYWxpemF0aW9uIG9mIHByaXZhdGUgZWxlbWVudHMgYnkgZm91bmQgdG9rZW5zXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRva2Vuc1ZlY3RvclwiPmZvdW5kIHRva2Vucywgd2hpY2ggY29uc2lzdCBhdHRyaWJ1dGUvdmFsdWUgb2YgZXZlcnkgZm91bmRcdGVsZW1lbnQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza1JlZlwiPmN1cnJlbnQ8L3BhcmFtPlxyXG4gIHByaXZhdGUgaW5pdEVsZW1lbnRzKHRva2Vuc1ZlY3RvcjogTGlzdDxTdHJpbmc+LCB0YXNrUmVmOiBUYXNrKTogdm9pZCB7XHJcbiAgICBsZXQgYXR0cmlidXRlOiBTdHJpbmcsIHZhbHVlU3RyO1xyXG4gICAgbGV0IGV4cElkOiBudW1iZXI7XHJcblxyXG4gICAgZm9yIChsZXQgajogbnVtYmVyID0gMDsgaiA8IHRva2Vuc1ZlY3Rvci5sZW5ndGg7IGogKz0gMikge1xyXG4gICAgICBhdHRyaWJ1dGUgPSAodG9rZW5zVmVjdG9yLmdldF9JdGVtKGopKTtcclxuICAgICAgdmFsdWVTdHIgPSAodG9rZW5zVmVjdG9yLmdldF9JdGVtKGogKyAxKSk7XHJcblxyXG4gICAgICBzd2l0Y2ggKGF0dHJpYnV0ZSkge1xyXG4gICAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfVFlQRTpcclxuICAgICAgICAgIHRoaXMuX3R5cGUgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9GTEQ6XHJcbiAgICAgICAgICB0aGlzLl9maWVsZCA9IE9wZXJhdGlvbi5Jbml0RmllbGQodmFsdWVTdHIsIHRoaXMuX3Rhc2spO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9FWFA6XHJcbiAgICAgICAgICBleHBJZCA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgdGhpcy5fZXhwID0gdGFza1JlZi5nZXRFeHBCeUlkKGV4cElkKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9URVhUOlxyXG4gICAgICAgICAgdGhpcy5fdGV4dCA9IFhtbFBhcnNlci51bmVzY2FwZSh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfTU9ERTpcclxuICAgICAgICAgIHRoaXMuX21vZGUgPSB2YWx1ZVN0clswXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TVUJUWVBFOlxyXG4gICAgICAgICAgdGhpcy5fc3VidHlwZSA9IHZhbHVlU3RyWzBdO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IENvbnN0SW50ZXJmYWNlLk1HX09QRVJfQkxPQ0spIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3N1YnR5cGUgPT09ICdFJylcclxuICAgICAgICAgICAgICB0aGlzLl90eXBlID0gQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9FTFNFO1xyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9zdWJ0eXBlID09PSAnTCcpXHJcbiAgICAgICAgICAgICAgdGhpcy5fdHlwZSA9IENvbnN0SW50ZXJmYWNlLk1HX09QRVJfTE9PUDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DTE9TRTpcclxuICAgICAgICAgIHRoaXMuX2Jsb2NrQ2xvc2UgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9FTkQ6XHJcbiAgICAgICAgICB0aGlzLl9ibG9ja0VuZCA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0hPVzpcclxuICAgICAgICAgIHRoaXMuX2luY3JlbWVudGFsID0gKHZhbHVlU3RyID09PSBcIklcIik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVU5ETzpcclxuICAgICAgICAgIGlmICh2YWx1ZVN0clswXSA9PT0gJ04nKVxyXG4gICAgICAgICAgICB0aGlzLl91bmRvID0gZmFsc2U7XHJcbiAgICAgICAgICBlbHNlIGlmICh2YWx1ZVN0clswXSA9PT0gJ1knKVxyXG4gICAgICAgICAgICB0aGlzLl91bmRvID0gdHJ1ZTtcclxuICAgICAgICAgIGVsc2UgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiaW4gT3BlcmF0aW9uLmluaXRFbGVtZW50cygpOiBObyBzdWNoIHZhbHVlIHRvIHRoZSBNR19BVFRSX1VORE8gZm9yIFwiICsgdmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0RJU1BMQVk6XHJcbiAgICAgICAgICB0aGlzLl9kaXNwbGF5ID0gdmFsdWVTdHJbMF07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfV0FJVDpcclxuICAgICAgICAgIHRoaXMuX3dhaXRFeHAuc2V0VmFsKHRhc2tSZWYsIHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9SRVRBSU5fRk9DVVM6XHJcbiAgICAgICAgICB0aGlzLl9yZXRhaW5Gb2N1cy5zZXRWYWwodGFza1JlZiwgdmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NZTkNfREFUQTpcclxuICAgICAgICAgIHRoaXMuX3N5bmNEYXRhLnNldFZhbCh0YXNrUmVmLCB2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU0hPVzpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DTkQ6XHJcbiAgICAgICAgICB0aGlzLl9jb25kRXhwLnNldFZhbCh0YXNrUmVmLCB2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQVJHTElTVDpcclxuICAgICAgICAgIHRoaXMuX2FyZ0xpc3QgPSBuZXcgQXJndW1lbnRzTGlzdCgpO1xyXG4gICAgICAgICAgdGhpcy5fYXJnTGlzdC5maWxsTGlzdCh2YWx1ZVN0ciwgdGhpcy5fdGFzayk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfUkVGUkVTSE9OOlxyXG4gICAgICAgICAgdGhpcy5fYXJnTGlzdC5SZWZyZXNoT25TdHJpbmcgPSB2YWx1ZVN0ci5UcmltKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU0VSVkVSX0lEOlxyXG4gICAgICAgICAgdGhpcy5fc2VydmVySWQgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9PUEVSX0NBTExNT0RFOlxyXG4gICAgICAgICAgdGhpcy5PcGVyQ2FsbE1vZGUgPSA8Q2FsbE9wZXJhdGlvbk1vZGU+dmFsdWVTdHJbMF07XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NVQkZPUk1fQ1RSTDpcclxuICAgICAgICAgIHRoaXMuX3N1YmZvcm1DdHJsTmFtZSA9IFhtbFBhcnNlci51bmVzY2FwZSh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ0hFQ0tfQllfU0VSVkVSOlxyXG4gICAgICAgICAgdGhpcy5fY2hlY2tCeVNlcnZlciA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9QVUJMSUM6XHJcbiAgICAgICAgICB0aGlzLl9wdWJsaWNOYW1lID0gdmFsdWVTdHI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfUFJHX0RFU0NSSVBUSU9OOlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NQWV9HTEJfUFJNUzpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9FWEVDX09OX1NFUlZFUjpcclxuICAgICAgICAgIHRoaXMuX2V4ZWNPblNlcnZlciA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9FWEVDX09OX0NMSUVOVDpcclxuICAgICAgICAgIHRoaXMuX2V4ZWNPbkNsaWVudCA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9USVRMRTpcclxuICAgICAgICAgIHRoaXMuX3RpdGxlID0gWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9USVRMRV9FWFA6XHJcbiAgICAgICAgICBleHBJZCA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgdGhpcy5fdGl0bGVFeHAgPSB0YXNrUmVmLmdldEV4cEJ5SWQoZXhwSWQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0lNQUdFOlxyXG4gICAgICAgICAgdGhpcy5faW1hZ2UgPSB2YWx1ZVN0clswXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9CVVRUT05TOlxyXG4gICAgICAgICAgdGhpcy5fYnV0dG9ucyA9IHZhbHVlU3RyWzBdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1JFVFVSTl9WQUw6XHJcbiAgICAgICAgICB0aGlzLl9yZXR1cm5WYWwgPSBPcGVyYXRpb24uSW5pdEZpZWxkKHZhbHVlU3RyLCB0aGlzLl90YXNrKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9FUlJfTE9HX0FQUEVORDpcclxuICAgICAgICAgIHRoaXMuX2VyckxvZ0FwcGVuZCA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9PUEVSX01FVEhPRE5BTUU6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSVNfR1VJX1RIUkVBRF9FWEVDVVRJT046XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSVNfUk9VVEU6XHJcbiAgICAgICAgICB0aGlzLl9pc1JvdXRlID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9ST1VURVJfUEFUSDpcclxuICAgICAgICAgIHRoaXMuX3JvdXRlclBhdGggPSBYbWxQYXJzZXIudW5lc2NhcGUodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcIlRoZXJlIGlzIG5vIHN1Y2ggdGFnIGluIE9wZXJhdGlvbiBjbGFzcy4gSW5zZXJ0IGNhc2UgdG8gT3BlcmF0aW9uLmluaXRFbGVtZW50cyBmb3IgXCIgKyBhdHRyaWJ1dGUpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9zZXJ2ZXJJZCA+IC0xKVxyXG4gICAgICB0aGlzLl9jbWRUb1NlcnZlciA9IENvbW1hbmRGYWN0b3J5LkNyZWF0ZUV4ZWNPcGVyQ29tbWFuZCh0aGlzLl90YXNrLmdldFRhc2tUYWcoKSwgXCJcIiArIHRoaXMuX2V2dEhhbmRsZXIuZ2V0SWQoKSwgdGhpcy5fc2VydmVySWQsIEludDMyLk1pblZhbHVlLCBudWxsKTtcclxuXHJcbiAgICBpZiAodGhpcy5faXNSb3V0ZSkge1xyXG4gICAgICB0aGlzLl9vcmlnaW5hbFJvdXRlck91dGxldE5hbWUgPSB0aGlzLl9zdWJmb3JtQ3RybE5hbWUgIT09IG51bGwgPyB0aGlzLl9zdWJmb3JtQ3RybE5hbWUgOiBcIlwiO1xyXG5cclxuICAgICAgaWYgKHRoaXMuX3N1YmZvcm1DdHJsTmFtZSA9PSBudWxsKSB7XHJcbiAgICAgICAgbGV0IGRlZmF1bHRSb3V0ZXJPdXRsZXQ6IE1nQ29udHJvbEJhc2UgPSB0aGlzLl90YXNrLmdldEZvcm0oKS5EZWZhdWx0Um91dGVyT3V0bGV0O1xyXG4gICAgICAgIHRoaXMuX3N1YmZvcm1DdHJsTmFtZSA9IGRlZmF1bHRSb3V0ZXJPdXRsZXQgIT09IG51bGwgPyBkZWZhdWx0Um91dGVyT3V0bGV0Lk5hbWUgOiBcIlwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJwYXJzZXJcIj48L3BhcmFtPlxyXG4gIEluaXRUYXNrRGVmaW5pdGlvbklEKHBhcnNlcjogWG1sUGFyc2VyKTogdm9pZCB7XHJcbiAgICBsZXQgeG1sQnVmZmVyOiBzdHJpbmcgPSBwYXJzZXIuUmVhZFRvRW5kT2ZDdXJyZW50RWxlbWVudCgpO1xyXG4gICAgbGV0IHRhc2tEZWZpbml0aW9uSWRUYWJsZVNheEhhbmRsZXI6IFRhc2tEZWZpbml0aW9uSWRUYWJsZVNheEhhbmRsZXIgPSBuZXcgVGFza0RlZmluaXRpb25JZFRhYmxlU2F4SGFuZGxlcih0aGlzLlNldFRhc2tEZWZpbml0aW9uSWQpO1xyXG4gICAgdGFza0RlZmluaXRpb25JZFRhYmxlU2F4SGFuZGxlci5wYXJzZSh4bWxCdWZmZXIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBjYWxsYmFjayBmb3IgdGhlIHNheCBwYXJzZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRhc2tEZWZpbml0aW9uSWRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInhtbElkXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkZWZhdWx0VGFnTGlzdFwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBTZXRUYXNrRGVmaW5pdGlvbklkKHRhc2tEZWZpbml0aW9uSWQ6IFRhc2tEZWZpbml0aW9uSWQpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FsbGVkVGFza0RlZmluaXRpb25JZCA9IHRhc2tEZWZpbml0aW9uSWQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgSW5pdGlhbGl6ZSB0aGUgZmllbGRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsdWVTdHJcIj5hIHJlZmVyZW5jZSB0byB0aGUgZmllbGQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza1wiPjwvcGFyYW0+XHJcbiAgc3RhdGljIEluaXRGaWVsZCh2YWx1ZVN0cjogc3RyaW5nLCB0YXNrOiBUYXNrKTogRmllbGQge1xyXG4gICAgbGV0IFRhc2tGaWVsZDogTGlzdDxzdHJpbmc+ID0gWG1sUGFyc2VyLmdldFRva2Vucyh2YWx1ZVN0ciwgJywnKS8qJywnKi87XHJcbiAgICBpZiAoVGFza0ZpZWxkLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICBsZXQgcGFyZW50OiBudW1iZXIgPSBOTnVtYmVyLlBhcnNlKFRhc2tGaWVsZC5nZXRfSXRlbSgwKSk7XHJcbiAgICAgIGxldCBmbGRJRDogbnVtYmVyID0gTk51bWJlci5QYXJzZShUYXNrRmllbGQuZ2V0X0l0ZW0oMSkpO1xyXG4gICAgICBsZXQgZmllbGQ6IEZpZWxkID0gPEZpZWxkPnRhc2suZ2V0RmllbGREZWYocGFyZW50LCBmbGRJRCk7XHJcbiAgICAgIHJldHVybiBmaWVsZDtcclxuICAgIH1cclxuICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhOU3RyaW5nLkZvcm1hdChcIlVua25vd24gZmllbGQ6ICd7MH0nXCIsIHZhbHVlU3RyKSk7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBleGVjdXRlIHRoZSBvcGVyYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibXByZ0NyZWF0b3JcIj5yZWxldmFudCBvbmx5IHdoZW4gdGhlIG9wZXJhdGlvbiBiZWxvbmdzIHRvIGEgbWFpbiBwcm9ncmFtLlxyXG4gIC8vLyAgIEl0IGlkZW50aWZpZXMgdGhlIHRhc2sgd2hpY2ggY2F1c2VkIHRoaXMgbWFpbiBwcm9ncmFtIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBydW50aW1lXHJcbiAgLy8vICAgZmxvdyAoaS5lLiB3aGVuIHJ1bm5pbmcgYSB0YXNrIGZyb20gYSBkaWZmZXJlbnQgY29tcG9uZW50LCB3ZSBpbnN0YW50aWF0ZSBoaXMgbWFpbiBwcm9ncmFtXHJcbiAgLy8vICAgcmlnaHQgYWJvdmUgaXQuXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdHJsXCI+dGhlIGZvY3VzIG5lZWQgdG8gYmUgcmV0dXJuZWQgYWZ0ZXIgdGhlIFZFUklGWSBvcGVyYXRpb24gaW4gTWVzc2FnZSBCb3ggbmVlZHMgb25seVxyXG4gIC8vLyAgIGFsbCBhbm90aGVyIG9wZXJhdGlvbnMgY2FuIHVzZSBudWxsXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXR1cm5lZEZyb21TZXJ2ZXJcIj50cnVlIGlmIHRoZSBzZXJ2ZXIgcmV0dXJuZWQgdGhlIGV4ZWN1dGlvbiB0byB0aGlzIG9wZXJhdGlvbjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBib29sZWFuIGZvciB2ZXJpZnkgYW5kIGJsb2NrIG9wZXJhdGlvbnM8L3JldHVybnM+XHJcbiAgYXN5bmMgZXhlY3V0ZShyZXR1cm5lZEZyb21TZXJ2ZXI6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCBsYXN0UnRFdmVudDogUnVuVGltZUV2ZW50ID0gQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuZ2V0TGFzdFJ0RXZlbnQoKTtcclxuICAgIGxldCBtcHJnQ3JlYXRvcjogVGFzayA9IG51bGw7XHJcbiAgICBsZXQgZmxvd01vbml0b3I6IEZsb3dNb25pdG9yUXVldWUgPSBGbG93TW9uaXRvclF1ZXVlLkluc3RhbmNlO1xyXG5cclxuICAgIGlmIChsYXN0UnRFdmVudCAhPT0gbnVsbClcclxuICAgICAgbXByZ0NyZWF0b3IgPSA8VGFzaz5sYXN0UnRFdmVudC5nZXRNYWluUHJnQ3JlYXRvcigpO1xyXG5cclxuICAgIGlmIChyZXR1cm5lZEZyb21TZXJ2ZXIgfHxcclxuICAgICAgKCFyZXR1cm5lZEZyb21TZXJ2ZXIgJiYgKHRoaXMuX3R5cGUgIT09IENvbnN0SW50ZXJmYWNlLk1HX09QRVJfU0VSVkVSIHx8ICF0aGlzLl9jb25kRXhwLmlzU2VydmVyRXhwKCkpKSkge1xyXG4gICAgICBpZiAoISBhd2FpdCB0aGlzLmNhbkV4ZWN1dGUoKSkge1xyXG4gICAgICAgIGlmICh0aGlzLl90eXBlICE9PSBDb25zdEludGVyZmFjZS5NR19PUEVSX0xPT1ApXHJcbiAgICAgICAgICBhd2FpdCBmbG93TW9uaXRvci5hZGRGbG93RmllbGRPcGVyYXRpb24odGhpcywgZmFsc2UsIHRoaXMuX3Rhc2suR2V0VGFza0RldGFpbHMoKSk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fdHlwZSAhPT0gQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9MT09QICYmIHRoaXMuX3R5cGUgIT09IENvbnN0SW50ZXJmYWNlLk1HX09QRVJfRU5EQkxPQ0spXHJcbiAgICAvLyBXZSBjYWxsIGFkZEZsb3dPcGVyYXRpb25TZWxlY3Qgb25seSBhdCB0aGUgYmVnaW5pbmcgYW5kIGVuZCBvZiB0aGUgbG9vcCBhdCBFdmVudEhhbmRsZXI6OmV4ZWN1dGVcclxuICAgICAgYXdhaXQgZmxvd01vbml0b3IuYWRkRmxvd0ZpZWxkT3BlcmF0aW9uKHRoaXMsIHRydWUsIHRoaXMuX3Rhc2suR2V0VGFza0RldGFpbHMoKSk7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgc3dpdGNoICh0aGlzLl90eXBlKSB7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19PUEVSX1ZFUklGWTpcclxuICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLm9wZXJWZXJpZnkoKTtcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfQkxPQ0s6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5vcGVyQmxvY2soKTtcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfTE9PUDpcclxuICAgICAgICAgIGlmICghdGhpcy5nZXRFeGVjT25TZXJ2ZXIoKSlcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlckJsb2NrKCk7XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5vcGVyU2VydmVyKG1wcmdDcmVhdG9yKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19PUEVSX0VMU0U6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5vcGVyRWxzZSgpO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9FVkFMVUFURTpcclxuICAgICAgICAgIGF3YWl0IHRoaXMub3BlckV2YWx1YXRlKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfVVBEQVRFOlxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5vcGVyVXBkYXRlKG1wcmdDcmVhdG9yKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9SQUlTRV9FVkVOVDpcclxuICAgICAgICAgIGF3YWl0IHRoaXMub3BlclJhaXNlRXZlbnQobXByZ0NyZWF0b3IsIHJldHVybmVkRnJvbVNlcnZlcik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfU0VSVkVSOlxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5vcGVyU2VydmVyKG1wcmdDcmVhdG9yKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9DQUxMOlxyXG4gICAgICAgICAgaWYgKHRoaXMuX3B1YmxpY05hbWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLm9wZXJDYWxsUGFyYWxsZWwoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3N1YmZvcm1DdHJsTmFtZSA9PSBudWxsKVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLm9wZXJDYWxsKG1wcmdDcmVhdG9yKTtcclxuICAgICAgICAgIC8vIFN1YmZvcm0gRGVzdGluYXRpb24gQ2FsbCBvUiBDYWxsIFJvdXRlXHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHN1YmZvcm1UYXNrOiBUYXNrO1xyXG4gICAgICAgICAgICBsZXQgaXNFbmRQcm9nOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9jaGVja0J5U2VydmVyKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCEodGhpcy5fY21kVG9TZXJ2ZXIgaW5zdGFuY2VvZiBFeGVjT3BlckNvbW1hbmQpKVxyXG4gICAgICAgICAgICAgICAgRGVidWcuQXNzZXJ0KGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgICAgbGV0IGNvbW1hbmQ6IEV4ZWNPcGVyQ29tbWFuZCA9IDxFeGVjT3BlckNvbW1hbmQ+dGhpcy5fY21kVG9TZXJ2ZXI7XHJcbiAgICAgICAgICAgICAgY29tbWFuZC5DaGVja09ubHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMub3BlckNhbGwobXByZ0NyZWF0b3IpO1xyXG4gICAgICAgICAgICAgIGNvbW1hbmQuQ2hlY2tPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgaWYgKEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmdldE5leHRPcGVySWR4KHRoaXMsIHRydWUpID4gLTEpXHJcbiAgICAgICAgICAgICAgICBpc0VuZFByb2cgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNFbmRQcm9nKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGRlc3RTdWJGb3JtOiBNZ0NvbnRyb2wgPSAoPE1nRm9ybT50aGlzLl90YXNrLmdldEZvcm0oKSkuZ2V0U3ViRm9ybUN0cmxCeU5hbWUodGhpcy5fc3ViZm9ybUN0cmxOYW1lKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gQSBjYWxsIHJvdXRlIG9wZXJhdGlvbiBuZWVkcyBhbiBvdXRsZXQuIElmIGEgbWF0Y2hpbmcgb3V0bGV0IGlzIG5vdCBmb3VuZCwgQ2FsbCByb3V0ZSBjYW5ub3QgZXhlY3V0ZS5cclxuICAgICAgICAgICAgICBpZiAodGhpcy5faXNSb3V0ZSAmJiAoZGVzdFN1YkZvcm0gPT09IG51bGwgfHwgIWRlc3RTdWJGb3JtLklzUm91dGVyT3V0bGV0KCkpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoZGVzdFN1YkZvcm0gIT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc1JvdXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBjYW5Sb3V0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICBsZXQgcnRFdm50ID0gQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuZ2V0TGFzdFJ0RXZlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKHJ0RXZudCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JvdXRlUGFyYW1zID0gcnRFdm50LmdldFJvdXRlUGFyYW1MaXN0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoYXdhaXQgcnRFdm50LmdldEFyZ0xpc3QoKS5nZXRBcmcoMCkuZ2V0VmFsdWUoU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSwgMCkpLnRyaW0oKSA9PT0gdGhpcy5fcm91dGVyUGF0aCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgKChydEV2bnQuZ2V0QXJnTGlzdCgpLmdldEFyZygxKS5za2lwQXJnKCkpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChhd2FpdCBydEV2bnQuZ2V0QXJnTGlzdCgpLmdldEFyZygxKS5nZXRWYWx1ZShTdG9yYWdlQXR0cmlidXRlLkFMUEhBLCAwKSkudHJpbSgpID09PSB0aGlzLl9vcmlnaW5hbFJvdXRlck91dGxldE5hbWUpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgY2FuUm91dGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNhblJvdXRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgc3ViZm9ybVRhc2sgPSA8VGFzaz5kZXN0U3ViRm9ybS5nZXRTdWJmb3JtVGFzaygpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzdWJmb3JtVGFzayAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCB0ZXJtaW5hdGVUYXNrR3JhY2VmdWxseSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBydEV2bnQgPSBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5nZXRMYXN0UnRFdmVudCgpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNSb3V0ZSAmJiBydEV2bnQgIT09IG51bGwgJiYgcnRFdm50LmlzR3VpVHJpZ2dlcmVkRXZlbnQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZVRhc2tHcmFjZWZ1bGx5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuc2V0U3RvcEV4ZWN1dGlvbih0cnVlLCBDbGVhckV2ZW50c09uU3RvcEV4ZWN1dGlvbi5OT05FKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoYXdhaXQgc3ViZm9ybVRhc2suZW5kVGFzayh0cnVlLCBmYWxzZSwgIXRlcm1pbmF0ZVRhc2tHcmFjZWZ1bGx5LCB0cnVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJlbnRUYXNrOiBUYXNrID0gPFRhc2s+ZGVzdFN1YkZvcm0uZ2V0Rm9ybSgpLmdldFRhc2soKTtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRUYXNrLlRhc2tTZXJ2aWNlLlJlbW92ZVJlY29tcHV0ZXMocGFyZW50VGFzayk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgdGFzayBmYWlsZWQgdG8gdGVybWluYXRlLCBkbyBubyBwcm9jZWVkIHRvIGNhbGwgdGhlIG5ldyB0YXNrLlxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKExhc3RGb2N1c2VkTWFuYWdlci5nZXRMYXN0Rm9jdXNlZENvbnRyb2woKSAhPSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAgIExhc3RGb2N1c2VkTWFuYWdlci5nZXRMYXN0Rm9jdXNlZENvbnRyb2woKS5pc0Rlc2NlbmRlbnRPZkNvbnRyb2woZGVzdFN1YkZvcm0pKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLl90YXNrLlJldGFpbkZvY3VzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuX3Rhc2suUmV0YWluRm9jdXMgPSBhd2FpdCB0aGlzLl9yZXRhaW5Gb2N1cy5nZXRWYWwoKTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMub3BlckNhbGwobXByZ0NyZWF0b3IpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gQ2FsbCBvcGVyYXRpb24gc2hvdWxkIHJldHVybiB3aGV0aGVyIGl0IGV4ZWN1dGVkIGEgQ2FsbCBSb3V0ZSBvciBub3QuXHJcbiAgICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBieSB0aGUgY2FsbGVyIGJlY2F1c2UsIGl0IGhhcyB0byBzdG9wIGV4ZWN1dGluZyBzdWJzZXF1ZW50XHJcbiAgICAgICAgICAvLyBvcGVyYXRpb25zIGluIGNhc2UgYSBjYWxsIHJvdXRlIGdldHMgZXhlY3V0ZWQuXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5faXNSb3V0ZTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiVGhlcmUgaXMgbm8gc3VjaCB0eXBlIG9mIG9wZXJhdGlvbiBcIiArIHRoaXMuX3R5cGUpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleCkge1xyXG4gICAgICB0aHJvdyBleDtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNhbGwgYSBwYXJhbGxlbCByaWNoLWNsaWVudCBwcm9ncmFtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIG9wZXJDYWxsUGFyYWxsZWwoKTogdm9pZCB7XHJcbiAgICBPcGVyYXRpb24uY2FsbFBhcmFsbGVsKCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY2FsbFBhcmFsbGVsKCk6IHZvaWQge1xyXG4gIC8vICAgaWYgKHRhc2suSXNPZmZsaW5lKSB7XHJcbiAgLy8gICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcIkNhbid0IHJ1biBhIHBhcmFsbGVsIHByb2dyYW0gZnJvbSBhbiBvZmZsaW5lIHRhc2tcIik7XHJcbiAgLy8gICAgIHJldHVybjtcclxuICAvLyAgIH1cclxuICAvL1xyXG4gIC8vICAgLy8gIFRoZSByaWNoLWNsaWVudCB3aWxsIHF1ZXJ5IHRoZSBydW50aW1lLWVuZ2luZSBmb3IgdGhlIHVwLXRvLWRhdGUgbGlzdCBvZiBnbG9iYWwgcGFyYW1zXHJcbiAgLy8gICAvLyAgb2YgdGhlIGN1cnJlbnQgY29udGV4dCBvbmx5IGlmIHRoZSBjYWxsRUQgKHBhcmFsbGVsKSBwcm9ncmFtIHJlcXVlc3RzIGNvcHlpbmcgb2YgZ2xvYmFsIHBhcmFtcyxcclxuICAvLyAgIC8vICB0aGUgY2FsbEVSIHByb2dyYW0gc2hvdWxkIHF1ZXJ5IHRoZW0gZnJvbSB0aGUgcnVudGltZS1lbmdpbmVcclxuICAvLyAgIGlmIChnbG9iYWxQYXJhbXNTaG91bGRCZUNvcGllZCkge1xyXG4gIC8vICAgICBsZXQgbWdEYXRhOiBNR0RhdGEgPSB0YXNrLmdldE1HRGF0YSgpO1xyXG4gIC8vICAgICBsZXQgY21kOiBJQ2xpZW50Q29tbWFuZCA9IENvbW1hbmRGYWN0b3J5LkNyZWF0ZVF1ZXJ5R2xvYmFsUGFyYW1zQ29tbWFuZCgpO1xyXG4gIC8vICAgICBtZ0RhdGEuQ21kc1RvU2VydmVyLkFkZChjbWQpO1xyXG4gIC8vICAgICBDb21tYW5kc1Byb2Nlc3Nvck1hbmFnZXIuR2V0Q29tbWFuZHNQcm9jZXNzb3IoKS5FeGVjdXRlKENvbW1hbmRzUHJvY2Vzc29yQmFzZV9TZW5kaW5nSW5zdHJ1Y3Rpb24uT05MWV9DT01NQU5EUyk7XHJcbiAgLy8gICB9XHJcbiAgLy8gICAvLyBjbG9uZSB0aGUgZXhlY3V0aW9uIHByb3BlcnRpZXMgb2YgdGhlIGN1cnJlbnQgY2xpZW50XHJcbiAgLy8gICBMb2dnZXIuaW5zdGFuY2UuV3JpdGVFcnJvclRvTG9nKFwiY2FsbFBhcmFsbGVsIGNhbGxlZFwiKTtcclxuICAvLyAgIGxldCBjYWxsZWRQcm9ncmFtUHJvcHM6IGFueSA9IENsaWVudE1hbmFnZXIuSW5zdGFuY2UuY29weUV4ZWN1dGlvblByb3BzKCk7XHJcbiAgLy8gICBTZXJ2ZXJDb25maWcuSW5zdGFuY2Uuc2V0R2xvYmFsUGFyYW1zKG51bGwpO1xyXG4gIC8vXHJcbiAgLy8gICAvLyBzZXQgdGhlIGNhbGxlZCBwcm9ncmFtJ3MgaW50ZXJuYWwgbmFtZVxyXG4gIC8vICAgY2FsbGVkUHJvZ3JhbVByb3BzLnNldF9JdGVtKENvbnN0SW50ZXJmYWNlLlJFUV9QUkdfTkFNRSwgcHVibGljTmFtZSk7XHJcbiAgLy9cclxuICAvLyAgIC8vIFNlcnZlciBzZW5kcyBwcmdEZXNjaXBydGlvbiBvbmx5IHdoZW4gUHVibGljTmFtZSBpcyBub3Qgc3BlY2lmaWVkLlxyXG4gIC8vICAgLy8gT3RoZXJ3aXNlIHNlcnZlciBzZW5kcyBhIGZpY3RpdmUgcHJnRGVzY3JpcHRpb24gbGlrZSA6IF9Qcm9ncmFtX0lkXzxJU04+LlxyXG4gIC8vICAgLy8gV2hlbiBwdWJsaWMgbmFtZSBpcyBzcGVjaWZpZWQgcHJnRGVzY3JpcHRpb24gaXMgbm90IHVzZWQgYW5kIGl0IHdpbGwgYmUgbnVsbC5cclxuICAvLyAgIGlmICghTlN0cmluZy5Jc051bGxPckVtcHR5KHByZ0Rlc2NyaXB0aW9uKSkge1xyXG4gIC8vICAgICBjYWxsZWRQcm9ncmFtUHJvcHMuc2V0X0l0ZW0oQ29uc3RJbnRlcmZhY2UuUkVRX1BSR19ERVNDUklQVElPTiwgcHJnRGVzY3JpcHRpb24pO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgY2FsbGVkUHJvZ3JhbVByb3BzLnNldF9JdGVtKENvbnN0SW50ZXJmYWNlLlBBUkFMTEVMX0VYRUNVVElPTiwgXCJZXCIpO1xyXG4gIC8vXHJcbiAgLy8gICAvLyBhcmd1bWVudHMgdG8gdGhlIHBhcmFsbGVsIHByb2dyYW1cclxuICAvLyAgIGlmIChhcmdMaXN0ICE9PSBudWxsKSB7XHJcbiAgLy8gICAgIGxldCBwcmdBcmdzOiBzdHJpbmcgPSBhcmdMaXN0LnRvVVJMKHRydWUpO1xyXG4gIC8vICAgICBjYWxsZWRQcm9ncmFtUHJvcHMuc2V0X0l0ZW0oQ29uc3RJbnRlcmZhY2UuUkVRX0FSR1MsIHByZ0FyZ3MpO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgbGV0IFhNTGRhdGE6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gIC8vICAgdHJ5IHtcclxuICAvLyAgICAgY2FsbGVkUHJvZ3JhbVByb3BzLnN0b3JlVG9YTUwoWE1MZGF0YSk7XHJcbiAgLy9cclxuICAvLyAgICAgLy8gSWYgZW5jb2Rpbmcgd2FzIGRpc2FibGVkLCBlbmFibGUgaXQgdG8gY3JlYXRlIHRoZSByaWdodCBjb21tYW5kIGxpbmUgZm9yIHRoZSBwYXJhbGxlbCBwcm9ncmFtXHJcbiAgLy8gICAgIGxldCBlbmNvZGluZ0VuYWJsZWQ6IGJvb2xlYW4gPSBIdHRwVXRpbGl0eS5FbmNvZGluZ0VuYWJsZWQ7XHJcbiAgLy8gICAgIGlmICghZW5jb2RpbmdFbmFibGVkKVxyXG4gIC8vICAgICAgIEh0dHBVdGlsaXR5LkVuY29kaW5nRW5hYmxlZCA9IHRydWU7XHJcbiAgLy9cclxuICAvLyAgICAgbGV0IHNwYXduaW5nQXJndW1lbnRzOiBzdHJpbmcgPSBIdHRwVXRpbGl0eS5VcmxFbmNvZGUoWE1MZGF0YS5Ub1N0cmluZygpLCBFbmNvZGluZy5VVEY4KTtcclxuICAvLyAgICAgaWYgKCFlbmNvZGluZ0VuYWJsZWQpXHJcbiAgLy8gICAgICAgSHR0cFV0aWxpdHkuRW5jb2RpbmdFbmFibGVkID0gZmFsc2U7XHJcbiAgLy9cclxuICAvLyAgICAgLy8gc3Bhd24gYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGFzc2VtYmx5IGluc2lkZSB0aGUgY3VycmVudCBwcm9jZXNzXHJcbiAgLy8gICAgIFByb2Nlc3MuU3RhcnRDdXJyZW50RXhlY3V0YWJsZShzcGF3bmluZ0FyZ3VtZW50cyk7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBjYXRjaCAoZXgpIHtcclxuICAvLyAgICAgaWYgKGV4IGluc3RhbmNlb2YgRXhjZXB0aW9uKSB7XHJcbiAgLy8gICAgICAgT3BlcmF0aW9uLmNhbGxPcHJTaG93RXJyb3IodGFzaywgZXgudG9TdHJpbmcoKSk7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgICAgZWxzZVxyXG4gIC8vICAgICAgIHRocm93IGV4O1xyXG4gIC8vICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIGNvbmRpdGlvbiB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRDb25kVmFsKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX2NvbmRFeHAuZ2V0VmFsKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSBvcGVyYXRpb24gdHlwZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0VHlwZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSBvcGVyYXRpb24gdHlwZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0Um91dGVQYXJhbXMoKTogTGlzdDxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9yb3V0ZVBhcmFtcztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBzZXJ2ZXIgSUQgb2YgdGhpcyBvcGVyYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFNlcnZlcklkKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VydmVySWQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZXhlY3V0ZSBWZXJpZnlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gYm9vbGVhbiBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmIG1vZGU9PWVycm9yPC9yZXR1cm5zPlxyXG5cclxuICBwcml2YXRlIGFzeW5jIG9wZXJWZXJpZnkoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBsZXQgaXNFcnJvcjogYm9vbGVhbiA9ICh0aGlzLl9tb2RlID09PSBDb25zdEludGVyZmFjZS5GTFdfVkVSSUZZX01PREVfRVJST1IpO1xyXG5cclxuICAgIGxldCB0ZXh0VG9EaXNwbGF5OiBzdHJpbmcgPSB0aGlzLl9leHAgPT09IG51bGwgPyB0aGlzLl90ZXh0IDogYXdhaXQgdGhpcy5fZXhwLmV2YWx1YXRlV2l0aFJlc3VsdFR5cGVBbmRMZW5ndGgoU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFLCAyNTUpO1xyXG5cclxuICAgIGxldCB0aXRsZVRvRGlzcGxheTogc3RyaW5nID0gdGhpcy5fdGl0bGVFeHAgPT09IG51bGwgPyB0aGlzLl90aXRsZSA6IGF3YWl0IHRoaXMuX3RpdGxlRXhwLmV2YWx1YXRlV2l0aFJlc3VsdFR5cGVBbmRMZW5ndGgoU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFLCAyNTUpO1xyXG5cclxuICAgIHRleHRUb0Rpc3BsYXkgPSB0ZXh0VG9EaXNwbGF5ID09PSBudWxsID8gXCJcIiA6IFN0clV0aWwucnRyaW0odGV4dFRvRGlzcGxheSk7XHJcbiAgICB0aXRsZVRvRGlzcGxheSA9IHRpdGxlVG9EaXNwbGF5ID09PSBudWxsID8gXCJcIiA6IFN0clV0aWwucnRyaW0odGl0bGVUb0Rpc3BsYXkpO1xyXG5cclxuICAgIC8vIEluT3JkZXIgdG8ga2VlcCB0aGUgYmVoYXZpb3Igc2FtZSBhcyBpbiBPbmxpbmUsIFZlcmlmeSBPcGVyYXRpb24gV2FybmluZyBtZXNzYWdlcyB3aWxsIGJlIHdyaXR0ZW5cclxuICAgIC8vIGFzIEVycm9yIG1lc3NhZ2VzIGluIENsaWVudCBsb2cgKFFDUiAjOTE1MTIyKVxyXG4gICAgaWYgKHRoaXMuX2VyckxvZ0FwcGVuZCkge1xyXG4gICAgICBsZXQgcHJnRGVzY3JpcHRpb24gPSAoPFRhc2s+IHRoaXMuX3Rhc2suR2V0Q29udGV4dFRhc2soKSkuR2V0Q29tcHV0ZWRQcm9wZXJ0eShQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9OQU1FKS5HZXRDb21wdXRlZFZhbHVlKCk7XHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyh0ZXh0VG9EaXNwbGF5ICsgXCIsIHByb2dyYW0gOiBcIiArIHByZ0Rlc2NyaXB0aW9uKTtcclxuICAgIH1cclxuICAgIC8vIFN0YXR1cyBsaW5lXHJcbiAgICBpZiAodGhpcy5fZGlzcGxheSA9PT0gQ29uc3RJbnRlcmZhY2UuRElTUExBWV9TVEFUVVMpIHtcclxuICAgICAgLy8gQmxhbmsgTWVzc2FnZSB3aWxsIG5vdCBiZSBzaG93biwgc2FtZSBhcyBpbiBPbmxpbmVcclxuICAgICAgaWYgKCFOU3RyaW5nLklzTnVsbE9yRW1wdHkodGV4dFRvRGlzcGxheSkpIHtcclxuXHJcbiAgICAgICAgRmxvd01vbml0b3JRdWV1ZS5JbnN0YW5jZS5hZGRGbG93VmVyaWZ5SW5mbyh0ZXh0VG9EaXNwbGF5LCB0aGlzLl90YXNrLkdldFRhc2tEZXRhaWxzKCkpO1xyXG4gICAgICAgIC8vIFByb2R1Y3QgIzE3OCwgVG9waWMgIzYxOiBiZWVwIG9uIHRoZSBjbGllbnQgc2lkZSBvbmx5IHVwb24gdXNlciBlcnJvcnMgKGUuZy4gZHVwbGljYXRlIHJlY29yZCksXHJcbiAgICAgICAgLy8gb3RoZXJ3aXNlIG9ubHkgaWYgc3RhcnRlZCBmcm9tIHRoZSBzdHVkaW8gKEY3KVxyXG4gICAgICAgICg8VGFzaz4gdGhpcy5fdGFzay5HZXRDb250ZXh0VGFzaygpKS5Xcml0ZVRvTWVzc2FnZVBhbmUodGV4dFRvRGlzcGxheSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIE1lc3NhZ2UgQm94XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gQmxhbmsgTWVzc2FnZSB3aWxsIG5vdCBiZSBzaG93biwgc2FtZSBhcyBpbiBPbmxpbmVcclxuICAgICAgaWYgKCFOU3RyaW5nLklzTnVsbE9yRW1wdHkodGV4dFRvRGlzcGxheSkpIHtcclxuICAgICAgICAvLyBtbHMgdHJhbnNsYXRpb24gd2hlbiBkaXNwbGF5aW5nIHRvIGJveC4gZm9yIHN0YXR1cyB0aGUgcmFucyBpcyBpIHRoZSBjb250cm9sIHByb3BlcnR5LlxyXG4gICAgICAgIGxldCBtbHNUcmFuc1RleHRUb0Rpc3BsYXk6IHN0cmluZyA9IExhbmd1YWdlRGF0YS5JbnN0YW5jZS50cmFuc2xhdGUodGV4dFRvRGlzcGxheSk7XHJcbiAgICAgICAgbGV0IG1sc1RyYW5zVGl0bGVUb0Rpc3BsYXk6IHN0cmluZyA9IExhbmd1YWdlRGF0YS5JbnN0YW5jZS50cmFuc2xhdGUodGl0bGVUb0Rpc3BsYXkpO1xyXG5cclxuXHJcbiAgICAgICAgbGV0IHZlcmlmeU1vZGU6IG51bWJlciA9IE9wZXJhdGlvbi5nZXRCdXR0b25zKHRoaXMuX2J1dHRvbnMpO1xyXG4gICAgICAgIHZlcmlmeU1vZGUgPSB2ZXJpZnlNb2RlIHx8IE9wZXJhdGlvbi5nZXRJbWFnZSh0aGlzLl9pbWFnZSk7XHJcbiAgICAgICAgdmVyaWZ5TW9kZSA9IHZlcmlmeU1vZGUgO1xyXG5cclxuICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0pQTigpKSB7XHJcbiAgICAgICAgICBsZXQgZGVsaW1Qb3M6IG51bWJlciA9IG1sc1RyYW5zVGV4dFRvRGlzcGxheS5pbmRleE9mKCd8Jyk7XHJcbiAgICAgICAgICBpZiAoMCA8PSBkZWxpbVBvcyAmJiBkZWxpbVBvcyA8IG1sc1RyYW5zVGV4dFRvRGlzcGxheS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbWxzVHJhbnNUaXRsZVRvRGlzcGxheSA9IG1sc1RyYW5zVGV4dFRvRGlzcGxheS5zdWJzdHIoZGVsaW1Qb3MgKyAxKTtcclxuICAgICAgICAgICAgbWxzVHJhbnNUZXh0VG9EaXNwbGF5ID0gbWxzVHJhbnNUZXh0VG9EaXNwbGF5LnN1YnN0cigwLCBkZWxpbVBvcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbWdGb3JtOiBNZ0Zvcm0gPSBudWxsO1xyXG4gICAgICAgIC8vIGdldCB0aGUgb2JqZWN0IGZvciB3aGljaCB0aGUgbWVzc2FnZWJveCB3aWxsIGJlIGRpc3BsYXllZFxyXG4gICAgICAgIGlmICghKDxUYXNrPiB0aGlzLl90YXNrLkdldENvbnRleHRUYXNrKCkpLmdldE1HRGF0YSgpLklzQWJvcnRpbmcpXHJcbiAgICAgICAgICBtZ0Zvcm0gPSA8TWdGb3JtPig8VGFzaz4gdGhpcy5fdGFzay5HZXRDb250ZXh0VGFzaygpKS5nZXRUb3BNb3N0Rm9ybSgpO1xyXG5cclxuICAgICAgICAvLyBpZiB0aGUgZm9ybSBvZiB0aGUgY3VycmVudCB0YXNrIGlzIG51bGwgKG1haW4gcHJvZ3JhbSkgdGhlbiB1c2UgdGhlIGZvcm1cclxuICAgICAgICAvLyBvZiBsYXN0IGZvY3VzZWQgdGFza1xyXG4gICAgICAgIGlmIChtZ0Zvcm0gPT0gbnVsbCAmJiBMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0TGFzdEZvY3VzZWRUYXNrKCkgIT0gbnVsbClcclxuICAgICAgICAgIG1nRm9ybSA9IDxNZ0Zvcm0+TGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldExhc3RGb2N1c2VkVGFzaygpLmdldFRvcE1vc3RGb3JtKCk7XHJcbiAgICAgICAgaWYgKG1nRm9ybSAhPSBudWxsKSB7XHJcbiAgICAgICAgICBtZ0Zvcm0uUmVmcmVzaFVJKCk7XHJcbiAgICAgICAgICBDb21tYW5kcy5pbnZva2UoKTtcclxuICAgICAgICAgIGF3YWl0IFRocmVhZC5TbGVlcCgxMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCByZXR1cm5WYWx1ZTogbnVtYmVyID0gYXdhaXQgR1VJTWFuYWdlci5JbnN0YW5jZS5NZXNzYWdlQm94KG1sc1RyYW5zVGl0bGVUb0Rpc3BsYXksIG1sc1RyYW5zVGV4dFRvRGlzcGxheSwgdmVyaWZ5TW9kZSk7XHJcbiAgICAgICAgYXdhaXQgT3BlcmF0aW9uLnNldG9wZXJWZXJpZnlSZXR1cm5WYWx1ZShyZXR1cm5WYWx1ZSwgdGhpcy5fcmV0dXJuVmFsKTtcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXNFcnJvcjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIGNvZGUgYXNzaWduZWQgdG8gY29ycmVzcG9uZGluZyBidXR0b25zSURcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldEJ1dHRvbnMoYnV0dG9uc0lEOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgbGV0IHRtcGJ1dHRvbnM6IG51bWJlciA9IDA7XHJcblxyXG4gICAgc3dpdGNoIChidXR0b25zSUQpIHtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5CVVRUT05TX09LOlxyXG4gICAgICAgIHRtcGJ1dHRvbnMgPSBTdHlsZXMuTVNHQk9YX0JVVFRPTl9PSztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5CVVRUT05TX09LX0NBTkNFTDpcclxuICAgICAgICB0bXBidXR0b25zID0gU3R5bGVzLk1TR0JPWF9CVVRUT05fT0tfQ0FOQ0VMO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkJVVFRPTlNfQUJPUlRfUkVUUllfSUdOT1JFOlxyXG4gICAgICAgIHRtcGJ1dHRvbnMgPSBTdHlsZXMuTVNHQk9YX0JVVFRPTl9BQk9SVF9SRVRSWV9JR05PUkU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuQlVUVE9OU19ZRVNfTk9fQ0FOQ0VMOlxyXG4gICAgICAgIHRtcGJ1dHRvbnMgPSBTdHlsZXMuTVNHQk9YX0JVVFRPTl9ZRVNfTk9fQ0FOQ0VMO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkJVVFRPTlNfWUVTX05POlxyXG4gICAgICAgIHRtcGJ1dHRvbnMgPSBTdHlsZXMuTVNHQk9YX0JVVFRPTl9ZRVNfTk87XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuQlVUVE9OU19SRVRSWV9DQU5DRUw6XHJcbiAgICAgICAgdG1wYnV0dG9ucyA9IFN0eWxlcy5NU0dCT1hfQlVUVE9OX1JFVFJZX0NBTkNFTDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiB0bXBidXR0b25zO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgY29kZSBhc3NpZ25lZCB0byBjb3JyZXNwb25kaW5nIGltYWdlSURcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0SW1hZ2UoaW1hZ2VJRDogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGxldCB0bXBJbWFnZTogbnVtYmVyID0gMDtcclxuICAgIHN3aXRjaCAoaW1hZ2VJRCkge1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklNQUdFX0VYQ0xBTUFUSU9OOlxyXG4gICAgICAgIHRtcEltYWdlID0gU3R5bGVzLk1TR0JPWF9JQ09OX0VYQ0xBTUFUSU9OO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklNQUdFX0NSSVRJQ0FMOlxyXG4gICAgICAgIHRtcEltYWdlID0gU3R5bGVzLk1TR0JPWF9JQ09OX0VSUk9SO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklNQUdFX1FVRVNUSU9OOlxyXG4gICAgICAgIHRtcEltYWdlID0gU3R5bGVzLk1TR0JPWF9JQ09OX1FVRVNUSU9OO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklNQUdFX0lORk9STUFUSU9OOlxyXG4gICAgICAgIHRtcEltYWdlID0gU3R5bGVzLk1TR0JPWF9JQ09OX0lORk9STUFUSU9OO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRtcEltYWdlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBTZXQgVmVyaWZ5IE9wZXJhdGlvbiBSZXR1cm4gVmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBhc3luYyBzZXRvcGVyVmVyaWZ5UmV0dXJuVmFsdWUocmV0dXJuVmFsdWU6IG51bWJlciwgcmV0dXJuVmFsOiBGaWVsZCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHJldHVyblZhbCAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgcmV0VmFsdWVOdW06IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcblxyXG4gICAgICByZXRWYWx1ZU51bS5OVU1fNF9MT05HKHJldHVyblZhbHVlKTtcclxuICAgICAgbGV0IHJldHVyblZhbHVlU3RyOiBzdHJpbmcgPSByZXRWYWx1ZU51bS50b1hNTHJlY29yZCgpO1xyXG5cclxuICAgICAgYXdhaXQgcmV0dXJuVmFsLnNldFZhbHVlQW5kU3RhcnRSZWNvbXB1dGUocmV0dXJuVmFsdWVTdHIsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSk7XHJcbiAgICAgIGF3YWl0IHJldHVyblZhbC51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZXhlY3V0ZSBCbG9ja1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBib29sZWFuIHRydWVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgb3BlckJsb2NrKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZXhlY3V0ZSBlbHNlIC8gZWxzZWlmXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IGJvb2xlYW4gdHJ1ZVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBvcGVyRWxzZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGV4ZWN1dGUgRXZhbHVhdGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYXN5bmMgb3BlckV2YWx1YXRlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nID0gJ1xcMCc7XHJcblxyXG4gICAgaWYgKHRoaXMuX2ZpZWxkICE9PSBudWxsKSB7XHJcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMuX2V4cC5ldmFsdWF0ZVdpdGhSZXN1bHRUeXBlQW5kTGVuZ3RoKHRoaXMuX2ZpZWxkLmdldFR5cGUoKSwgdGhpcy5fZmllbGQuZ2V0U2l6ZSgpKTtcclxuICAgICAgYXdhaXQgdGhpcy5fZmllbGQuc2V0VmFsdWVBbmRTdGFydFJlY29tcHV0ZShyZXN1bHQsIHJlc3VsdCA9PT0gbnVsbCwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpO1xyXG4gICAgICBhd2FpdCB0aGlzLl9maWVsZC51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMuX2V4cC5ldmFsdWF0ZVdpdGhSZXN1bHRUeXBlQW5kTGVuZ3RoKFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTiwgMCk7XHJcbiAgICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBleGVjdXRlIFVwZGF0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBhc3luYyBvcGVyVXBkYXRlKG1wcmdDcmVhdG9yOiBUYXNrKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmcsIG9sZFZhbCwgbmV3VmFsLCBmaWVsZFZhbDtcclxuICAgIGxldCBzZXRSZWNvcmRVcGRhdGVkOiBib29sZWFuO1xyXG4gICAgbGV0IHJlY29tcHV0ZTogYm9vbGVhbjtcclxuICAgIGxldCBuT2xkOiBOVU1fVFlQRSwgbk5ldywgblJlc3VsdDtcclxuXHJcbiAgICBsZXQgZmxvd01vbml0b3I6IEZsb3dNb25pdG9yUXVldWUgPSBGbG93TW9uaXRvclF1ZXVlLkluc3RhbmNlO1xyXG4gICAgZmxvd01vbml0b3IuYWRkRmxvd09wZXJhdGlvblVwZGF0ZShGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1RBUlQsIHRoaXMuX3Rhc2suR2V0VGFza0RldGFpbHMoKSk7XHJcblxyXG4gICAgLy8gZm9yIG5vbi1tb2RpZmlhYmxlIGZpZWxkIGdvIHRvIHRoZSBzZXJ2ZXIsIGkuZS4gc2VydmVyIGNhbiBhYm9ydCB0aGUgdGFza1xyXG4gICAgaWYgKCF0aGlzLl9maWVsZC5EYk1vZGlmaWFibGUgJiYgKHRoaXMuX3Rhc2suZ2V0TW9kZSgpICE9PSBDb25zdGFudHMuVEFTS19NT0RFX0NSRUFURSkpIHtcclxuICAgICAgaWYgKCFhd2FpdCB0aGlzLkNhbk1vZGlmeShtcHJnQ3JlYXRvcikpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGZpZWxkVHlwZTogU3RvcmFnZUF0dHJpYnV0ZSA9IHRoaXMuX2ZpZWxkLmdldFR5cGUoKTtcclxuXHJcbiAgICAvLyBpZiB0aGlzIGlzIGFuIGluY3JlbWVudGFsIHVwZGF0ZVxyXG4gICAgaWYgKHRoaXMuX2luY3JlbWVudGFsKSB7XHJcbiAgICAgIGlmICghdGhpcy5fZmllbGQuSXNMaW5rRmllbGQpIHtcclxuICAgICAgICBmaWVsZFZhbCA9IHRoaXMuX2ZpZWxkLmdldFZhbHVlKHRydWUpO1xyXG4gICAgICAgIG5SZXN1bHQgPSAoZmllbGRWYWwgIT0gbnVsbFxyXG4gICAgICAgICAgPyBuZXcgTlVNX1RZUEUoZmllbGRWYWwpXHJcbiAgICAgICAgICA6IG51bGwpO1xyXG5cclxuICAgICAgICAvLyBzdWJ0cmFjdCB0aGUgb2xkIHZhbHVlIGlmIG5vdCBpbiBjcmVhdGUgbW9kZVxyXG4gICAgICAgIGlmICh0aGlzLl90YXNrLmdldE1vZGUoKSAhPT0gQ29uc3RhbnRzLlRBU0tfTU9ERV9DUkVBVEUpIHtcclxuXHJcbiAgICAgICAgICAvLyBpbmRpY2F0ZSB3ZSBhcmUgZXZhbHVhdGluZyB0aGUgb2xkIHZhbHVlIG9mIHRoZSBmaWVsZHNcclxuICAgICAgICAgIHRoaXMuX3Rhc2suc2V0RXZhbE9sZFZhbHVlcyh0cnVlKTtcclxuICAgICAgICAgIG9sZFZhbCA9ICh0aGlzLl9maWVsZC5pc051bGwoKVxyXG4gICAgICAgICAgICA/IHRoaXMuX2ZpZWxkLmdldE1hZ2ljRGVmYXVsdFZhbHVlKClcclxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLl9leHAuZXZhbHVhdGVXaXRoUmVzdWx0VHlwZUFuZExlbmd0aChmaWVsZFR5cGUsIHRoaXMuX2ZpZWxkLmdldFNpemUoKSkpO1xyXG4gICAgICAgICAgdGhpcy5fdGFzay5zZXRFdmFsT2xkVmFsdWVzKGZhbHNlKTtcclxuICAgICAgICAgIG5PbGQgPSBuZXcgTlVNX1RZUEUob2xkVmFsKTtcclxuICAgICAgICAgIG5SZXN1bHQgPSBOVU1fVFlQRS5zdWIoblJlc3VsdCwgbk9sZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fdGFzay5nZXRNb2RlKCkgIT09IENvbnN0YW50cy5UQVNLX01PREVfREVMRVRFKSB7XHJcbiAgICAgICAgICBuZXdWYWwgPSBhd2FpdCB0aGlzLl9leHAuZXZhbHVhdGVXaXRoUmVzdWx0VHlwZUFuZExlbmd0aChmaWVsZFR5cGUsIHRoaXMuX2ZpZWxkLmdldFNpemUoKSk7XHJcbiAgICAgICAgICBpZiAobmV3VmFsICE9IG51bGwpIHtcclxuICAgICAgICAgICAgbk5ldyA9IG5ldyBOVU1fVFlQRShuZXdWYWwpO1xyXG4gICAgICAgICAgICBuUmVzdWx0ID0gTlVNX1RZUEUuYWRkKG5SZXN1bHQsIG5OZXcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBuTmV3ID0gblJlc3VsdCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuUmVzdWx0ICE9IG51bGwpXHJcbiAgICAgICAgICByZXN1bHQgPSBuUmVzdWx0LnRvWE1McmVjb3JkKCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgcmVzdWx0ID0gdGhpcy5fZmllbGQuZ2V0TWFnaWNEZWZhdWx0VmFsdWUoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAvKiBJZiB0aGUgaW5jcmVtZW50YWwgdXBkYXRlIGlzIGZvciBhIGxpbmsgZmllbGQsIGdvIHRvIHNlcnZlci4gKi9cclxuICAgICAgICAvKiBUaGlzIGlzIHJlcXVpcmVkIHRvIGJlIGRvbmUgb24gc2VydmVyIGJlY2F1c2Ugb24gY2xpZW50LCB3ZSBkbyAqL1xyXG4gICAgICAgIC8qIG5vdCBoYXZlIHRoZSByZWZlcmVuY2UgdG8gdGhlIG9sZCBsaW5rIHJlY29yZC4gKi9cclxuICAgICAgICAvKiBBbmQgZm9yIGluY3JlbWVudGFsIHVwZGF0ZSwgd2UgbmVlZCB0byB3b3JrIG9uIDIgcmVjb3JkcyBhcyBpbiAqL1xyXG4gICAgICAgIC8qIGNhc2Ugb2YgUUNSIyA5MDA3MzguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgYXdhaXQgdGhpcy5vcGVyU2VydmVyKG1wcmdDcmVhdG9yKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGVuZCBvZiAgaW5jcmVtZW50YWwgdXBkYXRlXHJcbiAgICBlbHNlXHJcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMuX2V4cC5ldmFsdWF0ZVdpdGhSZXN1bHRUeXBlQW5kTGVuZ3RoKGZpZWxkVHlwZSwgdGhpcy5fZmllbGQuZ2V0U2l6ZSgpKTtcclxuXHJcbiAgICAvLyBRQ1IgNzQ2MDUzIGlmIHRoZSBjZWxscyB0eXBlIGRvbid0IG1hdGNoIHRocm93IGVycm9yXHJcbiAgICBpZiAoZmllbGRUeXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKVxyXG4gICAgICBpZiAocmVzdWx0ICE9IG51bGwpXHJcbiAgICAgICAgcmVzdWx0ID0gT3BlcmF0aW9uLm9wZXJVcGRhdGVWZWN0b3JzKHRoaXMuX2ZpZWxkLCByZXN1bHQpO1xyXG5cclxuICAgIHJlY29tcHV0ZSA9ICh0aGlzLl9maWVsZC5nZXRUYXNrKCkgPT09IHRoaXMuX3Rhc2spO1xyXG4gICAgc2V0UmVjb3JkVXBkYXRlZCA9ICghcmVjb21wdXRlIHx8ICF0aGlzLl91bmRvKTtcclxuICAgIGF3YWl0IHRoaXMuX2ZpZWxkLnNldFZhbHVlQW5kU3RhcnRSZWNvbXB1dGUocmVzdWx0LCByZXN1bHQgPT0gbnVsbCwgdHJ1ZSwgc2V0UmVjb3JkVXBkYXRlZCwgZmFsc2UpO1xyXG4gICAgaWYgKCF0aGlzLl91bmRvKVxyXG4gICAgICB0aGlzLl9maWVsZC5zZXRVcGRhdGVkKCk7XHJcblxyXG4gICAgLy8gUUNSICMgMjcwOTQ5IDogSWYgZmllbGQgaXMgdXBkYXRlZCB3aXRoIHVwZGF0ZSBvcGVyYXRpb24sIG1vZGlmaWVkIGZsYWcgc2hvdWxkIGJlIHNldCBpbiBvcmRlciB0byBjYXVzZSByZS1jb21wdXRlLlxyXG4gICAgdGhpcy5fZmllbGQuc2V0TW9kaWZpZWQoKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLl9maWVsZC51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICBmbG93TW9uaXRvci5hZGRGbG93T3BlcmF0aW9uVXBkYXRlKEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9FTkQsIHRoaXMuX3Rhc2suR2V0VGFza0RldGFpbHMoKSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGNhbiBhIG5vbi1tb2RpZmlhYmxlIGZpZWxkIGJlIG1vZGlmaWVkLiB0aGUgd2F5IHRvIGdldCB0aGUgYW5zd2VyIGRlcGVuZHMgb24gdGhlIGxvY2FsL3JlbW90ZSBkYXRhdmlld1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibXByZ0NyZWF0b3JcIj50cnVlIGlmIHRoZSBmaWVsZCBtYXkgYmUgbW9kaWZpZWQgYW5kIHRoZSBjYWxsaW5nIG1ldGhvZCBzaG91bGQgY29udGludWU8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBhc3luYyBDYW5Nb2RpZnkobXByZ0NyZWF0b3I6IFRhc2spOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCBleGVjT3BlckNvbW1hbmQ6IEV4ZWNPcGVyQ29tbWFuZCA9ICgodGhpcy5fY21kVG9TZXJ2ZXIgaW5zdGFuY2VvZiBFeGVjT3BlckNvbW1hbmQpID8gPEV4ZWNPcGVyQ29tbWFuZD50aGlzLl9jbWRUb1NlcnZlciA6IG51bGwpO1xyXG5cclxuICAgIGV4ZWNPcGVyQ29tbWFuZC5PcGVyYXRpb24gPSB0aGlzO1xyXG4gICAgZXhlY09wZXJDb21tYW5kLk1wcmdDcmVhdG9yID0gbXByZ0NyZWF0b3I7XHJcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuVGFzay5EYXRhdmlld01hbmFnZXIuRXhlY3V0ZSh0aGlzLl9jbWRUb1NlcnZlcikpLlN1Y2Nlc3M7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdXBkYXRlcyB0aGUgZGF0YSBjb250ZW50IG9mIGEgdmVjdG9yIHdpdGhvdXQgY2hhbmdpbmcgaXRzIGhlYWRlciBkYXRhXHJcbiAgLy8vICAgc3VjaCBhcyBjZWxsIHR5cGUgYW5kIHNpemUgLSBpcyB1c2VkIG9ubHkgaW4gdXBkYXRlIG9wZXJhdGlvbnMgYmV0d2VlbiB2ZWN0b3JzXHJcbiAgLy8vICAgZm9yIGV4YW1wbGUgdmVjdG9ycyBvZiBhbHBoYSB3aXRoIGNlbGwgc2l6ZSB0aGUgZGlmZmVyIG9yIHZlY3RvciBvZiBtZW1vIHdpdGggdmVjdG9yIG9mIGFscGhhXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZlY1wiPnRoZSBmbGF0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0aGUgbmV3IHZlY3RvclxyXG4gIC8vLyAgIGZpZWxkIHRoZSBmaWVsZCB0byBiZSB1cGRhdGVkXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBhIGZsYXQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHVwZGF0ZWQgdmVjdG9yIGFmdGVyIHRoZSBVcGRhdGU8L3JldHVybnM+XHJcbiAgc3RhdGljIG9wZXJVcGRhdGVWZWN0b3JzKGZpZWxkOiBGaWVsZCwgdmVjOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nID0gbnVsbDtcclxuICAgIGlmIChmaWVsZC5nZXRUeXBlKCkgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpIHtcclxuICAgICAgbGV0IGNlbGxzQXR0cjogU3RvcmFnZUF0dHJpYnV0ZSA9IFZlY3RvclR5cGUuZ2V0Q2VsbHNBdHRyKHZlYyk7XHJcbiAgICAgIGxldCBjZWxsc1R5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUgPSBmaWVsZC5nZXRDZWxsc1R5cGUoKTtcclxuXHJcbiAgICAgIGlmIChTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUaGVTYW1lVHlwZShjZWxsc0F0dHIsIGNlbGxzVHlwZSkpIHtcclxuICAgICAgICBsZXQgbmV3VmVjOiBWZWN0b3JUeXBlID0gbmV3IFZlY3RvclR5cGUodmVjKTtcclxuICAgICAgICBuZXdWZWMuYWRqdXN0VG9GaXQoZmllbGQpO1xyXG4gICAgICAgIHJldHVybiBuZXdWZWMudG9TdHJpbmcoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiaW4gb3BlclVwZGF0ZVZlY3RvcnMgXCIgKyBmaWVsZC5nZXROYW1lKCkgKyBcIiBpcyBub3Qgb2YgdHlwZSB2ZWN0b3JcIik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZXhlY3V0ZSBSYWlzZSBFdmVudFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtcHJnQ3JlYXRvclwiPmlmIHRoZSBvcGVyYXRpb24gYmVsb25ncyB0byBhIG1haW4gcHJvZ3JhbSBpdCBwb2ludHMgdG8gdGhlIHRhc2sgd2hpY2hcclxuICAvLy8gICBjYXVzZWQgdGhlIG1haW4gcHJvZ3JhbSB0byBiZWNvbWUgYWN0aXZlLiBPdGhlcndpc2UgaXQncyBmYWxzZS5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJldHVybmVkRnJvbVNlcnZlclwiPmluZGljYXRlcyB3aGV0aGVyIHdlIGp1c3QgY2FtZSBiYWNrIGZyb20gdGhlIHNlcnZlciB0byBiZSBwYXNzZWQgdG8gRXZlbnRzTWFuYWdlci5JbnN0YW5jZS5oYW5kbGVFdmVudCgpPC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIG9wZXJSYWlzZUV2ZW50KG1wcmdDcmVhdG9yOiBUYXNrLCByZXR1cm5lZEZyb21TZXJ2ZXI6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuXHJcbiAgICBsZXQgaW1tZWRpYXRlOiBib29sZWFuID0gYXdhaXQgdGhpcy5JbW1lZGlhdGUoKTtcclxuXHJcbiAgICAvLyBjcmVhdGUgYSBuZXcgcnVuIHRpbWUgZXZlbnQgdXNpbmcgdGhlIG9yaWdpbmFsIGFzIHRlbXBsYXRlXHJcbiAgICBsZXQgYVJ0RXZ0OiBSdW5UaW1lRXZlbnQgPSB0aGlzLl9ydEV2dC5yZXBsaWNhdGUoKTtcclxuICAgIGF3YWl0IGFSdEV2dC5zZXRQdWJsaWNOYW1lKCk7XHJcblxyXG4gICAgYVJ0RXZ0LnNldEltbWVkaWF0ZShpbW1lZGlhdGUpO1xyXG4gICAgYVJ0RXZ0LnNldE1haW5QcmdDcmVhdG9yKG51bGwpO1xyXG5cclxuICAgIGlmIChpbW1lZGlhdGUpIHtcclxuICAgICAgYVJ0RXZ0LnNldEN0cmwoPE1nQ29udHJvbD50aGlzLl90YXNrLmdldExhc3RQYXJrZWRDdHJsKCkpO1xyXG4gICAgICBhUnRFdnQuc2V0QXJnTGlzdCh0aGlzLl9hcmdMaXN0KTtcclxuXHJcbiAgICAgIGlmIChhUnRFdnQuZ2V0VGFzaygpLmlzTWFpblByb2coKSlcclxuICAgICAgICBhUnRFdnQuc2V0TWFpblByZ0NyZWF0b3IobXByZ0NyZWF0b3IpO1xyXG5cclxuICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuY2hlY2tBbmRTYXZlUm91dGVFdmVudElmQ3R4UmVtb3ZlZEZyb21TcnZyIChhUnRFdnQpO1xyXG4gICAgICBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5wdXNoRXhlY1N0YWNrKHRoaXMuX3Rhc2suZ2V0VGFza1RhZygpICwgdGhpcy5fZXZ0SGFuZGxlci5nZXRJZCgpLnRvU3RyaW5nKCkgLCB0aGlzLl9zZXJ2ZXJJZCk7XHJcbiAgICAgIGF3YWl0IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmhhbmRsZUV2ZW50KGFSdEV2dCwgcmV0dXJuZWRGcm9tU2VydmVyKTtcclxuICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIucG9wRXhlY1N0YWNrKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gc2VuZCBhcmd1bWVudHMgYnkgdmFsdWVcclxuICAgICAgbGV0IGFyZ2xpc3QgPSBuZXcgQXJndW1lbnRzTGlzdCgpO1xyXG4gICAgICBhd2FpdCBhcmdsaXN0LkluaXRpYWxpemUodGhpcy5fYXJnTGlzdCk7XHJcbiAgICAgIGFSdEV2dC5zZXRBcmdMaXN0KGFyZ2xpc3QpO1xyXG4gICAgICBhUnRFdnQuc2V0VGFzayhudWxsKTtcclxuICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuYWRkVG9UYWlsKGFSdEV2dCk7XHJcbiAgICAgIEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmNoZWNrQW5kU2F2ZVJvdXRlRXZlbnRJZkN0eFJlbW92ZWRGcm9tU3J2ciAoYVJ0RXZ0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGV4ZWN1dGUgYnJvd3NlciBDYWxsIG9wZXJhdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtcHJnQ3JlYXRvclwiPmlmIHRoZSBvcGVyYXRpb24gYmVsb25ncyB0byBhIG1haW4gcHJvZ3JhbSBpdCBwb2ludHMgdG8gdGhlIHRhc2sgd2hpY2hcclxuICAvLy8gICBjYXVzZWQgdGhlIG1haW4gcHJvZ3JhbSB0byBiZWNvbWUgYWN0aXZlLiBPdGhlcndpc2UgaXQncyBmYWxzZS5cclxuICAvLy8gPC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIG9wZXJDYWxsKG1wcmdDcmVhdG9yOiBUYXNrKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLm9wZXJTZXJ2ZXIobXByZ0NyZWF0b3IpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGV4ZWN1dGUgU2VydmVyIG9wZXJhdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtcHJnQ3JlYXRvclwiPmlmIHRoZSBvcGVyYXRpb24gYmVsb25ncyB0byBhIG1haW4gcHJvZ3JhbSBpdCBwb2ludHMgdG8gdGhlIHRhc2sgd2hpY2hcclxuICAvLy8gICBjYXVzZWQgdGhlIG1haW4gcHJvZ3JhbSB0byBiZWNvbWUgYWN0aXZlLiBPdGhlcndpc2UgaXQncyBmYWxzZS5cclxuICAvLy8gPC9wYXJhbT5cclxuICBhc3luYyBvcGVyU2VydmVyKG1wcmdDcmVhdG9yOiBUYXNrKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgY29tbWFuZDogRXhlY09wZXJDb21tYW5kID0gKCh0aGlzLl9jbWRUb1NlcnZlciBpbnN0YW5jZW9mIEV4ZWNPcGVyQ29tbWFuZCkgPyA8RXhlY09wZXJDb21tYW5kPnRoaXMuX2NtZFRvU2VydmVyIDogbnVsbCk7XHJcbiAgICBEZWJ1Zy5Bc3NlcnQoY29tbWFuZCAhPT0gbnVsbCk7XHJcbiAgICBpZiAodGhpcy5fdGFzay5pc01haW5Qcm9nKCkpXHJcbiAgICAgIGNvbW1hbmQuTXByZ0NyZWF0b3IgPSBtcHJnQ3JlYXRvcjtcclxuICAgIGVsc2VcclxuICAgICAgY29tbWFuZC5NcHJnQ3JlYXRvciA9IG51bGw7XHJcblxyXG4gICAgY29tbWFuZC5TZXRFeGVjdXRpb25TdGFjayhBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5nZXRFeGVjU3RhY2soKSk7XHJcbiAgICBjb21tYW5kLk9wZXJhdGlvbiA9IHRoaXM7XHJcbiAgICBhd2FpdCBBY2Nlc3NIZWxwZXIubWdEYXRhVGFibGUuZXhlY1JlcXVlc3RXaXRoU3ViZm9ybVJlY29yZEN5Y2xlKDxDb21tYW5kc1RhYmxlPnRoaXMuX3Rhc2suZ2V0TUdEYXRhKCkuQ21kc1RvU2VydmVyLCB0aGlzLl9jbWRUb1NlcnZlciwgbnVsbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIEJsb2NrIEVuZCBpbmRleFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0QmxvY2tFbmQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9ibG9ja0VuZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXRzIHRoZSB2YWx1ZSBvZiB0aGUgQmxvY2sgRW5kIGluZGV4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXRCbG9ja0VuZCh2YWw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fYmxvY2tFbmQgPSB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIEJsb2NrIENsb3NlIGluZGV4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRCbG9ja0Nsb3NlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmxvY2tDbG9zZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXRzIHRoZSB2YWx1ZSBvZiB0aGUgQmxvY2sgQ2xvc2UgaW5kZXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldEJsb2NrQ2xvc2UodmFsOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Jsb2NrQ2xvc2UgPSB2YWw7XHJcbiAgfVxyXG5cclxuICBnZXRUYXNrVGFnKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGFzay5nZXRUYXNrVGFnKCk7XHJcbiAgfVxyXG5cclxuICBnZXRIYW5kbGVySWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9ldnRIYW5kbGVyLmdldElkKCkudG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIGdldEV2ZW50SGFuZGxlcigpOiBFdmVudEhhbmRsZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2V2dEhhbmRsZXI7XHJcbiAgfVxyXG5cclxuICBnZXRFeGVjT25TZXJ2ZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZXhlY09uU2VydmVyO1xyXG4gIH1cclxuXHJcbiAgc2V0RXhlY09uU2VydmVyKHZhbCA6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX2V4ZWNPblNlcnZlciA9IHZhbDtcclxuICB9XHJcblxyXG4gIGdldEV4ZWNPbkNsaWVudCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9leGVjT25DbGllbnQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY2hlY2tzIGlmIHRoZSBvcGVyYXRpb24gY2FuIGJlIGV4ZWN1dGVkIG9yIG5vdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIGFzeW5jIGNhbkV4ZWN1dGUoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRDb25kVmFsKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImJ1ZmZlclwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwdWJsaWMgYXN5bmMgQWRkRmxvd0Rlc2NyaXB0aW9uKGJ1ZmZlcjogU3RyaW5nQnVpbGRlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgc3dpdGNoICh0aGlzLl90eXBlKSB7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9WRVJJRlk6XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChcIlZlcmlmeTogXCIpO1xyXG4gICAgICAgIGlmICh0aGlzLl9leHAgPT0gbnVsbClcclxuICAgICAgICAgIGJ1ZmZlci5BcHBlbmQodGhpcy5fdGV4dCk7XHJcbiAgICAgICAgZWxzZSBidWZmZXIuQXBwZW5kKFwiRXhwICNcIikuQXBwZW5kKHRoaXMuX2V4cC5nZXRJZCgpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19PUEVSX0JMT0NLOlxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQoXCJCbG9jayBJZlwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19PUEVSX0xPT1A6XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChcIkJsb2NrIExvb3BcIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9FTFNFOlxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQoXCJCbG9jayBFbHNlXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfRVZBTFVBVEU6XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChcIkV2YWx1YXRlIEV4cCAjXCIpLkFwcGVuZCh0aGlzLl9leHAuZ2V0SWQoKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9VUERBVEU6XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZEZvcm1hdChcIlVwZGF0ZSB7MH0gd2l0aCBFeHAgI3sxfVwiLCB0aGlzLl9maWVsZC5nZXRWYXJOYW1lKCksIHRoaXMuX2V4cC5nZXRJZCgpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19PUEVSX0VOREJMT0NLOlxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQoXCJFbmQgQmxvY2tcIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9VU1JfRVhJVDpcclxuICAgICAgICBidWZmZXIuQXBwZW5kKFwiSW52b2tlIE9TXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfUkFJU0VfRVZFTlQ6XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChcIlJhaXNlIEV2ZW50OlwiKTtcclxuICAgICAgICB0aGlzLl9ydEV2dC5BcHBlbmREZXNjcmlwdGlvbihidWZmZXIpO1xyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmRGb3JtYXQoXCIgKFdhaXQ9ezB9KVwiLCAoYXdhaXQgdGhpcy5JbW1lZGlhdGUoKSA/ICdZJyA6ICdOJykpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfU0VSVkVSOlxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQoXCJSdW4gc2VydmVyLXNpZGUgb3BlcmF0aW9uXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfQ0FMTDpcclxuICAgICAgICBidWZmZXIuQXBwZW5kKFwiQ2FsbCBwcm9ncmFtXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmRGb3JtYXQoXCI8PFVua25vd24gT3BlcmF0aW9uIENvZGUgezB9Pj5cIiwgdGhpcy5fdHlwZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldEFyZ0xpc3QoKTogQXJndW1lbnRzTGlzdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXJnTGlzdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0UmV0dXJuVmFsdWVGaWVsZCgpOiBGaWVsZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmllbGQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICByZXR1cm5zIHN1YmZvcm0gY29udHJvbCBuYW1lIGZvciBjYWxsIHdpdGggZGVzdGluYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0U3ViZm9ybUNvbnRyb2xOYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3ViZm9ybUN0cmxOYW1lO1xyXG4gIH1cclxuXHJcbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBOU3RyaW5nLkZvcm1hdChcIkV4ZWN1dGluZyBvcGVyYXRpb24gbnVtYmVyIHswfVwiLCB0aGlzLl9zZXJ2ZXJJZCArIDEpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgcmV0dXJucyBydW50aW1lRXZlbnQgZm9yIGEgcmFpc2UgZXZlbnQgb3BlcmF0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldFJ1bnRpbWVFdmVudCgpOiBSdW5UaW1lRXZlbnR7XHJcbiAgICByZXR1cm4gdGhpcy5fcnRFdnQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
735
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlcmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy9ydC9PcGVyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixLQUFLLEVBQ0wsS0FBSyxFQUVMLE9BQU8sRUFDUCxPQUFPLEVBRVAsTUFBTSxFQUNQLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUVMLFNBQVMsRUFDVCxNQUFNLEVBQ04sZ0JBQWdCLEVBQ2hCLHFCQUFxQixFQUNyQixPQUFPLEVBQ1AsZUFBZSxFQUNmLFlBQVksRUFDWixTQUFTLEVBQ1YsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixPQUFPLEVBQ0wsUUFBUSxFQUVSLFFBQVEsRUFDUixhQUFhLEVBQ2IsTUFBTSxFQUVOLCtCQUErQixFQUMvQixVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBS2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRTdFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFMUQsT0FBTyxF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QUFLLGNBQWMsQ0FBQyxZQUFZO2dCQUM5QixNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUM5QixNQUFNO1lBQ1I7Z0JBQ0UsTUFBTSxDQUFDLFlBQVksQ0FBQyxnQ0FBZ0MsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2xFLE1BQU07U0FDVDtJQUNILENBQUM7SUFNRCxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFNRCxtQkFBbUI7UUFDakIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFNRCxxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsZ0NBQWdDLEVBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBTUQsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFwcGxpY2F0aW9uRXhjZXB0aW9uLFxyXG4gIERlYnVnLFxyXG4gIEludDMyLFxyXG4gIExpc3QsXHJcbiAgTk51bWJlcixcclxuICBOU3RyaW5nLFxyXG4gIFN0cmluZ0J1aWxkZXIsXHJcbiAgVGhyZWFkXHJcbn0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5cclxuaW1wb3J0IHtcclxuICBDYWxsT3BlcmF0aW9uTW9kZSxcclxuICBDb25zdGFudHMsXHJcbiAgTG9nZ2VyLFxyXG4gIFN0b3JhZ2VBdHRyaWJ1dGUsXHJcbiAgU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLFxyXG4gIFN0clV0aWwsXHJcbiAgVXRpbFN0ckJ5dGVNb2RlLFxyXG4gIFhNTENvbnN0YW50cyxcclxuICBYbWxQYXJzZXJcclxufSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQ29tbWFuZHMsXHJcbiAgTWdDb250cm9sQmFzZSxcclxuICBOVU1fVFlQRSxcclxuICBQcm9wSW50ZXJmYWNlLFxyXG4gIFN0eWxlcyxcclxuICBUYXNrRGVmaW5pdGlvbklkLFxyXG4gIFRhc2tEZWZpbml0aW9uSWRUYWJsZVNheEhhbmRsZXIsXHJcbiAgVmVjdG9yVHlwZVxyXG59IGZyb20gJ0BtYWdpYy14cGEvZ3VpJztcclxuXHJcbmltcG9ydCB7IFllc05vRXhwIH0gZnJvbSAnLi4vZXhwL1llc05vRXhwJztcclxuaW1wb3J0IHsgQXJndW1lbnRzTGlzdCB9IGZyb20gJy4vQXJndW1lbnRzTGlzdCc7XHJcbmltcG9ydCB7IElDbGllbnRDb21tYW5kIH0gZnJvbSAnLi4vY29tbWFuZHMvSUNsaWVudENvbW1hbmQnO1xyXG5pbXBvcnQgeyBFeHByZXNzaW9uIH0gZnJvbSAnLi4vZXhwL0V4cHJlc3Npb24nO1xyXG5pbXBvcnQgeyBFdmVudEhhbmRsZXIgfSBmcm9tICcuLi9ldmVudC9FdmVudEhhbmRsZXInO1xyXG5pbXBvcnQgeyBGaWVsZCB9IGZyb20gJy4uL2RhdGEvRmllbGQnO1xyXG5pbXBvcnQgeyBSdW5UaW1lRXZlbnQgfSBmcm9tICcuLi9ldmVudC9SdW5UaW1lRXZlbnQnO1xyXG5pbXBvcnQgeyBNZ0Zvcm0gfSBmcm9tICcuLi9ndWkvTWdGb3JtJztcclxuaW1wb3J0IHsgQ29tbWFuZEZhY3RvcnkgfSBmcm9tICcuLi9jb21tYW5kcy9DbGllbnRUb1NlcnZlci9Db21tYW5kRmFjdG9yeSc7XHJcbmltcG9ydCB7IEZsb3dNb25pdG9yUXVldWUgfSBmcm9tICcuLi91dGlsL0Zsb3dNb25pdG9yUXVldWUnO1xyXG5pbXBvcnQgeyBFeGVjT3BlckNvbW1hbmQgfSBmcm9tICcuLi9jb21tYW5kcy9DbGllbnRUb1NlcnZlci9FeGVjT3BlckNvbW1hbmQnO1xyXG5pbXBvcnQgeyBNZ0NvbnRyb2wgfSBmcm9tICcuLi9ndWkvTWdDb250cm9sJztcclxuaW1wb3J0IHsgQ29uc3RJbnRlcmZhY2UgfSBmcm9tICcuLi9Db25zdEludGVyZmFjZSc7XHJcbmltcG9ydCB7IFRhc2sgfSBmcm9tICcuLi90YXNrcy9UYXNrJztcclxuaW1wb3J0IHsgRmxvd01vbml0b3JJbnRlcmZhY2UgfSBmcm9tICcuLi9GbG93TW9uaXRvckludGVyZmFjZSc7XHJcbmltcG9ydCB7IExhbmd1YWdlRGF0YSB9IGZyb20gJy4uL2Vudi9MYW5ndWFnZURhdGEnO1xyXG5pbXBvcnQgeyBMYXN0Rm9jdXNlZE1hbmFnZXIgfSBmcm9tICcuL0xhc3RGb2N1c2VkTWFuYWdlcic7XHJcbmltcG9ydCB7IENvbW1hbmRzVGFibGUgfSBmcm9tICcuLi9Db21tYW5kc1RhYmxlJztcclxuaW1wb3J0IHsgQWNjZXNzSGVscGVyLCBDbGVhckV2ZW50c09uU3RvcEV4ZWN1dGlvbiB9IGZyb20gJy4uL0FjY2Vzc0hlbHBlcic7XHJcbmltcG9ydCB7IEdVSU1hbmFnZXIgfSBmcm9tICcuLi9HVUlNYW5hZ2VyJztcclxuXHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGRhdGEgZm9yIDxvcGVyPiB0YWdcclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIE9wZXJhdGlvbiB7XHJcbiAgcHJpdmF0ZSBfY29uZEV4cDogWWVzTm9FeHAgPSBuZXcgWWVzTm9FeHAodHJ1ZSk7XHJcbiAgcHJpdmF0ZSBfcmV0YWluRm9jdXM6IFllc05vRXhwID0gbmV3IFllc05vRXhwKGZhbHNlKTtcclxuICBwcml2YXRlIF93YWl0RXhwOiBZZXNOb0V4cCA9IG5ldyBZZXNOb0V4cChmYWxzZSk7XHJcbiAgcHJpdmF0ZSBfc3luY0RhdGE6IFllc05vRXhwID0gbmV3IFllc05vRXhwKGZhbHNlKTsgLy8gY2FsbCBvcGVyYXRpb246IFN5bmMgZGF0YVxyXG4gIHByaXZhdGUgX2FyZ0xpc3Q6IEFyZ3VtZW50c0xpc3QgPSBudWxsO1xyXG4gIHByaXZhdGUgX2Jsb2NrQ2xvc2U6IG51bWJlciA9IDA7XHJcbiAgLy8gaW4gQmxvY2sgQmVnaW4vRWxzZS9Mb29wIG9wZXJhdGlvbjogdGhlIG9wZXJhdGlvbiBpZCB3aGljaCBpcyB0aGUgZW5kIG9mIHRoZSBleGVjdXRpb24gYmxvY2sgKGVsc2UvZW5kKVxyXG4gIHByaXZhdGUgX2Jsb2NrRW5kOiBudW1iZXIgPSAwOyAgLy8gaW4gQmxvY2sgQmVnaW4vRWxzZS9Mb29wIG9wZXJhdGlvbjogdGhlIEJsb2NrIEVuZCBvcGVyYXRpb24gdGhhdCBlbmRzIHRoZSBuZXN0aW5nIGxldmVsXHJcbiAgcHJpdmF0ZSBfYnV0dG9uczogc3RyaW5nID0gJ1xcMCc7IC8vIGJ1dHRvbnMgb2YgdmVyaWZ5IG9wclxyXG4gIHByaXZhdGUgX2NoZWNrQnlTZXJ2ZXI6IGJvb2xlYW4gPSBmYWxzZTsgLy8gZm9yIENhbGwgb3BlcmF0aW9uIHdpdGggc3ViZm9ybSBkZXN0aW5hdGlvblxyXG4gIHByaXZhdGUgX2NtZFRvU2VydmVyOiBJQ2xpZW50Q29tbWFuZCA9IG51bGw7IC8vIGRlZmF1bHQgYnV0dG9uIG9mIHZlcmlmeSBvcHJcclxuICBwcml2YXRlIF9kaXNwbGF5OiBzdHJpbmcgPSAnUyc7IC8vIFN0YXR1cyBsaW5lIHwgbWVzc2FnZSBCb3hcclxuICBwcml2YXRlIF9lcnJMb2dBcHBlbmQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gYXBwZW5kIHRvIGVycm9yIGxvZyBmb3IgdmVyaWZ5IG9wclxyXG4gIHByaXZhdGUgX2V2dEhhbmRsZXI6IEV2ZW50SGFuZGxlciA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfZXhlY09uU2VydmVyOiBib29sZWFuID0gZmFsc2U7IC8vIGZvciBibG9jayBpZiB3aGljaCBzaG91bGQgYmUgZXhlY3V0ZWQgb24gdGhlIHNlcnZlclxyXG4gIHByaXZhdGUgX2V4ZWNPbkNsaWVudDogYm9vbGVhbiA9IGZhbHNlOyAvLyBmb3IgYmxvY2sgaWYgd2hpY2ggbXVzdCBiZSBleGVjdXRlZCBvbiB0aGUgY2xpZW50XHJcbiAgcHJpdmF0ZSBfZXhwOiBFeHByZXNzaW9uID0gbnVsbDtcclxuICBwcml2YXRlIF9maWVsZDogRmllbGQgPSBudWxsOyAvLyByZWZlcmVuY2UgdG8gdGhlIGZpZWxkXHJcbiAgcHJpdmF0ZSBfaW1hZ2U6IHN0cmluZyA9ICdcXDAnOyAvLyBpbWFnZSBvZiB2ZXJpZnkgb3ByXHJcbiAgcHJpdmF0ZSBfaW5jcmVtZW50YWw6IGJvb2xlYW4gPSBmYWxzZTsgIC8vIElOQ1ItPnRydWUsIE5PUk1BTC0+ZmFsc2UgKGhvdyBhdHRyaWJ1dGUpXHJcbiAgcHJpdmF0ZSBfbW9kZTogc3RyaW5nID0gJ1xcMCc7IC8vIEVycm9yfFdhcm5pbmdcclxuICBwcml2YXRlIF9wdWJsaWNOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX3JldHVyblZhbDogRmllbGQgPSBudWxsOyAvLyByZXR1cm4gdmFsdWUgb2YgdmVyaWZ5IG9wclxyXG4gIHByaXZhdGUgX3J0RXZ0OiBSdW5UaW1lRXZlbnQgPSBudWxsOyAvLyBmb3IgUmFpc2UgZXZlbnRcclxuICBwcml2YXRlIF9zZXJ2ZXJJZDogbnVtYmVyID0gLTE7XHJcbiAgLy8gdGhlIGluZGV4IG9mIHRoaXMgb3BlcmF0aW9uIGluIHRoZSBzZXJ2ZXIncyBmbG93ICgwIG1lYW5zIGl0J3MgdGhlIGZpcnN0IG9wZXJhdGlvbiBpbiB0aGUgaGFuZGxlciwgMSBmb3IgdGhlIHNlY29uZCBldGMuKS4gVmFsaWQgZm9yOiBTZXJ2ZXJcclxuICBwcml2YXRlIGNhbGxlZFRhc2tEZWZpbml0aW9uSWQ6IFRhc2tEZWZpbml0aW9uSWQgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIF9zdWJmb3JtQ3RybE5hbWU6IHN0cmluZyA9IG51bGw7IC8vIGZvciBDYWxsIG9wZXJhdGlvbiB3aXRoIHN1YmZvcm0gZGVzdGluYXRpb25cclxuICBwcml2YXRlIF9zdWJ0eXBlOiBzdHJpbmcgPSAnXFwwJzsgLy8gSWZ8RWxzZXxMb29wXHJcbiAgcHJpdmF0ZSBfdGFzazogVGFzayA9IG51bGw7IC8vIHRoZSB0YXNrIG9mIHRoZSBvcGVyYXRpb25cclxuICBwcml2YXRlIF90ZXh0OiBzdHJpbmcgPSBudWxsOyAvLyB0aGUgdmVyaWZ5IG1lc3NhZ2VcclxuICBwcml2YXRlIF90aXRsZTogc3RyaW5nID0gbnVsbDsgLy8gdGl0bGUgb2YgdmVyaWZ5IG9wclxyXG4gIHByaXZhdGUgX3RpdGxlRXhwOiBFeHByZXNzaW9uID0gbnVsbDsgLy8gZXhwcmVzc2lvbiBhdHRhY2hlZCB0byB0aXRsZSBvZiB2ZXJpZnkgb3ByXHJcbiAgcHJpdmF0ZSBfdHlwZTogbnVtYmVyID0gMDsgLy8gb3BlcmF0aW9uIG51bWJlciAobGlrZSBpbiBNYWdpYylcclxuICBwcml2YXRlIF91bmRvOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNSb3V0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3JvdXRlclBhdGg6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfb3JpZ2luYWxSb3V0ZXJPdXRsZXROYW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX3JvdXRlUGFyYW1zOiBMaXN0PGFueT4gPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICB9XHJcblxyXG4gIGdldCBDYWxsZWRUYXNrRGVmaW5pdGlvbklkKCk6IFRhc2tEZWZpbml0aW9uSWQge1xyXG4gICAgcmV0dXJuIHRoaXMuY2FsbGVkVGFza0RlZmluaXRpb25JZDtcclxuICB9XHJcblxyXG4gIE9wZXJDYWxsTW9kZTogQ2FsbE9wZXJhdGlvbk1vZGUgPSAwO1xyXG5cclxuICBzZXQgVGFzayh2YWx1ZTogVGFzaykge1xyXG4gICAgdGhpcy5fdGFzayA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IFRhc2soKTogVGFzayB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGFzaztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgSW1tZWRpYXRlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3dhaXRFeHAuZ2V0VmFsKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHBhcnNlIGFuIG9wZXJhdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZmlsbERhdGEodGFza1JlZjogVGFzaywgZXZ0SGFuZGxlcjogRXZlbnRIYW5kbGVyLCBwYXJzZXI6IFhtbFBhcnNlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fdGFzayA9IHRhc2tSZWY7XHJcbiAgICB0aGlzLl9ldnRIYW5kbGVyID0gZXZ0SGFuZGxlcjtcclxuXHJcbiAgICB3aGlsZSAodGhpcy5pbml0SW5uZXJPYmplY3RzKHBhcnNlciwgcGFyc2VyLmdldE5leHRUYWcoKSwgdGFza1JlZikpIHtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBpbml0IGlubmVyIGF0dHJpYnV0ZXMgb2YgT3BlcmF0aW9uIG9iamVjdCBvbiBwYXJzaW5nIHRpbWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgaW5pdElubmVyT2JqZWN0cyhwYXJzZXI6IFhtbFBhcnNlciwgZm91bmRUYWdOYW1lOiBzdHJpbmcsIHRhc2tSZWY6IFRhc2spOiBib29sZWFuIHtcclxuICAgIGlmIChmb3VuZFRhZ05hbWUgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAoZm91bmRUYWdOYW1lID09PSBDb25zdEludGVyZmFjZS5NR19UQUdfRVZFTlQpIHtcclxuICAgICAgdGhpcy5fcnRFdnQgPSBuZXcgUnVuVGltZUV2ZW50KHRhc2tSZWYpO1xyXG4gICAgICB0aGlzLl9ydEV2dC5maWxsRGF0YShwYXJzZXIsIHRhc2tSZWYpO1xyXG4gICAgfSBlbHNlIGlmIChmb3VuZFRhZ05hbWUgPT09IENvbnN0SW50ZXJmYWNlLk1HX1RBR19PUEVSKSB7XHJcbiAgICAgIHRoaXMuZmlsbEF0dHJpYnV0ZXMocGFyc2VyLCB0YXNrUmVmKTtcclxuICAgIH0gZWxzZSBpZiAoZm91bmRUYWdOYW1lID09PSBcIi9cIiArIENvbnN0SW50ZXJmYWNlLk1HX1RBR19PUEVSKSB7XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgyRW5kT2ZUYWcoKTsgLy8gc2V0Q3VyckluZGV4KFhtbFBhcnNlci5pc05leHRUYWdDbG9zZWQoTUdfVEFHX0NPTlRST0wpKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmIChmb3VuZFRhZ05hbWUgPT09IFhNTENvbnN0YW50cy5NR19UQUdfVEFTS0RFRklOSVRJT05JRF9FTlRSWSkge1xyXG4gICAgICB0aGlzLkluaXRUYXNrRGVmaW5pdGlvbklEKHBhcnNlcik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJUaGVyZSBpcyBubyBzdWNoIHRhZyBpbiBPcGVyYXRpb24uIEluc2VydCBlbHNlIGlmIHRvIE9wZXJhdGlvbi5pbml0SW5uZXJPYmplY3RzIGZvciBcIiArIGZvdW5kVGFnTmFtZSk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIG9wZXJhdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0YXNrUmVmXCI+dGhlIHRhc2sgb2YgdGhlIGhhbmRsZXIgY3VycmVudDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBmaWxsQXR0cmlidXRlcyhwYXJzZXI6IFhtbFBhcnNlciwgdGFza1JlZjogVGFzayk6IHZvaWQge1xyXG4gICAgbGV0IHRva2Vuc1ZlY3RvcjogTGlzdDxzdHJpbmc+O1xyXG4gICAgbGV0IGVuZENvbnRleHQ6IG51bWJlciA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX0NMT1NFLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpO1xyXG5cclxuICAgIGlmIChlbmRDb250ZXh0ICE9PSAtMSAmJiBlbmRDb250ZXh0IDwgcGFyc2VyLmdldFhNTGRhdGEoKS5sZW5ndGgpIHtcclxuXHJcbiAgICAgIC8vIGxhc3QgcG9zaXRpb24gb2YgaXRzIHRhZ1xyXG4gICAgICBsZXQgdGFnOiBTdHJpbmcgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpO1xyXG4gICAgICBwYXJzZXIuYWRkMkN1cnJJbmRleCh0YWcuaW5kZXhPZihDb25zdEludGVyZmFjZS5NR19UQUdfT1BFUikgKyBDb25zdEludGVyZmFjZS5NR19UQUdfT1BFUi5sZW5ndGgpO1xyXG5cclxuICAgICAgdG9rZW5zVmVjdG9yID0gWG1sUGFyc2VyLmdldFRva2VucyhwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpLCBYTUxDb25zdGFudHMuWE1MX0FUVFJfREVMSU0pO1xyXG4gICAgICB0aGlzLmluaXRFbGVtZW50cyh0b2tlbnNWZWN0b3IsIHRhc2tSZWYpO1xyXG5cclxuICAgICAgLy8gaW5pdCBpbm5lciByZWZlcmVuY2U6XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoZW5kQ29udGV4dCArIFhNTENvbnN0YW50cy5UQUdfQ0xPU0UubGVuZ3RoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiaW4gQ29tbWFuZC5GaWxsRGF0YSgpIG91dCBvZiBzdHJpbmcgYm91bmRzXCIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIE1ha2UgaW5pdGlhbGl6YXRpb24gb2YgcHJpdmF0ZSBlbGVtZW50cyBieSBmb3VuZCB0b2tlbnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidG9rZW5zVmVjdG9yXCI+Zm91bmQgdG9rZW5zLCB3aGljaCBjb25zaXN0IGF0dHJpYnV0ZS92YWx1ZSBvZiBldmVyeSBmb3VuZFx0ZWxlbWVudDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0YXNrUmVmXCI+Y3VycmVudDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBpbml0RWxlbWVudHModG9rZW5zVmVjdG9yOiBMaXN0PFN0cmluZz4sIHRhc2tSZWY6IFRhc2spOiB2b2lkIHtcclxuICAgIGxldCBhdHRyaWJ1dGU6IFN0cmluZywgdmFsdWVTdHI7XHJcbiAgICBsZXQgZXhwSWQ6IG51bWJlcjtcclxuXHJcbiAgICBmb3IgKGxldCBqOiBudW1iZXIgPSAwOyBqIDwgdG9rZW5zVmVjdG9yLmxlbmd0aDsgaiArPSAyKSB7XHJcbiAgICAgIGF0dHJpYnV0ZSA9ICh0b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oaikpO1xyXG4gICAgICB2YWx1ZVN0ciA9ICh0b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oaiArIDEpKTtcclxuXHJcbiAgICAgIHN3aXRjaCAoYXR0cmlidXRlKSB7XHJcbiAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9UWVBFOlxyXG4gICAgICAgICAgdGhpcy5fdHlwZSA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0ZMRDpcclxuICAgICAgICAgIHRoaXMuX2ZpZWxkID0gT3BlcmF0aW9uLkluaXRGaWVsZCh2YWx1ZVN0ciwgdGhpcy5fdGFzayk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX0VYUDpcclxuICAgICAgICAgIGV4cElkID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICB0aGlzLl9leHAgPSB0YXNrUmVmLmdldEV4cEJ5SWQoZXhwSWQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RFWFQ6XHJcbiAgICAgICAgICB0aGlzLl90ZXh0ID0gWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9NT0RFOlxyXG4gICAgICAgICAgdGhpcy5fbW9kZSA9IHZhbHVlU3RyWzBdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NVQlRZUEU6XHJcbiAgICAgICAgICB0aGlzLl9zdWJ0eXBlID0gdmFsdWVTdHJbMF07XHJcbiAgICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9CTE9DSykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fc3VidHlwZSA9PT0gJ0UnKVxyXG4gICAgICAgICAgICAgIHRoaXMuX3R5cGUgPSBDb25zdEludGVyZmFjZS5NR19PUEVSX0VMU0U7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3N1YnR5cGUgPT09ICdMJylcclxuICAgICAgICAgICAgICB0aGlzLl90eXBlID0gQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9MT09QO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NMT1NFOlxyXG4gICAgICAgICAgdGhpcy5fYmxvY2tDbG9zZSA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0VORDpcclxuICAgICAgICAgIHRoaXMuX2Jsb2NrRW5kID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSE9XOlxyXG4gICAgICAgICAgdGhpcy5faW5jcmVtZW50YWwgPSAodmFsdWVTdHIgPT09IFwiSVwiKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9VTkRPOlxyXG4gICAgICAgICAgaWYgKHZhbHVlU3RyWzBdID09PSAnTicpXHJcbiAgICAgICAgICAgIHRoaXMuX3VuZG8gPSBmYWxzZTtcclxuICAgICAgICAgIGVsc2UgaWYgKHZhbHVlU3RyWzBdID09PSAnWScpXHJcbiAgICAgICAgICAgIHRoaXMuX3VuZG8gPSB0cnVlO1xyXG4gICAgICAgICAgZWxzZSBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJpbiBPcGVyYXRpb24uaW5pdEVsZW1lbnRzKCk6IE5vIHN1Y2ggdmFsdWUgdG8gdGhlIE1HX0FUVFJfVU5ETyBmb3IgXCIgKyB2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRElTUExBWTpcclxuICAgICAgICAgIHRoaXMuX2Rpc3BsYXkgPSB2YWx1ZVN0clswXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9XQUlUOlxyXG4gICAgICAgICAgdGhpcy5fd2FpdEV4cC5zZXRWYWwodGFza1JlZiwgdmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1JFVEFJTl9GT0NVUzpcclxuICAgICAgICAgIHRoaXMuX3JldGFpbkZvY3VzLnNldFZhbCh0YXNrUmVmLCB2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1lOQ19EQVRBOlxyXG4gICAgICAgICAgdGhpcy5fc3luY0RhdGEuc2V0VmFsKHRhc2tSZWYsIHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TSE9XOlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NORDpcclxuICAgICAgICAgIHRoaXMuX2NvbmRFeHAuc2V0VmFsKHRhc2tSZWYsIHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9BUkdMSVNUOlxyXG4gICAgICAgICAgdGhpcy5fYXJnTGlzdCA9IG5ldyBBcmd1bWVudHNMaXN0KCk7XHJcbiAgICAgICAgICB0aGlzLl9hcmdMaXN0LmZpbGxMaXN0KHZhbHVlU3RyLCB0aGlzLl90YXNrKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9SRUZSRVNIT046XHJcbiAgICAgICAgICB0aGlzLl9hcmdMaXN0LlJlZnJlc2hPblN0cmluZyA9IHZhbHVlU3RyLlRyaW0oKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TRVJWRVJfSUQ6XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2ZXJJZCA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX09QRVJfQ0FMTE1PREU6XHJcbiAgICAgICAgICB0aGlzLk9wZXJDYWxsTW9kZSA9IDxDYWxsT3BlcmF0aW9uTW9kZT52YWx1ZVN0clswXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1VCRk9STV9DVFJMOlxyXG4gICAgICAgICAgdGhpcy5fc3ViZm9ybUN0cmxOYW1lID0gWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DSEVDS19CWV9TRVJWRVI6XHJcbiAgICAgICAgICB0aGlzLl9jaGVja0J5U2VydmVyID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1BVQkxJQzpcclxuICAgICAgICAgIHRoaXMuX3B1YmxpY05hbWUgPSB2YWx1ZVN0cjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9QUkdfREVTQ1JJUFRJT046XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ1BZX0dMQl9QUk1TOlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0VYRUNfT05fU0VSVkVSOlxyXG4gICAgICAgICAgdGhpcy5fZXhlY09uU2VydmVyID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0VYRUNfT05fQ0xJRU5UOlxyXG4gICAgICAgICAgdGhpcy5fZXhlY09uQ2xpZW50ID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RJVExFOlxyXG4gICAgICAgICAgdGhpcy5fdGl0bGUgPSBYbWxQYXJzZXIudW5lc2NhcGUodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RJVExFX0VYUDpcclxuICAgICAgICAgIGV4cElkID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICB0aGlzLl90aXRsZUV4cCA9IHRhc2tSZWYuZ2V0RXhwQnlJZChleHBJZCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSU1BR0U6XHJcbiAgICAgICAgICB0aGlzLl9pbWFnZSA9IHZhbHVlU3RyWzBdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0JVVFRPTlM6XHJcbiAgICAgICAgICB0aGlzLl9idXR0b25zID0gdmFsdWVTdHJbMF07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfUkVUVVJOX1ZBTDpcclxuICAgICAgICAgIHRoaXMuX3JldHVyblZhbCA9IE9wZXJhdGlvbi5Jbml0RmllbGQodmFsdWVTdHIsIHRoaXMuX3Rhc2spO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0VSUl9MT0dfQVBQRU5EOlxyXG4gICAgICAgICAgdGhpcy5fZXJyTG9nQXBwZW5kID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX09QRVJfTUVUSE9ETkFNRTpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9JU19HVUlfVEhSRUFEX0VYRUNVVElPTjpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9JU19ST1VURTpcclxuICAgICAgICAgIHRoaXMuX2lzUm91dGUgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX1JPVVRFUl9QQVRIOlxyXG4gICAgICAgICAgdGhpcy5fcm91dGVyUGF0aCA9IFhtbFBhcnNlci51bmVzY2FwZSh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiVGhlcmUgaXMgbm8gc3VjaCB0YWcgaW4gT3BlcmF0aW9uIGNsYXNzLiBJbnNlcnQgY2FzZSB0byBPcGVyYXRpb24uaW5pdEVsZW1lbnRzIGZvciBcIiArIGF0dHJpYnV0ZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX3NlcnZlcklkID4gLTEpXHJcbiAgICAgIHRoaXMuX2NtZFRvU2VydmVyID0gQ29tbWFuZEZhY3RvcnkuQ3JlYXRlRXhlY09wZXJDb21tYW5kKHRoaXMuX3Rhc2suZ2V0VGFza1RhZygpLCBcIlwiICsgdGhpcy5fZXZ0SGFuZGxlci5nZXRJZCgpLCB0aGlzLl9zZXJ2ZXJJZCwgSW50MzIuTWluVmFsdWUsIG51bGwpO1xyXG5cclxuICAgIGlmICh0aGlzLl9pc1JvdXRlKSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbmFsUm91dGVyT3V0bGV0TmFtZSA9IHRoaXMuX3N1YmZvcm1DdHJsTmFtZSAhPT0gbnVsbCA/IHRoaXMuX3N1YmZvcm1DdHJsTmFtZSA6IFwiXCI7XHJcblxyXG4gICAgICBpZiAodGhpcy5fc3ViZm9ybUN0cmxOYW1lID09IG51bGwpIHtcclxuICAgICAgICBsZXQgZGVmYXVsdFJvdXRlck91dGxldDogTWdDb250cm9sQmFzZSA9IHRoaXMuX3Rhc2suZ2V0Rm9ybSgpLkRlZmF1bHRSb3V0ZXJPdXRsZXQ7XHJcbiAgICAgICAgdGhpcy5fc3ViZm9ybUN0cmxOYW1lID0gZGVmYXVsdFJvdXRlck91dGxldCAhPT0gbnVsbCA/IGRlZmF1bHRSb3V0ZXJPdXRsZXQuTmFtZSA6IFwiXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInBhcnNlclwiPjwvcGFyYW0+XHJcbiAgSW5pdFRhc2tEZWZpbml0aW9uSUQocGFyc2VyOiBYbWxQYXJzZXIpOiB2b2lkIHtcclxuICAgIGxldCB4bWxCdWZmZXI6IHN0cmluZyA9IHBhcnNlci5SZWFkVG9FbmRPZkN1cnJlbnRFbGVtZW50KCk7XHJcbiAgICBsZXQgdGFza0RlZmluaXRpb25JZFRhYmxlU2F4SGFuZGxlcjogVGFza0RlZmluaXRpb25JZFRhYmxlU2F4SGFuZGxlciA9IG5ldyBUYXNrRGVmaW5pdGlvbklkVGFibGVTYXhIYW5kbGVyKHRoaXMuU2V0VGFza0RlZmluaXRpb25JZCk7XHJcbiAgICB0YXNrRGVmaW5pdGlvbklkVGFibGVTYXhIYW5kbGVyLnBhcnNlKHhtbEJ1ZmZlcik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGNhbGxiYWNrIGZvciB0aGUgc2F4IHBhcnNlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidGFza0RlZmluaXRpb25JZFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwieG1sSWRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRlZmF1bHRUYWdMaXN0XCI+PC9wYXJhbT5cclxuICBwcml2YXRlIFNldFRhc2tEZWZpbml0aW9uSWQodGFza0RlZmluaXRpb25JZDogVGFza0RlZmluaXRpb25JZCk6IHZvaWQge1xyXG4gICAgdGhpcy5jYWxsZWRUYXNrRGVmaW5pdGlvbklkID0gdGFza0RlZmluaXRpb25JZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBJbml0aWFsaXplIHRoZSBmaWVsZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWx1ZVN0clwiPmEgcmVmZXJlbmNlIHRvIHRoZSBmaWVsZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0YXNrXCI+PC9wYXJhbT5cclxuICBzdGF0aWMgSW5pdEZpZWxkKHZhbHVlU3RyOiBzdHJpbmcsIHRhc2s6IFRhc2spOiBGaWVsZCB7XHJcbiAgICBsZXQgVGFza0ZpZWxkOiBMaXN0PHN0cmluZz4gPSBYbWxQYXJzZXIuZ2V0VG9rZW5zKHZhbHVlU3RyLCAnLCcpLyonLCcqLztcclxuICAgIGlmIChUYXNrRmllbGQubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgIGxldCBwYXJlbnQ6IG51bWJlciA9IE5OdW1iZXIuUGFyc2UoVGFza0ZpZWxkLmdldF9JdGVtKDApKTtcclxuICAgICAgbGV0IGZsZElEOiBudW1iZXIgPSBOTnVtYmVyLlBhcnNlKFRhc2tGaWVsZC5nZXRfSXRlbSgxKSk7XHJcbiAgICAgIGxldCBmaWVsZDogRmllbGQgPSA8RmllbGQ+dGFzay5nZXRGaWVsZERlZihwYXJlbnQsIGZsZElEKTtcclxuICAgICAgcmV0dXJuIGZpZWxkO1xyXG4gICAgfVxyXG4gICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKE5TdHJpbmcuRm9ybWF0KFwiVW5rbm93biBmaWVsZDogJ3swfSdcIiwgdmFsdWVTdHIpKTtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGV4ZWN1dGUgdGhlIG9wZXJhdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtcHJnQ3JlYXRvclwiPnJlbGV2YW50IG9ubHkgd2hlbiB0aGUgb3BlcmF0aW9uIGJlbG9uZ3MgdG8gYSBtYWluIHByb2dyYW0uXHJcbiAgLy8vICAgSXQgaWRlbnRpZmllcyB0aGUgdGFzayB3aGljaCBjYXVzZWQgdGhpcyBtYWluIHByb2dyYW0gdG8gcGFydGljaXBhdGUgaW4gdGhlIHJ1bnRpbWVcclxuICAvLy8gICBmbG93IChpLmUuIHdoZW4gcnVubmluZyBhIHRhc2sgZnJvbSBhIGRpZmZlcmVudCBjb21wb25lbnQsIHdlIGluc3RhbnRpYXRlIGhpcyBtYWluIHByb2dyYW1cclxuICAvLy8gICByaWdodCBhYm92ZSBpdC5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxcIj50aGUgZm9jdXMgbmVlZCB0byBiZSByZXR1cm5lZCBhZnRlciB0aGUgVkVSSUZZIG9wZXJhdGlvbiBpbiBNZXNzYWdlIEJveCBuZWVkcyBvbmx5XHJcbiAgLy8vICAgYWxsIGFub3RoZXIgb3BlcmF0aW9ucyBjYW4gdXNlIG51bGxcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJldHVybmVkRnJvbVNlcnZlclwiPnRydWUgaWYgdGhlIHNlcnZlciByZXR1cm5lZCB0aGUgZXhlY3V0aW9uIHRvIHRoaXMgb3BlcmF0aW9uPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGJvb2xlYW4gZm9yIHZlcmlmeSBhbmQgYmxvY2sgb3BlcmF0aW9uczwvcmV0dXJucz5cclxuICBhc3luYyBleGVjdXRlKHJldHVybmVkRnJvbVNlcnZlcjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgbGV0IGxhc3RSdEV2ZW50OiBSdW5UaW1lRXZlbnQgPSBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5nZXRMYXN0UnRFdmVudCgpO1xyXG4gICAgbGV0IG1wcmdDcmVhdG9yOiBUYXNrID0gbnVsbDtcclxuICAgIGxldCBmbG93TW9uaXRvcjogRmxvd01vbml0b3JRdWV1ZSA9IEZsb3dNb25pdG9yUXVldWUuSW5zdGFuY2U7XHJcblxyXG4gICAgaWYgKGxhc3RSdEV2ZW50ICE9PSBudWxsKVxyXG4gICAgICBtcHJnQ3JlYXRvciA9IDxUYXNrPmxhc3RSdEV2ZW50LmdldE1haW5QcmdDcmVhdG9yKCk7XHJcblxyXG4gICAgaWYgKHJldHVybmVkRnJvbVNlcnZlciB8fFxyXG4gICAgICAoIXJldHVybmVkRnJvbVNlcnZlciAmJiAodGhpcy5fdHlwZSAhPT0gQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9TRVJWRVIgfHwgIXRoaXMuX2NvbmRFeHAuaXNTZXJ2ZXJFeHAoKSkpKSB7XHJcbiAgICAgIGlmICghIGF3YWl0IHRoaXMuY2FuRXhlY3V0ZSgpKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3R5cGUgIT09IENvbnN0SW50ZXJmYWNlLk1HX09QRVJfTE9PUClcclxuICAgICAgICAgIGF3YWl0IGZsb3dNb25pdG9yLmFkZEZsb3dGaWVsZE9wZXJhdGlvbih0aGlzLCBmYWxzZSwgdGhpcy5fdGFzay5HZXRUYXNrRGV0YWlscygpKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLl90eXBlICE9PSBDb25zdEludGVyZmFjZS5NR19PUEVSX0xPT1AgJiYgdGhpcy5fdHlwZSAhPT0gQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9FTkRCTE9DSylcclxuICAgIC8vIFdlIGNhbGwgYWRkRmxvd09wZXJhdGlvblNlbGVjdCBvbmx5IGF0IHRoZSBiZWdpbmluZyBhbmQgZW5kIG9mIHRoZSBsb29wIGF0IEV2ZW50SGFuZGxlcjo6ZXhlY3V0ZVxyXG4gICAgICBhd2FpdCBmbG93TW9uaXRvci5hZGRGbG93RmllbGRPcGVyYXRpb24odGhpcywgdHJ1ZSwgdGhpcy5fdGFzay5HZXRUYXNrRGV0YWlscygpKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuX3R5cGUpIHtcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfVkVSSUZZOlxyXG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMub3BlclZlcmlmeSgpO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9CTE9DSzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLm9wZXJCbG9jaygpO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9MT09QOlxyXG4gICAgICAgICAgaWYgKCF0aGlzLmdldEV4ZWNPblNlcnZlcigpKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVyQmxvY2soKTtcclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLm9wZXJTZXJ2ZXIobXByZ0NyZWF0b3IpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfRUxTRTpcclxuICAgICAgICAgIHJldHVybiB0aGlzLm9wZXJFbHNlKCk7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19PUEVSX0VWQUxVQVRFOlxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5vcGVyRXZhbHVhdGUoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9VUERBVEU6XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLm9wZXJVcGRhdGUobXByZ0NyZWF0b3IpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19PUEVSX1JBSVNFX0VWRU5UOlxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5vcGVyUmFpc2VFdmVudChtcHJnQ3JlYXRvciwgcmV0dXJuZWRGcm9tU2VydmVyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9TRVJWRVI6XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLm9wZXJTZXJ2ZXIobXByZ0NyZWF0b3IpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19PUEVSX0NBTEw6XHJcbiAgICAgICAgICBpZiAodGhpcy5fcHVibGljTmFtZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlckNhbGxQYXJhbGxlbCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAodGhpcy5fc3ViZm9ybUN0cmxOYW1lID09IG51bGwpXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMub3BlckNhbGwobXByZ0NyZWF0b3IpO1xyXG4gICAgICAgICAgLy8gU3ViZm9ybSBEZXN0aW5hdGlvbiBDYWxsIG9SIENhbGwgUm91dGVcclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgc3ViZm9ybVRhc2s6IFRhc2s7XHJcbiAgICAgICAgICAgIGxldCBpc0VuZFByb2c6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX2NoZWNrQnlTZXJ2ZXIpIHtcclxuICAgICAgICAgICAgICBpZiAoISh0aGlzLl9jbWRUb1NlcnZlciBpbnN0YW5jZW9mIEV4ZWNPcGVyQ29tbWFuZCkpXHJcbiAgICAgICAgICAgICAgICBEZWJ1Zy5Bc3NlcnQoZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgICBsZXQgY29tbWFuZDogRXhlY09wZXJDb21tYW5kID0gPEV4ZWNPcGVyQ29tbWFuZD50aGlzLl9jbWRUb1NlcnZlcjtcclxuICAgICAgICAgICAgICBjb21tYW5kLkNoZWNrT25seSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vcGVyQ2FsbChtcHJnQ3JlYXRvcik7XHJcbiAgICAgICAgICAgICAgY29tbWFuZC5DaGVja09ubHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBpZiAoQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuZ2V0TmV4dE9wZXJJZHgodGhpcywgdHJ1ZSkgPiAtMSlcclxuICAgICAgICAgICAgICAgIGlzRW5kUHJvZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc0VuZFByb2cpIHtcclxuICAgICAgICAgICAgICBsZXQgZGVzdFN1YkZvcm06IE1nQ29udHJvbCA9ICg8TWdGb3JtPnRoaXMuX3Rhc2suZ2V0Rm9ybSgpKS5nZXRTdWJGb3JtQ3RybEJ5TmFtZSh0aGlzLl9zdWJmb3JtQ3RybE5hbWUpO1xyXG5cclxuICAgICAgICAgICAgICAvLyBBIGNhbGwgcm91dGUgb3BlcmF0aW9uIG5lZWRzIGFuIG91dGxldC4gSWYgYSBtYXRjaGluZyBvdXRsZXQgaXMgbm90IGZvdW5kLCBDYWxsIHJvdXRlIGNhbm5vdCBleGVjdXRlLlxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9pc1JvdXRlICYmIChkZXN0U3ViRm9ybSA9PT0gbnVsbCB8fCAhZGVzdFN1YkZvcm0uSXNSb3V0ZXJPdXRsZXQoKSkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChkZXN0U3ViRm9ybSAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzUm91dGUpIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGNhblJvdXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBydEV2bnQgPSBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5nZXRMYXN0UnRFdmVudCgpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAocnRFdm50ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcm91dGVQYXJhbXMgPSBydEV2bnQuZ2V0Um91dGVQYXJhbUxpc3QoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChhd2FpdCBydEV2bnQuZ2V0QXJnTGlzdCgpLmdldEFyZygwKS5nZXRWYWx1ZShTdG9yYWdlQXR0cmlidXRlLkFMUEhBLCAwKSkudHJpbSgpID09PSB0aGlzLl9yb3V0ZXJQYXRoICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAoKHJ0RXZudC5nZXRBcmdMaXN0KCkuZ2V0QXJnKDEpLnNraXBBcmcoKSAmJiBkZXN0U3ViRm9ybSA9PT0gdGhpcy5fdGFzay5nZXRGb3JtKCkuRGVmYXVsdFJvdXRlck91dGxldCkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKCFydEV2bnQuZ2V0QXJnTGlzdCgpLmdldEFyZygxKS5za2lwQXJnKCkgJiYgKGF3YWl0IHJ0RXZudC5nZXRBcmdMaXN0KCkuZ2V0QXJnKDEpLmdldFZhbHVlKFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEsIDApKS50cmltKCkgPT09IHRoaXMuX29yaWdpbmFsUm91dGVyT3V0bGV0TmFtZSkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgY2FuUm91dGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNhblJvdXRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgc3ViZm9ybVRhc2sgPSA8VGFzaz5kZXN0U3ViRm9ybS5nZXRTdWJmb3JtVGFzaygpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzdWJmb3JtVGFzayAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCB0ZXJtaW5hdGVUYXNrR3JhY2VmdWxseSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBydEV2bnQgPSBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5nZXRMYXN0UnRFdmVudCgpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNSb3V0ZSAmJiBydEV2bnQgIT09IG51bGwgJiYgcnRFdm50LmlzR3VpVHJpZ2dlcmVkRXZlbnQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZVRhc2tHcmFjZWZ1bGx5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuc2V0U3RvcEV4ZWN1dGlvbih0cnVlLCBDbGVhckV2ZW50c09uU3RvcEV4ZWN1dGlvbi5OT05FKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoYXdhaXQgc3ViZm9ybVRhc2suZW5kVGFzayh0cnVlLCBmYWxzZSwgIXRlcm1pbmF0ZVRhc2tHcmFjZWZ1bGx5LCB0cnVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJlbnRUYXNrOiBUYXNrID0gPFRhc2s+ZGVzdFN1YkZvcm0uZ2V0Rm9ybSgpLmdldFRhc2soKTtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRUYXNrLlRhc2tTZXJ2aWNlLlJlbW92ZVJlY29tcHV0ZXMocGFyZW50VGFzayk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgdGFzayBmYWlsZWQgdG8gdGVybWluYXRlLCBkbyBubyBwcm9jZWVkIHRvIGNhbGwgdGhlIG5ldyB0YXNrLlxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKExhc3RGb2N1c2VkTWFuYWdlci5nZXRMYXN0Rm9jdXNlZENvbnRyb2woKSAhPSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAgIExhc3RGb2N1c2VkTWFuYWdlci5nZXRMYXN0Rm9jdXNlZENvbnRyb2woKS5pc0Rlc2NlbmRlbnRPZkNvbnRyb2woZGVzdFN1YkZvcm0pKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLl90YXNrLlJldGFpbkZvY3VzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuX3Rhc2suUmV0YWluRm9jdXMgPSBhd2FpdCB0aGlzLl9yZXRhaW5Gb2N1cy5nZXRWYWwoKTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMub3BlckNhbGwobXByZ0NyZWF0b3IpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gQ2FsbCBvcGVyYXRpb24gc2hvdWxkIHJldHVybiB3aGV0aGVyIGl0IGV4ZWN1dGVkIGEgQ2FsbCBSb3V0ZSBvciBub3QuXHJcbiAgICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBieSB0aGUgY2FsbGVyIGJlY2F1c2UsIGl0IGhhcyB0byBzdG9wIGV4ZWN1dGluZyBzdWJzZXF1ZW50XHJcbiAgICAgICAgICAvLyBvcGVyYXRpb25zIGluIGNhc2UgYSBjYWxsIHJvdXRlIGdldHMgZXhlY3V0ZWQuXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5faXNSb3V0ZTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiVGhlcmUgaXMgbm8gc3VjaCB0eXBlIG9mIG9wZXJhdGlvbiBcIiArIHRoaXMuX3R5cGUpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleCkge1xyXG4gICAgICB0aHJvdyBleDtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNhbGwgYSBwYXJhbGxlbCByaWNoLWNsaWVudCBwcm9ncmFtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIG9wZXJDYWxsUGFyYWxsZWwoKTogdm9pZCB7XHJcbiAgICBPcGVyYXRpb24uY2FsbFBhcmFsbGVsKCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY2FsbFBhcmFsbGVsKCk6IHZvaWQge1xyXG4gIC8vICAgaWYgKHRhc2suSXNPZmZsaW5lKSB7XHJcbiAgLy8gICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcIkNhbid0IHJ1biBhIHBhcmFsbGVsIHByb2dyYW0gZnJvbSBhbiBvZmZsaW5lIHRhc2tcIik7XHJcbiAgLy8gICAgIHJldHVybjtcclxuICAvLyAgIH1cclxuICAvL1xyXG4gIC8vICAgLy8gIFRoZSByaWNoLWNsaWVudCB3aWxsIHF1ZXJ5IHRoZSBydW50aW1lLWVuZ2luZSBmb3IgdGhlIHVwLXRvLWRhdGUgbGlzdCBvZiBnbG9iYWwgcGFyYW1zXHJcbiAgLy8gICAvLyAgb2YgdGhlIGN1cnJlbnQgY29udGV4dCBvbmx5IGlmIHRoZSBjYWxsRUQgKHBhcmFsbGVsKSBwcm9ncmFtIHJlcXVlc3RzIGNvcHlpbmcgb2YgZ2xvYmFsIHBhcmFtcyxcclxuICAvLyAgIC8vICB0aGUgY2FsbEVSIHByb2dyYW0gc2hvdWxkIHF1ZXJ5IHRoZW0gZnJvbSB0aGUgcnVudGltZS1lbmdpbmVcclxuICAvLyAgIGlmIChnbG9iYWxQYXJhbXNTaG91bGRCZUNvcGllZCkge1xyXG4gIC8vICAgICBsZXQgbWdEYXRhOiBNR0RhdGEgPSB0YXNrLmdldE1HRGF0YSgpO1xyXG4gIC8vICAgICBsZXQgY21kOiBJQ2xpZW50Q29tbWFuZCA9IENvbW1hbmRGYWN0b3J5LkNyZWF0ZVF1ZXJ5R2xvYmFsUGFyYW1zQ29tbWFuZCgpO1xyXG4gIC8vICAgICBtZ0RhdGEuQ21kc1RvU2VydmVyLkFkZChjbWQpO1xyXG4gIC8vICAgICBDb21tYW5kc1Byb2Nlc3Nvck1hbmFnZXIuR2V0Q29tbWFuZHNQcm9jZXNzb3IoKS5FeGVjdXRlKENvbW1hbmRzUHJvY2Vzc29yQmFzZV9TZW5kaW5nSW5zdHJ1Y3Rpb24uT05MWV9DT01NQU5EUyk7XHJcbiAgLy8gICB9XHJcbiAgLy8gICAvLyBjbG9uZSB0aGUgZXhlY3V0aW9uIHByb3BlcnRpZXMgb2YgdGhlIGN1cnJlbnQgY2xpZW50XHJcbiAgLy8gICBMb2dnZXIuaW5zdGFuY2UuV3JpdGVFcnJvclRvTG9nKFwiY2FsbFBhcmFsbGVsIGNhbGxlZFwiKTtcclxuICAvLyAgIGxldCBjYWxsZWRQcm9ncmFtUHJvcHM6IGFueSA9IENsaWVudE1hbmFnZXIuSW5zdGFuY2UuY29weUV4ZWN1dGlvblByb3BzKCk7XHJcbiAgLy8gICBTZXJ2ZXJDb25maWcuSW5zdGFuY2Uuc2V0R2xvYmFsUGFyYW1zKG51bGwpO1xyXG4gIC8vXHJcbiAgLy8gICAvLyBzZXQgdGhlIGNhbGxlZCBwcm9ncmFtJ3MgaW50ZXJuYWwgbmFtZVxyXG4gIC8vICAgY2FsbGVkUHJvZ3JhbVByb3BzLnNldF9JdGVtKENvbnN0SW50ZXJmYWNlLlJFUV9QUkdfTkFNRSwgcHVibGljTmFtZSk7XHJcbiAgLy9cclxuICAvLyAgIC8vIFNlcnZlciBzZW5kcyBwcmdEZXNjaXBydGlvbiBvbmx5IHdoZW4gUHVibGljTmFtZSBpcyBub3Qgc3BlY2lmaWVkLlxyXG4gIC8vICAgLy8gT3RoZXJ3aXNlIHNlcnZlciBzZW5kcyBhIGZpY3RpdmUgcHJnRGVzY3JpcHRpb24gbGlrZSA6IF9Qcm9ncmFtX0lkXzxJU04+LlxyXG4gIC8vICAgLy8gV2hlbiBwdWJsaWMgbmFtZSBpcyBzcGVjaWZpZWQgcHJnRGVzY3JpcHRpb24gaXMgbm90IHVzZWQgYW5kIGl0IHdpbGwgYmUgbnVsbC5cclxuICAvLyAgIGlmICghTlN0cmluZy5Jc051bGxPckVtcHR5KHByZ0Rlc2NyaXB0aW9uKSkge1xyXG4gIC8vICAgICBjYWxsZWRQcm9ncmFtUHJvcHMuc2V0X0l0ZW0oQ29uc3RJbnRlcmZhY2UuUkVRX1BSR19ERVNDUklQVElPTiwgcHJnRGVzY3JpcHRpb24pO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgY2FsbGVkUHJvZ3JhbVByb3BzLnNldF9JdGVtKENvbnN0SW50ZXJmYWNlLlBBUkFMTEVMX0VYRUNVVElPTiwgXCJZXCIpO1xyXG4gIC8vXHJcbiAgLy8gICAvLyBhcmd1bWVudHMgdG8gdGhlIHBhcmFsbGVsIHByb2dyYW1cclxuICAvLyAgIGlmIChhcmdMaXN0ICE9PSBudWxsKSB7XHJcbiAgLy8gICAgIGxldCBwcmdBcmdzOiBzdHJpbmcgPSBhcmdMaXN0LnRvVVJMKHRydWUpO1xyXG4gIC8vICAgICBjYWxsZWRQcm9ncmFtUHJvcHMuc2V0X0l0ZW0oQ29uc3RJbnRlcmZhY2UuUkVRX0FSR1MsIHByZ0FyZ3MpO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgbGV0IFhNTGRhdGE6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gIC8vICAgdHJ5IHtcclxuICAvLyAgICAgY2FsbGVkUHJvZ3JhbVByb3BzLnN0b3JlVG9YTUwoWE1MZGF0YSk7XHJcbiAgLy9cclxuICAvLyAgICAgLy8gSWYgZW5jb2Rpbmcgd2FzIGRpc2FibGVkLCBlbmFibGUgaXQgdG8gY3JlYXRlIHRoZSByaWdodCBjb21tYW5kIGxpbmUgZm9yIHRoZSBwYXJhbGxlbCBwcm9ncmFtXHJcbiAgLy8gICAgIGxldCBlbmNvZGluZ0VuYWJsZWQ6IGJvb2xlYW4gPSBIdHRwVXRpbGl0eS5FbmNvZGluZ0VuYWJsZWQ7XHJcbiAgLy8gICAgIGlmICghZW5jb2RpbmdFbmFibGVkKVxyXG4gIC8vICAgICAgIEh0dHBVdGlsaXR5LkVuY29kaW5nRW5hYmxlZCA9IHRydWU7XHJcbiAgLy9cclxuICAvLyAgICAgbGV0IHNwYXduaW5nQXJndW1lbnRzOiBzdHJpbmcgPSBIdHRwVXRpbGl0eS5VcmxFbmNvZGUoWE1MZGF0YS5Ub1N0cmluZygpLCBFbmNvZGluZy5VVEY4KTtcclxuICAvLyAgICAgaWYgKCFlbmNvZGluZ0VuYWJsZWQpXHJcbiAgLy8gICAgICAgSHR0cFV0aWxpdHkuRW5jb2RpbmdFbmFibGVkID0gZmFsc2U7XHJcbiAgLy9cclxuICAvLyAgICAgLy8gc3Bhd24gYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGFzc2VtYmx5IGluc2lkZSB0aGUgY3VycmVudCBwcm9jZXNzXHJcbiAgLy8gICAgIFByb2Nlc3MuU3RhcnRDdXJyZW50RXhlY3V0YWJsZShzcGF3bmluZ0FyZ3VtZW50cyk7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBjYXRjaCAoZXgpIHtcclxuICAvLyAgICAgaWYgKGV4IGluc3RhbmNlb2YgRXhjZXB0aW9uKSB7XHJcbiAgLy8gICAgICAgT3BlcmF0aW9uLmNhbGxPcHJTaG93RXJyb3IodGFzaywgZXgudG9TdHJpbmcoKSk7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgICAgZWxzZVxyXG4gIC8vICAgICAgIHRocm93IGV4O1xyXG4gIC8vICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIGNvbmRpdGlvbiB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRDb25kVmFsKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX2NvbmRFeHAuZ2V0VmFsKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSBvcGVyYXRpb24gdHlwZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0VHlwZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSBvcGVyYXRpb24gdHlwZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0Um91dGVQYXJhbXMoKTogTGlzdDxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9yb3V0ZVBhcmFtcztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBzZXJ2ZXIgSUQgb2YgdGhpcyBvcGVyYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFNlcnZlcklkKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VydmVySWQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZXhlY3V0ZSBWZXJpZnlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gYm9vbGVhbiBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmIG1vZGU9PWVycm9yPC9yZXR1cm5zPlxyXG5cclxuICBwcml2YXRlIGFzeW5jIG9wZXJWZXJpZnkoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBsZXQgaXNFcnJvcjogYm9vbGVhbiA9ICh0aGlzLl9tb2RlID09PSBDb25zdEludGVyZmFjZS5GTFdfVkVSSUZZX01PREVfRVJST1IpO1xyXG5cclxuICAgIGxldCB0ZXh0VG9EaXNwbGF5OiBzdHJpbmcgPSB0aGlzLl9leHAgPT09IG51bGwgPyB0aGlzLl90ZXh0IDogYXdhaXQgdGhpcy5fZXhwLmV2YWx1YXRlV2l0aFJlc3VsdFR5cGVBbmRMZW5ndGgoU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFLCAyNTUpO1xyXG5cclxuICAgIGxldCB0aXRsZVRvRGlzcGxheTogc3RyaW5nID0gdGhpcy5fdGl0bGVFeHAgPT09IG51bGwgPyB0aGlzLl90aXRsZSA6IGF3YWl0IHRoaXMuX3RpdGxlRXhwLmV2YWx1YXRlV2l0aFJlc3VsdFR5cGVBbmRMZW5ndGgoU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFLCAyNTUpO1xyXG5cclxuICAgIHRleHRUb0Rpc3BsYXkgPSB0ZXh0VG9EaXNwbGF5ID09PSBudWxsID8gXCJcIiA6IFN0clV0aWwucnRyaW0odGV4dFRvRGlzcGxheSk7XHJcbiAgICB0aXRsZVRvRGlzcGxheSA9IHRpdGxlVG9EaXNwbGF5ID09PSBudWxsID8gXCJcIiA6IFN0clV0aWwucnRyaW0odGl0bGVUb0Rpc3BsYXkpO1xyXG5cclxuICAgIC8vIEluT3JkZXIgdG8ga2VlcCB0aGUgYmVoYXZpb3Igc2FtZSBhcyBpbiBPbmxpbmUsIFZlcmlmeSBPcGVyYXRpb24gV2FybmluZyBtZXNzYWdlcyB3aWxsIGJlIHdyaXR0ZW5cclxuICAgIC8vIGFzIEVycm9yIG1lc3NhZ2VzIGluIENsaWVudCBsb2cgKFFDUiAjOTE1MTIyKVxyXG4gICAgaWYgKHRoaXMuX2VyckxvZ0FwcGVuZCkge1xyXG4gICAgICBsZXQgcHJnRGVzY3JpcHRpb24gPSAoPFRhc2s+IHRoaXMuX3Rhc2suR2V0Q29udGV4dFRhc2soKSkuR2V0Q29tcHV0ZWRQcm9wZXJ0eShQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9OQU1FKS5HZXRDb21wdXRlZFZhbHVlKCk7XHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyh0ZXh0VG9EaXNwbGF5ICsgXCIsIHByb2dyYW0gOiBcIiArIHByZ0Rlc2NyaXB0aW9uKTtcclxuICAgIH1cclxuICAgIC8vIFN0YXR1cyBsaW5lXHJcbiAgICBpZiAodGhpcy5fZGlzcGxheSA9PT0gQ29uc3RJbnRlcmZhY2UuRElTUExBWV9TVEFUVVMpIHtcclxuICAgICAgLy8gQmxhbmsgTWVzc2FnZSB3aWxsIG5vdCBiZSBzaG93biwgc2FtZSBhcyBpbiBPbmxpbmVcclxuICAgICAgaWYgKCFOU3RyaW5nLklzTnVsbE9yRW1wdHkodGV4dFRvRGlzcGxheSkpIHtcclxuXHJcbiAgICAgICAgRmxvd01vbml0b3JRdWV1ZS5JbnN0YW5jZS5hZGRGbG93VmVyaWZ5SW5mbyh0ZXh0VG9EaXNwbGF5LCB0aGlzLl90YXNrLkdldFRhc2tEZXRhaWxzKCkpO1xyXG4gICAgICAgIC8vIFByb2R1Y3QgIzE3OCwgVG9waWMgIzYxOiBiZWVwIG9uIHRoZSBjbGllbnQgc2lkZSBvbmx5IHVwb24gdXNlciBlcnJvcnMgKGUuZy4gZHVwbGljYXRlIHJlY29yZCksXHJcbiAgICAgICAgLy8gb3RoZXJ3aXNlIG9ubHkgaWYgc3RhcnRlZCBmcm9tIHRoZSBzdHVkaW8gKEY3KVxyXG4gICAgICAgICg8VGFzaz4gdGhpcy5fdGFzay5HZXRDb250ZXh0VGFzaygpKS5Xcml0ZVRvTWVzc2FnZVBhbmUodGV4dFRvRGlzcGxheSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIE1lc3NhZ2UgQm94XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gQmxhbmsgTWVzc2FnZSB3aWxsIG5vdCBiZSBzaG93biwgc2FtZSBhcyBpbiBPbmxpbmVcclxuICAgICAgaWYgKCFOU3RyaW5nLklzTnVsbE9yRW1wdHkodGV4dFRvRGlzcGxheSkpIHtcclxuICAgICAgICAvLyBtbHMgdHJhbnNsYXRpb24gd2hlbiBkaXNwbGF5aW5nIHRvIGJveC4gZm9yIHN0YXR1cyB0aGUgcmFucyBpcyBpIHRoZSBjb250cm9sIHByb3BlcnR5LlxyXG4gICAgICAgIGxldCBtbHNUcmFuc1RleHRUb0Rpc3BsYXk6IHN0cmluZyA9IExhbmd1YWdlRGF0YS5JbnN0YW5jZS50cmFuc2xhdGUodGV4dFRvRGlzcGxheSk7XHJcbiAgICAgICAgbGV0IG1sc1RyYW5zVGl0bGVUb0Rpc3BsYXk6IHN0cmluZyA9IExhbmd1YWdlRGF0YS5JbnN0YW5jZS50cmFuc2xhdGUodGl0bGVUb0Rpc3BsYXkpO1xyXG5cclxuXHJcbiAgICAgICAgbGV0IHZlcmlmeU1vZGU6IG51bWJlciA9IE9wZXJhdGlvbi5nZXRCdXR0b25zKHRoaXMuX2J1dHRvbnMpO1xyXG4gICAgICAgIHZlcmlmeU1vZGUgPSB2ZXJpZnlNb2RlIHx8IE9wZXJhdGlvbi5nZXRJbWFnZSh0aGlzLl9pbWFnZSk7XHJcbiAgICAgICAgdmVyaWZ5TW9kZSA9IHZlcmlmeU1vZGUgO1xyXG5cclxuICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0pQTigpKSB7XHJcbiAgICAgICAgICBsZXQgZGVsaW1Qb3M6IG51bWJlciA9IG1sc1RyYW5zVGV4dFRvRGlzcGxheS5pbmRleE9mKCd8Jyk7XHJcbiAgICAgICAgICBpZiAoMCA8PSBkZWxpbVBvcyAmJiBkZWxpbVBvcyA8IG1sc1RyYW5zVGV4dFRvRGlzcGxheS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbWxzVHJhbnNUaXRsZVRvRGlzcGxheSA9IG1sc1RyYW5zVGV4dFRvRGlzcGxheS5zdWJzdHIoZGVsaW1Qb3MgKyAxKTtcclxuICAgICAgICAgICAgbWxzVHJhbnNUZXh0VG9EaXNwbGF5ID0gbWxzVHJhbnNUZXh0VG9EaXNwbGF5LnN1YnN0cigwLCBkZWxpbVBvcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbWdGb3JtOiBNZ0Zvcm0gPSBudWxsO1xyXG4gICAgICAgIC8vIGdldCB0aGUgb2JqZWN0IGZvciB3aGljaCB0aGUgbWVzc2FnZWJveCB3aWxsIGJlIGRpc3BsYXllZFxyXG4gICAgICAgIGlmICghKDxUYXNrPiB0aGlzLl90YXNrLkdldENvbnRleHRUYXNrKCkpLmdldE1HRGF0YSgpLklzQWJvcnRpbmcpXHJcbiAgICAgICAgICBtZ0Zvcm0gPSA8TWdGb3JtPig8VGFzaz4gdGhpcy5fdGFzay5HZXRDb250ZXh0VGFzaygpKS5nZXRUb3BNb3N0Rm9ybSgpO1xyXG5cclxuICAgICAgICAvLyBpZiB0aGUgZm9ybSBvZiB0aGUgY3VycmVudCB0YXNrIGlzIG51bGwgKG1haW4gcHJvZ3JhbSkgdGhlbiB1c2UgdGhlIGZvcm1cclxuICAgICAgICAvLyBvZiBsYXN0IGZvY3VzZWQgdGFza1xyXG4gICAgICAgIGlmIChtZ0Zvcm0gPT0gbnVsbCAmJiBMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0TGFzdEZvY3VzZWRUYXNrKCkgIT0gbnVsbClcclxuICAgICAgICAgIG1nRm9ybSA9IDxNZ0Zvcm0+TGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldExhc3RGb2N1c2VkVGFzaygpLmdldFRvcE1vc3RGb3JtKCk7XHJcbiAgICAgICAgaWYgKG1nRm9ybSAhPSBudWxsKSB7XHJcbiAgICAgICAgICBtZ0Zvcm0uUmVmcmVzaFVJKCk7XHJcbiAgICAgICAgICBDb21tYW5kcy5pbnZva2UoKTtcclxuICAgICAgICAgIGF3YWl0IFRocmVhZC5TbGVlcCgxMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCByZXR1cm5WYWx1ZTogbnVtYmVyID0gYXdhaXQgR1VJTWFuYWdlci5JbnN0YW5jZS5NZXNzYWdlQm94KG1sc1RyYW5zVGl0bGVUb0Rpc3BsYXksIG1sc1RyYW5zVGV4dFRvRGlzcGxheSwgdmVyaWZ5TW9kZSk7XHJcbiAgICAgICAgYXdhaXQgT3BlcmF0aW9uLnNldG9wZXJWZXJpZnlSZXR1cm5WYWx1ZShyZXR1cm5WYWx1ZSwgdGhpcy5fcmV0dXJuVmFsKTtcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXNFcnJvcjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIGNvZGUgYXNzaWduZWQgdG8gY29ycmVzcG9uZGluZyBidXR0b25zSURcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldEJ1dHRvbnMoYnV0dG9uc0lEOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgbGV0IHRtcGJ1dHRvbnM6IG51bWJlciA9IDA7XHJcblxyXG4gICAgc3dpdGNoIChidXR0b25zSUQpIHtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5CVVRUT05TX09LOlxyXG4gICAgICAgIHRtcGJ1dHRvbnMgPSBTdHlsZXMuTVNHQk9YX0JVVFRPTl9PSztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5CVVRUT05TX09LX0NBTkNFTDpcclxuICAgICAgICB0bXBidXR0b25zID0gU3R5bGVzLk1TR0JPWF9CVVRUT05fT0tfQ0FOQ0VMO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkJVVFRPTlNfQUJPUlRfUkVUUllfSUdOT1JFOlxyXG4gICAgICAgIHRtcGJ1dHRvbnMgPSBTdHlsZXMuTVNHQk9YX0JVVFRPTl9BQk9SVF9SRVRSWV9JR05PUkU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuQlVUVE9OU19ZRVNfTk9fQ0FOQ0VMOlxyXG4gICAgICAgIHRtcGJ1dHRvbnMgPSBTdHlsZXMuTVNHQk9YX0JVVFRPTl9ZRVNfTk9fQ0FOQ0VMO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkJVVFRPTlNfWUVTX05POlxyXG4gICAgICAgIHRtcGJ1dHRvbnMgPSBTdHlsZXMuTVNHQk9YX0JVVFRPTl9ZRVNfTk87XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuQlVUVE9OU19SRVRSWV9DQU5DRUw6XHJcbiAgICAgICAgdG1wYnV0dG9ucyA9IFN0eWxlcy5NU0dCT1hfQlVUVE9OX1JFVFJZX0NBTkNFTDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiB0bXBidXR0b25zO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgY29kZSBhc3NpZ25lZCB0byBjb3JyZXNwb25kaW5nIGltYWdlSURcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0SW1hZ2UoaW1hZ2VJRDogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGxldCB0bXBJbWFnZTogbnVtYmVyID0gMDtcclxuICAgIHN3aXRjaCAoaW1hZ2VJRCkge1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklNQUdFX0VYQ0xBTUFUSU9OOlxyXG4gICAgICAgIHRtcEltYWdlID0gU3R5bGVzLk1TR0JPWF9JQ09OX0VYQ0xBTUFUSU9OO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklNQUdFX0NSSVRJQ0FMOlxyXG4gICAgICAgIHRtcEltYWdlID0gU3R5bGVzLk1TR0JPWF9JQ09OX0VSUk9SO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklNQUdFX1FVRVNUSU9OOlxyXG4gICAgICAgIHRtcEltYWdlID0gU3R5bGVzLk1TR0JPWF9JQ09OX1FVRVNUSU9OO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklNQUdFX0lORk9STUFUSU9OOlxyXG4gICAgICAgIHRtcEltYWdlID0gU3R5bGVzLk1TR0JPWF9JQ09OX0lORk9STUFUSU9OO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRtcEltYWdlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBTZXQgVmVyaWZ5IE9wZXJhdGlvbiBSZXR1cm4gVmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBhc3luYyBzZXRvcGVyVmVyaWZ5UmV0dXJuVmFsdWUocmV0dXJuVmFsdWU6IG51bWJlciwgcmV0dXJuVmFsOiBGaWVsZCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHJldHVyblZhbCAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgcmV0VmFsdWVOdW06IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcblxyXG4gICAgICByZXRWYWx1ZU51bS5OVU1fNF9MT05HKHJldHVyblZhbHVlKTtcclxuICAgICAgbGV0IHJldHVyblZhbHVlU3RyOiBzdHJpbmcgPSByZXRWYWx1ZU51bS50b1hNTHJlY29yZCgpO1xyXG5cclxuICAgICAgYXdhaXQgcmV0dXJuVmFsLnNldFZhbHVlQW5kU3RhcnRSZWNvbXB1dGUocmV0dXJuVmFsdWVTdHIsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSk7XHJcbiAgICAgIGF3YWl0IHJldHVyblZhbC51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZXhlY3V0ZSBCbG9ja1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBib29sZWFuIHRydWVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgb3BlckJsb2NrKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZXhlY3V0ZSBlbHNlIC8gZWxzZWlmXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IGJvb2xlYW4gdHJ1ZVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBvcGVyRWxzZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGV4ZWN1dGUgRXZhbHVhdGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYXN5bmMgb3BlckV2YWx1YXRlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nID0gJ1xcMCc7XHJcblxyXG4gICAgaWYgKHRoaXMuX2ZpZWxkICE9PSBudWxsKSB7XHJcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMuX2V4cC5ldmFsdWF0ZVdpdGhSZXN1bHRUeXBlQW5kTGVuZ3RoKHRoaXMuX2ZpZWxkLmdldFR5cGUoKSwgdGhpcy5fZmllbGQuZ2V0U2l6ZSgpKTtcclxuICAgICAgYXdhaXQgdGhpcy5fZmllbGQuc2V0VmFsdWVBbmRTdGFydFJlY29tcHV0ZShyZXN1bHQsIHJlc3VsdCA9PT0gbnVsbCwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpO1xyXG4gICAgICBhd2FpdCB0aGlzLl9maWVsZC51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMuX2V4cC5ldmFsdWF0ZVdpdGhSZXN1bHRUeXBlQW5kTGVuZ3RoKFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTiwgMCk7XHJcbiAgICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBleGVjdXRlIFVwZGF0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBhc3luYyBvcGVyVXBkYXRlKG1wcmdDcmVhdG9yOiBUYXNrKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmcsIG9sZFZhbCwgbmV3VmFsLCBmaWVsZFZhbDtcclxuICAgIGxldCBzZXRSZWNvcmRVcGRhdGVkOiBib29sZWFuO1xyXG4gICAgbGV0IHJlY29tcHV0ZTogYm9vbGVhbjtcclxuICAgIGxldCBuT2xkOiBOVU1fVFlQRSwgbk5ldywgblJlc3VsdDtcclxuXHJcbiAgICBsZXQgZmxvd01vbml0b3I6IEZsb3dNb25pdG9yUXVldWUgPSBGbG93TW9uaXRvclF1ZXVlLkluc3RhbmNlO1xyXG4gICAgZmxvd01vbml0b3IuYWRkRmxvd09wZXJhdGlvblVwZGF0ZShGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1RBUlQsIHRoaXMuX3Rhc2suR2V0VGFza0RldGFpbHMoKSk7XHJcblxyXG4gICAgLy8gZm9yIG5vbi1tb2RpZmlhYmxlIGZpZWxkIGdvIHRvIHRoZSBzZXJ2ZXIsIGkuZS4gc2VydmVyIGNhbiBhYm9ydCB0aGUgdGFza1xyXG4gICAgaWYgKCF0aGlzLl9maWVsZC5EYk1vZGlmaWFibGUgJiYgKHRoaXMuX3Rhc2suZ2V0TW9kZSgpICE9PSBDb25zdGFudHMuVEFTS19NT0RFX0NSRUFURSkpIHtcclxuICAgICAgaWYgKCFhd2FpdCB0aGlzLkNhbk1vZGlmeShtcHJnQ3JlYXRvcikpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGZpZWxkVHlwZTogU3RvcmFnZUF0dHJpYnV0ZSA9IHRoaXMuX2ZpZWxkLmdldFR5cGUoKTtcclxuXHJcbiAgICAvLyBpZiB0aGlzIGlzIGFuIGluY3JlbWVudGFsIHVwZGF0ZVxyXG4gICAgaWYgKHRoaXMuX2luY3JlbWVudGFsKSB7XHJcbiAgICAgIGlmICghdGhpcy5fZmllbGQuSXNMaW5rRmllbGQpIHtcclxuICAgICAgICBmaWVsZFZhbCA9IHRoaXMuX2ZpZWxkLmdldFZhbHVlKHRydWUpO1xyXG4gICAgICAgIG5SZXN1bHQgPSAoZmllbGRWYWwgIT0gbnVsbFxyXG4gICAgICAgICAgPyBuZXcgTlVNX1RZUEUoZmllbGRWYWwpXHJcbiAgICAgICAgICA6IG51bGwpO1xyXG5cclxuICAgICAgICAvLyBzdWJ0cmFjdCB0aGUgb2xkIHZhbHVlIGlmIG5vdCBpbiBjcmVhdGUgbW9kZVxyXG4gICAgICAgIGlmICh0aGlzLl90YXNrLmdldE1vZGUoKSAhPT0gQ29uc3RhbnRzLlRBU0tfTU9ERV9DUkVBVEUpIHtcclxuXHJcbiAgICAgICAgICAvLyBpbmRpY2F0ZSB3ZSBhcmUgZXZhbHVhdGluZyB0aGUgb2xkIHZhbHVlIG9mIHRoZSBmaWVsZHNcclxuICAgICAgICAgIHRoaXMuX3Rhc2suc2V0RXZhbE9sZFZhbHVlcyh0cnVlKTtcclxuICAgICAgICAgIG9sZFZhbCA9ICh0aGlzLl9maWVsZC5pc051bGwoKVxyXG4gICAgICAgICAgICA/IHRoaXMuX2ZpZWxkLmdldE1hZ2ljRGVmYXVsdFZhbHVlKClcclxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLl9leHAuZXZhbHVhdGVXaXRoUmVzdWx0VHlwZUFuZExlbmd0aChmaWVsZFR5cGUsIHRoaXMuX2ZpZWxkLmdldFNpemUoKSkpO1xyXG4gICAgICAgICAgdGhpcy5fdGFzay5zZXRFdmFsT2xkVmFsdWVzKGZhbHNlKTtcclxuICAgICAgICAgIG5PbGQgPSBuZXcgTlVNX1RZUEUob2xkVmFsKTtcclxuICAgICAgICAgIG5SZXN1bHQgPSBOVU1fVFlQRS5zdWIoblJlc3VsdCwgbk9sZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fdGFzay5nZXRNb2RlKCkgIT09IENvbnN0YW50cy5UQVNLX01PREVfREVMRVRFKSB7XHJcbiAgICAgICAgICBuZXdWYWwgPSBhd2FpdCB0aGlzLl9leHAuZXZhbHVhdGVXaXRoUmVzdWx0VHlwZUFuZExlbmd0aChmaWVsZFR5cGUsIHRoaXMuX2ZpZWxkLmdldFNpemUoKSk7XHJcbiAgICAgICAgICBpZiAobmV3VmFsICE9IG51bGwpIHtcclxuICAgICAgICAgICAgbk5ldyA9IG5ldyBOVU1fVFlQRShuZXdWYWwpO1xyXG4gICAgICAgICAgICBuUmVzdWx0ID0gTlVNX1RZUEUuYWRkKG5SZXN1bHQsIG5OZXcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBuTmV3ID0gblJlc3VsdCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuUmVzdWx0ICE9IG51bGwpXHJcbiAgICAgICAgICByZXN1bHQgPSBuUmVzdWx0LnRvWE1McmVjb3JkKCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgcmVzdWx0ID0gdGhpcy5fZmllbGQuZ2V0TWFnaWNEZWZhdWx0VmFsdWUoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAvKiBJZiB0aGUgaW5jcmVtZW50YWwgdXBkYXRlIGlzIGZvciBhIGxpbmsgZmllbGQsIGdvIHRvIHNlcnZlci4gKi9cclxuICAgICAgICAvKiBUaGlzIGlzIHJlcXVpcmVkIHRvIGJlIGRvbmUgb24gc2VydmVyIGJlY2F1c2Ugb24gY2xpZW50LCB3ZSBkbyAqL1xyXG4gICAgICAgIC8qIG5vdCBoYXZlIHRoZSByZWZlcmVuY2UgdG8gdGhlIG9sZCBsaW5rIHJlY29yZC4gKi9cclxuICAgICAgICAvKiBBbmQgZm9yIGluY3JlbWVudGFsIHVwZGF0ZSwgd2UgbmVlZCB0byB3b3JrIG9uIDIgcmVjb3JkcyBhcyBpbiAqL1xyXG4gICAgICAgIC8qIGNhc2Ugb2YgUUNSIyA5MDA3MzguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgYXdhaXQgdGhpcy5vcGVyU2VydmVyKG1wcmdDcmVhdG9yKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGVuZCBvZiAgaW5jcmVtZW50YWwgdXBkYXRlXHJcbiAgICBlbHNlXHJcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMuX2V4cC5ldmFsdWF0ZVdpdGhSZXN1bHRUeXBlQW5kTGVuZ3RoKGZpZWxkVHlwZSwgdGhpcy5fZmllbGQuZ2V0U2l6ZSgpKTtcclxuXHJcbiAgICAvLyBRQ1IgNzQ2MDUzIGlmIHRoZSBjZWxscyB0eXBlIGRvbid0IG1hdGNoIHRocm93IGVycm9yXHJcbiAgICBpZiAoZmllbGRUeXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKVxyXG4gICAgICBpZiAocmVzdWx0ICE9IG51bGwpXHJcbiAgICAgICAgcmVzdWx0ID0gT3BlcmF0aW9uLm9wZXJVcGRhdGVWZWN0b3JzKHRoaXMuX2ZpZWxkLCByZXN1bHQpO1xyXG5cclxuICAgIHJlY29tcHV0ZSA9ICh0aGlzLl9maWVsZC5nZXRUYXNrKCkgPT09IHRoaXMuX3Rhc2spO1xyXG4gICAgc2V0UmVjb3JkVXBkYXRlZCA9ICghcmVjb21wdXRlIHx8ICF0aGlzLl91bmRvKTtcclxuICAgIGF3YWl0IHRoaXMuX2ZpZWxkLnNldFZhbHVlQW5kU3RhcnRSZWNvbXB1dGUocmVzdWx0LCByZXN1bHQgPT0gbnVsbCwgdHJ1ZSwgc2V0UmVjb3JkVXBkYXRlZCwgZmFsc2UpO1xyXG4gICAgaWYgKCF0aGlzLl91bmRvKVxyXG4gICAgICB0aGlzLl9maWVsZC5zZXRVcGRhdGVkKCk7XHJcblxyXG4gICAgLy8gUUNSICMgMjcwOTQ5IDogSWYgZmllbGQgaXMgdXBkYXRlZCB3aXRoIHVwZGF0ZSBvcGVyYXRpb24sIG1vZGlmaWVkIGZsYWcgc2hvdWxkIGJlIHNldCBpbiBvcmRlciB0byBjYXVzZSByZS1jb21wdXRlLlxyXG4gICAgdGhpcy5fZmllbGQuc2V0TW9kaWZpZWQoKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLl9maWVsZC51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICBmbG93TW9uaXRvci5hZGRGbG93T3BlcmF0aW9uVXBkYXRlKEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9FTkQsIHRoaXMuX3Rhc2suR2V0VGFza0RldGFpbHMoKSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGNhbiBhIG5vbi1tb2RpZmlhYmxlIGZpZWxkIGJlIG1vZGlmaWVkLiB0aGUgd2F5IHRvIGdldCB0aGUgYW5zd2VyIGRlcGVuZHMgb24gdGhlIGxvY2FsL3JlbW90ZSBkYXRhdmlld1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibXByZ0NyZWF0b3JcIj50cnVlIGlmIHRoZSBmaWVsZCBtYXkgYmUgbW9kaWZpZWQgYW5kIHRoZSBjYWxsaW5nIG1ldGhvZCBzaG91bGQgY29udGludWU8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBhc3luYyBDYW5Nb2RpZnkobXByZ0NyZWF0b3I6IFRhc2spOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCBleGVjT3BlckNvbW1hbmQ6IEV4ZWNPcGVyQ29tbWFuZCA9ICgodGhpcy5fY21kVG9TZXJ2ZXIgaW5zdGFuY2VvZiBFeGVjT3BlckNvbW1hbmQpID8gPEV4ZWNPcGVyQ29tbWFuZD50aGlzLl9jbWRUb1NlcnZlciA6IG51bGwpO1xyXG5cclxuICAgIGV4ZWNPcGVyQ29tbWFuZC5PcGVyYXRpb24gPSB0aGlzO1xyXG4gICAgZXhlY09wZXJDb21tYW5kLk1wcmdDcmVhdG9yID0gbXByZ0NyZWF0b3I7XHJcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuVGFzay5EYXRhdmlld01hbmFnZXIuRXhlY3V0ZSh0aGlzLl9jbWRUb1NlcnZlcikpLlN1Y2Nlc3M7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdXBkYXRlcyB0aGUgZGF0YSBjb250ZW50IG9mIGEgdmVjdG9yIHdpdGhvdXQgY2hhbmdpbmcgaXRzIGhlYWRlciBkYXRhXHJcbiAgLy8vICAgc3VjaCBhcyBjZWxsIHR5cGUgYW5kIHNpemUgLSBpcyB1c2VkIG9ubHkgaW4gdXBkYXRlIG9wZXJhdGlvbnMgYmV0d2VlbiB2ZWN0b3JzXHJcbiAgLy8vICAgZm9yIGV4YW1wbGUgdmVjdG9ycyBvZiBhbHBoYSB3aXRoIGNlbGwgc2l6ZSB0aGUgZGlmZmVyIG9yIHZlY3RvciBvZiBtZW1vIHdpdGggdmVjdG9yIG9mIGFscGhhXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZlY1wiPnRoZSBmbGF0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0aGUgbmV3IHZlY3RvclxyXG4gIC8vLyAgIGZpZWxkIHRoZSBmaWVsZCB0byBiZSB1cGRhdGVkXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBhIGZsYXQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHVwZGF0ZWQgdmVjdG9yIGFmdGVyIHRoZSBVcGRhdGU8L3JldHVybnM+XHJcbiAgc3RhdGljIG9wZXJVcGRhdGVWZWN0b3JzKGZpZWxkOiBGaWVsZCwgdmVjOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nID0gbnVsbDtcclxuICAgIGlmIChmaWVsZC5nZXRUeXBlKCkgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpIHtcclxuICAgICAgbGV0IGNlbGxzQXR0cjogU3RvcmFnZUF0dHJpYnV0ZSA9IFZlY3RvclR5cGUuZ2V0Q2VsbHNBdHRyKHZlYyk7XHJcbiAgICAgIGxldCBjZWxsc1R5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUgPSBmaWVsZC5nZXRDZWxsc1R5cGUoKTtcclxuXHJcbiAgICAgIGlmIChTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUaGVTYW1lVHlwZShjZWxsc0F0dHIsIGNlbGxzVHlwZSkpIHtcclxuICAgICAgICBsZXQgbmV3VmVjOiBWZWN0b3JUeXBlID0gbmV3IFZlY3RvclR5cGUodmVjKTtcclxuICAgICAgICBuZXdWZWMuYWRqdXN0VG9GaXQoZmllbGQpO1xyXG4gICAgICAgIHJldHVybiBuZXdWZWMudG9TdHJpbmcoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiaW4gb3BlclVwZGF0ZVZlY3RvcnMgXCIgKyBmaWVsZC5nZXROYW1lKCkgKyBcIiBpcyBub3Qgb2YgdHlwZSB2ZWN0b3JcIik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZXhlY3V0ZSBSYWlzZSBFdmVudFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtcHJnQ3JlYXRvclwiPmlmIHRoZSBvcGVyYXRpb24gYmVsb25ncyB0byBhIG1haW4gcHJvZ3JhbSBpdCBwb2ludHMgdG8gdGhlIHRhc2sgd2hpY2hcclxuICAvLy8gICBjYXVzZWQgdGhlIG1haW4gcHJvZ3JhbSB0byBiZWNvbWUgYWN0aXZlLiBPdGhlcndpc2UgaXQncyBmYWxzZS5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJldHVybmVkRnJvbVNlcnZlclwiPmluZGljYXRlcyB3aGV0aGVyIHdlIGp1c3QgY2FtZSBiYWNrIGZyb20gdGhlIHNlcnZlciB0byBiZSBwYXNzZWQgdG8gRXZlbnRzTWFuYWdlci5JbnN0YW5jZS5oYW5kbGVFdmVudCgpPC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIG9wZXJSYWlzZUV2ZW50KG1wcmdDcmVhdG9yOiBUYXNrLCByZXR1cm5lZEZyb21TZXJ2ZXI6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuXHJcbiAgICBsZXQgaW1tZWRpYXRlOiBib29sZWFuID0gYXdhaXQgdGhpcy5JbW1lZGlhdGUoKTtcclxuXHJcbiAgICAvLyBjcmVhdGUgYSBuZXcgcnVuIHRpbWUgZXZlbnQgdXNpbmcgdGhlIG9yaWdpbmFsIGFzIHRlbXBsYXRlXHJcbiAgICBsZXQgYVJ0RXZ0OiBSdW5UaW1lRXZlbnQgPSB0aGlzLl9ydEV2dC5yZXBsaWNhdGUoKTtcclxuICAgIGF3YWl0IGFSdEV2dC5zZXRQdWJsaWNOYW1lKCk7XHJcblxyXG4gICAgYVJ0RXZ0LnNldEltbWVkaWF0ZShpbW1lZGlhdGUpO1xyXG4gICAgYVJ0RXZ0LnNldE1haW5QcmdDcmVhdG9yKG51bGwpO1xyXG5cclxuICAgIGlmIChpbW1lZGlhdGUpIHtcclxuICAgICAgYVJ0RXZ0LnNldEN0cmwoPE1nQ29udHJvbD50aGlzLl90YXNrLmdldExhc3RQYXJrZWRDdHJsKCkpO1xyXG4gICAgICBhUnRFdnQuc2V0QXJnTGlzdCh0aGlzLl9hcmdMaXN0KTtcclxuXHJcbiAgICAgIGlmIChhUnRFdnQuZ2V0VGFzaygpLmlzTWFpblByb2coKSlcclxuICAgICAgICBhUnRFdnQuc2V0TWFpblByZ0NyZWF0b3IobXByZ0NyZWF0b3IpO1xyXG5cclxuICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuY2hlY2tBbmRTYXZlUm91dGVFdmVudElmQ3R4UmVtb3ZlZEZyb21TcnZyIChhUnRFdnQpO1xyXG4gICAgICBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5wdXNoRXhlY1N0YWNrKHRoaXMuX3Rhc2suZ2V0VGFza1RhZygpICwgdGhpcy5fZXZ0SGFuZGxlci5nZXRJZCgpLnRvU3RyaW5nKCkgLCB0aGlzLl9zZXJ2ZXJJZCk7XHJcbiAgICAgIGF3YWl0IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmhhbmRsZUV2ZW50KGFSdEV2dCwgcmV0dXJuZWRGcm9tU2VydmVyKTtcclxuICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIucG9wRXhlY1N0YWNrKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gc2VuZCBhcmd1bWVudHMgYnkgdmFsdWVcclxuICAgICAgbGV0IGFyZ2xpc3QgPSBuZXcgQXJndW1lbnRzTGlzdCgpO1xyXG4gICAgICBhd2FpdCBhcmdsaXN0LkluaXRpYWxpemUodGhpcy5fYXJnTGlzdCk7XHJcbiAgICAgIGFSdEV2dC5zZXRBcmdMaXN0KGFyZ2xpc3QpO1xyXG4gICAgICBhUnRFdnQuc2V0VGFzayhudWxsKTtcclxuICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuYWRkVG9UYWlsKGFSdEV2dCk7XHJcbiAgICAgIEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmNoZWNrQW5kU2F2ZVJvdXRlRXZlbnRJZkN0eFJlbW92ZWRGcm9tU3J2ciAoYVJ0RXZ0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGV4ZWN1dGUgYnJvd3NlciBDYWxsIG9wZXJhdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtcHJnQ3JlYXRvclwiPmlmIHRoZSBvcGVyYXRpb24gYmVsb25ncyB0byBhIG1haW4gcHJvZ3JhbSBpdCBwb2ludHMgdG8gdGhlIHRhc2sgd2hpY2hcclxuICAvLy8gICBjYXVzZWQgdGhlIG1haW4gcHJvZ3JhbSB0byBiZWNvbWUgYWN0aXZlLiBPdGhlcndpc2UgaXQncyBmYWxzZS5cclxuICAvLy8gPC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIG9wZXJDYWxsKG1wcmdDcmVhdG9yOiBUYXNrKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLm9wZXJTZXJ2ZXIobXByZ0NyZWF0b3IpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGV4ZWN1dGUgU2VydmVyIG9wZXJhdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtcHJnQ3JlYXRvclwiPmlmIHRoZSBvcGVyYXRpb24gYmVsb25ncyB0byBhIG1haW4gcHJvZ3JhbSBpdCBwb2ludHMgdG8gdGhlIHRhc2sgd2hpY2hcclxuICAvLy8gICBjYXVzZWQgdGhlIG1haW4gcHJvZ3JhbSB0byBiZWNvbWUgYWN0aXZlLiBPdGhlcndpc2UgaXQncyBmYWxzZS5cclxuICAvLy8gPC9wYXJhbT5cclxuICBhc3luYyBvcGVyU2VydmVyKG1wcmdDcmVhdG9yOiBUYXNrKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgY29tbWFuZDogRXhlY09wZXJDb21tYW5kID0gKCh0aGlzLl9jbWRUb1NlcnZlciBpbnN0YW5jZW9mIEV4ZWNPcGVyQ29tbWFuZCkgPyA8RXhlY09wZXJDb21tYW5kPnRoaXMuX2NtZFRvU2VydmVyIDogbnVsbCk7XHJcbiAgICBEZWJ1Zy5Bc3NlcnQoY29tbWFuZCAhPT0gbnVsbCk7XHJcbiAgICBpZiAodGhpcy5fdGFzay5pc01haW5Qcm9nKCkpXHJcbiAgICAgIGNvbW1hbmQuTXByZ0NyZWF0b3IgPSBtcHJnQ3JlYXRvcjtcclxuICAgIGVsc2VcclxuICAgICAgY29tbWFuZC5NcHJnQ3JlYXRvciA9IG51bGw7XHJcblxyXG4gICAgY29tbWFuZC5TZXRFeGVjdXRpb25TdGFjayhBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5nZXRFeGVjU3RhY2soKSk7XHJcbiAgICBjb21tYW5kLk9wZXJhdGlvbiA9IHRoaXM7XHJcbiAgICBhd2FpdCBBY2Nlc3NIZWxwZXIubWdEYXRhVGFibGUuZXhlY1JlcXVlc3RXaXRoU3ViZm9ybVJlY29yZEN5Y2xlKDxDb21tYW5kc1RhYmxlPnRoaXMuX3Rhc2suZ2V0TUdEYXRhKCkuQ21kc1RvU2VydmVyLCB0aGlzLl9jbWRUb1NlcnZlciwgbnVsbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIEJsb2NrIEVuZCBpbmRleFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0QmxvY2tFbmQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9ibG9ja0VuZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXRzIHRoZSB2YWx1ZSBvZiB0aGUgQmxvY2sgRW5kIGluZGV4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXRCbG9ja0VuZCh2YWw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fYmxvY2tFbmQgPSB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIEJsb2NrIENsb3NlIGluZGV4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRCbG9ja0Nsb3NlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmxvY2tDbG9zZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXRzIHRoZSB2YWx1ZSBvZiB0aGUgQmxvY2sgQ2xvc2UgaW5kZXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldEJsb2NrQ2xvc2UodmFsOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Jsb2NrQ2xvc2UgPSB2YWw7XHJcbiAgfVxyXG5cclxuICBnZXRUYXNrVGFnKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGFzay5nZXRUYXNrVGFnKCk7XHJcbiAgfVxyXG5cclxuICBnZXRIYW5kbGVySWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9ldnRIYW5kbGVyLmdldElkKCkudG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIGdldEV2ZW50SGFuZGxlcigpOiBFdmVudEhhbmRsZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2V2dEhhbmRsZXI7XHJcbiAgfVxyXG5cclxuICBnZXRFeGVjT25TZXJ2ZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZXhlY09uU2VydmVyO1xyXG4gIH1cclxuXHJcbiAgc2V0RXhlY09uU2VydmVyKHZhbCA6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX2V4ZWNPblNlcnZlciA9IHZhbDtcclxuICB9XHJcblxyXG4gIGdldEV4ZWNPbkNsaWVudCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9leGVjT25DbGllbnQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY2hlY2tzIGlmIHRoZSBvcGVyYXRpb24gY2FuIGJlIGV4ZWN1dGVkIG9yIG5vdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIGFzeW5jIGNhbkV4ZWN1dGUoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRDb25kVmFsKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImJ1ZmZlclwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwdWJsaWMgYXN5bmMgQWRkRmxvd0Rlc2NyaXB0aW9uKGJ1ZmZlcjogU3RyaW5nQnVpbGRlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgc3dpdGNoICh0aGlzLl90eXBlKSB7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9WRVJJRlk6XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChcIlZlcmlmeTogXCIpO1xyXG4gICAgICAgIGlmICh0aGlzLl9leHAgPT0gbnVsbClcclxuICAgICAgICAgIGJ1ZmZlci5BcHBlbmQodGhpcy5fdGV4dCk7XHJcbiAgICAgICAgZWxzZSBidWZmZXIuQXBwZW5kKFwiRXhwICNcIikuQXBwZW5kKHRoaXMuX2V4cC5nZXRJZCgpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19PUEVSX0JMT0NLOlxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQoXCJCbG9jayBJZlwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19PUEVSX0xPT1A6XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChcIkJsb2NrIExvb3BcIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9FTFNFOlxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQoXCJCbG9jayBFbHNlXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfRVZBTFVBVEU6XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChcIkV2YWx1YXRlIEV4cCAjXCIpLkFwcGVuZCh0aGlzLl9leHAuZ2V0SWQoKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9VUERBVEU6XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZEZvcm1hdChcIlVwZGF0ZSB7MH0gd2l0aCBFeHAgI3sxfVwiLCB0aGlzLl9maWVsZC5nZXRWYXJOYW1lKCksIHRoaXMuX2V4cC5nZXRJZCgpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19PUEVSX0VOREJMT0NLOlxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQoXCJFbmQgQmxvY2tcIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9VU1JfRVhJVDpcclxuICAgICAgICBidWZmZXIuQXBwZW5kKFwiSW52b2tlIE9TXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfUkFJU0VfRVZFTlQ6XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChcIlJhaXNlIEV2ZW50OlwiKTtcclxuICAgICAgICB0aGlzLl9ydEV2dC5BcHBlbmREZXNjcmlwdGlvbihidWZmZXIpO1xyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmRGb3JtYXQoXCIgKFdhaXQ9ezB9KVwiLCAoYXdhaXQgdGhpcy5JbW1lZGlhdGUoKSA/ICdZJyA6ICdOJykpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfU0VSVkVSOlxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQoXCJSdW4gc2VydmVyLXNpZGUgb3BlcmF0aW9uXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfQ0FMTDpcclxuICAgICAgICBidWZmZXIuQXBwZW5kKFwiQ2FsbCBwcm9ncmFtXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmRGb3JtYXQoXCI8PFVua25vd24gT3BlcmF0aW9uIENvZGUgezB9Pj5cIiwgdGhpcy5fdHlwZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldEFyZ0xpc3QoKTogQXJndW1lbnRzTGlzdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXJnTGlzdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0UmV0dXJuVmFsdWVGaWVsZCgpOiBGaWVsZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmllbGQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICByZXR1cm5zIHN1YmZvcm0gY29udHJvbCBuYW1lIGZvciBjYWxsIHdpdGggZGVzdGluYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0U3ViZm9ybUNvbnRyb2xOYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3ViZm9ybUN0cmxOYW1lO1xyXG4gIH1cclxuXHJcbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBOU3RyaW5nLkZvcm1hdChcIkV4ZWN1dGluZyBvcGVyYXRpb24gbnVtYmVyIHswfVwiLCB0aGlzLl9zZXJ2ZXJJZCArIDEpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgcmV0dXJucyBydW50aW1lRXZlbnQgZm9yIGEgcmFpc2UgZXZlbnQgb3BlcmF0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldFJ1bnRpbWVFdmVudCgpOiBSdW5UaW1lRXZlbnR7XHJcbiAgICByZXR1cm4gdGhpcy5fcnRFdnQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Logger, XMLConstants, XmlParser } from "@magic-xpa/utils";
|
|
1
|
+
import { NString } from "@magic-xpa/mscorelib";
|
|
2
|
+
import { Base64, Logger, XMLConstants, XmlParser } from "@magic-xpa/utils";
|
|
3
3
|
import { Recompute } from "./Recompute";
|
|
4
4
|
import { AccessHelper } from "../AccessHelper";
|
|
5
5
|
export class RecomputeTable {
|
|
@@ -26,9 +26,17 @@ export class RecomputeTable {
|
|
|
26
26
|
this.fillData_1(task.DataView, task, parser);
|
|
27
27
|
}
|
|
28
28
|
else
|
|
29
|
-
|
|
29
|
+
parser.setCurrIndex(parser.getXMLdata().indexOf(XMLConstants.TAG_CLOSE, parser.getCurrIndex()) + 1);
|
|
30
30
|
}
|
|
31
31
|
fillData_1(dataView, task, parser) {
|
|
32
|
+
if (parser.getNextTag() == XMLConstants.MG_TAG_RECOMPUTE) {
|
|
33
|
+
let currrentIndex = parser.getCurrIndex();
|
|
34
|
+
let encoded = parser.ReadContentOfCurrentElement().trim();
|
|
35
|
+
let decoded = Base64.decode(encoded.substr(0, encoded.length).trim());
|
|
36
|
+
let newXmlData = parser.getXMLdata().replace(encoded.trim(), decoded);
|
|
37
|
+
parser.setXMLdata(newXmlData);
|
|
38
|
+
parser.setCurrIndex(currrentIndex);
|
|
39
|
+
}
|
|
32
40
|
while (this.initInnerObjects(parser, parser.getNextTag(), dataView, task)) {
|
|
33
41
|
}
|
|
34
42
|
}
|
|
@@ -52,4 +60,4 @@ export class RecomputeTable {
|
|
|
52
60
|
return true;
|
|
53
61
|
}
|
|
54
62
|
}
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb21wdXRlVGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL3J0L1JlY29tcHV0ZVRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBTyxPQUFPLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFHekUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFPL0MsTUFBTSxPQUFPLGNBQWM7SUFLakIsY0FBYyxDQUFDLE1BQWlCO1FBQ3RDLElBQUksVUFBVSxHQUFXLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUNwRyxJQUFJLEtBQUssR0FBVyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO1FBRTdJLElBQUksSUFBSSxHQUFTLElBQUksQ0FBQztRQUN0QixJQUFJLFlBQVksR0FBaUIsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLEdBQUcsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFakgsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2RCxJQUFJLFNBQVMs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SSxTQUFTLEVBQUUsQ0FBQztZQUMzQyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FFNUM7YUFDSSxJQUFJLFdBQVcsS0FBSyxHQUFHLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixFQUFFO1lBQzVELE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQy9CLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7YUFDSTtZQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQ3hDLHVGQUF1RixHQUFHLFdBQVcsQ0FBQyxDQUFDO1lBQ3pHLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TGlzdCwgTlN0cmluZ30gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7QmFzZTY0LCBMb2dnZXIsIFhNTENvbnN0YW50cywgWG1sUGFyc2VyfSBmcm9tIFwiQG1hZ2ljLXhwYS91dGlsc1wiO1xyXG5pbXBvcnQge1Rhc2t9IGZyb20gXCIuLi90YXNrcy9UYXNrXCI7XHJcbmltcG9ydCB7RGF0YVZpZXd9IGZyb20gXCIuLi9kYXRhL0RhdGFWaWV3XCI7XHJcbmltcG9ydCB7UmVjb21wdXRlfSBmcm9tIFwiLi9SZWNvbXB1dGVcIjtcclxuaW1wb3J0IHsgQWNjZXNzSGVscGVyIH0gZnJvbSBcIi4uL0FjY2Vzc0hlbHBlclwiO1xyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBEYXRhIGZvciA8cmVjb21wdXRlPi4uLi48L3JlY29tcHV0ZT5cclxuLy8vICAgdGhpcyBjbGFzcyBpcyB1c2VkIG9ubHkgdG8gY3JlYXRlIHRoZSBSZWNvbXB1dGUgb2JqZWN0cyBidXQgZG8gbm90XHJcbi8vLyAgIGhvbGQgYW55IGRhdGFcclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIFJlY29tcHV0ZVRhYmxlIHtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgcmVjb21wdXRlIGF0dHJpYnV0ZXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZmlsbEF0dHJpYnV0ZXMocGFyc2VyOiBYbWxQYXJzZXIpOiBUYXNrIHtcclxuICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgIGxldCBJbmRleDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5NR19UQUdfUkVDT01QVVRFLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgWE1MQ29uc3RhbnRzLk1HX1RBR19SRUNPTVBVVEUubGVuZ3RoO1xyXG5cclxuICAgIGxldCB0YXNrOiBUYXNrID0gbnVsbDtcclxuICAgIGxldCB0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPiA9IFhtbFBhcnNlci5nZXRUb2tlbnMocGFyc2VyLmdldFhNTGRhdGEoKS5zdWJzdHIoSW5kZXgsIGVuZENvbnRleHQgLSBJbmRleCksICdcIicpO1xyXG5cclxuICAgIGZvciAobGV0IGo6IG51bWJlciA9IDA7IGogPCB0b2tlbnNWZWN0b3IubGVuZ3RoOyBqICs9IDIpIHtcclxuICAgICAgbGV0IGF0dHJpYnV0ZTogc3RyaW5nID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqKSk7XHJcbiAgICAgIGxldCB2YWx1ZVN0cjogc3RyaW5nID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqICsgMSkpO1xyXG5cclxuICAgICAgaWYgKGF0dHJpYnV0ZSA9PT0gWE1MQ29uc3RhbnRzLk1HX0FUVFJfVEFTS0lEKVxyXG4gICAgICAgICAgdGFzayA9IDxUYXNrPkFjY2Vzc0hlbHBlci5tZ0RhdGFUYWJsZS5HZXRUYXNrQnlJRCh2YWx1ZVN0cik7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhOU3RyaW5nLkZvcm1hdChcIlVucmVjb2duaXplZCBhdHRyaWJ1dGU6ICd7MH0nXCIsIGF0dHJpYnV0ZSkpO1xyXG4gICAgfVxyXG4gICAgcGFyc2VyLnNldEN1cnJJbmRleChwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKSArIDEpO1xyXG4gICAgLy8gc3RhcnQgb2YgPGZsZCAuLi4+XHJcblxyXG4gICAgcmV0dXJuIHRhc2s7XHJcbiAgfVxyXG5cclxuICBmaWxsRGF0YShwYXJzZXI6IFhtbFBhcnNlcik6IHZvaWQge1xyXG4gICAgbGV0IHRhc2s6IFRhc2sgPSB0aGlzLmZpbGxBdHRyaWJ1dGVzKHBhcnNlcik7XHJcblxyXG4gICAgaWYgKHRhc2sgIT09IG51bGwpIHtcclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRGV2VG9Mb2coXCJnb2VzIHRvIHJlZmlsbCByZWNvbXB1dGVcIik7XHJcbiAgICAgIHRoaXMuZmlsbERhdGFfMSg8RGF0YVZpZXc+dGFzay5EYXRhVmlldywgdGFzaywgcGFyc2VyKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgocGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHBhcnNlci5nZXRDdXJySW5kZXgoKSkgKyAxKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUbyBwYXJzZSBpbnB1dCBzdHJpbmcgYW5kIGZpbGwgaW5uZXIgZGF0YSA6IFZlY3RvciBwcm9wc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZmlsbERhdGFfMShkYXRhVmlldzogRGF0YVZpZXcsIHRhc2s6IFRhc2ssIHBhcnNlcjogWG1sUGFyc2VyKTogdm9pZCB7XHJcbiAgICAgaWYgKHBhcnNlci5nZXROZXh0VGFnKCkgPT0gWE1MQ29uc3RhbnRzLk1HX1RBR19SRUNPTVBVVEUpIHtcclxuICAgICAgbGV0IGN1cnJyZW50SW5kZXggPSBwYXJzZXIuZ2V0Q3VyckluZGV4KCk7IC8vIGdldCB0aGUgY3VycmVudEluZGV4IG9mIFJlY29tcHV0ZSB0YWdcclxuICAgICAgbGV0IGVuY29kZWQgPSBwYXJzZXIuUmVhZENvbnRlbnRPZkN1cnJlbnRFbGVtZW50KCkudHJpbSgpOyAvLyBnZXQgdmFsdWUgb2YgZW5jb2RlZCB2YWx1ZSBvZiBSZWNvbXB1dGVcclxuICAgICAgbGV0IGRlY29kZWQgPSBCYXNlNjQuZGVjb2RlKGVuY29kZWQuc3Vic3RyKDAsIGVuY29kZWQubGVuZ3RoKS50cmltKCkpOyAvL2RlY29kZSB0aGUgdmFsdWUgb2YgcmVjb21wdXRlXHJcbiAgICAgIGxldCBuZXdYbWxEYXRhID0gcGFyc2VyLmdldFhNTGRhdGEoKS5yZXBsYWNlKGVuY29kZWQudHJpbSgpLCBkZWNvZGVkKTsgLy8gcmVwbGFjZSB0aGUgZW5jb2RlZCB2YWx1ZSB3aXRoIGRlY29kZWQgdmFsdWVcclxuICAgICAgcGFyc2VyLnNldFhNTGRhdGEobmV3WG1sRGF0YSk7IC8vY3JlYXRlIGEgcGFyc2VyIHdpdGggbmV3WE1MXHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoY3VycnJlbnRJbmRleCk7IC8vIHNldCB0aGUgY3VycmVudCBpbmRleCBvZiBwYXJzZXIgdG8gcmVjb21wdXRlIHRhZ1xyXG4gICAgfVxyXG5cclxuICAgIHdoaWxlICh0aGlzLmluaXRJbm5lck9iamVjdHMocGFyc2VyLCBwYXJzZXIuZ2V0TmV4dFRhZygpLCBkYXRhVmlldywgdGFzaykpIHtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBGaWxsIFJlY29tcHV0ZSBPYmplY3QsIGdpdmVzIGl0cyByZWZlcmVuY2UgdG8gRmllbGQgYW5kIHJlZmVyZW5jZSBvZiBGaWVsZCB0byBoaW1cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgaW5pdElubmVyT2JqZWN0cyhwYXJzZXI6IFhtbFBhcnNlciwgbmFtZU9mRm91bmQ6IFN0cmluZywgZGF0YVZpZXc6IERhdGFWaWV3LCB0YXNrOiBUYXNrKTogYm9vbGVhbiB7XHJcbiAgICBpZiAobmFtZU9mRm91bmQgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZU9mRm91bmQgPT09IFhNTENvbnN0YW50cy5NR19UQUdfUkVDT01QVVRFKVxyXG4gICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX0NMT1NFLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgMSk7XHJcbiAgICAvLyBzdGFydCBvZiA8ZmxkIC4uLj5cclxuICAgIGVsc2UgaWYgKG5hbWVPZkZvdW5kID09PSBYTUxDb25zdGFudHMuTUdfVEFHX0ZMRCkge1xyXG4gICAgICBsZXQgcmVjb21wdXRlOiBSZWNvbXB1dGUgPSBuZXcgUmVjb21wdXRlKCk7XHJcbiAgICAgIHJlY29tcHV0ZS5maWxsRGF0YShkYXRhVmlldywgdGFzaywgcGFyc2VyKTsgLy8gZ2V0IHJlZmVyZW5jZSB0byBEYXRhVmlldywgdG8gbWFrZSBsaW5rZWQgcmVmLiA6IFJlY29tcHV0ZTwtRmllbGRcclxuICAgICAgLy8gdGFza1JlZmVyZW5jZSBmb3IgUmVjb21wdXRlLnByb3BzPT4gQ29udHJvbFRhYmxlLkNvbnRyb2wudGFza1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobmFtZU9mRm91bmQgPT09ICcvJyArIFhNTENvbnN0YW50cy5NR19UQUdfUkVDT01QVVRFKSB7XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgyRW5kT2ZUYWcoKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcclxuICAgICAgICBcIlRoZXJlIGlzIG5vIHN1Y2ggdGFnIGluIDxyZWNvbXB1dGU+LCBhZGQgY2FzZSB0byBSZWNvbXB1dGVUYWJsZS5pbml0SW5uZXJPYmplY3RzIGZvciBcIiArIG5hbWVPZkZvdW5kKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|