raain-app 1.6.6 → 1.6.7
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/CHANGELOG.md +2 -0
- package/esm2020/profile.service.mjs +11 -1
- package/esm2020/tools/CompareManager.mjs +2 -2
- package/esm2020/tools/RefreshManager.mjs +3 -3
- package/fesm2015/raain-app.mjs +13 -3
- package/fesm2015/raain-app.mjs.map +1 -1
- package/fesm2020/raain-app.mjs +13 -3
- package/fesm2020/raain-app.mjs.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -58,6 +58,16 @@ export class ProfileService {
|
|
|
58
58
|
}
|
|
59
59
|
async logout(fidjKey, fidjProd) {
|
|
60
60
|
// this.storage.remove('raain-email');
|
|
61
|
+
if (!fidjKey) {
|
|
62
|
+
try {
|
|
63
|
+
await this.fidjService.loginInDemoMode();
|
|
64
|
+
this.readyForSync.next(true);
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
console.error('initFidj catch pb: ', err);
|
|
68
|
+
}
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
61
71
|
await this.fidjService.logout(true);
|
|
62
72
|
try {
|
|
63
73
|
await this.fidjService.init(fidjKey, {
|
|
@@ -692,4 +702,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
|
|
|
692
702
|
providedIn: 'root',
|
|
693
703
|
}]
|
|
694
704
|
}], ctorParameters: function () { return [{ type: i1.Storage }, { type: i2.FidjService }, { type: i3.HttpClient }, { type: i4.Router }]; } });
|
|
695
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvc2hhcmVkL3Byb2ZpbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osU0FBUyxFQUVULFNBQVMsRUFDVCxlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0QixRQUFRLEVBQ1IsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixRQUFRLEdBQ1gsTUFBTSxhQUFhLENBQUM7QUFJckIsT0FBTyxFQUFDLFdBQVcsRUFBa0IsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQThCLGVBQWUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUMxRSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxTQUFTLENBQUM7Ozs7OztBQU14QyxNQUFNLE9BQU8sY0FBYztJQVd2QixZQUNjLE9BQWdCLEVBQ2hCLFdBQXdCLEVBQ3hCLFVBQXNCLEVBQ3hCLE1BQWM7UUFIWixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDeEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUV0QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksZUFBZSxDQUFV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UixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIEV2ZW50Tm9kZSxcbiAgICBHYXVnZU1lYXN1cmUsXG4gICAgR2F1Z2VOb2RlLFxuICAgIExhdExuZyxcbiAgICBSYWRhck5vZGUsXG4gICAgUmFpbkNvbXB1dGF0aW9uLFxuICAgIFJhaW5Db21wdXRhdGlvbk1hcCxcbiAgICBSYWluQ29tcHV0YXRpb25RdWFsaXR5LFxuICAgIFJhaW5Ob2RlLFxuICAgIFJhaW5TcGVlZE1hcCxcbiAgICBTcGVlZE1hdHJpeENvbnRhaW5lcixcbiAgICBUZWFtTm9kZSxcbn0gZnJvbSAncmFhaW4tbW9kZWwnO1xuXG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJy4vc3RvcmFnZS5zZXJ2aWNlJztcblxuaW1wb3J0IHtGaWRqU3RvcmFnZSwgRmlkalN0b3JhZ2VOb2RlfSBmcm9tICcuL2ZpZGotc3RvcmFnZS5tb2RlbCc7XG5pbXBvcnQge0Vycm9ySW50ZXJmYWNlLCBGaWRqU2VydmljZSwgTG9nZ2VyTGV2ZWxFbnVtfSBmcm9tICdmaWRqLWFuZ3VsYXInO1xuaW1wb3J0IHtYWVR5cGV9IGZyb20gJy4veHl0eXBlJztcbmltcG9ydCB7R2F1Z2VOb2RlRmlsdGVyfSBmcm9tICcuL3Rvb2xzJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9maWxlU2VydmljZSB7XG4gICAgcHVibGljIHJlYWR5Rm9yU3luYzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuICAgIHB1YmxpYyBhc1RlYW1JZDogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIGVtYWlsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGlzRGVtbzogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgcm9sZXM6IEFycmF5PHN0cmluZz47XG4gICAgcHJvdGVjdGVkIG5vZGVEYXRhOiBGaWRqU3RvcmFnZU5vZGU7XG4gICAgcHJvdGVjdGVkIGZpZGpTdG9yYWdlOiBGaWRqU3RvcmFnZTtcbiAgICBwcm90ZWN0ZWQgaGF2ZVRyeVRvUmVjb25uZWN0OiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBzdG9yYWdlOiBTdG9yYWdlLFxuICAgICAgICBwcm90ZWN0ZWQgZmlkalNlcnZpY2U6IEZpZGpTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICAgICkge1xuICAgICAgICB0aGlzLmVtYWlsID0gdGhpcy5zdG9yYWdlLmdldCgncmFhaW4tZW1haWwnKTtcbiAgICAgICAgdGhpcy5hc1RlYW1JZCA9IHRoaXMuc3RvcmFnZS5nZXQoJ3JhYWluLWFzVGVhbUlkJyk7XG4gICAgICAgIHRoaXMucmVhZHlGb3JTeW5jID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgICAgIHRoaXMucm9sZXMgPSBbXTtcbiAgICAgICAgdGhpcy5maWRqU3RvcmFnZSA9IG5ldyBGaWRqU3RvcmFnZShzdG9yYWdlKTtcbiAgICAgICAgdGhpcy5pc0RlbW9Nb2RlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IGlzRGVtb01vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRGVtbztcbiAgICB9XG5cbiAgICBzZXQgaXNEZW1vTW9kZShtb2RlKSB7XG4gICAgICAgIHRoaXMuaXNEZW1vID0gbW9kZSA/IG1vZGUgOiB0cnVlO1xuICAgICAgICB0aGlzLmZpZGpTdG9yYWdlLnNldERlbW9Nb2RlKHRoaXMuaXNEZW1vKTtcbiAgICB9XG5cbiAgICBnZXQgZGVmYXVsdFVybEZvckFQSSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5nZXQoJ3JhYWluLXVybEZvckFQSScpO1xuICAgIH1cblxuICAgIHNldCBkZWZhdWx0VXJsRm9yQVBJKHVybDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoJ3JhYWluLXVybEZvckFQSScsIHVybCk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVmcmVzaFByb2ZpbGUoKTogUHJvbWlzZTxGaWRqU3RvcmFnZU5vZGU+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMubm9kZURhdGEgPSBhd2FpdCB0aGlzLmZpZGpTdG9yYWdlLmdldFJlZnJlc2hlZE5vZGVDb3B5KHRoaXMuZmlkalNlcnZpY2UpO1xuICAgICAgICAgICAgdGhpcy5zZXRSb2xlcyhhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLmdldFJvbGVzKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZURhdGE7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGlzQ29ubmVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWRqU2VydmljZS5pc0Nvbm5lY3RlZCgpO1xuICAgIH1cblxuICAgIGdldEVtYWlsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbWFpbCA/PyB0aGlzLnN0b3JhZ2UuZ2V0KCdyYWFpbi1lbWFpbCcsIHRoaXMuZW1haWwpO1xuICAgIH1cblxuICAgIHNldEVtYWlsKGVtYWlsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5lbWFpbCA9IGVtYWlsO1xuICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0KCdyYWFpbi1lbWFpbCcsIHRoaXMuZW1haWwpO1xuICAgIH1cblxuICAgIGFzeW5jIGxvZ291dChmaWRqS2V5OiBzdHJpbmcsIGZpZGpQcm9kOiBib29sZWFuKSB7XG4gICAgICAgIC8vIHRoaXMuc3RvcmFnZS5yZW1vdmUoJ3JhYWluLWVtYWlsJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuZmlkalNlcnZpY2UubG9nb3V0KHRydWUpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLmluaXQoZmlkaktleSwge1xuICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBMb2dnZXJMZXZlbEVudW0uV0FSTiwgLy8gZmlkalByb2QgPyBMb2dnZXJMZXZlbEVudW0uV0FSTiA6IExvZ2dlckxldmVsRW51bS5JTkZPLFxuICAgICAgICAgICAgICAgIGNyeXB0bzogZmFsc2UsXG4gICAgICAgICAgICAgICAgcHJvZDogZmlkalByb2QsXG4gICAgICAgICAgICAgICAgdXNlREI6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJlYWR5Rm9yU3luYy5uZXh0KHRydWUpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2luaXRGaWRqIGNhdGNoIHBiOiAnLCBlcnIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgY2hlY2tFcnJvcihlcnJvcjogRXJyb3JJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IDQwMSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQYiBvbiBhdXRoJyk7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPCAwKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5maWRqU2VydmljZS5sb2dvdXQoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChpZ25vcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBsb2dvdXQgZXJyb3JzIGFzIHdlJ3JlIHJlZGlyZWN0aW5nIHRvIGxvZ291dCBwYWdlIGFueXdheVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nb3RvTG91dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ290b0xvdXQoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPiAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy9sb2dvdXQnLCB7XG4gICAgICAgICAgICAgICAgc2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignZ290b0xvdXQgZXJyb3I6ICcsIGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ290b0xvZ2luKCkge1xuICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nLCB7c2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlfSk7XG4gICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2xvZ2luJ10pO1xuICAgIH1cblxuICAgIGlzTG9nZ2VkSW4oKSB7XG4gICAgICAgIGNvbnN0IGxvZ2dlZEluID0gdGhpcy5maWRqU2VydmljZS5pc0xvZ2dlZEluKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdpc0xvZ2dlZEluOiAnLCBsb2dnZWRJbik7XG4gICAgICAgIHJldHVybiBsb2dnZWRJbjtcbiAgICB9XG5cbiAgICBuZWVkc0Nvbm5lY3Rpb25SZWZyZXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWRqU2VydmljZS5uZWVkc1JlZnJlc2goKTtcbiAgICB9XG5cbiAgICBhc3luYyBjb25uZWN0aW9uUmVmcmVzaCgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5maWRqU2VydmljZS5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgc3RvcmVBbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZGpTdG9yYWdlLnN0b3JlRGF0YSh0aGlzLmZpZGpTZXJ2aWNlLCB0aGlzLm5vZGVEYXRhKTtcbiAgICB9XG5cbiAgICBpc0FkbWluKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yb2xlcy5pbmRleE9mKCdhZG1pbicpID4gLTE7XG4gICAgfVxuXG4gICAgLy8gPT09IE5vdGlmaWNhdGlvbnMgPT09XG5cbiAgICBhc3luYyBjcmVhdGVOb3RpZmljYXRpb24ocmFpbklkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAgICAgIGtleTogJ25vdGlmaWNhdGlvbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL25vdGlmaWNhdGlvbnMnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgcmFpbjogcmFpbklkLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXZlbnROb2RlKHJlc3AuZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGFzeW5jIGdldE5vdGlmaWNhdGlvbnMocmFpbklkOiBzdHJpbmcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSAnP3JhaW49JyArIHJhaW5JZDtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IGFyZ3MsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9ub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzcC5kYXRhLm5vdGlmaWNhdGlvbnMubWFwKChuKSA9PiBuZXcgRXZlbnROb2RlKG4pKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0QWxsTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPEV2ZW50Tm9kZVtdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAnbm90aWZpY2F0aW9ucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9ub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzcC5kYXRhLm5vdGlmaWNhdGlvbnMubWFwKChuKSA9PiBuZXcgRXZlbnROb2RlKG4pKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8vID09PSBUZWFtcyA9PT1cblxuICAgIGFzeW5jIGdldFRlYW1zKCk6IFByb21pc2U8QXJyYXk8VGVhbU5vZGU+PiB7XG4gICAgICAgIGNvbnN0IHRlYW1zID0gW107XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAndGVhbXNfYWxsJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3RlYW1zX2FsbCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGVhbSBvZiByZXNwLmRhdGEudGVhbXMpIHtcbiAgICAgICAgICAgICAgICB0ZWFtcy5wdXNoKG5ldyBUZWFtTm9kZSh0ZWFtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGVhbXM7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0VGVhbSh0ZWFtSWQ6IHN0cmluZyk6IFByb21pc2U8VGVhbU5vZGU+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICd0ZWFtcycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiB0ZWFtSWQsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy90ZWFtcycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVGVhbU5vZGUocmVzcC5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gPT09IFJhZGFycyA9PT1cblxuICAgIGFzeW5jIGdldFJhZGFycyh0ZWFtSWQ6IHN0cmluZyk6IFByb21pc2U8QXJyYXk8UmFkYXJOb2RlPj4ge1xuICAgICAgICBjb25zdCByYWRhcnMgPSBbXTtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMnICsgKHRlYW1JZCA/ICc/dGVhbUlkPScgKyB0ZWFtSWQgOiAnJyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB1cmwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgciBvZiByZXNwLmRhdGEucmFkYXJzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFkYXIgPSBuZXcgUmFkYXJOb2RlKHIpO1xuICAgICAgICAgICAgICAgIHJhZGFycy5wdXNoKHJhZGFyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByYWRhcnM7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFkYXIoaWQ6IHN0cmluZyk6IFByb21pc2U8UmFkYXJOb2RlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IGlkLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFkYXJzJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSYWRhck5vZGUocmVzcC5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgcHV0UmFkYXIocmFkYXJOb2RlOiBSYWRhck5vZGUpOiBQcm9taXNlPFJhZGFyTm9kZT4ge1xuICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgbmFtZTogcmFkYXJOb2RlLm5hbWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWRhcnMnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcmFkYXJOb2RlLmlkLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdQVVQnLFxuICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMvJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhZGFyTm9kZShyZXNwLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRMb25lbHlSYWRhcnMocmFpbnM6IFJhaW5Ob2RlW10pOiBQcm9taXNlPFJhZGFyTm9kZVtdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhZGFycycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGxvbmVseVJhZGFyczogUmFkYXJOb2RlW10gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHJhZGFycyA9IHJlc3AuZGF0YS5yYWRhcnM7XG4gICAgICAgICAgICByYWRhcnMuZm9yRWFjaCgocmFkYXIpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByYWlucy5mb3JFYWNoKChyYWluKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJkSWQgPSByYWluLmdldExpbmsoJ3JhZGFyJykuZ2V0SWQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJkSWQgPT09IHJhZGFyLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvbmVseVJhZGFycy5wdXNoKHJhZGFyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBsb25lbHlSYWRhcnM7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFpblRpbWVmcmFtZShcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIGJlZ2luOiBEYXRlLFxuICAgICAgICBlbmQ6IERhdGUsXG4gICAgICAgIGZvcmNlZCA9IGZhbHNlLFxuICAgICAgICBwcm92aWRlciA9ICdSYWFpbicsXG4gICAgICAgIHRpbWVTdGVwSW5NaW51dGVzID0gMTBcbiAgICApOiBQcm9taXNlPFJhaW5Ob2RlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgcXVlcnlQYXRoID1cbiAgICAgICAgICAgICAgICAnJyArXG4gICAgICAgICAgICAgICAgcmFpbklkICtcbiAgICAgICAgICAgICAgICAnP2Zvcm1hdD10aW1lZnJhbWVDdW11bGF0aXZlJnByb3ZpZGVyPScgK1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyICtcbiAgICAgICAgICAgICAgICAnJnRpbWVTdGVwSW5NaW51dGVzPScgK1xuICAgICAgICAgICAgICAgIHRpbWVTdGVwSW5NaW51dGVzO1xuICAgICAgICAgICAgaWYgKGJlZ2luKSB7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXRoICs9ICcmYmVnaW49JyArIGJlZ2luLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZW5kKSB7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXRoICs9ICcmZW5kPScgKyBlbmQudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmb3JjZWQpIHtcbiAgICAgICAgICAgICAgICBxdWVyeVBhdGggKz0gJyZmb3JjZWQ9dHJ1ZSc7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXRoICs9ICcmd2l0aENvbmZpZz10cnVlJztcbiAgICAgICAgICAgICAgICAvLyBxdWVyeVBhdGggKz0gJyZieXBhc3NDYWNoZT0nICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlQYXRoLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCByYWluTm9kZSA9IG5ldyBSYWluTm9kZShyZXNwLmRhdGEudGltZWZyYW1lQ3VtdWxhdGl2ZSk7XG4gICAgICAgICAgICByYWluTm9kZS5uYW1lICs9ICcucmFkYXIudGltZWZyYW1lQ3VtdWxhdGl2ZSc7XG4gICAgICAgICAgICByZXR1cm4gcmFpbk5vZGU7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyA9PT0gUmFpbnMgPT09XG5cbiAgICBhc3luYyBnZXRSYWlucyh0ZWFtSWQ6IHN0cmluZyk6IFByb21pc2U8QXJyYXk8UmFpbk5vZGU+PiB7XG4gICAgICAgIGNvbnN0IHJhaW5zID0gW107XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnICsgKHRlYW1JZCA/ICc/dGVhbUlkPScgKyB0ZWFtSWQgOiAnJyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHVybCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCByYWluIG9mIHJlc3AuZGF0YS5yYWlucykge1xuICAgICAgICAgICAgICAgIHJhaW5zLnB1c2gobmV3IFJhaW5Ob2RlKHJhaW4pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByYWlucztcbiAgICB9XG5cbiAgICBhc3luYyBnZXRSYWluKGlkOiBzdHJpbmcpOiBQcm9taXNlPFJhaW5Ob2RlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogaWQsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucy8nLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhaW5Ob2RlKHJlc3AuZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyA9PT0gQ291bnRcblxuICAgIGFzeW5jIGdldENvdW50cyhcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIHJhbmdlOiAnaG91cicgfCAnZGF5JyB8ICdtb250aCcgfCAneWVhcic7XG4gICAgICAgICAgICBwZXJpb2RCZWdpbjogRGF0ZTtcbiAgICAgICAgfVxuICAgICk6IFByb21pc2U8e1xuICAgICAgICBwZXJjZW50SW1hZ2VzOiBYWVR5cGVbXTtcbiAgICAgICAgcGVyY2VudFJhaW55OiBYWVR5cGVbXTtcbiAgICAgICAgcGVyY2VudFE6IFhZVHlwZVtdO1xuICAgICAgICBxdWV1ZVJ1bm5pbmc6IG51bWJlcjtcbiAgICB9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gYD9yYW5nZT0ke29wdGlvbnMucmFuZ2V9JmJlZ2luPSR7b3B0aW9ucy5wZXJpb2RCZWdpbi50b0lTT1N0cmluZygpfWA7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAnL2NvdW50cycgKyBhcmdzLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMvJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBjb3VudHMgPSByZXNwLmRhdGEuY291bnRzLnJlc3VsdDtcbiAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRJbWFnZXM6IFhZVHlwZVtdID0gW10sXG4gICAgICAgICAgICAgICAgcGVyY2VudFJhaW55OiBYWVR5cGVbXSA9IFtdLFxuICAgICAgICAgICAgICAgIHBlcmNlbnRROiBYWVR5cGVbXSA9IFtdO1xuXG4gICAgICAgICAgICBjb3VudHMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5zZXREYXRlQ29tcG9uZW50cyhvcHRpb25zLnBlcmlvZEJlZ2luLCBjKTtcbiAgICAgICAgICAgICAgICBwZXJjZW50SW1hZ2VzLnB1c2gobmV3IFhZVHlwZShjLnBlcmNlbnRJbWFnZXMgPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgICAgICAgICAgcGVyY2VudFJhaW55LnB1c2gobmV3IFhZVHlwZShjLnBlcmNlbnRSYWlueSA/PyAwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgICAgICAgICBwZXJjZW50US5wdXNoKG5ldyBYWVR5cGUoYy5wZXJjZW50USA/PyAwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHBlcmNlbnRJbWFnZXMsXG4gICAgICAgICAgICAgICAgcGVyY2VudFJhaW55LFxuICAgICAgICAgICAgICAgIHBlcmNlbnRRLFxuICAgICAgICAgICAgICAgIHF1ZXVlUnVubmluZzogcmVzcC5kYXRhLnF1ZXVlUnVubmluZyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRDb3VudHNIb3VyKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgb3B0aW9uczoge3BlcmlvZEJlZ2luOiBEYXRlfVxuICAgICk6IFByb21pc2U8e1xuICAgICAgICBwZXJjZW50SW1hZ2VzOiBYWVR5cGVbXTtcbiAgICAgICAgcmFpbnlDb3VudDogWFlUeXBlW107XG4gICAgICAgIHJhaW55U3VtOiBYWVR5cGVbXTtcbiAgICAgICAgcXVldWVSdW5uaW5nOiBudW1iZXI7XG4gICAgfT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYXJncyA9IGA/cmFuZ2U9aG91ciZiZWdpbj0ke29wdGlvbnMucGVyaW9kQmVnaW4udG9JU09TdHJpbmcoKX1gO1xuXG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcmFpbklkICsgJy9jb3VudHMnICsgYXJncyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zLycsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgY291bnRzID0gcmVzcC5kYXRhLmNvdW50cy5yZXN1bHQ7XG4gICAgICAgICAgICBjb25zdCBwZXJjZW50SW1hZ2VzOiBYWVR5cGVbXSA9IFtdLFxuICAgICAgICAgICAgICAgIHJhaW55U3VtOiBYWVR5cGVbXSA9IFtdLFxuICAgICAgICAgICAgICAgIHJhaW55Q291bnQ6IFhZVHlwZVtdID0gW107XG5cbiAgICAgICAgICAgIGNvdW50cy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLnNldERhdGVDb21wb25lbnRzKG9wdGlvbnMucGVyaW9kQmVnaW4sIGMpO1xuICAgICAgICAgICAgICAgIHBlcmNlbnRJbWFnZXMucHVzaChuZXcgWFlUeXBlKGMucGVyY2VudEltYWdlcyA/PyAwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgICAgICAgICByYWlueUNvdW50LnB1c2gobmV3IFhZVHlwZShjLnJhaW55Q291bnQgPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgICAgICAgICAgcmFpbnlTdW0ucHVzaChuZXcgWFlUeXBlKGMucmFpbnlTdW0gPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwZXJjZW50SW1hZ2VzLFxuICAgICAgICAgICAgICAgIHJhaW55Q291bnQsXG4gICAgICAgICAgICAgICAgcmFpbnlTdW0sXG4gICAgICAgICAgICAgICAgcXVldWVSdW5uaW5nOiByZXNwLmRhdGEucXVldWVSdW5uaW5nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vID09PSBDb21wdXRpbmcgPT09XG5cbiAgICBhc3luYyBnZXRSYWluQ29tcHV0YXRpb25DYXJ0ZXNpYW5NYXBCeUlkKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZ1xuICAgICk6IFByb21pc2U8UmFpbkNvbXB1dGF0aW9uTWFwPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeVBhdGggPVxuICAgICAgICAgICAgICAgICcnICsgcmFpbklkICsgJy9jb21wdXRhdGlvbnMvJyArIHJhaW5Db21wdXRhdGlvbklkICsgJz9mb3JtYXQ9Y2FydGVzaWFuLW1hcCc7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5kYXRhWydjYXJ0ZXNpYW4tbWFwJ10pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uTWFwID0gbmV3IFJhaW5Db21wdXRhdGlvbk1hcChyZXNwb25zZS5kYXRhWydjYXJ0ZXNpYW4tbWFwJ10pO1xuICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uTWFwLm5hbWUgPSByYWluSWQgKyAnLnJhaW4uY2FydGVzaWFuLW1hcCc7XG4gICAgICAgICAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uTWFwO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZXNNYXBCeUlkKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZyxcbiAgICAgICAgY3VtdWxhdGl2ZUhvdXJzOiBudW1iZXJcbiAgICApOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvbk1hcD4ge1xuICAgICAgICBjb25zdCBxdWVyeVBhdGggPSBgJHtyYWluSWR9L2NvbXB1dGF0aW9ucy8ke3JhaW5Db21wdXRhdGlvbklkfS9jdW11bGF0aXZlLyR7Y3VtdWxhdGl2ZUhvdXJzfWA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5kYXRhWydjdW11bGF0aXZlJ10pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uTWFwID0gbmV3IFJhaW5Db21wdXRhdGlvbk1hcChyZXNwb25zZS5kYXRhWydjdW11bGF0aXZlJ10pO1xuICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uTWFwLm5hbWUgPSByYWluSWQgKyAnLnJhaW4uY3VtdWxhdGl2ZSc7XG4gICAgICAgICAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uTWFwO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUNhcnRlc2lhbk1hcEJ5SWQoXG4gICAgICAgIHJhaW5JZDogc3RyaW5nLFxuICAgICAgICByYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWQ6IHN0cmluZ1xuICAgICk6IFByb21pc2U8UmFpbkNvbXB1dGF0aW9uTWFwPiB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGF0aCA9IGAke3JhaW5JZH0vY3VtdWxhdGl2ZS8ke3JhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZH0/Zm9ybWF0PWNhcnRlc2lhbi1tYXBgO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5kYXRhWydjYXJ0ZXNpYW4tbWFwJ10pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uTWFwID0gbmV3IFJhaW5Db21wdXRhdGlvbk1hcChyZXNwb25zZS5kYXRhWydjYXJ0ZXNpYW4tbWFwJ10pO1xuICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uTWFwLm5hbWUgPSByYWluSWQgKyAnLnJhaW4uY2FydGVzaWFuLW1hcCc7XG4gICAgICAgICAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uTWFwO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUN1bXVsYXRpdmVzTWFwQnlJZChcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIHJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZDogc3RyaW5nLFxuICAgICAgICBjdW11bGF0aXZlSG91cnM6IG51bWJlclxuICAgICk6IFByb21pc2U8UmFpbkNvbXB1dGF0aW9uTWFwPiB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGF0aCA9IGAke3JhaW5JZH0vY3VtdWxhdGl2ZS8ke3JhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZH0vY3VtdWxhdGl2ZS8ke2N1bXVsYXRpdmVIb3Vyc31gO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5kYXRhWydjdW11bGF0aXZlJ10pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uTWFwID0gbmV3IFJhaW5Db21wdXRhdGlvbk1hcChyZXNwb25zZS5kYXRhWydjdW11bGF0aXZlJ10pO1xuICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uTWFwLm5hbWUgPSByYWluSWQgKyAnLnJhaW4uY3VtdWxhdGl2ZS1jdW11bGF0aXZlJztcbiAgICAgICAgICAgIHJldHVybiByYWluQ29tcHV0YXRpb25NYXA7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRSYWluQ29tcGFyZXMoXG4gICAgICAgIHJhaW5JZDogc3RyaW5nLFxuICAgICAgICByYWluQ29tcHV0YXRpb25JZDogc3RyaW5nXG4gICAgKTogUHJvbWlzZTx7aWQ6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nfVtdPiB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGF0aCA9ICcnICsgcmFpbklkICsgJy9jb21wdXRhdGlvbnMvJyArIHJhaW5Db21wdXRhdGlvbklkO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgICAgICAgLy8gdGltZW91dDogMjAwMDAwLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByYWluQ29tcHV0YXRpb24gPSBuZXcgUmFpbkNvbXB1dGF0aW9uKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICBjb25zdCBsaW5rcyA9IHJhaW5Db21wdXRhdGlvbi5nZXRMaW5rcygpO1xuICAgICAgICBjb25zdCByYWluQ29tcHV0YXRpb25RdWFsaXRpZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBsaW5rIG9mIGxpbmtzKSB7XG4gICAgICAgICAgICBpZiAobGluay5yZWwgPT09IFJhaW5Db21wdXRhdGlvblF1YWxpdHkuVFlQRSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gbGluay5nZXRJZCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVMZW5ndGggPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSBsaW5rLmhyZWYuc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICA0ICsgUmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5UWVBFLmxlbmd0aCArIDEgKyBkYXRlTGVuZ3RoICsgMSxcbiAgICAgICAgICAgICAgICAgICAgbGluay5ocmVmLmluZGV4T2YoJy8nICsgaWQpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXRpZXMucHVzaCh7aWQsIHZlcnNpb259KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFJhaW5Db21wYXJlQnlEYXRlKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZyxcbiAgICAgICAgZGF0ZTogRGF0ZVxuICAgICk6IFByb21pc2U8UmFpbkNvbXB1dGF0aW9uUXVhbGl0eT4ge1xuICAgICAgICBjb25zdCBxdWVyeVBhdGggPVxuICAgICAgICAgICAgJycgK1xuICAgICAgICAgICAgcmFpbklkICtcbiAgICAgICAgICAgICcvY29tcHV0YXRpb25zLycgK1xuICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uSWQgK1xuICAgICAgICAgICAgJy9jb21wYXJlcz9kYXRlPScgK1xuICAgICAgICAgICAgZGF0ZS50b0lTT1N0cmluZygpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCByYWluQ29tcHV0YXRpb25RdWFsaXR5ID0gbmV3IFJhaW5Db21wdXRhdGlvblF1YWxpdHkocmVzcG9uc2UuZGF0YS5xdWFsaXRpZXNbMF0pO1xuICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5xdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXIgPVxuICAgICAgICAgICAgICAgIFNwZWVkTWF0cml4Q29udGFpbmVyLkNyZWF0ZUZyb21Kc29uKFxuICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lclxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uUXVhbGl0eTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFJhaW5Qcm9ncmVzcyhyYWluSWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeVBhdGggPSAnJyArIHJhaW5JZCArICcvcHJvZ3Jlc3MnO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycsXG4gICAgICAgICAgICAgICAgLy8gdGltZW91dDogMjAwMDAwLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmluUHJvZ3Jlc3M7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvLyA9PT0gR2F1Z2VzID09PVxuXG4gICAgYXN5bmMgZ2V0R2F1Z2UoZ2F1Z2VJZDogc3RyaW5nKTogUHJvbWlzZTxHYXVnZU5vZGU+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdnYXVnZXMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogZ2F1Z2VJZCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL2dhdWdlcycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgR2F1Z2VOb2RlKHJlc3AuZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldEdhdWdlcyhcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIGFyb3VuZExhdExuZzogTGF0TG5nLFxuICAgICAgICBwYWdlQ291bnQgPSAxXG4gICAgKTogUHJvbWlzZTxBcnJheTxHYXVnZU5vZGVGaWx0ZXI+PiB7XG4gICAgICAgIGxldCBxdWVyeVBhdGggPSAnJztcbiAgICAgICAgaWYgKHRoaXMuYXNUZWFtSWQpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGF0aCArPSAnP3RlYW1JZD0nICsgdGhpcy5hc1RlYW1JZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocXVlcnlQYXRoKSB7XG4gICAgICAgICAgICBxdWVyeVBhdGggKz0gJyYnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcXVlcnlQYXRoICs9ICc/JztcbiAgICAgICAgfVxuICAgICAgICBxdWVyeVBhdGggKz0gYHJhaW5JZD0ke3JhaW5JZH0mYXJvdW5kTGF0TG5nPSR7YXJvdW5kTGF0TG5nLmxhdH0sJHthcm91bmRMYXRMbmcubG5nfWA7XG5cbiAgICAgICAgY29uc3QgZ2F1Z2VzID0gW107XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKGxldCBjb3VudCA9IDE7IGNvdW50IDw9IHBhZ2VDb3VudDsgY291bnQrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2luYXRlZFF1ZXJ5UGF0aCA9IHF1ZXJ5UGF0aCArIGAmcGFnZT0ke2NvdW50fWA7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAgICAgICAgICBrZXk6ICdnYXVnZXMnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBwYWdpbmF0ZWRRdWVyeVBhdGgsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvZ2F1Z2VzJyxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZ2F1Z2Ugb2YgcmVzcC5kYXRhLmdhdWdlcykge1xuICAgICAgICAgICAgICAgICAgICBnYXVnZXMucHVzaChuZXcgR2F1Z2VOb2RlRmlsdGVyKGdhdWdlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdhdWdlcztcbiAgICB9XG5cbiAgICBhc3luYyBnZXRHYXVnZU1lYXN1cmVzKGdhdWdlSWQ6IHN0cmluZywgYmVnaW46IERhdGUsIGVuZDogRGF0ZSk6IFByb21pc2U8R2F1Z2VNZWFzdXJlW10+IHtcbiAgICAgICAgY29uc3QgcXVlcnlQYXRoID1cbiAgICAgICAgICAgICcnICsgZ2F1Z2VJZCArICcvbWVhc3VyZXM/YmVnaW49JyArIGJlZ2luLnRvSVNPU3RyaW5nKCkgKyAnJmVuZD0nICsgZW5kLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgIGtleTogJ2dhdWdlcycsXG4gICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlQYXRoLFxuICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9nYXVnZXMnLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBnYXVnZU1lYXN1cmVzOiBHYXVnZU1lYXN1cmVbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGdhdWdlTWVhc3VyZSBvZiByZXNwLmRhdGEuZ2F1Z2VNZWFzdXJlcykge1xuICAgICAgICAgICAgZ2F1Z2VNZWFzdXJlcy5wdXNoKG5ldyBHYXVnZU1lYXN1cmUoZ2F1Z2VNZWFzdXJlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdhdWdlTWVhc3VyZXM7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFpblNwZWVkTWFwKHJhaW5Ob2RlOiBSYWluTm9kZSwgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8UmFpblNwZWVkTWFwPiB7XG4gICAgICAgIGlmICghcmFpbkNvbXB1dGF0aW9uSWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VXJsRm9yQVBJICtcbiAgICAgICAgICAgICAgICAgICAgYC9yYWlucy8ke3JhaW5Ob2RlLmlkfS9jb21wdXRhdGlvbnMvJHtyYWluQ29tcHV0YXRpb25JZH0vc3BlZWRzYCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhaW5TcGVlZE1hcChyZXNwb25zZS5kYXRhLnJhaW5TcGVlZE1hcCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dldFJhaW5TcGVlZE1hcCBlcnJvcjonLCBlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldFByb3ZpZGVycyhcbiAgICAgICAgcmFpbklkOiBzdHJpbmdcbiAgICApOiBQcm9taXNlPHtwcm92aWRlcnM6IHN0cmluZ1tdOyB0aW1lU3RlcEluTWludXRlczogbnVtYmVyW119PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHJhaW5JZCArICcvcHJvdmlkZXJzJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogcmVzcG9uc2UuZGF0YS5wcm92aWRlcnMgfHwgW10sXG4gICAgICAgICAgICAgICAgdGltZVN0ZXBJbk1pbnV0ZXM6IHJlc3BvbnNlLmRhdGEudGltZVN0ZXBJbk1pbnV0ZXMgfHwgWzUsIDEwLCAxNSwgMzAsIDYwXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dldFByb3ZpZGVycyBlcnJvcjonLCBlKTtcbiAgICAgICAgICAgIC8vIFJldHVybiBmYWxsYmFjayB2YWx1ZXMgaWYgQVBJIGNhbGwgZmFpbHNcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXSxcbiAgICAgICAgICAgICAgICB0aW1lU3RlcEluTWludXRlczogWzUsIDEwLCAxNSwgMzAsIDYwXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc2V0Um9sZXMocm9sZXM6IEFycmF5PHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yb2xlcyA9IHJvbGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGF0ZUNvbXBvbmVudHMoXG4gICAgICAgIGRhdGU6IERhdGUsXG4gICAgICAgIGM6IHtcbiAgICAgICAgICAgIHllYXI/OiBudW1iZXI7XG4gICAgICAgICAgICBtb250aD86IG51bWJlcjtcbiAgICAgICAgICAgIGRheT86IG51bWJlcjtcbiAgICAgICAgICAgIGhvdXI/OiBudW1iZXI7XG4gICAgICAgICAgICBtaW51dGU/OiBudW1iZXI7XG4gICAgICAgIH1cbiAgICApOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBkYXRlVG9TaG93ID0gbmV3IERhdGUoZGF0ZSk7XG5cbiAgICAgICAgaWYgKGMueWVhciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkYXRlVG9TaG93LnNldFVUQ0Z1bGxZZWFyKGMueWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMubW9udGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGF0ZVRvU2hvdy5zZXRVVENNb250aChjLm1vbnRoIC0gMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMuZGF5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGVUb1Nob3cuc2V0VVRDRGF0ZShjLmRheSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMuaG91ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkYXRlVG9TaG93LnNldFVUQ0hvdXJzKGMuaG91cik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMubWludXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGVUb1Nob3cuc2V0VVRDTWludXRlcyhjLm1pbnV0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZVRvU2hvdy50b0lTT1N0cmluZygpO1xuICAgIH1cbn1cbiJdfQ==
|
|
705
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvc2hhcmVkL3Byb2ZpbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osU0FBUyxFQUVULFNBQVMsRUFDVCxlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0QixRQUFRLEVBQ1IsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixRQUFRLEdBQ1gsTUFBTSxhQUFhLENBQUM7QUFJckIsT0FBTyxFQUFDLFdBQVcsRUFBa0IsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQThCLGVBQWUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUMxRSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxTQUFTLENBQUM7Ozs7OztBQU14QyxNQUFNLE9BQU8sY0FBYztJQVd2QixZQUNjLE9BQWdCLEVBQ2hCLFdBQXdCLEVBQ3hCLFVBQXNCLEVBQ3hCLE1BQWM7UUFIWixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDeEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUV0QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksZUFBZSxDQUFV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LElBQUksQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUN4QixVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN0QztRQUVELE9BQU8sVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3BDLENBQUM7OzJHQTl6QlEsY0FBYzsrR0FBZCxjQUFjLGNBRlgsTUFBTTsyRkFFVCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgRXZlbnROb2RlLFxuICAgIEdhdWdlTWVhc3VyZSxcbiAgICBHYXVnZU5vZGUsXG4gICAgTGF0TG5nLFxuICAgIFJhZGFyTm9kZSxcbiAgICBSYWluQ29tcHV0YXRpb24sXG4gICAgUmFpbkNvbXB1dGF0aW9uTWFwLFxuICAgIFJhaW5Db21wdXRhdGlvblF1YWxpdHksXG4gICAgUmFpbk5vZGUsXG4gICAgUmFpblNwZWVkTWFwLFxuICAgIFNwZWVkTWF0cml4Q29udGFpbmVyLFxuICAgIFRlYW1Ob2RlLFxufSBmcm9tICdyYWFpbi1tb2RlbCc7XG5cbmltcG9ydCB7U3RvcmFnZX0gZnJvbSAnLi9zdG9yYWdlLnNlcnZpY2UnO1xuXG5pbXBvcnQge0ZpZGpTdG9yYWdlLCBGaWRqU3RvcmFnZU5vZGV9IGZyb20gJy4vZmlkai1zdG9yYWdlLm1vZGVsJztcbmltcG9ydCB7RXJyb3JJbnRlcmZhY2UsIEZpZGpTZXJ2aWNlLCBMb2dnZXJMZXZlbEVudW19IGZyb20gJ2ZpZGotYW5ndWxhcic7XG5pbXBvcnQge1hZVHlwZX0gZnJvbSAnLi94eXR5cGUnO1xuaW1wb3J0IHtHYXVnZU5vZGVGaWx0ZXJ9IGZyb20gJy4vdG9vbHMnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFByb2ZpbGVTZXJ2aWNlIHtcbiAgICBwdWJsaWMgcmVhZHlGb3JTeW5jOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XG4gICAgcHVibGljIGFzVGVhbUlkOiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgZW1haWw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgaXNEZW1vOiBib29sZWFuO1xuICAgIHByb3RlY3RlZCByb2xlczogQXJyYXk8c3RyaW5nPjtcbiAgICBwcm90ZWN0ZWQgbm9kZURhdGE6IEZpZGpTdG9yYWdlTm9kZTtcbiAgICBwcm90ZWN0ZWQgZmlkalN0b3JhZ2U6IEZpZGpTdG9yYWdlO1xuICAgIHByb3RlY3RlZCBoYXZlVHJ5VG9SZWNvbm5lY3Q6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIHN0b3JhZ2U6IFN0b3JhZ2UsXG4gICAgICAgIHByb3RlY3RlZCBmaWRqU2VydmljZTogRmlkalNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICAgKSB7XG4gICAgICAgIHRoaXMuZW1haWwgPSB0aGlzLnN0b3JhZ2UuZ2V0KCdyYWFpbi1lbWFpbCcpO1xuICAgICAgICB0aGlzLmFzVGVhbUlkID0gdGhpcy5zdG9yYWdlLmdldCgncmFhaW4tYXNUZWFtSWQnKTtcbiAgICAgICAgdGhpcy5yZWFkeUZvclN5bmMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICAgICAgdGhpcy5yb2xlcyA9IFtdO1xuICAgICAgICB0aGlzLmZpZGpTdG9yYWdlID0gbmV3IEZpZGpTdG9yYWdlKHN0b3JhZ2UpO1xuICAgICAgICB0aGlzLmlzRGVtb01vZGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgaXNEZW1vTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNEZW1vO1xuICAgIH1cblxuICAgIHNldCBpc0RlbW9Nb2RlKG1vZGUpIHtcbiAgICAgICAgdGhpcy5pc0RlbW8gPSBtb2RlID8gbW9kZSA6IHRydWU7XG4gICAgICAgIHRoaXMuZmlkalN0b3JhZ2Uuc2V0RGVtb01vZGUodGhpcy5pc0RlbW8pO1xuICAgIH1cblxuICAgIGdldCBkZWZhdWx0VXJsRm9yQVBJKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlLmdldCgncmFhaW4tdXJsRm9yQVBJJyk7XG4gICAgfVxuXG4gICAgc2V0IGRlZmF1bHRVcmxGb3JBUEkodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zdG9yYWdlLnNldCgncmFhaW4tdXJsRm9yQVBJJywgdXJsKTtcbiAgICB9XG5cbiAgICBhc3luYyByZWZyZXNoUHJvZmlsZSgpOiBQcm9taXNlPEZpZGpTdG9yYWdlTm9kZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5ub2RlRGF0YSA9IGF3YWl0IHRoaXMuZmlkalN0b3JhZ2UuZ2V0UmVmcmVzaGVkTm9kZUNvcHkodGhpcy5maWRqU2VydmljZSk7XG4gICAgICAgICAgICB0aGlzLnNldFJvbGVzKGF3YWl0IHRoaXMuZmlkalNlcnZpY2UuZ2V0Um9sZXMoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ub2RlRGF0YTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgaXNDb25uZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZGpTZXJ2aWNlLmlzQ29ubmVjdGVkKCk7XG4gICAgfVxuXG4gICAgZ2V0RW1haWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVtYWlsID8/IHRoaXMuc3RvcmFnZS5nZXQoJ3JhYWluLWVtYWlsJywgdGhpcy5lbWFpbCk7XG4gICAgfVxuXG4gICAgc2V0RW1haWwoZW1haWw6IHN0cmluZykge1xuICAgICAgICB0aGlzLmVtYWlsID0gZW1haWw7XG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoJ3JhYWluLWVtYWlsJywgdGhpcy5lbWFpbCk7XG4gICAgfVxuXG4gICAgYXN5bmMgbG9nb3V0KGZpZGpLZXk6IHN0cmluZywgZmlkalByb2Q6IGJvb2xlYW4pIHtcbiAgICAgICAgLy8gdGhpcy5zdG9yYWdlLnJlbW92ZSgncmFhaW4tZW1haWwnKTtcblxuICAgICAgICBpZiAoIWZpZGpLZXkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5maWRqU2VydmljZS5sb2dpbkluRGVtb01vZGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWR5Rm9yU3luYy5uZXh0KHRydWUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignaW5pdEZpZGogY2F0Y2ggcGI6ICcsIGVycik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuZmlkalNlcnZpY2UubG9nb3V0KHRydWUpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLmluaXQoZmlkaktleSwge1xuICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBMb2dnZXJMZXZlbEVudW0uV0FSTiwgLy8gZmlkalByb2QgPyBMb2dnZXJMZXZlbEVudW0uV0FSTiA6IExvZ2dlckxldmVsRW51bS5JTkZPLFxuICAgICAgICAgICAgICAgIGNyeXB0bzogZmFsc2UsXG4gICAgICAgICAgICAgICAgcHJvZDogZmlkalByb2QsXG4gICAgICAgICAgICAgICAgdXNlREI6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJlYWR5Rm9yU3luYy5uZXh0KHRydWUpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2luaXRGaWRqIGNhdGNoIHBiOiAnLCBlcnIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgY2hlY2tFcnJvcihlcnJvcjogRXJyb3JJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IDQwMSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQYiBvbiBhdXRoJyk7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPCAwKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5maWRqU2VydmljZS5sb2dvdXQoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChpZ25vcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBsb2dvdXQgZXJyb3JzIGFzIHdlJ3JlIHJlZGlyZWN0aW5nIHRvIGxvZ291dCBwYWdlIGFueXdheVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nb3RvTG91dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ290b0xvdXQoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPiAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy9sb2dvdXQnLCB7XG4gICAgICAgICAgICAgICAgc2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignZ290b0xvdXQgZXJyb3I6ICcsIGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ290b0xvZ2luKCkge1xuICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nLCB7c2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlfSk7XG4gICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2xvZ2luJ10pO1xuICAgIH1cblxuICAgIGlzTG9nZ2VkSW4oKSB7XG4gICAgICAgIGNvbnN0IGxvZ2dlZEluID0gdGhpcy5maWRqU2VydmljZS5pc0xvZ2dlZEluKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdpc0xvZ2dlZEluOiAnLCBsb2dnZWRJbik7XG4gICAgICAgIHJldHVybiBsb2dnZWRJbjtcbiAgICB9XG5cbiAgICBuZWVkc0Nvbm5lY3Rpb25SZWZyZXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWRqU2VydmljZS5uZWVkc1JlZnJlc2goKTtcbiAgICB9XG5cbiAgICBhc3luYyBjb25uZWN0aW9uUmVmcmVzaCgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5maWRqU2VydmljZS5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgc3RvcmVBbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZGpTdG9yYWdlLnN0b3JlRGF0YSh0aGlzLmZpZGpTZXJ2aWNlLCB0aGlzLm5vZGVEYXRhKTtcbiAgICB9XG5cbiAgICBpc0FkbWluKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yb2xlcy5pbmRleE9mKCdhZG1pbicpID4gLTE7XG4gICAgfVxuXG4gICAgLy8gPT09IE5vdGlmaWNhdGlvbnMgPT09XG5cbiAgICBhc3luYyBjcmVhdGVOb3RpZmljYXRpb24ocmFpbklkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAgICAgIGtleTogJ25vdGlmaWNhdGlvbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL25vdGlmaWNhdGlvbnMnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgcmFpbjogcmFpbklkLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXZlbnROb2RlKHJlc3AuZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGFzeW5jIGdldE5vdGlmaWNhdGlvbnMocmFpbklkOiBzdHJpbmcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSAnP3JhaW49JyArIHJhaW5JZDtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IGFyZ3MsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9ub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzcC5kYXRhLm5vdGlmaWNhdGlvbnMubWFwKChuKSA9PiBuZXcgRXZlbnROb2RlKG4pKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0QWxsTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPEV2ZW50Tm9kZVtdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAnbm90aWZpY2F0aW9ucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9ub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzcC5kYXRhLm5vdGlmaWNhdGlvbnMubWFwKChuKSA9PiBuZXcgRXZlbnROb2RlKG4pKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8vID09PSBUZWFtcyA9PT1cblxuICAgIGFzeW5jIGdldFRlYW1zKCk6IFByb21pc2U8QXJyYXk8VGVhbU5vZGU+PiB7XG4gICAgICAgIGNvbnN0IHRlYW1zID0gW107XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAndGVhbXNfYWxsJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3RlYW1zX2FsbCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGVhbSBvZiByZXNwLmRhdGEudGVhbXMpIHtcbiAgICAgICAgICAgICAgICB0ZWFtcy5wdXNoKG5ldyBUZWFtTm9kZSh0ZWFtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGVhbXM7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0VGVhbSh0ZWFtSWQ6IHN0cmluZyk6IFByb21pc2U8VGVhbU5vZGU+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICd0ZWFtcycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiB0ZWFtSWQsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy90ZWFtcycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVGVhbU5vZGUocmVzcC5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gPT09IFJhZGFycyA9PT1cblxuICAgIGFzeW5jIGdldFJhZGFycyh0ZWFtSWQ6IHN0cmluZyk6IFByb21pc2U8QXJyYXk8UmFkYXJOb2RlPj4ge1xuICAgICAgICBjb25zdCByYWRhcnMgPSBbXTtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMnICsgKHRlYW1JZCA/ICc/dGVhbUlkPScgKyB0ZWFtSWQgOiAnJyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB1cmwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgciBvZiByZXNwLmRhdGEucmFkYXJzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFkYXIgPSBuZXcgUmFkYXJOb2RlKHIpO1xuICAgICAgICAgICAgICAgIHJhZGFycy5wdXNoKHJhZGFyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByYWRhcnM7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFkYXIoaWQ6IHN0cmluZyk6IFByb21pc2U8UmFkYXJOb2RlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IGlkLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFkYXJzJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSYWRhck5vZGUocmVzcC5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgcHV0UmFkYXIocmFkYXJOb2RlOiBSYWRhck5vZGUpOiBQcm9taXNlPFJhZGFyTm9kZT4ge1xuICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgbmFtZTogcmFkYXJOb2RlLm5hbWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWRhcnMnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcmFkYXJOb2RlLmlkLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdQVVQnLFxuICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMvJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhZGFyTm9kZShyZXNwLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRMb25lbHlSYWRhcnMocmFpbnM6IFJhaW5Ob2RlW10pOiBQcm9taXNlPFJhZGFyTm9kZVtdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhZGFycycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGxvbmVseVJhZGFyczogUmFkYXJOb2RlW10gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHJhZGFycyA9IHJlc3AuZGF0YS5yYWRhcnM7XG4gICAgICAgICAgICByYWRhcnMuZm9yRWFjaCgocmFkYXIpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByYWlucy5mb3JFYWNoKChyYWluKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJkSWQgPSByYWluLmdldExpbmsoJ3JhZGFyJykuZ2V0SWQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJkSWQgPT09IHJhZGFyLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvbmVseVJhZGFycy5wdXNoKHJhZGFyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBsb25lbHlSYWRhcnM7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFpblRpbWVmcmFtZShcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIGJlZ2luOiBEYXRlLFxuICAgICAgICBlbmQ6IERhdGUsXG4gICAgICAgIGZvcmNlZCA9IGZhbHNlLFxuICAgICAgICBwcm92aWRlciA9ICdSYWFpbicsXG4gICAgICAgIHRpbWVTdGVwSW5NaW51dGVzID0gMTBcbiAgICApOiBQcm9taXNlPFJhaW5Ob2RlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgcXVlcnlQYXRoID1cbiAgICAgICAgICAgICAgICAnJyArXG4gICAgICAgICAgICAgICAgcmFpbklkICtcbiAgICAgICAgICAgICAgICAnP2Zvcm1hdD10aW1lZnJhbWVDdW11bGF0aXZlJnByb3ZpZGVyPScgK1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyICtcbiAgICAgICAgICAgICAgICAnJnRpbWVTdGVwSW5NaW51dGVzPScgK1xuICAgICAgICAgICAgICAgIHRpbWVTdGVwSW5NaW51dGVzO1xuICAgICAgICAgICAgaWYgKGJlZ2luKSB7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXRoICs9ICcmYmVnaW49JyArIGJlZ2luLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZW5kKSB7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXRoICs9ICcmZW5kPScgKyBlbmQudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmb3JjZWQpIHtcbiAgICAgICAgICAgICAgICBxdWVyeVBhdGggKz0gJyZmb3JjZWQ9dHJ1ZSc7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXRoICs9ICcmd2l0aENvbmZpZz10cnVlJztcbiAgICAgICAgICAgICAgICAvLyBxdWVyeVBhdGggKz0gJyZieXBhc3NDYWNoZT0nICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlQYXRoLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCByYWluTm9kZSA9IG5ldyBSYWluTm9kZShyZXNwLmRhdGEudGltZWZyYW1lQ3VtdWxhdGl2ZSk7XG4gICAgICAgICAgICByYWluTm9kZS5uYW1lICs9ICcucmFkYXIudGltZWZyYW1lQ3VtdWxhdGl2ZSc7XG4gICAgICAgICAgICByZXR1cm4gcmFpbk5vZGU7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyA9PT0gUmFpbnMgPT09XG5cbiAgICBhc3luYyBnZXRSYWlucyh0ZWFtSWQ6IHN0cmluZyk6IFByb21pc2U8QXJyYXk8UmFpbk5vZGU+PiB7XG4gICAgICAgIGNvbnN0IHJhaW5zID0gW107XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnICsgKHRlYW1JZCA/ICc/dGVhbUlkPScgKyB0ZWFtSWQgOiAnJyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHVybCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCByYWluIG9mIHJlc3AuZGF0YS5yYWlucykge1xuICAgICAgICAgICAgICAgIHJhaW5zLnB1c2gobmV3IFJhaW5Ob2RlKHJhaW4pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByYWlucztcbiAgICB9XG5cbiAgICBhc3luYyBnZXRSYWluKGlkOiBzdHJpbmcpOiBQcm9taXNlPFJhaW5Ob2RlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogaWQsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucy8nLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhaW5Ob2RlKHJlc3AuZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyA9PT0gQ291bnRcblxuICAgIGFzeW5jIGdldENvdW50cyhcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIHJhbmdlOiAnaG91cicgfCAnZGF5JyB8ICdtb250aCcgfCAneWVhcic7XG4gICAgICAgICAgICBwZXJpb2RCZWdpbjogRGF0ZTtcbiAgICAgICAgfVxuICAgICk6IFByb21pc2U8e1xuICAgICAgICBwZXJjZW50SW1hZ2VzOiBYWVR5cGVbXTtcbiAgICAgICAgcGVyY2VudFJhaW55OiBYWVR5cGVbXTtcbiAgICAgICAgcGVyY2VudFE6IFhZVHlwZVtdO1xuICAgICAgICBxdWV1ZVJ1bm5pbmc6IG51bWJlcjtcbiAgICB9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gYD9yYW5nZT0ke29wdGlvbnMucmFuZ2V9JmJlZ2luPSR7b3B0aW9ucy5wZXJpb2RCZWdpbi50b0lTT1N0cmluZygpfWA7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAnL2NvdW50cycgKyBhcmdzLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMvJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBjb3VudHMgPSByZXNwLmRhdGEuY291bnRzLnJlc3VsdDtcbiAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRJbWFnZXM6IFhZVHlwZVtdID0gW10sXG4gICAgICAgICAgICAgICAgcGVyY2VudFJhaW55OiBYWVR5cGVbXSA9IFtdLFxuICAgICAgICAgICAgICAgIHBlcmNlbnRROiBYWVR5cGVbXSA9IFtdO1xuXG4gICAgICAgICAgICBjb3VudHMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5zZXREYXRlQ29tcG9uZW50cyhvcHRpb25zLnBlcmlvZEJlZ2luLCBjKTtcbiAgICAgICAgICAgICAgICBwZXJjZW50SW1hZ2VzLnB1c2gobmV3IFhZVHlwZShjLnBlcmNlbnRJbWFnZXMgPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgICAgICAgICAgcGVyY2VudFJhaW55LnB1c2gobmV3IFhZVHlwZShjLnBlcmNlbnRSYWlueSA/PyAwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgICAgICAgICBwZXJjZW50US5wdXNoKG5ldyBYWVR5cGUoYy5wZXJjZW50USA/PyAwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHBlcmNlbnRJbWFnZXMsXG4gICAgICAgICAgICAgICAgcGVyY2VudFJhaW55LFxuICAgICAgICAgICAgICAgIHBlcmNlbnRRLFxuICAgICAgICAgICAgICAgIHF1ZXVlUnVubmluZzogcmVzcC5kYXRhLnF1ZXVlUnVubmluZyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRDb3VudHNIb3VyKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgb3B0aW9uczoge3BlcmlvZEJlZ2luOiBEYXRlfVxuICAgICk6IFByb21pc2U8e1xuICAgICAgICBwZXJjZW50SW1hZ2VzOiBYWVR5cGVbXTtcbiAgICAgICAgcmFpbnlDb3VudDogWFlUeXBlW107XG4gICAgICAgIHJhaW55U3VtOiBYWVR5cGVbXTtcbiAgICAgICAgcXVldWVSdW5uaW5nOiBudW1iZXI7XG4gICAgfT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYXJncyA9IGA/cmFuZ2U9aG91ciZiZWdpbj0ke29wdGlvbnMucGVyaW9kQmVnaW4udG9JU09TdHJpbmcoKX1gO1xuXG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcmFpbklkICsgJy9jb3VudHMnICsgYXJncyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zLycsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgY291bnRzID0gcmVzcC5kYXRhLmNvdW50cy5yZXN1bHQ7XG4gICAgICAgICAgICBjb25zdCBwZXJjZW50SW1hZ2VzOiBYWVR5cGVbXSA9IFtdLFxuICAgICAgICAgICAgICAgIHJhaW55U3VtOiBYWVR5cGVbXSA9IFtdLFxuICAgICAgICAgICAgICAgIHJhaW55Q291bnQ6IFhZVHlwZVtdID0gW107XG5cbiAgICAgICAgICAgIGNvdW50cy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLnNldERhdGVDb21wb25lbnRzKG9wdGlvbnMucGVyaW9kQmVnaW4sIGMpO1xuICAgICAgICAgICAgICAgIHBlcmNlbnRJbWFnZXMucHVzaChuZXcgWFlUeXBlKGMucGVyY2VudEltYWdlcyA/PyAwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgICAgICAgICByYWlueUNvdW50LnB1c2gobmV3IFhZVHlwZShjLnJhaW55Q291bnQgPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgICAgICAgICAgcmFpbnlTdW0ucHVzaChuZXcgWFlUeXBlKGMucmFpbnlTdW0gPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwZXJjZW50SW1hZ2VzLFxuICAgICAgICAgICAgICAgIHJhaW55Q291bnQsXG4gICAgICAgICAgICAgICAgcmFpbnlTdW0sXG4gICAgICAgICAgICAgICAgcXVldWVSdW5uaW5nOiByZXNwLmRhdGEucXVldWVSdW5uaW5nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vID09PSBDb21wdXRpbmcgPT09XG5cbiAgICBhc3luYyBnZXRSYWluQ29tcHV0YXRpb25DYXJ0ZXNpYW5NYXBCeUlkKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZ1xuICAgICk6IFByb21pc2U8UmFpbkNvbXB1dGF0aW9uTWFwPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeVBhdGggPVxuICAgICAgICAgICAgICAgICcnICsgcmFpbklkICsgJy9jb21wdXRhdGlvbnMvJyArIHJhaW5Db21wdXRhdGlvbklkICsgJz9mb3JtYXQ9Y2FydGVzaWFuLW1hcCc7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5kYXRhWydjYXJ0ZXNpYW4tbWFwJ10pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uTWFwID0gbmV3IFJhaW5Db21wdXRhdGlvbk1hcChyZXNwb25zZS5kYXRhWydjYXJ0ZXNpYW4tbWFwJ10pO1xuICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uTWFwLm5hbWUgPSByYWluSWQgKyAnLnJhaW4uY2FydGVzaWFuLW1hcCc7XG4gICAgICAgICAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uTWFwO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZXNNYXBCeUlkKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZyxcbiAgICAgICAgY3VtdWxhdGl2ZUhvdXJzOiBudW1iZXJcbiAgICApOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvbk1hcD4ge1xuICAgICAgICBjb25zdCBxdWVyeVBhdGggPSBgJHtyYWluSWR9L2NvbXB1dGF0aW9ucy8ke3JhaW5Db21wdXRhdGlvbklkfS9jdW11bGF0aXZlLyR7Y3VtdWxhdGl2ZUhvdXJzfWA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5kYXRhWydjdW11bGF0aXZlJ10pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uTWFwID0gbmV3IFJhaW5Db21wdXRhdGlvbk1hcChyZXNwb25zZS5kYXRhWydjdW11bGF0aXZlJ10pO1xuICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uTWFwLm5hbWUgPSByYWluSWQgKyAnLnJhaW4uY3VtdWxhdGl2ZSc7XG4gICAgICAgICAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uTWFwO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUNhcnRlc2lhbk1hcEJ5SWQoXG4gICAgICAgIHJhaW5JZDogc3RyaW5nLFxuICAgICAgICByYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWQ6IHN0cmluZ1xuICAgICk6IFByb21pc2U8UmFpbkNvbXB1dGF0aW9uTWFwPiB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGF0aCA9IGAke3JhaW5JZH0vY3VtdWxhdGl2ZS8ke3JhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZH0/Zm9ybWF0PWNhcnRlc2lhbi1tYXBgO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5kYXRhWydjYXJ0ZXNpYW4tbWFwJ10pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uTWFwID0gbmV3IFJhaW5Db21wdXRhdGlvbk1hcChyZXNwb25zZS5kYXRhWydjYXJ0ZXNpYW4tbWFwJ10pO1xuICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uTWFwLm5hbWUgPSByYWluSWQgKyAnLnJhaW4uY2FydGVzaWFuLW1hcCc7XG4gICAgICAgICAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uTWFwO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUN1bXVsYXRpdmVzTWFwQnlJZChcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIHJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZDogc3RyaW5nLFxuICAgICAgICBjdW11bGF0aXZlSG91cnM6IG51bWJlclxuICAgICk6IFByb21pc2U8UmFpbkNvbXB1dGF0aW9uTWFwPiB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGF0aCA9IGAke3JhaW5JZH0vY3VtdWxhdGl2ZS8ke3JhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZH0vY3VtdWxhdGl2ZS8ke2N1bXVsYXRpdmVIb3Vyc31gO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5kYXRhWydjdW11bGF0aXZlJ10pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uTWFwID0gbmV3IFJhaW5Db21wdXRhdGlvbk1hcChyZXNwb25zZS5kYXRhWydjdW11bGF0aXZlJ10pO1xuICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uTWFwLm5hbWUgPSByYWluSWQgKyAnLnJhaW4uY3VtdWxhdGl2ZS1jdW11bGF0aXZlJztcbiAgICAgICAgICAgIHJldHVybiByYWluQ29tcHV0YXRpb25NYXA7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRSYWluQ29tcGFyZXMoXG4gICAgICAgIHJhaW5JZDogc3RyaW5nLFxuICAgICAgICByYWluQ29tcHV0YXRpb25JZDogc3RyaW5nXG4gICAgKTogUHJvbWlzZTx7aWQ6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nfVtdPiB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGF0aCA9ICcnICsgcmFpbklkICsgJy9jb21wdXRhdGlvbnMvJyArIHJhaW5Db21wdXRhdGlvbklkO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgICAgICAgLy8gdGltZW91dDogMjAwMDAwLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByYWluQ29tcHV0YXRpb24gPSBuZXcgUmFpbkNvbXB1dGF0aW9uKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICBjb25zdCBsaW5rcyA9IHJhaW5Db21wdXRhdGlvbi5nZXRMaW5rcygpO1xuICAgICAgICBjb25zdCByYWluQ29tcHV0YXRpb25RdWFsaXRpZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBsaW5rIG9mIGxpbmtzKSB7XG4gICAgICAgICAgICBpZiAobGluay5yZWwgPT09IFJhaW5Db21wdXRhdGlvblF1YWxpdHkuVFlQRSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gbGluay5nZXRJZCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVMZW5ndGggPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSBsaW5rLmhyZWYuc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICA0ICsgUmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5UWVBFLmxlbmd0aCArIDEgKyBkYXRlTGVuZ3RoICsgMSxcbiAgICAgICAgICAgICAgICAgICAgbGluay5ocmVmLmluZGV4T2YoJy8nICsgaWQpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXRpZXMucHVzaCh7aWQsIHZlcnNpb259KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFJhaW5Db21wYXJlQnlEYXRlKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZyxcbiAgICAgICAgZGF0ZTogRGF0ZVxuICAgICk6IFByb21pc2U8UmFpbkNvbXB1dGF0aW9uUXVhbGl0eT4ge1xuICAgICAgICBjb25zdCBxdWVyeVBhdGggPVxuICAgICAgICAgICAgJycgK1xuICAgICAgICAgICAgcmFpbklkICtcbiAgICAgICAgICAgICcvY29tcHV0YXRpb25zLycgK1xuICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uSWQgK1xuICAgICAgICAgICAgJy9jb21wYXJlcz9kYXRlPScgK1xuICAgICAgICAgICAgZGF0ZS50b0lTT1N0cmluZygpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCByYWluQ29tcHV0YXRpb25RdWFsaXR5ID0gbmV3IFJhaW5Db21wdXRhdGlvblF1YWxpdHkocmVzcG9uc2UuZGF0YS5xdWFsaXRpZXNbMF0pO1xuICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5xdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXIgPVxuICAgICAgICAgICAgICAgIFNwZWVkTWF0cml4Q29udGFpbmVyLkNyZWF0ZUZyb21Kc29uKFxuICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lclxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uUXVhbGl0eTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFJhaW5Qcm9ncmVzcyhyYWluSWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeVBhdGggPSAnJyArIHJhaW5JZCArICcvcHJvZ3Jlc3MnO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycsXG4gICAgICAgICAgICAgICAgLy8gdGltZW91dDogMjAwMDAwLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmluUHJvZ3Jlc3M7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvLyA9PT0gR2F1Z2VzID09PVxuXG4gICAgYXN5bmMgZ2V0R2F1Z2UoZ2F1Z2VJZDogc3RyaW5nKTogUHJvbWlzZTxHYXVnZU5vZGU+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdnYXVnZXMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogZ2F1Z2VJZCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL2dhdWdlcycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgR2F1Z2VOb2RlKHJlc3AuZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldEdhdWdlcyhcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIGFyb3VuZExhdExuZzogTGF0TG5nLFxuICAgICAgICBwYWdlQ291bnQgPSAxXG4gICAgKTogUHJvbWlzZTxBcnJheTxHYXVnZU5vZGVGaWx0ZXI+PiB7XG4gICAgICAgIGxldCBxdWVyeVBhdGggPSAnJztcbiAgICAgICAgaWYgKHRoaXMuYXNUZWFtSWQpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGF0aCArPSAnP3RlYW1JZD0nICsgdGhpcy5hc1RlYW1JZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocXVlcnlQYXRoKSB7XG4gICAgICAgICAgICBxdWVyeVBhdGggKz0gJyYnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcXVlcnlQYXRoICs9ICc/JztcbiAgICAgICAgfVxuICAgICAgICBxdWVyeVBhdGggKz0gYHJhaW5JZD0ke3JhaW5JZH0mYXJvdW5kTGF0TG5nPSR7YXJvdW5kTGF0TG5nLmxhdH0sJHthcm91bmRMYXRMbmcubG5nfWA7XG5cbiAgICAgICAgY29uc3QgZ2F1Z2VzID0gW107XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKGxldCBjb3VudCA9IDE7IGNvdW50IDw9IHBhZ2VDb3VudDsgY291bnQrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2luYXRlZFF1ZXJ5UGF0aCA9IHF1ZXJ5UGF0aCArIGAmcGFnZT0ke2NvdW50fWA7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAgICAgICAgICBrZXk6ICdnYXVnZXMnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBwYWdpbmF0ZWRRdWVyeVBhdGgsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvZ2F1Z2VzJyxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZ2F1Z2Ugb2YgcmVzcC5kYXRhLmdhdWdlcykge1xuICAgICAgICAgICAgICAgICAgICBnYXVnZXMucHVzaChuZXcgR2F1Z2VOb2RlRmlsdGVyKGdhdWdlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdhdWdlcztcbiAgICB9XG5cbiAgICBhc3luYyBnZXRHYXVnZU1lYXN1cmVzKGdhdWdlSWQ6IHN0cmluZywgYmVnaW46IERhdGUsIGVuZDogRGF0ZSk6IFByb21pc2U8R2F1Z2VNZWFzdXJlW10+IHtcbiAgICAgICAgY29uc3QgcXVlcnlQYXRoID1cbiAgICAgICAgICAgICcnICsgZ2F1Z2VJZCArICcvbWVhc3VyZXM/YmVnaW49JyArIGJlZ2luLnRvSVNPU3RyaW5nKCkgKyAnJmVuZD0nICsgZW5kLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAgICAgIGtleTogJ2dhdWdlcycsXG4gICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlQYXRoLFxuICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9nYXVnZXMnLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBnYXVnZU1lYXN1cmVzOiBHYXVnZU1lYXN1cmVbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGdhdWdlTWVhc3VyZSBvZiByZXNwLmRhdGEuZ2F1Z2VNZWFzdXJlcykge1xuICAgICAgICAgICAgZ2F1Z2VNZWFzdXJlcy5wdXNoKG5ldyBHYXVnZU1lYXN1cmUoZ2F1Z2VNZWFzdXJlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdhdWdlTWVhc3VyZXM7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFpblNwZWVkTWFwKHJhaW5Ob2RlOiBSYWluTm9kZSwgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8UmFpblNwZWVkTWFwPiB7XG4gICAgICAgIGlmICghcmFpbkNvbXB1dGF0aW9uSWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VXJsRm9yQVBJICtcbiAgICAgICAgICAgICAgICAgICAgYC9yYWlucy8ke3JhaW5Ob2RlLmlkfS9jb21wdXRhdGlvbnMvJHtyYWluQ29tcHV0YXRpb25JZH0vc3BlZWRzYCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhaW5TcGVlZE1hcChyZXNwb25zZS5kYXRhLnJhaW5TcGVlZE1hcCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dldFJhaW5TcGVlZE1hcCBlcnJvcjonLCBlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldFByb3ZpZGVycyhcbiAgICAgICAgcmFpbklkOiBzdHJpbmdcbiAgICApOiBQcm9taXNlPHtwcm92aWRlcnM6IHN0cmluZ1tdOyB0aW1lU3RlcEluTWludXRlczogbnVtYmVyW119PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHJhaW5JZCArICcvcHJvdmlkZXJzJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogcmVzcG9uc2UuZGF0YS5wcm92aWRlcnMgfHwgW10sXG4gICAgICAgICAgICAgICAgdGltZVN0ZXBJbk1pbnV0ZXM6IHJlc3BvbnNlLmRhdGEudGltZVN0ZXBJbk1pbnV0ZXMgfHwgWzUsIDEwLCAxNSwgMzAsIDYwXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dldFByb3ZpZGVycyBlcnJvcjonLCBlKTtcbiAgICAgICAgICAgIC8vIFJldHVybiBmYWxsYmFjayB2YWx1ZXMgaWYgQVBJIGNhbGwgZmFpbHNcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXSxcbiAgICAgICAgICAgICAgICB0aW1lU3RlcEluTWludXRlczogWzUsIDEwLCAxNSwgMzAsIDYwXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc2V0Um9sZXMocm9sZXM6IEFycmF5PHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yb2xlcyA9IHJvbGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGF0ZUNvbXBvbmVudHMoXG4gICAgICAgIGRhdGU6IERhdGUsXG4gICAgICAgIGM6IHtcbiAgICAgICAgICAgIHllYXI/OiBudW1iZXI7XG4gICAgICAgICAgICBtb250aD86IG51bWJlcjtcbiAgICAgICAgICAgIGRheT86IG51bWJlcjtcbiAgICAgICAgICAgIGhvdXI/OiBudW1iZXI7XG4gICAgICAgICAgICBtaW51dGU/OiBudW1iZXI7XG4gICAgICAgIH1cbiAgICApOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBkYXRlVG9TaG93ID0gbmV3IERhdGUoZGF0ZSk7XG5cbiAgICAgICAgaWYgKGMueWVhciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkYXRlVG9TaG93LnNldFVUQ0Z1bGxZZWFyKGMueWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMubW9udGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGF0ZVRvU2hvdy5zZXRVVENNb250aChjLm1vbnRoIC0gMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMuZGF5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGVUb1Nob3cuc2V0VVRDRGF0ZShjLmRheSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMuaG91ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkYXRlVG9TaG93LnNldFVUQ0hvdXJzKGMuaG91cik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMubWludXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGVUb1Nob3cuc2V0VVRDTWludXRlcyhjLm1pbnV0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZVRvU2hvdy50b0lTT1N0cmluZygpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -39,7 +39,7 @@ export class CompareManager {
|
|
|
39
39
|
this.speeds = rainSpeedMap.rainSpeeds.map((rainSpeed) => {
|
|
40
40
|
const center = rainSpeed.getCenter();
|
|
41
41
|
const targetPosition = this.calculateTargetPosition(rainSpeed, center);
|
|
42
|
-
return new MapLatLng(targetPosition.lat, targetPosition.lng, rainSpeed.azimuthInDegrees, `az${rainSpeed.azimuthInDegrees} sp${rainSpeed.speedInMetersPerSec} trust${rainSpeed.trustRatio}`, `az${rainSpeed.azimuthInDegrees} sp${rainSpeed.speedInMetersPerSec} trust${rainSpeed.trustRatio}`, rainSpeed.speedInMetersPerSec);
|
|
42
|
+
return new MapLatLng(targetPosition.lat, targetPosition.lng, rainSpeed.azimuthInDegrees, `az${rainSpeed.azimuthInDegrees} sp${rainSpeed.speedInMetersPerSec} trust${rainSpeed.trustRatio}`, `az${rainSpeed.azimuthInDegrees} sp${rainSpeed.speedInMetersPerSec} trust${rainSpeed.trustRatio}`, rainSpeed.speedInMetersPerSec * 10);
|
|
43
43
|
});
|
|
44
44
|
}
|
|
45
45
|
else {
|
|
@@ -264,4 +264,4 @@ export class CompareManager {
|
|
|
264
264
|
return rainSpeed.getCenter();
|
|
265
265
|
}
|
|
266
266
|
}
|
|
267
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGFyZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9zaGFyZWQvdG9vbHMvQ29tcGFyZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNuQyxPQUFPLEVBU0gsb0JBQW9CLEdBQ3ZCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFrQmpDLE1BQU0sT0FBTyxjQUFjO0lBNEJ2QixZQUNjLGNBQThCLEVBQ2pDLFlBQXdCLEdBQUcsRUFBRSxHQUFFLENBQUM7UUFEN0IsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ2pDLGNBQVMsR0FBVCxTQUFTLENBQXVCO1FBRXZDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBSUQsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFXLFFBQVEsQ0FBQyxRQUFrQjtRQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVNLFFBQVE7UUFDWCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUVqQixJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ2pCLGVBQWUsRUFBRSxF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QUFFLEtBQUssSUFBSSxDQUFDLHFCQUFxQixFQUFFLE9BQU8sRUFBRTtvQkFDOUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7aUJBQ1o7cUJBQU07b0JBQ0gsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ1g7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1NBQ3pDO0lBQ0wsQ0FBQztJQUVTLG1CQUFtQjtRQUN6Qiw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRU8sdUJBQXVCLENBQzNCLFNBQW9CLEVBQ3BCLE1BQWM7UUFFZCxPQUFPLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge01hcExhdExuZ30gZnJvbSAncmFhaW4tdWknO1xuaW1wb3J0IHtcbiAgICBJQ29tcGFyZVBlckRhdGUsXG4gICAgSUNvbXBhcmVzLFxuICAgIExhdExuZyxcbiAgICBQb3NpdGlvblZhbHVlLFxuICAgIFF1YWxpdHlQb2ludCxcbiAgICBSYWluQ29tcHV0YXRpb25RdWFsaXR5LFxuICAgIFJhaW5Ob2RlLFxuICAgIFJhaW5TcGVlZCxcbiAgICBTcGVlZE1hdHJpeENvbnRhaW5lcixcbn0gZnJvbSAncmFhaW4tbW9kZWwnO1xuaW1wb3J0IHtYWVR5cGV9IGZyb20gJy4uL3h5dHlwZSc7XG5pbXBvcnQge1Byb2ZpbGVTZXJ2aWNlfSBmcm9tICcuLi9wcm9maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHtGcmFtZVNldH0gZnJvbSAnLi9GcmFtZVNldCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbXBhcmVUYXJnZXQge1xuICAgIGRhdGU6IERhdGU7XG4gICAgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZztcbiAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVUlDb21wYXJlIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgY29tcGFyZVBvaW50czogWFlUeXBlW107XG4gICAgY29tcGFyZVBvaW50c01heDogWFlUeXBlO1xuICAgIGNvbXBhcmVQb2ludHNIaXN0b3J5OiBRdWFsaXR5UG9pbnRbXTtcbiAgICByZW1hcmtzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wYXJlTWFuYWdlciB7XG4gICAgcHVibGljIGdhdWdlc0luTWFwOiBNYXBMYXRMbmdbXTtcbiAgICBwdWJsaWMgZ2F1Z2VzSW5Db21wYXJlOiBNYXBMYXRMbmdbXTtcbiAgICBwdWJsaWMgc2VsZWN0ZWRHYXVnZXM6IE1hcExhdExuZ1tdO1xuICAgIHB1YmxpYyBzZWxlY3RlZFBpeGVsczogTWFwTGF0TG5nW107XG4gICAgcHVibGljIHBpeGVsc1NvbHV0aW9uczogTWFwTGF0TG5nW11bXTtcbiAgICBwdWJsaWMgc3BlZWRzOiBNYXBMYXRMbmdbXTtcblxuICAgIC8vIGZyb20gY29tcGFyZXNUaW1lbGluZVxuICAgIHB1YmxpYyBjb21wYXJlTmFtZXM6IHN0cmluZ1tdO1xuICAgIHB1YmxpYyB1aUNvbXBhcmVzOiBJVUlDb21wYXJlW107XG4gICAgcHVibGljIGNvbXBhcmVTcGVlZE1hdHJpeDogUG9zaXRpb25WYWx1ZVtdO1xuICAgIHB1YmxpYyBjb21wYXJlVmVyc2lvbjogc3RyaW5nO1xuICAgIHB1YmxpYyBjb21wYXJlVHJ1c3RlZEluZGljYXRvcjogbnVtYmVyO1xuICAgIHB1YmxpYyBjb21wYXJlRGF0ZXM6IERhdGVbXTtcblxuICAgIHB1YmxpYyBjdXJyZW50UXVhbGl0eURvbmVEYXRlOiBEYXRlO1xuICAgIHB1YmxpYyBjdXJyZW50UXVhbGl0eUxhdW5jaGVkQnk6IHN0cmluZztcbiAgICBwdWJsaWMgY3VycmVudFF1YWxpdHlUaW1lU3BlbnRJbk1zOiBudW1iZXI7XG4gICAgcHVibGljIGdsb2JhbENvbXBhcmVQb2ludHM6IFhZVHlwZVtdO1xuICAgIHB1YmxpYyBnbG9iYWxDb21wYXJlUG9pbnRzTWF4OiBYWVR5cGU7XG4gICAgcHVibGljIGNvbXBhcmVTcGVlZDoge2FuZ2xlSW5EZWdyZWVzOiBudW1iZXI7IHBpeGVsc1BlclBlcmlvZDogbnVtYmVyfTtcbiAgICBwcm90ZWN0ZWQgYnVpbGRDb21wYXJlczogSUNvbXBhcmVzO1xuICAgIHByb3RlY3RlZCBzZWxlY3RlZEdhdWdlOiBRdWFsaXR5UG9pbnQ7XG4gICAgcHJvdGVjdGVkIHNlbGVjdGVkR2F1Z2VJblBvaW50czogUXVhbGl0eVBvaW50O1xuICAgIHByb3RlY3RlZCBzZWxlY3RlZEdhdWdlSW5Qb2ludHNEZXRhaWw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzUGVyRGF0ZTogYW55O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBwcm9maWxlU2VydmljZTogUHJvZmlsZVNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBvbkNoYW5nZXM6ICgpID0+IHZvaWQgPSAoKSA9PiB7fVxuICAgICkge1xuICAgICAgICB0aGlzLmNsZWFuQWxsKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9yYWluTm9kZTogUmFpbk5vZGU7XG5cbiAgICBwdWJsaWMgZ2V0IHJhaW5Ob2RlKCk6IFJhaW5Ob2RlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JhaW5Ob2RlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgcmFpbk5vZGUocmFpbk5vZGU6IFJhaW5Ob2RlKSB7XG4gICAgICAgIHRoaXMuX3JhaW5Ob2RlID0gcmFpbk5vZGU7XG4gICAgICAgIHRoaXMuY2xlYW5BbGwoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYW5BbGwoKSB7XG4gICAgICAgIHRoaXMuZ2F1Z2VzSW5NYXAgPSBbXTtcbiAgICAgICAgdGhpcy5nYXVnZXNJbkNvbXBhcmUgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlcyA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUGl4ZWxzID0gW107XG4gICAgICAgIHRoaXMucGl4ZWxzU29sdXRpb25zID0gW107XG4gICAgICAgIHRoaXMuY29tcGFyZURhdGVzID0gW107XG4gICAgICAgIHRoaXMuc3BlZWRzID0gW107XG5cbiAgICAgICAgdGhpcy5idWlsZENvbXBhcmVzID0ge1xuICAgICAgICAgICAgY29tcGFyZXNQZXJEYXRlOiBbXSxcbiAgICAgICAgICAgIGNvbXBhcmVDdW11bGF0aXZlOiBudWxsLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdsb2JhbENvbXBhcmVQb2ludHMgPSBbXTtcbiAgICAgICAgdGhpcy5nbG9iYWxDb21wYXJlUG9pbnRzTWF4ID0gbmV3IFhZVHlwZSgwLCAwKTtcbiAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlID0ge307XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBudWxsO1xuICAgICAgICB0aGlzLmNsZWFuQ29tcGFyZVF1YWxpdHkoJ25vIGNvbXBhcmUgeWV0Jyk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVmcmVzaFNwZWVkcyhmcmFtZVNldDogRnJhbWVTZXQpIHtcbiAgICAgICAgY29uc3QgcmFpblNwZWVkTWFwID0gYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZS5nZXRSYWluU3BlZWRNYXAoXG4gICAgICAgICAgICB0aGlzLnJhaW5Ob2RlLFxuICAgICAgICAgICAgZnJhbWVTZXQucmFpbkNvbXB1dGF0aW9uSWRcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAocmFpblNwZWVkTWFwPy5yYWluU3BlZWRzKSB7XG4gICAgICAgICAgICB0aGlzLnNwZWVkcyA9IHJhaW5TcGVlZE1hcC5yYWluU3BlZWRzLm1hcCgocmFpblNwZWVkOiBSYWluU3BlZWQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZW50ZXIgPSByYWluU3BlZWQuZ2V0Q2VudGVyKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0UG9zaXRpb24gPSB0aGlzLmNhbGN1bGF0ZVRhcmdldFBvc2l0aW9uKHJhaW5TcGVlZCwgY2VudGVyKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTWFwTGF0TG5nKFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRQb3NpdGlvbi5sYXQsXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFBvc2l0aW9uLmxuZyxcbiAgICAgICAgICAgICAgICAgICAgcmFpblNwZWVkLmF6aW11dGhJbkRlZ3JlZXMsXG4gICAgICAgICAgICAgICAgICAgIGBheiR7cmFpblNwZWVkLmF6aW11dGhJbkRlZ3JlZXN9IHNwJHtyYWluU3BlZWQuc3BlZWRJbk1ldGVyc1BlclNlY30gdHJ1c3Qke3JhaW5TcGVlZC50cnVzdFJhdGlvfWAsXG4gICAgICAgICAgICAgICAgICAgIGBheiR7cmFpblNwZWVkLmF6aW11dGhJbkRlZ3JlZXN9IHNwJHtyYWluU3BlZWQuc3BlZWRJbk1ldGVyc1BlclNlY30gdHJ1c3Qke3JhaW5TcGVlZC50cnVzdFJhdGlvfWAsXG4gICAgICAgICAgICAgICAgICAgIHJhaW5TcGVlZC5zcGVlZEluTWV0ZXJzUGVyU2VjXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zcGVlZHMgPSBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIHJlZnJlc2hDb21wYXJlUXVhbGl0eShmcmFtZVNldDogRnJhbWVTZXQpIHtcbiAgICAgICAgY29uc3QgY29tcGFyZVBlckRhdGUgPSB0aGlzLmdldENvbXBhcmVQZXJEYXRlKGZyYW1lU2V0LmRhdGUpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFjb21wYXJlUGVyRGF0ZSB8fFxuICAgICAgICAgICAgIWNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHk/LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lclxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYW5Db21wYXJlUXVhbGl0eShcbiAgICAgICAgICAgICAgICAnbm8gY3VycmVudCBxdWFsaXR5ICcgKyBPYmplY3Qua2V5cyh0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGUpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVpQ29tcGFyZXM6IElVSUNvbXBhcmVbXSA9IGNvbXBhcmVQZXJEYXRlLmNvbXBhcmVUaW1lbGluZS5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbmFtZTogYy5uYW1lLFxuICAgICAgICAgICAgICAgIGNvbXBhcmVQb2ludHM6IGMucXVhbGl0eVBvaW50cy5tYXAoXG4gICAgICAgICAgICAgICAgICAgIChwKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFhZVHlwZShwLmdldEdhdWdlVmFsdWUoKSwgcC5nZXRSYWluVmFsdWUoKSwgMiwgcC5nYXVnZUxhYmVsLCBwLmdhdWdlSWQpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjb21wYXJlUG9pbnRzTWF4OiBuZXcgWFlUeXBlKGMubWF4VmFsdWUgKiAxLjIsIGMubWF4VmFsdWUgKiAxLjIpLFxuICAgICAgICAgICAgICAgIGNvbXBhcmVQb2ludHNIaXN0b3J5OiBjLnF1YWxpdHlQb2ludHNMZWdhY3ksXG4gICAgICAgICAgICAgICAgcmVtYXJrczogYy5yZW1hcmtzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50UXVhbGl0eURvbmVEYXRlID0gY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5pc0RvbmVEYXRlO1xuICAgICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5VGltZVNwZW50SW5NcyA9IGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkudGltZVNwZW50SW5NcztcbiAgICAgICAgdGhpcy5jdXJyZW50UXVhbGl0eUxhdW5jaGVkQnkgPSBjb21wYXJlUGVyRGF0ZS5yYWluQ29tcHV0YXRpb25RdWFsaXR5LmxhdW5jaGVkQnk7XG4gICAgICAgIHRoaXMuY29tcGFyZVZlcnNpb24gPSBjb21wYXJlUGVyRGF0ZS5yYWluQ29tcHV0YXRpb25RdWFsaXR5LmdldFZlcnNpb24oKTtcblxuICAgICAgICB0aGlzLmNvbXBhcmVTcGVlZCA9XG4gICAgICAgICAgICBjb21wYXJlUGVyRGF0ZS5yYWluQ29tcHV0YXRpb25RdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lci5nZXRTcGVlZCgpO1xuICAgICAgICB0aGlzLmNvbXBhcmVOYW1lcyA9IHVpQ29tcGFyZXMubWFwKChjKSA9PiBjLm5hbWUpO1xuICAgICAgICB0aGlzLnVpQ29tcGFyZXMgPSB1aUNvbXBhcmVzO1xuXG4gICAgICAgIHRoaXMub25DaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVmcmVzaEdsb2JhbENvbXBhcmVRdWFsaXR5KFxuICAgICAgICB0YXJnZXRzT3JkZXJlZDogSUNvbXBhcmVUYXJnZXRbXSxcbiAgICAgICAgd2l0aENvbXBhcmVEdXBsaWNhdGU6IGJvb2xlYW5cbiAgICApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hSYWluQ29tcHV0YXRpb25RdWFsaXRpZXModGFyZ2V0c09yZGVyZWQpO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmJ1aWxkQ29tcGFyZXNUaW1lbGluZSh0YXJnZXRzT3JkZXJlZCwgd2l0aENvbXBhcmVEdXBsaWNhdGUpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZSkge1xuICAgICAgICAgICAgICAgIC8vIHRocm93IEVycm9yKCduZWVkcyBjdW11bGF0aXZlIGNvbXBhcmUnKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvdW50Rm9yQXZlcmFnZSA9IHRhcmdldHNPcmRlcmVkLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IG1heFZhbHVlID0gKHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZS5tYXhWYWx1ZSAvIDEyKSAqIDEuMjtcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50cyA9IHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZS5xdWFsaXR5UG9pbnRzLm1hcChcbiAgICAgICAgICAgICAgICAocXApID0+XG4gICAgICAgICAgICAgICAgICAgIG5ldyBYWVR5cGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBxcC5nZXRHYXVnZVZhbHVlKCkgLyAxMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHFwLmdldFJhaW5WYWx1ZSgpIC8gMTIsXG4gICAgICAgICAgICAgICAgICAgICAgICAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgcXAuZ2F1Z2VMYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHFwLmdhdWdlSWRcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50c01heCA9IG5ldyBYWVR5cGUobWF4VmFsdWUsIG1heFZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgc2V0R2F1Z2VzSW5NYXAoKSB7XG4gICAgICAgIGxldCBnYXVnZXNUb0ZpbHRlciA9IGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0R2F1Z2VzKFxuICAgICAgICAgICAgdGhpcy5yYWluTm9kZT8uaWQsXG4gICAgICAgICAgICB0aGlzLnJhaW5Ob2RlLmdldENlbnRlcigpXG4gICAgICAgICk7XG4gICAgICAgIGdhdWdlc1RvRmlsdGVyID0gZ2F1Z2VzVG9GaWx0ZXJcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgYS5hcHByb3hEaXN0YW5jZUZyb20odGhpcy5yYWluTm9kZS5nZXRDZW50ZXIoKSkgLVxuICAgICAgICAgICAgICAgICAgICBiLmFwcHJveERpc3RhbmNlRnJvbSh0aGlzLnJhaW5Ob2RlLmdldENlbnRlcigpKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigodiwgaW5kZXgpID0+IGluZGV4IDwgMjAwKTtcblxuICAgICAgICBjb25zdCByYWluTm9kZUdhdWdlSWRzID0gdGhpcy5yYWluTm9kZS5nZXRMaW5rcygnZ2F1Z2UnKS5tYXAoKGwpID0+IGwuZ2V0SWQoKSk7XG5cbiAgICAgICAgY29uc3QgdmlzaWJsZUdhdWdlcyA9IGdhdWdlc1RvRmlsdGVyLmZpbHRlcigoZykgPT4gcmFpbk5vZGVHYXVnZUlkcy5pbmRleE9mKGcuaWQpID4gLTEpO1xuICAgICAgICBjb25zb2xlLmxvZygndmlzaWJsZUdhdWdlczonLCB2aXNpYmxlR2F1Z2VzKTtcblxuICAgICAgICBjb25zdCBnYXVnZXNMYXRMbmc6IE1hcExhdExuZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZ2F1Z2Ugb2YgdmlzaWJsZUdhdWdlcykge1xuICAgICAgICAgICAgZ2F1Z2VzTGF0TG5nLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IE1hcExhdExuZyhnYXVnZS5sYXRpdHVkZSwgZ2F1Z2UubG9uZ2l0dWRlLCB1bmRlZmluZWQsIGdhdWdlLmlkLCBnYXVnZS5uYW1lKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdhdWdlc0luTWFwID0gZ2F1Z2VzTGF0TG5nO1xuICAgIH1cblxuICAgIGFzeW5jIHNldEdhdWdlc0luQ29tcGFyZSgpIHtcbiAgICAgICAgY29uc3QgcXVhbGl0eVBvaW50czogUXVhbGl0eVBvaW50W10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjb21wYXJlIG9mIHRoaXMudWlDb21wYXJlcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBxdWFsaXR5UG9pbnQgb2YgY29tcGFyZS5jb21wYXJlUG9pbnRzSGlzdG9yeSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFscmVhZHlBZGRlZCA9IHF1YWxpdHlQb2ludHMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAocCkgPT4gcD8uZ2F1Z2VJZCA9PT0gcXVhbGl0eVBvaW50LmdhdWdlSWRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChhbHJlYWR5QWRkZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHF1YWxpdHlQb2ludHMucHVzaChxdWFsaXR5UG9pbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ2F1Z2VzSW5Db21wYXJlID0gcXVhbGl0eVBvaW50cy5tYXAoKHApID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTWFwTGF0TG5nKFxuICAgICAgICAgICAgICAgIHAuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS5sYXQsXG4gICAgICAgICAgICAgICAgcC5nYXVnZUNhcnRlc2lhblZhbHVlLmxuZyxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHAuZ2F1Z2VJZCxcbiAgICAgICAgICAgICAgICBwLmdhdWdlTGFiZWwgKyAnPicgKyBwLmdldEdhdWdlVmFsdWUoKSxcbiAgICAgICAgICAgICAgICBwLmdldEdhdWdlVmFsdWUoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZXNldFNlbGVjdGVkR2F1Z2VzKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2VsZWN0R2F1Z2UoZ2F1Z2VJZDogc3RyaW5nLCBjb21wYXJlSW5kZXg6IG51bWJlcikge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnc2VsZWN0R2F1Z2UnLCBnYXVnZUlkLCBjb21wYXJlSW5kZXgpO1xuXG4gICAgICAgIGlmIChnYXVnZUlkKSB7XG4gICAgICAgICAgICBjb25zdCB4eXMgPSB0aGlzLmdldEN1cnJlbnRRdWFsaXR5UG9pbnRzKGNvbXBhcmVJbmRleCkuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChwKSA9PiBwLmdhdWdlSWQgPT09IGdhdWdlSWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2UgPSB4eXMubGVuZ3RoID09PSAxID8geHlzWzBdIDogbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRHYXVnZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzZXRTZWxlY3RlZEdhdWdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gdGhpcy5nZXRDdXJyZW50UXVhbGl0eVBvaW50cyhjb21wYXJlSW5kZXgpLmZpbHRlcihcbiAgICAgICAgICAgIChwKSA9PiBwLmdhdWdlSWQgPT09IHRoaXMuc2VsZWN0ZWRHYXVnZS5nYXVnZUlkXG4gICAgICAgICk7XG4gICAgICAgIGxldCBwaXhlbHNTb2x1dGlvbnM6IE1hcExhdExuZ1tdW10gPSBbXTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgcmVtYXJrcyA9IEpTT04ucGFyc2Uoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLnJlbWFyaykuc29ydChcbiAgICAgICAgICAgICAgICAoYSwgYikgPT4gYS5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtIC0gYi5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVtYXJrcyk7XG4gICAgICAgICAgICBwaXhlbHNTb2x1dGlvbnMgPSByZW1hcmtzLm1hcCgocmVtYXJrKSA9PlxuICAgICAgICAgICAgICAgIHJlbWFyay5zb2x1dGlvbkZvckdhdWdlLnBpeGVscy5tYXAoXG4gICAgICAgICAgICAgICAgICAgIChwKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE1hcExhdExuZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnkgKyAwLjAwNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnggKyAwLjAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJycgKyAhcmVtYXJrLm5vdFBvc3NpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnICsgIXJlbWFyay5ub3RQb3NzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgdGltZURlbHRhSW5NaW51dGVzID0gc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdldFRpbWVEZWx0YUluTWludXRlcygpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHNEZXRhaWwgPVxuICAgICAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2F1Z2VMYWJlbCArXG4gICAgICAgICAgICAgICAgJyA+ICcgK1xuICAgICAgICAgICAgICAgIE1hdGgucm91bmQoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdldEdhdWdlVmFsdWUoKSAqIDEwMCkgLyAxMDAgK1xuICAgICAgICAgICAgICAgICcgLyAnICtcbiAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXS5nZXRSYWluVmFsdWUoKSAqIDEwMCkgLyAxMDAgK1xuICAgICAgICAgICAgICAgICcgZFQ9JyArXG4gICAgICAgICAgICAgICAgdGltZURlbHRhSW5NaW51dGVzO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMucGl4ZWxzU29sdXRpb25zID0gW107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW1xuICAgICAgICAgICAgbmV3IE1hcExhdExuZyhcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLmxhdCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLmxuZyxcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VJZCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUxhYmVsICtcbiAgICAgICAgICAgICAgICAgICAgJz4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLnZhbHVlXG4gICAgICAgICAgICApLFxuICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0R2F1Z2VJbkNvbXBhcmUoKTtcblxuICAgICAgICBjb25zdCBwaXhlbHM6IE1hcExhdExuZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcmFpbkNhcnRlc2lhblZhbHVlIG9mIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzLnJhaW5DYXJ0ZXNpYW5WYWx1ZXMpIHtcbiAgICAgICAgICAgIHBpeGVscy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBNYXBMYXRMbmcocmFpbkNhcnRlc2lhblZhbHVlLmxhdCArIDAuMDA1LCByYWluQ2FydGVzaWFuVmFsdWUubG5nICsgMC4wMSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IHBpeGVscztcblxuICAgICAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IHBpeGVsc1NvbHV0aW9ucztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRDb21wYXJlc1RpbWVsaW5lKFxuICAgICAgICB0YXJnZXRzT3JkZXJlZDogSUNvbXBhcmVUYXJnZXRbXSxcbiAgICAgICAgd2l0aENvbXBhcmVEdXBsaWNhdGU6IGJvb2xlYW5cbiAgICApOiBQcm9taXNlPElDb21wYXJlcz4ge1xuICAgICAgICBjb25zdCBjb21wYXJlRGF0ZXMgPSB0YXJnZXRzT3JkZXJlZC5tYXAoKHQpID0+IHQuZGF0ZSk7XG5cbiAgICAgICAgY29uc3QgcXVhbGl0aWVzOiBSYWluQ29tcHV0YXRpb25RdWFsaXR5W10gPSBjb21wYXJlRGF0ZXNcbiAgICAgICAgICAgIC5maWx0ZXIoKGQpID0+ICEhZClcbiAgICAgICAgICAgIC5tYXAoKGQpID0+IHRoaXMuZ2V0UmFpbkNvbXB1dGF0aW9uUXVhbGl0eShkKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHJjcSkgPT4gISFyY3EpO1xuXG4gICAgICAgIHRoaXMuY29tcGFyZURhdGVzID0gY29tcGFyZURhdGVzLnNsaWNlKDEsIC0xKTtcblxuICAgICAgICB0aGlzLmJ1aWxkQ29tcGFyZXMgPSBTcGVlZE1hdHJpeENvbnRhaW5lci5CdWlsZENvbXBhcmVzKHF1YWxpdGllcywgIXdpdGhDb21wYXJlRHVwbGljYXRlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRDb21wYXJlcztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0Q29tcGFyZVBlckRhdGUoZGF0ZTogRGF0ZSk6IElDb21wYXJlUGVyRGF0ZSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5idWlsZENvbXBhcmVzLmNvbXBhcmVzUGVyRGF0ZS5maWx0ZXIoXG4gICAgICAgICAgICAoYykgPT4gYy5kYXRlLmdldFRpbWUoKSA9PT0gZGF0ZS5nZXRUaW1lKClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nWzBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRDdXJyZW50UXVhbGl0eVBvaW50cyhjb21wYXJlSW5kZXg6IG51bWJlcikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnVpQ29tcGFyZXMubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICBjb21wYXJlSW5kZXggPCAwIHx8XG4gICAgICAgICAgICB0aGlzLmNvbXBhcmVOYW1lcy5sZW5ndGggPCBjb21wYXJlSW5kZXhcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy51aUNvbXBhcmVzW2NvbXBhcmVJbmRleF0uY29tcGFyZVBvaW50c0hpc3Rvcnk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNsZWFuQ29tcGFyZVF1YWxpdHkoZGV0YWlscz86IHN0cmluZykge1xuICAgICAgICB0aGlzLmNvbXBhcmVWZXJzaW9uID0gZGV0YWlscztcbiAgICAgICAgdGhpcy5jb21wYXJlTmFtZXMgPSBbXTtcbiAgICAgICAgdGhpcy51aUNvbXBhcmVzID0gW107XG4gICAgICAgIHRoaXMuY29tcGFyZVNwZWVkTWF0cml4ID0gW107XG4gICAgICAgIHRoaXMuY29tcGFyZVRydXN0ZWRJbmRpY2F0b3IgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50UXVhbGl0eURvbmVEYXRlID0gbmV3IERhdGUoLTEpO1xuICAgICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5TGF1bmNoZWRCeSA9ICcnO1xuICAgICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5VGltZVNwZW50SW5NcyA9IC0xO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBmZXRjaFJhaW5Db21wdXRhdGlvblF1YWxpdGllcyh0YXJnZXRzT3JkZXJlZDogSUNvbXBhcmVUYXJnZXRbXSkge1xuICAgICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzT3JkZXJlZCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICF0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGVbdGFyZ2V0LmRhdGUudG9JU09TdHJpbmcoKV0gJiZcbiAgICAgICAgICAgICAgICB0YXJnZXQucmFpbkNvbXB1dGF0aW9uUXVhbGl0eUlkXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByYWluQ29tcHV0YXRpb25RdWFsaXR5ID0gYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZS5nZXRSYWluQ29tcGFyZUJ5RGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmFpbk5vZGUuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQucmFpbkNvbXB1dGF0aW9uSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuZGF0ZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmFpbkNvbXB1dGF0aW9uUXVhbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW3RhcmdldC5kYXRlLnRvSVNPU3RyaW5nKCldID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFJhaW5Db21wdXRhdGlvblF1YWxpdHkoZGF0ZTogRGF0ZSk6IFJhaW5Db21wdXRhdGlvblF1YWxpdHkge1xuICAgICAgICByZXR1cm4gdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW2RhdGUudG9JU09TdHJpbmcoKV07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNlbGVjdEdhdWdlSW5Db21wYXJlKCkge1xuICAgICAgICBjb25zdCBnbG9iYWxDb21wYXJlUG9pbnRzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmdsb2JhbENvbXBhcmVQb2ludHMpKTtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIGdsb2JhbENvbXBhcmVQb2ludHMpIHtcbiAgICAgICAgICAgIGlmIChwLmlkID09PSB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cz8uZ2F1Z2VJZCkge1xuICAgICAgICAgICAgICAgIHAuciA9IDEwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwLnIgPSAyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50cyA9IGdsb2JhbENvbXBhcmVQb2ludHM7XG5cbiAgICAgICAgZm9yIChjb25zdCBjb21wYXJlIG9mIHRoaXMudWlDb21wYXJlcykge1xuICAgICAgICAgICAgY29uc3QgY29tcGFyZVBvaW50cyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29tcGFyZS5jb21wYXJlUG9pbnRzKSk7XG4gICAgICAgICAgICBjb21wYXJlUG9pbnRzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocC5pZCA9PT0gdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHM/LmdhdWdlSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcC5yID0gMTA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcC5yID0gMztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbXBhcmUuY29tcGFyZVBvaW50cyA9IGNvbXBhcmVQb2ludHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzZXRTZWxlY3RlZEdhdWdlcygpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3Jlc2V0U2VsZWN0ZWRHYXVnZXMgcmVzZXQnKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBudWxsO1xuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBbXTtcbiAgICAgICAgdGhpcy5waXhlbHNTb2x1dGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RHYXVnZUluQ29tcGFyZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlVGFyZ2V0UG9zaXRpb24oXG4gICAgICAgIHJhaW5TcGVlZDogUmFpblNwZWVkLFxuICAgICAgICBjZW50ZXI6IExhdExuZ1xuICAgICk6IHtsYXQ6IG51bWJlcjsgbG5nOiBudW1iZXJ9IHtcbiAgICAgICAgcmV0dXJuIHJhaW5TcGVlZC5nZXRDZW50ZXIoKTtcbiAgICB9XG59XG4iXX0=
|
|
267
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGFyZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9zaGFyZWQvdG9vbHMvQ29tcGFyZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNuQyxPQUFPLEVBU0gsb0JBQW9CLEdBQ3ZCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFrQmpDLE1BQU0sT0FBTyxjQUFjO0lBNEJ2QixZQUNjLGNBQThCLEVBQ2pDLFlBQXdCLEdBQUcsRUFBRSxHQUFFLENBQUM7UUFEN0IsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ2pDLGNBQVMsR0FBVCxTQUFTLENBQXVCO1FBRXZDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBSUQsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFXLFFBQVEsQ0FBQyxRQUFrQjtRQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVNLFFBQVE7UUFDWCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUVqQixJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ2pCLGVBQWUsRUFBRSxF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QUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLEVBQUU7b0JBQzlDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO2lCQUNaO3FCQUFNO29CQUNILENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNYO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztTQUN6QztJQUNMLENBQUM7SUFFUyxtQkFBbUI7UUFDekIsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVPLHVCQUF1QixDQUMzQixTQUFvQixFQUNwQixNQUFjO1FBRWQsT0FBTyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDakMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtNYXBMYXRMbmd9IGZyb20gJ3JhYWluLXVpJztcbmltcG9ydCB7XG4gICAgSUNvbXBhcmVQZXJEYXRlLFxuICAgIElDb21wYXJlcyxcbiAgICBMYXRMbmcsXG4gICAgUG9zaXRpb25WYWx1ZSxcbiAgICBRdWFsaXR5UG9pbnQsXG4gICAgUmFpbkNvbXB1dGF0aW9uUXVhbGl0eSxcbiAgICBSYWluTm9kZSxcbiAgICBSYWluU3BlZWQsXG4gICAgU3BlZWRNYXRyaXhDb250YWluZXIsXG59IGZyb20gJ3JhYWluLW1vZGVsJztcbmltcG9ydCB7WFlUeXBlfSBmcm9tICcuLi94eXR5cGUnO1xuaW1wb3J0IHtQcm9maWxlU2VydmljZX0gZnJvbSAnLi4vcHJvZmlsZS5zZXJ2aWNlJztcbmltcG9ydCB7RnJhbWVTZXR9IGZyb20gJy4vRnJhbWVTZXQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDb21wYXJlVGFyZ2V0IHtcbiAgICBkYXRlOiBEYXRlO1xuICAgIHJhaW5Db21wdXRhdGlvbklkOiBzdHJpbmc7XG4gICAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eUlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVVJQ29tcGFyZSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGNvbXBhcmVQb2ludHM6IFhZVHlwZVtdO1xuICAgIGNvbXBhcmVQb2ludHNNYXg6IFhZVHlwZTtcbiAgICBjb21wYXJlUG9pbnRzSGlzdG9yeTogUXVhbGl0eVBvaW50W107XG4gICAgcmVtYXJrczogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQ29tcGFyZU1hbmFnZXIge1xuICAgIHB1YmxpYyBnYXVnZXNJbk1hcDogTWFwTGF0TG5nW107XG4gICAgcHVibGljIGdhdWdlc0luQ29tcGFyZTogTWFwTGF0TG5nW107XG4gICAgcHVibGljIHNlbGVjdGVkR2F1Z2VzOiBNYXBMYXRMbmdbXTtcbiAgICBwdWJsaWMgc2VsZWN0ZWRQaXhlbHM6IE1hcExhdExuZ1tdO1xuICAgIHB1YmxpYyBwaXhlbHNTb2x1dGlvbnM6IE1hcExhdExuZ1tdW107XG4gICAgcHVibGljIHNwZWVkczogTWFwTGF0TG5nW107XG5cbiAgICAvLyBmcm9tIGNvbXBhcmVzVGltZWxpbmVcbiAgICBwdWJsaWMgY29tcGFyZU5hbWVzOiBzdHJpbmdbXTtcbiAgICBwdWJsaWMgdWlDb21wYXJlczogSVVJQ29tcGFyZVtdO1xuICAgIHB1YmxpYyBjb21wYXJlU3BlZWRNYXRyaXg6IFBvc2l0aW9uVmFsdWVbXTtcbiAgICBwdWJsaWMgY29tcGFyZVZlcnNpb246IHN0cmluZztcbiAgICBwdWJsaWMgY29tcGFyZVRydXN0ZWRJbmRpY2F0b3I6IG51bWJlcjtcbiAgICBwdWJsaWMgY29tcGFyZURhdGVzOiBEYXRlW107XG5cbiAgICBwdWJsaWMgY3VycmVudFF1YWxpdHlEb25lRGF0ZTogRGF0ZTtcbiAgICBwdWJsaWMgY3VycmVudFF1YWxpdHlMYXVuY2hlZEJ5OiBzdHJpbmc7XG4gICAgcHVibGljIGN1cnJlbnRRdWFsaXR5VGltZVNwZW50SW5NczogbnVtYmVyO1xuICAgIHB1YmxpYyBnbG9iYWxDb21wYXJlUG9pbnRzOiBYWVR5cGVbXTtcbiAgICBwdWJsaWMgZ2xvYmFsQ29tcGFyZVBvaW50c01heDogWFlUeXBlO1xuICAgIHB1YmxpYyBjb21wYXJlU3BlZWQ6IHthbmdsZUluRGVncmVlczogbnVtYmVyOyBwaXhlbHNQZXJQZXJpb2Q6IG51bWJlcn07XG4gICAgcHJvdGVjdGVkIGJ1aWxkQ29tcGFyZXM6IElDb21wYXJlcztcbiAgICBwcm90ZWN0ZWQgc2VsZWN0ZWRHYXVnZTogUXVhbGl0eVBvaW50O1xuICAgIHByb3RlY3RlZCBzZWxlY3RlZEdhdWdlSW5Qb2ludHM6IFF1YWxpdHlQb2ludDtcbiAgICBwcm90ZWN0ZWQgc2VsZWN0ZWRHYXVnZUluUG9pbnRzRGV0YWlsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGU6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgcHJvZmlsZVNlcnZpY2U6IFByb2ZpbGVTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgb25DaGFuZ2VzOiAoKSA9PiB2b2lkID0gKCkgPT4ge31cbiAgICApIHtcbiAgICAgICAgdGhpcy5jbGVhbkFsbCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfcmFpbk5vZGU6IFJhaW5Ob2RlO1xuXG4gICAgcHVibGljIGdldCByYWluTm9kZSgpOiBSYWluTm9kZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yYWluTm9kZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHJhaW5Ob2RlKHJhaW5Ob2RlOiBSYWluTm9kZSkge1xuICAgICAgICB0aGlzLl9yYWluTm9kZSA9IHJhaW5Ob2RlO1xuICAgICAgICB0aGlzLmNsZWFuQWxsKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFuQWxsKCkge1xuICAgICAgICB0aGlzLmdhdWdlc0luTWFwID0gW107XG4gICAgICAgIHRoaXMuZ2F1Z2VzSW5Db21wYXJlID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IFtdO1xuICAgICAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmNvbXBhcmVEYXRlcyA9IFtdO1xuICAgICAgICB0aGlzLnNwZWVkcyA9IFtdO1xuXG4gICAgICAgIHRoaXMuYnVpbGRDb21wYXJlcyA9IHtcbiAgICAgICAgICAgIGNvbXBhcmVzUGVyRGF0ZTogW10sXG4gICAgICAgICAgICBjb21wYXJlQ3VtdWxhdGl2ZTogbnVsbCxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5nbG9iYWxDb21wYXJlUG9pbnRzID0gW107XG4gICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50c01heCA9IG5ldyBYWVR5cGUoMCwgMCk7XG4gICAgICAgIHRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzUGVyRGF0ZSA9IHt9O1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gbnVsbDtcbiAgICAgICAgdGhpcy5jbGVhbkNvbXBhcmVRdWFsaXR5KCdubyBjb21wYXJlIHlldCcpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlZnJlc2hTcGVlZHMoZnJhbWVTZXQ6IEZyYW1lU2V0KSB7XG4gICAgICAgIGNvbnN0IHJhaW5TcGVlZE1hcCA9IGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0UmFpblNwZWVkTWFwKFxuICAgICAgICAgICAgdGhpcy5yYWluTm9kZSxcbiAgICAgICAgICAgIGZyYW1lU2V0LnJhaW5Db21wdXRhdGlvbklkXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHJhaW5TcGVlZE1hcD8ucmFpblNwZWVkcykge1xuICAgICAgICAgICAgdGhpcy5zcGVlZHMgPSByYWluU3BlZWRNYXAucmFpblNwZWVkcy5tYXAoKHJhaW5TcGVlZDogUmFpblNwZWVkKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VudGVyID0gcmFpblNwZWVkLmdldENlbnRlcigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldFBvc2l0aW9uID0gdGhpcy5jYWxjdWxhdGVUYXJnZXRQb3NpdGlvbihyYWluU3BlZWQsIGNlbnRlcik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1hcExhdExuZyhcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0UG9zaXRpb24ubGF0LFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRQb3NpdGlvbi5sbmcsXG4gICAgICAgICAgICAgICAgICAgIHJhaW5TcGVlZC5hemltdXRoSW5EZWdyZWVzLFxuICAgICAgICAgICAgICAgICAgICBgYXoke3JhaW5TcGVlZC5hemltdXRoSW5EZWdyZWVzfSBzcCR7cmFpblNwZWVkLnNwZWVkSW5NZXRlcnNQZXJTZWN9IHRydXN0JHtyYWluU3BlZWQudHJ1c3RSYXRpb31gLFxuICAgICAgICAgICAgICAgICAgICBgYXoke3JhaW5TcGVlZC5hemltdXRoSW5EZWdyZWVzfSBzcCR7cmFpblNwZWVkLnNwZWVkSW5NZXRlcnNQZXJTZWN9IHRydXN0JHtyYWluU3BlZWQudHJ1c3RSYXRpb31gLFxuICAgICAgICAgICAgICAgICAgICByYWluU3BlZWQuc3BlZWRJbk1ldGVyc1BlclNlYyAqIDEwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zcGVlZHMgPSBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIHJlZnJlc2hDb21wYXJlUXVhbGl0eShmcmFtZVNldDogRnJhbWVTZXQpIHtcbiAgICAgICAgY29uc3QgY29tcGFyZVBlckRhdGUgPSB0aGlzLmdldENvbXBhcmVQZXJEYXRlKGZyYW1lU2V0LmRhdGUpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFjb21wYXJlUGVyRGF0ZSB8fFxuICAgICAgICAgICAgIWNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHk/LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lclxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYW5Db21wYXJlUXVhbGl0eShcbiAgICAgICAgICAgICAgICAnbm8gY3VycmVudCBxdWFsaXR5ICcgKyBPYmplY3Qua2V5cyh0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGUpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVpQ29tcGFyZXM6IElVSUNvbXBhcmVbXSA9IGNvbXBhcmVQZXJEYXRlLmNvbXBhcmVUaW1lbGluZS5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbmFtZTogYy5uYW1lLFxuICAgICAgICAgICAgICAgIGNvbXBhcmVQb2ludHM6IGMucXVhbGl0eVBvaW50cy5tYXAoXG4gICAgICAgICAgICAgICAgICAgIChwKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFhZVHlwZShwLmdldEdhdWdlVmFsdWUoKSwgcC5nZXRSYWluVmFsdWUoKSwgMiwgcC5nYXVnZUxhYmVsLCBwLmdhdWdlSWQpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjb21wYXJlUG9pbnRzTWF4OiBuZXcgWFlUeXBlKGMubWF4VmFsdWUgKiAxLjIsIGMubWF4VmFsdWUgKiAxLjIpLFxuICAgICAgICAgICAgICAgIGNvbXBhcmVQb2ludHNIaXN0b3J5OiBjLnF1YWxpdHlQb2ludHNMZWdhY3ksXG4gICAgICAgICAgICAgICAgcmVtYXJrczogYy5yZW1hcmtzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50UXVhbGl0eURvbmVEYXRlID0gY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5pc0RvbmVEYXRlO1xuICAgICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5VGltZVNwZW50SW5NcyA9IGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkudGltZVNwZW50SW5NcztcbiAgICAgICAgdGhpcy5jdXJyZW50UXVhbGl0eUxhdW5jaGVkQnkgPSBjb21wYXJlUGVyRGF0ZS5yYWluQ29tcHV0YXRpb25RdWFsaXR5LmxhdW5jaGVkQnk7XG4gICAgICAgIHRoaXMuY29tcGFyZVZlcnNpb24gPSBjb21wYXJlUGVyRGF0ZS5yYWluQ29tcHV0YXRpb25RdWFsaXR5LmdldFZlcnNpb24oKTtcblxuICAgICAgICB0aGlzLmNvbXBhcmVTcGVlZCA9XG4gICAgICAgICAgICBjb21wYXJlUGVyRGF0ZS5yYWluQ29tcHV0YXRpb25RdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lci5nZXRTcGVlZCgpO1xuICAgICAgICB0aGlzLmNvbXBhcmVOYW1lcyA9IHVpQ29tcGFyZXMubWFwKChjKSA9PiBjLm5hbWUpO1xuICAgICAgICB0aGlzLnVpQ29tcGFyZXMgPSB1aUNvbXBhcmVzO1xuXG4gICAgICAgIHRoaXMub25DaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVmcmVzaEdsb2JhbENvbXBhcmVRdWFsaXR5KFxuICAgICAgICB0YXJnZXRzT3JkZXJlZDogSUNvbXBhcmVUYXJnZXRbXSxcbiAgICAgICAgd2l0aENvbXBhcmVEdXBsaWNhdGU6IGJvb2xlYW5cbiAgICApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hSYWluQ29tcHV0YXRpb25RdWFsaXRpZXModGFyZ2V0c09yZGVyZWQpO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmJ1aWxkQ29tcGFyZXNUaW1lbGluZSh0YXJnZXRzT3JkZXJlZCwgd2l0aENvbXBhcmVEdXBsaWNhdGUpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZSkge1xuICAgICAgICAgICAgICAgIC8vIHRocm93IEVycm9yKCduZWVkcyBjdW11bGF0aXZlIGNvbXBhcmUnKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvdW50Rm9yQXZlcmFnZSA9IHRhcmdldHNPcmRlcmVkLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IG1heFZhbHVlID0gKHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZS5tYXhWYWx1ZSAvIDEyKSAqIDEuMjtcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50cyA9IHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZS5xdWFsaXR5UG9pbnRzLm1hcChcbiAgICAgICAgICAgICAgICAocXApID0+XG4gICAgICAgICAgICAgICAgICAgIG5ldyBYWVR5cGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBxcC5nZXRHYXVnZVZhbHVlKCkgLyAxMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHFwLmdldFJhaW5WYWx1ZSgpIC8gMTIsXG4gICAgICAgICAgICAgICAgICAgICAgICAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgcXAuZ2F1Z2VMYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHFwLmdhdWdlSWRcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50c01heCA9IG5ldyBYWVR5cGUobWF4VmFsdWUsIG1heFZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgc2V0R2F1Z2VzSW5NYXAoKSB7XG4gICAgICAgIGxldCBnYXVnZXNUb0ZpbHRlciA9IGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0R2F1Z2VzKFxuICAgICAgICAgICAgdGhpcy5yYWluTm9kZT8uaWQsXG4gICAgICAgICAgICB0aGlzLnJhaW5Ob2RlLmdldENlbnRlcigpXG4gICAgICAgICk7XG4gICAgICAgIGdhdWdlc1RvRmlsdGVyID0gZ2F1Z2VzVG9GaWx0ZXJcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgYS5hcHByb3hEaXN0YW5jZUZyb20odGhpcy5yYWluTm9kZS5nZXRDZW50ZXIoKSkgLVxuICAgICAgICAgICAgICAgICAgICBiLmFwcHJveERpc3RhbmNlRnJvbSh0aGlzLnJhaW5Ob2RlLmdldENlbnRlcigpKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigodiwgaW5kZXgpID0+IGluZGV4IDwgMjAwKTtcblxuICAgICAgICBjb25zdCByYWluTm9kZUdhdWdlSWRzID0gdGhpcy5yYWluTm9kZS5nZXRMaW5rcygnZ2F1Z2UnKS5tYXAoKGwpID0+IGwuZ2V0SWQoKSk7XG5cbiAgICAgICAgY29uc3QgdmlzaWJsZUdhdWdlcyA9IGdhdWdlc1RvRmlsdGVyLmZpbHRlcigoZykgPT4gcmFpbk5vZGVHYXVnZUlkcy5pbmRleE9mKGcuaWQpID4gLTEpO1xuICAgICAgICBjb25zb2xlLmxvZygndmlzaWJsZUdhdWdlczonLCB2aXNpYmxlR2F1Z2VzKTtcblxuICAgICAgICBjb25zdCBnYXVnZXNMYXRMbmc6IE1hcExhdExuZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZ2F1Z2Ugb2YgdmlzaWJsZUdhdWdlcykge1xuICAgICAgICAgICAgZ2F1Z2VzTGF0TG5nLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IE1hcExhdExuZyhnYXVnZS5sYXRpdHVkZSwgZ2F1Z2UubG9uZ2l0dWRlLCB1bmRlZmluZWQsIGdhdWdlLmlkLCBnYXVnZS5uYW1lKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdhdWdlc0luTWFwID0gZ2F1Z2VzTGF0TG5nO1xuICAgIH1cblxuICAgIGFzeW5jIHNldEdhdWdlc0luQ29tcGFyZSgpIHtcbiAgICAgICAgY29uc3QgcXVhbGl0eVBvaW50czogUXVhbGl0eVBvaW50W10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjb21wYXJlIG9mIHRoaXMudWlDb21wYXJlcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBxdWFsaXR5UG9pbnQgb2YgY29tcGFyZS5jb21wYXJlUG9pbnRzSGlzdG9yeSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFscmVhZHlBZGRlZCA9IHF1YWxpdHlQb2ludHMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAocCkgPT4gcD8uZ2F1Z2VJZCA9PT0gcXVhbGl0eVBvaW50LmdhdWdlSWRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChhbHJlYWR5QWRkZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHF1YWxpdHlQb2ludHMucHVzaChxdWFsaXR5UG9pbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ2F1Z2VzSW5Db21wYXJlID0gcXVhbGl0eVBvaW50cy5tYXAoKHApID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTWFwTGF0TG5nKFxuICAgICAgICAgICAgICAgIHAuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS5sYXQsXG4gICAgICAgICAgICAgICAgcC5nYXVnZUNhcnRlc2lhblZhbHVlLmxuZyxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHAuZ2F1Z2VJZCxcbiAgICAgICAgICAgICAgICBwLmdhdWdlTGFiZWwgKyAnPicgKyBwLmdldEdhdWdlVmFsdWUoKSxcbiAgICAgICAgICAgICAgICBwLmdldEdhdWdlVmFsdWUoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZXNldFNlbGVjdGVkR2F1Z2VzKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2VsZWN0R2F1Z2UoZ2F1Z2VJZDogc3RyaW5nLCBjb21wYXJlSW5kZXg6IG51bWJlcikge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnc2VsZWN0R2F1Z2UnLCBnYXVnZUlkLCBjb21wYXJlSW5kZXgpO1xuXG4gICAgICAgIGlmIChnYXVnZUlkKSB7XG4gICAgICAgICAgICBjb25zdCB4eXMgPSB0aGlzLmdldEN1cnJlbnRRdWFsaXR5UG9pbnRzKGNvbXBhcmVJbmRleCkuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChwKSA9PiBwLmdhdWdlSWQgPT09IGdhdWdlSWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2UgPSB4eXMubGVuZ3RoID09PSAxID8geHlzWzBdIDogbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRHYXVnZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzZXRTZWxlY3RlZEdhdWdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gdGhpcy5nZXRDdXJyZW50UXVhbGl0eVBvaW50cyhjb21wYXJlSW5kZXgpLmZpbHRlcihcbiAgICAgICAgICAgIChwKSA9PiBwLmdhdWdlSWQgPT09IHRoaXMuc2VsZWN0ZWRHYXVnZS5nYXVnZUlkXG4gICAgICAgICk7XG4gICAgICAgIGxldCBwaXhlbHNTb2x1dGlvbnM6IE1hcExhdExuZ1tdW10gPSBbXTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgcmVtYXJrcyA9IEpTT04ucGFyc2Uoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLnJlbWFyaykuc29ydChcbiAgICAgICAgICAgICAgICAoYSwgYikgPT4gYS5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtIC0gYi5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVtYXJrcyk7XG4gICAgICAgICAgICBwaXhlbHNTb2x1dGlvbnMgPSByZW1hcmtzLm1hcCgocmVtYXJrKSA9PlxuICAgICAgICAgICAgICAgIHJlbWFyay5zb2x1dGlvbkZvckdhdWdlLnBpeGVscy5tYXAoXG4gICAgICAgICAgICAgICAgICAgIChwKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE1hcExhdExuZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnkgKyAwLjAwNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnggKyAwLjAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJycgKyAhcmVtYXJrLm5vdFBvc3NpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnICsgIXJlbWFyay5ub3RQb3NzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgdGltZURlbHRhSW5NaW51dGVzID0gc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdldFRpbWVEZWx0YUluTWludXRlcygpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHNEZXRhaWwgPVxuICAgICAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2F1Z2VMYWJlbCArXG4gICAgICAgICAgICAgICAgJyA+ICcgK1xuICAgICAgICAgICAgICAgIE1hdGgucm91bmQoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdldEdhdWdlVmFsdWUoKSAqIDEwMCkgLyAxMDAgK1xuICAgICAgICAgICAgICAgICcgLyAnICtcbiAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXS5nZXRSYWluVmFsdWUoKSAqIDEwMCkgLyAxMDAgK1xuICAgICAgICAgICAgICAgICcgZFQ9JyArXG4gICAgICAgICAgICAgICAgdGltZURlbHRhSW5NaW51dGVzO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMucGl4ZWxzU29sdXRpb25zID0gW107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW1xuICAgICAgICAgICAgbmV3IE1hcExhdExuZyhcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLmxhdCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLmxuZyxcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VJZCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUxhYmVsICtcbiAgICAgICAgICAgICAgICAgICAgJz4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLnZhbHVlXG4gICAgICAgICAgICApLFxuICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0R2F1Z2VJbkNvbXBhcmUoKTtcblxuICAgICAgICBjb25zdCBwaXhlbHM6IE1hcExhdExuZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcmFpbkNhcnRlc2lhblZhbHVlIG9mIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzLnJhaW5DYXJ0ZXNpYW5WYWx1ZXMpIHtcbiAgICAgICAgICAgIHBpeGVscy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBNYXBMYXRMbmcocmFpbkNhcnRlc2lhblZhbHVlLmxhdCArIDAuMDA1LCByYWluQ2FydGVzaWFuVmFsdWUubG5nICsgMC4wMSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IHBpeGVscztcblxuICAgICAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IHBpeGVsc1NvbHV0aW9ucztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRDb21wYXJlc1RpbWVsaW5lKFxuICAgICAgICB0YXJnZXRzT3JkZXJlZDogSUNvbXBhcmVUYXJnZXRbXSxcbiAgICAgICAgd2l0aENvbXBhcmVEdXBsaWNhdGU6IGJvb2xlYW5cbiAgICApOiBQcm9taXNlPElDb21wYXJlcz4ge1xuICAgICAgICBjb25zdCBjb21wYXJlRGF0ZXMgPSB0YXJnZXRzT3JkZXJlZC5tYXAoKHQpID0+IHQuZGF0ZSk7XG5cbiAgICAgICAgY29uc3QgcXVhbGl0aWVzOiBSYWluQ29tcHV0YXRpb25RdWFsaXR5W10gPSBjb21wYXJlRGF0ZXNcbiAgICAgICAgICAgIC5maWx0ZXIoKGQpID0+ICEhZClcbiAgICAgICAgICAgIC5tYXAoKGQpID0+IHRoaXMuZ2V0UmFpbkNvbXB1dGF0aW9uUXVhbGl0eShkKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHJjcSkgPT4gISFyY3EpO1xuXG4gICAgICAgIHRoaXMuY29tcGFyZURhdGVzID0gY29tcGFyZURhdGVzLnNsaWNlKDEsIC0xKTtcblxuICAgICAgICB0aGlzLmJ1aWxkQ29tcGFyZXMgPSBTcGVlZE1hdHJpeENvbnRhaW5lci5CdWlsZENvbXBhcmVzKHF1YWxpdGllcywgIXdpdGhDb21wYXJlRHVwbGljYXRlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRDb21wYXJlcztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0Q29tcGFyZVBlckRhdGUoZGF0ZTogRGF0ZSk6IElDb21wYXJlUGVyRGF0ZSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5idWlsZENvbXBhcmVzLmNvbXBhcmVzUGVyRGF0ZS5maWx0ZXIoXG4gICAgICAgICAgICAoYykgPT4gYy5kYXRlLmdldFRpbWUoKSA9PT0gZGF0ZS5nZXRUaW1lKClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nWzBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRDdXJyZW50UXVhbGl0eVBvaW50cyhjb21wYXJlSW5kZXg6IG51bWJlcikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnVpQ29tcGFyZXMubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICBjb21wYXJlSW5kZXggPCAwIHx8XG4gICAgICAgICAgICB0aGlzLmNvbXBhcmVOYW1lcy5sZW5ndGggPCBjb21wYXJlSW5kZXhcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy51aUNvbXBhcmVzW2NvbXBhcmVJbmRleF0uY29tcGFyZVBvaW50c0hpc3Rvcnk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNsZWFuQ29tcGFyZVF1YWxpdHkoZGV0YWlscz86IHN0cmluZykge1xuICAgICAgICB0aGlzLmNvbXBhcmVWZXJzaW9uID0gZGV0YWlscztcbiAgICAgICAgdGhpcy5jb21wYXJlTmFtZXMgPSBbXTtcbiAgICAgICAgdGhpcy51aUNvbXBhcmVzID0gW107XG4gICAgICAgIHRoaXMuY29tcGFyZVNwZWVkTWF0cml4ID0gW107XG4gICAgICAgIHRoaXMuY29tcGFyZVRydXN0ZWRJbmRpY2F0b3IgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50UXVhbGl0eURvbmVEYXRlID0gbmV3IERhdGUoLTEpO1xuICAgICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5TGF1bmNoZWRCeSA9ICcnO1xuICAgICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5VGltZVNwZW50SW5NcyA9IC0xO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBmZXRjaFJhaW5Db21wdXRhdGlvblF1YWxpdGllcyh0YXJnZXRzT3JkZXJlZDogSUNvbXBhcmVUYXJnZXRbXSkge1xuICAgICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzT3JkZXJlZCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICF0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGVbdGFyZ2V0LmRhdGUudG9JU09TdHJpbmcoKV0gJiZcbiAgICAgICAgICAgICAgICB0YXJnZXQucmFpbkNvbXB1dGF0aW9uUXVhbGl0eUlkXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByYWluQ29tcHV0YXRpb25RdWFsaXR5ID0gYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZS5nZXRSYWluQ29tcGFyZUJ5RGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmFpbk5vZGUuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQucmFpbkNvbXB1dGF0aW9uSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuZGF0ZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmFpbkNvbXB1dGF0aW9uUXVhbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW3RhcmdldC5kYXRlLnRvSVNPU3RyaW5nKCldID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFJhaW5Db21wdXRhdGlvblF1YWxpdHkoZGF0ZTogRGF0ZSk6IFJhaW5Db21wdXRhdGlvblF1YWxpdHkge1xuICAgICAgICByZXR1cm4gdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW2RhdGUudG9JU09TdHJpbmcoKV07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNlbGVjdEdhdWdlSW5Db21wYXJlKCkge1xuICAgICAgICBjb25zdCBnbG9iYWxDb21wYXJlUG9pbnRzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmdsb2JhbENvbXBhcmVQb2ludHMpKTtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIGdsb2JhbENvbXBhcmVQb2ludHMpIHtcbiAgICAgICAgICAgIGlmIChwLmlkID09PSB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cz8uZ2F1Z2VJZCkge1xuICAgICAgICAgICAgICAgIHAuciA9IDEwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwLnIgPSAyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50cyA9IGdsb2JhbENvbXBhcmVQb2ludHM7XG5cbiAgICAgICAgZm9yIChjb25zdCBjb21wYXJlIG9mIHRoaXMudWlDb21wYXJlcykge1xuICAgICAgICAgICAgY29uc3QgY29tcGFyZVBvaW50cyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29tcGFyZS5jb21wYXJlUG9pbnRzKSk7XG4gICAgICAgICAgICBjb21wYXJlUG9pbnRzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocC5pZCA9PT0gdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHM/LmdhdWdlSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcC5yID0gMTA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcC5yID0gMztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbXBhcmUuY29tcGFyZVBvaW50cyA9IGNvbXBhcmVQb2ludHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzZXRTZWxlY3RlZEdhdWdlcygpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3Jlc2V0U2VsZWN0ZWRHYXVnZXMgcmVzZXQnKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBudWxsO1xuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBbXTtcbiAgICAgICAgdGhpcy5waXhlbHNTb2x1dGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RHYXVnZUluQ29tcGFyZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlVGFyZ2V0UG9zaXRpb24oXG4gICAgICAgIHJhaW5TcGVlZDogUmFpblNwZWVkLFxuICAgICAgICBjZW50ZXI6IExhdExuZ1xuICAgICk6IHtsYXQ6IG51bWJlcjsgbG5nOiBudW1iZXJ9IHtcbiAgICAgICAgcmV0dXJuIHJhaW5TcGVlZC5nZXRDZW50ZXIoKTtcbiAgICB9XG59XG4iXX0=
|