ftpd-lite 1.0.3 → 1.0.5
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/README.md +12 -0
- package/package.json +1 -1
- package/src/commands/CwdCommand.js +2 -2
- package/src/commands/DeleCommand.js +2 -2
- package/src/commands/FeatCommand.js +3 -3
- package/src/commands/ListCommand.js +3 -3
- package/src/commands/MkdCommand.js +21 -3
- package/src/commands/PassCommand.js +3 -3
- package/src/commands/PasvCommand.js +3 -3
- package/src/commands/PortCommand.js +3 -3
- package/src/commands/PwdCommand.js +2 -2
- package/src/commands/QuitCommand.js +3 -3
- package/src/commands/RetrCommand.js +3 -3
- package/src/commands/RmdCommand.js +2 -2
- package/src/commands/RnfrCommand.js +2 -2
- package/src/commands/RntoCommand.js +2 -2
- package/src/commands/StorCommand.js +3 -3
- package/src/commands/SystCommand.js +3 -3
- package/src/commands/TypeCommand.js +3 -3
- package/src/commands/UserCommand.js +4 -4
- package/src/connection.js +6 -6
- package/src/core/DataServer.js +8 -8
- package/src/core/FtpServer.d.ts +8 -0
- package/src/core/FtpServer.js +152 -46
- package/src/fileTransfer.js +8 -8
- package/src/types.d.ts +4 -1
- package/src/types.js +3 -1
- package/src/userManager.d.ts +4 -2
- package/src/userManager.js +76 -52
- package/src/utils/logger.js +1 -1
- package/src/utils/pathUtils.js +1 -1
package/src/fileTransfer.js
CHANGED
|
@@ -52,7 +52,7 @@ class FileTransfer {
|
|
|
52
52
|
return true;
|
|
53
53
|
}
|
|
54
54
|
async uploadFile(conn, remotePath, data) {
|
|
55
|
-
console.log(`[FileTransfer]
|
|
55
|
+
console.log(`[FileTransfer] File upload: ${conn.user || 'unknown'} - ${remotePath}`);
|
|
56
56
|
if (!this.userManager.checkPermission(conn.user || '', 'write')) {
|
|
57
57
|
conn.lastReply = types_1.ReplyCode.NO_PERMISSION;
|
|
58
58
|
conn.lastMessage = `Permission denied: upload`;
|
|
@@ -61,7 +61,7 @@ class FileTransfer {
|
|
|
61
61
|
conn.lastMessage = `Command not yet implemented: STOR`;
|
|
62
62
|
}
|
|
63
63
|
async downloadFile(conn, remotePath) {
|
|
64
|
-
console.log(`[FileTransfer]
|
|
64
|
+
console.log(`[FileTransfer] File download: ${conn.user || 'unknown'} - ${remotePath}`);
|
|
65
65
|
if (!this.userManager.checkPermission(conn.user || '', 'read')) {
|
|
66
66
|
conn.lastReply = types_1.ReplyCode.NO_PERMISSION;
|
|
67
67
|
conn.lastMessage = `Permission denied: download`;
|
|
@@ -70,7 +70,7 @@ class FileTransfer {
|
|
|
70
70
|
conn.lastMessage = `Command not yet implemented: RETR`;
|
|
71
71
|
}
|
|
72
72
|
async deleteFile(conn, remotePath) {
|
|
73
|
-
console.log(`[FileTransfer]
|
|
73
|
+
console.log(`[FileTransfer] File delete: ${conn.user || 'unknown'} - ${remotePath}`);
|
|
74
74
|
if (!this.userManager.checkPermission(conn.user || '', 'delete')) {
|
|
75
75
|
conn.lastReply = types_1.ReplyCode.NO_PERMISSION;
|
|
76
76
|
conn.lastMessage = `Permission denied: delete`;
|
|
@@ -79,7 +79,7 @@ class FileTransfer {
|
|
|
79
79
|
conn.lastMessage = `Command not yet implemented: DELE`;
|
|
80
80
|
}
|
|
81
81
|
async createDirectory(conn, remotePath) {
|
|
82
|
-
console.log(`[FileTransfer]
|
|
82
|
+
console.log(`[FileTransfer] Directory creation: ${conn.user || 'unknown'} - ${remotePath}`);
|
|
83
83
|
if (!this.userManager.checkPermission(conn.user || '', 'mkd')) {
|
|
84
84
|
conn.lastReply = types_1.ReplyCode.NO_PERMISSION;
|
|
85
85
|
conn.lastMessage = `Permission denied: create directory`;
|
|
@@ -88,7 +88,7 @@ class FileTransfer {
|
|
|
88
88
|
conn.lastMessage = `Command not yet implemented: MKD`;
|
|
89
89
|
}
|
|
90
90
|
async removeDirectory(conn, remotePath) {
|
|
91
|
-
console.log(`[FileTransfer]
|
|
91
|
+
console.log(`[FileTransfer] Directory removal: ${conn.user || 'unknown'} - ${remotePath}`);
|
|
92
92
|
if (!this.userManager.checkPermission(conn.user || '', 'rmdir')) {
|
|
93
93
|
conn.lastReply = types_1.ReplyCode.NO_PERMISSION;
|
|
94
94
|
conn.lastMessage = `Permission denied: remove directory`;
|
|
@@ -97,7 +97,7 @@ class FileTransfer {
|
|
|
97
97
|
conn.lastMessage = `Command not yet implemented: RMD`;
|
|
98
98
|
}
|
|
99
99
|
async renameFile(conn, oldPath, newPath) {
|
|
100
|
-
console.log(`[FileTransfer]
|
|
100
|
+
console.log(`[FileTransfer] File rename: ${conn.user || 'unknown'} - ${oldPath} -> ${newPath}`);
|
|
101
101
|
if (!this.userManager.checkPermission(conn.user || '', 'rename')) {
|
|
102
102
|
conn.lastReply = types_1.ReplyCode.NO_PERMISSION;
|
|
103
103
|
conn.lastMessage = `Permission denied: rename`;
|
|
@@ -106,7 +106,7 @@ class FileTransfer {
|
|
|
106
106
|
conn.lastMessage = `Command not yet implemented: RNFR/RNTO`;
|
|
107
107
|
}
|
|
108
108
|
async changeFileMode(conn, remotePath, mode) {
|
|
109
|
-
console.log(`[FileTransfer]
|
|
109
|
+
console.log(`[FileTransfer] File permissions change: ${conn.user || 'unknown'} - ${remotePath}`);
|
|
110
110
|
if (!this.userManager.checkPermission(conn.user || '', 'chmod')) {
|
|
111
111
|
conn.lastReply = types_1.ReplyCode.NO_PERMISSION;
|
|
112
112
|
conn.lastMessage = `Permission denied: chmod`;
|
|
@@ -117,4 +117,4 @@ class FileTransfer {
|
|
|
117
117
|
}
|
|
118
118
|
exports.FileTransfer = FileTransfer;
|
|
119
119
|
exports.fileTransfer = new FileTransfer();
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZVRyYW5zZmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZpbGVUcmFuc2Zlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxNQUFZLElBQUksaUNBQWE7QUFDN0IsbUNBQW1EO0FBQ25ELCtDQUE0QztBQUs1QztJQUdFO1FBRUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFXLENBQUM7SUFDakMsQ0FBQztJQUtPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUV0QixJQUFJLENBQUMsV0FBVyxHQUFJLE1BQWMsQ0FBQyxhQUFhO2dCQUM5QyxJQUFJLHlCQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFLTyxlQUFlLENBQUMsSUFBWSxFQUFFLFVBQWtCO1FBRXRELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUtNLEtBQUssQ0FBQyxVQUFVLENBQ3JCLElBQW1CLEVBQ25CLFVBQWtCLEVBQ2xCLElBQVk7UUFFWixPQUFPLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsTUFBTSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBR3ZGLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxhQUFhLENBQUM7WUFDekMsSUFBSSxDQUFDLFdBQVcsR0FBRywyQkFBMkIsQ0FBQztRQUNqRCxDQUFDO1FBR0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxpQkFBUyxDQUFDLE9B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QUksQ0FBQyxJQUFJLElBQUksU0FBUyxNQUFNLE9BQU8sT0FBTyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBRzdHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ2pFLElBQUksQ0FBQyxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxhQUFhLENBQUM7WUFDekMsSUFBSSxDQUFDLFdBQVcsR0FBRywyQkFBMkIsQ0FBQztRQUNqRCxDQUFDO1FBR0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxpQkFBUyxDQUFDLE9BQU8sQ0FBQztRQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLHdDQUF3QyxDQUFDO0lBQzlELENBQUM7SUFLTSxLQUFLLENBQUMsY0FBYyxDQUN6QixJQUFtQixFQUNuQixVQUFrQixFQUNsQixJQUFZO1FBRVosT0FBTyxDQUFDLEdBQUcsQ0FBQyw2Q0FBNkMsSUFBSSxDQUFDLElBQUksSUFBSSxTQUFTLE1BQU0sVUFBVSxFQUFFLENBQUMsQ0FBQztRQUduRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNoRSxJQUFJLENBQUMsU0FBUyxHQUFHLGlCQUFTLENBQUMsYUFBYSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxXQUFXLEdBQUcsMEJBQTBCLENBQUM7UUFDaEQsQ0FBQztRQUdELElBQUksQ0FBQyxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxPQUFPLENBQUM7UUFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxvQ0FBb0MsQ0FBQztJQUMxRCxDQUFDO0NBQ0Y7O0FBR1ksUUFBQSxZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBSZXBseUNvZGUsIEZ0cENvbm5lY3Rpb24gfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFVzZXJNYW5hZ2VyIH0gZnJvbSAnLi91c2VyTWFuYWdlcic7XG5cbi8qKlxuICogRmlsZVRyYW5zZmVyIC0gRG9zeWEgdHJhbnNmZXIgacWfbGVtbGVyaVxuICovXG5leHBvcnQgY2xhc3MgRmlsZVRyYW5zZmVyIHtcbiAgcHJpdmF0ZSB1c2VyTWFuYWdlcjogVXNlck1hbmFnZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gRMO2bmfDvCBiYcSfxLFtbMSxbMSxxJ/EsW5kYW4ga2HDp8Sxbm1hayBpw6dpbiBsYXp5IGluaXRcbiAgICB0aGlzLnVzZXJNYW5hZ2VyID0gbnVsbCBhcyBhbnk7XG4gIH1cblxuICAvKipcbiAgICogVXNlck1hbmFnZXIgc2luZ2xldG9uJ8SxbsSxIGFsXG4gICAqL1xuICBwcml2YXRlIGdldFVzZXJNYW5hZ2VyKCk6IFVzZXJNYW5hZ2VyIHtcbiAgICBpZiAoIXRoaXMudXNlck1hbmFnZXIpIHtcbiAgICAgIC8vIETDtm5nw7wgYmHEn8SxbWzEsWzEscSfxLFuxLEgw6fDtnptZWsgacOnaW4gZ2xvYmFsIGluc3RhbmNlIGt1bGxhblxuICAgICAgdGhpcy51c2VyTWFuYWdlciA9IChnbG9iYWwgYXMgYW55KS5fX3VzZXJNYW5hZ2VyIHx8IFxuICAgICAgICBuZXcgVXNlck1hbmFnZXIocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL3VzZXJzLmpzb24nKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVzZXJNYW5hZ2VyO1xuICB9XG5cbiAgLyoqXG4gICAqIMSwemluIGtvbnRyb2zDvCAtIFRPRE86IEltcGxlbWVudFxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja1Blcm1pc3Npb24odXNlcjogc3RyaW5nLCBwZXJtaXNzaW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgcGVybWlzc2lvbiBjaGVja2luZ1xuICAgIHJldHVybiB0cnVlOyAvLyBQbGFjZWhvbGRlclxuICB9XG5cbiAgLyoqXG4gICAqIERvc3lhIHnDvGtsZSAoU1RPUikgLSBUT0RPOiBJbXBsZW1lbnRcbiAgICovXG4gIHB1YmxpYyBhc3luYyB1cGxvYWRGaWxlKFxuICAgIGNvbm46IEZ0cENvbm5lY3Rpb24sXG4gICAgcmVtb3RlUGF0aDogc3RyaW5nLFxuICAgIGRhdGE6IEJ1ZmZlclxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZyhgW0ZpbGVUcmFuc2Zlcl0gRG9zeWEgecO8a2xlbWU6ICR7Y29ubi51c2VyIHx8ICd1bmtub3duJ30gLSAke3JlbW90ZVBhdGh9YCk7XG4gICAgXG4gICAgLy8gxLB6aW4ga29udHJvbMO8XG4gICAgaWYgKCF0aGlzLnVzZXJNYW5hZ2VyLmNoZWNrUGVybWlzc2lvbihjb25uLnVzZXIgfHwgJycsICd3cml0ZScpKSB7XG4gICAgICBjb25uLmxhc3RSZXBseSA9IFJlcGx5Q29kZS5OT19QRVJNSVNTSU9OO1xuICAgICAgY29ubi5sYXN0TWVzc2FnZSA9IGBQZXJtaXNzaW9uIGRlbmllZDogdXBsb2FkYDtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBEb3N5YSB5w7xrbGVtZSBpbXBsZW1lbnRhc3lvbnVcbiAgICBjb25uLmxhc3RSZXBseSA9IFJlcGx5Q29kZS5DTURfRVJSO1xuICAgIGNvbm4ubGFzdE1lc3NhZ2UgPSBgQ29tbWFuZCBub3QgeWV0IGltcGxlbWVudGVkOiBTVE9SYDsgIFxuICB9XG5cbiAgLyoqXG4gICAqIERvc3lhIGluZGlyIChSRVRSKSAtIFRPRE86IEltcGxlbWVudFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRvd25sb2FkRmlsZShcbiAgICBjb25uOiBGdHBDb25uZWN0aW9uLFxuICAgIHJlbW90ZVBhdGg6IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZyhgW0ZpbGVUcmFuc2Zlcl0gRG9zeWEgaW5kaXJtZTogJHtjb25uLnVzZXIgfHwgJ3Vua25vd24nfSAtICR7cmVtb3RlUGF0aH1gKTtcbiAgICBcbiAgICAvLyDEsHppbiBrb250cm9sw7xcbiAgICBpZiAoIXRoaXMudXNlck1hbmFnZXIuY2hlY2tQZXJtaXNzaW9uKGNvbm4udXNlciB8fCAnJywgJ3JlYWQnKSkge1xuICAgICAgY29ubi5sYXN0UmVwbHkgPSBSZXBseUNvZGUuTk9fUEVSTUlTU0lPTjtcbiAgICAgIGNvbm4ubGFzdE1lc3NhZ2UgPSBgUGVybWlzc2lvbiBkZW5pZWQ6IGRvd25sb2FkYDtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBEb3N5YSBpbmRpcm1lIGltcGxlbWVudGFzeW9udVxuICAgIGNvbm4ubGFzdFJlcGx5ID0gUmVwbHlDb2RlLkNNRF9FUlI7XG4gICAgY29ubi5sYXN0TWVzc2FnZSA9IGBDb21tYW5kIG5vdCB5ZXQgaW1wbGVtZW50ZWQ6IFJFVFJgOyAgXG4gIH1cblxuICAvKipcbiAgICogRG9zeWEgc2lsIChERUxFKSAtIFRPRE86IEltcGxlbWVudFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRlbGV0ZUZpbGUoXG4gICAgY29ubjogRnRwQ29ubmVjdGlvbixcbiAgICByZW1vdGVQYXRoOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5sb2coYFtGaWxlVHJhbnNmZXJdIERvc3lhIHNpbG1lOiAke2Nvbm4udXNlciB8fCAndW5rbm93bid9IC0gJHtyZW1vdGVQYXRofWApO1xuICAgIFxuICAgIC8vIMSwemluIGtvbnRyb2zDvFxuICAgIGlmICghdGhpcy51c2VyTWFuYWdlci5jaGVja1Blcm1pc3Npb24oY29ubi51c2VyIHx8ICcnLCAnZGVsZXRlJykpIHtcbiAgICAgIGNvbm4ubGFzdFJlcGx5ID0gUmVwbHlDb2RlLk5PX1BFUk1JU1NJT047XG4gICAgICBjb25uLmxhc3RNZXNzYWdlID0gYFBlcm1pc3Npb24gZGVuaWVkOiBkZWxldGVgO1xuICAgIH1cblxuICAgIC8vIFRPRE86IERvc3lhIHNpbG1lIGltcGxlbWVudGFzeW9udVxuICAgIGNvbm4ubGFzdFJlcGx5ID0gUmVwbHlDb2RlLkNNRF9FUlI7XG4gICAgY29ubi5sYXN0TWVzc2FnZSA9IGBDb21tYW5kIG5vdCB5ZXQgaW1wbGVtZW50ZWQ6IERFTEVgOyAgXG4gIH1cblxuICAvKipcbiAgICogRGl6aW4gb2x1xZ90dXJtYSAoTUtEKSAtIFRPRE86IEltcGxlbWVudFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWF0ZURpcmVjdG9yeShcbiAgICBjb25uOiBGdHBDb25uZWN0aW9uLFxuICAgIHJlbW90ZVBhdGg6IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZyhgW0ZpbGVUcmFuc2Zlcl0gRGl6aW4gb2x1xZ90dXJtYTogJHtjb25uLnVzZXIgfHwgJ3Vua25vd24nfSAtICR7cmVtb3RlUGF0aH1gKTtcbiAgICBcbiAgICAvLyDEsHppbiBrb250cm9sw7xcbiAgICBpZiAoIXRoaXMudXNlck1hbmFnZXIuY2hlY2tQZXJtaXNzaW9uKGNvbm4udXNlciB8fCAnJywgJ21rZCcpKSB7XG4gICAgICBjb25uLmxhc3RSZXBseSA9IFJlcGx5Q29kZS5OT19QRVJNSVNTSU9OO1xuICAgICAgY29ubi5sYXN0TWVzc2FnZSA9IGBQZXJtaXNzaW9uIGRlbmllZDogY3JlYXRlIGRpcmVjdG9yeWA7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogRGl6aW4gb2x1xZ90dXJtYSBpbXBsZW1lbnRhc3lvbnVcbiAgICBjb25uLmxhc3RSZXBseSA9IFJlcGx5Q29kZS5DTURfRVJSO1xuICAgIGNvbm4ubGFzdE1lc3NhZ2UgPSBgQ29tbWFuZCBub3QgeWV0IGltcGxlbWVudGVkOiBNS0RgOyAgXG4gIH1cblxuICAvKipcbiAgICogRGl6aW4gc2lsbWUgKFJNRCkgLSBUT0RPOiBJbXBsZW1lbnRcbiAgICovXG4gIHB1YmxpYyBhc3luYyByZW1vdmVEaXJlY3RvcnkoXG4gICAgY29ubjogRnRwQ29ubmVjdGlvbixcbiAgICByZW1vdGVQYXRoOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5sb2coYFtGaWxlVHJhbnNmZXJdIERpemluIHNpbG1lOiAke2Nvbm4udXNlciB8fCAndW5rbm93bid9IC0gJHtyZW1vdGVQYXRofWApO1xuICAgIFxuICAgIC8vIMSwemluIGtvbnRyb2zDvFxuICAgIGlmICghdGhpcy51c2VyTWFuYWdlci5jaGVja1Blcm1pc3Npb24oY29ubi51c2VyIHx8ICcnLCAncm1kaXInKSkge1xuICAgICAgY29ubi5sYXN0UmVwbHkgPSBSZXBseUNvZGUuTk9fUEVSTUlTU0lPTjtcbiAgICAgIGNvbm4ubGFzdE1lc3NhZ2UgPSBgUGVybWlzc2lvbiBkZW5pZWQ6IHJlbW92ZSBkaXJlY3RvcnlgO1xuICAgIH1cblxuICAgIC8vIFRPRE86IERpemluIHNpbG1lIGltcGxlbWVudGFzeW9udVxuICAgIGNvbm4ubGFzdFJlcGx5ID0gUmVwbHlDb2RlLkNNRF9FUlI7XG4gICAgY29ubi5sYXN0TWVzc2FnZSA9IGBDb21tYW5kIG5vdCB5ZXQgaW1wbGVtZW50ZWQ6IFJNRGA7ICBcbiAgfVxuXG4gIC8qKlxuICAgKiBEb3N5YSB5ZW5pZGVuIGFkbGFuZMSxcm1hIChSTkZSL1JOVE8pIC0gVE9ETzogSW1wbGVtZW50XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVuYW1lRmlsZShcbiAgICBjb25uOiBGdHBDb25uZWN0aW9uLFxuICAgIG9sZFBhdGg6IHN0cmluZyxcbiAgICBuZXdQYXRoOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5sb2coYFtGaWxlVHJhbnNmZXJdIERvc3lhIHllbmlkZW4gYWRsYW5kxLFybWE6ICR7Y29ubi51c2VyIHx8ICd1bmtub3duJ30gLSAke29sZFBhdGh9IC0+ICR7bmV3UGF0aH1gKTtcbiAgICBcbiAgICAvLyDEsHppbiBrb250cm9sw7xcbiAgICBpZiAoIXRoaXMudXNlck1hbmFnZXIuY2hlY2tQZXJtaXNzaW9uKGNvbm4udXNlciB8fCAnJywgJ3JlbmFtZScpKSB7XG4gICAgICBjb25uLmxhc3RSZXBseSA9IFJlcGx5Q29kZS5OT19QRVJNSVNTSU9OO1xuICAgICAgY29ubi5sYXN0TWVzc2FnZSA9IGBQZXJtaXNzaW9uIGRlbmllZDogcmVuYW1lYDtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBEb3N5YSB5ZW5pZGVuIGFkbGFuZMSxcm1hIGltcGxlbWVudGFzeW9udVxuICAgIGNvbm4ubGFzdFJlcGx5ID0gUmVwbHlDb2RlLkNNRF9FUlI7XG4gICAgY29ubi5sYXN0TWVzc2FnZSA9IGBDb21tYW5kIG5vdCB5ZXQgaW1wbGVtZW50ZWQ6IFJORlIvUk5UT2A7ICBcbiAgfVxuXG4gIC8qKlxuICAgKiBEb3N5YSBpemlubGVyaW5pIGRlxJ9pxZ90aXIgKENITU9EKSAtIFRPRE86IEltcGxlbWVudFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNoYW5nZUZpbGVNb2RlKFxuICAgIGNvbm46IEZ0cENvbm5lY3Rpb24sXG4gICAgcmVtb3RlUGF0aDogc3RyaW5nLFxuICAgIG1vZGU6IG51bWJlclxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZyhgW0ZpbGVUcmFuc2Zlcl0gRG9zeWEgaXppbmxlcmkgZGXEn2nFn3Rpcm1lOiAke2Nvbm4udXNlciB8fCAndW5rbm93bid9IC0gJHtyZW1vdGVQYXRofWApO1xuICAgIFxuICAgIC8vIMSwemluIGtvbnRyb2zDvFxuICAgIGlmICghdGhpcy51c2VyTWFuYWdlci5jaGVja1Blcm1pc3Npb24oY29ubi51c2VyIHx8ICcnLCAnY2htb2QnKSkge1xuICAgICAgY29ubi5sYXN0UmVwbHkgPSBSZXBseUNvZGUuTk9fUEVSTUlTU0lPTjtcbiAgICAgIGNvbm4ubGFzdE1lc3NhZ2UgPSBgUGVybWlzc2lvbiBkZW5pZWQ6IGNobW9kYDtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBEb3N5YSBpemlubGVyaSBkZcSfacWfdGlybWUgaW1wbGVtZW50YXN5b251XG4gICAgY29ubi5sYXN0UmVwbHkgPSBSZXBseUNvZGUuQ01EX0VSUjtcbiAgICBjb25uLmxhc3RNZXNzYWdlID0gYENvbW1hbmQgbm90IHlldCBpbXBsZW1lbnRlZDogQ0hNT0RgOyAgXG4gIH1cbn1cblxuLy8gU2luZ2xldG9uIGluc3RhbmNlXG5leHBvcnQgY29uc3QgZmlsZVRyYW5zZmVyID0gbmV3IEZpbGVUcmFuc2ZlcigpOyJdfQ==
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZVRyYW5zZmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZpbGVUcmFuc2Zlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxNQUFZLElBQUksaUNBQWE7QUFDN0IsbUNBQW1EO0FBQ25ELCtDQUE0QztBQUs1QztJQUdFO1FBRUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFXLENBQUM7SUFDakMsQ0FBQztJQUtPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUV0QixJQUFJLENBQUMsV0FBVyxHQUFJLE1BQWMsQ0FBQyxhQUFhO2dCQUM5QyxJQUFJLHlCQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFLTyxlQUFlLENBQUMsSUFBWSxFQUFFLFVBQWtCO1FBRXRELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUtNLEtBQUssQ0FBQyxVQUFVLENBQ3JCLElBQW1CLEVBQ25CLFVBQWtCLEVBQ2xCLElBQVk7UUFFWixPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsTUFBTSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBR3JGLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxhQUFhLENBQUM7WUFDekMsSUFBSSxDQUFDLFdBQVcsR0FBRywyQkFBMkIsQ0FBQztRQUNqRCxDQUFDO1FBR0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxpQkFBUyxDQUFDLE9B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QUksQ0FBQyxJQUFJLElBQUksU0FBUyxNQUFNLE9BQU8sT0FBTyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBR2hHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ2pFLElBQUksQ0FBQyxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxhQUFhLENBQUM7WUFDekMsSUFBSSxDQUFDLFdBQVcsR0FBRywyQkFBMkIsQ0FBQztRQUNqRCxDQUFDO1FBR0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxpQkFBUyxDQUFDLE9BQU8sQ0FBQztRQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLHdDQUF3QyxDQUFDO0lBQzlELENBQUM7SUFLTSxLQUFLLENBQUMsY0FBYyxDQUN6QixJQUFtQixFQUNuQixVQUFrQixFQUNsQixJQUFZO1FBRVosT0FBTyxDQUFDLEdBQUcsQ0FBQywyQ0FBMkMsSUFBSSxDQUFDLElBQUksSUFBSSxTQUFTLE1BQU0sVUFBVSxFQUFFLENBQUMsQ0FBQztRQUdqRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNoRSxJQUFJLENBQUMsU0FBUyxHQUFHLGlCQUFTLENBQUMsYUFBYSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxXQUFXLEdBQUcsMEJBQTBCLENBQUM7UUFDaEQsQ0FBQztRQUdELElBQUksQ0FBQyxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxPQUFPLENBQUM7UUFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxvQ0FBb0MsQ0FBQztJQUMxRCxDQUFDO0NBQ0Y7O0FBR1ksUUFBQSxZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBSZXBseUNvZGUsIEZ0cENvbm5lY3Rpb24gfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFVzZXJNYW5hZ2VyIH0gZnJvbSAnLi91c2VyTWFuYWdlcic7XG5cbi8qKlxuICogRmlsZVRyYW5zZmVyIC0gRG9zeWEgdHJhbnNmZXIgacWfbGVtbGVyaVxuICovXG5leHBvcnQgY2xhc3MgRmlsZVRyYW5zZmVyIHtcbiAgcHJpdmF0ZSB1c2VyTWFuYWdlcjogVXNlck1hbmFnZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gRMO2bmfDvCBiYcSfxLFtbMSxbMSxxJ/EsW5kYW4ga2HDp8Sxbm1hayBpw6dpbiBsYXp5IGluaXRcbiAgICB0aGlzLnVzZXJNYW5hZ2VyID0gbnVsbCBhcyBhbnk7XG4gIH1cblxuICAvKipcbiAgICogVXNlck1hbmFnZXIgc2luZ2xldG9uJ8SxbsSxIGFsXG4gICAqL1xuICBwcml2YXRlIGdldFVzZXJNYW5hZ2VyKCk6IFVzZXJNYW5hZ2VyIHtcbiAgICBpZiAoIXRoaXMudXNlck1hbmFnZXIpIHtcbiAgICAgIC8vIETDtm5nw7wgYmHEn8SxbWzEsWzEscSfxLFuxLEgw6fDtnptZWsgacOnaW4gZ2xvYmFsIGluc3RhbmNlIGt1bGxhblxuICAgICAgdGhpcy51c2VyTWFuYWdlciA9IChnbG9iYWwgYXMgYW55KS5fX3VzZXJNYW5hZ2VyIHx8IFxuICAgICAgICBuZXcgVXNlck1hbmFnZXIocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL3VzZXJzLmpzb24nKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVzZXJNYW5hZ2VyO1xuICB9XG5cbiAgLyoqXG4gICAqIMSwemluIGtvbnRyb2zDvCAtIFRPRE86IEltcGxlbWVudFxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja1Blcm1pc3Npb24odXNlcjogc3RyaW5nLCBwZXJtaXNzaW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgcGVybWlzc2lvbiBjaGVja2luZ1xuICAgIHJldHVybiB0cnVlOyAvLyBQbGFjZWhvbGRlclxuICB9XG5cbiAgLyoqXG4gICAqIERvc3lhIHnDvGtsZSAoU1RPUikgLSBUT0RPOiBJbXBsZW1lbnRcbiAgICovXG4gIHB1YmxpYyBhc3luYyB1cGxvYWRGaWxlKFxuICAgIGNvbm46IEZ0cENvbm5lY3Rpb24sXG4gICAgcmVtb3RlUGF0aDogc3RyaW5nLFxuICAgIGRhdGE6IEJ1ZmZlclxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZyhgW0ZpbGVUcmFuc2Zlcl0gRmlsZSB1cGxvYWQ6ICR7Y29ubi51c2VyIHx8ICd1bmtub3duJ30gLSAke3JlbW90ZVBhdGh9YCk7XG4gICAgXG4gICAgLy8gxLB6aW4ga29udHJvbMO8XG4gICAgaWYgKCF0aGlzLnVzZXJNYW5hZ2VyLmNoZWNrUGVybWlzc2lvbihjb25uLnVzZXIgfHwgJycsICd3cml0ZScpKSB7XG4gICAgICBjb25uLmxhc3RSZXBseSA9IFJlcGx5Q29kZS5OT19QRVJNSVNTSU9OO1xuICAgICAgY29ubi5sYXN0TWVzc2FnZSA9IGBQZXJtaXNzaW9uIGRlbmllZDogdXBsb2FkYDtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBEb3N5YSB5w7xrbGVtZSBpbXBsZW1lbnRhc3lvbnVcbiAgICBjb25uLmxhc3RSZXBseSA9IFJlcGx5Q29kZS5DTURfRVJSO1xuICAgIGNvbm4ubGFzdE1lc3NhZ2UgPSBgQ29tbWFuZCBub3QgeWV0IGltcGxlbWVudGVkOiBTVE9SYDsgIFxuICB9XG5cbiAgLyoqXG4gICAqIERvc3lhIGluZGlyIChSRVRSKSAtIFRPRE86IEltcGxlbWVudFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRvd25sb2FkRmlsZShcbiAgICBjb25uOiBGdHBDb25uZWN0aW9uLFxuICAgIHJlbW90ZVBhdGg6IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZyhgW0ZpbGVUcmFuc2Zlcl0gRmlsZSBkb3dubG9hZDogJHtjb25uLnVzZXIgfHwgJ3Vua25vd24nfSAtICR7cmVtb3RlUGF0aH1gKTtcbiAgICBcbiAgICAvLyDEsHppbiBrb250cm9sw7xcbiAgICBpZiAoIXRoaXMudXNlck1hbmFnZXIuY2hlY2tQZXJtaXNzaW9uKGNvbm4udXNlciB8fCAnJywgJ3JlYWQnKSkge1xuICAgICAgY29ubi5sYXN0UmVwbHkgPSBSZXBseUNvZGUuTk9fUEVSTUlTU0lPTjtcbiAgICAgIGNvbm4ubGFzdE1lc3NhZ2UgPSBgUGVybWlzc2lvbiBkZW5pZWQ6IGRvd25sb2FkYDtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBEb3N5YSBpbmRpcm1lIGltcGxlbWVudGFzeW9udVxuICAgIGNvbm4ubGFzdFJlcGx5ID0gUmVwbHlDb2RlLkNNRF9FUlI7XG4gICAgY29ubi5sYXN0TWVzc2FnZSA9IGBDb21tYW5kIG5vdCB5ZXQgaW1wbGVtZW50ZWQ6IFJFVFJgOyAgXG4gIH1cblxuICAvKipcbiAgICogRG9zeWEgc2lsIChERUxFKSAtIFRPRE86IEltcGxlbWVudFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRlbGV0ZUZpbGUoXG4gICAgY29ubjogRnRwQ29ubmVjdGlvbixcbiAgICByZW1vdGVQYXRoOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5sb2coYFtGaWxlVHJhbnNmZXJdIEZpbGUgZGVsZXRlOiAke2Nvbm4udXNlciB8fCAndW5rbm93bid9IC0gJHtyZW1vdGVQYXRofWApO1xuICAgIFxuICAgIC8vIMSwemluIGtvbnRyb2zDvFxuICAgIGlmICghdGhpcy51c2VyTWFuYWdlci5jaGVja1Blcm1pc3Npb24oY29ubi51c2VyIHx8ICcnLCAnZGVsZXRlJykpIHtcbiAgICAgIGNvbm4ubGFzdFJlcGx5ID0gUmVwbHlDb2RlLk5PX1BFUk1JU1NJT047XG4gICAgICBjb25uLmxhc3RNZXNzYWdlID0gYFBlcm1pc3Npb24gZGVuaWVkOiBkZWxldGVgO1xuICAgIH1cblxuICAgIC8vIFRPRE86IERvc3lhIHNpbG1lIGltcGxlbWVudGFzeW9udVxuICAgIGNvbm4ubGFzdFJlcGx5ID0gUmVwbHlDb2RlLkNNRF9FUlI7XG4gICAgY29ubi5sYXN0TWVzc2FnZSA9IGBDb21tYW5kIG5vdCB5ZXQgaW1wbGVtZW50ZWQ6IERFTEVgOyAgXG4gIH1cblxuICAvKipcbiAgICogRGl6aW4gb2x1xZ90dXJtYSAoTUtEKSAtIFRPRE86IEltcGxlbWVudFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWF0ZURpcmVjdG9yeShcbiAgICBjb25uOiBGdHBDb25uZWN0aW9uLFxuICAgIHJlbW90ZVBhdGg6IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZyhgW0ZpbGVUcmFuc2Zlcl0gRGlyZWN0b3J5IGNyZWF0aW9uOiAke2Nvbm4udXNlciB8fCAndW5rbm93bid9IC0gJHtyZW1vdGVQYXRofWApO1xuICAgIFxuICAgIC8vIMSwemluIGtvbnRyb2zDvFxuICAgIGlmICghdGhpcy51c2VyTWFuYWdlci5jaGVja1Blcm1pc3Npb24oY29ubi51c2VyIHx8ICcnLCAnbWtkJykpIHtcbiAgICAgIGNvbm4ubGFzdFJlcGx5ID0gUmVwbHlDb2RlLk5PX1BFUk1JU1NJT047XG4gICAgICBjb25uLmxhc3RNZXNzYWdlID0gYFBlcm1pc3Npb24gZGVuaWVkOiBjcmVhdGUgZGlyZWN0b3J5YDtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBEaXppbiBvbHXFn3R1cm1hIGltcGxlbWVudGFzeW9udVxuICAgIGNvbm4ubGFzdFJlcGx5ID0gUmVwbHlDb2RlLkNNRF9FUlI7XG4gICAgY29ubi5sYXN0TWVzc2FnZSA9IGBDb21tYW5kIG5vdCB5ZXQgaW1wbGVtZW50ZWQ6IE1LRGA7ICBcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXppbiBzaWxtZSAoUk1EKSAtIFRPRE86IEltcGxlbWVudFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlbW92ZURpcmVjdG9yeShcbiAgICBjb25uOiBGdHBDb25uZWN0aW9uLFxuICAgIHJlbW90ZVBhdGg6IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZyhgW0ZpbGVUcmFuc2Zlcl0gRGlyZWN0b3J5IHJlbW92YWw6ICR7Y29ubi51c2VyIHx8ICd1bmtub3duJ30gLSAke3JlbW90ZVBhdGh9YCk7XG4gICAgXG4gICAgLy8gxLB6aW4ga29udHJvbMO8XG4gICAgaWYgKCF0aGlzLnVzZXJNYW5hZ2VyLmNoZWNrUGVybWlzc2lvbihjb25uLnVzZXIgfHwgJycsICdybWRpcicpKSB7XG4gICAgICBjb25uLmxhc3RSZXBseSA9IFJlcGx5Q29kZS5OT19QRVJNSVNTSU9OO1xuICAgICAgY29ubi5sYXN0TWVzc2FnZSA9IGBQZXJtaXNzaW9uIGRlbmllZDogcmVtb3ZlIGRpcmVjdG9yeWA7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogRGl6aW4gc2lsbWUgaW1wbGVtZW50YXN5b251XG4gICAgY29ubi5sYXN0UmVwbHkgPSBSZXBseUNvZGUuQ01EX0VSUjtcbiAgICBjb25uLmxhc3RNZXNzYWdlID0gYENvbW1hbmQgbm90IHlldCBpbXBsZW1lbnRlZDogUk1EYDsgIFxuICB9XG5cbiAgLyoqXG4gICAqIERvc3lhIHllbmlkZW4gYWRsYW5kxLFybWEgKFJORlIvUk5UTykgLSBUT0RPOiBJbXBsZW1lbnRcbiAgICovXG4gIHB1YmxpYyBhc3luYyByZW5hbWVGaWxlKFxuICAgIGNvbm46IEZ0cENvbm5lY3Rpb24sXG4gICAgb2xkUGF0aDogc3RyaW5nLFxuICAgIG5ld1BhdGg6IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZyhgW0ZpbGVUcmFuc2Zlcl0gRmlsZSByZW5hbWU6ICR7Y29ubi51c2VyIHx8ICd1bmtub3duJ30gLSAke29sZFBhdGh9IC0+ICR7bmV3UGF0aH1gKTtcbiAgICBcbiAgICAvLyDEsHppbiBrb250cm9sw7xcbiAgICBpZiAoIXRoaXMudXNlck1hbmFnZXIuY2hlY2tQZXJtaXNzaW9uKGNvbm4udXNlciB8fCAnJywgJ3JlbmFtZScpKSB7XG4gICAgICBjb25uLmxhc3RSZXBseSA9IFJlcGx5Q29kZS5OT19QRVJNSVNTSU9OO1xuICAgICAgY29ubi5sYXN0TWVzc2FnZSA9IGBQZXJtaXNzaW9uIGRlbmllZDogcmVuYW1lYDtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBEb3N5YSB5ZW5pZGVuIGFkbGFuZMSxcm1hIGltcGxlbWVudGFzeW9udVxuICAgIGNvbm4ubGFzdFJlcGx5ID0gUmVwbHlDb2RlLkNNRF9FUlI7XG4gICAgY29ubi5sYXN0TWVzc2FnZSA9IGBDb21tYW5kIG5vdCB5ZXQgaW1wbGVtZW50ZWQ6IFJORlIvUk5UT2A7ICBcbiAgfVxuXG4gIC8qKlxuICAgKiBEb3N5YSBpemlubGVyaW5pIGRlxJ9pxZ90aXIgKENITU9EKSAtIFRPRE86IEltcGxlbWVudFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNoYW5nZUZpbGVNb2RlKFxuICAgIGNvbm46IEZ0cENvbm5lY3Rpb24sXG4gICAgcmVtb3RlUGF0aDogc3RyaW5nLFxuICAgIG1vZGU6IG51bWJlclxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZyhgW0ZpbGVUcmFuc2Zlcl0gRmlsZSBwZXJtaXNzaW9ucyBjaGFuZ2U6ICR7Y29ubi51c2VyIHx8ICd1bmtub3duJ30gLSAke3JlbW90ZVBhdGh9YCk7XG4gICAgXG4gICAgLy8gxLB6aW4ga29udHJvbMO8XG4gICAgaWYgKCF0aGlzLnVzZXJNYW5hZ2VyLmNoZWNrUGVybWlzc2lvbihjb25uLnVzZXIgfHwgJycsICdjaG1vZCcpKSB7XG4gICAgICBjb25uLmxhc3RSZXBseSA9IFJlcGx5Q29kZS5OT19QRVJNSVNTSU9OO1xuICAgICAgY29ubi5sYXN0TWVzc2FnZSA9IGBQZXJtaXNzaW9uIGRlbmllZDogY2htb2RgO1xuICAgIH1cblxuICAgIC8vIFRPRE86IERvc3lhIGl6aW5sZXJpIGRlxJ9pxZ90aXJtZSBpbXBsZW1lbnRhc3lvbnVcbiAgICBjb25uLmxhc3RSZXBseSA9IFJlcGx5Q29kZS5DTURfRVJSO1xuICAgIGNvbm4ubGFzdE1lc3NhZ2UgPSBgQ29tbWFuZCBub3QgeWV0IGltcGxlbWVudGVkOiBDSE1PRGA7ICBcbiAgfVxufVxuXG4vLyBTaW5nbGV0b24gaW5zdGFuY2VcbmV4cG9ydCBjb25zdCBmaWxlVHJhbnNmZXIgPSBuZXcgRmlsZVRyYW5zZmVyKCk7Il19
|
package/src/types.d.ts
CHANGED
|
@@ -33,6 +33,8 @@ export declare enum ReplyCode {
|
|
|
33
33
|
NO_SUCH_USER = 530,
|
|
34
34
|
NOT_LOGGED = 530,
|
|
35
35
|
WRITE_PROTECT = 451,
|
|
36
|
+
CANNOT_OPEN_DATA = 425,
|
|
37
|
+
TRANSFER_ABORTED = 426,
|
|
36
38
|
INTERNAL_ERR = 500,
|
|
37
39
|
BAD_CMD = 502,
|
|
38
40
|
BAD_USER = 530,
|
|
@@ -111,7 +113,7 @@ export type CommandHandler = (conn: FtpConnection, args: string) => Promise<Comm
|
|
|
111
113
|
export interface ServerConfig {
|
|
112
114
|
port: number;
|
|
113
115
|
dataPort: number;
|
|
114
|
-
userFile: string;
|
|
116
|
+
userFile: string | UserManagerData;
|
|
115
117
|
maxConnections: number;
|
|
116
118
|
logLevel: 'debug' | 'info' | 'warn' | 'error';
|
|
117
119
|
banner: string;
|
|
@@ -119,6 +121,7 @@ export interface ServerConfig {
|
|
|
119
121
|
min: number;
|
|
120
122
|
max: number;
|
|
121
123
|
};
|
|
124
|
+
passiveIp?: string;
|
|
122
125
|
}
|
|
123
126
|
export interface TransferStatus {
|
|
124
127
|
file: string;
|
package/src/types.js
CHANGED
|
@@ -36,6 +36,8 @@ var ReplyCode;
|
|
|
36
36
|
ReplyCode[ReplyCode["NO_SUCH_USER"] = 530] = "NO_SUCH_USER";
|
|
37
37
|
ReplyCode[ReplyCode["NOT_LOGGED"] = 530] = "NOT_LOGGED";
|
|
38
38
|
ReplyCode[ReplyCode["WRITE_PROTECT"] = 451] = "WRITE_PROTECT";
|
|
39
|
+
ReplyCode[ReplyCode["CANNOT_OPEN_DATA"] = 425] = "CANNOT_OPEN_DATA";
|
|
40
|
+
ReplyCode[ReplyCode["TRANSFER_ABORTED"] = 426] = "TRANSFER_ABORTED";
|
|
39
41
|
ReplyCode[ReplyCode["INTERNAL_ERR"] = 500] = "INTERNAL_ERR";
|
|
40
42
|
ReplyCode[ReplyCode["BAD_CMD"] = 502] = "BAD_CMD";
|
|
41
43
|
ReplyCode[ReplyCode["BAD_USER"] = 530] = "BAD_USER";
|
|
@@ -50,4 +52,4 @@ var ReplyCode;
|
|
|
50
52
|
ReplyCode[ReplyCode["TIMEOUT"] = 421] = "TIMEOUT";
|
|
51
53
|
ReplyCode[ReplyCode["SERVICE_NOT_AVAILABLE"] = 421] = "SERVICE_NOT_AVAILABLE";
|
|
52
54
|
})(ReplyCode || (exports.ReplyCode = ReplyCode = {}));
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBVUEsSUFBWSxTQTBEWDtBQTFERCxXQUFZLFNBQVM7SUFFbkIsbURBQWMsQ0FBQTtJQUNkLDJEQUFrQixDQUFBO0lBR2xCLHVDQUFRLENBQUE7SUFDUixpREFBYSxDQUFBO0lBQ2IsaURBQWEsQ0FBQTtJQUNiLG1EQUFjLENBQUE7SUFDZCxtREFBYyxDQUFBO0lBQ2QsaURBQWEsQ0FBQTtJQUNiLGlEQUFhLENBQUE7SUFDYixpREFBYSxDQUFBO0lBQ2IsaURBQWEsQ0FBQTtJQUNiLCtDQUFZLENBQUE7SUFDWiwrQ0FBWSxDQUFBO0lBQ1osaURBQWEsQ0FBQTtJQUNiLG1EQUFjLENBQUE7SUFDZCxpREFBYSxDQUFBO0lBQ2IsaURBQWEsQ0FBQTtJQUNiLCtDQUFZLENBQUE7SUFDWiwrQ0FBWSxDQUFBO0lBQ1osaURBQWEsQ0FBQTtJQUdiLHFEQUFlLENBQUE7SUFDZixtREFBYyxDQUFBO0lBQ2QsbURBQWMsQ0FBQTtJQUNkLG1EQUFjLENBQUE7SUFHZCxtREFBYyxDQUFBO0lBQ2QsbURBQWMsQ0FBQTtJQUNkLGlEQUFhLENBQUE7SUFDYix1REFBZ0IsQ0FBQTtJQUNoQixxREFBZSxDQUFBO0lBQ2YsaURBQWEsQ0FBQTtJQUNiLDJEQUFrQixDQUFBO0lBQ2xCLHVEQUFnQixDQUFBO0lBQ2hCLDZEQUFtQixDQUFBO0lBQ25CLG1FQUFzQixDQUFBO0lBQ3RCLG1FQUFzQixDQUFBO0lBR3RCLDJEQUFrQixDQUFBO0lBQ2xCLGlEQUFhLENBQUE7SUFDYixtREFBYyxDQUFBO0lBQ2QseURBQWlCLENBQUE7SUFDakIsK0RBQW9CLENBQUE7SUFDcEIseURBQWlCLENBQUE7SUFDakIsNkRBQW1CLENBQUE7SUFDbkIsbUVBQXNCLENBQUE7SUFDdEIseURBQWlCLENBQUE7SUFDakIsaURBQWEsQ0FBQTtJQUNiLHlEQUFpQixDQUFBO0lBQ2pCLGlEQUFhLENBQUE7SUFDYiw2RUFBMkIsQ0FBQTtBQUM3QixDQUFDLEVBMURXLFNBQVMsYUFBVCxTQUFTLEdBQVQsU0FBUyxRQTBEcEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBuZXQgZnJvbSAnbmV0JztcblxuLyoqXG4gKiBSRkMgOTU5IEZUUCBQcm90b2NvbCBUeXBlc1xuICogaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvaW5mby9yZmM5NTlcbiAqL1xuXG4vKipcbiAqIEZUUCBZYW7EsXQgS29kbGFyxLEgKFJGQyA5NTkpXG4gKi9cbmV4cG9ydCBlbnVtIFJlcGx5Q29kZSB7XG4gIC8qKiAxMDAtMTk5OiDEsMWfbGVtIHRhbWFtbGFubWFkxLEsIGJpbGdpIG1lc2FqxLEgKi9cbiAgQ09OVElOVUUgPSAxMjUsXG4gIERBVEFfQ09OTkVDVCA9IDE1MCxcbiAgXG4gIC8qKiAyMDAtMjk5OiBCYcWfYXLEsWzEsSAqL1xuICBPSyA9IDIwMCxcbiAgVVNFUl9PSyA9IDIzMCxcbiAgUEFTU19PSyA9IDIzMCxcbiAgU1lTX05BTUUgPSAyMTEsXG4gIFNZU19UWVBFID0gMjE1LFxuICBGRUFUX09LID0gMjExLFxuICBSRVRSX09LID0gMjI2LFxuICBTVE9SX09LID0gMjI2LFxuICBERUxFX09LID0gMjUwLFxuICBSTURfT0sgPSAyNTAsXG4gIE1LRF9PSyA9IDI1NyxcbiAgTElTVF9PSyA9IDE1MCxcbiAgTElTVF9FTkQgPSAyMjYsXG4gIE5PT1BfT0sgPSAyMDAsXG4gIFFVSVRfT0sgPSAyMjEsXG4gIENXRF9PSyA9IDI1MCxcbiAgUFdEX09LID0gMjU3LFxuICBSRVNUX09LID0gMzUwLFxuICBcbiAgLyoqIDMwMC0zOTk6IEJla2xleWVuIGJpbGdpICovXG4gIFVTRVJfUEFTUyA9IDMzMSxcbiAgUEFTU19BQ0MgPSAzMzIsXG4gIFVTRVJfQUNDID0gMzMyLFxuICBSRVNUX05FVyA9IDM1MCxcbiAgXG4gIC8qKiA0MDAtNDk5OiBHZcOnaWNpIGhhdGEgKi9cbiAgVVNFUl9FUlIgPSA1MDMsXG4gIFBBU1NfRVJSID0gNTAzLFxuICBDTURfRVJSID0gNTAwLFxuICBTWU5UQVhfRVJSID0gNTAxLFxuICBQQVJBTV9FUlIgPSA1MDIsXG4gIEJBRF9TRVEgPSA1MDMsXG4gIE5PX1NVQ0hfVVNFUiA9IDUzMCxcbiAgTk9UX0xPR0dFRCA9IDUzMCxcbiAgV1JJVEVfUFJPVEVDVCA9IDQ1MSxcbiAgQ0FOTk9UX09QRU5fREFUQSA9IDQyNSxcbiAgVFJBTlNGRVJfQUJPUlRFRCA9IDQyNixcbiAgXG4gIC8qKiA1MDAtNTk5OiBLYWzEsWPEsSBoYXRhICovXG4gIElOVEVSTkFMX0VSUiA9IDUwMCxcbiAgQkFEX0NNRCA9IDUwMixcbiAgQkFEX1VTRVIgPSA1MzAsXG4gIE5PVF9BTExPV0VEID0gNTUwLFxuICBGSUxFX05PVF9GT1VORCA9IDU1MCxcbiAgUEFUSF9FWElTVFMgPSA1NTAsXG4gIE5PX1BFUk1JU1NJT04gPSA1NTAsXG4gIERJUkVDVE9SWV9FWElTVFMgPSA1NTAsXG4gIEZJTEVfRVhJU1RTID0gNTUwLFxuICBTWVNUX09LID0gMjE1LFxuICBCQURfQUREUkVTUyA9IDQyMSxcbiAgVElNRU9VVCA9IDQyMSxcbiAgU0VSVklDRV9OT1RfQVZBSUxBQkxFID0gNDIxLFxufVxuXG4vKipcbiAqIEt1bGxhbsSxY8SxIGl6aW4gdMO8cmxlcmlcbiAqL1xuZXhwb3J0IHR5cGUgUGVybWlzc2lvbiA9IFxuICB8ICdyZWFkJyAgICAgICAgICAgLy8gRG9zeWEgb2t1bWFcbiAgfCAnd3JpdGUnICAgICAgICAgIC8vIERvc3lhIHlhem1hXG4gIHwgJ2xpc3QnICAgICAgICAgICAvLyBEaXppbiBsaXN0ZWxlbWVcbiAgfCAnY3JlYXRlJyAgICAgICAgIC8vIERvc3lhL2RpemluIG9sdcWfdHVybWFcbiAgfCAnYXBwZW5kJyAgICAgICAgIC8vIERvc3lhIGVrbGVtZVxuICB8ICdkZWxldGUnICAgICAgICAgLy8gRG9zeWEgc2lsbWVcbiAgfCAnY2htb2QnICAgICAgICAgIC8vIERvc3lhIGl6aW5sZXJpIGRlxJ9pxZ90aXJtZVxuICB8ICdta2QnICAgICAgICAgICAgLy8gRGl6aW4gb2x1xZ90dXJtYVxuICB8ICdybWRpcicgICAgICAgICAgLy8gRGl6aW4gc2lsbWVcbiAgfCAncmVuYW1lJyAgICAgICAgIC8vIERvc3lhIHllbmlkZW4gYWRsYW5kxLFybWFcbiAgfCAnZGVsZXRlbXlmaWxlcycgIC8vIEtlbmRpIGRvc3lhbGFyxLFuxLEgc2lsbWVcbiAgfCAnbm9wYXNzd2QnICAgICAgIC8vIMWeaWZyZXNpeiBnaXJpxZ9cbiAgfCAncGFzc2l2ZScgICAgICAgIC8vIFBhc2lmIG1vZCAoUEFTVilcbiAgfCAncG9ydCcgICAgICAgICAgIC8vIEFrdGlmIG1vZCAoUE9SVClcbiAgfCAnbm9ubG9jYWxiaW5kJyAgIC8vIFllcmVsIG9sbWF5YW4gYmHEn2xhbm1hXG4gIHwgJ3ByaXZhdGUnICAgICAgICAvLyDDlnplbCBrb211dGxhclxuICB8ICd0bHMnOyAgICAgICAgICAgIC8vIFRMUy9TU0xcblxuLyoqXG4gKiBLdWxsYW7EsWPEsSBpemluIG9iamVzaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQZXJtaXNzaW9ucyB7XG4gIHJlYWQ/OiBib29sZWFuO1xuICB3cml0ZT86IGJvb2xlYW47XG4gIGxpc3Q/OiBib29sZWFuO1xuICBjcmVhdGU/OiBib29sZWFuO1xuICBhcHBlbmQ/OiBib29sZWFuO1xuICBkZWxldGU/OiBib29sZWFuO1xuICBjaG1vZD86IGJvb2xlYW47XG4gIG1rZD86IGJvb2xlYW47XG4gIHJtZGlyPzogYm9vbGVhbjtcbiAgcmVuYW1lPzogYm9vbGVhbjtcbiAgZGVsZXRlbXlmaWxlcz86IGJvb2xlYW47XG4gIG5vcGFzc3dkPzogYm9vbGVhbjtcbiAgcGFzc2l2ZT86IGJvb2xlYW47XG4gIHBvcnQ/OiBib29sZWFuO1xuICBub25sb2NhbGJpbmQ/OiBib29sZWFuO1xuICBwcml2YXRlPzogYm9vbGVhbjtcbiAgdGxzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBGVFAgQmHEn2xhbnTEsSBiaWxnaWxlcmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGdHBDb25uZWN0aW9uIHtcbiAgc29ja2V0OiBuZXQuU29ja2V0O1xuICB1c2VyOiBzdHJpbmcgfCBudWxsO1xuICBwYXNzOiBzdHJpbmcgfCBudWxsO1xuICBob21lRGlyOiBzdHJpbmc7XG4gIGN1cnJlbnREaXI6IHN0cmluZztcbiAgcGVybWlzc2lvbnM6IFVzZXJQZXJtaXNzaW9ucztcbiAgdHJhbnNmZXJNb2RlOiAnYXNjaWknIHwgJ2JpbmFyeScgfCBudWxsO1xuICB0cmFuc2ZlclNpemU6IG51bWJlcjtcbiAgbGFzdFJlcGx5OiBudW1iZXI7XG4gIGxhc3RNZXNzYWdlOiBzdHJpbmc7XG4gIC8qKiBSTkZSIGlsZSBiZWxpcmxlbmVuIHllbmlkZW4gYWRsYW5kxLFybWEga2F5bmHEn8SxICovXG4gIHJuZnJQYXRoPzogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFZlcmkgYmFnbGFudGkgbW9kdTogUEFTViAocGFzaWYpIHZleWEgUE9SVCAoYWt0aWYpICovXG4gIGRhdGFNb2RlPzogJ3Bhc3NpdmUnIHwgJ2FjdGl2ZSc7XG4gIC8qKiBBa3RpZiBtb2RkYSAoUE9SVCkgaXN0ZW1jaW5pbiBkaW5sZWRpZ2kgYWRyZXMgKi9cbiAgYWN0aXZlRGF0YVRhcmdldD86IHsgaXA6IHN0cmluZzsgcG9ydDogbnVtYmVyIH07XG59XG5cbi8qKlxuICogS3VsbGFuxLFjxLEgYmlsZ2lsZXJpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlciB7XG4gIHVzZXJuYW1lOiBzdHJpbmc7XG4gIHBhc3N3b3JkOiBzdHJpbmc7XG4gIGhvbWVEaXI6IHN0cmluZztcbiAgcGVybWlzc2lvbnM6IFVzZXJQZXJtaXNzaW9ucztcbiAgaXNBY3RpdmU6IGJvb2xlYW47XG59XG5cbi8qKlxuICogS3VsbGFuxLFjxLEgecO2bmV0aW1pIHZlcml0YWJhbsSxXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlck1hbmFnZXJEYXRhIHtcbiAgdXNlcnM6IFVzZXJbXTtcbiAgbGFzdFVwZGF0ZWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBWZXJpIGJhxJ9sYW50xLFzxLEgYmlsZ2lsZXJpIChQT1JUL1BBU1YpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUNvbm5lY3Rpb24ge1xuICBzb2NrZXQ6IG5ldC5Tb2NrZXQ7XG4gIHBhc3NpdmU6IGJvb2xlYW47XG4gIGxvY2FsUG9ydDogbnVtYmVyO1xuICBzdGF0ZTogJ2xpc3RlbmluZycgfCAnY29ubmVjdGluZycgfCAnY29ubmVjdGVkJyB8ICdjbG9zaW5nJyB8ICdjbG9zZWQnO1xufVxuXG4vKipcbiAqIEtvbXV0IHNvbnXDpyBvYmplc2lcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kUmVzdWx0IHtcbiAgY29kZTogbnVtYmVyO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGRhdGE/OiB1bmtub3duO1xufVxuXG4vKipcbiAqIEtvbXV0IGnFn2xldmkgdGlwIHRhbsSxbWxhbWFzxLFcbiAqL1xuZXhwb3J0IHR5cGUgQ29tbWFuZEhhbmRsZXIgPSAoY29ubjogRnRwQ29ubmVjdGlvbiwgYXJnczogc3RyaW5nKSA9PiBQcm9taXNlPENvbW1hbmRSZXN1bHQ+O1xuXG4vKipcbiAqIFNlcnZlciBheWFybGFyxLFcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXJDb25maWcge1xuICBwb3J0OiBudW1iZXI7XG4gIGRhdGFQb3J0OiBudW1iZXI7XG4gIHVzZXJGaWxlOiBzdHJpbmcgfCBVc2VyTWFuYWdlckRhdGE7XG4gIG1heENvbm5lY3Rpb25zOiBudW1iZXI7XG4gIGxvZ0xldmVsOiAnZGVidWcnIHwgJ2luZm8nIHwgJ3dhcm4nIHwgJ2Vycm9yJztcbiAgLyoqIDIyMCBrYXJzaWxhbWEgKGJhbm5lcikgbWVzYWppOyBib3MgYmlyYWtpbGlyc2EgXCI8cG9ydD4gRlRQIFNlcnZlciBSZWFkeVwiIGt1bGxhbmlsaXIgKi9cbiAgYmFubmVyOiBzdHJpbmc7XG4gIC8qKiBQQVNWIHZlcmkgYmFnbGFudGkgcG9ydGxhcmkgYnUgYXJhbGlrdGFuIHNlY2lsaXIgKi9cbiAgcGFzc2l2ZVBvcnRSYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfTtcbiAgLyoqIFBBU1YgeWFuaXRpbmRhIGt1bGxhbmlsYWNhayBzdW51Y3UgSVAgYWRyZXNpIChvcHNpeW9uZWw7IHZlcmlsbWV6c2Ugb3RvbWF0aWsgdGVzcGl0IGVkaWxpcikgKi9cbiAgcGFzc2l2ZUlwPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIERvc3lhIHRyYW5zZmVyIGR1cnVtdVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zZmVyU3RhdHVzIHtcbiAgZmlsZTogc3RyaW5nO1xuICBzdGF0ZTogJ3BlbmRpbmcnIHwgJ3RyYW5zZmVycmluZycgfCAnY29tcGxldGUnIHwgJ2ZhaWxlZCc7XG4gIHNpemU6IG51bWJlcjtcbiAgdHJhbnNmZXJyZWQ6IG51bWJlcjtcbiAgbW9kZTogJ2FzY2lpJyB8ICdiaW5hcnknO1xuICB0aW1lc3RhbXA6IHN0cmluZztcbn1cblxuIl19
|
package/src/userManager.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { User, UserPermissions, Permission } from './types';
|
|
1
|
+
import { User, UserPermissions, UserManagerData, Permission } from './types';
|
|
2
2
|
export declare class UserManager {
|
|
3
3
|
private userFile;
|
|
4
|
+
private persist;
|
|
4
5
|
private users;
|
|
5
6
|
private data;
|
|
6
|
-
constructor(userFile: string);
|
|
7
|
+
constructor(userFile: string | UserManagerData | any);
|
|
8
|
+
private normalizeData;
|
|
7
9
|
private load;
|
|
8
10
|
private save;
|
|
9
11
|
findUser(username: string): User | null;
|
package/src/userManager.js
CHANGED
|
@@ -40,7 +40,7 @@ const path = __importStar(require("path"));
|
|
|
40
40
|
const DEFAULT_USERS = [
|
|
41
41
|
{
|
|
42
42
|
username: 'admin',
|
|
43
|
-
password: '
|
|
43
|
+
password: 'admin',
|
|
44
44
|
homeDir: path.join(__dirname, '../files/admin'),
|
|
45
45
|
permissions: {
|
|
46
46
|
read: true,
|
|
@@ -56,52 +56,73 @@ const DEFAULT_USERS = [
|
|
|
56
56
|
deletemyfiles: true,
|
|
57
57
|
},
|
|
58
58
|
isActive: true,
|
|
59
|
-
}
|
|
60
|
-
{
|
|
61
|
-
username: 'guest',
|
|
62
|
-
password: 'guest123',
|
|
63
|
-
homeDir: path.join(__dirname, '../files/guest'),
|
|
64
|
-
permissions: {
|
|
65
|
-
read: true,
|
|
66
|
-
write: false,
|
|
67
|
-
list: true,
|
|
68
|
-
create: false,
|
|
69
|
-
append: false,
|
|
70
|
-
delete: false,
|
|
71
|
-
chmod: false,
|
|
72
|
-
mkd: false,
|
|
73
|
-
rmdir: false,
|
|
74
|
-
rename: false,
|
|
75
|
-
deletemyfiles: false,
|
|
76
|
-
},
|
|
77
|
-
isActive: true,
|
|
78
|
-
},
|
|
59
|
+
}
|
|
79
60
|
];
|
|
80
61
|
class UserManager {
|
|
81
62
|
constructor(userFile) {
|
|
82
63
|
this.users = [];
|
|
83
|
-
|
|
84
|
-
|
|
64
|
+
if (typeof userFile === 'string') {
|
|
65
|
+
this.userFile = userFile;
|
|
66
|
+
this.persist = true;
|
|
67
|
+
this.load();
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
this.userFile = null;
|
|
71
|
+
this.persist = false;
|
|
72
|
+
this.data = this.normalizeData(userFile);
|
|
73
|
+
this.users = this.data.users || [];
|
|
74
|
+
if (!this.users || this.users.length === 0) {
|
|
75
|
+
this.users = DEFAULT_USERS;
|
|
76
|
+
this.data = { users: DEFAULT_USERS, lastUpdated: new Date().toISOString() };
|
|
77
|
+
}
|
|
78
|
+
console.log(`[UserManager] ${this.users.length} users loaded (in-memory)`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
normalizeData(input) {
|
|
82
|
+
try {
|
|
83
|
+
if (input && Array.isArray(input.users)) {
|
|
84
|
+
return {
|
|
85
|
+
users: input.users,
|
|
86
|
+
lastUpdated: input.lastUpdated || new Date().toISOString(),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
if (Array.isArray(input)) {
|
|
90
|
+
return {
|
|
91
|
+
users: input,
|
|
92
|
+
lastUpdated: new Date().toISOString(),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
if (input && input.data && Array.isArray(input.data.users)) {
|
|
96
|
+
return {
|
|
97
|
+
users: input.data.users,
|
|
98
|
+
lastUpdated: input.data.lastUpdated || new Date().toISOString(),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch (e) {
|
|
103
|
+
}
|
|
104
|
+
return { users: DEFAULT_USERS, lastUpdated: new Date().toISOString() };
|
|
85
105
|
}
|
|
86
106
|
load() {
|
|
87
107
|
try {
|
|
88
|
-
if (fs.existsSync(this.userFile)) {
|
|
108
|
+
if (this.userFile && fs.existsSync(this.userFile)) {
|
|
89
109
|
const content = fs.readFileSync(this.userFile, 'utf-8');
|
|
90
110
|
this.data = JSON.parse(content);
|
|
91
111
|
this.users = this.data.users || [];
|
|
92
|
-
console.log(`[UserManager] ${this.users.length}
|
|
112
|
+
console.log(`[UserManager] ${this.users.length} users loaded`);
|
|
93
113
|
}
|
|
94
114
|
else {
|
|
95
115
|
this.data = {
|
|
96
116
|
users: DEFAULT_USERS,
|
|
97
117
|
lastUpdated: new Date().toISOString(),
|
|
98
118
|
};
|
|
119
|
+
this.users = DEFAULT_USERS;
|
|
99
120
|
this.save();
|
|
100
|
-
console.log(`[UserManager]
|
|
121
|
+
console.log(`[UserManager] Default ${this.users.length} users created`);
|
|
101
122
|
}
|
|
102
123
|
}
|
|
103
124
|
catch (error) {
|
|
104
|
-
console.error(
|
|
125
|
+
console.error(`[UserManager] Load error:`);
|
|
105
126
|
this.users = DEFAULT_USERS;
|
|
106
127
|
this.data = {
|
|
107
128
|
users: DEFAULT_USERS,
|
|
@@ -110,37 +131,40 @@ class UserManager {
|
|
|
110
131
|
}
|
|
111
132
|
}
|
|
112
133
|
save() {
|
|
134
|
+
if (!this.persist || !this.userFile) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
113
137
|
try {
|
|
114
138
|
this.data.lastUpdated = new Date().toISOString();
|
|
115
139
|
fs.writeFileSync(this.userFile, JSON.stringify(this.data, null, 2));
|
|
116
|
-
console.log(`[UserManager]
|
|
140
|
+
console.log(`[UserManager] Data saved`);
|
|
117
141
|
}
|
|
118
142
|
catch (error) {
|
|
119
|
-
console.error(
|
|
143
|
+
console.error(`[UserManager] Save error:`, error);
|
|
120
144
|
}
|
|
121
145
|
}
|
|
122
146
|
findUser(username) {
|
|
123
147
|
if (!username || username.trim() === '') {
|
|
124
|
-
console.error(
|
|
148
|
+
console.error(`[UserManager] User not found: ${username}`);
|
|
125
149
|
return null;
|
|
126
150
|
}
|
|
127
151
|
const user = this.users.find((u) => u.username.toLowerCase() === username.toLowerCase() && u.isActive);
|
|
128
152
|
if (!user) {
|
|
129
|
-
console.error(
|
|
153
|
+
console.error(`[UserManager] User not found: ${username}`);
|
|
130
154
|
}
|
|
131
155
|
if (!user) {
|
|
132
|
-
console.log(`[UserManager]
|
|
156
|
+
console.log(`[UserManager] Empty username or password`);
|
|
133
157
|
}
|
|
134
158
|
return user;
|
|
135
159
|
}
|
|
136
160
|
addUser(username, password, homeDir, permissions) {
|
|
137
161
|
if (!username || !password) {
|
|
138
|
-
console.error(
|
|
162
|
+
console.error(`[UserManager] User already exists: ${username}`);
|
|
139
163
|
return false;
|
|
140
164
|
}
|
|
141
165
|
const existing = this.findUser(username);
|
|
142
166
|
if (existing) {
|
|
143
|
-
console.log(`[UserManager]
|
|
167
|
+
console.log(`[UserManager] User added: ${username}`);
|
|
144
168
|
return false;
|
|
145
169
|
}
|
|
146
170
|
const newUser = {
|
|
@@ -152,35 +176,35 @@ class UserManager {
|
|
|
152
176
|
};
|
|
153
177
|
this.users.push(newUser);
|
|
154
178
|
this.save();
|
|
155
|
-
console.log(`[UserManager]
|
|
179
|
+
console.log(`[UserManager] User not found: ${username}`);
|
|
156
180
|
return true;
|
|
157
181
|
}
|
|
158
182
|
deleteUser(username) {
|
|
159
183
|
const user = this.findUser(username);
|
|
160
184
|
if (!user) {
|
|
161
|
-
console.log(`[UserManager]
|
|
185
|
+
console.log(`[UserManager] User deleted: ${username}`);
|
|
162
186
|
return false;
|
|
163
187
|
}
|
|
164
188
|
this.users = this.users.filter((u) => u.username !== username);
|
|
165
189
|
this.save();
|
|
166
|
-
console.log(`[UserManager]
|
|
190
|
+
console.log(`[UserManager] User not found: ${username}`);
|
|
167
191
|
return true;
|
|
168
192
|
}
|
|
169
193
|
toggleUserStatus(username, isActive) {
|
|
170
194
|
const user = this.findUser(username);
|
|
171
195
|
if (!user) {
|
|
172
|
-
console.log(`[UserManager]
|
|
196
|
+
console.log(`[UserManager] User status changed: ${username} (${isActive ? 'active' : 'passive'})`);
|
|
173
197
|
return false;
|
|
174
198
|
}
|
|
175
199
|
user.isActive = isActive;
|
|
176
200
|
this.save();
|
|
177
|
-
console.log(`[UserManager]
|
|
201
|
+
console.log(`[UserManager] User not found: ${username}`);
|
|
178
202
|
return true;
|
|
179
203
|
}
|
|
180
204
|
updatePermissions(username, permissions) {
|
|
181
205
|
const user = this.findUser(username);
|
|
182
206
|
if (!user) {
|
|
183
|
-
console.log(`[UserManager]
|
|
207
|
+
console.log(`[UserManager] Permissions updated: ${username}`);
|
|
184
208
|
return false;
|
|
185
209
|
}
|
|
186
210
|
const currentPermissions = user.permissions || {};
|
|
@@ -190,21 +214,21 @@ class UserManager {
|
|
|
190
214
|
};
|
|
191
215
|
user.permissions = newPermissions;
|
|
192
216
|
this.save();
|
|
193
|
-
console.log(`[UserManager]
|
|
217
|
+
console.log(`[UserManager] Permission check failed - user not found: ${username}`);
|
|
194
218
|
return true;
|
|
195
219
|
}
|
|
196
220
|
checkPermission(username, permission) {
|
|
197
221
|
const user = this.findUser(username);
|
|
198
222
|
if (!user) {
|
|
199
|
-
console.log(`[UserManager]
|
|
223
|
+
console.log(`[UserManager] User not found: ${username}`);
|
|
200
224
|
return false;
|
|
201
225
|
}
|
|
202
226
|
const hasPermission = user.permissions?.[permission] === true;
|
|
203
227
|
if (!hasPermission) {
|
|
204
|
-
console.log(`[UserManager]
|
|
228
|
+
console.log(`[UserManager] Permission denied: ${username} - ${permission}`);
|
|
205
229
|
}
|
|
206
230
|
else {
|
|
207
|
-
console.log(`[UserManager]
|
|
231
|
+
console.log(`[UserManager] Permission granted: ${username} - ${permission}`);
|
|
208
232
|
}
|
|
209
233
|
return hasPermission;
|
|
210
234
|
}
|
|
@@ -224,39 +248,39 @@ class UserManager {
|
|
|
224
248
|
changeUsername(oldUsername, newUsername) {
|
|
225
249
|
const user = this.findUser(oldUsername);
|
|
226
250
|
if (!user) {
|
|
227
|
-
console.log(`[UserManager]
|
|
251
|
+
console.log(`[UserManager] Username already exists: ${newUsername}`);
|
|
228
252
|
return false;
|
|
229
253
|
}
|
|
230
254
|
const existing = this.findUser(newUsername);
|
|
231
255
|
if (existing) {
|
|
232
|
-
console.log(`[UserManager]
|
|
256
|
+
console.log(`[UserManager] Username already exists: ${newUsername}`);
|
|
233
257
|
return false;
|
|
234
258
|
}
|
|
235
259
|
user.username = newUsername;
|
|
236
260
|
this.save();
|
|
237
|
-
console.log(`[UserManager]
|
|
261
|
+
console.log(`[UserManager] Username changed: ${oldUsername} -> ${newUsername}`);
|
|
238
262
|
return true;
|
|
239
263
|
}
|
|
240
264
|
changePassword(username, newPassword) {
|
|
241
265
|
const user = this.findUser(username);
|
|
242
266
|
if (!user) {
|
|
243
|
-
console.log(`[UserManager]
|
|
267
|
+
console.log(`[UserManager] Password changed: ${username}`);
|
|
244
268
|
return false;
|
|
245
269
|
}
|
|
246
270
|
user.password = newPassword;
|
|
247
271
|
this.save();
|
|
248
|
-
console.log(`[UserManager]
|
|
272
|
+
console.log(`[UserManager] User not found: ${username}`);
|
|
249
273
|
return true;
|
|
250
274
|
}
|
|
251
275
|
changeHomeDir(username, newHomeDir) {
|
|
252
276
|
const user = this.findUser(username);
|
|
253
277
|
if (!user) {
|
|
254
|
-
console.log(`[UserManager]
|
|
278
|
+
console.log(`[UserManager] User not found: ${username}`);
|
|
255
279
|
return false;
|
|
256
280
|
}
|
|
257
281
|
user.homeDir = path.resolve(newHomeDir);
|
|
258
282
|
this.save();
|
|
259
|
-
console.log(`[UserManager]
|
|
283
|
+
console.log(`[UserManager] Directory changed: ${username} -> ${user.homeDir}`);
|
|
260
284
|
return true;
|
|
261
285
|
}
|
|
262
286
|
static getInstance(userFile) {
|
|
@@ -284,4 +308,4 @@ async function getUserManager(userFile) {
|
|
|
284
308
|
}
|
|
285
309
|
return userManagerInitPromise;
|
|
286
310
|
}
|
|
287
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlck1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXNlck1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE1BQVksRUFBRSwrQkFBVztBQUN6QixNQUFZLElBQUksaUNBQWE7QUFNN0IsTUFBTSxhQUFhLEdBQVc7SUFDNUI7UUFDRSxRQUFRLEVBQUUsT0FBTztRQUNqQixRQUFRLEVBQUUsVUFBVTtRQUNwQixPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUM7UUFDL0MsV0FBVyxFQUFFO1lBQ1gsSUFBSSxFQUFFLElBQUk7WUFDVixLQUFLLEVBQUUsSUFBSTtZQUNYLElBQUksRUFBRSxJQUFJO1lBQ1YsTUFBTSxFQUFFLElBQUk7WUFDWixNQUFNLEVBQUUsSUFBSTtZQUNaLE1BQU0sRUFBRSxJQUFJO1lBQ1osS0FBSyxFQUFFLElBQUk7WUFDWCxHQUFHLEVBQUUsSUFBSTtZQUNULEtBQUssRUFBRSxJQUFJO1lBQ1gsTUFBTSxFQUFFLElBQUk7WUFDWixhQUFhLEVBQUUsSUFBSTtTQUNwQjtRQUNELFFBQVEsRUFBRSxJQUFJO0tBQ2Y7SUFDRDtRQUNFLFFBQVEsRUFBRSxPQUFPO1FBQ2pCLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQztRQUMvQyxXQUFXLEVBQUU7WUFDWCxJQUFJLEVBQUUsSUFBSTtZQUNWLEtBQUssRUFBRSxLQUFLO1lBQ1osSUFBSSxFQUFFLElBQUk7WUFDVixNQUFNLEVBQUUsS0FBSztZQUNiLE1BQU0sRUFBRSxLQUFLO1lBQ2IsTUFBTSxFQUFFLEtBQUs7WUFDYixLQUFLLEVBQUUsS0FBSztZQUNaLEdBQUcsRUFBRSxLQUFLO1lBQ1YsS0FBSyxFQUFFLEtBQUs7WUFDWixNQUFNLEVBQUUs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Q0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUMsU0FBUyxDQUFDO0lBQy9CLENBQUM7Q0FHRjs7QUFEZ0IscUJBQVMsR0FBdUIsSUFBSSxBQUEzQixDQUE0QjtBQUl0RCxJQUFJLG1CQUFtQixHQUF1QixJQUFJLENBQUM7QUFDbkQsSUFBSSxzQkFBc0IsR0FBZ0MsSUFBSSxDQUFDO0FBRXhELEtBQUsseUJBQXlCLFFBQWlCO0lBQ3BELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzVCLHNCQUFzQixHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDbkMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDZCxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7Z0JBQ25ELENBQUM7Z0JBQ0QsbUJBQW1CLEdBQUcsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEQsQ0FBQztZQUNELE9BQU8sbUJBQW1CLENBQUM7UUFDN0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNQLENBQUM7SUFDRCxPQUFPLHNCQUFzQixDQUFDO0FBQ2hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCB7IFVzZXIsIFVzZXJQZXJtaXNzaW9ucywgVXNlck1hbmFnZXJEYXRhLCBQZXJtaXNzaW9uIH0gZnJvbSAnLi90eXBlcyc7XHJcblxyXG4vKipcclxuICogRGVmYXVsdCBrdWxsYW7EsWPEsWxhclxyXG4gKi9cclxuY29uc3QgREVGQVVMVF9VU0VSUzogVXNlcltdID0gW1xyXG4gIHtcclxuICAgIHVzZXJuYW1lOiAnYWRtaW4nLFxyXG4gICAgcGFzc3dvcmQ6ICdhZG1pbjEyMycsXHJcbiAgICBob21lRGlyOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vZmlsZXMvYWRtaW4nKSxcclxuICAgIHBlcm1pc3Npb25zOiB7XHJcbiAgICAgIHJlYWQ6IHRydWUsXHJcbiAgICAgIHdyaXRlOiB0cnVlLFxyXG4gICAgICBsaXN0OiB0cnVlLFxyXG4gICAgICBjcmVhdGU6IHRydWUsXHJcbiAgICAgIGFwcGVuZDogdHJ1ZSxcclxuICAgICAgZGVsZXRlOiB0cnVlLFxyXG4gICAgICBjaG1vZDogdHJ1ZSxcclxuICAgICAgbWtkOiB0cnVlLFxyXG4gICAgICBybWRpcjogdHJ1ZSxcclxuICAgICAgcmVuYW1lOiB0cnVlLFxyXG4gICAgICBkZWxldGVteWZpbGVzOiB0cnVlLFxyXG4gICAgfSxcclxuICAgIGlzQWN0aXZlOiB0cnVlLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgdXNlcm5hbWU6ICdndWVzdCcsXHJcbiAgICBwYXNzd29yZDogJ2d1ZXN0MTIzJyxcclxuICAgIGhvbWVEaXI6IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9maWxlcy9ndWVzdCcpLFxyXG4gICAgcGVybWlzc2lvbnM6IHtcclxuICAgICAgcmVhZDogdHJ1ZSxcclxuICAgICAgd3JpdGU6IGZhbHNlLFxyXG4gICAgICBsaXN0OiB0cnVlLFxyXG4gICAgICBjcmVhdGU6IGZhbHNlLFxyXG4gICAgICBhcHBlbmQ6IGZhbHNlLFxyXG4gICAgICBkZWxldGU6IGZhbHNlLFxyXG4gICAgICBjaG1vZDogZmFsc2UsXHJcbiAgICAgIG1rZDogZmFsc2UsXHJcbiAgICAgIHJtZGlyOiBmYWxzZSxcclxuICAgICAgcmVuYW1lOiBmYWxzZSxcclxuICAgICAgZGVsZXRlbXlmaWxlczogZmFsc2UsXHJcbiAgICB9LFxyXG4gICAgaXNBY3RpdmU6IHRydWUsXHJcbiAgfSxcclxuXTtcclxuXHJcbi8qKlxyXG4gKiBVc2VyTWFuYWdlciBjbGFzcyAtIEt1bGxhbsSxY8SxIHnDtm5ldGltaVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFVzZXJNYW5hZ2VyIHtcclxuICBwcml2YXRlIHVzZXJGaWxlOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSB1c2VyczogVXNlcltdID0gW107XHJcbiAgcHJpdmF0ZSBkYXRhOiBVc2VyTWFuYWdlckRhdGE7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHVzZXJGaWxlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudXNlckZpbGUgPSB1c2VyRmlsZTtcclxuICAgIHRoaXMubG9hZCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogS3VsbGFuxLFjxLEgdmVyaWxlcmluaSB5w7xrbGVcclxuICAgKi9cclxuICBwcml2YXRlIGxvYWQoKTogdm9pZCB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyh0aGlzLnVzZXJGaWxlKSkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmModGhpcy51c2VyRmlsZSwgJ3V0Zi04Jyk7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZShjb250ZW50KTtcclxuICAgICAgICB0aGlzLnVzZXJzID0gdGhpcy5kYXRhLnVzZXJzIHx8IFtdO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBbVXNlck1hbmFnZXJdICR7dGhpcy51c2Vycy5sZW5ndGh9IGt1bGxhbsSxY8SxIHnDvGtsZW5kaWApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFZhcnNhecSxbGFuIGt1bGxhbsSxY8SxbGFyxLEgb2x1xZ90dXJcclxuICAgICAgICB0aGlzLmRhdGEgPSB7XHJcbiAgICAgICAgICB1c2VyczogREVGQVVMVF9VU0VSUyxcclxuICAgICAgICAgIGxhc3RVcGRhdGVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnNhdmUoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgW1VzZXJNYW5hZ2VyXSBWYXJzYXnEsWxhbiAke3RoaXMudXNlcnMubGVuZ3RofSBrdWxsYW7EsWPEsSBvbHXFn3R1cnVsZHVgKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignW1VzZXJNYW5hZ2VyXSBZw7xrbGVtZSBoYXRhc8SxOicsIGVycm9yKTtcclxuICAgICAgdGhpcy51c2VycyA9IERFRkFVTFRfVVNFUlM7XHJcbiAgICAgIHRoaXMuZGF0YSA9IHtcclxuICAgICAgICB1c2VyczogREVGQVVMVF9VU0VSUyxcclxuICAgICAgICBsYXN0VXBkYXRlZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogS3VsbGFuxLFjxLEgdmVyaWxlcmluaSBrYXlkZXRcclxuICAgKi9cclxuICBwcml2YXRlIHNhdmUoKTogdm9pZCB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmRhdGEubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy51c2VyRmlsZSwgSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhLCBudWxsLCAyKSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKGBbVXNlck1hbmFnZXJdIFZlcmlsZXIga2F5ZGVkaWxkaTogJHt0aGlzLnVzZXJGaWxlfWApO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignW1VzZXJNYW5hZ2VyXSBLYXlkZXRtZSBoYXRhc8SxOicsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEt1bGxhbsSxY8SxIGJ1bFxyXG4gICAqL1xyXG4gIHB1YmxpYyBmaW5kVXNlcih1c2VybmFtZTogc3RyaW5nKTogVXNlciB8IG51bGwge1xyXG4gICAgaWYgKCF1c2VybmFtZSB8fCB1c2VybmFtZS50cmltKCkgPT09ICcnKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tVc2VyTWFuYWdlcl0gQm/FnyBrdWxsYW7EsWPEsSBhZMSxJyk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHVzZXIgPSB0aGlzLnVzZXJzLmZpbmQoXHJcbiAgICAgICh1KSA9PiB1LnVzZXJuYW1lLnRvTG93ZXJDYXNlKCkgPT09IHVzZXJuYW1lLnRvTG93ZXJDYXNlKCkgJiYgdS5pc0FjdGl2ZVxyXG4gICAgKSBhcyBVc2VyIHwgbnVsbDtcclxuICAgIGlmICghdXNlcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdbVXNlck1hbmFnZXJdIEt1bGxhbsSxY8SxIGJ1bHVuYW1hZMSxOiAnICsgdXNlcm5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdXNlcikge1xyXG4gICAgICBjb25zb2xlLmxvZyhgW1VzZXJNYW5hZ2VyXSBLdWxsYW7EsWPEsSBidWx1bmFtYWTEsTogJHt1c2VybmFtZX1gKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdXNlcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEt1bGxhbsSxY8SxIGVrbGVcclxuICAgKi9cclxuICBwdWJsaWMgYWRkVXNlcih1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCBob21lRGlyOiBzdHJpbmcsIHBlcm1pc3Npb25zOiBVc2VyUGVybWlzc2lvbnMpOiBib29sZWFuIHtcclxuICAgIGlmICghdXNlcm5hbWUgfHwgIXBhc3N3b3JkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tVc2VyTWFuYWdlcl0gQm/FnyBrdWxsYW7EsWPEsSBhZMSxIHZleWEgxZ9pZnJlJyk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBLdWxsYW7EsWPEsSBhZMSxIHphdGVuIHZhcnNhIGtvbnRyb2wgZXRcclxuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5maW5kVXNlcih1c2VybmFtZSk7XHJcbiAgICBpZiAoZXhpc3RpbmcpIHtcclxuICAgICAgY29uc29sZS5sb2coYFtVc2VyTWFuYWdlcl0gS3VsbGFuxLFjxLEgemF0ZW4gdmFyOiAke3VzZXJuYW1lfWApO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbmV3VXNlcjogVXNlciA9IHtcclxuICAgICAgdXNlcm5hbWUsXHJcbiAgICAgIHBhc3N3b3JkLFxyXG4gICAgICBob21lRGlyOiBwYXRoLnJlc29sdmUoaG9tZURpciksXHJcbiAgICAgIHBlcm1pc3Npb25zOiB7IC4uLnBlcm1pc3Npb25zIH0sXHJcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnVzZXJzLnB1c2gobmV3VXNlcik7XHJcbiAgICB0aGlzLnNhdmUoKTtcclxuICAgIGNvbnNvbGUubG9nKGBbVXNlck1hbmFnZXJdIEt1bGxhbsSxY8SxIGVrbGVuZGk6ICR7dXNlcm5hbWV9YCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEt1bGxhbsSxY8SxIHNpbFxyXG4gICAqL1xyXG4gIHB1YmxpYyBkZWxldGVVc2VyKHVzZXJuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmZpbmRVc2VyKHVzZXJuYW1lKTtcclxuICAgIGlmICghdXNlcikge1xyXG4gICAgICBjb25zb2xlLmxvZyhgW1VzZXJNYW5hZ2VyXSBLdWxsYW7EsWPEsSBidWx1bmFtYWTEsTogJHt1c2VybmFtZX1gKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXNlcnMgPSB0aGlzLnVzZXJzLmZpbHRlcigodSkgPT4gdS51c2VybmFtZSAhPT0gdXNlcm5hbWUpO1xyXG4gICAgdGhpcy5zYXZlKCk7XHJcbiAgICBjb25zb2xlLmxvZyhgW1VzZXJNYW5hZ2VyXSBLdWxsYW7EsWPEsSBzaWxpbmRpOiAke3VzZXJuYW1lfWApO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBLdWxsYW7EsWPEsSBha3RpZi9wYXNpZiB5YXBcclxuICAgKi9cclxuICBwdWJsaWMgdG9nZ2xlVXNlclN0YXR1cyh1c2VybmFtZTogc3RyaW5nLCBpc0FjdGl2ZTogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdXNlciA9IHRoaXMuZmluZFVzZXIodXNlcm5hbWUpO1xyXG4gICAgaWYgKCF1c2VyKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGBbVXNlck1hbmFnZXJdIEt1bGxhbsSxY8SxIGJ1bHVuYW1hZMSxOiAke3VzZXJuYW1lfWApO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdXNlci5pc0FjdGl2ZSA9IGlzQWN0aXZlO1xyXG4gICAgdGhpcy5zYXZlKCk7XHJcbiAgICBjb25zb2xlLmxvZyhgW1VzZXJNYW5hZ2VyXSBLdWxsYW7EsWPEsSBkdXJ1bXUgZGXEn2nFn3RpcmlsZGk6ICR7dXNlcm5hbWV9ICgke2lzQWN0aXZlID8gJ2FrdGlmJyA6ICdwYXNpZid9KWApO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBLdWxsYW7EsWPEsSBpemlubGVyaW5pIGfDvG5jZWxsZVxyXG4gICAqL1xyXG4gIHB1YmxpYyB1cGRhdGVQZXJtaXNzaW9ucyh1c2VybmFtZTogc3RyaW5nLCBwZXJtaXNzaW9uczogVXNlclBlcm1pc3Npb25zKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB1c2VyID0gdGhpcy5maW5kVXNlcih1c2VybmFtZSk7XHJcbiAgICBpZiAoIXVzZXIpIHtcclxuICAgICAgY29uc29sZS5sb2coYFtVc2VyTWFuYWdlcl0gS3VsbGFuxLFjxLEgYnVsdW5hbWFkxLE6ICR7dXNlcm5hbWV9YCk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNZXZjdXQgaXppbmxlcmkga29weWFsYVxyXG4gICAgY29uc3QgY3VycmVudFBlcm1pc3Npb25zID0gdXNlci5wZXJtaXNzaW9ucyB8fCB7fTtcclxuICAgIFxyXG4gICAgLy8gWWVuaSBpemlubGVyaSBiaXJsZcWfdGlyICh5ZW5pIGl6aW4gdmFyc2EgZ8O8bmNlbGxlLCB5b2tzYSBtZXZjdXQga29ydSlcclxuICAgIGNvbnN0IG5ld1Blcm1pc3Npb25zID0ge1xyXG4gICAgICAuLi5jdXJyZW50UGVybWlzc2lvbnMsXHJcbiAgICAgIC4uLnBlcm1pc3Npb25zLFxyXG4gICAgfSBhcyBVc2VyUGVybWlzc2lvbnM7XHJcblxyXG4gICAgdXNlci5wZXJtaXNzaW9ucyA9IG5ld1Blcm1pc3Npb25zO1xyXG4gICAgdGhpcy5zYXZlKCk7XHJcbiAgICBjb25zb2xlLmxvZyhgW1VzZXJNYW5hZ2VyXSDEsHppbmxlciBnw7xuY2VsbGVuZGk6ICR7dXNlcm5hbWV9YCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEt1bGxhbsSxY8SxIGl6aW5sZXJpbmkga29udHJvbCBldFxyXG4gICAqL1xyXG4gIHB1YmxpYyBjaGVja1Blcm1pc3Npb24odXNlcm5hbWU6IHN0cmluZywgcGVybWlzc2lvbjogUGVybWlzc2lvbik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdXNlciA9IHRoaXMuZmluZFVzZXIodXNlcm5hbWUpO1xyXG4gICAgaWYgKCF1c2VyKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGBbVXNlck1hbmFnZXJdIMSwemluIGtvbnRyb2zDvCBiYcWfYXLEsXPEsXogLSBrdWxsYW7EsWPEsSBidWx1bmFtYWTEsTogJHt1c2VybmFtZX1gKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGhhc1Blcm1pc3Npb24gPSB1c2VyLnBlcm1pc3Npb25zPy5bcGVybWlzc2lvbl0gPT09IHRydWU7XHJcbiAgICBcclxuICAgIGlmICghaGFzUGVybWlzc2lvbikge1xyXG4gICAgICBjb25zb2xlLmxvZyhgW1VzZXJNYW5hZ2VyXSDEsHppbiByZWRkZWRpbGRpOiAke3VzZXJuYW1lfSAtICR7cGVybWlzc2lvbn1gKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGBbVXNlck1hbmFnZXJdIMSwemluIG9uYXlsYW5kxLE6ICR7dXNlcm5hbWV9IC0gJHtwZXJtaXNzaW9ufWApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBoYXNQZXJtaXNzaW9uO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVMO8bSBrdWxsYW7EsWPEsWxhcsSxIGxpc3RlbGVcclxuICAgKi9cclxuICBwdWJsaWMgbGlzdFVzZXJzKCk6IFVzZXJbXSB7XHJcbiAgICByZXR1cm4gdGhpcy51c2Vycy5maWx0ZXIoKHUpID0+IHUuaXNBY3RpdmUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogS3VsbGFuxLFjxLEgaXN0YXRpc3Rpa2xlcmlcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0VXNlclN0YXRzKCk6IE1hcDxzdHJpbmcsIG51bWJlcj4ge1xyXG4gICAgY29uc3Qgc3RhdHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG4gICAgdGhpcy51c2Vycy5mb3JFYWNoKCh1c2VyKSA9PiB7XHJcbiAgICAgIHN0YXRzLnNldCh1c2VyLnVzZXJuYW1lLCBPYmplY3Qua2V5cyh1c2VyLnBlcm1pc3Npb25zIHx8IHt9KS5sZW5ndGgpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc3RhdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBLdWxsYW7EsWPEsSBzYXnEsXPEsW7EsSBhbFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRVc2VyQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJzLmZpbHRlcigodSkgPT4gdS5pc0FjdGl2ZSkubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogS3VsbGFuxLFjxLEgYWTEsW7EsSBkZcSfacWfdGlyXHJcbiAgICovXHJcbiAgcHVibGljIGNoYW5nZVVzZXJuYW1lKG9sZFVzZXJuYW1lOiBzdHJpbmcsIG5ld1VzZXJuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmZpbmRVc2VyKG9sZFVzZXJuYW1lKTtcclxuICAgIGlmICghdXNlcikge1xyXG4gICAgICBjb25zb2xlLmxvZyhgW1VzZXJNYW5hZ2VyXSBLdWxsYW7EsWPEsSBidWx1bmFtYWTEsTogJHtvbGRVc2VybmFtZX1gKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFllbmkga3VsbGFuxLFjxLEgYWTEsSB6YXRlbiB2YXJzYSBrb250cm9sIGV0XHJcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuZmluZFVzZXIobmV3VXNlcm5hbWUpO1xyXG4gICAgaWYgKGV4aXN0aW5nKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGBbVXNlck1hbmFnZXJdIEt1bGxhbsSxY8SxIGFkxLEgemF0ZW4gdmFyOiAke25ld1VzZXJuYW1lfWApO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdXNlci51c2VybmFtZSA9IG5ld1VzZXJuYW1lO1xyXG4gICAgdGhpcy5zYXZlKCk7XHJcbiAgICBjb25zb2xlLmxvZyhgW1VzZXJNYW5hZ2VyXSBLdWxsYW7EsWPEsSBhZMSxIGRlxJ9pxZ90aXJpbGRpOiAke29sZFVzZXJuYW1lfSAtPiAke25ld1VzZXJuYW1lfWApO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBLdWxsYW7EsWPEsSDFn2lmcmVzaW5pIGRlxJ9pxZ90aXJcclxuICAgKi9cclxuICBwdWJsaWMgY2hhbmdlUGFzc3dvcmQodXNlcm5hbWU6IHN0cmluZywgbmV3UGFzc3dvcmQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdXNlciA9IHRoaXMuZmluZFVzZXIodXNlcm5hbWUpO1xyXG4gICAgaWYgKCF1c2VyKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGBbVXNlck1hbmFnZXJdIEt1bGxhbsSxY8SxIGJ1bHVuYW1hZMSxOiAke3VzZXJuYW1lfWApO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdXNlci5wYXNzd29yZCA9IG5ld1Bhc3N3b3JkO1xyXG4gICAgdGhpcy5zYXZlKCk7XHJcbiAgICBjb25zb2xlLmxvZyhgW1VzZXJNYW5hZ2VyXSDFnmlmcmUgZGXEn2nFn3RpcmlsZGk6ICR7dXNlcm5hbWV9YCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEt1bGxhbsSxY8SxIGRpemluaW5pIGRlxJ9pxZ90aXJcclxuICAgKi9cclxuICBwdWJsaWMgY2hhbmdlSG9tZURpcih1c2VybmFtZTogc3RyaW5nLCBuZXdIb21lRGlyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmZpbmRVc2VyKHVzZXJuYW1lKTtcclxuICAgIGlmICghdXNlcikge1xyXG4gICAgICBjb25zb2xlLmxvZyhgW1VzZXJNYW5hZ2VyXSBLdWxsYW7EsWPEsSBidWx1bmFtYWTEsTogJHt1c2VybmFtZX1gKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHVzZXIuaG9tZURpciA9IHBhdGgucmVzb2x2ZShuZXdIb21lRGlyKTtcclxuICAgIHRoaXMuc2F2ZSgpO1xyXG4gICAgY29uc29sZS5sb2coYFtVc2VyTWFuYWdlcl0gRGl6aW4gZGXEn2nFn3RpcmlsZGk6ICR7dXNlcm5hbWV9IC0+ICR7dXNlci5ob21lRGlyfWApO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVc2VyTWFuYWdlciDDtnJuZcSfaSBvbHXFn3R1ciAoc2luZ2xldG9uKVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0SW5zdGFuY2UodXNlckZpbGU6IHN0cmluZyk6IFVzZXJNYW5hZ2VyIHtcclxuICAgIGlmICghVXNlck1hbmFnZXIuX2luc3RhbmNlKSB7XHJcbiAgICAgIFVzZXJNYW5hZ2VyLl9pbnN0YW5jZSA9IG5ldyBVc2VyTWFuYWdlcih1c2VyRmlsZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gVXNlck1hbmFnZXIuX2luc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBVc2VyTWFuYWdlciB8IG51bGwgPSBudWxsO1xyXG59XHJcblxyXG4vLyBTaW5nbGV0b24gaW5zdGFuY2Ugb2x1xZ90dXJtYSAtIGTDtm5nw7wgYmHEn8SxbWzEsWzEscSfxLFuZGFuIGthw6fEsW5tYWsgacOnaW5cclxubGV0IHVzZXJNYW5hZ2VySW5zdGFuY2U6IFVzZXJNYW5hZ2VyIHwgbnVsbCA9IG51bGw7XHJcbmxldCB1c2VyTWFuYWdlckluaXRQcm9taXNlOiBQcm9taXNlPFVzZXJNYW5hZ2VyPiB8IG51bGwgPSBudWxsO1xyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFVzZXJNYW5hZ2VyKHVzZXJGaWxlPzogc3RyaW5nKTogUHJvbWlzZTxVc2VyTWFuYWdlcj4ge1xyXG4gIGlmICghdXNlck1hbmFnZXJJbml0UHJvbWlzZSkge1xyXG4gICAgdXNlck1hbmFnZXJJbml0UHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XHJcbiAgICAgIGlmICghdXNlck1hbmFnZXJJbnN0YW5jZSkge1xyXG4gICAgICAgIGlmICghdXNlckZpbGUpIHtcclxuICAgICAgICAgIHVzZXJGaWxlID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL3VzZXJzLmpzb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdXNlck1hbmFnZXJJbnN0YW5jZSA9IG5ldyBVc2VyTWFuYWdlcih1c2VyRmlsZSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHVzZXJNYW5hZ2VySW5zdGFuY2U7XHJcbiAgICB9KSgpO1xyXG4gIH1cclxuICByZXR1cm4gdXNlck1hbmFnZXJJbml0UHJvbWlzZTtcclxufVxyXG4iXX0=
|
|
311
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlck1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXNlck1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE1BQVksRUFBRSwrQkFBVztBQUN6QixNQUFZLElBQUksaUNBQWE7QUFNN0IsTUFBTSxhQUFhLEdBQVc7SUFDNUI7UUFDRSxRQUFRLEVBQUUsT0FBTztRQUNqQixRQUFRLEVBQUUsT0FBTztRQUNqQixPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUM7UUFDL0MsV0FBVyxFQUFFO1lBQ1gsSUFBSSxFQUFFLElBQUk7WUFDVixLQUFLLEVBQUUsSUFBSTtZQUNYLElBQUksRUFBRSxJQUFJO1lBQ1YsTUFBTSxFQUFFLElBQUk7WUFDWixNQUFNLEVBQUUsSUFBSTtZQUNaLE1BQU0sRUFBRSxJQUFJO1lBQ1osS0FBSyxFQUFFLElBQUk7WUFDWCxHQUFHLEVBQUUsSUFBSTtZQUNULEtBQUssRUFBRSxJQUFJO1lBQ1gsTUFBTSxFQUFFLElBQUk7WUFDWixhQUFhLEVBQUUsSUFBSTtTQUNwQjtRQUNELFFBQVEsRUFBRSxJQUFJO0tBQ2Y7Q0FDRixDQUFDO0FBS0Y7SUFNRSxZQUFZLFFBQXdDO1FBSDVDLFVBQUssR0FBVyxFQUFFLENBQUM7UUFJekIsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDOUUsQ0FBQztZQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSwyQkFBMkIsQ0FBQyxDQUFDO1FBQzdFLENBQUM7SUFDSCxDQUFDO0lBS08sYUFBYSxDQUFDLEtBQVU7UUFDOUIsSUFBSSxDQUFDO1lBQ0gsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsT0FBTztvQkFDTCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7b0JBQ2xCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2lCQUMzRCxDQUFDO1lBQ0osQ0FBQztZQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN6QixPQUFPO29CQUNMLEtBQUssRUFBRSxLQUFlO29CQUN0QixXQUFXLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7aUJBQ3RDLENBQUM7WUFDSixDQUFDO1lBQ0QsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDM0QsT0FBTztvQkFDTCxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLO29CQUN2QixXQUFXLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7aUJBQ2hFLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFFYixDQUFDO1FBQ0QsT0FBTyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztJQUN6RSxDQUFDO0lBS08sSUFBSTtRQUNWLElBQUksQ0FBQztZQUNILElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNsRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ25DLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxlQUFlLENBQUMsQ0FBQztZQUNqRSxDQUFDO2lCQUFNLENBQUM7Z0JBRU4sSUFBSSxDQUFDLElBQUksR0FBRztvQkFDVixLQUFLLEVBQUUsYUFBYTtvQkFDcEIsV0FBVyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2lCQUN0QyxDQUFDO2dCQUNGLElBQUksQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDO2dCQUMzQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLGdCQUFnQixDQUFDLENBQUM7WUFDMUUsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDO1lBQzNCLElBQUksQ0FBQyxJQUFJLEdBQUc7Z0JBQ1YsS0FBSyxFQUFFLGFBQWE7Z0JBQ3BCLFdBQVcsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN0QyxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFLTyxJQUFJO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEMsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pELEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEUsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwRCxDQUFDO0lBQ0gsQ0FBQztJQUtNLFFBQVEsQ0FBQyxRQUFnQjtRQUM5QixJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUN4QyxPQUFPLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUMxQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FDMUQsQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUtNLE9BQU8sQ0FBQyxRQUFnQixFQUFFLFFBQWdCLEVBQUUsT0FBZSxFQUFFLFdBQTRCO1FBQzlGLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMzQixPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUdELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDckQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQVM7WUFDcEIsUUFBUTtZQUNSLFFBQVE7WUFDUixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDOUIsV0FBVyxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQUU7WUFDL0IsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO1FBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN6RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFLTSxVQUFVLENBQUMsUUFBZ0I7UUFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN6RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFLTSxnQkFBZ0IsQ0FBQyxRQUFnQixFQUFFLFFBQWlCO1FBQ3pELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ25HLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDekQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBS00saUJBQWlCLENBQUMsUUFBZ0IsRUFBRSxXQUE0QjtRQUNyRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0NBQXNDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDOUQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBR0QsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUdsRCxNQUFNLGNBQWMsR0FBRztZQUNyQixHQUFHLGtCQUFrQjtZQUNyQixHQUFHLFdBQVc7U0FDSSxDQUFDO1FBRXJCLElBQUksQ0FBQyxXQUFXLEdBQUcsY0FBYyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkRBQTJELFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDbkYsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBS00sZUFBZSxDQUFDLFFBQWdCLEVBQUUsVUFBc0I7UUFDN0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxJQUFJLENBQUM7UUFFOUQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0NBQW9DLFFBQVEsTUFBTSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzlFLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQ0FBcUMsUUFBUSxNQUFNLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDL0UsQ0FBQztRQUVELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFLTSxTQUFTO1FBQ2QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFLTSxZQUFZO1FBQ2pCLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1FBQ3hDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDMUIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUtNLFlBQVk7UUFDakIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyRCxDQUFDO0lBS00sY0FBYyxDQUFDLFdBQW1CLEVBQUUsV0FBbUI7UUFDNUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLDBDQUEwQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ3JFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUdELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUMsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxHQUFHLENBQUMsMENBQTBDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDckUsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUM7UUFDNUIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsV0FBVyxPQUFPLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDaEYsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBS00sY0FBYyxDQUFDLFFBQWdCLEVBQUUsV0FBbUI7UUFDekQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLG1DQUFtQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDO1FBQzVCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDekQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBS00sYUFBYSxDQUFDLFFBQWdCLEVBQUUsVUFBa0I7UUFDdkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDWixPQUFPLENBQUMsR0FBRyxDQUFDLG9DQUFvQyxRQUFRLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDL0UsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBS00sTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFnQjtRQUN4QyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzNCLFdBQVcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUNELE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQztJQUMvQixDQUFDO0NBR0Y7O0FBRGdCLHFCQUFTLEdBQXVCLElBQUksQUFBM0IsQ0FBNEI7QUFJdEQsSUFBSSxtQkFBbUIsR0FBdUIsSUFBSSxDQUFDO0FBQ25ELElBQUksc0JBQXNCLEdBQWdDLElBQUksQ0FBQztBQUV4RCxLQUFLLHlCQUF5QixRQUFpQjtJQUNwRCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM1QixzQkFBc0IsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ25DLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2QsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUNuRCxDQUFDO2dCQUNELG1CQUFtQixHQUFHLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xELENBQUM7WUFDRCxPQUFPLG1CQUFtQixDQUFDO1FBQzdCLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDUCxDQUFDO0lBQ0QsT0FBTyxzQkFBc0IsQ0FBQztBQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFVzZXIsIFVzZXJQZXJtaXNzaW9ucywgVXNlck1hbmFnZXJEYXRhLCBQZXJtaXNzaW9uIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogRGVmYXVsdCBrdWxsYW7EsWPEsWxhclxuICovXG5jb25zdCBERUZBVUxUX1VTRVJTOiBVc2VyW10gPSBbXG4gIHtcbiAgICB1c2VybmFtZTogJ2FkbWluJyxcbiAgICBwYXNzd29yZDogJ2FkbWluJyxcbiAgICBob21lRGlyOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vZmlsZXMvYWRtaW4nKSxcbiAgICBwZXJtaXNzaW9uczoge1xuICAgICAgcmVhZDogdHJ1ZSxcbiAgICAgIHdyaXRlOiB0cnVlLFxuICAgICAgbGlzdDogdHJ1ZSxcbiAgICAgIGNyZWF0ZTogdHJ1ZSxcbiAgICAgIGFwcGVuZDogdHJ1ZSxcbiAgICAgIGRlbGV0ZTogdHJ1ZSxcbiAgICAgIGNobW9kOiB0cnVlLFxuICAgICAgbWtkOiB0cnVlLFxuICAgICAgcm1kaXI6IHRydWUsXG4gICAgICByZW5hbWU6IHRydWUsXG4gICAgICBkZWxldGVteWZpbGVzOiB0cnVlLFxuICAgIH0sXG4gICAgaXNBY3RpdmU6IHRydWUsXG4gIH1cbl07XG5cbi8qKlxuICogVXNlck1hbmFnZXIgY2xhc3MgLSBLdWxsYW7EsWPEsSB5w7ZuZXRpbWlcbiAqL1xuZXhwb3J0IGNsYXNzIFVzZXJNYW5hZ2VyIHtcbiAgcHJpdmF0ZSB1c2VyRmlsZTogc3RyaW5nIHwgbnVsbDtcbiAgcHJpdmF0ZSBwZXJzaXN0OiBib29sZWFuO1xuICBwcml2YXRlIHVzZXJzOiBVc2VyW10gPSBbXTtcbiAgcHJpdmF0ZSBkYXRhOiBVc2VyTWFuYWdlckRhdGE7XG5cbiAgY29uc3RydWN0b3IodXNlckZpbGU6IHN0cmluZyB8IFVzZXJNYW5hZ2VyRGF0YSB8IGFueSkge1xuICAgIGlmICh0eXBlb2YgdXNlckZpbGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnVzZXJGaWxlID0gdXNlckZpbGU7XG4gICAgICB0aGlzLnBlcnNpc3QgPSB0cnVlO1xuICAgICAgdGhpcy5sb2FkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXNlckZpbGUgPSBudWxsO1xuICAgICAgdGhpcy5wZXJzaXN0ID0gZmFsc2U7XG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLm5vcm1hbGl6ZURhdGEodXNlckZpbGUpO1xuICAgICAgdGhpcy51c2VycyA9IHRoaXMuZGF0YS51c2VycyB8fCBbXTtcbiAgICAgIGlmICghdGhpcy51c2VycyB8fCB0aGlzLnVzZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnVzZXJzID0gREVGQVVMVF9VU0VSUztcbiAgICAgICAgdGhpcy5kYXRhID0geyB1c2VyczogREVGQVVMVF9VU0VSUywgbGFzdFVwZGF0ZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9O1xuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coYFtVc2VyTWFuYWdlcl0gJHt0aGlzLnVzZXJzLmxlbmd0aH0gdXNlcnMgbG9hZGVkIChpbi1tZW1vcnkpYCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbGVuIHlhcMSxbGFuZMSxcm1hc8SxbsSxIFVzZXJNYW5hZ2VyRGF0YSBiacOnaW1pbmUgbm9ybWFsaXplIGV0XG4gICAqL1xuICBwcml2YXRlIG5vcm1hbGl6ZURhdGEoaW5wdXQ6IGFueSk6IFVzZXJNYW5hZ2VyRGF0YSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChpbnB1dCAmJiBBcnJheS5pc0FycmF5KGlucHV0LnVzZXJzKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHVzZXJzOiBpbnB1dC51c2VycyxcbiAgICAgICAgICBsYXN0VXBkYXRlZDogaW5wdXQubGFzdFVwZGF0ZWQgfHwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdXNlcnM6IGlucHV0IGFzIFVzZXJbXSxcbiAgICAgICAgICBsYXN0VXBkYXRlZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKGlucHV0ICYmIGlucHV0LmRhdGEgJiYgQXJyYXkuaXNBcnJheShpbnB1dC5kYXRhLnVzZXJzKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHVzZXJzOiBpbnB1dC5kYXRhLnVzZXJzLFxuICAgICAgICAgIGxhc3RVcGRhdGVkOiBpbnB1dC5kYXRhLmxhc3RVcGRhdGVkIHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyB5b2tzYXlcbiAgICB9XG4gICAgcmV0dXJuIHsgdXNlcnM6IERFRkFVTFRfVVNFUlMsIGxhc3RVcGRhdGVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBLdWxsYW7EsWPEsSB2ZXJpbGVyaW5pIHnDvGtsZVxuICAgKi9cbiAgcHJpdmF0ZSBsb2FkKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy51c2VyRmlsZSAmJiBmcy5leGlzdHNTeW5jKHRoaXMudXNlckZpbGUpKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmModGhpcy51c2VyRmlsZSwgJ3V0Zi04Jyk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UoY29udGVudCk7XG4gICAgICAgIHRoaXMudXNlcnMgPSB0aGlzLmRhdGEudXNlcnMgfHwgW107XG4gICAgICAgIGNvbnNvbGUubG9nKGBbVXNlck1hbmFnZXJdICR7dGhpcy51c2Vycy5sZW5ndGh9IHVzZXJzIGxvYWRlZGApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVmFyc2F5xLFsYW4ga3VsbGFuxLFjxLFsYXLEsSBvbHXFn3R1clxuICAgICAgICB0aGlzLmRhdGEgPSB7XG4gICAgICAgICAgdXNlcnM6IERFRkFVTFRfVVNFUlMsXG4gICAgICAgICAgbGFzdFVwZGF0ZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy51c2VycyA9IERFRkFVTFRfVVNFUlM7XG4gICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICBjb25zb2xlLmxvZyhgW1VzZXJNYW5hZ2VyXSBEZWZhdWx0ICR7dGhpcy51c2Vycy5sZW5ndGh9IHVzZXJzIGNyZWF0ZWRgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgW1VzZXJNYW5hZ2VyXSBMb2FkIGVycm9yOmApO1xuICAgICAgdGhpcy51c2VycyA9IERFRkFVTFRfVVNFUlM7XG4gICAgICB0aGlzLmRhdGEgPSB7XG4gICAgICAgIHVzZXJzOiBERUZBVUxUX1VTRVJTLFxuICAgICAgICBsYXN0VXBkYXRlZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogS3VsbGFuxLFjxLEgdmVyaWxlcmluaSBrYXlkZXRcbiAgICovXG4gIHByaXZhdGUgc2F2ZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucGVyc2lzdCB8fCAhdGhpcy51c2VyRmlsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5kYXRhLmxhc3RVcGRhdGVkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLnVzZXJGaWxlLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEsIG51bGwsIDIpKTtcbiAgICAgIGNvbnNvbGUubG9nKGBbVXNlck1hbmFnZXJdIERhdGEgc2F2ZWRgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgW1VzZXJNYW5hZ2VyXSBTYXZlIGVycm9yOmAsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogS3VsbGFuxLFjxLEgYnVsXG4gICAqL1xuICBwdWJsaWMgZmluZFVzZXIodXNlcm5hbWU6IHN0cmluZyk6IFVzZXIgfCBudWxsIHtcbiAgICBpZiAoIXVzZXJuYW1lIHx8IHVzZXJuYW1lLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtVc2VyTWFuYWdlcl0gVXNlciBub3QgZm91bmQ6ICR7dXNlcm5hbWV9YCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyID0gdGhpcy51c2Vycy5maW5kKFxuICAgICAgKHUpID0+IHUudXNlcm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gdXNlcm5hbWUudG9Mb3dlckNhc2UoKSAmJiB1LmlzQWN0aXZlXG4gICAgKSBhcyBVc2VyIHwgbnVsbDtcbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtVc2VyTWFuYWdlcl0gVXNlciBub3QgZm91bmQ6ICR7dXNlcm5hbWV9YCk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW1VzZXJNYW5hZ2VyXSBFbXB0eSB1c2VybmFtZSBvciBwYXNzd29yZGApO1xuICAgIH1cblxuICAgIHJldHVybiB1c2VyO1xuICB9XG5cbiAgLyoqXG4gICAqIEt1bGxhbsSxY8SxIGVrbGVcbiAgICovXG4gIHB1YmxpYyBhZGRVc2VyKHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcsIGhvbWVEaXI6IHN0cmluZywgcGVybWlzc2lvbnM6IFVzZXJQZXJtaXNzaW9ucyk6IGJvb2xlYW4ge1xuICAgIGlmICghdXNlcm5hbWUgfHwgIXBhc3N3b3JkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbVXNlck1hbmFnZXJdIFVzZXIgYWxyZWFkeSBleGlzdHM6ICR7dXNlcm5hbWV9YCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gS3VsbGFuxLFjxLEgYWTEsSB6YXRlbiB2YXJzYSBrb250cm9sIGV0XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmZpbmRVc2VyKHVzZXJuYW1lKTtcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbVXNlck1hbmFnZXJdIFVzZXIgYWRkZWQ6ICR7dXNlcm5hbWV9YCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3VXNlcjogVXNlciA9IHtcbiAgICAgIHVzZXJuYW1lLFxuICAgICAgcGFzc3dvcmQsXG4gICAgICBob21lRGlyOiBwYXRoLnJlc29sdmUoaG9tZURpciksXG4gICAgICBwZXJtaXNzaW9uczogeyAuLi5wZXJtaXNzaW9ucyB9LFxuICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgfTtcblxuICAgIHRoaXMudXNlcnMucHVzaChuZXdVc2VyKTtcbiAgICB0aGlzLnNhdmUoKTtcbiAgICBjb25zb2xlLmxvZyhgW1VzZXJNYW5hZ2VyXSBVc2VyIG5vdCBmb3VuZDogJHt1c2VybmFtZX1gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBLdWxsYW7EsWPEsSBzaWxcbiAgICovXG4gIHB1YmxpYyBkZWxldGVVc2VyKHVzZXJuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5maW5kVXNlcih1c2VybmFtZSk7XG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW1VzZXJNYW5hZ2VyXSBVc2VyIGRlbGV0ZWQ6ICR7dXNlcm5hbWV9YCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy51c2VycyA9IHRoaXMudXNlcnMuZmlsdGVyKCh1KSA9PiB1LnVzZXJuYW1lICE9PSB1c2VybmFtZSk7XG4gICAgdGhpcy5zYXZlKCk7XG4gICAgY29uc29sZS5sb2coYFtVc2VyTWFuYWdlcl0gVXNlciBub3QgZm91bmQ6ICR7dXNlcm5hbWV9YCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogS3VsbGFuxLFjxLEgYWt0aWYvcGFzaWYgeWFwXG4gICAqL1xuICBwdWJsaWMgdG9nZ2xlVXNlclN0YXR1cyh1c2VybmFtZTogc3RyaW5nLCBpc0FjdGl2ZTogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmZpbmRVc2VyKHVzZXJuYW1lKTtcbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbVXNlck1hbmFnZXJdIFVzZXIgc3RhdHVzIGNoYW5nZWQ6ICR7dXNlcm5hbWV9ICgke2lzQWN0aXZlID8gJ2FjdGl2ZScgOiAncGFzc2l2ZSd9KWApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHVzZXIuaXNBY3RpdmUgPSBpc0FjdGl2ZTtcbiAgICB0aGlzLnNhdmUoKTtcbiAgICBjb25zb2xlLmxvZyhgW1VzZXJNYW5hZ2VyXSBVc2VyIG5vdCBmb3VuZDogJHt1c2VybmFtZX1gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBLdWxsYW7EsWPEsSBpemlubGVyaW5pIGfDvG5jZWxsZVxuICAgKi9cbiAgcHVibGljIHVwZGF0ZVBlcm1pc3Npb25zKHVzZXJuYW1lOiBzdHJpbmcsIHBlcm1pc3Npb25zOiBVc2VyUGVybWlzc2lvbnMpOiBib29sZWFuIHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5maW5kVXNlcih1c2VybmFtZSk7XG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW1VzZXJNYW5hZ2VyXSBQZXJtaXNzaW9ucyB1cGRhdGVkOiAke3VzZXJuYW1lfWApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIE1ldmN1dCBpemlubGVyaSBrb3B5YWxhXG4gICAgY29uc3QgY3VycmVudFBlcm1pc3Npb25zID0gdXNlci5wZXJtaXNzaW9ucyB8fCB7fTtcbiAgICBcbiAgICAvLyBZZW5pIGl6aW5sZXJpIGJpcmxlxZ90aXIgKHllbmkgaXppbiB2YXJzYSBnw7xuY2VsbGUsIHlva3NhIG1ldmN1dCBrb3J1KVxuICAgIGNvbnN0IG5ld1Blcm1pc3Npb25zID0ge1xuICAgICAgLi4uY3VycmVudFBlcm1pc3Npb25zLFxuICAgICAgLi4ucGVybWlzc2lvbnMsXG4gICAgfSBhcyBVc2VyUGVybWlzc2lvbnM7XG5cbiAgICB1c2VyLnBlcm1pc3Npb25zID0gbmV3UGVybWlzc2lvbnM7XG4gICAgdGhpcy5zYXZlKCk7XG4gICAgY29uc29sZS5sb2coYFtVc2VyTWFuYWdlcl0gUGVybWlzc2lvbiBjaGVjayBmYWlsZWQgLSB1c2VyIG5vdCBmb3VuZDogJHt1c2VybmFtZX1gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBLdWxsYW7EsWPEsSBpemlubGVyaW5pIGtvbnRyb2wgZXRcbiAgICovXG4gIHB1YmxpYyBjaGVja1Blcm1pc3Npb24odXNlcm5hbWU6IHN0cmluZywgcGVybWlzc2lvbjogUGVybWlzc2lvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmZpbmRVc2VyKHVzZXJuYW1lKTtcbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbVXNlck1hbmFnZXJdIFVzZXIgbm90IGZvdW5kOiAke3VzZXJuYW1lfWApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc1Blcm1pc3Npb24gPSB1c2VyLnBlcm1pc3Npb25zPy5bcGVybWlzc2lvbl0gPT09IHRydWU7XG5cbiAgICBpZiAoIWhhc1Blcm1pc3Npb24pIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbVXNlck1hbmFnZXJdIFBlcm1pc3Npb24gZGVuaWVkOiAke3VzZXJuYW1lfSAtICR7cGVybWlzc2lvbn1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coYFtVc2VyTWFuYWdlcl0gUGVybWlzc2lvbiBncmFudGVkOiAke3VzZXJuYW1lfSAtICR7cGVybWlzc2lvbn1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGFzUGVybWlzc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUw7xtIGt1bGxhbsSxY8SxbGFyxLEgbGlzdGVsZVxuICAgKi9cbiAgcHVibGljIGxpc3RVc2VycygpOiBVc2VyW10ge1xuICAgIHJldHVybiB0aGlzLnVzZXJzLmZpbHRlcigodSkgPT4gdS5pc0FjdGl2ZSk7XG4gIH1cblxuICAvKipcbiAgICogS3VsbGFuxLFjxLEgaXN0YXRpc3Rpa2xlcmlcbiAgICovXG4gIHB1YmxpYyBnZXRVc2VyU3RhdHMoKTogTWFwPHN0cmluZywgbnVtYmVyPiB7XG4gICAgY29uc3Qgc3RhdHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIHRoaXMudXNlcnMuZm9yRWFjaCgodXNlcikgPT4ge1xuICAgICAgc3RhdHMuc2V0KHVzZXIudXNlcm5hbWUsIE9iamVjdC5rZXlzKHVzZXIucGVybWlzc2lvbnMgfHwge30pLmxlbmd0aCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHN0YXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEt1bGxhbsSxY8SxIHNhecSxc8SxbsSxIGFsXG4gICAqL1xuICBwdWJsaWMgZ2V0VXNlckNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudXNlcnMuZmlsdGVyKCh1KSA9PiB1LmlzQWN0aXZlKS5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogS3VsbGFuxLFjxLEgYWTEsW7EsSBkZcSfacWfdGlyXG4gICAqL1xuICBwdWJsaWMgY2hhbmdlVXNlcm5hbWUob2xkVXNlcm5hbWU6IHN0cmluZywgbmV3VXNlcm5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmZpbmRVc2VyKG9sZFVzZXJuYW1lKTtcbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbVXNlck1hbmFnZXJdIFVzZXJuYW1lIGFscmVhZHkgZXhpc3RzOiAke25ld1VzZXJuYW1lfWApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFllbmkga3VsbGFuxLFjxLEgYWTEsSB6YXRlbiB2YXJzYSBrb250cm9sIGV0XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmZpbmRVc2VyKG5ld1VzZXJuYW1lKTtcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbVXNlck1hbmFnZXJdIFVzZXJuYW1lIGFscmVhZHkgZXhpc3RzOiAke25ld1VzZXJuYW1lfWApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHVzZXIudXNlcm5hbWUgPSBuZXdVc2VybmFtZTtcbiAgICB0aGlzLnNhdmUoKTtcbiAgICBjb25zb2xlLmxvZyhgW1VzZXJNYW5hZ2VyXSBVc2VybmFtZSBjaGFuZ2VkOiAke29sZFVzZXJuYW1lfSAtPiAke25ld1VzZXJuYW1lfWApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEt1bGxhbsSxY8SxIMWfaWZyZXNpbmkgZGXEn2nFn3RpclxuICAgKi9cbiAgcHVibGljIGNoYW5nZVBhc3N3b3JkKHVzZXJuYW1lOiBzdHJpbmcsIG5ld1Bhc3N3b3JkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5maW5kVXNlcih1c2VybmFtZSk7XG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW1VzZXJNYW5hZ2VyXSBQYXNzd29yZCBjaGFuZ2VkOiAke3VzZXJuYW1lfWApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHVzZXIucGFzc3dvcmQgPSBuZXdQYXNzd29yZDtcbiAgICB0aGlzLnNhdmUoKTtcbiAgICBjb25zb2xlLmxvZyhgW1VzZXJNYW5hZ2VyXSBVc2VyIG5vdCBmb3VuZDogJHt1c2VybmFtZX1gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBLdWxsYW7EsWPEsSBkaXppbmluaSBkZcSfacWfdGlyXG4gICAqL1xuICBwdWJsaWMgY2hhbmdlSG9tZURpcih1c2VybmFtZTogc3RyaW5nLCBuZXdIb21lRGlyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5maW5kVXNlcih1c2VybmFtZSk7XG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW1VzZXJNYW5hZ2VyXSBVc2VyIG5vdCBmb3VuZDogJHt1c2VybmFtZX1gKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB1c2VyLmhvbWVEaXIgPSBwYXRoLnJlc29sdmUobmV3SG9tZURpcik7XG4gICAgdGhpcy5zYXZlKCk7XG4gICAgY29uc29sZS5sb2coYFtVc2VyTWFuYWdlcl0gRGlyZWN0b3J5IGNoYW5nZWQ6ICR7dXNlcm5hbWV9IC0+ICR7dXNlci5ob21lRGlyfWApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZXJNYW5hZ2VyIMO2cm5lxJ9pIG9sdcWfdHVyIChzaW5nbGV0b24pXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldEluc3RhbmNlKHVzZXJGaWxlOiBzdHJpbmcpOiBVc2VyTWFuYWdlciB7XG4gICAgaWYgKCFVc2VyTWFuYWdlci5faW5zdGFuY2UpIHtcbiAgICAgIFVzZXJNYW5hZ2VyLl9pbnN0YW5jZSA9IG5ldyBVc2VyTWFuYWdlcih1c2VyRmlsZSk7XG4gICAgfVxuICAgIHJldHVybiBVc2VyTWFuYWdlci5faW5zdGFuY2U7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IFVzZXJNYW5hZ2VyIHwgbnVsbCA9IG51bGw7XG59XG5cbi8vIFNpbmdsZXRvbiBpbnN0YW5jZSBvbHXFn3R1cm1hIC0gZMO2bmfDvCBiYcSfxLFtbMSxbMSxxJ/EsW5kYW4ga2HDp8Sxbm1hayBpw6dpblxubGV0IHVzZXJNYW5hZ2VySW5zdGFuY2U6IFVzZXJNYW5hZ2VyIHwgbnVsbCA9IG51bGw7XG5sZXQgdXNlck1hbmFnZXJJbml0UHJvbWlzZTogUHJvbWlzZTxVc2VyTWFuYWdlcj4gfCBudWxsID0gbnVsbDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFVzZXJNYW5hZ2VyKHVzZXJGaWxlPzogc3RyaW5nKTogUHJvbWlzZTxVc2VyTWFuYWdlcj4ge1xuICBpZiAoIXVzZXJNYW5hZ2VySW5pdFByb21pc2UpIHtcbiAgICB1c2VyTWFuYWdlckluaXRQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghdXNlck1hbmFnZXJJbnN0YW5jZSkge1xuICAgICAgICBpZiAoIXVzZXJGaWxlKSB7XG4gICAgICAgICAgdXNlckZpbGUgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vdXNlcnMuanNvbicpO1xuICAgICAgICB9XG4gICAgICAgIHVzZXJNYW5hZ2VySW5zdGFuY2UgPSBuZXcgVXNlck1hbmFnZXIodXNlckZpbGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVzZXJNYW5hZ2VySW5zdGFuY2U7XG4gICAgfSkoKTtcbiAgfVxuICByZXR1cm4gdXNlck1hbmFnZXJJbml0UHJvbWlzZTtcbn1cbiJdfQ==
|
package/src/utils/logger.js
CHANGED
|
@@ -33,4 +33,4 @@ class Logger {
|
|
|
33
33
|
}
|
|
34
34
|
exports.Logger = Logger;
|
|
35
35
|
Logger.level = LogLevel.INFO;
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFZLFFBS1g7QUFMRCxXQUFZLFFBQVE7SUFDbEIsMkJBQWUsQ0FBQTtJQUNmLHlCQUFhLENBQUE7SUFDYix5QkFBYSxDQUFBO0lBQ2IsMkJBQWUsQ0FBQTtBQUNqQixDQUFDLEVBTFcsUUFBUSxhQUFSLFFBQVEsR0FBUixRQUFRLFFBS25CO0FBRUQ7SUFHUyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQWU7UUFDcEMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBZSxFQUFFLEdBQUcsSUFBZTtRQUNyRCxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxPQUFPLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBRU0sTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFlLEVBQUUsR0FBRyxJQUFlO1FBQ3BELElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xFLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxPQUFPLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0lBRU0sTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFlLEVBQUUsR0FBRyxJQUFlO1FBQ3BELElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsRyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsT0FBTyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBZSxFQUFFLEdBQUcsSUFBZTtRQUNyRCxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsT0FBTyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0NBQ0Y7O0FBM0JnQixZQUFLLEdBQWEsUUFBUSxDQUFDLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIExvZ0xldmVsIHtcbiAgREVCVUcgPSAnZGVidWcnLFxuICBJTkZPID0gJ2luZm8nLFxuICBXQVJOID0gJ3dhcm4nLFxuICBFUlJPUiA9ICdlcnJvcicsXG59XG5cbmV4cG9ydCBjbGFzcyBMb2dnZXIge1xuICBwcml2YXRlIHN0YXRpYyBsZXZlbDogTG9nTGV2ZWwgPSBMb2dMZXZlbC5JTkZPO1xuXG4gIHB1YmxpYyBzdGF0aWMgc2V0TGV2ZWwobGV2ZWw6IExvZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5sZXZlbCA9IGxldmVsO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBkZWJ1ZyhtZXNzYWdlOiBzdHJpbmcsIC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxldmVsID09PSBMb2dMZXZlbC5ERUJVRykge1xuICAgICAgY29uc29sZS5sb2coYFtERUJVR10gJHttZXNzYWdlfWAsIC4uLmFyZ3MpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxldmVsID09PSBMb2dMZXZlbC5ERUJVRyB8fCB0aGlzLmxldmVsID09PSBMb2dMZXZlbC5JTkZPKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW0lORk9dICR7bWVzc2FnZX1gLCAuLi5hcmdzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHdhcm4obWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5sZXZlbCA9PT0gTG9nTGV2ZWwuREVCVUcgfHwgdGhpcy5sZXZlbCA9PT0gTG9nTGV2ZWwuSU5GTyB8fCB0aGlzLmxldmVsID09PSBMb2dMZXZlbC5XQVJOKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFtXQVJOXSAke21lc3NhZ2V9YCwgLi4uYXJncyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBlcnJvcihtZXNzYWdlOiBzdHJpbmcsIC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGNvbnNvbGUuZXJyb3IoYFtFUlJPUl0gJHttZXNzYWdlfWAsIC4uLmFyZ3MpO1xuICB9XG59XG4iXX0=
|