badmfck-api-server 2.6.7 → 2.6.9
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/apiServer/APIService.js +14 -2
- package/dist/apiServer/BaseEndpoint.d.ts +3 -0
- package/dist/apiServer/BaseEndpoint.js +23 -3
- package/dist/apiServer/ClusterService.d.ts +1 -1
- package/dist/apiServer/ClusterService.js +1 -1
- package/dist/apiServer/DBService.d.ts +11 -0
- package/dist/apiServer/DBService.js +15 -0
- package/dist/apiServer/cluster/HUBConnection.js +1 -1
- package/dist/apiServer/external/ExternalService.d.ts +37 -0
- package/dist/apiServer/external/ExternalService.js +178 -0
- package/dist/apiServer/external/ExternalServiceEndpoint.d.ts +6 -0
- package/dist/apiServer/external/ExternalServiceEndpoint.js +19 -0
- package/dist/apiServer/structures/Interfaces.d.ts +5 -0
- package/dist/apiServer/structures/Interfaces.js +1 -1
- package/dist/index.d.ts +2 -4
- package/dist/index.js +4 -8
- package/package.json +1 -1
@@ -45,6 +45,7 @@ const Readiness_1 = require("./routes/Readiness");
|
|
45
45
|
const http_1 = __importDefault(require("http"));
|
46
46
|
const MysqlService_1 = require("./MysqlService");
|
47
47
|
const StatService_1 = require("./StatService");
|
48
|
+
const ExternalServiceEndpoint_1 = require("./external/ExternalServiceEndpoint");
|
48
49
|
function getDefaultOptions() {
|
49
50
|
return {
|
50
51
|
port: 8091,
|
@@ -87,7 +88,7 @@ async function Initializer(services) {
|
|
87
88
|
exports.Initializer = Initializer;
|
88
89
|
class APIService extends BaseService_1.BaseService {
|
89
90
|
static nextLogID = 0;
|
90
|
-
version = "2.6.
|
91
|
+
version = "2.6.9";
|
91
92
|
options;
|
92
93
|
monitor;
|
93
94
|
monitorIndexFile;
|
@@ -123,6 +124,7 @@ class APIService extends BaseService_1.BaseService {
|
|
123
124
|
return result;
|
124
125
|
};
|
125
126
|
}
|
127
|
+
this.options.endpoints.push(new ExternalServiceEndpoint_1.ExternalServiceEndpoint());
|
126
128
|
this.options.endpoints.push(new Liveness_1.Liveness(this.started), new Readiness_1.Readiness(this.started));
|
127
129
|
exports.REQ_HTTP_REQUESTS_COUNT.listener = async () => this.requestsCount;
|
128
130
|
}
|
@@ -241,6 +243,7 @@ class APIService extends BaseService_1.BaseService {
|
|
241
243
|
}
|
242
244
|
const httpRequest = {
|
243
245
|
raw: req,
|
246
|
+
response: res,
|
244
247
|
method: req.method,
|
245
248
|
data: req.body,
|
246
249
|
params: req.params,
|
@@ -378,6 +381,15 @@ class APIService extends BaseService_1.BaseService {
|
|
378
381
|
});
|
379
382
|
}
|
380
383
|
async sendResponse(ref, res, data, requestTime, endpoint, log, req) {
|
384
|
+
if (data.blockResponse) {
|
385
|
+
if (log)
|
386
|
+
log.error = "Response blocked";
|
387
|
+
if (this.options.onNetworkLog && log)
|
388
|
+
this.options.onNetworkLog(log);
|
389
|
+
return;
|
390
|
+
}
|
391
|
+
if (req && req.stream) {
|
392
|
+
}
|
381
393
|
if (this.options.postproducer) {
|
382
394
|
try {
|
383
395
|
data = await this.options.postproducer(req, res, data, requestTime, endpoint, log);
|
@@ -498,4 +510,4 @@ class APIService extends BaseService_1.BaseService {
|
|
498
510
|
}
|
499
511
|
}
|
500
512
|
exports.APIService = APIService;
|
501
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQVBJU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGlTZXJ2ZXIvQVBJU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUF3RDtBQUN4RCwrQ0FBeUQ7QUFDekQsZ0RBQXVCO0FBRXZCLGlEQUE0RDtBQUM1RCw0RUFBc0U7QUFFdEUsbURBQWtDO0FBQ2xDLDZDQUF5RDtBQUN6RCwrQ0FBMkM7QUFDM0MsZ0RBQXVCO0FBQ3ZCLG9EQUE0QjtBQUM1Qiw0Q0FBbUI7QUFDbkIsNEVBQTJDO0FBQzNDLDRDQUFtQjtBQUNuQixnREFBNEM7QUFDNUMsa0RBQThDO0FBQzlDLGdEQUF1QjtBQUN2QixpREFBNkM7QUFFN0MsK0NBQTJDO0FBaUMzQyxTQUFnQixpQkFBaUI7SUFDaEMsT0FBTztRQUNOLElBQUksRUFBRSxJQUFJO1FBQ1YsWUFBWSxFQUFFLE9BQU87UUFDckIsaUJBQWlCLEVBQUU7WUFDbEIsdUJBQXVCO1NBQ3ZCO1FBQ0QsU0FBUyxFQUFFLEVBQUU7UUFDYixTQUFTLEVBQUMsTUFBTTtRQUNoQixZQUFZLEVBQUUsVUFBVSxHQUE2QjtZQUNwRCxJQUFBLG9CQUFPLEVBQUMsa0JBQWtCLEVBQUMsR0FBRyxDQUFDLENBQUE7UUFDaEMsQ0FBQztRQUNELE9BQU8sRUFBQyxVQUFTLEdBQU87WUFDdkIsSUFBQSxxQkFBUSxFQUFDLGtCQUFrQixFQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCx1QkFBdUIsRUFBQyxLQUFLO1FBQzdCLFNBQVMsRUFBQyxFQUFFLEdBQUMsSUFBSSxHQUFDLElBQUk7UUFDdEIsV0FBVyxFQUFDLGNBQUksQ0FBQyxPQUFPLENBQUMsWUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFDLGFBQWEsQ0FBQztLQUNuRCxDQUFBO0FBQ0YsQ0FBQztBQW5CRCw4Q0FtQkM7QUFFWSxRQUFBLGtCQUFrQixHQUFzQyxJQUFJ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RUFBRSxDQUFDO2dCQUNULElBQUcsTUFBTSxJQUFFLENBQUMsRUFBQztvQkFDWixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUMsYUFBYSxHQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQyxNQUFNLENBQUEsQ0FBQyxDQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO29CQUNyRixNQUFNO2lCQUNOO2FBQ0Q7U0FDRDtRQUNELE9BQU8sTUFBTSxJQUFJLElBQUksQ0FBQztJQUN2QixDQUFDOztBQTlmRixnQ0FnZ0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV4cHJlc3MsIHsgQXBwbGljYXRpb24sIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcydcbmltcG9ydCB7IEJhc2VTZXJ2aWNlLCBJQmFzZVNlcnZpY2UgfSBmcm9tICcuL0Jhc2VTZXJ2aWNlJ1xuaW1wb3J0IGNvcnMgZnJvbSAnY29ycydcbmltcG9ydCB7IEluY29taW5nTWVzc2FnZSB9IGZyb20gJ2h0dHAnXG5pbXBvcnQgeyBCYXNlRW5kcG9pbnQsIElCYXNlRW5kcG9pbnQgfSBmcm9tICcuL0Jhc2VFbmRwb2ludCdcbmltcG9ydCBEZWZhdWx0RXJyb3JzLCB7IEVycm9yVXRpbHMgfSBmcm9tICcuL3N0cnVjdHVyZXMvRGVmYXVsdEVycm9ycydcbmltcG9ydCB7IEhUVFBSZXF1ZXN0Vk8sIElFcnJvciwgVHJhbnNmZXJQYWNrZXRWTyB9IGZyb20gJy4vc3RydWN0dXJlcy9JbnRlcmZhY2VzJ1xuaW1wb3J0IHtSZXF9IGZyb20gXCJiYWRtZmNrLXNpZ25hbFwiXG5pbXBvcnQgeyBsb2dDcml0LCBsb2dFcnJvciwgbG9nSW5mbyB9IGZyb20gJy4vTG9nU2VydmljZSdcbmltcG9ydCB7IE1vbml0b3IgfSBmcm9tICcuL21vbml0b3IvTW9uaXRvcidcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCBjcnlwdG8gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiXG5pbXBvcnQgZmlsZVVwbG9hZCBmcm9tICdleHByZXNzLWZpbGV1cGxvYWQnXG5pbXBvcnQgb3MgZnJvbSBcIm9zXCJcbmltcG9ydCB7IExpdmVuZXNzIH0gZnJvbSAnLi9yb3V0ZXMvTGl2ZW5lc3MnXG5pbXBvcnQgeyBSZWFkaW5lc3MgfSBmcm9tICcuL3JvdXRlcy9SZWFkaW5lc3MnXG5pbXBvcnQgaHR0cCBmcm9tICdodHRwJ1xuaW1wb3J0IHsgaXNNeXNxbEVycm9yIH0gZnJvbSAnLi9NeXNxbFNlcnZpY2UnXG5pbXBvcnQgeyBNeXNxbEVycm9yIH0gZnJvbSAnbXlzcWwnXG5pbXBvcnQgeyBTdGF0U2VydmljZSB9IGZyb20gJy4vU3RhdFNlcnZpY2UnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQVBJU2VydmljZU5ldHdvcmtMb2dJdGVte1x0XG5cdGlkOm51bWJlcixcblx0Y3JlYXRlZDpudW1iZXIsXG5cdHRpbWU6bnVtYmVyLFxuXHRyZWZlcmVyPzpzdHJpbmcsXG5cdHJlcXVlc3Q6e1trZXk6c3RyaW5nXTphbnl9LFxuXHRyZXNwb25zZTp7W2tleTpzdHJpbmddOmFueX1cblx0ZXJyb3I/OnN0cmluZ3xudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVBJU2VydmljZU9wdGlvbnN7XG5cdHBvcnQ6bnVtYmVyLFxuXHRiYXNlRW5kUG9pbnQ6c3RyaW5nIC8vIFwiL2FwaS9cIlxuXHRjb3JzSG9zdFdoaXRlTGlzdDpzdHJpbmdbXSxcblx0ZW5kcG9pbnRzOklCYXNlRW5kcG9pbnRbXSxcblx0anNvbkxpbWl0OnN0cmluZyAvLyBcIjEwbWJcIlxuXHRvbk5ldHdvcmtMb2c/OigobG9nOkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbSk9PnZvaWQpfG51bGxcblx0b25FcnJvcj86KCguLi5yZXN0OmFueVtdKT0+dm9pZCl8bnVsbFxuXHRpc1Byb2R1Y3Rpb25FbnZpcm9ubWVudDpib29sZWFuLFxuXHRpbnRlcmNlcHRvcj86SUJhc2VFbmRwb2ludCxcblx0cG9zdHByb2R1Y2VyPzoocmVxOkhUVFBSZXF1ZXN0Vk98dW5kZWZpbmVkfG51bGwscmVzOlJlc3BvbnNlLGRhdGE6VHJhbnNmZXJQYWNrZXRWTzxhbnk+LHJlcXVlc3RUaW1lOm51bWJlcixlbmRwb2ludD86c3RyaW5nLGxvZz86QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtfG51bGwpPT5Qcm9taXNlPFRyYW5zZmVyUGFja2V0Vk8+XG5cdHByZXByb2R1Y2VyPzoocmVxOkhUVFBSZXF1ZXN0Vk98dW5kZWZpbmVkfG51bGwpPT5hbnlcblx0XG5cdG1vbml0b3I/Ontsb2dpbjpzdHJpbmcscGFzc3dvcmQ6c3RyaW5nfVtdXG5cdC8vZGVwbG95bWVudD86e2xvZ2luOnN0cmluZyxwYXNzd29yZDpzdHJpbmd9XG5cdGFwcFZlcnNpb24/OnN0cmluZ1xuXG5cdGZpbGVUZW1wRGlyOnN0cmluZztcblx0ZmlsZUxpbWl0Om51bWJlciAvLyBiXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpOkFQSVNlcnZpY2VPcHRpb25ze1xuXHRyZXR1cm4ge1xuXHRcdHBvcnQ6IDgwOTEsXG5cdFx0YmFzZUVuZFBvaW50OiAnL2FwaS8nLFxuXHRcdGNvcnNIb3N0V2hpdGVMaXN0OiBbXG5cdFx0XHQnaHR0cDovL2xvY2FsaG9zdDozMDAwJyxcblx0XHRdLFxuXHRcdGVuZHBvaW50czogW10sXG5cdFx0anNvbkxpbWl0OlwiMTBtYlwiLFxuXHRcdG9uTmV0d29ya0xvZzogZnVuY3Rpb24gKGxvZzogQVBJU2VydmljZU5ldHdvcmtMb2dJdGVtKTogdm9pZCB7XG5cdFx0XHRsb2dJbmZvKFwiJHtBUElTZXJ2aWNlLmpzfVwiLGxvZylcblx0XHR9LFxuXHRcdG9uRXJyb3I6ZnVuY3Rpb24oZXJyOmFueSl7XG5cdFx0XHRsb2dFcnJvcihcIiR7QVBJU2VydmljZS5qc31cIixlcnIpO1xuXHRcdH0sXG5cdFx0aXNQcm9kdWN0aW9uRW52aXJvbm1lbnQ6ZmFsc2UsXG5cdFx0ZmlsZUxpbWl0OjUwKjEwMjQqMTAyNCxcblx0XHRmaWxlVGVtcERpcjpwYXRoLnJlc29sdmUob3MudG1wZGlyKCksXCJmaWxlVGVtcERpclwiKVxuXHR9XG59XG5cbmV4cG9ydCBjb25zdCBSRVFfQ1JFQVRFX05FVF9MT0c6UmVxPHZvaWQsQVBJU2VydmljZU5ldHdvcmtMb2dJdGVtPiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0NSRUFURV9ORVRfTE9HXCIpO1xuZXhwb3J0IGNvbnN0IFJFUV9IVFRQX0xPRzpSZXE8dm9pZCxBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW1bXT4gPSBuZXcgUmVxKHVuZGVmaW5lZCxcIlJFUV9IVFRQX0xPR1wiKTtcbmV4cG9ydCBjb25zdCBSRVFfSFRUUF9SRVFVRVNUU19DT1VOVDpSZXE8dm9pZCxudW1iZXI+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfSFRUUF9SRVFVRVNUU19DT1VOVFwiKTtcbmV4cG9ydCBjb25zdCBSRVFfSFRUUF9TRVJWRVI6UmVxPHZvaWQse2V4cHJlc3M6QXBwbGljYXRpb24saHR0cDpodHRwLlNlcnZlcn0+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfSFRUUF9TRVJWRVJcIik7XG5leHBvcnQgY29uc3QgUkVRX0lOVEVSTkFMX0NBTEw6UmVxPEhUVFBSZXF1ZXN0Vk8sSUVycm9yfGFueT4gPSBuZXcgUmVxKHVuZGVmaW5lZCxcIlJFUV9JTlRFUk5BTF9DQUxMXCIpO1xuZXhwb3J0IGNvbnN0IFJFUV9NT05JVE9SX1VTRVJTOlJlcTx7YXV0aG9yaXphdGlvbjpzdHJpbmd9LGFueT4gPSBuZXcgUmVxKHVuZGVmaW5lZCxcIlJFUV9NT05JVE9SX1VTRVJTXCIpO1xuXG5jb25zdCBhY3RpdmVTZXJ2aWNlczpTdHJpbmdbXT1bXVxuY29uc3QgZW50cnlQb2ludHM6U3RyaW5nW109W11cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIEluaXRpYWxpemVyKHNlcnZpY2VzOklCYXNlU2VydmljZVtdKXtcblx0Ly8gYWRkIHN0YXQgc2VydmljZVxuXHRzZXJ2aWNlcy5wdXNoKG5ldyBTdGF0U2VydmljZSgpKTtcblx0XG4gICAgZm9yIChsZXQgaSBvZiBzZXJ2aWNlcykgeyBhd2FpdCBpLmluaXQoKTthY3RpdmVTZXJ2aWNlcy5wdXNoKGkuZ2V0TmFtZSgpKSB9XG4gICAgZm9yIChsZXQgaSBvZiBzZXJ2aWNlcykgeyBpLmFwcGxpY2F0aW9uUmVhZHkoKSB9XG59XG5cbmV4cG9ydCBjbGFzcyBBUElTZXJ2aWNlIGV4dGVuZHMgQmFzZVNlcnZpY2Uge1xuXG5cdC8vIE5FVCBMT0dcblx0cHJpdmF0ZSBzdGF0aWMgbmV4dExvZ0lEPTA7XG5cdHByaXZhdGUgdmVyc2lvbiA9IFwiMi42LjdcIlxuXHRwcml2YXRlIG9wdGlvbnM6QVBJU2VydmljZU9wdGlvbnM7XG5cdHByaXZhdGUgbW9uaXRvcj86TW9uaXRvclxuXHRwcml2YXRlIG1vbml0b3JJbmRleEZpbGU/OkJ1ZmZlclxuXHRwcml2YXRlIHN0YXJ0ZWQ6RGF0ZSA9IG5ldyBEYXRlKCk7XG5cdHByaXZhdGUgcmVxdWVzdHNDb3VudD0wO1xuXHRwcml2YXRlIHNlcnZlcj1odHRwXG5cblx0bmV0TG9nOkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbVtdPVtdO1xuXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM/OkFQSVNlcnZpY2VPcHRpb25zfG51bGwpIHtcblx0XHRzdXBlcignSFRUUCBTZXJ2aWNlJylcblx0XHR0aGlzLm9wdGlvbnM9b3B0aW9ucyA/PyBnZXREZWZhdWx0T3B0aW9ucygpO1xuXHRcdGlmKCF0aGlzLm9wdGlvbnMuY29yc0hvc3RXaGl0ZUxpc3QpXG5cdFx0XHR0aGlzLm9wdGlvbnMuY29yc0hvc3RXaGl0ZUxpc3Q9W107XG5cdFx0Y29uc3Qgc2VsZiA9IFwiaHR0cDovL2xvY2FsaG9zdDpcIit0aGlzLm9wdGlvbnMucG9ydDtcblx0XHRpZighdGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0LmZpbmQodmFsPT52YWw9PT1zZWxmKSlcblx0XHRcdHRoaXMub3B0aW9ucy5jb3JzSG9zdFdoaXRlTGlzdC5wdXNoKClcblxuXHRcdGlmKHRoaXMub3B0aW9ucy5tb25pdG9yICYmIHRoaXMub3B0aW9ucy5tb25pdG9yLmxlbmd0aD4wKXtcblx0XHRcdHRoaXMubW9uaXRvcj1uZXcgTW9uaXRvcigpO1xuXHRcdFx0dGhpcy5vcHRpb25zLmVuZHBvaW50cy5wdXNoKHRoaXMubW9uaXRvcilcblx0XHRcdGNvbnNvbGUud2FybihcIlNlcnZpY2UgTW9uaXRvciBpbml0aWFsaXplZFwiKVxuXHRcdFx0Y29uc29sZS53YXJuKFwibW9uaXRvciBsaW5rczpcIilcblx0XHRcdGZvcihsZXQgaSBvZiB0aGlzLm9wdGlvbnMubW9uaXRvcil7XG5cdFx0XHRcdGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoaS5sb2dpbitpLnBhc3N3b3JkKS5kaWdlc3QoKS50b1N0cmluZyhcImhleFwiKVxuXHRcdFx0XHRjb25zb2xlLndhcm4oXCJNb25pdG9yIGxpbmsgZm9yOiBcIitpLmxvZ2luK1wiIC0+IC9zbS1cIitoYXNoKVx0XHRcdFx0XHRcdFxuXHRcdFx0fVxuXG5cdFx0XHRSRVFfTU9OSVRPUl9VU0VSUy5saXN0ZW5lciA9IGFzeW5jIChyZXEpPT57XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IFtdXG5cdFx0XHRcdGlmKHRoaXMub3B0aW9ucy5tb25pdG9yKXtcblx0XHRcdFx0XHRmb3IobGV0IGkgb2YgdGhpcy5vcHRpb25zLm1vbml0b3Ipe1xuXHRcdFx0XHRcdFx0Y29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShpLmxvZ2luK2kucGFzc3dvcmQpLmRpZ2VzdCgpLnRvU3RyaW5nKFwiaGV4XCIpO1xuXHRcdFx0XHRcdFx0cmVzdWx0LnB1c2goaGFzaCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gY3JlYXRlIGxpdmVuZXNzLCByZWFkaW5lc3Ncblx0XHR0aGlzLm9wdGlvbnMuZW5kcG9pbnRzLnB1c2gobmV3IExpdmVuZXNzKHRoaXMuc3RhcnRlZCksbmV3IFJlYWRpbmVzcyh0aGlzLnN0YXJ0ZWQpKVxuXHRcdFJFUV9IVFRQX1JFUVVFU1RTX0NPVU5ULmxpc3RlbmVyID0gYXN5bmMgKCkgPT4gdGhpcy5yZXF1ZXN0c0NvdW50O1xuXHR9XG5cblxuXHRvdmVycmlkZSBhc3luYyBpbml0KCk6IFByb21pc2U8dm9pZD4ge1xuXG5cdFx0UkVRX0hUVFBfTE9HLmxpc3RlbmVyPWFzeW5jIGlnbm9yZT0+dGhpcy5uZXRMb2c7XG5cdFx0UkVRX0NSRUFURV9ORVRfTE9HLmxpc3RlbmVyID0gYXN5bmMgaWdub3JlPT57XG5cdFx0XHRjb25zdCBsb2c6QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtID0ge1xuXHRcdFx0XHRjcmVhdGVkOiArbmV3IERhdGUoKSxcblx0XHRcdFx0dGltZTogMCxcblx0XHRcdFx0cmVxdWVzdDoge30sXG5cdFx0XHRcdHJlc3BvbnNlOiB7fSxcblx0XHRcdFx0ZXJyb3I6bnVsbCxcblx0XHRcdFx0aWQ6IEFQSVNlcnZpY2UubmV4dExvZ0lEKytcblx0XHRcdH1cblx0XHRcdHRoaXMubmV0TG9nLnB1c2gobG9nKVxuXHRcdFx0aWYodGhpcy5uZXRMb2cubGVuZ3RoPjEwMDApXG5cdFx0XHRcdHRoaXMubmV0TG9nLnNoaWZ0KClcblx0XHRcdHJldHVybiBsb2c7XG5cdFx0fVxuXG5cdFx0Ly8gaW50ZXJuYWwgY2FsbFxuXHRcdFJFUV9JTlRFUk5BTF9DQUxMLmxpc3RlbmVyID0gYXN5bmMgKHJlcSk9Pntcblx0XHRcdGZvcihsZXQgaSBvZiB0aGlzLm9wdGlvbnMuZW5kcG9pbnRzKXtcblx0XHRcdFx0aWYoIWkgfHwgIWkuZW5kcG9pbnRzKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRmb3IobGV0IGogb2YgaS5lbmRwb2ludHMpe1xuXHRcdFx0XHRcdGxldCBlcCA9IEJhc2VFbmRwb2ludC5nZXRFbnRyeVBvaW50KCkrai5lbmRwb2ludDtcblx0XHRcdFx0XHRlcCA9IGVwLnJlcGxhY2VBbGwoXCIvL1wiLFwiL1wiKVxuXHRcdFx0XHRcdGlmKGVwID09PSByZXEuZW5kcG9pbnQpe1xuXHRcdFx0XHRcdFx0cmVxLmludGVybmFsQ2FsbD10cnVlO1xuXHRcdFx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCBpLmV4ZWN1dGUocmVxKVxuXHRcdFx0XHRcdFx0aWYocmVzcG9uc2UuZXJyb3IpXG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0XHRcdHJldHVybiByZXNwb25zZS5kYXRhO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHtlcnJvcjpEZWZhdWx0RXJyb3JzLlVOS05PV05fUkVRVUVTVCxkYXRhOm51bGwsaHR0cFN0YXR1czo0MDR9XG5cdFx0fVxuXG5cdFx0Ly8gaW5pdGlhbGl6ZSBleHByZXNzXG5cdFx0Y29uc3QgYXBwID0gZXhwcmVzcygpXG5cdFx0Y29uc3Qgc2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIoYXBwKTtcblxuXHRcdFJFUV9IVFRQX1NFUlZFUi5saXN0ZW5lciA9IGFzeW5jIGlnbm9yZT0+e3JldHVybiB7ZXhwcmVzczphcHAsaHR0cDpzZXJ2ZXJ9fTtcblxuXHRcdGlmKHRoaXMub3B0aW9ucy5pc1Byb2R1Y3Rpb25FbnZpcm9ubWVudClcblx0XHRcdGFwcC5zZXQoXCJlbnZcIiwncHJvZHVjdGlvbicpO1xuXG5cdFx0YXBwLnVzZShleHByZXNzLmpzb24oeyBsaW1pdDogJzEwbWInIH0pKSAvLyBmb3IgcGFyc2luZyBhcHBsaWNhdGlvbi9qc29uXG5cdFx0YXBwLnVzZShleHByZXNzLnVybGVuY29kZWQoeyBsaW1pdDogJzEwbWInLCBleHRlbmRlZDogdHJ1ZSB9KSkgLy8gZm9yIHBhcnNpbmcgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXG5cblx0XHRhcHAudXNlKGZpbGVVcGxvYWQoe1xuXHRcdFx0bGltaXRIYW5kbGVyOiAocmVxLCByZXMsIG5leHQpPT57XG5cdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyx7XG5cdFx0XHRcdFx0ZXJyb3I6RGVmYXVsdEVycm9ycy5GSUxFX1RPT19MQVJHRSxcblx0XHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdFx0aHR0cFN0YXR1czo0MTMsXG5cdFx0XHRcdH0sK25ldyBEYXRlKCkscmVxLnBhdGgpO1xuXHRcdFx0fSxcblx0XHRcdGxpbWl0czogeyBmaWxlU2l6ZTogdGhpcy5vcHRpb25zLmZpbGVMaW1pdCB9LFxuXHRcdFx0dXNlVGVtcEZpbGVzOiB0cnVlLFxuXHRcdFx0dXJpRGVjb2RlRmlsZU5hbWVzOiB0cnVlLFxuXHRcdFx0dGVtcEZpbGVEaXI6IHRoaXMub3B0aW9ucy5maWxlVGVtcERpcixcblx0XHRcdC8vc2FmZUZpbGVOYW1lczogdHJ1ZSxcblx0XHRcdGFib3J0T25MaW1pdDp0cnVlXG5cdFx0fSkpXG5cblx0XHRhcHAudXNlKGFzeW5jIChlcnI6YW55LHJlcTphbnkscmVzcDphbnksbmV4dDphbnkpPT57XG5cdFx0XHRcblx0XHRcdGlmKCFlcnIpe1xuXHRcdFx0XHRuZXh0KCk7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXHRcdFx0XHQvL3JlcXVlc3Qgc3RhcnQgdGltZVxuXHRcdFx0Y29uc3QgdG1lID0gK25ldyBEYXRlKCk7XG5cdFx0XHRjb25zdCBsb2cgPSBhd2FpdCBSRVFfQ1JFQVRFX05FVF9MT0cucmVxdWVzdCgpO1xuXHRcdFx0bG9nLnJlcXVlc3Q9e1xuXHRcdFx0XHRtZXRob2Q6cmVxLm1ldGhvZCxcblx0XHRcdFx0ZGF0YTpcIlwiLFxuXHRcdFx0XHRwYXJhbXM6cmVxLnBhcmFtc1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgcmVzcG9uc2VFcnJvcj1EZWZhdWx0RXJyb3JzLlVOS05PV05fUkVRVUVTVDtcblx0XHRcdGlmICh0eXBlb2YgZXJyID09PSBcIm9iamVjdFwiICYmIGVyci5zdGF0dXMgPT09IDQwMCAmJiAnYm9keScgaW4gZXJyICYmIGVyci50eXBlID09PSAnZW50aXR5LnBhcnNlLmZhaWxlZCcpIHtcblx0XHRcdFx0cmVzcG9uc2VFcnJvciA9IERlZmF1bHRFcnJvcnMuSlNPTl9NQUxGT1JNRURcblx0XHRcdH1cbiAgICAgIFxuXG5cdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXNwLHtcblx0XHRcdFx0ZXJyb3I6cmVzcG9uc2VFcnJvcixcblx0XHRcdFx0ZGF0YTpudWxsLFxuXHRcdFx0XHRodHRwU3RhdHVzOjQwMFxuXHRcdFx0fSx0bWUsXCJcIixsb2cpXG5cblx0XHR9KVxuXG5cdFx0Y29uc3QgY29yc09wdGlvbnMgPSB7XG5cdFx0XHRvcmlnaW46IChvcmlnaW46IGFueSwgY2FsbGJhY2s6IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBvcmlnaW5Jc1doaXRlbGlzdGVkID0gdGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0LmluY2x1ZGVzKG9yaWdpbilcblx0XHRcdFx0Y2FsbGJhY2sobnVsbCwgb3JpZ2luSXNXaGl0ZWxpc3RlZClcblx0XHRcdH0sXG5cdFx0XHRjcmVkZW50aWFsczogdHJ1ZVxuXHRcdH1cblx0XHRhcHAudXNlKGNvcnMoY29yc09wdGlvbnMpKVxuXG5cdFx0Ly8gcmVnaXN0cmF0ZSBlbmRwb2ludHNcblx0XHRCYXNlRW5kcG9pbnQuc2V0RW50cnlQb2ludCh0aGlzLm9wdGlvbnMuYmFzZUVuZFBvaW50KVxuXHRcdFxuXHRcdGZvcihsZXQgaSBvZiB0aGlzLm9wdGlvbnMuZW5kcG9pbnRzKXtcblx0XHRcdGF3YWl0IGkuaW5pdCgpO1xuXHRcdFx0aWYoIWkuZW5kcG9pbnRzKVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdGZvcihsZXQgaiBvZiBpLmVuZHBvaW50cyl7XG5cdFx0XHRcdGxldCBlcCA9IEJhc2VFbmRwb2ludC5nZXRFbnRyeVBvaW50KCkrai5lbmRwb2ludDtcblx0XHRcdFx0ZXAgPSBlcC5yZXBsYWNlQWxsKFwiLy9cIixcIi9cIilcblx0XHRcdFx0XG5cblx0XHRcdFx0Ly8gaW5jb21pbmcgcmVxdWVzdFxuXHRcdFx0XHRhcHAuYWxsKGVwLGFzeW5jIChyZXEscmVzKT0+e1xuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHNDb3VudCsrO1xuXHRcdFx0XHRcdGNvbnN0IHRtZSA9ICtuZXcgRGF0ZSgpO1xuXHRcdFx0XHRcdGxldCBsb2c6QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtfG51bGwgPSBudWxsO1xuXHRcdFx0XHRcdGlmKCFpLmlnbm9yZUh0dHBMb2dnaW5nKXtcblx0XHRcdFx0XHRcdGxvZyA9IGF3YWl0IFJFUV9DUkVBVEVfTkVUX0xPRy5yZXF1ZXN0KCk7XG5cdFx0XHRcdFx0XHRsb2cucmVxdWVzdD17XG5cdFx0XHRcdFx0XHRcdHVybDpyZXEudXJsLFxuXHRcdFx0XHRcdFx0XHRtZXRob2Q6cmVxLm1ldGhvZCxcblx0XHRcdFx0XHRcdFx0ZGF0YTp0aGlzLmNoZWNrRGF0YUxlbmd0aChyZXEuYm9keSksXG5cdFx0XHRcdFx0XHRcdHBhcmFtczp0aGlzLmNoZWNrRGF0YUxlbmd0aChyZXEucGFyYW1zKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGV4ZWN1dGUgPSBhc3luYyAoKT0+e1xuXG5cdFx0XHRcdFx0XHRjb25zdCBib2R5ID0gcmVxLmJvZHk7XG5cdFx0XHRcdFx0XHRpZihyZXEucXVlcnkgJiYgdHlwZW9mIHJlcS5xdWVyeSA9PT0gXCJvYmplY3RcIil7XG5cdFx0XHRcdFx0XHRcdGZvcihsZXQgaSBpbiByZXEucXVlcnkpe1xuXHRcdFx0XHRcdFx0XHRcdGJvZHlbaV09cmVxLnF1ZXJ5W2ldO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGh0dHBSZXF1ZXN0OkhUVFBSZXF1ZXN0Vk8gPSB7XG5cdFx0XHRcdFx0XHRcdHJhdzpyZXEgYXMgSW5jb21pbmdNZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHRtZXRob2Q6cmVxLm1ldGhvZCxcblx0XHRcdFx0XHRcdFx0ZGF0YTpyZXEuYm9keSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOnJlcS5wYXJhbXMsXG5cdFx0XHRcdFx0XHRcdGhlYWRlcnM6cmVxLmhlYWRlcnMgYXMgYW55LFxuXHRcdFx0XHRcdFx0XHRlbmRwb2ludDplcCxcblx0XHRcdFx0XHRcdFx0ZmlsZXM6cmVxLmZpbGVzID8/IG51bGwsXG5cdFx0XHRcdFx0XHRcdHJlZmVyZXI6cmVxLmdldChcIlJlZmVyZXJcIiksXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKHRoaXMub3B0aW9ucy5wcmVwcm9kdWNlcil7XG5cdFx0XHRcdFx0XHRcdHRyeXtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJlcHJvZHVjZXJSZXN1bHQgPSBhd2FpdCB0aGlzLm9wdGlvbnMucHJlcHJvZHVjZXIoaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRpZihwcmVwcm9kdWNlclJlc3VsdClcblx0XHRcdFx0XHRcdFx0XHRodHRwUmVxdWVzdC5wcmVwcm9kdWNlclJlc3VsdCA9IHByZXByb2R1Y2VyUmVzdWx0O1xuXHRcdFx0XHRcdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IGRldGFpbHM9YCR7ZX1gXG5cdFx0XHRcdFx0XHRcdFx0bGV0IHN0YWNrOklFcnJvcltdfHVuZGVmaW5lZD11bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0aWYoRXJyb3JVdGlscy5pc0Vycm9yKGUpKXtcblx0XHRcdFx0XHRcdFx0XHRcdGRldGFpbHM9KGUgYXMgYW55KS5tZXNzYWdlXG5cdFx0XHRcdFx0XHRcdFx0XHRzdGFjayA9IFtlIGFzIGFueV07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0aWYoaXNNeXNxbEVycm9yKGUpKVxuXHRcdFx0XHRcdFx0XHRcdFx0ZGV0YWlscyA9IChlIGFzIE15c3FsRXJyb3IpLm1lc3NhZ2U7XG5cdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMse2Vycm9yOntjb2RlOjEwMDAyLG1lc3NhZ2U6XCJJbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIixzdGFjazpzdGFjayxkZXRhaWxzOmRldGFpbHN9LGRhdGE6bnVsbCxodHRwU3RhdHVzOjUwMH0sdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGxldCByZXN1bHRcblx0XHRcdFx0XHRcdHRyeXtcblxuXHRcdFx0XHRcdFx0XHRsZXQgaWdub3JlSW50ZXJjZXB0b3IgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0bGV0IGFsbG93SW50ZXJjZXB0b3JFcnJvciA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRpZihqLmlnbm9yZUludGVyY2VwdG9yKVxuXHRcdFx0XHRcdFx0XHRcdGlnbm9yZUludGVyY2VwdG9yPXRydWU7XG5cdFx0XHRcdFx0XHRcdGlmKGouYWxsb3dJbnRlcmNlcHRvckVycm9yKVxuXHRcdFx0XHRcdFx0XHRcdGFsbG93SW50ZXJjZXB0b3JFcnJvcj10cnVlO1xuXG5cdFx0XHRcdFx0XHRcdGlmKHR5cGVvZiBqLmhhbmRsZXIgPT09IFwib2JqZWN0XCIgKXtcblx0XHRcdFx0XHRcdFx0XHQvLyB0cnkgdG8gZ2V0IGhhbmRsZXIgcmVsYXlpbmcgb24gaHR0cCBtZXRob2Rcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBoYW5kbGVyID0gai5oYW5kbGVyW2h0dHBSZXF1ZXN0Lm1ldGhvZC50b1VwcGVyQ2FzZSgpXTtcblx0XHRcdFx0XHRcdFx0XHRpZih0eXBlb2YgaGFuZGxlciA9PT0gXCJvYmplY3RcIil7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihoYW5kbGVyLmlnbm9yZUludGVyY2VwdG9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZ25vcmVJbnRlcmNlcHRvcj10cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoaGFuZGxlci5hbGxvd0ludGVyY2VwdG9yRXJyb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFsbG93SW50ZXJjZXB0b3JFcnJvcj10cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH0gXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyBFeGVjdXRlIGludGVyY2VwdG9yIGlmIGV4aXN0c1xuXHRcdFx0XHRcdFx0XHRpZighaWdub3JlSW50ZXJjZXB0b3Ipe1xuXHRcdFx0XHRcdFx0XHRcdGxldCBpbnRlcmNlcHRvclJlc3VsdDtcblx0XHRcdFx0XHRcdFx0XHRpZih0aGlzLm9wdGlvbnMuaW50ZXJjZXB0b3Ipe1xuXHRcdFx0XHRcdFx0XHRcdFx0aW50ZXJjZXB0b3JSZXN1bHQ9YXdhaXQgdGhpcy5vcHRpb25zLmludGVyY2VwdG9yLmV4ZWN1dGUoaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoaW50ZXJjZXB0b3JSZXN1bHQuZXJyb3IgJiYgIWFsbG93SW50ZXJjZXB0b3JFcnJvcil7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyxpbnRlcmNlcHRvclJlc3VsdCx0bWUsZXAsbG9nLGh0dHBSZXF1ZXN0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0aHR0cFJlcXVlc3QuaW50ZXJjZXB0b3JSZXN1bHQgPSBpbnRlcmNlcHRvclJlc3VsdFxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIFByZWNoZWNrIFdIWT9cblx0XHRcdFx0XHRcdFx0aWYoaSA9PT0gdGhpcy5tb25pdG9yKVxuXHRcdFx0XHRcdFx0XHRcdGh0dHBSZXF1ZXN0LnByZWNoZWNrPXtkYXRhOnRoaXMub3B0aW9ucy5tb25pdG9yfVxuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByZWNoZWNrPWF3YWl0IGkucHJlY2hlY2soaHR0cFJlcXVlc3QpXG5cdFx0XHRcdFx0XHRcdGlmKHByZWNoZWNrICYmIHByZWNoZWNrLmVycm9yKXtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMscHJlY2hlY2ssdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aHR0cFJlcXVlc3QucHJlY2hlY2s9cHJlY2hlY2s7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHQvLyBJZiBpbnRlcmNlcHRvciBoYXMgbm8gZXJyb3JzLCBleGVjdXRlIG1haW4gaGFuZGxlclxuXHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBhd2FpdCBpLmV4ZWN1dGUoaHR0cFJlcXVlc3QpXG5cdFx0XHRcdFx0XHRcdCBcblx0XHRcdFx0XHRcdH1jYXRjaChlKXtcblxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGUpO1xuXHRcdFx0XHRcdFx0XHRpZih0aGlzLm9wdGlvbnMub25FcnJvcilcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9wdGlvbnMub25FcnJvcihlKVxuXHRcdFx0XHRcdFx0XHRpZih0aGlzLm1vbml0b3IpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVGYXRhbEVycm9yKGVwKTtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdC8vIGNoZWNrIGlmIGVycm9yIGlzIElFcnJvclxuXHRcdFx0XHRcdFx0XHRsZXQgZGF0YTpUcmFuc2ZlclBhY2tldFZPID0ge1xuXHRcdFx0XHRcdFx0XHRcdGVycm9yOntcblx0XHRcdFx0XHRcdFx0XHRcdGNvZGU6MTAwMDIsXG5cdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlOlwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRodHRwU3RhdHVzOjUwMCxcblx0XHRcdFx0XHRcdFx0XHRcdGRldGFpbHM6YCR7ZX1gXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYoRXJyb3JVdGlscy5pc0Vycm9yKGUpKVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEgPSB7ZXJyb3I6ZSBhcyBJRXJyb3J9XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLGRhdGEsdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyxyZXN1bHQsdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZXhlY3V0ZSgpXG5cdFx0XHRcdH0pOy8vIGhhbmRsZSBpbmNvbWluZyByZXF1ZXN0XG5cblx0XHRcdH1cblx0XHR9XG5cblx0XG5cblx0XHQvLyBmaW5hbCBoYW5kbGVyXG5cdFx0YXBwLnVzZSgocmVxLCByZXMsIG5leHQpID0+IHtcblx0XHRcdFxuXHRcdFx0Y29uc3QgdG1lID0gK25ldyBEYXRlKClcblxuXHRcdFx0aWYodGhpcy5tb25pdG9yICYmIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubW9uaXRvcil7XG5cdFx0XHRcdC8vY2hlY2sgaWYgcmVxdWVzdGluZyBtb25pdG9yXG5cdFx0XHRcdGlmKHJlcS5tZXRob2Q9PT1cIkdFVFwiKXtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRsZXQgbW9uaXRvclJlcXVlc3Q9ZmFsc2U7XG5cdFx0XHRcdFx0Zm9yKGxldCBpIG9mIHRoaXMub3B0aW9ucy5tb25pdG9yKXtcblx0XHRcdFx0XHRcdGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoaS5sb2dpbitpLnBhc3N3b3JkKS5kaWdlc3QoKS50b1N0cmluZyhcImhleFwiKVxuXHRcdFx0XHRcdFx0aWYocmVxLm9yaWdpbmFsVXJsLmVuZHNXaXRoKFwiL3NtLVwiK2hhc2gpKXtcblx0XHRcdFx0XHRcdFx0bW9uaXRvclJlcXVlc3Q9dHJ1ZTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYobW9uaXRvclJlcXVlc3Qpe1xuXHRcdFx0XHRcdFx0Ly8gc2VuZCBpbmRleCBUaHUsIDE2IE5vdiAyMDIzIDIzOjMzOjM1IEdNVFxuXHRcdFx0XHRcdFx0Y29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRcdFx0XHR0cnl7XG5cdFx0XHRcdFx0XHRcdGlmKCF0aGlzLm1vbml0b3JJbmRleEZpbGUpXG5cdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvckluZGV4RmlsZSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLnJlc29sdmUoX19kaXJuYW1lLFwibW9uaXRvclwiLFwiaW5kZXguaHRtbFwiKSk7XG5cdFx0XHRcdFx0XHRcdHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIixcInRleHQvaHRtbFwiKVxuXHRcdFx0XHRcdFx0XHRyZXMuc2V0SGVhZGVyKFwiQ29udGVudC1MZW5ndGhcIix0aGlzLm1vbml0b3JJbmRleEZpbGUuYnl0ZUxlbmd0aClcblx0XHRcdFx0XHRcdFx0cmVzLnN0YXR1cygyMDApLnNlbmQodGhpcy5tb25pdG9ySW5kZXhGaWxlKTtcblx0XHRcdFx0XHRcdH1jYXRjaChlKXtcblx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjp7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2RlOjEwMDAyLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZTpcIkludGVybmFsIHNlcnZlciBlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGV0YWlsczpgJHtlfWBcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdGRhdGE6bnVsbCxcblx0XHRcdFx0XHRcdFx0XHRodHRwU3RhdHVzOjUwMFxuXHRcdFx0XHRcdFx0XHR9LHRtZSxyZXEucGF0aCk7XHRcdFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRcblx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyx7XG5cdFx0XHRcdGVycm9yOkRlZmF1bHRFcnJvcnMuVU5LTk9XTl9SRVFVRVNULFxuXHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdGh0dHBTdGF0dXM6NDA0XG5cdFx0XHR9LHRtZSxyZXEucGF0aCk7XG5cdFx0fSlcblxuXHRcdHNlcnZlci5saXN0ZW4odGhpcy5vcHRpb25zLnBvcnQsICgpID0+IHtcblx0XHRcdGxvZ0NyaXQoJyR7QVBJU2VydmljZS5qc30nLCdBUEkgU2VydmljZSBzdGFydGVkIGF0OiAnK3RoaXMub3B0aW9ucy5wb3J0K1wiLCB3aXRoIGJhc2UgZW5kcG9pbnQ6XCIrdGhpcy5vcHRpb25zLmJhc2VFbmRQb2ludCtcIiwgdmVyLjogXCIrdGhpcy52ZXJzaW9uKVxuXHRcdH0pXG5cblx0XHQvKmFwcC5saXN0ZW4odGhpcy5vcHRpb25zLnBvcnQsICgpID0+IHtcblx0XHRcdGxvZ0NyaXQoJyR7QVBJU2VydmljZS5qc30nLCdBUEkgU2VydmljZSBzdGFydGVkIGF0OiAnK3RoaXMub3B0aW9ucy5wb3J0K1wiLCB3aXRoIGJhc2UgZW5kcG9pbnQ6XCIrdGhpcy5vcHRpb25zLmJhc2VFbmRQb2ludCtcIiwgdmVyLjogXCIrdGhpcy52ZXJzaW9uKVxuXHRcdH0pKi9cblx0fVxuXG5cdGFzeW5jIHNlbmRSZXNwb25zZShyZWY6c3RyaW5nLHJlczpSZXNwb25zZSxkYXRhOlRyYW5zZmVyUGFja2V0Vk88YW55PixyZXF1ZXN0VGltZTpudW1iZXIsZW5kcG9pbnQ/OnN0cmluZyxsb2c/OkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXxudWxsLHJlcT86SFRUUFJlcXVlc3RWTyl7XG5cblx0XHRpZih0aGlzLm9wdGlvbnMucG9zdHByb2R1Y2VyKXtcblx0XHRcdHRyeXtcblx0XHRcdFx0ZGF0YSA9IGF3YWl0IHRoaXMub3B0aW9ucy5wb3N0cHJvZHVjZXIocmVxLHJlcyxkYXRhLHJlcXVlc3RUaW1lLGVuZHBvaW50LGxvZyk7XG5cdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdGxvZ0Vycm9yKFwiUG9zdHByb2R1Y2VyIGVycm9yXCIsZSlcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZihFcnJvclV0aWxzLmlzRXJyb3IoZGF0YSkpXG5cdFx0XHRkYXRhID0ge2Vycm9yOmRhdGEgYXMgSUVycm9yLGRhdGE6bnVsbH1cblx0XHRcbiAgICAgICAgZGF0YS5yZXNwb25zZVRpbWUgPSAoK25ldyBEYXRlKCkpIC0gcmVxdWVzdFRpbWU7XG4gICAgICAgIGRhdGEuY29yZSA9IHRoaXMudmVyc2lvblxuICAgICAgICBkYXRhLmVuZHBvaW50ID0gZW5kcG9pbnQgPz8gXCJub19lbmRwb2ludFwiXG5cdFx0XG5cdFx0aWYodGhpcy5vcHRpb25zLmFwcFZlcnNpb24pXG5cdFx0XHRkYXRhLnZlcnNpb249dGhpcy5vcHRpb25zLmFwcFZlcnNpb25cblxuXHRcdFxuXHRcdGlmKGxvZyl7XG5cdFx0XHRsb2cudGltZSA9IGRhdGEucmVzcG9uc2VUaW1lXG5cdFx0XHRsb2cucmVmZXJlcj1yZWY7XG5cdFx0fVxuXG5cdFx0aWYodGhpcy5tb25pdG9yKVxuXHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVSZXNwb25zZShkYXRhLmVuZHBvaW50LGRhdGEucmVzcG9uc2VUaW1lKVxuXG4gICAgICAgIGlmKHJlcy5kZXN0cm95ZWQgfHwgcmVzLmNsb3NlZCl7XG5cblx0XHRcdGlmKGxvZylcblx0XHRcdFx0bG9nLmVycm9yID0gXCJDb25uZWN0aW9uIGFscmVhZHkgY2xvc2VkLCBjYW4ndCBzZW5kIHJlc3BvbnNlIGZvcjogXCIrZGF0YS5lbmRwb2ludFxuXHRcdFx0aWYodGhpcy5vcHRpb25zLm9uRXJyb3IpXG4gICAgICAgICAgICBcdHRoaXMub3B0aW9ucy5vbkVycm9yKFwiQ29ubmVjdGlvbiBhbHJlYWR5IGNsb3NlZCwgY2FuJ3Qgc2VuZCByZXNwb25zZTogXCIrZGF0YS5lbmRwb2ludCxkYXRhKVxuICAgICAgICAgICAgXG5cdFx0XHRpZih0aGlzLm1vbml0b3IpXG5cdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlRXJyb3IoZGF0YS5lbmRwb2ludCk7XG5cbiAgICAgICAgfWVsc2V7XG5cdFx0XHR0cnl7XG5cblx0XHRcdFx0aWYoZGF0YS5maWxlKXtcblxuXHRcdFx0XHRcdHJlcy5zZW5kRmlsZShkYXRhLmZpbGUsZXJyPT57XG5cdFx0XHRcdFx0XHRpZihlcnIpe1xuXHRcdFx0XHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0XHRcdFx0bG9nLmVycm9yID0gXCJDYW4ndCBzZW5kIGZpbGU6IFwiK2RhdGEuZmlsZVxuXHRcdFx0XG5cdFx0XHRcdFx0XHRcdGlmKHRoaXMubW9uaXRvciAmJiBkYXRhLmVuZHBvaW50KVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlQVBJRXJyb3IoZGF0YS5lbmRwb2ludCk7XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVmLHJlcyx7XG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6RGVmYXVsdEVycm9ycy5DQU5UX1NFTkRfRklMRSxcblx0XHRcdFx0XHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdFx0XHRcdFx0aHR0cFN0YXR1czo1MDBcblx0XHRcdFx0XHRcdFx0fSxyZXF1ZXN0VGltZSxkYXRhLmVuZHBvaW50KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH0pXG5cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdGlmKGRhdGEucmVkaXJlY3Qpe1xuXHRcdFx0XHRcdHJlcy5yZWRpcmVjdChkYXRhLnJlZGlyZWN0KTtcblx0XHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0XHRsb2cucmVzcG9uc2UgPSB7cmVkaXJlY3Q6ZGF0YS5yZWRpcmVjdH1cblx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0Ly8gc2V0dXAgaGVhZGVyc1xuXHRcdFx0XHRcdGlmKGRhdGEuaGVhZGVycyl7XG5cdFx0XHRcdFx0XHRmb3IobGV0IGkgaW4gZGF0YS5oZWFkZXJzKVxuXHRcdFx0XHRcdFx0XHRyZXMuc2V0SGVhZGVyKGksZGF0YS5oZWFkZXJzW2ldKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihkYXRhLmVycm9yICYmIGRhdGEuZXJyb3IuaHR0cFN0YXR1cyAmJiBkYXRhLmVycm9yLmh0dHBTdGF0dXM+OTkpXG5cdFx0XHRcdFx0XHRyZXMuc3RhdHVzQ29kZSA9IGRhdGEuZXJyb3IuaHR0cFN0YXR1c1xuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdHJlcy5zdGF0dXNDb2RlPWRhdGEuaHR0cFN0YXR1cyA/PyAyMDBcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRpZihkYXRhLnJhd1Jlc3BvbnNlKXtcblx0XHRcdFx0XHRcdHJlcy5zZW5kKGRhdGEuZGF0YSlcblx0XHRcdFx0XHRcdGlmKGxvZylcblx0XHRcdFx0XHRcdFx0bG9nLnJlc3BvbnNlID0gdGhpcy5jaGVja0RhdGFMZW5ndGgoZGF0YSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZXtcblx0XHRcdFx0XHRcdHJlcy5zZW5kKGRhdGEpO1xuXHRcdFx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdFx0XHRsb2cucmVzcG9uc2UgPSB0aGlzLmNoZWNrRGF0YUxlbmd0aChkYXRhKVxuXG5cdFx0XHRcdFx0XHRpZihkYXRhLmVycm9yICYmIHRoaXMubW9uaXRvcil7XG5cdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlQVBJRXJyb3IoZGF0YS5lbmRwb2ludClcblx0XHRcdFx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdFx0XHRcdGxvZy5lcnJvciA9IGRhdGEuZXJyb3IubWVzc2FnZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1jYXRjaChlKXtcblx0XHRcdFx0aWYodGhpcy5vcHRpb25zLm9uRXJyb3IpXG5cdFx0XHRcdFx0dGhpcy5vcHRpb25zLm9uRXJyb3IoXCJDYW4ndCBzZW5kIHJlc3BvbnNlXCIsZSk7XG5cdFx0XHRcdGlmKGxvZylcblx0XHRcdFx0XHRsb2cuZXJyb3I9XCJDYW4ndCBzZW5kIHJlc3BvbnNlXCJcblx0XHRcdFx0aWYodGhpcy5tb25pdG9yKVxuXHRcdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlRXJyb3IoZGF0YS5lbmRwb2ludCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gc2hvdyBsb2dcblx0XHRpZihsb2cgJiYgbG9nLmVycm9yICYmIHRoaXMub3B0aW9ucy5vbkVycm9yKXtcblx0XHRcdHRoaXMub3B0aW9ucy5vbkVycm9yKGxvZy5lcnJvcilcblx0XHR9ZWxzZXtcblx0XHRcdGlmKHRoaXMub3B0aW9ucy5vbk5ldHdvcmtMb2cgJiYgbG9nKVxuXHRcdFx0XHR0aGlzLm9wdGlvbnMub25OZXR3b3JrTG9nKGxvZylcblx0XHR9XG4gICAgfVxuXG5cblx0Y2hlY2tEYXRhTGVuZ3RoKGRhdGE6YW55LHJlc3VsdD86YW55LGx2bD86bnVtYmVyKTphbnl7XG5cdFx0XG5cdFx0aWYoIWx2bClcblx0XHRcdGx2bD0wO1xuXG5cdFx0aWYodHlwZW9mIGRhdGEgIT09IFwib2JqZWN0XCIpe1xuXHRcdFx0aWYodHlwZW9mIGRhdGE9PT1cInN0cmluZ1wiICYmIGRhdGEubGVuZ3RoPjEwMjQpXG5cdFx0XHRcdHJldHVybiBkYXRhLnN1YnN0cmluZygwLDEwMDApK1wiLi4uICh0b3RhbDpcIiArIGRhdGEubGVuZ3RoICsgXCIpXCJcblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH1cblxuXHRcdGlmKHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiKXtcblx0XHRcdGlmKCFyZXN1bHQpXG5cdFx0XHRcdHJlc3VsdD17fTtcblx0XHRcdGxldCBhcnJjbnQgPSAxMDA7XG5cdFx0XHRmb3IobGV0IGkgaW4gZGF0YSl7XG5cdFx0XHRcdHJlc3VsdFtpXT10aGlzLmNoZWNrRGF0YUxlbmd0aChkYXRhW2ldLHJlc3VsdFtpXSxsdmwrMSk7XG5cdFx0XHRcdGFycmNudC0tO1xuXHRcdFx0XHRpZihhcnJjbnQ8PTApe1xuXHRcdFx0XHRcdHJlc3VsdFtcIi4uLlwiXT1cIi4uLiB0b3RhbDogXCIrQXJyYXkuaXNBcnJheShkYXRhKT9kYXRhLmxlbmd0aDpPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGg7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdCA/PyBudWxsO1xuXHR9XG5cbn1cbiJdfQ==
|
513
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQVBJU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGlTZXJ2ZXIvQVBJU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUF3RDtBQUN4RCwrQ0FBeUQ7QUFDekQsZ0RBQXVCO0FBRXZCLGlEQUE0RDtBQUM1RCw0RUFBc0U7QUFFdEUsbURBQWtDO0FBQ2xDLDZDQUF5RDtBQUN6RCwrQ0FBMkM7QUFDM0MsZ0RBQXVCO0FBQ3ZCLG9EQUE0QjtBQUM1Qiw0Q0FBbUI7QUFDbkIsNEVBQTJDO0FBQzNDLDRDQUFtQjtBQUNuQixnREFBNEM7QUFDNUMsa0RBQThDO0FBQzlDLGdEQUF1QjtBQUN2QixpREFBNkM7QUFFN0MsK0NBQTJDO0FBQzNDLGdGQUE0RTtBQW1DNUUsU0FBZ0IsaUJBQWlCO0lBQ2hDLE9BQU87UUFDTixJQUFJLEVBQUUsSUFBSTtRQUNWLFlBQVksRUFBRSxPQUFPO1FBQ3JCLGlCQUFpQixFQUFFO1lBQ2xCLHVCQUF1QjtTQUN2QjtRQUNELFNBQVMsRUFBRSxFQUFFO1FBQ2IsU0FBUyxFQUFDLE1BQU07UUFDaEIsWUFBWSxFQUFFLFVBQVUsR0FBNkI7WUFDcEQsSUFBQSxvQkFBTyxFQUFDLGtCQUFrQixFQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2hDLENBQUM7UUFDRCxPQUFPLEVBQUMsVUFBUyxHQUFPO1lBQ3ZCLElBQUEscUJBQVEsRUFBQyxrQkFBa0IsRUFBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsdUJBQXVCLEVBQUMsS0FBSztRQUM3QixTQUFTLEVBQUMsRUFBRSxHQUFDLElBQUksR0FBQyxJQUFJO1FBQ3RCLFdBQVcsRUFBQyxjQUFJLENBQUMsT0FBTyxDQUFDLFlBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBQyxhQUFhLENBQUM7S0FDbkQsQ0FBQTtBQUNGLENBQUM7QUFuQkQsOENBbUJDO0FBRVksUUFBQSxrQkFB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QWEsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQTtZQUNoRSxPQUFPLElBQUksQ0FBQztTQUNaO1FBRUQsSUFBRyxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUM7WUFDM0IsSUFBRyxDQUFDLE1BQU07Z0JBQ1QsTUFBTSxHQUFDLEVBQUUsQ0FBQztZQUNYLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUNqQixLQUFJLElBQUksQ0FBQyxJQUFJLElBQUksRUFBQztnQkFDakIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hELE1BQU0sRUFBRSxDQUFDO2dCQUNULElBQUcsTUFBTSxJQUFFLENBQUMsRUFBQztvQkFDWixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUMsYUFBYSxHQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQyxNQUFNLENBQUEsQ0FBQyxDQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO29CQUNyRixNQUFNO2lCQUNOO2FBQ0Q7U0FDRDtRQUNELE9BQU8sTUFBTSxJQUFJLElBQUksQ0FBQztJQUN2QixDQUFDOztBQWhoQkYsZ0NBa2hCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBleHByZXNzLCB7IEFwcGxpY2F0aW9uLCBSZXNwb25zZSB9IGZyb20gJ2V4cHJlc3MnXG5pbXBvcnQgeyBCYXNlU2VydmljZSwgSUJhc2VTZXJ2aWNlIH0gZnJvbSAnLi9CYXNlU2VydmljZSdcbmltcG9ydCBjb3JzIGZyb20gJ2NvcnMnXG5pbXBvcnQgeyBJbmNvbWluZ01lc3NhZ2UgfSBmcm9tICdodHRwJ1xuaW1wb3J0IHsgQmFzZUVuZHBvaW50LCBJQmFzZUVuZHBvaW50IH0gZnJvbSAnLi9CYXNlRW5kcG9pbnQnXG5pbXBvcnQgRGVmYXVsdEVycm9ycywgeyBFcnJvclV0aWxzIH0gZnJvbSAnLi9zdHJ1Y3R1cmVzL0RlZmF1bHRFcnJvcnMnXG5pbXBvcnQgeyBIVFRQUmVxdWVzdFZPLCBJRXJyb3IsIFRyYW5zZmVyUGFja2V0Vk8gfSBmcm9tICcuL3N0cnVjdHVyZXMvSW50ZXJmYWNlcydcbmltcG9ydCB7UmVxfSBmcm9tIFwiYmFkbWZjay1zaWduYWxcIlxuaW1wb3J0IHsgbG9nQ3JpdCwgbG9nRXJyb3IsIGxvZ0luZm8gfSBmcm9tICcuL0xvZ1NlcnZpY2UnXG5pbXBvcnQgeyBNb25pdG9yIH0gZnJvbSAnLi9tb25pdG9yL01vbml0b3InXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5pbXBvcnQgY3J5cHRvIGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIlxuaW1wb3J0IGZpbGVVcGxvYWQgZnJvbSAnZXhwcmVzcy1maWxldXBsb2FkJ1xuaW1wb3J0IG9zIGZyb20gXCJvc1wiXG5pbXBvcnQgeyBMaXZlbmVzcyB9IGZyb20gJy4vcm91dGVzL0xpdmVuZXNzJ1xuaW1wb3J0IHsgUmVhZGluZXNzIH0gZnJvbSAnLi9yb3V0ZXMvUmVhZGluZXNzJ1xuaW1wb3J0IGh0dHAgZnJvbSAnaHR0cCdcbmltcG9ydCB7IGlzTXlzcWxFcnJvciB9IGZyb20gJy4vTXlzcWxTZXJ2aWNlJ1xuaW1wb3J0IHsgTXlzcWxFcnJvciB9IGZyb20gJ215c3FsJ1xuaW1wb3J0IHsgU3RhdFNlcnZpY2UgfSBmcm9tICcuL1N0YXRTZXJ2aWNlJ1xuaW1wb3J0IHsgRXh0ZXJuYWxTZXJ2aWNlRW5kcG9pbnQgfSBmcm9tICcuL2V4dGVybmFsL0V4dGVybmFsU2VydmljZUVuZHBvaW50J1xuXG5cblxuZXhwb3J0IGludGVyZmFjZSBBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW17XHRcblx0aWQ6bnVtYmVyLFxuXHRjcmVhdGVkOm51bWJlcixcblx0dGltZTpudW1iZXIsXG5cdHJlZmVyZXI/OnN0cmluZyxcblx0cmVxdWVzdDp7W2tleTpzdHJpbmddOmFueX0sXG5cdHJlc3BvbnNlOntba2V5OnN0cmluZ106YW55fVxuXHRlcnJvcj86c3RyaW5nfG51bGxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBUElTZXJ2aWNlT3B0aW9uc3tcblx0cG9ydDpudW1iZXIsXG5cdGJhc2VFbmRQb2ludDpzdHJpbmcgLy8gXCIvYXBpL1wiXG5cdGNvcnNIb3N0V2hpdGVMaXN0OnN0cmluZ1tdLFxuXHRlbmRwb2ludHM6SUJhc2VFbmRwb2ludFtdLFxuXHRqc29uTGltaXQ6c3RyaW5nIC8vIFwiMTBtYlwiXG5cdG9uTmV0d29ya0xvZz86KChsb2c6QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtKT0+dm9pZCl8bnVsbFxuXHRvbkVycm9yPzooKC4uLnJlc3Q6YW55W10pPT52b2lkKXxudWxsXG5cdGlzUHJvZHVjdGlvbkVudmlyb25tZW50OmJvb2xlYW4sXG5cdGludGVyY2VwdG9yPzpJQmFzZUVuZHBvaW50LFxuXHRwb3N0cHJvZHVjZXI/OihyZXE6SFRUUFJlcXVlc3RWT3x1bmRlZmluZWR8bnVsbCxyZXM6UmVzcG9uc2UsZGF0YTpUcmFuc2ZlclBhY2tldFZPPGFueT4scmVxdWVzdFRpbWU6bnVtYmVyLGVuZHBvaW50PzpzdHJpbmcsbG9nPzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW18bnVsbCk9PlByb21pc2U8VHJhbnNmZXJQYWNrZXRWTz5cblx0cHJlcHJvZHVjZXI/OihyZXE6SFRUUFJlcXVlc3RWT3x1bmRlZmluZWR8bnVsbCk9PmFueVxuXHRcblx0bW9uaXRvcj86e2xvZ2luOnN0cmluZyxwYXNzd29yZDpzdHJpbmd9W11cblx0Ly9kZXBsb3ltZW50Pzp7bG9naW46c3RyaW5nLHBhc3N3b3JkOnN0cmluZ31cblx0YXBwVmVyc2lvbj86c3RyaW5nXG5cblx0ZmlsZVRlbXBEaXI6c3RyaW5nO1xuXHRmaWxlTGltaXQ6bnVtYmVyIC8vIGJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRPcHRpb25zKCk6QVBJU2VydmljZU9wdGlvbnN7XG5cdHJldHVybiB7XG5cdFx0cG9ydDogODA5MSxcblx0XHRiYXNlRW5kUG9pbnQ6ICcvYXBpLycsXG5cdFx0Y29yc0hvc3RXaGl0ZUxpc3Q6IFtcblx0XHRcdCdodHRwOi8vbG9jYWxob3N0OjMwMDAnLFxuXHRcdF0sXG5cdFx0ZW5kcG9pbnRzOiBbXSxcblx0XHRqc29uTGltaXQ6XCIxMG1iXCIsXG5cdFx0b25OZXR3b3JrTG9nOiBmdW5jdGlvbiAobG9nOiBBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW0pOiB2b2lkIHtcblx0XHRcdGxvZ0luZm8oXCIke0FQSVNlcnZpY2UuanN9XCIsbG9nKVxuXHRcdH0sXG5cdFx0b25FcnJvcjpmdW5jdGlvbihlcnI6YW55KXtcblx0XHRcdGxvZ0Vycm9yKFwiJHtBUElTZXJ2aWNlLmpzfVwiLGVycik7XG5cdFx0fSxcblx0XHRpc1Byb2R1Y3Rpb25FbnZpcm9ubWVudDpmYWxzZSxcblx0XHRmaWxlTGltaXQ6NTAqMTAyNCoxMDI0LFxuXHRcdGZpbGVUZW1wRGlyOnBhdGgucmVzb2x2ZShvcy50bXBkaXIoKSxcImZpbGVUZW1wRGlyXCIpXG5cdH1cbn1cblxuZXhwb3J0IGNvbnN0IFJFUV9DUkVBVEVfTkVUX0xPRzpSZXE8dm9pZCxBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW0+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfQ1JFQVRFX05FVF9MT0dcIik7XG5leHBvcnQgY29uc3QgUkVRX0hUVFBfTE9HOlJlcTx2b2lkLEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbVtdPiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0hUVFBfTE9HXCIpO1xuZXhwb3J0IGNvbnN0IFJFUV9IVFRQX1JFUVVFU1RTX0NPVU5UOlJlcTx2b2lkLG51bWJlcj4gPSBuZXcgUmVxKHVuZGVmaW5lZCxcIlJFUV9IVFRQX1JFUVVFU1RTX0NPVU5UXCIpO1xuZXhwb3J0IGNvbnN0IFJFUV9IVFRQX1NFUlZFUjpSZXE8dm9pZCx7ZXhwcmVzczpBcHBsaWNhdGlvbixodHRwOmh0dHAuU2VydmVyfT4gPSBuZXcgUmVxKHVuZGVmaW5lZCxcIlJFUV9IVFRQX1NFUlZFUlwiKTtcbmV4cG9ydCBjb25zdCBSRVFfSU5URVJOQUxfQ0FMTDpSZXE8SFRUUFJlcXVlc3RWTyxJRXJyb3J8YW55PiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0lOVEVSTkFMX0NBTExcIik7XG5leHBvcnQgY29uc3QgUkVRX01PTklUT1JfVVNFUlM6UmVxPHthdXRob3JpemF0aW9uOnN0cmluZ30sYW55PiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX01PTklUT1JfVVNFUlNcIik7XG5cbmNvbnN0IGFjdGl2ZVNlcnZpY2VzOlN0cmluZ1tdPVtdXG5jb25zdCBlbnRyeVBvaW50czpTdHJpbmdbXT1bXVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gSW5pdGlhbGl6ZXIoc2VydmljZXM6SUJhc2VTZXJ2aWNlW10pe1xuXHQvLyBhZGQgc3RhdCBzZXJ2aWNlXG5cdHNlcnZpY2VzLnB1c2gobmV3IFN0YXRTZXJ2aWNlKCkpO1xuXHRcbiAgICBmb3IgKGxldCBpIG9mIHNlcnZpY2VzKSB7IGF3YWl0IGkuaW5pdCgpO2FjdGl2ZVNlcnZpY2VzLnB1c2goaS5nZXROYW1lKCkpIH1cbiAgICBmb3IgKGxldCBpIG9mIHNlcnZpY2VzKSB7IGkuYXBwbGljYXRpb25SZWFkeSgpIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFQSVNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZSB7XG5cblx0Ly8gTkVUIExPR1xuXHRwcml2YXRlIHN0YXRpYyBuZXh0TG9nSUQ9MDtcblx0cHJpdmF0ZSB2ZXJzaW9uID0gXCIyLjYuOVwiXG5cdHByaXZhdGUgb3B0aW9uczpBUElTZXJ2aWNlT3B0aW9ucztcblx0cHJpdmF0ZSBtb25pdG9yPzpNb25pdG9yXG5cdHByaXZhdGUgbW9uaXRvckluZGV4RmlsZT86QnVmZmVyXG5cdHByaXZhdGUgc3RhcnRlZDpEYXRlID0gbmV3IERhdGUoKTtcblx0cHJpdmF0ZSByZXF1ZXN0c0NvdW50PTA7XG5cdHByaXZhdGUgc2VydmVyPWh0dHBcblxuXHRuZXRMb2c6QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtW109W107XG5cblx0Y29uc3RydWN0b3Iob3B0aW9ucz86QVBJU2VydmljZU9wdGlvbnN8bnVsbCkge1xuXHRcdHN1cGVyKCdIVFRQIFNlcnZpY2UnKVxuXHRcdHRoaXMub3B0aW9ucz1vcHRpb25zID8/IGdldERlZmF1bHRPcHRpb25zKCk7XG5cdFx0aWYoIXRoaXMub3B0aW9ucy5jb3JzSG9zdFdoaXRlTGlzdClcblx0XHRcdHRoaXMub3B0aW9ucy5jb3JzSG9zdFdoaXRlTGlzdD1bXTtcblx0XHRjb25zdCBzZWxmID0gXCJodHRwOi8vbG9jYWxob3N0OlwiK3RoaXMub3B0aW9ucy5wb3J0O1xuXHRcdGlmKCF0aGlzLm9wdGlvbnMuY29yc0hvc3RXaGl0ZUxpc3QuZmluZCh2YWw9PnZhbD09PXNlbGYpKVxuXHRcdFx0dGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0LnB1c2goKVxuXG5cdFx0aWYodGhpcy5vcHRpb25zLm1vbml0b3IgJiYgdGhpcy5vcHRpb25zLm1vbml0b3IubGVuZ3RoPjApe1xuXHRcdFx0dGhpcy5tb25pdG9yPW5ldyBNb25pdG9yKCk7XG5cdFx0XHR0aGlzLm9wdGlvbnMuZW5kcG9pbnRzLnB1c2godGhpcy5tb25pdG9yKVxuXHRcdFx0Y29uc29sZS53YXJuKFwiU2VydmljZSBNb25pdG9yIGluaXRpYWxpemVkXCIpXG5cdFx0XHRjb25zb2xlLndhcm4oXCJtb25pdG9yIGxpbmtzOlwiKVxuXHRcdFx0Zm9yKGxldCBpIG9mIHRoaXMub3B0aW9ucy5tb25pdG9yKXtcblx0XHRcdFx0Y29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShpLmxvZ2luK2kucGFzc3dvcmQpLmRpZ2VzdCgpLnRvU3RyaW5nKFwiaGV4XCIpXG5cdFx0XHRcdGNvbnNvbGUud2FybihcIk1vbml0b3IgbGluayBmb3I6IFwiK2kubG9naW4rXCIgLT4gL3NtLVwiK2hhc2gpXHRcdFx0XHRcdFx0XG5cdFx0XHR9XG5cblx0XHRcdFJFUV9NT05JVE9SX1VTRVJTLmxpc3RlbmVyID0gYXN5bmMgKHJlcSk9Pntcblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gW11cblx0XHRcdFx0aWYodGhpcy5vcHRpb25zLm1vbml0b3Ipe1xuXHRcdFx0XHRcdGZvcihsZXQgaSBvZiB0aGlzLm9wdGlvbnMubW9uaXRvcil7XG5cdFx0XHRcdFx0XHRjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKGkubG9naW4raS5wYXNzd29yZCkuZGlnZXN0KCkudG9TdHJpbmcoXCJoZXhcIik7XG5cdFx0XHRcdFx0XHRyZXN1bHQucHVzaChoYXNoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBhdHRhY2ggZW5kcG9pbnRzIGZvciBleHRlcm5hbCBjYWxsc1xuXHRcdHRoaXMub3B0aW9ucy5lbmRwb2ludHMucHVzaChuZXcgRXh0ZXJuYWxTZXJ2aWNlRW5kcG9pbnQoKSk7XG5cblx0XHQvLyBjcmVhdGUgbGl2ZW5lc3MsIHJlYWRpbmVzc1xuXHRcdHRoaXMub3B0aW9ucy5lbmRwb2ludHMucHVzaChuZXcgTGl2ZW5lc3ModGhpcy5zdGFydGVkKSxuZXcgUmVhZGluZXNzKHRoaXMuc3RhcnRlZCkpXG5cdFx0UkVRX0hUVFBfUkVRVUVTVFNfQ09VTlQubGlzdGVuZXIgPSBhc3luYyAoKSA9PiB0aGlzLnJlcXVlc3RzQ291bnQ7XG5cdH1cblxuXG5cdG92ZXJyaWRlIGFzeW5jIGluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG5cblx0XHRSRVFfSFRUUF9MT0cubGlzdGVuZXI9YXN5bmMgaWdub3JlPT50aGlzLm5ldExvZztcblx0XHRSRVFfQ1JFQVRFX05FVF9MT0cubGlzdGVuZXIgPSBhc3luYyBpZ25vcmU9Pntcblx0XHRcdGNvbnN0IGxvZzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW0gPSB7XG5cdFx0XHRcdGNyZWF0ZWQ6ICtuZXcgRGF0ZSgpLFxuXHRcdFx0XHR0aW1lOiAwLFxuXHRcdFx0XHRyZXF1ZXN0OiB7fSxcblx0XHRcdFx0cmVzcG9uc2U6IHt9LFxuXHRcdFx0XHRlcnJvcjpudWxsLFxuXHRcdFx0XHRpZDogQVBJU2VydmljZS5uZXh0TG9nSUQrK1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5uZXRMb2cucHVzaChsb2cpXG5cdFx0XHRpZih0aGlzLm5ldExvZy5sZW5ndGg+MTAwMClcblx0XHRcdFx0dGhpcy5uZXRMb2cuc2hpZnQoKVxuXHRcdFx0cmV0dXJuIGxvZztcblx0XHR9XG5cblx0XHQvLyBpbnRlcm5hbCBjYWxsXG5cdFx0UkVRX0lOVEVSTkFMX0NBTEwubGlzdGVuZXIgPSBhc3luYyAocmVxKT0+e1xuXHRcdFx0Zm9yKGxldCBpIG9mIHRoaXMub3B0aW9ucy5lbmRwb2ludHMpe1xuXHRcdFx0XHRpZighaSB8fCAhaS5lbmRwb2ludHMpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdGZvcihsZXQgaiBvZiBpLmVuZHBvaW50cyl7XG5cdFx0XHRcdFx0bGV0IGVwID0gQmFzZUVuZHBvaW50LmdldEVudHJ5UG9pbnQoKStqLmVuZHBvaW50O1xuXHRcdFx0XHRcdGVwID0gZXAucmVwbGFjZUFsbChcIi8vXCIsXCIvXCIpXG5cdFx0XHRcdFx0aWYoZXAgPT09IHJlcS5lbmRwb2ludCl7XG5cdFx0XHRcdFx0XHRyZXEuaW50ZXJuYWxDYWxsPXRydWU7XG5cdFx0XHRcdFx0XHRjb25zdCByZXNwb25zZSA9IGF3YWl0IGkuZXhlY3V0ZShyZXEpXG5cdFx0XHRcdFx0XHRpZihyZXNwb25zZS5lcnJvcilcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlLmVycm9yO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlLmRhdGE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge2Vycm9yOkRlZmF1bHRFcnJvcnMuVU5LTk9XTl9SRVFVRVNULGRhdGE6bnVsbCxodHRwU3RhdHVzOjQwNH1cblx0XHR9XG5cblx0XHQvLyBpbml0aWFsaXplIGV4cHJlc3Ncblx0XHRjb25zdCBhcHAgPSBleHByZXNzKClcblx0XHRjb25zdCBzZXJ2ZXIgPSBodHRwLmNyZWF0ZVNlcnZlcihhcHApO1xuXG5cdFx0UkVRX0hUVFBfU0VSVkVSLmxpc3RlbmVyID0gYXN5bmMgaWdub3JlPT57cmV0dXJuIHtleHByZXNzOmFwcCxodHRwOnNlcnZlcn19O1xuXG5cdFx0aWYodGhpcy5vcHRpb25zLmlzUHJvZHVjdGlvbkVudmlyb25tZW50KVxuXHRcdFx0YXBwLnNldChcImVudlwiLCdwcm9kdWN0aW9uJyk7XG5cblx0XHRhcHAudXNlKGV4cHJlc3MuanNvbih7IGxpbWl0OiAnMTBtYicgfSkpIC8vIGZvciBwYXJzaW5nIGFwcGxpY2F0aW9uL2pzb25cblx0XHRhcHAudXNlKGV4cHJlc3MudXJsZW5jb2RlZCh7IGxpbWl0OiAnMTBtYicsIGV4dGVuZGVkOiB0cnVlIH0pKSAvLyBmb3IgcGFyc2luZyBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcblxuXHRcdGFwcC51c2UoZmlsZVVwbG9hZCh7XG5cdFx0XHRsaW1pdEhhbmRsZXI6IChyZXEsIHJlcywgbmV4dCk9Pntcblx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHtcblx0XHRcdFx0XHRlcnJvcjpEZWZhdWx0RXJyb3JzLkZJTEVfVE9PX0xBUkdFLFxuXHRcdFx0XHRcdGRhdGE6bnVsbCxcblx0XHRcdFx0XHRodHRwU3RhdHVzOjQxMyxcblx0XHRcdFx0fSwrbmV3IERhdGUoKSxyZXEucGF0aCk7XG5cdFx0XHR9LFxuXHRcdFx0bGltaXRzOiB7IGZpbGVTaXplOiB0aGlzLm9wdGlvbnMuZmlsZUxpbWl0IH0sXG5cdFx0XHR1c2VUZW1wRmlsZXM6IHRydWUsXG5cdFx0XHR1cmlEZWNvZGVGaWxlTmFtZXM6IHRydWUsXG5cdFx0XHR0ZW1wRmlsZURpcjogdGhpcy5vcHRpb25zLmZpbGVUZW1wRGlyLFxuXHRcdFx0Ly9zYWZlRmlsZU5hbWVzOiB0cnVlLFxuXHRcdFx0YWJvcnRPbkxpbWl0OnRydWVcblx0XHR9KSlcblxuXHRcdGFwcC51c2UoYXN5bmMgKGVycjphbnkscmVxOmFueSxyZXNwOmFueSxuZXh0OmFueSk9Pntcblx0XHRcdFxuXHRcdFx0aWYoIWVycil7XG5cdFx0XHRcdG5leHQoKTtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cdFx0XHRcdC8vcmVxdWVzdCBzdGFydCB0aW1lXG5cdFx0XHRjb25zdCB0bWUgPSArbmV3IERhdGUoKTtcblx0XHRcdGNvbnN0IGxvZyA9IGF3YWl0IFJFUV9DUkVBVEVfTkVUX0xPRy5yZXF1ZXN0KCk7XG5cdFx0XHRsb2cucmVxdWVzdD17XG5cdFx0XHRcdG1ldGhvZDpyZXEubWV0aG9kLFxuXHRcdFx0XHRkYXRhOlwiXCIsXG5cdFx0XHRcdHBhcmFtczpyZXEucGFyYW1zXG5cdFx0XHR9XG5cblx0XHRcdGxldCByZXNwb25zZUVycm9yPURlZmF1bHRFcnJvcnMuVU5LTk9XTl9SRVFVRVNUO1xuXHRcdFx0aWYgKHR5cGVvZiBlcnIgPT09IFwib2JqZWN0XCIgJiYgZXJyLnN0YXR1cyA9PT0gNDAwICYmICdib2R5JyBpbiBlcnIgJiYgZXJyLnR5cGUgPT09ICdlbnRpdHkucGFyc2UuZmFpbGVkJykge1xuXHRcdFx0XHRyZXNwb25zZUVycm9yID0gRGVmYXVsdEVycm9ycy5KU09OX01BTEZPUk1FRFxuXHRcdFx0fVxuICAgICAgXG5cblx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlc3Ase1xuXHRcdFx0XHRlcnJvcjpyZXNwb25zZUVycm9yLFxuXHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdGh0dHBTdGF0dXM6NDAwXG5cdFx0XHR9LHRtZSxcIlwiLGxvZylcblxuXHRcdH0pXG5cblx0XHRjb25zdCBjb3JzT3B0aW9ucyA9IHtcblx0XHRcdG9yaWdpbjogKG9yaWdpbjogYW55LCBjYWxsYmFjazogYW55KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9yaWdpbklzV2hpdGVsaXN0ZWQgPSB0aGlzLm9wdGlvbnMuY29yc0hvc3RXaGl0ZUxpc3QuaW5jbHVkZXMob3JpZ2luKVxuXHRcdFx0XHRjYWxsYmFjayhudWxsLCBvcmlnaW5Jc1doaXRlbGlzdGVkKVxuXHRcdFx0fSxcblx0XHRcdGNyZWRlbnRpYWxzOiB0cnVlXG5cdFx0fVxuXHRcdGFwcC51c2UoY29ycyhjb3JzT3B0aW9ucykpXG5cblx0XHQvLyByZWdpc3RyYXRlIGVuZHBvaW50c1xuXHRcdEJhc2VFbmRwb2ludC5zZXRFbnRyeVBvaW50KHRoaXMub3B0aW9ucy5iYXNlRW5kUG9pbnQpXG5cdFx0XG5cdFx0Zm9yKGxldCBpIG9mIHRoaXMub3B0aW9ucy5lbmRwb2ludHMpe1xuXHRcdFx0YXdhaXQgaS5pbml0KCk7XG5cdFx0XHRpZighaS5lbmRwb2ludHMpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0Zm9yKGxldCBqIG9mIGkuZW5kcG9pbnRzKXtcblx0XHRcdFx0bGV0IGVwID0gQmFzZUVuZHBvaW50LmdldEVudHJ5UG9pbnQoKStqLmVuZHBvaW50O1xuXHRcdFx0XHRlcCA9IGVwLnJlcGxhY2VBbGwoXCIvL1wiLFwiL1wiKVxuXHRcdFx0XHRcblxuXHRcdFx0XHQvLyBpbmNvbWluZyByZXF1ZXN0XG5cdFx0XHRcdGFwcC5hbGwoZXAsYXN5bmMgKHJlcSxyZXMpPT57XG5cdFx0XHRcdFx0dGhpcy5yZXF1ZXN0c0NvdW50Kys7XG5cdFx0XHRcdFx0Y29uc3QgdG1lID0gK25ldyBEYXRlKCk7XG5cdFx0XHRcdFx0bGV0IGxvZzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW18bnVsbCA9IG51bGw7XG5cdFx0XHRcdFx0aWYoIWkuaWdub3JlSHR0cExvZ2dpbmcpe1xuXHRcdFx0XHRcdFx0bG9nID0gYXdhaXQgUkVRX0NSRUFURV9ORVRfTE9HLnJlcXVlc3QoKTtcblx0XHRcdFx0XHRcdGxvZy5yZXF1ZXN0PXtcblx0XHRcdFx0XHRcdFx0dXJsOnJlcS51cmwsXG5cdFx0XHRcdFx0XHRcdG1ldGhvZDpyZXEubWV0aG9kLFxuXHRcdFx0XHRcdFx0XHRkYXRhOnRoaXMuY2hlY2tEYXRhTGVuZ3RoKHJlcS5ib2R5KSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOnRoaXMuY2hlY2tEYXRhTGVuZ3RoKHJlcS5wYXJhbXMpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgZXhlY3V0ZSA9IGFzeW5jICgpPT57XG5cblx0XHRcdFx0XHRcdGNvbnN0IGJvZHkgPSByZXEuYm9keTtcblx0XHRcdFx0XHRcdGlmKHJlcS5xdWVyeSAmJiB0eXBlb2YgcmVxLnF1ZXJ5ID09PSBcIm9iamVjdFwiKXtcblx0XHRcdFx0XHRcdFx0Zm9yKGxldCBpIGluIHJlcS5xdWVyeSl7XG5cdFx0XHRcdFx0XHRcdFx0Ym9keVtpXT1yZXEucXVlcnlbaV07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgaHR0cFJlcXVlc3Q6SFRUUFJlcXVlc3RWTyA9IHtcblx0XHRcdFx0XHRcdFx0cmF3OnJlcSBhcyBJbmNvbWluZ01lc3NhZ2UsXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlOnJlcyxcblx0XHRcdFx0XHRcdFx0bWV0aG9kOnJlcS5tZXRob2QsXG5cdFx0XHRcdFx0XHRcdGRhdGE6cmVxLmJvZHksXG5cdFx0XHRcdFx0XHRcdHBhcmFtczpyZXEucGFyYW1zLFxuXHRcdFx0XHRcdFx0XHRoZWFkZXJzOnJlcS5oZWFkZXJzIGFzIGFueSxcblx0XHRcdFx0XHRcdFx0ZW5kcG9pbnQ6ZXAsXG5cdFx0XHRcdFx0XHRcdGZpbGVzOnJlcS5maWxlcyA/PyBudWxsLFxuXHRcdFx0XHRcdFx0XHRyZWZlcmVyOnJlcS5nZXQoXCJSZWZlcmVyXCIpLFxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZih0aGlzLm9wdGlvbnMucHJlcHJvZHVjZXIpe1xuXHRcdFx0XHRcdFx0XHR0cnl7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByZXByb2R1Y2VyUmVzdWx0ID0gYXdhaXQgdGhpcy5vcHRpb25zLnByZXByb2R1Y2VyKGh0dHBSZXF1ZXN0KTtcblx0XHRcdFx0XHRcdFx0aWYocHJlcHJvZHVjZXJSZXN1bHQpXG5cdFx0XHRcdFx0XHRcdFx0aHR0cFJlcXVlc3QucHJlcHJvZHVjZXJSZXN1bHQgPSBwcmVwcm9kdWNlclJlc3VsdDtcblx0XHRcdFx0XHRcdFx0fWNhdGNoKGUpe1xuXHRcdFx0XHRcdFx0XHRcdGxldCBkZXRhaWxzPWAke2V9YFxuXHRcdFx0XHRcdFx0XHRcdGxldCBzdGFjazpJRXJyb3JbXXx1bmRlZmluZWQ9dW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdGlmKEVycm9yVXRpbHMuaXNFcnJvcihlKSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRkZXRhaWxzPShlIGFzIGFueSkubWVzc2FnZVxuXHRcdFx0XHRcdFx0XHRcdFx0c3RhY2sgPSBbZSBhcyBhbnldO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmKGlzTXlzcWxFcnJvcihlKSlcblx0XHRcdFx0XHRcdFx0XHRcdGRldGFpbHMgPSAoZSBhcyBNeXNxbEVycm9yKS5tZXNzYWdlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHtlcnJvcjp7Y29kZToxMDAwMixtZXNzYWdlOlwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIsc3RhY2s6c3RhY2ssZGV0YWlsczpkZXRhaWxzfSxkYXRhOm51bGwsaHR0cFN0YXR1czo1MDB9LHRtZSxlcCxsb2csaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRsZXQgcmVzdWx0XG5cdFx0XHRcdFx0XHR0cnl7XG5cblx0XHRcdFx0XHRcdFx0bGV0IGlnbm9yZUludGVyY2VwdG9yID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdGxldCBhbGxvd0ludGVyY2VwdG9yRXJyb3IgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0aWYoai5pZ25vcmVJbnRlcmNlcHRvcilcblx0XHRcdFx0XHRcdFx0XHRpZ25vcmVJbnRlcmNlcHRvcj10cnVlO1xuXHRcdFx0XHRcdFx0XHRpZihqLmFsbG93SW50ZXJjZXB0b3JFcnJvcilcblx0XHRcdFx0XHRcdFx0XHRhbGxvd0ludGVyY2VwdG9yRXJyb3I9dHJ1ZTtcblxuXHRcdFx0XHRcdFx0XHRpZih0eXBlb2Ygai5oYW5kbGVyID09PSBcIm9iamVjdFwiICl7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gdHJ5IHRvIGdldCBoYW5kbGVyIHJlbGF5aW5nIG9uIGh0dHAgbWV0aG9kXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgaGFuZGxlciA9IGouaGFuZGxlcltodHRwUmVxdWVzdC5tZXRob2QudG9VcHBlckNhc2UoKV07XG5cdFx0XHRcdFx0XHRcdFx0aWYodHlwZW9mIGhhbmRsZXIgPT09IFwib2JqZWN0XCIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoaGFuZGxlci5pZ25vcmVJbnRlcmNlcHRvcilcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWdub3JlSW50ZXJjZXB0b3I9dHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGhhbmRsZXIuYWxsb3dJbnRlcmNlcHRvckVycm9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhbGxvd0ludGVyY2VwdG9yRXJyb3I9dHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9IFxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gRXhlY3V0ZSBpbnRlcmNlcHRvciBpZiBleGlzdHNcblx0XHRcdFx0XHRcdFx0aWYoIWlnbm9yZUludGVyY2VwdG9yKXtcblx0XHRcdFx0XHRcdFx0XHRsZXQgaW50ZXJjZXB0b3JSZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdFx0aWYodGhpcy5vcHRpb25zLmludGVyY2VwdG9yKXtcblx0XHRcdFx0XHRcdFx0XHRcdGludGVyY2VwdG9yUmVzdWx0PWF3YWl0IHRoaXMub3B0aW9ucy5pbnRlcmNlcHRvci5leGVjdXRlKGh0dHBSZXF1ZXN0KTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGludGVyY2VwdG9yUmVzdWx0LmVycm9yICYmICFhbGxvd0ludGVyY2VwdG9yRXJyb3Ipe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMsaW50ZXJjZXB0b3JSZXN1bHQsdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGh0dHBSZXF1ZXN0LmludGVyY2VwdG9yUmVzdWx0ID0gaW50ZXJjZXB0b3JSZXN1bHRcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyBQcmVjaGVjayBXSFk/XG5cdFx0XHRcdFx0XHRcdGlmKGkgPT09IHRoaXMubW9uaXRvcilcblx0XHRcdFx0XHRcdFx0XHRodHRwUmVxdWVzdC5wcmVjaGVjaz17ZGF0YTp0aGlzLm9wdGlvbnMubW9uaXRvcn1cblxuXHRcdFx0XHRcdFx0XHRjb25zdCBwcmVjaGVjaz1hd2FpdCBpLnByZWNoZWNrKGh0dHBSZXF1ZXN0KVxuXHRcdFx0XHRcdFx0XHRpZihwcmVjaGVjayAmJiBwcmVjaGVjay5lcnJvcil7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHByZWNoZWNrLHRtZSxlcCxsb2csaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGh0dHBSZXF1ZXN0LnByZWNoZWNrPXByZWNoZWNrO1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0Ly8gSWYgaW50ZXJjZXB0b3IgaGFzIG5vIGVycm9ycywgZXhlY3V0ZSBtYWluIGhhbmRsZXJcblx0XHRcdFx0XHRcdFx0cmVzdWx0ID0gYXdhaXQgaS5leGVjdXRlKGh0dHBSZXF1ZXN0KVxuXG5cblx0XHRcdFx0XHRcdFx0IFxuXHRcdFx0XHRcdFx0fWNhdGNoKGUpe1xuXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XG5cdFx0XHRcdFx0XHRcdGlmKHRoaXMub3B0aW9ucy5vbkVycm9yKVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMub3B0aW9ucy5vbkVycm9yKGUpXG5cdFx0XHRcdFx0XHRcdGlmKHRoaXMubW9uaXRvcilcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZUZhdGFsRXJyb3IoZXApO1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0Ly8gY2hlY2sgaWYgZXJyb3IgaXMgSUVycm9yXG5cdFx0XHRcdFx0XHRcdGxldCBkYXRhOlRyYW5zZmVyUGFja2V0Vk8gPSB7XG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6e1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29kZToxMDAwMixcblx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6XCJJbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRcdGh0dHBTdGF0dXM6NTAwLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGV0YWlsczpgJHtlfWBcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZihFcnJvclV0aWxzLmlzRXJyb3IoZSkpXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YSA9IHtlcnJvcjplIGFzIElFcnJvcn1cblxuXHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMsZGF0YSx0bWUsZXAsbG9nLGh0dHBSZXF1ZXN0KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHJlc3VsdCx0bWUsZXAsbG9nLGh0dHBSZXF1ZXN0KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRleGVjdXRlKClcblx0XHRcdFx0fSk7Ly8gaGFuZGxlIGluY29taW5nIHJlcXVlc3RcblxuXHRcdFx0fVxuXHRcdH1cblxuXHRcblxuXHRcdC8vIGZpbmFsIGhhbmRsZXJcblx0XHRhcHAudXNlKChyZXEsIHJlcywgbmV4dCkgPT4ge1xuXHRcdFx0XG5cdFx0XHRjb25zdCB0bWUgPSArbmV3IERhdGUoKVxuXG5cdFx0XHRpZih0aGlzLm1vbml0b3IgJiYgdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5tb25pdG9yKXtcblx0XHRcdFx0Ly9jaGVjayBpZiByZXF1ZXN0aW5nIG1vbml0b3Jcblx0XHRcdFx0aWYocmVxLm1ldGhvZD09PVwiR0VUXCIpe1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGxldCBtb25pdG9yUmVxdWVzdD1mYWxzZTtcblx0XHRcdFx0XHRmb3IobGV0IGkgb2YgdGhpcy5vcHRpb25zLm1vbml0b3Ipe1xuXHRcdFx0XHRcdFx0Y29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShpLmxvZ2luK2kucGFzc3dvcmQpLmRpZ2VzdCgpLnRvU3RyaW5nKFwiaGV4XCIpXG5cdFx0XHRcdFx0XHRpZihyZXEub3JpZ2luYWxVcmwuZW5kc1dpdGgoXCIvc20tXCIraGFzaCkpe1xuXHRcdFx0XHRcdFx0XHRtb25pdG9yUmVxdWVzdD10cnVlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihtb25pdG9yUmVxdWVzdCl7XG5cdFx0XHRcdFx0XHQvLyBzZW5kIGluZGV4IFRodSwgMTYgTm92IDIwMjMgMjM6MzM6MzUgR01UXG5cdFx0XHRcdFx0XHRjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcblx0XHRcdFx0XHRcdHRyeXtcblx0XHRcdFx0XHRcdFx0aWYoIXRoaXMubW9uaXRvckluZGV4RmlsZSlcblx0XHRcdFx0XHRcdFx0dGhpcy5tb25pdG9ySW5kZXhGaWxlID0gZnMucmVhZEZpbGVTeW5jKHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsXCJtb25pdG9yXCIsXCJpbmRleC5odG1sXCIpKTtcblx0XHRcdFx0XHRcdFx0cmVzLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLFwidGV4dC9odG1sXCIpXG5cdFx0XHRcdFx0XHRcdHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LUxlbmd0aFwiLHRoaXMubW9uaXRvckluZGV4RmlsZS5ieXRlTGVuZ3RoKVxuXHRcdFx0XHRcdFx0XHRyZXMuc3RhdHVzKDIwMCkuc2VuZCh0aGlzLm1vbml0b3JJbmRleEZpbGUpO1xuXHRcdFx0XHRcdFx0fWNhdGNoKGUpe1xuXHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMse1xuXHRcdFx0XHRcdFx0XHRcdGVycm9yOntcblx0XHRcdFx0XHRcdFx0XHRcdGNvZGU6MTAwMDIsXG5cdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlOlwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRkZXRhaWxzOmAke2V9YFxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YTpudWxsLFxuXHRcdFx0XHRcdFx0XHRcdGh0dHBTdGF0dXM6NTAwXG5cdFx0XHRcdFx0XHRcdH0sdG1lLHJlcS5wYXRoKTtcdFx0XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdFxuXHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHtcblx0XHRcdFx0ZXJyb3I6RGVmYXVsdEVycm9ycy5VTktOT1dOX1JFUVVFU1QsXG5cdFx0XHRcdGRhdGE6bnVsbCxcblx0XHRcdFx0aHR0cFN0YXR1czo0MDRcblx0XHRcdH0sdG1lLHJlcS5wYXRoKTtcblx0XHR9KVxuXG5cdFx0c2VydmVyLmxpc3Rlbih0aGlzLm9wdGlvbnMucG9ydCwgKCkgPT4ge1xuXHRcdFx0bG9nQ3JpdCgnJHtBUElTZXJ2aWNlLmpzfScsJ0FQSSBTZXJ2aWNlIHN0YXJ0ZWQgYXQ6ICcrdGhpcy5vcHRpb25zLnBvcnQrXCIsIHdpdGggYmFzZSBlbmRwb2ludDpcIit0aGlzLm9wdGlvbnMuYmFzZUVuZFBvaW50K1wiLCB2ZXIuOiBcIit0aGlzLnZlcnNpb24pXG5cdFx0fSlcblxuXHRcdC8qYXBwLmxpc3Rlbih0aGlzLm9wdGlvbnMucG9ydCwgKCkgPT4ge1xuXHRcdFx0bG9nQ3JpdCgnJHtBUElTZXJ2aWNlLmpzfScsJ0FQSSBTZXJ2aWNlIHN0YXJ0ZWQgYXQ6ICcrdGhpcy5vcHRpb25zLnBvcnQrXCIsIHdpdGggYmFzZSBlbmRwb2ludDpcIit0aGlzLm9wdGlvbnMuYmFzZUVuZFBvaW50K1wiLCB2ZXIuOiBcIit0aGlzLnZlcnNpb24pXG5cdFx0fSkqL1xuXHR9XG5cblx0YXN5bmMgc2VuZFJlc3BvbnNlKHJlZjpzdHJpbmcscmVzOlJlc3BvbnNlLGRhdGE6VHJhbnNmZXJQYWNrZXRWTzxhbnk+LHJlcXVlc3RUaW1lOm51bWJlcixlbmRwb2ludD86c3RyaW5nLGxvZz86QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtfG51bGwscmVxPzpIVFRQUmVxdWVzdFZPKXtcblxuXHRcdGlmKGRhdGEuYmxvY2tSZXNwb25zZSl7XG5cdFx0XHRpZihsb2cpXG5cdFx0XHRcdGxvZy5lcnJvciA9IFwiUmVzcG9uc2UgYmxvY2tlZFwiXG5cdFx0XHRpZih0aGlzLm9wdGlvbnMub25OZXR3b3JrTG9nICYmIGxvZylcblx0XHRcdFx0dGhpcy5vcHRpb25zLm9uTmV0d29ya0xvZyhsb2cpXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYocmVxICYmIHJlcS5zdHJlYW0pe1xuXHRcdFx0XG5cdFx0fVxuXG5cdFx0aWYodGhpcy5vcHRpb25zLnBvc3Rwcm9kdWNlcil7XG5cdFx0XHR0cnl7XG5cdFx0XHRcdGRhdGEgPSBhd2FpdCB0aGlzLm9wdGlvbnMucG9zdHByb2R1Y2VyKHJlcSxyZXMsZGF0YSxyZXF1ZXN0VGltZSxlbmRwb2ludCxsb2cpO1xuXHRcdFx0fWNhdGNoKGUpe1xuXHRcdFx0XHRsb2dFcnJvcihcIlBvc3Rwcm9kdWNlciBlcnJvclwiLGUpXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoRXJyb3JVdGlscy5pc0Vycm9yKGRhdGEpKVxuXHRcdFx0ZGF0YSA9IHtlcnJvcjpkYXRhIGFzIElFcnJvcixkYXRhOm51bGx9XG5cdFx0XG4gICAgICAgIGRhdGEucmVzcG9uc2VUaW1lID0gKCtuZXcgRGF0ZSgpKSAtIHJlcXVlc3RUaW1lO1xuICAgICAgICBkYXRhLmNvcmUgPSB0aGlzLnZlcnNpb25cbiAgICAgICAgZGF0YS5lbmRwb2ludCA9IGVuZHBvaW50ID8/IFwibm9fZW5kcG9pbnRcIlxuXHRcdFxuXHRcdGlmKHRoaXMub3B0aW9ucy5hcHBWZXJzaW9uKVxuXHRcdFx0ZGF0YS52ZXJzaW9uPXRoaXMub3B0aW9ucy5hcHBWZXJzaW9uXG5cblx0XHRcblx0XHRpZihsb2cpe1xuXHRcdFx0bG9nLnRpbWUgPSBkYXRhLnJlc3BvbnNlVGltZVxuXHRcdFx0bG9nLnJlZmVyZXI9cmVmO1xuXHRcdH1cblxuXHRcdGlmKHRoaXMubW9uaXRvcilcblx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlUmVzcG9uc2UoZGF0YS5lbmRwb2ludCxkYXRhLnJlc3BvbnNlVGltZSlcblxuICAgICAgICBpZihyZXMuZGVzdHJveWVkIHx8IHJlcy5jbG9zZWQpe1xuXG5cdFx0XHRpZihsb2cpXG5cdFx0XHRcdGxvZy5lcnJvciA9IFwiQ29ubmVjdGlvbiBhbHJlYWR5IGNsb3NlZCwgY2FuJ3Qgc2VuZCByZXNwb25zZSBmb3I6IFwiK2RhdGEuZW5kcG9pbnRcblx0XHRcdGlmKHRoaXMub3B0aW9ucy5vbkVycm9yKVxuICAgICAgICAgICAgXHR0aGlzLm9wdGlvbnMub25FcnJvcihcIkNvbm5lY3Rpb24gYWxyZWFkeSBjbG9zZWQsIGNhbid0IHNlbmQgcmVzcG9uc2U6IFwiK2RhdGEuZW5kcG9pbnQsZGF0YSlcbiAgICAgICAgICAgIFxuXHRcdFx0aWYodGhpcy5tb25pdG9yKVxuXHRcdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZUVycm9yKGRhdGEuZW5kcG9pbnQpO1xuXG4gICAgICAgIH1lbHNle1xuXHRcdFx0dHJ5e1xuXG5cdFx0XHRcdGlmKGRhdGEuZmlsZSl7XG5cblx0XHRcdFx0XHRyZXMuc2VuZEZpbGUoZGF0YS5maWxlLGVycj0+e1xuXHRcdFx0XHRcdFx0aWYoZXJyKXtcblx0XHRcdFx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdFx0XHRcdGxvZy5lcnJvciA9IFwiQ2FuJ3Qgc2VuZCBmaWxlOiBcIitkYXRhLmZpbGVcblx0XHRcdFxuXHRcdFx0XHRcdFx0XHRpZih0aGlzLm1vbml0b3IgJiYgZGF0YS5lbmRwb2ludClcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZUFQSUVycm9yKGRhdGEuZW5kcG9pbnQpO1xuXG5cdFx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlZixyZXMse1xuXHRcdFx0XHRcdFx0XHRcdGVycm9yOkRlZmF1bHRFcnJvcnMuQ0FOVF9TRU5EX0ZJTEUsXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YTpudWxsLFxuXHRcdFx0XHRcdFx0XHRcdGh0dHBTdGF0dXM6NTAwXG5cdFx0XHRcdFx0XHRcdH0scmVxdWVzdFRpbWUsZGF0YS5lbmRwb2ludCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHR9KVxuXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0XHRpZihkYXRhLnJlZGlyZWN0KXtcblx0XHRcdFx0XHRyZXMucmVkaXJlY3QoZGF0YS5yZWRpcmVjdCk7XG5cdFx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdFx0bG9nLnJlc3BvbnNlID0ge3JlZGlyZWN0OmRhdGEucmVkaXJlY3R9XG5cdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdC8vIHNldHVwIGhlYWRlcnNcblx0XHRcdFx0XHRpZihkYXRhLmhlYWRlcnMpe1xuXHRcdFx0XHRcdFx0Zm9yKGxldCBpIGluIGRhdGEuaGVhZGVycylcblx0XHRcdFx0XHRcdFx0cmVzLnNldEhlYWRlcihpLGRhdGEuaGVhZGVyc1tpXSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoZGF0YS5lcnJvciAmJiBkYXRhLmVycm9yLmh0dHBTdGF0dXMgJiYgZGF0YS5lcnJvci5odHRwU3RhdHVzPjk5KVxuXHRcdFx0XHRcdFx0cmVzLnN0YXR1c0NvZGUgPSBkYXRhLmVycm9yLmh0dHBTdGF0dXNcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRyZXMuc3RhdHVzQ29kZT1kYXRhLmh0dHBTdGF0dXMgPz8gMjAwXG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0aWYoZGF0YS5yYXdSZXNwb25zZSl7XG5cdFx0XHRcdFx0XHRyZXMuc2VuZChkYXRhLmRhdGEpXG5cdFx0XHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0XHRcdGxvZy5yZXNwb25zZSA9IHRoaXMuY2hlY2tEYXRhTGVuZ3RoKGRhdGEpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0XHRyZXMuc2VuZChkYXRhKTtcblx0XHRcdFx0XHRcdGlmKGxvZylcblx0XHRcdFx0XHRcdFx0bG9nLnJlc3BvbnNlID0gdGhpcy5jaGVja0RhdGFMZW5ndGgoZGF0YSlcblxuXHRcdFx0XHRcdFx0aWYoZGF0YS5lcnJvciAmJiB0aGlzLm1vbml0b3Ipe1xuXHRcdFx0XHRcdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZUFQSUVycm9yKGRhdGEuZW5kcG9pbnQpXG5cdFx0XHRcdFx0XHRcdGlmKGxvZylcblx0XHRcdFx0XHRcdFx0XHRsb2cuZXJyb3IgPSBkYXRhLmVycm9yLm1lc3NhZ2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdGlmKHRoaXMub3B0aW9ucy5vbkVycm9yKVxuXHRcdFx0XHRcdHRoaXMub3B0aW9ucy5vbkVycm9yKFwiQ2FuJ3Qgc2VuZCByZXNwb25zZVwiLGUpO1xuXHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0bG9nLmVycm9yPVwiQ2FuJ3Qgc2VuZCByZXNwb25zZVwiXG5cdFx0XHRcdGlmKHRoaXMubW9uaXRvcilcblx0XHRcdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZUVycm9yKGRhdGEuZW5kcG9pbnQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIHNob3cgbG9nXG5cdFx0aWYobG9nICYmIGxvZy5lcnJvciAmJiB0aGlzLm9wdGlvbnMub25FcnJvcil7XG5cdFx0XHR0aGlzLm9wdGlvbnMub25FcnJvcihsb2cuZXJyb3IpXG5cdFx0fWVsc2V7XG5cdFx0XHRpZih0aGlzLm9wdGlvbnMub25OZXR3b3JrTG9nICYmIGxvZylcblx0XHRcdFx0dGhpcy5vcHRpb25zLm9uTmV0d29ya0xvZyhsb2cpXG5cdFx0fVxuICAgIH1cblxuXG5cdGNoZWNrRGF0YUxlbmd0aChkYXRhOmFueSxyZXN1bHQ/OmFueSxsdmw/Om51bWJlcik6YW55e1xuXHRcdFxuXHRcdGlmKCFsdmwpXG5cdFx0XHRsdmw9MDtcblxuXHRcdGlmKHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiKXtcblx0XHRcdGlmKHR5cGVvZiBkYXRhPT09XCJzdHJpbmdcIiAmJiBkYXRhLmxlbmd0aD4xMDI0KVxuXHRcdFx0XHRyZXR1cm4gZGF0YS5zdWJzdHJpbmcoMCwxMDAwKStcIi4uLiAodG90YWw6XCIgKyBkYXRhLmxlbmd0aCArIFwiKVwiXG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cblx0XHRpZih0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIil7XG5cdFx0XHRpZighcmVzdWx0KVxuXHRcdFx0XHRyZXN1bHQ9e307XG5cdFx0XHRsZXQgYXJyY250ID0gMTAwO1xuXHRcdFx0Zm9yKGxldCBpIGluIGRhdGEpe1xuXHRcdFx0XHRyZXN1bHRbaV09dGhpcy5jaGVja0RhdGFMZW5ndGgoZGF0YVtpXSxyZXN1bHRbaV0sbHZsKzEpO1xuXHRcdFx0XHRhcnJjbnQtLTtcblx0XHRcdFx0aWYoYXJyY250PD0wKXtcblx0XHRcdFx0XHRyZXN1bHRbXCIuLi5cIl09XCIuLi4gdG90YWw6IFwiK0FycmF5LmlzQXJyYXkoZGF0YSk/ZGF0YS5sZW5ndGg6T2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQgPz8gbnVsbDtcblx0fVxuXG59XG4iXX0=
|
@@ -12,6 +12,7 @@ type IHandler = Record<HTTPMethod, ((req: HTTPRequestVO) => Promise<TransferPack
|
|
12
12
|
controller: (req: HTTPRequestVO) => Promise<TransferPacketVO<any>>;
|
13
13
|
ignoreInterceptor?: boolean;
|
14
14
|
allowInterceptorError?: boolean;
|
15
|
+
asStream?: boolean;
|
15
16
|
}>;
|
16
17
|
export interface IEndpointHandler {
|
17
18
|
endpoint: string;
|
@@ -19,6 +20,7 @@ export interface IEndpointHandler {
|
|
19
20
|
ignoreInterceptor?: boolean;
|
20
21
|
independed?: boolean;
|
21
22
|
allowInterceptorError?: boolean;
|
23
|
+
asStream?: boolean;
|
22
24
|
}
|
23
25
|
export declare class BaseEndpoint implements IBaseEndpoint {
|
24
26
|
private inializedEndpointNames;
|
@@ -34,5 +36,6 @@ export declare class BaseEndpoint implements IBaseEndpoint {
|
|
34
36
|
getInitalizedEndpointNames(): String[];
|
35
37
|
precheck(req: HTTPRequestVO): Promise<TransferPacketVO<any> | null>;
|
36
38
|
execute(req: HTTPRequestVO): Promise<TransferPacketVO<any>>;
|
39
|
+
protected createStream(req: HTTPRequestVO): HTTPRequestVO;
|
37
40
|
}
|
38
41
|
export {};
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.BaseEndpoint = void 0;
|
7
7
|
const LogService_1 = require("./LogService");
|
8
8
|
const DefaultErrors_1 = __importDefault(require("./structures/DefaultErrors"));
|
9
|
+
const stream_1 = require("stream");
|
9
10
|
const httpMethods = ["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS", "HEAD", "TRACE", "CONNECT"];
|
10
11
|
class BaseEndpoint {
|
11
12
|
inializedEndpointNames = [];
|
@@ -73,14 +74,20 @@ class BaseEndpoint {
|
|
73
74
|
if (i.handler && typeof i.handler === "function")
|
74
75
|
return i.handler.call(this, req);
|
75
76
|
const httpMethod = req.method.toUpperCase();
|
76
|
-
if (i.handler && i.handler[httpMethod] && typeof i.handler[httpMethod] === "function")
|
77
|
+
if (i.handler && i.handler[httpMethod] && typeof i.handler[httpMethod] === "function") {
|
78
|
+
if (i.asStream)
|
79
|
+
req = this.createStream(req);
|
77
80
|
return i.handler[httpMethod].call(this, req);
|
81
|
+
}
|
78
82
|
if (i.handler
|
79
83
|
&& i.handler[httpMethod]
|
80
84
|
&& typeof i.handler[httpMethod] === "object"
|
81
85
|
&& "controller" in i.handler[httpMethod]
|
82
|
-
&& typeof i.handler[httpMethod].controller === "function")
|
86
|
+
&& typeof i.handler[httpMethod].controller === "function") {
|
87
|
+
if (i.asStream)
|
88
|
+
req = this.createStream(req);
|
83
89
|
return i.handler[httpMethod].controller.call(this, req);
|
90
|
+
}
|
84
91
|
return {
|
85
92
|
error: { ...DefaultErrors_1.default.METHOD_NOT_ALLOWED, details: "No handler for " + httpMethod },
|
86
93
|
data: null
|
@@ -94,6 +101,19 @@ class BaseEndpoint {
|
|
94
101
|
data: null
|
95
102
|
};
|
96
103
|
}
|
104
|
+
createStream(req) {
|
105
|
+
const res = req.response;
|
106
|
+
res.setHeader('Content-Type', 'text/plain');
|
107
|
+
res.setHeader('Transfer-Encoding', 'chunked');
|
108
|
+
const stream = new stream_1.Readable();
|
109
|
+
stream.pipe(res);
|
110
|
+
stream.on('error', (err) => {
|
111
|
+
console.error('Stream error:', err);
|
112
|
+
res.status(500).send('Stream error');
|
113
|
+
});
|
114
|
+
req.stream = stream;
|
115
|
+
return req;
|
116
|
+
}
|
97
117
|
}
|
98
118
|
exports.BaseEndpoint = BaseEndpoint;
|
99
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZUVuZHBvaW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaVNlcnZlci9CYXNlRW5kcG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNkNBQXlEO0FBQ3pELCtFQUF1RDtBQVl2RCxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQUssRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sRUFBQyxPQUFPLEVBQUMsU0FBUyxDQUFDLENBQUE7QUFpQjVGLE1BQWEsWUFBWTtJQUViLHNCQUFzQixHQUFVLEVBQUUsQ0FBQztJQUUzQyxTQUFTLENBQW9CO0lBQ3RCLGlCQUFpQixHQUFHLEtBQUssQ0FBQTtJQUN4QixNQUFNLENBQUMsVUFBVSxHQUFRLEdBQUcsQ0FBQztJQUM3QixRQUFRLEdBQUMsRUFBRSxDQUFBO0lBSW5CLE1BQU0sQ0FBQyxhQUFhLEdBQUMsQ0FBQyxFQUFTLEVBQUMsRUFBRTtRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUM7WUFDOUIsSUFBSSxDQUFDLFVBQVUsSUFBRSxHQUFHLENBQUE7U0FDdkI7UUFDRCxJQUFHLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBQyxHQUFHLEdBQUMsRUFBRSxDQUFDO0lBQy9CLENBQUMsQ0FBQTtJQUNELE1BQU0sQ0FBQyxhQUFhLEdBQUMsR0FBUyxFQUFFO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDLENBQUE7SUFFRCxZQUFZLFFBQWU7UUFDdkIsSUFBRyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztZQUN2QixRQUFRLEdBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFD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QTtpQkFDSjthQUVKO1NBQ0o7UUFFRCxJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMsd0JBQXdCLEdBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRXBFLE9BQU87WUFDSCxLQUFLLEVBQUMsdUJBQWEsQ0FBQyxlQUFlO1lBQ25DLElBQUksRUFBQyxJQUFJO1NBQ1osQ0FBQTtJQUNMLENBQUM7O0FBakhMLG9DQWtIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZ0NyaXQsIGxvZ0luZm8sIGxvZ1dhcm4gfSBmcm9tIFwiLi9Mb2dTZXJ2aWNlXCI7XG5pbXBvcnQgRGVmYXVsdEVycm9ycyBmcm9tIFwiLi9zdHJ1Y3R1cmVzL0RlZmF1bHRFcnJvcnNcIjtcbmltcG9ydCB7IEhUVFBSZXF1ZXN0Vk8sIFRyYW5zZmVyUGFja2V0Vk8gfSBmcm9tIFwiLi9zdHJ1Y3R1cmVzL0ludGVyZmFjZXNcIjtcblxuXG5leHBvcnQgaW50ZXJmYWNlIElCYXNlRW5kcG9pbnR7XG4gICAgZW5kcG9pbnRzPzpJRW5kcG9pbnRIYW5kbGVyW11cbiAgICBleGVjdXRlOihyZXE6SFRUUFJlcXVlc3RWTyk9PlByb21pc2U8VHJhbnNmZXJQYWNrZXRWTzxhbnk+PlxuICAgIHByZWNoZWNrOihyZXE6SFRUUFJlcXVlc3RWTyk9PlByb21pc2U8VHJhbnNmZXJQYWNrZXRWTzxhbnk+fG51bGw+XG4gICAgaW5pdDooKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgaWdub3JlSHR0cExvZ2dpbmc6Ym9vbGVhbixcbn1cblxuY29uc3QgaHR0cE1ldGhvZHMgPSBbXCJHRVRcIixcIlBPU1RcIixcIlBVVFwiLFwiREVMRVRFXCIsXCJQQVRDSFwiLFwiT1BUSU9OU1wiLFwiSEVBRFwiLFwiVFJBQ0VcIixcIkNPTk5FQ1RcIl1cbnR5cGUgSFRUUE1ldGhvZCA9IHR5cGVvZiBodHRwTWV0aG9kc1tudW1iZXJdO1xuXG50eXBlIElIYW5kbGVyID0gUmVjb3JkPEhUVFBNZXRob2QsKChyZXE6SFRUUFJlcXVlc3RWTyk9PlByb21pc2U8VHJhbnNmZXJQYWNrZXRWTzxhbnk+Pil8e1xuICAgIGNvbnRyb2xsZXI6KHJlcTpIVFRQUmVxdWVzdFZPKT0+UHJvbWlzZTxUcmFuc2ZlclBhY2tldFZPPGFueT4+LFxuICAgIGlnbm9yZUludGVyY2VwdG9yPzpib29sZWFuLFxuICAgIGFsbG93SW50ZXJjZXB0b3JFcnJvcj86Ym9vbGVhblxufT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUVuZHBvaW50SGFuZGxlcntcbiAgICBlbmRwb2ludDpzdHJpbmcsXG4gICAgaGFuZGxlcj86KChyZXE6SFRUUFJlcXVlc3RWTyk9PlByb21pc2U8VHJhbnNmZXJQYWNrZXRWTzxhbnk+Pil8SUhhbmRsZXJcbiAgICBpZ25vcmVJbnRlcmNlcHRvcj86Ym9vbGVhblxuICAgIGluZGVwZW5kZWQ/OmJvb2xlYW4gLy8gaWYgdHJ1ZSAtIHdpbGwgYWxsb3cgYWJzb2x1dGUgcGF0aCBsaW5rZSBodHRwOi8vbG9jYWxob3N0OjMwMDAvZW5kZXBlbmRlZF9lbmRwb2ludFxuICAgIGFsbG93SW50ZXJjZXB0b3JFcnJvcj86Ym9vbGVhblxufVxuXG5leHBvcnQgY2xhc3MgQmFzZUVuZHBvaW50IGltcGxlbWVudHMgSUJhc2VFbmRwb2ludHtcblxuICAgIHByaXZhdGUgaW5pYWxpemVkRW5kcG9pbnROYW1lczpTdHJpbmdbXT1bXTtcblxuICAgIGVuZHBvaW50cz86SUVuZHBvaW50SGFuZGxlcltdXG4gICAgcHVibGljIGlnbm9yZUh0dHBMb2dnaW5nID0gZmFsc2VcbiAgICBwcml2YXRlIHN0YXRpYyBlbnRyeXBvaW50OnN0cmluZz1cIi9cIjtcbiAgICBwcml2YXRlIGVuZHBvaW50PVwiXCJcbiAgICBcblxuICAgIC8vIGdsb2JhbCBlbnRyeXBvaW50XG4gICAgc3RhdGljIHNldEVudHJ5UG9pbnQ9KGVwOnN0cmluZyk9PntcbiAgICAgICAgdGhpcy5lbnRyeXBvaW50ID0gZXA7XG4gICAgICAgIGlmKCF0aGlzLmVudHJ5cG9pbnQuZW5kc1dpdGgoXCIvXCIpKXtcbiAgICAgICAgICAgIHRoaXMuZW50cnlwb2ludCs9XCIvXCJcbiAgICAgICAgfVxuICAgICAgICBpZighZXAuc3RhcnRzV2l0aChcIi9cIikpXG4gICAgICAgICAgICB0aGlzLmVudHJ5cG9pbnQ9XCIvXCIrZXA7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRFbnRyeVBvaW50PSgpOnN0cmluZz0+e1xuICAgICAgICByZXR1cm4gdGhpcy5lbnRyeXBvaW50O1xuICAgIH1cbiAgICBcbiAgICBjb25zdHJ1Y3RvcihlbmRwb2ludDpzdHJpbmcpe1xuICAgICAgICBpZihlbmRwb2ludC5zdGFydHNXaXRoKFwiL1wiKSlcbiAgICAgICAgICAgIGVuZHBvaW50PWVuZHBvaW50LnN1YnN0cmluZygxKVxuICAgICAgICBpZighZW5kcG9pbnQuZW5kc1dpdGgoXCIvXCIpKVxuICAgICAgICAgICAgZW5kcG9pbnQ9ZW5kcG9pbnQrXCIvXCJcbiAgICAgICAgdGhpcy5lbmRwb2ludD1lbmRwb2ludDtcbiAgICB9XG4gICAgXG5cbiAgICByZWdpc3RlckVuZHBvaW50cyhlbmRwb2ludHM6SUVuZHBvaW50SGFuZGxlcltdKXtcbiAgICAgICAgZm9yKGxldCBpIG9mIGVuZHBvaW50cyl7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGJhc2UgcG9pbnRcbiAgICAgICAgICAgIGlmKGkuZW5kcG9pbnQ9PT1cIlwiIHx8IGkuZW5kcG9pbnQ9PT1cIi9cIil7XG4gICAgICAgICAgICAgICAgbGV0IGVtcHR5PWkuZW5kcG9pbnQgPT09IFwiXCI7XG4gICAgICAgICAgICAgICAgaS5lbmRwb2ludD10aGlzLmVuZHBvaW50XG4gICAgICAgICAgICAgICAgaWYoaS5lbmRwb2ludC5lbmRzV2l0aChcIi9cIikgJiYgZW1wdHkpXG4gICAgICAgICAgICAgICAgICAgIGkuZW5kcG9pbnQ9aS5lbmRwb2ludC5zdWJzdHJpbmcoMCxpLmVuZHBvaW50Lmxlbmd0aC0xKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihpLmVuZHBvaW50LnN0YXJ0c1dpdGgoXCIvXCIpKVxuICAgICAgICAgICAgICAgIGkuZW5kcG9pbnQgPSBpLmVuZHBvaW50LnN1YnN0cmluZygxKVxuICAgICAgICAgICAgaWYoaS5lbmRwb2ludC5lbmRzV2l0aChcIi9cIikpXG4gICAgICAgICAgICAgICAgaS5lbmRwb2ludD1pLmVuZHBvaW50LnN1YnN0cmluZygwLGkuZW5kcG9pbnQubGVuZ3RoLTEpXG5cbiAgICAgICAgICAgIGlmKCFpLmluZGVwZW5kZWQpXG4gICAgICAgICAgICAgICAgaS5lbmRwb2ludCA9IHRoaXMuZW5kcG9pbnQraS5lbmRwb2ludFxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5kcG9pbnRzID1lbmRwb2ludHM7XG4gICAgfVxuXG4gICAgXG4gICAgYXN5bmMgaW5pdCgpe1xuICAgICAgICBpZighdGhpcy5lbmRwb2ludHMpe1xuICAgICAgICAgICAgbG9nQ3JpdChcIiR7QmFzZUVuZHBvaW50LmpzfVwiLFwiTm8gZW5kcG9pbnRzIHJlZ2lzdGVyZWQgZm9yIFwiK3RoaXMuZW5kcG9pbnQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yKGxldCBpIG9mIHRoaXMuZW5kcG9pbnRzKXtcbiAgICAgICAgICAgIGxvZ0luZm8oXCIke0Jhc2VFbmRwb2ludC5qc31cIixcImVuZHBvaW50OiBcIitpLmVuZHBvaW50K1wiIGluaXRhbGl6ZWQsIGlnbm9yZUludGVyY2VwdG9yOiBcIisoaS5pZ25vcmVJbnRlcmNlcHRvciA/PyBcImZhbHNlXCIpKTtcbiAgICAgICAgICAgIHRoaXMuaW5pYWxpemVkRW5kcG9pbnROYW1lcy5wdXNoKGkuZW5kcG9pbnQrXCIgaWdub3JlIGludGVyY2VwdG9yOiBcIisoaS5pZ25vcmVJbnRlcmNlcHRvciA/PyBcImZhbHNlXCIpKVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGdldEluaXRhbGl6ZWRFbmRwb2ludE5hbWVzKCk6U3RyaW5nW117XG4gICAgICAgIHJldHVybiB0aGlzLmluaWFsaXplZEVuZHBvaW50TmFtZXM7XG4gICAgfVxuXG4gICAgYXN5bmMgcHJlY2hlY2socmVxOkhUVFBSZXF1ZXN0Vk8pOlByb21pc2U8VHJhbnNmZXJQYWNrZXRWTzxhbnk+fG51bGw+e3JldHVybiBudWxsfVxuXG4gICAgYXN5bmMgZXhlY3V0ZShyZXE6SFRUUFJlcXVlc3RWTyk6UHJvbWlzZTxUcmFuc2ZlclBhY2tldFZPPGFueT4+e1xuICAgICAgICBpZih0aGlzLmVuZHBvaW50cyAmJiB0aGlzLmVuZHBvaW50cy5sZW5ndGg+MCl7XG4gICAgICAgICAgICBmb3IobGV0IGkgb2YgdGhpcy5lbmRwb2ludHMpe1xuICAgICAgICAgICAgICAgIGxldCB0YXJnZXRFUCA9IEJhc2VFbmRwb2ludC5lbnRyeXBvaW50K2kuZW5kcG9pbnRcbiAgICAgICAgICAgICAgICB0YXJnZXRFUCA9IHRhcmdldEVQLnJlcGxhY2VBbGwoXCIvL1wiLFwiL1wiKVxuICAgICAgICAgICAgICAgIGlmKCB0YXJnZXRFUCA9PT0gcmVxLmVuZHBvaW50KXtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGlmKGkuaGFuZGxlciAmJiB0eXBlb2YgaS5oYW5kbGVyID09PVwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpLmhhbmRsZXIuY2FsbCh0aGlzLHJlcSlcblxuICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBtZXRob2QgYW5kIGNhbGwgY29udHJvbGxlclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBodHRwTWV0aG9kID0gcmVxLm1ldGhvZC50b1VwcGVyQ2FzZSgpIGFzIEhUVFBNZXRob2Q7XG4gICAgICAgICAgICAgICAgICAgIGlmKGkuaGFuZGxlciAmJiBpLmhhbmRsZXJbaHR0cE1ldGhvZF0gJiYgdHlwZW9mIGkuaGFuZGxlcltodHRwTWV0aG9kXSA9PT1cImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGkuaGFuZGxlcltodHRwTWV0aG9kXSBhcyBhbnkpLmNhbGwodGhpcyxyZXEpXG5cbiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgbWV0aG9kIGFuZCBjYWxsIGNvbnRyb2xsZXIgaW4gaGFuZGxlciBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgaWYoaS5oYW5kbGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBpLmhhbmRsZXJbaHR0cE1ldGhvZF1cbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHR5cGVvZiBpLmhhbmRsZXJbaHR0cE1ldGhvZF0gPT09XCJvYmplY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgXCJjb250cm9sbGVyXCIgaW4gaS5oYW5kbGVyW2h0dHBNZXRob2RdXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0eXBlb2YgKGkuaGFuZGxlcltodHRwTWV0aG9kXSBhcyBhbnkpLmNvbnRyb2xsZXIgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaS5oYW5kbGVyW2h0dHBNZXRob2RdIGFzIGFueSkuY29udHJvbGxlci5jYWxsKHRoaXMscmVxKVxuICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgICAgICAvLyBObyBoYW5kbGVyIGZvciBodHRwIG1ldGhvZFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6ey4uLkRlZmF1bHRFcnJvcnMuTUVUSE9EX05PVF9BTExPV0VELGRldGFpbHM6XCJObyBoYW5kbGVyIGZvciBcIitodHRwTWV0aG9kfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6bnVsbFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsb2dXYXJuKFwiJHtCYXNlRW5kcG9pbnQuanN9XCIsXCJVbmhhbmRsZWQgZW50cnlwb2ludDogXCIrdGhpcy5lbmRwb2ludClcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlcnJvcjpEZWZhdWx0RXJyb3JzLk5PVF9JTVBMRU1FTlRFRCxcbiAgICAgICAgICAgIGRhdGE6bnVsbFxuICAgICAgICB9XG4gICAgfVxufSJdfQ==
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZUVuZHBvaW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaVNlcnZlci9CYXNlRW5kcG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNkNBQXlEO0FBQ3pELCtFQUF1RDtBQUV2RCxtQ0FBK0I7QUFVL0IsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFLLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLEVBQUMsT0FBTyxFQUFDLFNBQVMsQ0FBQyxDQUFBO0FBbUI1RixNQUFhLFlBQVk7SUFFYixzQkFBc0IsR0FBVSxFQUFFLENBQUM7SUFFM0MsU0FBUyxDQUFvQjtJQUN0QixpQkFBaUIsR0FBRyxLQUFLLENBQUE7SUFDeEIsTUFBTSxDQUFDLFVBQVUsR0FBUSxHQUFHLENBQUM7SUFDN0IsUUFBUSxHQUFDLEVBQUUsQ0FBQTtJQUluQixNQUFNLENBQUMsYUFBYSxHQUFDLENBQUMsRUFBUyxFQUFDLEVBQUU7UUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFDO1lBQzlCLElBQUksQ0FBQyxVQUFVLElBQUUsR0FBRyxDQUFBO1NBQ3ZCO1FBQ0QsSUFBRyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQ2xCLElBQUksQ0FBQyxVQUFVLEdBQUMsR0FBRyxHQUFDLEVBQUUsQ0FBQztJQUMvQixDQUFDLENBQUE7SUFDRCxNQUFNLENBQUMsYUFBYSxHQUFDLEdBQVMsRUFBRTtRQUM1QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQyxDQUFBO0lBRUQsWUFBWSxRQUFlO1FBQ3ZCLElBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFDdkIsUUFBUSxHQUFDLFFBQVEsQ0FBQyxT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dCI6WyJpbXBvcnQgeyBsb2dDcml0LCBsb2dJbmZvLCBsb2dXYXJuIH0gZnJvbSBcIi4vTG9nU2VydmljZVwiO1xuaW1wb3J0IERlZmF1bHRFcnJvcnMgZnJvbSBcIi4vc3RydWN0dXJlcy9EZWZhdWx0RXJyb3JzXCI7XG5pbXBvcnQgeyBIVFRQUmVxdWVzdFZPLCBUcmFuc2ZlclBhY2tldFZPIH0gZnJvbSBcIi4vc3RydWN0dXJlcy9JbnRlcmZhY2VzXCI7XG5pbXBvcnQge1JlYWRhYmxlfSBmcm9tIFwic3RyZWFtXCJcblxuZXhwb3J0IGludGVyZmFjZSBJQmFzZUVuZHBvaW50e1xuICAgIGVuZHBvaW50cz86SUVuZHBvaW50SGFuZGxlcltdXG4gICAgZXhlY3V0ZToocmVxOkhUVFBSZXF1ZXN0Vk8pPT5Qcm9taXNlPFRyYW5zZmVyUGFja2V0Vk88YW55Pj5cbiAgICBwcmVjaGVjazoocmVxOkhUVFBSZXF1ZXN0Vk8pPT5Qcm9taXNlPFRyYW5zZmVyUGFja2V0Vk88YW55PnxudWxsPlxuICAgIGluaXQ6KCkgPT4gUHJvbWlzZTx2b2lkPlxuICAgIGlnbm9yZUh0dHBMb2dnaW5nOmJvb2xlYW4sXG59XG5cbmNvbnN0IGh0dHBNZXRob2RzID0gW1wiR0VUXCIsXCJQT1NUXCIsXCJQVVRcIixcIkRFTEVURVwiLFwiUEFUQ0hcIixcIk9QVElPTlNcIixcIkhFQURcIixcIlRSQUNFXCIsXCJDT05ORUNUXCJdXG50eXBlIEhUVFBNZXRob2QgPSB0eXBlb2YgaHR0cE1ldGhvZHNbbnVtYmVyXTtcblxudHlwZSBJSGFuZGxlciA9IFJlY29yZDxIVFRQTWV0aG9kLCgocmVxOkhUVFBSZXF1ZXN0Vk8pPT5Qcm9taXNlPFRyYW5zZmVyUGFja2V0Vk88YW55Pj4pfHtcbiAgICBjb250cm9sbGVyOihyZXE6SFRUUFJlcXVlc3RWTyk9PlByb21pc2U8VHJhbnNmZXJQYWNrZXRWTzxhbnk+PixcbiAgICBpZ25vcmVJbnRlcmNlcHRvcj86Ym9vbGVhbixcbiAgICBhbGxvd0ludGVyY2VwdG9yRXJyb3I/OmJvb2xlYW5cbiAgICBhc1N0cmVhbT86Ym9vbGVhblxufT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUVuZHBvaW50SGFuZGxlcntcbiAgICBlbmRwb2ludDpzdHJpbmcsXG4gICAgaGFuZGxlcj86KChyZXE6SFRUUFJlcXVlc3RWTyk9PlByb21pc2U8VHJhbnNmZXJQYWNrZXRWTzxhbnk+Pil8SUhhbmRsZXJcbiAgICBpZ25vcmVJbnRlcmNlcHRvcj86Ym9vbGVhblxuICAgIGluZGVwZW5kZWQ/OmJvb2xlYW4gLy8gaWYgdHJ1ZSAtIHdpbGwgYWxsb3cgYWJzb2x1dGUgcGF0aCBsaW5rZSBodHRwOi8vbG9jYWxob3N0OjMwMDAvZW5kZXBlbmRlZF9lbmRwb2ludFxuICAgIGFsbG93SW50ZXJjZXB0b3JFcnJvcj86Ym9vbGVhblxuICAgIGFzU3RyZWFtPzpib29sZWFuXG59XG5cbmV4cG9ydCBjbGFzcyBCYXNlRW5kcG9pbnQgaW1wbGVtZW50cyBJQmFzZUVuZHBvaW50e1xuXG4gICAgcHJpdmF0ZSBpbmlhbGl6ZWRFbmRwb2ludE5hbWVzOlN0cmluZ1tdPVtdO1xuXG4gICAgZW5kcG9pbnRzPzpJRW5kcG9pbnRIYW5kbGVyW11cbiAgICBwdWJsaWMgaWdub3JlSHR0cExvZ2dpbmcgPSBmYWxzZVxuICAgIHByaXZhdGUgc3RhdGljIGVudHJ5cG9pbnQ6c3RyaW5nPVwiL1wiO1xuICAgIHByaXZhdGUgZW5kcG9pbnQ9XCJcIlxuICAgIFxuXG4gICAgLy8gZ2xvYmFsIGVudHJ5cG9pbnRcbiAgICBzdGF0aWMgc2V0RW50cnlQb2ludD0oZXA6c3RyaW5nKT0+e1xuICAgICAgICB0aGlzLmVudHJ5cG9pbnQgPSBlcDtcbiAgICAgICAgaWYoIXRoaXMuZW50cnlwb2ludC5lbmRzV2l0aChcIi9cIikpe1xuICAgICAgICAgICAgdGhpcy5lbnRyeXBvaW50Kz1cIi9cIlxuICAgICAgICB9XG4gICAgICAgIGlmKCFlcC5zdGFydHNXaXRoKFwiL1wiKSlcbiAgICAgICAgICAgIHRoaXMuZW50cnlwb2ludD1cIi9cIitlcDtcbiAgICB9XG4gICAgc3RhdGljIGdldEVudHJ5UG9pbnQ9KCk6c3RyaW5nPT57XG4gICAgICAgIHJldHVybiB0aGlzLmVudHJ5cG9pbnQ7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0cnVjdG9yKGVuZHBvaW50OnN0cmluZyl7XG4gICAgICAgIGlmKGVuZHBvaW50LnN0YXJ0c1dpdGgoXCIvXCIpKVxuICAgICAgICAgICAgZW5kcG9pbnQ9ZW5kcG9pbnQuc3Vic3RyaW5nKDEpXG4gICAgICAgIGlmKCFlbmRwb2ludC5lbmRzV2l0aChcIi9cIikpXG4gICAgICAgICAgICBlbmRwb2ludD1lbmRwb2ludCtcIi9cIlxuICAgICAgICB0aGlzLmVuZHBvaW50PWVuZHBvaW50O1xuICAgIH1cbiAgICBcblxuICAgIHJlZ2lzdGVyRW5kcG9pbnRzKGVuZHBvaW50czpJRW5kcG9pbnRIYW5kbGVyW10pe1xuICAgICAgICBmb3IobGV0IGkgb2YgZW5kcG9pbnRzKXtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gYmFzZSBwb2ludFxuICAgICAgICAgICAgaWYoaS5lbmRwb2ludD09PVwiXCIgfHwgaS5lbmRwb2ludD09PVwiL1wiKXtcbiAgICAgICAgICAgICAgICBsZXQgZW1wdHk9aS5lbmRwb2ludCA9PT0gXCJcIjtcbiAgICAgICAgICAgICAgICBpLmVuZHBvaW50PXRoaXMuZW5kcG9pbnRcbiAgICAgICAgICAgICAgICBpZihpLmVuZHBvaW50LmVuZHNXaXRoKFwiL1wiKSAmJiBlbXB0eSlcbiAgICAgICAgICAgICAgICAgICAgaS5lbmRwb2ludD1pLmVuZHBvaW50LnN1YnN0cmluZygwLGkuZW5kcG9pbnQubGVuZ3RoLTEpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKGkuZW5kcG9pbnQuc3RhcnRzV2l0aChcIi9cIikpXG4gICAgICAgICAgICAgICAgaS5lbmRwb2ludCA9IGkuZW5kcG9pbnQuc3Vic3RyaW5nKDEpXG4gICAgICAgICAgICBpZihpLmVuZHBvaW50LmVuZHNXaXRoKFwiL1wiKSlcbiAgICAgICAgICAgICAgICBpLmVuZHBvaW50PWkuZW5kcG9pbnQuc3Vic3RyaW5nKDAsaS5lbmRwb2ludC5sZW5ndGgtMSlcblxuICAgICAgICAgICAgaWYoIWkuaW5kZXBlbmRlZClcbiAgICAgICAgICAgICAgICBpLmVuZHBvaW50ID0gdGhpcy5lbmRwb2ludCtpLmVuZHBvaW50XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbmRwb2ludHMgPWVuZHBvaW50cztcbiAgICB9XG5cbiAgICBcbiAgICBhc3luYyBpbml0KCl7XG4gICAgICAgIGlmKCF0aGlzLmVuZHBvaW50cyl7XG4gICAgICAgICAgICBsb2dDcml0KFwiJHtCYXNlRW5kcG9pbnQuanN9XCIsXCJObyBlbmRwb2ludHMgcmVnaXN0ZXJlZCBmb3IgXCIrdGhpcy5lbmRwb2ludClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IobGV0IGkgb2YgdGhpcy5lbmRwb2ludHMpe1xuICAgICAgICAgICAgbG9nSW5mbyhcIiR7QmFzZUVuZHBvaW50LmpzfVwiLFwiZW5kcG9pbnQ6IFwiK2kuZW5kcG9pbnQrXCIgaW5pdGFsaXplZCwgaWdub3JlSW50ZXJjZXB0b3I6IFwiKyhpLmlnbm9yZUludGVyY2VwdG9yID8/IFwiZmFsc2VcIikpO1xuICAgICAgICAgICAgdGhpcy5pbmlhbGl6ZWRFbmRwb2ludE5hbWVzLnB1c2goaS5lbmRwb2ludCtcIiBpZ25vcmUgaW50ZXJjZXB0b3I6IFwiKyhpLmlnbm9yZUludGVyY2VwdG9yID8/IFwiZmFsc2VcIikpXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZ2V0SW5pdGFsaXplZEVuZHBvaW50TmFtZXMoKTpTdHJpbmdbXXtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5pYWxpemVkRW5kcG9pbnROYW1lcztcbiAgICB9XG5cbiAgICBhc3luYyBwcmVjaGVjayhyZXE6SFRUUFJlcXVlc3RWTyk6UHJvbWlzZTxUcmFuc2ZlclBhY2tldFZPPGFueT58bnVsbD57cmV0dXJuIG51bGx9XG5cbiAgICBhc3luYyBleGVjdXRlKHJlcTpIVFRQUmVxdWVzdFZPKTpQcm9taXNlPFRyYW5zZmVyUGFja2V0Vk88YW55Pj57XG4gICAgICAgIGlmKHRoaXMuZW5kcG9pbnRzICYmIHRoaXMuZW5kcG9pbnRzLmxlbmd0aD4wKXtcbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiB0aGlzLmVuZHBvaW50cyl7XG4gICAgICAgICAgICAgICAgbGV0IHRhcmdldEVQID0gQmFzZUVuZHBvaW50LmVudHJ5cG9pbnQraS5lbmRwb2ludFxuICAgICAgICAgICAgICAgIHRhcmdldEVQID0gdGFyZ2V0RVAucmVwbGFjZUFsbChcIi8vXCIsXCIvXCIpXG4gICAgICAgICAgICAgICAgaWYoIHRhcmdldEVQID09PSByZXEuZW5kcG9pbnQpe1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgaWYoaS5oYW5kbGVyICYmIHR5cGVvZiBpLmhhbmRsZXIgPT09XCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkuaGFuZGxlci5jYWxsKHRoaXMscmVxKVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIG1ldGhvZCBhbmQgY2FsbCBjb250cm9sbGVyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGh0dHBNZXRob2QgPSByZXEubWV0aG9kLnRvVXBwZXJDYXNlKCkgYXMgSFRUUE1ldGhvZDtcbiAgICAgICAgICAgICAgICAgICAgaWYoaS5oYW5kbGVyICYmIGkuaGFuZGxlcltodHRwTWV0aG9kXSAmJiB0eXBlb2YgaS5oYW5kbGVyW2h0dHBNZXRob2RdID09PVwiZnVuY3Rpb25cIil7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihpLmFzU3RyZWFtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcSA9IHRoaXMuY3JlYXRlU3RyZWFtKHJlcSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGkuaGFuZGxlcltodHRwTWV0aG9kXSBhcyBhbnkpLmNhbGwodGhpcyxyZXEpXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBtZXRob2QgYW5kIGNhbGwgY29udHJvbGxlciBpbiBoYW5kbGVyIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICBpZihpLmhhbmRsZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGkuaGFuZGxlcltodHRwTWV0aG9kXVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdHlwZW9mIGkuaGFuZGxlcltodHRwTWV0aG9kXSA9PT1cIm9iamVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBcImNvbnRyb2xsZXJcIiBpbiBpLmhhbmRsZXJbaHR0cE1ldGhvZF1cbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHR5cGVvZiAoaS5oYW5kbGVyW2h0dHBNZXRob2RdIGFzIGFueSkuY29udHJvbGxlciA9PT0gXCJmdW5jdGlvblwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpLmFzU3RyZWFtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEgPSB0aGlzLmNyZWF0ZVN0cmVhbShyZXEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaS5oYW5kbGVyW2h0dHBNZXRob2RdIGFzIGFueSkuY29udHJvbGxlci5jYWxsKHRoaXMscmVxKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgICAgICAvLyBObyBoYW5kbGVyIGZvciBodHRwIG1ldGhvZFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6ey4uLkRlZmF1bHRFcnJvcnMuTUVUSE9EX05PVF9BTExPV0VELGRldGFpbHM6XCJObyBoYW5kbGVyIGZvciBcIitodHRwTWV0aG9kfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6bnVsbFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsb2dXYXJuKFwiJHtCYXNlRW5kcG9pbnQuanN9XCIsXCJVbmhhbmRsZWQgZW50cnlwb2ludDogXCIrdGhpcy5lbmRwb2ludClcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlcnJvcjpEZWZhdWx0RXJyb3JzLk5PVF9JTVBMRU1FTlRFRCxcbiAgICAgICAgICAgIGRhdGE6bnVsbFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVN0cmVhbShyZXE6SFRUUFJlcXVlc3RWTyk6SFRUUFJlcXVlc3RWT3tcbiAgICAgICAgY29uc3QgcmVzID0gcmVxLnJlc3BvbnNlO1xuICAgICAgICBcbiAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKTtcbiAgICAgICAgcmVzLnNldEhlYWRlcignVHJhbnNmZXItRW5jb2RpbmcnLCAnY2h1bmtlZCcpO1xuICAgIFxuICAgICAgICAvLyBjcmVhdGUgYSByZWFkYWJsZSBzdHJlYW1cbiAgICAgICAgY29uc3Qgc3RyZWFtID0gbmV3IFJlYWRhYmxlKClcbiAgICBcbiAgICAgICAgLy8gc2VuZCB0aGUgc3RyZWFtIHRvIHRoZSBjbGllbnRcbiAgICAgICAgc3RyZWFtLnBpcGUocmVzKTtcbiAgICBcbiAgICAgICAgLy8gZXJyb3IgaGFuZGxpbmdcbiAgICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1N0cmVhbSBlcnJvcjonLCBlcnIpO1xuICAgICAgICAgICAgcmVzLnN0YXR1cyg1MDApLnNlbmQoJ1N0cmVhbSBlcnJvcicpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVxLnN0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgcmV0dXJuIHJlcTtcbiAgICB9XG59Il19
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { BaseService } from "./BaseService";
|
2
2
|
import { HUBConnection } from "./cluster/HUBConnection";
|
3
3
|
import Signal, { Req } from "badmfck-signal";
|
4
|
-
import { HUBServiceOptions, IWebsocketPacket } from "./
|
4
|
+
import { HUBServiceOptions, IWebsocketPacket } from "./external/ExternalService";
|
5
5
|
export interface IParty {
|
6
6
|
name: string;
|
7
7
|
handlers: (Signal<IWebsocketPacket> | Req<IWebsocketPacket, any>)[];
|
@@ -78,4 +78,4 @@ class ClusterService extends BaseService_1.BaseService {
|
|
78
78
|
}
|
79
79
|
}
|
80
80
|
exports.ClusterService = ClusterService;
|
81
|
-
//# sourceMappingURL=data:application/json;base64,
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2x1c3RlclNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpU2VydmVyL0NsdXN0ZXJTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDRDQUF3QztBQUN4QywrQ0FBNEM7QUFDNUMsNkNBQWlEO0FBQ2pELDJEQUF3RTtBQUV4RSxvRUFBNkM7QUFFN0MsOERBQXdEO0FBQ3hELDBDQUF1QztBQTJCdkMsTUFBYSxjQUFlLFNBQVEseUJBQVc7SUFHM0MsT0FBTyxDQUF1QjtJQUM5QixFQUFFLEdBQW9CLElBQUksQ0FBQztJQUMzQixRQUFRLEdBQThELEVBQUUsQ0FBQztJQUN6RSxPQUFPLEdBQTBCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFM0MsWUFBWSxHQUF5QjtRQUNqQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUVuQixJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ1osSUFBSSx3QkFBTSxDQUFtQixtQkFBbUIsRUFBQyxTQUFTLEVBQUMsS0FBSyxFQUFFLEdBQUcsRUFBQyxFQUFFO2dCQUVwRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxDQUFDLENBQUM7U0FDTCxDQUFBO0lBRUwsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ04sSUFBQSxvQkFBTyxFQUFDLDZCQUE2QixDQUFDLENBQUE7UUFDdEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNQLElBQUEsb0JBQU8sRUFBQyx5QkFBeUIsQ0FBQyxDQUFBO1FBQ2xDLElBQUcsSUFBSSxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZO1FBRWQsSUFBQSxvQkFBTyxFQUFDLG1DQUFtQyxDQUFDLENBQUE7UUFFNUMsSUFBRyxJQUFJLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFcEIsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLDZCQUFhLENBQUM7WUFDeEIsU0FBUyxFQUFDLFVBQVU7WUFDcEIsRUFBRSxFQUFDLElBQUksWUFBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1lBRXhDLE1BQU0sRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07WUFDMUIsY0FBYyxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYztZQUMxQyxhQUFhLEVBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhO1lBQ3hDLE9BQU8sRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU87WUFFNUIsUUFBUSxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUTtZQUM5QixlQUFlLEVBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlO1lBQzVDLFNBQVMsRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVM7WUFFaEMsUUFBUSxFQUFDLElBQUksQ0FBQyxRQUFRO1lBRXRCLFlBQVksRUFBQyxLQUFLLElBQUcsRUFBRTtnQkFDbkIsSUFBQSxvQkFBTyxFQUFDLGtDQUFrQyxDQUFDLENBQUE7Z0JBRTNDLE1BQU0sSUFBQSxhQUFLLEVBQUMsSUFBSSxDQUFDLENBQUE7Z0JBR2pCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBQyxFQUFFLENBQUEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM1RCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDO29CQUNqQyxNQUFNLEVBQUUsV0FBVztvQkFDbkIsSUFBSSxFQUFFLE9BQU87b0JBQ2IsVUFBVSxFQUFDLENBQUM7aUJBQ2YsQ0FBaUIsQ0FBQTtnQkFFbEIsSUFBRywwQkFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBQztvQkFDNUIsSUFBQSxxQkFBUSxFQUFDLGtEQUFrRCxFQUFDLFFBQVEsQ0FBQyxDQUFBO29CQUVyRSxPQUFPO2lCQUNWO2dCQUVELEtBQUksSUFBSSxDQUFDLElBQUksUUFBUTtvQkFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixDQUFDO1lBR0QsT0FBTyxFQUFDLEdBQUUsRUFBRTtnQkFDUixPQUFPLENBQUMsR0FBRyxDQUFDLDBDQUEwQyxDQUFDLENBQUE7Z0JBQ3ZELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixDQUFDO1NBQ0osQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUdELFlBQVksQ0FBQyxLQUFnQjtRQUN6QixJQUFBLG9CQUFPLEVBQUMsZ0NBQWdDLEVBQUMsS0FBSyxDQUFDLENBQUE7UUFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0NBRUo7QUE1RkQsd0NBNEZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFdlYlNvY2tldCwgeyBSYXdEYXRhIH0gZnJvbSBcIndzXCI7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gXCIuL0Jhc2VTZXJ2aWNlXCI7XG5pbXBvcnQgeyBsb2dFcnJvciwgbG9nSW5mbyB9IGZyb20gXCIuL0xvZ1NlcnZpY2VcIjtcbmltcG9ydCB7IEhVQkNvbm5lY3Rpb24sIElDbHVzdGVyUGFja2V0IH0gZnJvbSBcIi4vY2x1c3Rlci9IVUJDb25uZWN0aW9uXCI7XG5pbXBvcnQgeyBwcml2YXRlRGVjcnlwdCwgU2lnbiB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCBTaWduYWwsIHsgUmVxIH0gZnJvbSBcImJhZG1mY2stc2lnbmFsXCI7XG5pbXBvcnQgeyBIVUJTZXJ2aWNlT3B0aW9ucywgSVdlYnNvY2tldFBhY2tldCB9IGZyb20gXCIuL2V4dGVybmFsL0V4dGVybmFsU2VydmljZVwiO1xuaW1wb3J0IHsgRXJyb3JVdGlscyB9IGZyb20gXCIuL3N0cnVjdHVyZXMvRGVmYXVsdEVycm9yc1wiO1xuaW1wb3J0IHsgU2xlZXAgfSBmcm9tIFwiLi9oZWxwZXIvU2xlZXBcIjtcblxuXG5leHBvcnQgaW50ZXJmYWNlIElQYXJ0eXtcbiAgICBuYW1lOnN0cmluZyxcbiAgICBoYW5kbGVyczooU2lnbmFsPElXZWJzb2NrZXRQYWNrZXQ+fFJlcTxJV2Vic29ja2V0UGFja2V0LGFueT4pW10sXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBhcnR5SG9zdHtcbiAgICB1cmw6c3RyaW5nLFxuXHRwdWJsaWNLZXk6c3RyaW5nLFxuXHRpZDpzdHJpbmdcdFxufVxuXG4vKipcbiAqIENsdXN0ZXJTZXJ2aWNlT3B0aW9uc1xuICogaWQ6IHN0cmluZyAtIGlkIG9mIHRoZSBzZXJ2aWNlLCBtdXN0IGJlIHNoYTI1NiBoYXNoIG9yIHN0cm9uZ2VyXG4gKiBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbHVzdGVyU2VydmljZU9wdGlvbnMgZXh0ZW5kcyBIVUJTZXJ2aWNlT3B0aW9uc3tcbiAgICBcbiAgICB0YXJnZXRJRDpzdHJpbmcsXG4gICAgdGFyZ2V0UHVibGljS2V5OnN0cmluZyxcbiAgICB0YXJnZXRVUkw6c3RyaW5nLFxuICAgIHBhcnR5OklQYXJ0eVtdLCAvLyBsaXN0IG9mIGlkcyBvZiBwYXJ0aWVzIHRoYXQgSSBjYW4gY29ubmVjdCB0b1xufVxuXG5leHBvcnQgY2xhc3MgQ2x1c3RlclNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZXtcbiAgICBcbiAgIFxuICAgIG9wdGlvbnM6Q2x1c3RlclNlcnZpY2VPcHRpb25zO1xuICAgIHdzOkhVQkNvbm5lY3Rpb258bnVsbD1udWxsO1xuICAgIGhhbmRsZXJzOiAoU2lnbmFsPElXZWJzb2NrZXRQYWNrZXQ+IHwgUmVxPElXZWJzb2NrZXRQYWNrZXQsIGFueT4pW10gPSBbXTtcbiAgICBwYXJpdGVzOk1hcDxzdHJpbmcsSVBhcnR5SG9zdD4gPSBuZXcgTWFwKCk7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHQ6Q2x1c3RlclNlcnZpY2VPcHRpb25zKXtcbiAgICAgICAgc3VwZXIoXCJDbHVzdGVyU2VydmljZVwiKVxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHQ7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVycyA9IFtcbiAgICAgICAgICAgIG5ldyBTaWduYWw8SVdlYnNvY2tldFBhY2tldD4oXCJTX1BBUlRZX0FWQUlMQUJMRVwiLHVuZGVmaW5lZCxhc3luYyAocmVxKT0+e1xuICAgICAgICAgICAgICAgIC8vIGdvdCBpbmZvIGFib3V0IHBhcnR5XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRQYXJ0eUhvc3QocmVxLmRhdGEpO1xuICAgICAgICAgICAgfSkgICAgICAgICAgICBcbiAgICAgICAgXVxuICAgIFxuICAgIH1cblxuICAgIGFzeW5jIGluaXQoKXtcbiAgICAgICAgbG9nSW5mbyhcIkNsdXN0ZXJTZXJ2aWNlOiBpbml0aWFsaXplZFwiKVxuICAgICAgICB0aGlzLmNvbm5lY3RUb0hVQigpO1xuICAgIH1cblxuICAgIGFzeW5jIGNsb3NlKCl7XG4gICAgICAgIGxvZ0luZm8oXCJDbHVzdGVyU2VydmljZTogY2xvc2luZ1wiKVxuICAgICAgICBpZih0aGlzLndzKVxuICAgICAgICAgICAgdGhpcy53cy5jbG9zZSgpO1xuICAgICAgICB0aGlzLnBhcml0ZXMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBhc3luYyBjb25uZWN0VG9IVUIoKXtcblxuICAgICAgICBsb2dJbmZvKFwiQ2x1c3RlclNlcnZpY2U6IGNvbm5lY3RpbmcgdG8gSFVCXCIpXG5cbiAgICAgICAgaWYodGhpcy53cylcbiAgICAgICAgICAgIHRoaXMud3MuY2xvc2UoKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMud3MgPSBuZXcgSFVCQ29ubmVjdGlvbih7XG4gICAgICAgICAgICBkaXJlY3Rpb246XCJvdXRnb2luZ1wiLFxuICAgICAgICAgICAgd3M6bmV3IFdlYlNvY2tldCh0aGlzLm9wdGlvbnMudGFyZ2V0VVJMKSxcblxuICAgICAgICAgICAgaG9zdElEOnRoaXMub3B0aW9ucy5ob3N0SUQsXG4gICAgICAgICAgICBob3N0UHJpdmF0ZUtleTp0aGlzLm9wdGlvbnMuaG9zdFByaXZhdGVLZXksXG4gICAgICAgICAgICBob3N0UHVibGljS2V5OnRoaXMub3B0aW9ucy5ob3N0UHVibGljS2V5LFxuICAgICAgICAgICAgaG9zdFVSTDp0aGlzLm9wdGlvbnMuaG9zdFVSTCxcblxuICAgICAgICAgICAgdGFyZ2V0SUQ6dGhpcy5vcHRpb25zLnRhcmdldElELFxuICAgICAgICAgICAgdGFyZ2V0UHVibGljS2V5OnRoaXMub3B0aW9ucy50YXJnZXRQdWJsaWNLZXksXG4gICAgICAgICAgICB0YXJnZXRVUkw6dGhpcy5vcHRpb25zLnRhcmdldFVSTCxcblxuICAgICAgICAgICAgaGFuZGxlcnM6dGhpcy5oYW5kbGVycyxcblxuICAgICAgICAgICAgb25BdXRob3JpemVkOmFzeW5jICgpPT57XG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIkNsdXN0ZXJTZXJ2aWNlOiBjb25uZWN0ZWQgdG8gSFVCXCIpXG5cbiAgICAgICAgICAgICAgICBhd2FpdCBTbGVlcCgxMDAwKVxuXG4gICAgICAgICAgICAgICAgLy8gcmVnaXN0cmF0ZSBwYXJ0aWVzXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyaXRlcyA9IHRoaXMub3B0aW9ucy5wYXJ0eS5tYXAoKHBhcnR5KT0+cGFydHkubmFtZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndzPy5zZW5kKHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIlJFUV9QQVJUWVwiLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBwYXJpdGVzLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0lEOjFcbiAgICAgICAgICAgICAgICB9KSBhcyBJUGFydHlIb3N0W11cblxuICAgICAgICAgICAgICAgIGlmKEVycm9yVXRpbHMuaXNFcnJvcihyZXNwb25zZSkpe1xuICAgICAgICAgICAgICAgICAgICBsb2dFcnJvcihcIkNsdXN0ZXJTZXJ2aWNlOiBlcnJvciB3aGlsZSByZWdpc3RyYXRpbmcgcGFydGllc1wiLHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgICAgICAvL3RvZG8gcmV0YWtlIHBhcml0ZXNcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgb2YgcmVzcG9uc2UpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkUGFydHlIb3N0KGkpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgXG4gICAgICAgICAgICBvbkNsb3NlOigpPT57XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDbHVzdGVyU2VydmljZTogY29ubmVjdGlvbiB0byBIVUIgY2xvc2VkXCIpXG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0VG9IVUIoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgfVxuXG5cbiAgICBhZGRQYXJ0eUhvc3QocGFydHk6SVBhcnR5SG9zdCl7XG4gICAgICAgIGxvZ0luZm8oXCJDbHVzdGVyU2VydmljZTogYWRkIHBhcnR5IGhvc3RcIixwYXJ0eSlcbiAgICAgICAgdGhpcy5wYXJpdGVzLnNldChwYXJ0eS5pZCxwYXJ0eSk7XG4gICAgfVxuXG59Il19
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { Req } from "badmfck-signal";
|
2
|
+
import { BaseService } from "./BaseService";
|
3
|
+
export interface IDBSelectRequest {
|
4
|
+
}
|
5
|
+
export interface IDBSelectResponse {
|
6
|
+
}
|
7
|
+
export declare const DB_SELECT: Req<IDBSelectRequest, IDBSelectResponse>;
|
8
|
+
export declare class DBService extends BaseService {
|
9
|
+
id: string;
|
10
|
+
constructor(id: string);
|
11
|
+
}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.DBService = exports.DB_SELECT = void 0;
|
4
|
+
const badmfck_signal_1 = require("badmfck-signal");
|
5
|
+
const BaseService_1 = require("./BaseService");
|
6
|
+
exports.DB_SELECT = new badmfck_signal_1.Req(undefined, "DB_SELECT");
|
7
|
+
class DBService extends BaseService_1.BaseService {
|
8
|
+
id;
|
9
|
+
constructor(id) {
|
10
|
+
super("DB Service");
|
11
|
+
this.id = id;
|
12
|
+
}
|
13
|
+
}
|
14
|
+
exports.DBService = DBService;
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiREJTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaVNlcnZlci9EQlNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbURBQXFDO0FBQ3JDLCtDQUE0QztBQUsvQixRQUFBLFNBQVMsR0FBQyxJQUFJLG9CQUFHLENBQXFDLFNBQVMsRUFBQyxXQUFXLENBQUMsQ0FBQztBQUUxRixNQUFhLFNBQVUsU0FBUSx5QkFBVztJQUN0QyxFQUFFLENBQU87SUFDVCxZQUFZLEVBQVM7UUFDakIsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLENBQUM7Q0FDSjtBQU5ELDhCQU1DIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBSZXEgfSBmcm9tIFwiYmFkbWZjay1zaWduYWxcIjtcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSBcIi4vQmFzZVNlcnZpY2VcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJREJTZWxlY3RSZXF1ZXN0e31cbmV4cG9ydCBpbnRlcmZhY2UgSURCU2VsZWN0UmVzcG9uc2V7fVxuXG5leHBvcnQgY29uc3QgREJfU0VMRUNUPW5ldyBSZXE8SURCU2VsZWN0UmVxdWVzdCxJREJTZWxlY3RSZXNwb25zZT4odW5kZWZpbmVkLFwiREJfU0VMRUNUXCIpO1xuXG5leHBvcnQgY2xhc3MgREJTZXJ2aWNlIGV4dGVuZHMgQmFzZVNlcnZpY2Uge1xuICAgIGlkOnN0cmluZ1xuICAgIGNvbnN0cnVjdG9yKGlkOnN0cmluZykge1xuICAgICAgICBzdXBlcihcIkRCIFNlcnZpY2VcIik7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICB9XG59Il19
|
@@ -248,4 +248,4 @@ class HUBConnection {
|
|
248
248
|
}
|
249
249
|
}
|
250
250
|
exports.HUBConnection = HUBConnection;
|
251
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSFVCQ29ubmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGlTZXJ2ZXIvY2x1c3Rlci9IVUJDb25uZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkJBQXdDO0FBQ3hDLDhDQUFrRDtBQUNsRCw2RUFBd0U7QUFnQ3hFLE1BQWEsYUFBYTtJQUN0QixNQUFNLENBQUMsVUFBVSxHQUFRLENBQUMsQ0FBQztJQUNuQixTQUFTLEdBQThELElBQUksR0FBRyxFQUFFLENBQUM7SUFDekYsVUFBVSxHQUFXLEtBQUssQ0FBQztJQUNuQixFQUFFLENBQVc7SUFDYixZQUFZLENBQVU7SUFDOUIsT0FBTyxDQUF1QjtJQUU5QixZQUFZLE9BQTZCO1FBRXJDLElBQUEsb0JBQU8sRUFBQywrQkFBK0IsRUFBQyxPQUFPLENBQUMsTUFBTSxFQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUMsT0FBTyxDQUFDLFNBQVMsS0FBRyxVQUFVLENBQUEsQ0FBQyxDQUFBLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFDLE1BQU0sQ0FBQSxDQUFDLENBQUEsTUFBTSxDQUFDLENBQUM7UUFFckksSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQTtRQUd4QyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUMsR0FBRSxFQUFFO1lBQ25CLElBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVTtnQkFDZixPQUFPO1lBQ1gsSUFBQSxvQkFBTyxFQUFDLGtDQUFrQyxDQUFDLENBQUE7WUFDM0MsSUFBRyxPQUFPLENBQUMsT0FBTztnQkFDZCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFD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QUFDO2dCQUNoQixJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQ3ZCO1lBQUEsT0FBTSxDQUFDLEVBQUMsR0FBRTtTQUNkO0lBQ0wsQ0FBQzs7QUFoVEwsc0NBa1RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmF3RGF0YSwgV2ViU29ja2V0IH0gZnJvbSBcIndzXCI7XG5pbXBvcnQgeyBsb2dFcnJvciwgbG9nSW5mbyB9IGZyb20gXCIuLi9Mb2dTZXJ2aWNlXCI7XG5pbXBvcnQgRGVmYXVsdEVycm9ycywgeyBFcnJvclV0aWxzIH0gZnJvbSBcIi4uL3N0cnVjdHVyZXMvRGVmYXVsdEVycm9yc1wiO1xuaW1wb3J0IHsgSUVycm9yIH0gZnJvbSBcIi4uL3N0cnVjdHVyZXMvSW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgcHJpdmF0ZURlY3J5cHQgfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgU2lnbmFsLCB7IFJlcSB9IGZyb20gXCJiYWRtZmNrLXNpZ25hbFwiO1xuaW1wb3J0IHsgSVdlYnNvY2tldFBhY2tldCB9IGZyb20gXCIuLi9IVUJTZXJ2aWNlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNsdXN0ZXJQYWNrZXR7XG4gICAgbWV0aG9kOnN0cmluZyxcbiAgICBkYXRhPzphbnl8bnVsbCxcbiAgICBlcnJvcj86SUVycm9yLFxuICAgIGNhbGxiYWNrSUQ6bnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUhVQkNvbm5lY3Rpb25PcHRpb25ze1xuICAgIGRpcmVjdGlvbjpcImluY29taW5nXCJ8XCJvdXRnb2luZ1wiLFxuICAgIHdzOldlYlNvY2tldCxcblxuICAgIGhvc3RJRDpzdHJpbmcsXG4gICAgaG9zdFByaXZhdGVLZXk6c3RyaW5nLFxuICAgIGhvc3RQdWJsaWNLZXk6c3RyaW5nLFxuICAgIGhvc3RVUkw6c3RyaW5nLFxuXG4gICAgdGFyZ2V0SUQ6c3RyaW5nfG51bGwsXG4gICAgdGFyZ2V0UHVibGljS2V5OnN0cmluZ3xudWxsLFxuICAgIHRhcmdldFVSTDpzdHJpbmd8bnVsbCxcblxuICAgIG9uQXV0aG9yaXplZDooKT0+dm9pZCxcbiAgICBvbkNsb3NlOigpPT52b2lkLFxuICAgIGhhbmRsZXJzOihSZXE8YW55LGFueT58U2lnbmFsPGFueT4pW10sXG4gICAgbWF4VGltZW91dD86bnVtYmVyXG59XG5cbmV4cG9ydCBjbGFzcyBIVUJDb25uZWN0aW9ue1xuICAgIHN0YXRpYyBjYWxsYmFja0lEOm51bWJlcj0xO1xuICAgIHByaXZhdGUgY2FsbGJhY2tzOk1hcDxudW1iZXIse3RpbWU6bnVtYmVyLGNhbGxiYWNrOihyZXN1bHQ6YW55fElFcnJvcik9PnZvaWR9Pj1uZXcgTWFwKCk7XG4gICAgYXV0aG9yaXplZDpib29sZWFuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSB3czpXZWJTb2NrZXQ7XG4gICAgcHJpdmF0ZSBvbkF1dGhvcml6ZWQ6KCk9PnZvaWQ7XG4gICAgb3B0aW9uczpJSFVCQ29ubmVjdGlvbk9wdGlvbnM7XG4gICAgXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczpJSFVCQ29ubmVjdGlvbk9wdGlvbnMpe1xuICAgICAgICBcbiAgICAgICAgbG9nSW5mbyhcIkhVQkNvbm5lY3Rpb246IG5ldyBjb25uZWN0aW9uXCIsb3B0aW9ucy5ob3N0SUQsb3B0aW9ucy50YXJnZXRJRCxvcHRpb25zLmRpcmVjdGlvbj09PVwib3V0Z29pbmdcIj9vcHRpb25zLndzLnVybCtcIiAtLT5cIjpcIiA8LS1cIik7XG5cbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy53cyA9IG9wdGlvbnMud3M7XG4gICAgICAgIHRoaXMub25BdXRob3JpemVkID0gb3B0aW9ucy5vbkF1dGhvcml6ZWRcbiAgICAgICAgXG5cbiAgICAgICAgdGhpcy53cy5vbihcImNsb3NlXCIsKCk9PntcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dGhvcml6ZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgbG9nSW5mbyhcIkhVQkNvbm5lY3Rpb246IGNvbm5lY3Rpb24gY2xvc2VkXCIpXG4gICAgICAgICAgICBpZihvcHRpb25zLm9uQ2xvc2UpXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vbkNsb3NlKCk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgdGhpcy53cy5vbihcImVycm9yXCIsKGUpPT57XG4gICAgICAgICAgICBsb2dFcnJvcihcIkhVQkNvbm5lY3Rpb246IGNvbm5lY3Rpb24gZXJyb3JcIixlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy53cy5vbihcIm9wZW5cIiwoKT0+e1xuICAgICAgICAgICAgbG9nSW5mbyhcIkhVQkNvbm5lY3Rpb246IGNvbm5lY3Rpb24gb3BlbmVkXCIsb3B0aW9ucy5kaXJlY3Rpb24pXG4gICAgICAgICAgICBpZihvcHRpb25zLmRpcmVjdGlvbj09PVwib3V0Z29pbmdcIil7XG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIkhVQkNvbm5lY3Rpb246IHNlbmQgYXV0aHJvaXphdGlvblwiKVxuICAgICAgICAgICAgICAgIHRoaXMuc2VuZEF1dGgoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICB0aGlzLndzLm9uKFwibWVzc2FnZVwiLGFzeW5jIChtc2c6UmF3RGF0YSxpc0JpbmFyeSk9PntcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYoaXNCaW5hcnkpe1xuICAgICAgICAgICAgICAgIGxvZ0Vycm9yKFwiSFVCQ29ubmVjdGlvbjogaW52YWxpZCBwYWNrZXQgdHlwZSwgbXVzdCBiZSBhIHN0cmluZ1wiKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBkYXRhID0gbnVsbDtcbiAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShtc2cudG9TdHJpbmcoXCJ1dGY4XCIpKVxuICAgICAgICAgICAgfWNhdGNoKGUpe31cblxuICAgICAgICAgICAgLy9sb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogbWVzc2FnZSByZWNlaXZlZFwiLHRoaXMub3B0aW9ucy5kaXJlY3Rpb24sZGF0YSk7XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIHBhY2tldCBzdHJ1Y3R1cmVcbiAgICAgICAgICAgIGlmKCFkYXRhIHx8ICFkYXRhLm1ldGhvZCl7XG4gICAgICAgICAgICAgICAgbG9nRXJyb3IoXCJIVUJDb25uZWN0aW9uOiBpbnZhbGlkIHBhY2tldCBzdHJ1Y3R1cmVcIixkYXRhKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGhhbmRsZSBwYWNrZXRzXG4gICAgICAgICAgICBpZih0eXBlb2YgZGF0YS5tZXRob2QgIT09IFwic3RyaW5nXCIpe1xuICAgICAgICAgICAgICAgIGxvZ0Vycm9yKFwiSFVCQ29ubmVjdGlvbjogaW52YWxpZCBwYWNrZXQgc3RydWN0dXJlXCIsZGF0YSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjYWxsYmFja0lEXG4gICAgICAgICAgICBjb25zdCBjYWxsYmFja0lEID0gcGFyc2VJbnQoZGF0YS5jYWxsYmFja0lEKTtcbiAgICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGhhbmRsZSBjYWxsYmFja3NcbiAgICAgICAgICAgICBpZihkYXRhLm1ldGhvZD09PVwiY2FsbGJhY2tcIil7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDYWxsYmFjayhkYXRhKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dGhvcml6ZWQgJiYgZGF0YS5tZXRob2Q9PT1cImF1dGhcIil7XG4gICAgICAgICAgICAgICAgLy8gZG8gYXV0aG9yaXphdGlvbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmF1dGhvcml6ZShkYXRhLmRhdGEpO1xuICAgICAgICAgICAgICAgIGlmKEVycm9yVXRpbHMuaXNFcnJvcihyZXN1bHQpKXtcbiAgICAgICAgICAgICAgICAgICAgbG9nRXJyb3IoXCJIVUJDb25uZWN0aW9uOiBhdXRob3JpemF0aW9uIGZhaWxlZFwiLHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VuZENhbGxiYWNrKGNhbGxiYWNrSUQscmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmF1dGhvcml6ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMub25BdXRob3JpemVkKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQXV0aG9yaXplZCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VuZENhbGxiYWNrKGNhbGxiYWNrSUQscmVzdWx0KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dGhvcml6ZWQpe1xuICAgICAgICAgICAgICAgIGxvZ0Vycm9yKFwiSFVCQ29ubmVjdGlvbjogbm90IGF1dGhvcml6ZWRcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kQ2FsbGJhY2soY2FsbGJhY2tJRCxEZWZhdWx0RXJyb3JzLlVOQVVUSE9SSVpFRCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBoYW5kbGUgbWV0aG9kc1xuICAgICAgICAgICAgZm9yKGxldCBpIG9mIG9wdGlvbnMuaGFuZGxlcnMpe1xuICAgICAgICAgICAgICAgIGlmKGkubmFtZSA9PT0gZGF0YS5tZXRob2Qpe1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RQYWNrZXQ6SVdlYnNvY2tldFBhY2tldD17XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOmRhdGEuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml6ZWQ6dGhpcy5hdXRob3JpemVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbjp0aGlzXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZihpLnR5cGUgPT09IFwic2lnbmFsXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgKGkgYXMgU2lnbmFsPElXZWJzb2NrZXRQYWNrZXQ+KS5pbnZva2UocmVxdWVzdFBhY2tldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihkYXRhLmNhbGxiYWNrSUQ+MClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbmRDYWxsYmFjayhjYWxsYmFja0lELHt9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoaS50eXBlID09PSBcInJlcXVlc3RcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAoaSBhcyBSZXE8SVdlYnNvY2tldFBhY2tldCxhbnk+KS5yZXF1ZXN0KHJlcXVlc3RQYWNrZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZW5kQ2FsbGJhY2soY2FsbGJhY2tJRCxyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihjYWxsYmFja0lEPjApXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kQ2FsbGJhY2soY2FsbGJhY2tJRCx7Li4uRGVmYXVsdEVycm9ycy5OT1RfSU1QTEVNRU5URUQsZGV0YWlsczpcIm1ldGhvZCBub3QgZm91bmQ6IFwiK2RhdGEubWV0aG9kfSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgbG9nRXJyb3IoXCJIVUJDb25uZWN0aW9uOiBtZXRob2Qgbm90IGZvdW5kXCIsZGF0YS5tZXRob2QpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICB9KVxuXG4gICAgICAgIFxuICAgICAgICBzZXRUaW1lb3V0KCgpPT57XG4gICAgICAgICAgICBpZighdGhpcy5hdXRob3JpemVkKXtcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihcIkhVQkNvbm5lY3Rpb246IGF1dGhvcml6YXRpb24gdGltZW91dFwiLHRoaXMuYXV0aG9yaXplZClcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sMTUwMDApOyAvLyAxNXNlYyBmb3IgYXV0aG9yaXphdGlvblxuICAgICAgICBcblxuICAgICAgICBzZXRJbnRlcnZhbCgoKT0+e1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gK25ldyBEYXRlKCk7XG4gICAgICAgICAgICBmb3IobGV0IFtrZXksdmFsdWVdIG9mIHRoaXMuY2FsbGJhY2tzKXtcbiAgICAgICAgICAgICAgICBpZihub3ctdmFsdWUudGltZT4ob3B0aW9ucy5tYXhUaW1lb3V0ID8/IDEwMDAqNjAqMTUpKXtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUuY2FsbGJhY2soe21ldGhvZDpcImNhbGxiYWNrXCIsZGF0YTpudWxsLGNhbGxiYWNrSUQ6a2V5LGVycm9yOnsuLi5EZWZhdWx0RXJyb3JzLlRJTUVPVVR9fSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxvcHRpb25zLm1heFRpbWVvdXQgfHwgMTAwMCo2MCoxNSk7XG5cbiAgICB9XG5cblxuICAgIGFzeW5jIHNlbmRBdXRoKCl7XG4gICAgICAgLy8gbG9nSW5mbyhcIkhVQkNvbm5lY3Rpb246IHNlbmQgYXV0aCBwYWNrZXRcIilcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmQoe1xuICAgICAgICAgICAgbWV0aG9kOlwiYXV0aFwiLFxuICAgICAgICAgICAgZGF0YTp7XG4gICAgICAgICAgICAgICAgaG9zdElEOnRoaXMub3B0aW9ucy50YXJnZXRJRCwgLy8gUkVNT1RFIEhPU1QgSURcbiAgICAgICAgICAgICAgICB0YXJnZXRQdWJsaWNLZXk6dGhpcy5vcHRpb25zLmhvc3RQdWJsaWNLZXksIC8vIExPQ0FMIFBVQkxJQyBLRVlcbiAgICAgICAgICAgICAgICB0YXJnZXRVUkw6dGhpcy5vcHRpb25zLmhvc3RVUkwsIC8vIExPQ0FMIFVSTFxuICAgICAgICAgICAgICAgIHRhcmdldElEOnRoaXMub3B0aW9ucy5ob3N0SUQgLy8gTE9DQUwgSE9TVCBJRFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNhbGxiYWNrSUQ6MVxuICAgICAgICB9KVxuXG4gICAgICAgIGlmKEVycm9yVXRpbHMuaXNFcnJvcihyZXNwb25zZSkpe1xuICAgICAgICAgICAgbG9nRXJyb3IoXCJIVUJDb25uZWN0aW9uOiBhdXRoIGZhaWxlZFwiLHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYXV0aG9yaXplZD10cnVlO1xuICAgICAgICBcbiAgICAgICAgaWYoIXJlc3BvbnNlIHx8ICFyZXNwb25zZS5ob3N0SUQgfHwgIXJlc3BvbnNlLmhvc3RQdWJsaWNLZXkgfHwgIXJlc3BvbnNlLmhvc3RVUkwpe1xuICAgICAgICAgICAgbG9nRXJyb3IoXCJIVUJDb25uZWN0aW9uOiBpbnZhbGlkIGF1dGggcmVzcG9uc2VcIixyZXNwb25zZSk7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIHN0b3JlIHRhcmdldElELCB0YXJnZXRQdWJsaWNLZXksIHRhcmdldFVSTFxuICAgICAgICB0aGlzLm9wdGlvbnMudGFyZ2V0SUQgPSByZXNwb25zZS5ob3N0SUQ7XG4gICAgICAgIHRoaXMub3B0aW9ucy50YXJnZXRQdWJsaWNLZXkgPSByZXNwb25zZS5ob3N0UHVibGljS2V5O1xuICAgICAgICB0aGlzLm9wdGlvbnMudGFyZ2V0VVJMID0gcmVzcG9uc2UuaG9zdFVSTDtcbiAgICAgICAgXG4gICAgICAgLy8gbG9nSW5mbyhcIkhVQkNvbm5lY3Rpb246IGF1dGggc3VjY2Vzc1wiLHJlc3BvbnNlKTtcblxuICAgICAgICBpZih0aGlzLm9uQXV0aG9yaXplZClcbiAgICAgICAgICAgIHRoaXMub25BdXRob3JpemVkKCk7XG4gICAgICAgIFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBkYXRhIC0+IHtzaWduYXR1cmU6ZW5jcnlwdGVkIGh1YiBrZXkscHVibGljS2V5OmVuY3J5cHRlZCBwdWJsaWMga2V5LCBjbGllbnRJRDpjbGllbnRJRH1cbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBhc3luYyBhdXRob3JpemUoZGF0YTphbnkpOlByb21pc2U8YW55fElFcnJvcj57XG5cbiAgICAgICAgLy9sb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogdHJ5IHRvIGF1dGhvcml6ZSBjb25uZWN0aW9uXCIsZGF0YSk7XG5cbiAgICAgICAgaWYodHlwZW9mIGRhdGEgIT09IFwib2JqZWN0XCIgfHwgIWRhdGEgfHwgIWRhdGEuaG9zdElEIHx8ICFkYXRhLnRhcmdldFB1YmxpY0tleSB8fCAhZGF0YS50YXJnZXRJRCB8fCAhZGF0YS50YXJnZXRVUkwpXG4gICAgICAgICAgICByZXR1cm4gey4uLkRlZmF1bHRFcnJvcnMuQkFEX1JFUVVFU1Qsc3RhY2s6W2RhdGFdLGRldGFpbHM6XCJleHBlY3Rpbmcge2hvc3RJRDpzdHJpbmcsdGFyZ2V0UHVibGljS2V5OnN0cmluZyx0YXJnZXRJRDpzdHJpbmcsdGFyZ2V0VVJMOnN0cmluZ31cIn07XG5cbiAgICAgICAgaWYoZGF0YS5ob3N0SUQgIT09IHRoaXMub3B0aW9ucy5ob3N0SUQpXG4gICAgICAgICAgICByZXR1cm4gey4uLkRlZmF1bHRFcnJvcnMuVU5BVVRIT1JJWkVELGRldGFpbHM6XCJpbnZhbGlkIHRhcmdldElEXCJ9O1xuXG4gICAgICAgIC8vbG9nSW5mbyhcIkhVQkNvbm5lY3Rpb246IGF1dGhvcml6ZSBzdWNjZXNzXCIsdGhpcy5vcHRpb25zLmRpcmVjdGlvbixkYXRhKTtcblxuICAgICAgICAvLzEuIHN0b3JlIHRhcmdldCBpbmZvXG4gICAgICAgIHRoaXMub3B0aW9ucy50YXJnZXRJRCA9IGRhdGEudGFyZ2V0SUQ7XG4gICAgICAgIHRoaXMub3B0aW9ucy50YXJnZXRQdWJsaWNLZXkgPSBkYXRhLnRhcmdldFB1YmxpY0tleTtcbiAgICAgICAgdGhpcy5vcHRpb25zLnRhcmdldFVSTCA9IGRhdGEudGFyZ2V0VVJMO1xuXG4gICAgICAgIC8vMi4gc2VuZCBsb2NhbCBpbmZvXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBob3N0SUQ6dGhpcy5vcHRpb25zLmhvc3RJRCxcbiAgICAgICAgICAgIGhvc3RQdWJsaWNLZXk6dGhpcy5vcHRpb25zLmhvc3RQdWJsaWNLZXksXG4gICAgICAgICAgICBob3N0VVJMOnRoaXMub3B0aW9ucy5ob3N0VVJMXG4gICAgICAgIH1cblxuICAgIH1cblxuXG4gICAgaGFuZGxlQ2FsbGJhY2soZGF0YTpJQ2x1c3RlclBhY2tldCl7XG4gICAgICAgIFxuICAgICAgICBpZighdGhpcy5jYWxsYmFja3MuaGFzKGRhdGEuY2FsbGJhY2tJRCkpe1xuICAgICAgICAgICAgbG9nRXJyb3IoXCJIVUJDb25uZWN0aW9uOiBjYWxsYmFjayBub3QgZm91bmRcIixkYXRhKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL2xvZ0luZm8oXCJIVUJDb25uZWN0aW9uOiBleGVjdXRlIGNhbGxiYWNrXCIsZGF0YSk7XG5cbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGNiID0gdGhpcy5jYWxsYmFja3MuZ2V0KGRhdGEuY2FsbGJhY2tJRCk7XG4gICAgICAgIGlmKGNiKXtcbiAgICAgICAgICAgIGNiLmNhbGxiYWNrKGRhdGEuZGF0YSA/PyBkYXRhLmVycm9yKTtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmRlbGV0ZShkYXRhLmNhbGxiYWNrSUQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgXG4gICAgc2VuZENhbGxiYWNrKGNhbGxiYWNrSUQ6bnVtYmVyLGRhdGE6SUVycm9yfGFueSl7XG5cbiAgICAgICAgaWYoaXNOYU4oY2FsbGJhY2tJRCkgfHwgY2FsbGJhY2tJRDw9MCl7XG4gICAgICAgICAgICBsb2dFcnJvcihcIkhVQkNvbm5lY3Rpb246IGludmFsaWQgY2FsbGJhY2tJRFwiLGNhbGxiYWNrSUQsZGF0YSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgIC8vIGxvZ0luZm8oXCJIVUJDb25uZWN0aW9uOiBzZW5kIGNhbGxiYWNrXCIsZGF0YSk7XG5cbiAgICAgICAgaWYodGhpcy53cyAmJiB0aGlzLndzLnJlYWR5U3RhdGU9PT1XZWJTb2NrZXQuT1BFTil7XG4gICAgICAgICAgICB0aGlzLndzLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIG1ldGhvZDpcImNhbGxiYWNrXCIsXG4gICAgICAgICAgICAgICAgZXJyb3I6RXJyb3JVdGlscy5pc0Vycm9yKGRhdGEpP2RhdGE6bnVsbCxcbiAgICAgICAgICAgICAgICBkYXRhOkVycm9yVXRpbHMuaXNFcnJvcihkYXRhKT9udWxsOmRhdGEsXG4gICAgICAgICAgICAgICAgY2FsbGJhY2tJRDpjYWxsYmFja0lEXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBsb2dFcnJvcihcIkhVQkNvbm5lY3Rpb246IHdzIG5vdCBjb25uZWN0ZWQsIGNhbnQgc2VuZCBjYWxsYmFja1wiLHRoaXMub3B0aW9ucy5kaXJlY3Rpb24sZGF0YSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIHNlbmQocGFja2V0OklDbHVzdGVyUGFja2V0KTpQcm9taXNlPGFueXxJRXJyb3J8bnVsbD57XG4gICAgICAgLy8gbG9nSW5mbyhcIkhVQkNvbm5lY3Rpb246IHNlbmQgcGFja2V0XCIsdGhpcy5vcHRpb25zLmRpcmVjdGlvbixwYWNrZXQpO1xuICAgICAgICBpZighdGhpcy53cyB8fCB0aGlzLndzLnJlYWR5U3RhdGUgIT09IFdlYlNvY2tldC5PUEVOKXtcbiAgICAgICAgICAgIGxvZ0Vycm9yKFwiSFVCQ29ubmVjdGlvbjogd3Mgbm90IGNvbm5lY3RlZCwgY2FudCBzZW5kIHBhY2tldFwiLHBhY2tldClcbiAgICAgICAgICAgIHJldHVybiB7Li4uRGVmYXVsdEVycm9ycy5TRVJWSUNFX05PVF9XT1JLSU5HLGRldGFpbHM6XCJ3cyBub3QgY29ubmVjdGVkXCJ9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBsZXQgY2I9bnVsbDtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPElDbHVzdGVyUGFja2V0fG51bGw+KChyZXNvbHZlKT0+Y2I9cmVzb2x2ZSk7XG5cbiAgICAgICAgaWYocGFja2V0LmNhbGxiYWNrSUQ+MCl7XG4gICAgICAgICAgICBjb25zdCBjYWxsYmFja0lEID0gSFVCQ29ubmVjdGlvbi5jYWxsYmFja0lEKys7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zZXQoY2FsbGJhY2tJRCx7dGltZTorbmV3IERhdGUoKSxjYWxsYmFjazpjYiF9KTtcbiAgICAgICAgICAgIHBhY2tldC5jYWxsYmFja0lEID0gY2FsbGJhY2tJRDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vdG9kbyAtIGVuY3J5cHQgZGF0YVxuXG4gICAgICAgIHRoaXMud3Muc2VuZChKU09OLnN0cmluZ2lmeShwYWNrZXQpLGVycj0+e1xuICAgICAgICAgICAgaWYoZXJyKXtcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihcIkhVQkNvbm5lY3Rpb246IGNhbnQgc2VuZCBwYWNrZXRcIixlcnIpO1xuICAgICAgICAgICAgICAgIGlmKHBhY2tldC5jYWxsYmFja0lEPjApXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmRlbGV0ZShwYWNrZXQuY2FsbGJhY2tJRCk7XG4gICAgICAgICAgICAgICAgY2IhKERlZmF1bHRFcnJvcnMuU0VSVklDRV9OT1RfV09SS0lORyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmKHBhY2tldC5jYWxsYmFja0lEPT09MClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuXG4gICAgY2xvc2UoKXtcbiAgICAgICAgbG9nSW5mbyhcIkhVQkNvbm5lY3Rpb246IGNsb3NlIGNvbm5lY3Rpb25cIilcbiAgICAgICAgdGhpcy5jYWxsYmFja3MuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5hdXRob3JpemVkPWZhbHNlO1xuXG4gICAgICAgIGlmKHRoaXMud3Mpe1xuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIHRoaXMud3MucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy53cy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMud3MudGVybWluYXRlKCk7XG4gICAgICAgICAgICB9Y2F0Y2goZSl7fVxuICAgICAgICB9XG4gICAgfVxuXG59XG5cbiJdfQ==
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSFVCQ29ubmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGlTZXJ2ZXIvY2x1c3Rlci9IVUJDb25uZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkJBQXdDO0FBQ3hDLDhDQUFrRDtBQUNsRCw2RUFBd0U7QUFnQ3hFLE1BQWEsYUFBYTtJQUN0QixNQUFNLENBQUMsVUFBVSxHQUFRLENBQUMsQ0FBQztJQUNuQixTQUFTLEdBQThELElBQUksR0FBRyxFQUFFLENBQUM7SUFDekYsVUFBVSxHQUFXLEtBQUssQ0FBQztJQUNuQixFQUFFLENBQVc7SUFDYixZQUFZLENBQVU7SUFDOUIsT0FBTyxDQUF1QjtJQUU5QixZQUFZLE9BQTZCO1FBRXJDLElBQUEsb0JBQU8sRUFBQywrQkFBK0IsRUFBQyxPQUFPLENBQUMsTUFBTSxFQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUMsT0FBTyxDQUFDLFNBQVMsS0FBRyxVQUFVLENBQUEsQ0FBQyxDQUFBLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFDLE1BQU0sQ0FBQSxDQUFDLENBQUEsTUFBTSxDQUFDLENBQUM7UUFFckksSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQTtRQUd4QyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUMsR0FBRSxFQUFFO1lBQ25CLElBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVTtnQkFDZixPQUFPO1lBQ1gsSUFBQSxvQkFBTyxFQUFDLGtDQUFrQyxDQUFDLENBQUE7WUFDM0MsSUFBRyxPQUFPLENBQUMsT0FBTztnQkFDZCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFD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QUFDO2dCQUNoQixJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQ3ZCO1lBQUEsT0FBTSxDQUFDLEVBQUMsR0FBRTtTQUNkO0lBQ0wsQ0FBQzs7QUFoVEwsc0NBa1RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmF3RGF0YSwgV2ViU29ja2V0IH0gZnJvbSBcIndzXCI7XG5pbXBvcnQgeyBsb2dFcnJvciwgbG9nSW5mbyB9IGZyb20gXCIuLi9Mb2dTZXJ2aWNlXCI7XG5pbXBvcnQgRGVmYXVsdEVycm9ycywgeyBFcnJvclV0aWxzIH0gZnJvbSBcIi4uL3N0cnVjdHVyZXMvRGVmYXVsdEVycm9yc1wiO1xuaW1wb3J0IHsgSUVycm9yIH0gZnJvbSBcIi4uL3N0cnVjdHVyZXMvSW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgcHJpdmF0ZURlY3J5cHQgfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgU2lnbmFsLCB7IFJlcSB9IGZyb20gXCJiYWRtZmNrLXNpZ25hbFwiO1xuaW1wb3J0IHsgSVdlYnNvY2tldFBhY2tldCB9IGZyb20gXCIuLi9leHRlcm5hbC9FeHRlcm5hbFNlcnZpY2VcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJQ2x1c3RlclBhY2tldHtcbiAgICBtZXRob2Q6c3RyaW5nLFxuICAgIGRhdGE/OmFueXxudWxsLFxuICAgIGVycm9yPzpJRXJyb3IsXG4gICAgY2FsbGJhY2tJRDpudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSFVCQ29ubmVjdGlvbk9wdGlvbnN7XG4gICAgZGlyZWN0aW9uOlwiaW5jb21pbmdcInxcIm91dGdvaW5nXCIsXG4gICAgd3M6V2ViU29ja2V0LFxuXG4gICAgaG9zdElEOnN0cmluZyxcbiAgICBob3N0UHJpdmF0ZUtleTpzdHJpbmcsXG4gICAgaG9zdFB1YmxpY0tleTpzdHJpbmcsXG4gICAgaG9zdFVSTDpzdHJpbmcsXG5cbiAgICB0YXJnZXRJRDpzdHJpbmd8bnVsbCxcbiAgICB0YXJnZXRQdWJsaWNLZXk6c3RyaW5nfG51bGwsXG4gICAgdGFyZ2V0VVJMOnN0cmluZ3xudWxsLFxuXG4gICAgb25BdXRob3JpemVkOigpPT52b2lkLFxuICAgIG9uQ2xvc2U6KCk9PnZvaWQsXG4gICAgaGFuZGxlcnM6KFJlcTxhbnksYW55PnxTaWduYWw8YW55PilbXSxcbiAgICBtYXhUaW1lb3V0PzpudW1iZXJcbn1cblxuZXhwb3J0IGNsYXNzIEhVQkNvbm5lY3Rpb257XG4gICAgc3RhdGljIGNhbGxiYWNrSUQ6bnVtYmVyPTE7XG4gICAgcHJpdmF0ZSBjYWxsYmFja3M6TWFwPG51bWJlcix7dGltZTpudW1iZXIsY2FsbGJhY2s6KHJlc3VsdDphbnl8SUVycm9yKT0+dm9pZH0+PW5ldyBNYXAoKTtcbiAgICBhdXRob3JpemVkOmJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIHdzOldlYlNvY2tldDtcbiAgICBwcml2YXRlIG9uQXV0aG9yaXplZDooKT0+dm9pZDtcbiAgICBvcHRpb25zOklIVUJDb25uZWN0aW9uT3B0aW9ucztcbiAgICBcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOklIVUJDb25uZWN0aW9uT3B0aW9ucyl7XG4gICAgICAgIFxuICAgICAgICBsb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogbmV3IGNvbm5lY3Rpb25cIixvcHRpb25zLmhvc3RJRCxvcHRpb25zLnRhcmdldElELG9wdGlvbnMuZGlyZWN0aW9uPT09XCJvdXRnb2luZ1wiP29wdGlvbnMud3MudXJsK1wiIC0tPlwiOlwiIDwtLVwiKTtcblxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLndzID0gb3B0aW9ucy53cztcbiAgICAgICAgdGhpcy5vbkF1dGhvcml6ZWQgPSBvcHRpb25zLm9uQXV0aG9yaXplZFxuICAgICAgICBcblxuICAgICAgICB0aGlzLndzLm9uKFwiY2xvc2VcIiwoKT0+e1xuICAgICAgICAgICAgaWYoIXRoaXMuYXV0aG9yaXplZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBsb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogY29ubmVjdGlvbiBjbG9zZWRcIilcbiAgICAgICAgICAgIGlmKG9wdGlvbnMub25DbG9zZSlcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9uQ2xvc2UoKTtcbiAgICAgICAgfSlcblxuICAgICAgICB0aGlzLndzLm9uKFwiZXJyb3JcIiwoZSk9PntcbiAgICAgICAgICAgIGxvZ0Vycm9yKFwiSFVCQ29ubmVjdGlvbjogY29ubmVjdGlvbiBlcnJvclwiLGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLndzLm9uKFwib3BlblwiLCgpPT57XG4gICAgICAgICAgICBsb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogY29ubmVjdGlvbiBvcGVuZWRcIixvcHRpb25zLmRpcmVjdGlvbilcbiAgICAgICAgICAgIGlmKG9wdGlvbnMuZGlyZWN0aW9uPT09XCJvdXRnb2luZ1wiKXtcbiAgICAgICAgICAgICAgICBsb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogc2VuZCBhdXRocm9pemF0aW9uXCIpXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kQXV0aCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMud3Mub24oXCJtZXNzYWdlXCIsYXN5bmMgKG1zZzpSYXdEYXRhLGlzQmluYXJ5KT0+e1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZihpc0JpbmFyeSl7XG4gICAgICAgICAgICAgICAgbG9nRXJyb3IoXCJIVUJDb25uZWN0aW9uOiBpbnZhbGlkIHBhY2tldCB0eXBlLCBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGRhdGEgPSBudWxsO1xuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKG1zZy50b1N0cmluZyhcInV0ZjhcIikpXG4gICAgICAgICAgICB9Y2F0Y2goZSl7fVxuXG4gICAgICAgICAgICAvL2xvZ0luZm8oXCJIVUJDb25uZWN0aW9uOiBtZXNzYWdlIHJlY2VpdmVkXCIsdGhpcy5vcHRpb25zLmRpcmVjdGlvbixkYXRhKTtcblxuICAgICAgICAgICAgLy8gY2hlY2sgcGFja2V0IHN0cnVjdHVyZVxuICAgICAgICAgICAgaWYoIWRhdGEgfHwgIWRhdGEubWV0aG9kKXtcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihcIkhVQkNvbm5lY3Rpb246IGludmFsaWQgcGFja2V0IHN0cnVjdHVyZVwiLGRhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaGFuZGxlIHBhY2tldHNcbiAgICAgICAgICAgIGlmKHR5cGVvZiBkYXRhLm1ldGhvZCAhPT0gXCJzdHJpbmdcIil7XG4gICAgICAgICAgICAgICAgbG9nRXJyb3IoXCJIVUJDb25uZWN0aW9uOiBpbnZhbGlkIHBhY2tldCBzdHJ1Y3R1cmVcIixkYXRhKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNhbGxiYWNrSURcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrSUQgPSBwYXJzZUludChkYXRhLmNhbGxiYWNrSUQpO1xuICAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gaGFuZGxlIGNhbGxiYWNrc1xuICAgICAgICAgICAgIGlmKGRhdGEubWV0aG9kPT09XCJjYWxsYmFja1wiKXtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNhbGxiYWNrKGRhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYoIXRoaXMuYXV0aG9yaXplZCAmJiBkYXRhLm1ldGhvZD09PVwiYXV0aFwiKXtcbiAgICAgICAgICAgICAgICAvLyBkbyBhdXRob3JpemF0aW9uICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYXV0aG9yaXplKGRhdGEuZGF0YSk7XG4gICAgICAgICAgICAgICAgaWYoRXJyb3JVdGlscy5pc0Vycm9yKHJlc3VsdCkpe1xuICAgICAgICAgICAgICAgICAgICBsb2dFcnJvcihcIkhVQkNvbm5lY3Rpb246IGF1dGhvcml6YXRpb24gZmFpbGVkXCIscmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZW5kQ2FsbGJhY2soY2FsbGJhY2tJRCxyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5vbkF1dGhvcml6ZWQpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25BdXRob3JpemVkKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kQ2FsbGJhY2soY2FsbGJhY2tJRCxyZXN1bHQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYoIXRoaXMuYXV0aG9yaXplZCl7XG4gICAgICAgICAgICAgICAgbG9nRXJyb3IoXCJIVUJDb25uZWN0aW9uOiBub3QgYXV0aG9yaXplZFwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRDYWxsYmFjayhjYWxsYmFja0lELERlZmF1bHRFcnJvcnMuVU5BVVRIT1JJWkVEKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGhhbmRsZSBtZXRob2RzXG4gICAgICAgICAgICBmb3IobGV0IGkgb2Ygb3B0aW9ucy5oYW5kbGVycyl7XG4gICAgICAgICAgICAgICAgaWYoaS5uYW1lID09PSBkYXRhLm1ldGhvZCl7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdFBhY2tldDpJV2Vic29ja2V0UGFja2V0PXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6ZGF0YS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXplZDp0aGlzLmF1dGhvcml6ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uOnRoaXNcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmKGkudHlwZSA9PT0gXCJzaWduYWxcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAoaSBhcyBTaWduYWw8SVdlYnNvY2tldFBhY2tldD4pLmludm9rZShyZXF1ZXN0UGFja2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGEuY2FsbGJhY2tJRD4wKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VuZENhbGxiYWNrKGNhbGxiYWNrSUQse30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihpLnR5cGUgPT09IFwicmVxdWVzdFwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IChpIGFzIFJlcTxJV2Vic29ja2V0UGFja2V0LGFueT4pLnJlcXVlc3QocmVxdWVzdFBhY2tldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbmRDYWxsYmFjayhjYWxsYmFja0lELHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKGNhbGxiYWNrSUQ+MClcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRDYWxsYmFjayhjYWxsYmFja0lELHsuLi5EZWZhdWx0RXJyb3JzLk5PVF9JTVBMRU1FTlRFRCxkZXRhaWxzOlwibWV0aG9kIG5vdCBmb3VuZDogXCIrZGF0YS5tZXRob2R9KTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihcIkhVQkNvbm5lY3Rpb246IG1ldGhvZCBub3QgZm91bmRcIixkYXRhLm1ldGhvZCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgIH0pXG5cbiAgICAgICAgXG4gICAgICAgIHNldFRpbWVvdXQoKCk9PntcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dGhvcml6ZWQpe1xuICAgICAgICAgICAgICAgIGxvZ0Vycm9yKFwiSFVCQ29ubmVjdGlvbjogYXV0aG9yaXphdGlvbiB0aW1lb3V0XCIsdGhpcy5hdXRob3JpemVkKVxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwxNTAwMCk7IC8vIDE1c2VjIGZvciBhdXRob3JpemF0aW9uXG4gICAgICAgIFxuXG4gICAgICAgIHNldEludGVydmFsKCgpPT57XG4gICAgICAgICAgICBjb25zdCBub3cgPSArbmV3IERhdGUoKTtcbiAgICAgICAgICAgIGZvcihsZXQgW2tleSx2YWx1ZV0gb2YgdGhpcy5jYWxsYmFja3Mpe1xuICAgICAgICAgICAgICAgIGlmKG5vdy12YWx1ZS50aW1lPihvcHRpb25zLm1heFRpbWVvdXQgPz8gMTAwMCo2MCoxNSkpe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5jYWxsYmFjayh7bWV0aG9kOlwiY2FsbGJhY2tcIixkYXRhOm51bGwsY2FsbGJhY2tJRDprZXksZXJyb3I6ey4uLkRlZmF1bHRFcnJvcnMuVElNRU9VVH19KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LG9wdGlvbnMubWF4VGltZW91dCB8fCAxMDAwKjYwKjE1KTtcblxuICAgIH1cblxuXG4gICAgYXN5bmMgc2VuZEF1dGgoKXtcbiAgICAgICAvLyBsb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogc2VuZCBhdXRoIHBhY2tldFwiKVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZCh7XG4gICAgICAgICAgICBtZXRob2Q6XCJhdXRoXCIsXG4gICAgICAgICAgICBkYXRhOntcbiAgICAgICAgICAgICAgICBob3N0SUQ6dGhpcy5vcHRpb25zLnRhcmdldElELCAvLyBSRU1PVEUgSE9TVCBJRFxuICAgICAgICAgICAgICAgIHRhcmdldFB1YmxpY0tleTp0aGlzLm9wdGlvbnMuaG9zdFB1YmxpY0tleSwgLy8gTE9DQUwgUFVCTElDIEtFWVxuICAgICAgICAgICAgICAgIHRhcmdldFVSTDp0aGlzLm9wdGlvbnMuaG9zdFVSTCwgLy8gTE9DQUwgVVJMXG4gICAgICAgICAgICAgICAgdGFyZ2V0SUQ6dGhpcy5vcHRpb25zLmhvc3RJRCAvLyBMT0NBTCBIT1NUIElEXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2tJRDoxXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYoRXJyb3JVdGlscy5pc0Vycm9yKHJlc3BvbnNlKSl7XG4gICAgICAgICAgICBsb2dFcnJvcihcIkhVQkNvbm5lY3Rpb246IGF1dGggZmFpbGVkXCIscmVzcG9uc2UpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hdXRob3JpemVkPXRydWU7XG4gICAgICAgIFxuICAgICAgICBpZighcmVzcG9uc2UgfHwgIXJlc3BvbnNlLmhvc3RJRCB8fCAhcmVzcG9uc2UuaG9zdFB1YmxpY0tleSB8fCAhcmVzcG9uc2UuaG9zdFVSTCl7XG4gICAgICAgICAgICBsb2dFcnJvcihcIkhVQkNvbm5lY3Rpb246IGludmFsaWQgYXV0aCByZXNwb25zZVwiLHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgLy8gc3RvcmUgdGFyZ2V0SUQsIHRhcmdldFB1YmxpY0tleSwgdGFyZ2V0VVJMXG4gICAgICAgIHRoaXMub3B0aW9ucy50YXJnZXRJRCA9IHJlc3BvbnNlLmhvc3RJRDtcbiAgICAgICAgdGhpcy5vcHRpb25zLnRhcmdldFB1YmxpY0tleSA9IHJlc3BvbnNlLmhvc3RQdWJsaWNLZXk7XG4gICAgICAgIHRoaXMub3B0aW9ucy50YXJnZXRVUkwgPSByZXNwb25zZS5ob3N0VVJMO1xuICAgICAgICBcbiAgICAgICAvLyBsb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogYXV0aCBzdWNjZXNzXCIscmVzcG9uc2UpO1xuXG4gICAgICAgIGlmKHRoaXMub25BdXRob3JpemVkKVxuICAgICAgICAgICAgdGhpcy5vbkF1dGhvcml6ZWQoKTtcbiAgICAgICAgXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIGRhdGEgLT4ge3NpZ25hdHVyZTplbmNyeXB0ZWQgaHViIGtleSxwdWJsaWNLZXk6ZW5jcnlwdGVkIHB1YmxpYyBrZXksIGNsaWVudElEOmNsaWVudElEfVxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIGFzeW5jIGF1dGhvcml6ZShkYXRhOmFueSk6UHJvbWlzZTxhbnl8SUVycm9yPntcblxuICAgICAgICAvL2xvZ0luZm8oXCJIVUJDb25uZWN0aW9uOiB0cnkgdG8gYXV0aG9yaXplIGNvbm5lY3Rpb25cIixkYXRhKTtcblxuICAgICAgICBpZih0eXBlb2YgZGF0YSAhPT0gXCJvYmplY3RcIiB8fCAhZGF0YSB8fCAhZGF0YS5ob3N0SUQgfHwgIWRhdGEudGFyZ2V0UHVibGljS2V5IHx8ICFkYXRhLnRhcmdldElEIHx8ICFkYXRhLnRhcmdldFVSTClcbiAgICAgICAgICAgIHJldHVybiB7Li4uRGVmYXVsdEVycm9ycy5CQURfUkVRVUVTVCxzdGFjazpbZGF0YV0sZGV0YWlsczpcImV4cGVjdGluZyB7aG9zdElEOnN0cmluZyx0YXJnZXRQdWJsaWNLZXk6c3RyaW5nLHRhcmdldElEOnN0cmluZyx0YXJnZXRVUkw6c3RyaW5nfVwifTtcblxuICAgICAgICBpZihkYXRhLmhvc3RJRCAhPT0gdGhpcy5vcHRpb25zLmhvc3RJRClcbiAgICAgICAgICAgIHJldHVybiB7Li4uRGVmYXVsdEVycm9ycy5VTkFVVEhPUklaRUQsZGV0YWlsczpcImludmFsaWQgdGFyZ2V0SURcIn07XG5cbiAgICAgICAgLy9sb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogYXV0aG9yaXplIHN1Y2Nlc3NcIix0aGlzLm9wdGlvbnMuZGlyZWN0aW9uLGRhdGEpO1xuXG4gICAgICAgIC8vMS4gc3RvcmUgdGFyZ2V0IGluZm9cbiAgICAgICAgdGhpcy5vcHRpb25zLnRhcmdldElEID0gZGF0YS50YXJnZXRJRDtcbiAgICAgICAgdGhpcy5vcHRpb25zLnRhcmdldFB1YmxpY0tleSA9IGRhdGEudGFyZ2V0UHVibGljS2V5O1xuICAgICAgICB0aGlzLm9wdGlvbnMudGFyZ2V0VVJMID0gZGF0YS50YXJnZXRVUkw7XG5cbiAgICAgICAgLy8yLiBzZW5kIGxvY2FsIGluZm9cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhvc3RJRDp0aGlzLm9wdGlvbnMuaG9zdElELFxuICAgICAgICAgICAgaG9zdFB1YmxpY0tleTp0aGlzLm9wdGlvbnMuaG9zdFB1YmxpY0tleSxcbiAgICAgICAgICAgIGhvc3RVUkw6dGhpcy5vcHRpb25zLmhvc3RVUkxcbiAgICAgICAgfVxuXG4gICAgfVxuXG5cbiAgICBoYW5kbGVDYWxsYmFjayhkYXRhOklDbHVzdGVyUGFja2V0KXtcbiAgICAgICAgXG4gICAgICAgIGlmKCF0aGlzLmNhbGxiYWNrcy5oYXMoZGF0YS5jYWxsYmFja0lEKSl7XG4gICAgICAgICAgICBsb2dFcnJvcihcIkhVQkNvbm5lY3Rpb246IGNhbGxiYWNrIG5vdCBmb3VuZFwiLGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vbG9nSW5mbyhcIkhVQkNvbm5lY3Rpb246IGV4ZWN1dGUgY2FsbGJhY2tcIixkYXRhKTtcblxuICAgICAgICBcbiAgICAgICAgY29uc3QgY2IgPSB0aGlzLmNhbGxiYWNrcy5nZXQoZGF0YS5jYWxsYmFja0lEKTtcbiAgICAgICAgaWYoY2Ipe1xuICAgICAgICAgICAgY2IuY2FsbGJhY2soZGF0YS5kYXRhID8/IGRhdGEuZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuZGVsZXRlKGRhdGEuY2FsbGJhY2tJRCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBcbiAgICBzZW5kQ2FsbGJhY2soY2FsbGJhY2tJRDpudW1iZXIsZGF0YTpJRXJyb3J8YW55KXtcblxuICAgICAgICBpZihpc05hTihjYWxsYmFja0lEKSB8fCBjYWxsYmFja0lEPD0wKXtcbiAgICAgICAgICAgIGxvZ0Vycm9yKFwiSFVCQ29ubmVjdGlvbjogaW52YWxpZCBjYWxsYmFja0lEXCIsY2FsbGJhY2tJRCxkYXRhKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgLy8gbG9nSW5mbyhcIkhVQkNvbm5lY3Rpb246IHNlbmQgY2FsbGJhY2tcIixkYXRhKTtcblxuICAgICAgICBpZih0aGlzLndzICYmIHRoaXMud3MucmVhZHlTdGF0ZT09PVdlYlNvY2tldC5PUEVOKXtcbiAgICAgICAgICAgIHRoaXMud3Muc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgbWV0aG9kOlwiY2FsbGJhY2tcIixcbiAgICAgICAgICAgICAgICBlcnJvcjpFcnJvclV0aWxzLmlzRXJyb3IoZGF0YSk/ZGF0YTpudWxsLFxuICAgICAgICAgICAgICAgIGRhdGE6RXJyb3JVdGlscy5pc0Vycm9yKGRhdGEpP251bGw6ZGF0YSxcbiAgICAgICAgICAgICAgICBjYWxsYmFja0lEOmNhbGxiYWNrSURcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGxvZ0Vycm9yKFwiSFVCQ29ubmVjdGlvbjogd3Mgbm90IGNvbm5lY3RlZCwgY2FudCBzZW5kIGNhbGxiYWNrXCIsdGhpcy5vcHRpb25zLmRpcmVjdGlvbixkYXRhKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgc2VuZChwYWNrZXQ6SUNsdXN0ZXJQYWNrZXQpOlByb21pc2U8YW55fElFcnJvcnxudWxsPntcbiAgICAgICAvLyBsb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogc2VuZCBwYWNrZXRcIix0aGlzLm9wdGlvbnMuZGlyZWN0aW9uLHBhY2tldCk7XG4gICAgICAgIGlmKCF0aGlzLndzIHx8IHRoaXMud3MucmVhZHlTdGF0ZSAhPT0gV2ViU29ja2V0Lk9QRU4pe1xuICAgICAgICAgICAgbG9nRXJyb3IoXCJIVUJDb25uZWN0aW9uOiB3cyBub3QgY29ubmVjdGVkLCBjYW50IHNlbmQgcGFja2V0XCIscGFja2V0KVxuICAgICAgICAgICAgcmV0dXJuIHsuLi5EZWZhdWx0RXJyb3JzLlNFUlZJQ0VfTk9UX1dPUktJTkcsZGV0YWlsczpcIndzIG5vdCBjb25uZWN0ZWRcIn07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGxldCBjYj1udWxsO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8SUNsdXN0ZXJQYWNrZXR8bnVsbD4oKHJlc29sdmUpPT5jYj1yZXNvbHZlKTtcblxuICAgICAgICBpZihwYWNrZXQuY2FsbGJhY2tJRD4wKXtcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrSUQgPSBIVUJDb25uZWN0aW9uLmNhbGxiYWNrSUQrKztcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnNldChjYWxsYmFja0lELHt0aW1lOituZXcgRGF0ZSgpLGNhbGxiYWNrOmNiIX0pO1xuICAgICAgICAgICAgcGFja2V0LmNhbGxiYWNrSUQgPSBjYWxsYmFja0lEO1xuICAgICAgICB9XG5cbiAgICAgICAgLy90b2RvIC0gZW5jcnlwdCBkYXRhXG5cbiAgICAgICAgdGhpcy53cy5zZW5kKEpTT04uc3RyaW5naWZ5KHBhY2tldCksZXJyPT57XG4gICAgICAgICAgICBpZihlcnIpe1xuICAgICAgICAgICAgICAgIGxvZ0Vycm9yKFwiSFVCQ29ubmVjdGlvbjogY2FudCBzZW5kIHBhY2tldFwiLGVycik7XG4gICAgICAgICAgICAgICAgaWYocGFja2V0LmNhbGxiYWNrSUQ+MClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuZGVsZXRlKHBhY2tldC5jYWxsYmFja0lEKTtcbiAgICAgICAgICAgICAgICBjYiEoRGVmYXVsdEVycm9ycy5TRVJWSUNFX05PVF9XT1JLSU5HKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYocGFja2V0LmNhbGxiYWNrSUQ9PT0wKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG5cbiAgICBjbG9zZSgpe1xuICAgICAgICBsb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogY2xvc2UgY29ubmVjdGlvblwiKVxuICAgICAgICB0aGlzLmNhbGxiYWNrcy5jbGVhcigpO1xuICAgICAgICB0aGlzLmF1dGhvcml6ZWQ9ZmFsc2U7XG5cbiAgICAgICAgaWYodGhpcy53cyl7XG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgdGhpcy53cy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLndzLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy53cy50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgIH1jYXRjaChlKXt9XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuIl19
|
@@ -0,0 +1,37 @@
|
|
1
|
+
import { Req } from "badmfck-signal";
|
2
|
+
import { BaseService } from "../BaseService";
|
3
|
+
import { HTTPRequestVO, IError, TransferPacketVO } from "../structures/Interfaces";
|
4
|
+
export declare const REQ_EXTERNAL_CALL: Req<{
|
5
|
+
id: string;
|
6
|
+
requestName: string;
|
7
|
+
requestData: any;
|
8
|
+
}, any>;
|
9
|
+
export declare const REQ_XT: Req<{
|
10
|
+
id: string;
|
11
|
+
req: HTTPRequestVO;
|
12
|
+
}, TransferPacketVO<any>>;
|
13
|
+
export interface IExternalServiceOptions {
|
14
|
+
id: string;
|
15
|
+
localSecurityToken: string;
|
16
|
+
privateKey: string;
|
17
|
+
publicKey: string;
|
18
|
+
requests: Req<any, any>[];
|
19
|
+
partyURL: string;
|
20
|
+
}
|
21
|
+
export declare class ExternalService extends BaseService {
|
22
|
+
static allInstances: ExternalService[];
|
23
|
+
options: IExternalServiceOptions;
|
24
|
+
constructor(opt: IExternalServiceOptions);
|
25
|
+
init(): Promise<void>;
|
26
|
+
requestExternalCall({ id, requestName, requestData }: {
|
27
|
+
id: string;
|
28
|
+
requestName: string;
|
29
|
+
requestData: any;
|
30
|
+
}): Promise<any | IError>;
|
31
|
+
onExternalCall(req: HTTPRequestVO): Promise<TransferPacketVO>;
|
32
|
+
decrypt(req: HTTPRequestVO): any;
|
33
|
+
encrypt(req: any): {
|
34
|
+
authorization: string;
|
35
|
+
data: any;
|
36
|
+
};
|
37
|
+
}
|
@@ -0,0 +1,178 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
+
}) : function(o, v) {
|
16
|
+
o["default"] = v;
|
17
|
+
});
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
19
|
+
if (mod && mod.__esModule) return mod;
|
20
|
+
var result = {};
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
22
|
+
__setModuleDefault(result, mod);
|
23
|
+
return result;
|
24
|
+
};
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
27
|
+
};
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
29
|
+
exports.ExternalService = exports.REQ_XT = exports.REQ_EXTERNAL_CALL = void 0;
|
30
|
+
const badmfck_signal_1 = require("badmfck-signal");
|
31
|
+
const BaseService_1 = require("../BaseService");
|
32
|
+
const DefaultErrors_1 = __importStar(require("../structures/DefaultErrors"));
|
33
|
+
const Validator_1 = require("../helper/Validator");
|
34
|
+
const UID_1 = require("../helper/UID");
|
35
|
+
const crypto_1 = __importDefault(require("crypto"));
|
36
|
+
const axios_1 = __importDefault(require("axios"));
|
37
|
+
exports.REQ_EXTERNAL_CALL = new badmfck_signal_1.Req(undefined, "REQ_EXTERNAL_CALL");
|
38
|
+
exports.REQ_XT = new badmfck_signal_1.Req(undefined, "REQ_XT");
|
39
|
+
exports.REQ_XT.listener = async ({ id, req }) => {
|
40
|
+
if (ExternalService.allInstances.length === 0) {
|
41
|
+
console.error("ExternalService.allInstances.length === 0");
|
42
|
+
return { error: { ...DefaultErrors_1.default.BAD_REQUEST, details: "no external services" } };
|
43
|
+
}
|
44
|
+
for (let i of ExternalService.allInstances) {
|
45
|
+
if (i.options.id === id)
|
46
|
+
return await i.onExternalCall(req);
|
47
|
+
}
|
48
|
+
return { error: { ...DefaultErrors_1.default.BAD_REQUEST, details: "no external service found" } };
|
49
|
+
};
|
50
|
+
exports.REQ_EXTERNAL_CALL.listener = async ({ id, requestName, requestData }) => {
|
51
|
+
if (ExternalService.allInstances.length === 0) {
|
52
|
+
console.error("ExternalService.allInstances.length === 0");
|
53
|
+
return { ...DefaultErrors_1.default.BAD_REQUEST, details: "no external services" };
|
54
|
+
}
|
55
|
+
for (let i of ExternalService.allInstances) {
|
56
|
+
if (i.options.id === id)
|
57
|
+
return await i.requestExternalCall({ id, requestName, requestData });
|
58
|
+
}
|
59
|
+
return { ...DefaultErrors_1.default.BAD_REQUEST, details: "no external service found" };
|
60
|
+
};
|
61
|
+
class ExternalService extends BaseService_1.BaseService {
|
62
|
+
static allInstances = [];
|
63
|
+
options;
|
64
|
+
constructor(opt) {
|
65
|
+
super("ExternalService-" + opt.id);
|
66
|
+
for (let i of ExternalService.allInstances) {
|
67
|
+
if (i.options.id === opt.id)
|
68
|
+
throw { code: -1, message: "duplicate id" };
|
69
|
+
}
|
70
|
+
ExternalService.allInstances.push(this);
|
71
|
+
this.options = opt;
|
72
|
+
this.init();
|
73
|
+
}
|
74
|
+
init() {
|
75
|
+
return super.init();
|
76
|
+
}
|
77
|
+
async requestExternalCall({ id, requestName, requestData }) {
|
78
|
+
const encrypted = this.encrypt({ requestName, requestData });
|
79
|
+
try {
|
80
|
+
const resp = await axios_1.default.post(this.options.partyURL + "/external/call/" + this.options.id, encrypted.data, {
|
81
|
+
headers: {
|
82
|
+
"authorization": encrypted.authorization,
|
83
|
+
"Content-Type": "application/json",
|
84
|
+
"Accept": "application/json"
|
85
|
+
}
|
86
|
+
});
|
87
|
+
const data = resp.data;
|
88
|
+
if (typeof data === "object" && "error" in data)
|
89
|
+
return data.error;
|
90
|
+
if (typeof data === "object" && "data" in data)
|
91
|
+
return data.data;
|
92
|
+
return data;
|
93
|
+
}
|
94
|
+
catch (e) {
|
95
|
+
const err = e;
|
96
|
+
console.error("ExternalService.requestExternalCall", err);
|
97
|
+
if (err.response) {
|
98
|
+
if (err.response.data && typeof err.response.data === "object" && "error" in err.response.data)
|
99
|
+
return err.response.data.error;
|
100
|
+
}
|
101
|
+
return { ...DefaultErrors_1.default.BAD_REQUEST, details: err.cause?.message };
|
102
|
+
}
|
103
|
+
}
|
104
|
+
async onExternalCall(req) {
|
105
|
+
const data = this.decrypt(req);
|
106
|
+
if (!data)
|
107
|
+
return { error: { ...DefaultErrors_1.default.BAD_REQUEST, details: "no data" } };
|
108
|
+
if (!Validator_1.Validator.validateObject(['requestName', 'requestData'], data))
|
109
|
+
return { error: { ...DefaultErrors_1.default.BAD_REQUEST, details: "requestName and requestData required" } };
|
110
|
+
for (let r of this.options.requests) {
|
111
|
+
if (r.name === data.requestName) {
|
112
|
+
const response = await r.request(data.requestData);
|
113
|
+
if (DefaultErrors_1.ErrorUtils.isError(response))
|
114
|
+
return { error: response };
|
115
|
+
return { data: response };
|
116
|
+
}
|
117
|
+
}
|
118
|
+
return { error: { ...DefaultErrors_1.default.BAD_REQUEST, details: "no request found" } };
|
119
|
+
}
|
120
|
+
decrypt(req) {
|
121
|
+
if (!Validator_1.Validator.validateObject(['cdata', 'key'], req.data))
|
122
|
+
return { error: { ...DefaultErrors_1.default.BAD_REQUEST, details: "cdata or key is missing" } };
|
123
|
+
if (!req.data.cdata || req.data.cdata.length < 1)
|
124
|
+
return { error: { ...DefaultErrors_1.default.BAD_REQUEST, details: "cdata is empty" } };
|
125
|
+
if (typeof req.data.cdata !== "string")
|
126
|
+
return { error: { ...DefaultErrors_1.default.BAD_REQUEST, details: "cdata is not a string" } };
|
127
|
+
if (!req.headers || !req.headers['authorization'])
|
128
|
+
return { error: { ...DefaultErrors_1.default.BAD_REQUEST, details: "no authorization header" } };
|
129
|
+
let header = req.headers['authorization'].split(" ").pop();
|
130
|
+
const hash = UID_1.UID.sha256(this.options.localSecurityToken + req.data.cdata);
|
131
|
+
if (hash !== header)
|
132
|
+
return { error: { ...DefaultErrors_1.default.BAD_REQUEST, details: "wrong authorization token" } };
|
133
|
+
const iv_aesKey = crypto_1.default.privateDecrypt({
|
134
|
+
key: this.options.privateKey,
|
135
|
+
padding: crypto_1.default.constants.RSA_PKCS1_OAEP_PADDING
|
136
|
+
}, Buffer.from(req.data.key, 'base64'));
|
137
|
+
const iv = iv_aesKey.subarray(0, 16);
|
138
|
+
const key = iv_aesKey.subarray(16);
|
139
|
+
const decipher = crypto_1.default.createDecipheriv("aes-192-cbc", key, iv);
|
140
|
+
let decrypted = decipher.update(req.data.cdata, "base64", "utf8");
|
141
|
+
decrypted += decipher.final("utf8");
|
142
|
+
let data = null;
|
143
|
+
try {
|
144
|
+
data = JSON.parse(decrypted);
|
145
|
+
}
|
146
|
+
catch (e) {
|
147
|
+
return { error: { ...DefaultErrors_1.default.BAD_REQUEST, details: "wrong json: " + decrypted.substring(0, 100) } };
|
148
|
+
}
|
149
|
+
if (!data)
|
150
|
+
return { error: { ...DefaultErrors_1.default.BAD_REQUEST, details: "no data" } };
|
151
|
+
return data;
|
152
|
+
}
|
153
|
+
encrypt(req) {
|
154
|
+
const data = JSON.stringify(req);
|
155
|
+
const password = "UDhFUREQRm1IN4ACRuH5";
|
156
|
+
const iv = crypto_1.default.randomBytes(16);
|
157
|
+
const salt = "2b8869f12dd9d562";
|
158
|
+
const key = crypto_1.default.pbkdf2Sync(password, Buffer.from(salt, "hex"), 1000, 24, "sha1");
|
159
|
+
const cipher = crypto_1.default.createCipheriv("aes-192-cbc", key, iv);
|
160
|
+
let encrypted = cipher.update(data, "utf8", "base64");
|
161
|
+
encrypted += cipher.final("base64");
|
162
|
+
const concatenatedBuffer = Buffer.concat([iv, key]);
|
163
|
+
const encryptedKey = crypto_1.default.publicEncrypt({
|
164
|
+
key: this.options.publicKey,
|
165
|
+
padding: crypto_1.default.constants.RSA_PKCS1_OAEP_PADDING
|
166
|
+
}, concatenatedBuffer).toString("base64");
|
167
|
+
const encryptedPacket = {
|
168
|
+
key: encryptedKey,
|
169
|
+
cdata: encrypted
|
170
|
+
};
|
171
|
+
return {
|
172
|
+
authorization: UID_1.UID.sha256(this.options.localSecurityToken + encryptedPacket.cdata),
|
173
|
+
data: encryptedPacket
|
174
|
+
};
|
175
|
+
}
|
176
|
+
}
|
177
|
+
exports.ExternalService = ExternalService;
|
178
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXh0ZXJuYWxTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaVNlcnZlci9leHRlcm5hbC9FeHRlcm5hbFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFBNkM7QUFDN0MsZ0RBQTZDO0FBRTdDLDZFQUF3RTtBQUN4RSxtREFBZ0Q7QUFDaEQsdUNBQW9DO0FBQ3BDLG9EQUE0QjtBQUM1QixrREFBMEM7QUFJN0IsUUFBQSxpQkFBaUIsR0FBRyxJQUFJLG9CQUFHLENBSTFCLFNBQVMsRUFBQyxtQkFBbUIsQ0FBQyxDQUFBO0FBRy9CLFFBQUEsTUFBTSxHQUFHLElBQUksb0JBQUcsQ0FBaUQsU0FBUyxFQUFDLFFBQVEsQ0FBQyxDQUFBO0FBV2pHLGNBQU0sQ0FBQyxRQUFRLEdBQUMsS0FBSyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBK0IsRUFBQyxFQUFFO0lBRS9ELElBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFDO1FBQzVDLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQTtRQUMxRCxPQUFPLEVBQUMsS0FBSyxFQUFDLEVBQUMsR0FBRyx1QkFBYSxDQUFDLFdBQVcsRUFBQyxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsRUFBQyxDQUFBO0tBQzVFO0lBRUQsS0FBSSxJQUFJLENBQUMsSUFBSSxlQUFlLENBQUMsWUFBWSxFQUFDO1FBQ3pDLElBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRTtZQUNyQixPQUFPLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNwQztJQUVELE9BQU8sRUFBQyxLQUFLLEVBQUMsRUFBQyxHQUFHLHVCQUFhLENBQUMsV0FBVyxFQUFDLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxFQUFDLENBQUE7QUFDbEYsQ0FB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LENBQUMsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sWUFBWSxHQUFHLGdCQUFNLENBQUMsYUFBYSxDQUNyQztZQUNJLEdBQUcsRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVM7WUFDMUIsT0FBTyxFQUFDLGdCQUFNLENBQUMsU0FBUyxDQUFDLHNCQUFzQjtTQUNsRCxFQUNELGtCQUF5QixDQUM1QixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUdyQixNQUFNLGVBQWUsR0FBRztZQUNwQixHQUFHLEVBQUUsWUFBWTtZQUNqQixLQUFLLEVBQUUsU0FBUztTQUNuQixDQUFBO1FBRVAsT0FBTztZQUNOLGFBQWEsRUFBQyxTQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEdBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQztZQUMvRSxJQUFJLEVBQUMsZUFBZTtTQUNwQixDQUFBO0lBQ0YsQ0FBQzs7QUEvSkYsMENBaUtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFNpZ25hbCwgeyBSZXEgfSBmcm9tIFwiYmFkbWZjay1zaWduYWxcIjtcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSBcIi4uL0Jhc2VTZXJ2aWNlXCI7XG5pbXBvcnQgeyBIVFRQUmVxdWVzdFZPLCBJRXJyb3IsIFRyYW5zZmVyUGFja2V0Vk8gfSBmcm9tIFwiLi4vc3RydWN0dXJlcy9JbnRlcmZhY2VzXCI7XG5pbXBvcnQgRGVmYXVsdEVycm9ycywgeyBFcnJvclV0aWxzIH0gZnJvbSBcIi4uL3N0cnVjdHVyZXMvRGVmYXVsdEVycm9yc1wiO1xuaW1wb3J0IHsgVmFsaWRhdG9yIH0gZnJvbSBcIi4uL2hlbHBlci9WYWxpZGF0b3JcIjtcbmltcG9ydCB7IFVJRCB9IGZyb20gXCIuLi9oZWxwZXIvVUlEXCI7XG5pbXBvcnQgY3J5cHRvIGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCBheGlvcywgeyBBeGlvc0Vycm9yIH0gZnJvbSBcImF4aW9zXCI7XG5cblxuLy8gRXh0ZXJuYWwgY2FsbFxuZXhwb3J0IGNvbnN0IFJFUV9FWFRFUk5BTF9DQUxMID0gbmV3IFJlcTx7XG5cdGlkOnN0cmluZyxcblx0cmVxdWVzdE5hbWU6c3RyaW5nLFxuXHRyZXF1ZXN0RGF0YTphbnlcbn0sYW55fElFcnJvcj4odW5kZWZpbmVkLFwiUkVRX0VYVEVSTkFMX0NBTExcIikgXG5cblxuZXhwb3J0IGNvbnN0IFJFUV9YVCA9IG5ldyBSZXE8e2lkOnN0cmluZyxyZXE6SFRUUFJlcXVlc3RWT30sVHJhbnNmZXJQYWNrZXRWTz4odW5kZWZpbmVkLFwiUkVRX1hUXCIpIC8vIGV4dGVybmFsIGNhbGwgcmVjZWl2ZWQgXG5cbmV4cG9ydCBpbnRlcmZhY2UgSUV4dGVybmFsU2VydmljZU9wdGlvbnMge1xuXHRpZDpzdHJpbmc7IC8vIHNlcnZpY2UgaWRcblx0bG9jYWxTZWN1cml0eVRva2VuOnN0cmluZzsgLy8gXG5cdHByaXZhdGVLZXk6c3RyaW5nOyAvLyBwcml2YXRlIGtleSB0byBkZWNyeXB0IGRhdGEgZm9yIHRoaXMgc2VydmljZVxuXHRwdWJsaWNLZXk6c3RyaW5nOyAvLyBwdWJsaWMga2V5IHRvIGVuY3J5cHQgZGF0YSBmb3IgdGhpcyBzZXJ2aWNlXG5cdHJlcXVlc3RzOlJlcTxhbnksYW55PltdOyAvLyByZWdpc3RlcmVkIHJlcXVlc3RzXG5cdHBhcnR5VVJMOnN0cmluZzsgLy8gdXJsIHRvIHBhcnR5XG59XG5cblJFUV9YVC5saXN0ZW5lcj1hc3luYyAoe2lkLHJlcX06e2lkOnN0cmluZyxyZXE6SFRUUFJlcXVlc3RWT30pPT57XG5cdFxuXHRpZihFeHRlcm5hbFNlcnZpY2UuYWxsSW5zdGFuY2VzLmxlbmd0aCA9PT0gMCl7XG5cdFx0Y29uc29sZS5lcnJvcihcIkV4dGVybmFsU2VydmljZS5hbGxJbnN0YW5jZXMubGVuZ3RoID09PSAwXCIpXG5cdFx0cmV0dXJuIHtlcnJvcjp7Li4uRGVmYXVsdEVycm9ycy5CQURfUkVRVUVTVCxkZXRhaWxzOlwibm8gZXh0ZXJuYWwgc2VydmljZXNcIn19XG5cdH1cblxuXHRmb3IobGV0IGkgb2YgRXh0ZXJuYWxTZXJ2aWNlLmFsbEluc3RhbmNlcyl7XG5cdFx0aWYoaS5vcHRpb25zLmlkID09PSBpZClcblx0XHRcdHJldHVybiBhd2FpdCBpLm9uRXh0ZXJuYWxDYWxsKHJlcSk7XG5cdH1cblxuXHRyZXR1cm4ge2Vycm9yOnsuLi5EZWZhdWx0RXJyb3JzLkJBRF9SRVFVRVNULGRldGFpbHM6XCJubyBleHRlcm5hbCBzZXJ2aWNlIGZvdW5kXCJ9fVxufVxuXG5SRVFfRVhURVJOQUxfQ0FMTC5saXN0ZW5lcj1hc3luYyAoe2lkLHJlcXVlc3ROYW1lLHJlcXVlc3REYXRhfTp7aWQ6c3RyaW5nLHJlcXVlc3ROYW1lOnN0cmluZyxyZXF1ZXN0RGF0YTphbnl9KT0+e1xuXHRpZihFeHRlcm5hbFNlcnZpY2UuYWxsSW5zdGFuY2VzLmxlbmd0aCA9PT0gMCl7XG5cdFx0Y29uc29sZS5lcnJvcihcIkV4dGVybmFsU2VydmljZS5hbGxJbnN0YW5jZXMubGVuZ3RoID09PSAwXCIpXG5cdFx0cmV0dXJuIHsuLi5EZWZhdWx0RXJyb3JzLkJBRF9SRVFVRVNULGRldGFpbHM6XCJubyBleHRlcm5hbCBzZXJ2aWNlc1wifVxuXHR9XG5cblx0Zm9yKGxldCBpIG9mIEV4dGVybmFsU2VydmljZS5hbGxJbnN0YW5jZXMpe1xuXHRcdGlmKGkub3B0aW9ucy5pZCA9PT0gaWQpXG5cdFx0XHRyZXR1cm4gYXdhaXQgaS5yZXF1ZXN0RXh0ZXJuYWxDYWxsKHtpZCxyZXF1ZXN0TmFtZSxyZXF1ZXN0RGF0YX0pO1xuXHR9XG5cblx0cmV0dXJuIHsuLi5EZWZhdWx0RXJyb3JzLkJBRF9SRVFVRVNULGRldGFpbHM6XCJubyBleHRlcm5hbCBzZXJ2aWNlIGZvdW5kXCJ9XG59XG5cbmV4cG9ydCBjbGFzcyBFeHRlcm5hbFNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZSB7XG5cdFxuXHRzdGF0aWMgYWxsSW5zdGFuY2VzOkV4dGVybmFsU2VydmljZVtdID0gW107XG5cdG9wdGlvbnM6SUV4dGVybmFsU2VydmljZU9wdGlvbnNcblx0XG5cdGNvbnN0cnVjdG9yKG9wdDogSUV4dGVybmFsU2VydmljZU9wdGlvbnMpe1xuXHRcdHN1cGVyKFwiRXh0ZXJuYWxTZXJ2aWNlLVwiK29wdC5pZCk7XG5cdFx0Ly8gZmluZCBkdXBsaWNhdGVcblx0XHRmb3IobGV0IGkgb2YgRXh0ZXJuYWxTZXJ2aWNlLmFsbEluc3RhbmNlcyl7XG5cdFx0XHRpZihpLm9wdGlvbnMuaWQgPT09IG9wdC5pZClcblx0XHRcdFx0dGhyb3cge2NvZGU6LTEsbWVzc2FnZTpcImR1cGxpY2F0ZSBpZFwifVxuXHRcdH1cblx0XHRFeHRlcm5hbFNlcnZpY2UuYWxsSW5zdGFuY2VzLnB1c2godGhpcyk7XG5cdFx0dGhpcy5vcHRpb25zID0gb3B0O1xuXHRcdHRoaXMuaW5pdCgpO1xuXHR9XG5cdFxuXHRpbml0KCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiBzdXBlci5pbml0KCk7XG5cdH1cblxuXHRhc3luYyByZXF1ZXN0RXh0ZXJuYWxDYWxsKHtpZCxyZXF1ZXN0TmFtZSxyZXF1ZXN0RGF0YX06e2lkOnN0cmluZyxyZXF1ZXN0TmFtZTpzdHJpbmcscmVxdWVzdERhdGE6YW55fSk6UHJvbWlzZTxhbnl8SUVycm9yPntcblx0XHQvLzEuIHByZXBhcmUgZGF0YVxuXHRcdGNvbnN0IGVuY3J5cHRlZCA9IHRoaXMuZW5jcnlwdCh7cmVxdWVzdE5hbWUscmVxdWVzdERhdGF9KTtcblx0XHR0cnl7XG5cdFx0XHRjb25zdCByZXNwID0gYXdhaXQgYXhpb3MucG9zdCh0aGlzLm9wdGlvbnMucGFydHlVUkwrXCIvZXh0ZXJuYWwvY2FsbC9cIit0aGlzLm9wdGlvbnMuaWQsZW5jcnlwdGVkLmRhdGEse1xuXHRcdFx0XHRoZWFkZXJzOntcblx0XHRcdFx0XHRcImF1dGhvcml6YXRpb25cIjplbmNyeXB0ZWQuYXV0aG9yaXphdGlvbixcblx0XHRcdFx0XHRcIkNvbnRlbnQtVHlwZVwiOlwiYXBwbGljYXRpb24vanNvblwiLFxuXHRcdFx0XHRcdFwiQWNjZXB0XCI6XCJhcHBsaWNhdGlvbi9qc29uXCJcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdGNvbnN0IGRhdGEgPSByZXNwLmRhdGE7XG5cdFx0XHRpZih0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBcImVycm9yXCIgaW4gZGF0YSlcblx0XHRcdFx0cmV0dXJuIGRhdGEuZXJyb3I7XG5cdFx0XHRpZih0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBcImRhdGFcIiBpbiBkYXRhKVxuXHRcdFx0XHRyZXR1cm4gZGF0YS5kYXRhO1xuXG5cblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH1jYXRjaChlOmFueSl7XG5cdFx0XHRjb25zdCBlcnIgPSBlIGFzIEF4aW9zRXJyb3I7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiRXh0ZXJuYWxTZXJ2aWNlLnJlcXVlc3RFeHRlcm5hbENhbGxcIixlcnIpXG5cdFx0XHRpZihlcnIucmVzcG9uc2Upe1xuXHRcdFx0XHQvLyBoYW5kbGUgcmVzcG9uc2Vcblx0XHRcdFx0aWYoZXJyLnJlc3BvbnNlLmRhdGEgJiYgdHlwZW9mIGVyci5yZXNwb25zZS5kYXRhID09PVwib2JqZWN0XCIgJiYgXCJlcnJvclwiIGluIGVyci5yZXNwb25zZS5kYXRhKVxuXHRcdFx0XHRcdHJldHVybiBlcnIucmVzcG9uc2UuZGF0YS5lcnJvcjtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7Li4uRGVmYXVsdEVycm9ycy5CQURfUkVRVUVTVCxkZXRhaWxzOmVyci5jYXVzZT8ubWVzc2FnZX07XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgb25FeHRlcm5hbENhbGwocmVxOkhUVFBSZXF1ZXN0Vk8pOlByb21pc2U8VHJhbnNmZXJQYWNrZXRWTz57XG5cblx0XHQvLzEuIGNoZWNrIGF1dGhvcml6YXRpb25cblx0XHRjb25zdCBkYXRhID0gdGhpcy5kZWNyeXB0KHJlcSk7XG5cblx0XHRpZighZGF0YSlcblx0XHRcdHJldHVybiB7ZXJyb3I6ey4uLkRlZmF1bHRFcnJvcnMuQkFEX1JFUVVFU1QsZGV0YWlsczpcIm5vIGRhdGFcIn19O1xuXG5cdFx0aWYoIVZhbGlkYXRvci52YWxpZGF0ZU9iamVjdChbJ3JlcXVlc3ROYW1lJywncmVxdWVzdERhdGEnXSxkYXRhKSlcblx0XHRcdHJldHVybiB7ZXJyb3I6ey4uLkRlZmF1bHRFcnJvcnMuQkFEX1JFUVVFU1QsZGV0YWlsczpcInJlcXVlc3ROYW1lIGFuZCByZXF1ZXN0RGF0YSByZXF1aXJlZFwifX07XG5cblx0XHQvLzIuIGZpbmQgcmVxdWVzdFxuXHRcdGZvcihsZXQgciBvZiB0aGlzLm9wdGlvbnMucmVxdWVzdHMpe1xuXHRcdFx0aWYoci5uYW1lID09PSBkYXRhLnJlcXVlc3ROYW1lKXtcblx0XHRcdFx0Ly8zLiBjYWxsIHJlcXVlc3Rcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPWF3YWl0IHIucmVxdWVzdChkYXRhLnJlcXVlc3REYXRhKTtcblx0XHRcdFx0aWYoRXJyb3JVdGlscy5pc0Vycm9yKHJlc3BvbnNlKSlcblx0XHRcdFx0XHRyZXR1cm4ge2Vycm9yOnJlc3BvbnNlfTtcblx0XHRcdFx0cmV0dXJuIHtkYXRhOnJlc3BvbnNlfTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ge2Vycm9yOnsuLi5EZWZhdWx0RXJyb3JzLkJBRF9SRVFVRVNULGRldGFpbHM6XCJubyByZXF1ZXN0IGZvdW5kXCJ9fTtcblxuXHR9XG5cblx0ZGVjcnlwdChyZXE6SFRUUFJlcXVlc3RWTyk6YW55e1xuXG5cdFx0aWYoIVZhbGlkYXRvci52YWxpZGF0ZU9iamVjdChbJ2NkYXRhJywna2V5J10scmVxLmRhdGEpKVxuXHRcdFx0cmV0dXJuIHtlcnJvcjp7Li4uRGVmYXVsdEVycm9ycy5CQURfUkVRVUVTVCxkZXRhaWxzOlwiY2RhdGEgb3Iga2V5IGlzIG1pc3NpbmdcIn19XG5cdCAgXG5cdFx0aWYoIXJlcS5kYXRhLmNkYXRhIHx8IHJlcS5kYXRhLmNkYXRhLmxlbmd0aDwxKVxuXHRcdFx0cmV0dXJuIHtlcnJvcjp7Li4uRGVmYXVsdEVycm9ycy5CQURfUkVRVUVTVCxkZXRhaWxzOlwiY2RhdGEgaXMgZW1wdHlcIn19XG5cdCAgXG5cdFx0aWYodHlwZW9mIHJlcS5kYXRhLmNkYXRhICE9PSBcInN0cmluZ1wiKVxuXHRcdFx0cmV0dXJuIHtlcnJvcjp7Li4uRGVmYXVsdEVycm9ycy5CQURfUkVRVUVTVCxkZXRhaWxzOlwiY2RhdGEgaXMgbm90IGEgc3RyaW5nXCJ9fVxuXHQgIFxuXHRcdC8vIGNvbnN0IHNlY3J1cml0eVxuXHRcdGlmKCFyZXEuaGVhZGVycyB8fCAhcmVxLmhlYWRlcnNbJ2F1dGhvcml6YXRpb24nXSlcblx0XHRcdHJldHVybiB7ZXJyb3I6ey4uLkRlZmF1bHRFcnJvcnMuQkFEX1JFUVVFU1QsZGV0YWlsczpcIm5vIGF1dGhvcml6YXRpb24gaGVhZGVyXCJ9fVxuXHQgIFxuXHRcdC8vIGNoZWNrIGF1dGhvcml6YXRpb25cblx0XHRsZXQgaGVhZGVyID0gcmVxLmhlYWRlcnNbJ2F1dGhvcml6YXRpb24nXS5zcGxpdChcIiBcIikucG9wKCk7XG5cdFx0Y29uc3QgaGFzaCA9IFVJRC5zaGEyNTYodGhpcy5vcHRpb25zLmxvY2FsU2VjdXJpdHlUb2tlbityZXEuZGF0YS5jZGF0YSk7XG5cdFx0aWYoaGFzaCAhPT0gaGVhZGVyKVxuXHRcdFx0cmV0dXJuIHtlcnJvcjp7Li4uRGVmYXVsdEVycm9ycy5CQURfUkVRVUVTVCxkZXRhaWxzOlwid3JvbmcgYXV0aG9yaXphdGlvbiB0b2tlblwifX1cblx0XG5cdFx0Y29uc3QgaXZfYWVzS2V5ID0gY3J5cHRvLnByaXZhdGVEZWNyeXB0KFxuXHRcdFx0e1xuXHRcdFx0XHRrZXk6dGhpcy5vcHRpb25zLnByaXZhdGVLZXksXG5cdFx0XHRcdHBhZGRpbmc6Y3J5cHRvLmNvbnN0YW50cy5SU0FfUEtDUzFfT0FFUF9QQURESU5HXG5cdFx0XHR9LFxuXHRcdFx0QnVmZmVyLmZyb20ocmVxLmRhdGEua2V5LCdiYXNlNjQnKSBhcyBhbnlcblx0XHQpXG5cdFxuXHRcdGNvbnN0IGl2ID0gaXZfYWVzS2V5LnN1YmFycmF5KDAsMTYpXG5cdFx0Y29uc3Qga2V5ID0gaXZfYWVzS2V5LnN1YmFycmF5KDE2KTtcblx0XG5cdFx0Y29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihcImFlcy0xOTItY2JjXCIsIGtleSBhcyBhbnksIGl2IGFzIGFueSk7XG5cdFx0bGV0IGRlY3J5cHRlZCA9IGRlY2lwaGVyLnVwZGF0ZShyZXEuZGF0YS5jZGF0YSwgXCJiYXNlNjRcIiwgXCJ1dGY4XCIpO1xuXHRcdGRlY3J5cHRlZCArPSBkZWNpcGhlci5maW5hbChcInV0ZjhcIik7XG5cdFx0bGV0IGRhdGEgPSBudWxsO1xuXHRcdFxuXHRcdHRyeXtcblx0XHRcdGRhdGEgPSBKU09OLnBhcnNlKGRlY3J5cHRlZCk7XG5cdFx0fWNhdGNoKGUpe1xuXHRcdFx0cmV0dXJuIHtlcnJvcjp7Li4uRGVmYXVsdEVycm9ycy5CQURfUkVRVUVTVCxkZXRhaWxzOlwid3JvbmcganNvbjogXCIrZGVjcnlwdGVkLnN1YnN0cmluZygwLDEwMCl9fVxuXHRcdH1cblx0XG5cdFx0aWYoIWRhdGEpXG5cdFx0XHRyZXR1cm4ge2Vycm9yOnsuLi5EZWZhdWx0RXJyb3JzLkJBRF9SRVFVRVNULGRldGFpbHM6XCJubyBkYXRhXCJ9fVxuXHRcblx0XHRyZXR1cm4gZGF0YTtcblx0ICBcblx0fVxuXG5cblx0ZW5jcnlwdChyZXE6IGFueSk6IHthdXRob3JpemF0aW9uOnN0cmluZyxkYXRhOmFueX0ge1xuXG5cdFx0Y29uc3QgZGF0YSA9IEpTT04uc3RyaW5naWZ5KHJlcSk7XG5cdFx0Y29uc3QgcGFzc3dvcmQgPSBcIlVEaEZVUkVRUm0xSU40QUNSdUg1XCJcblx0XHRjb25zdCBpdiA9IGNyeXB0by5yYW5kb21CeXRlcygxNik7IC8vIDE2IGJ5dGVzICgxMjggYml0cyk7IGNhbiBhbHNvIHVzZSBjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpXG5cdFx0Y29uc3Qgc2FsdCA9IFwiMmI4ODY5ZjEyZGQ5ZDU2MlwiOyAvLyA4IGJ5dGVzOyBjYW4gYWxzbyB1c2UgY3J5cHRvLnJhbmRvbUJ5dGVzKDgpXG5cdFx0Y29uc3Qga2V5ID0gY3J5cHRvLnBia2RmMlN5bmMocGFzc3dvcmQsIEJ1ZmZlci5mcm9tKHNhbHQsIFwiaGV4XCIpIGFzIGFueSwgMTAwMCwgMjQsIFwic2hhMVwiKTtcblx0XHRjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoXCJhZXMtMTkyLWNiY1wiLCBrZXkgYXMgYW55LCBpdiBhcyBhbnkpO1xuXHRcdGxldCBlbmNyeXB0ZWQgPSBjaXBoZXIudXBkYXRlKGRhdGEsIFwidXRmOFwiLCBcImJhc2U2NFwiKTtcblx0XHRlbmNyeXB0ZWQgKz0gY2lwaGVyLmZpbmFsKFwiYmFzZTY0XCIpO1xuXG4gICAgICAgIGNvbnN0IGNvbmNhdGVuYXRlZEJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW2l2IGFzIGFueSwga2V5IGFzIGFueV0pO1xuICAgICAgICBjb25zdCBlbmNyeXB0ZWRLZXkgPSBjcnlwdG8ucHVibGljRW5jcnlwdChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBrZXk6dGhpcy5vcHRpb25zLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOmNyeXB0by5jb25zdGFudHMuUlNBX1BLQ1MxX09BRVBfUEFERElOR1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbmNhdGVuYXRlZEJ1ZmZlciBhcyBhbnlcbiAgICAgICAgKS50b1N0cmluZyhcImJhc2U2NFwiKTtcblxuXG4gICAgICAgIGNvbnN0IGVuY3J5cHRlZFBhY2tldCA9IHtcbiAgICAgICAgICAgIGtleTogZW5jcnlwdGVkS2V5LFxuICAgICAgICAgICAgY2RhdGE6IGVuY3J5cHRlZFxuICAgICAgICB9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0YXV0aG9yaXphdGlvbjpVSUQuc2hhMjU2KHRoaXMub3B0aW9ucy5sb2NhbFNlY3VyaXR5VG9rZW4rZW5jcnlwdGVkUGFja2V0LmNkYXRhKSxcblx0XHRcdGRhdGE6ZW5jcnlwdGVkUGFja2V0XG5cdFx0fVxuXHR9XG5cdFxufSJdfQ==
|
@@ -0,0 +1,6 @@
|
|
1
|
+
import { BaseEndpoint } from "../BaseEndpoint";
|
2
|
+
import { HTTPRequestVO, TransferPacketVO } from "../structures/Interfaces";
|
3
|
+
export declare class ExternalServiceEndpoint extends BaseEndpoint {
|
4
|
+
constructor();
|
5
|
+
handler(req: HTTPRequestVO): Promise<TransferPacketVO>;
|
6
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.ExternalServiceEndpoint = void 0;
|
4
|
+
const BaseEndpoint_1 = require("../BaseEndpoint");
|
5
|
+
class ExternalServiceEndpoint extends BaseEndpoint_1.BaseEndpoint {
|
6
|
+
constructor() {
|
7
|
+
super("external");
|
8
|
+
this.registerEndpoints([
|
9
|
+
{ endpoint: "call/@id", handler: this.handler, ignoreInterceptor: true }
|
10
|
+
]);
|
11
|
+
}
|
12
|
+
async handler(req) {
|
13
|
+
return {
|
14
|
+
data: "ok"
|
15
|
+
};
|
16
|
+
}
|
17
|
+
}
|
18
|
+
exports.ExternalServiceEndpoint = ExternalServiceEndpoint;
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXh0ZXJuYWxTZXJ2aWNlRW5kcG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpU2VydmVyL2V4dGVybmFsL0V4dGVybmFsU2VydmljZUVuZHBvaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGtEQUErQztBQUcvQyxNQUFhLHVCQUF3QixTQUFRLDJCQUFZO0lBQ3JEO1FBQ0ksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUNuQixFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFDLElBQUksQ0FBQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsSUFBSSxFQUFDO1NBQ3BFLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQWlCO1FBQzNCLE9BQU87WUFDSCxJQUFJLEVBQUMsSUFBSTtTQUNaLENBQUE7SUFDTCxDQUFDO0NBQ0o7QUFiRCwwREFhQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VFbmRwb2ludCB9IGZyb20gXCIuLi9CYXNlRW5kcG9pbnRcIjtcbmltcG9ydCB7IEhUVFBSZXF1ZXN0Vk8sIFRyYW5zZmVyUGFja2V0Vk8gfSBmcm9tIFwiLi4vc3RydWN0dXJlcy9JbnRlcmZhY2VzXCI7XG5cbmV4cG9ydCBjbGFzcyBFeHRlcm5hbFNlcnZpY2VFbmRwb2ludCBleHRlbmRzIEJhc2VFbmRwb2ludCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiZXh0ZXJuYWxcIik7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFbmRwb2ludHMoW1xuICAgICAgICAgICAge2VuZHBvaW50OlwiY2FsbC9AaWRcIixoYW5kbGVyOnRoaXMuaGFuZGxlcixpZ25vcmVJbnRlcmNlcHRvcjp0cnVlfVxuICAgICAgICBdKVxuICAgIH1cblxuICAgIGFzeW5jIGhhbmRsZXIocmVxOkhUVFBSZXF1ZXN0Vk8pOlByb21pc2U8VHJhbnNmZXJQYWNrZXRWTz57XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhOlwib2tcIlxuICAgICAgICB9XG4gICAgfVxufSJdfQ==
|
@@ -1,4 +1,6 @@
|
|
1
|
+
/// <reference types="node" />
|
1
2
|
import { FileArray } from "express-fileupload";
|
3
|
+
import { Readable } from "stream";
|
2
4
|
export interface TransferPacketVO<T = any> {
|
3
5
|
data?: T | null;
|
4
6
|
error?: IError | null;
|
@@ -13,9 +15,11 @@ export interface TransferPacketVO<T = any> {
|
|
13
15
|
[key: string]: string;
|
14
16
|
};
|
15
17
|
file?: string;
|
18
|
+
blockResponse?: boolean;
|
16
19
|
}
|
17
20
|
export interface HTTPRequestVO<T = any> {
|
18
21
|
raw: any;
|
22
|
+
response: any;
|
19
23
|
method: string;
|
20
24
|
data: T;
|
21
25
|
params: {
|
@@ -32,6 +36,7 @@ export interface HTTPRequestVO<T = any> {
|
|
32
36
|
referer?: string;
|
33
37
|
unlocked?: boolean;
|
34
38
|
internalCall?: boolean;
|
39
|
+
stream?: Readable;
|
35
40
|
}
|
36
41
|
export interface IError {
|
37
42
|
code: number;
|
@@ -1,3 +1,3 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGlTZXJ2ZXIvc3RydWN0dXJlcy9JbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWxlQXJyYXksIFVwbG9hZGVkRmlsZSB9IGZyb20gXCJleHByZXNzLWZpbGV1cGxvYWRcIlxuaW1wb3J0IHsgUmVhZGFibGUgfSBmcm9tIFwic3RyZWFtXCJcblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2ZlclBhY2tldFZPPFQ9YW55PntcbiAgICBkYXRhPzpUfG51bGwsXG4gICAgZXJyb3I/OklFcnJvcnxudWxsLFxuICAgIHJlc3BvbnNlVGltZT86bnVtYmVyXG4gICAgdmVyc2lvbj86c3RyaW5nLFxuICAgIGNvcmU/OnN0cmluZyxcbiAgICBlbmRwb2ludD86c3RyaW5nXG4gICAgaHR0cFN0YXR1cz86bnVtYmVyLFxuICAgIHJlZGlyZWN0PzpzdHJpbmdcbiAgICByYXdSZXNwb25zZT86Ym9vbGVhblxuICAgIGhlYWRlcnM/Ontba2V5OnN0cmluZ106c3RyaW5nfVxuICAgIGZpbGU/OnN0cmluZyxcbiAgICBibG9ja1Jlc3BvbnNlPzpib29sZWFuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSFRUUFJlcXVlc3RWTzxUPWFueT57XG4gICAgcmF3OmFueSxcbiAgICByZXNwb25zZTphbnksXG4gICAgbWV0aG9kOnN0cmluZyxcbiAgICBkYXRhOlQsXG4gICAgcGFyYW1zOntba2V5OnN0cmluZ106c3RyaW5nfSxcbiAgICBoZWFkZXJzOntba2V5OnN0cmluZ106c3RyaW5nfSxcbiAgICBlbmRwb2ludDpzdHJpbmdcbiAgICBpbnRlcmNlcHRvclJlc3VsdD86VHJhbnNmZXJQYWNrZXRWTzxhbnk+XG4gICAgcHJlcHJvZHVjZXJSZXN1bHQ/OmFueVxuICAgIHByZWNoZWNrPzpUcmFuc2ZlclBhY2tldFZPPGFueT58bnVsbFxuICAgIGZpbGVzOkZpbGVBcnJheSB8IG51bGwgfCB1bmRlZmluZWRcbiAgICByZWZlcmVyPzpzdHJpbmdcbiAgICB1bmxvY2tlZD86Ym9vbGVhblxuICAgIGludGVybmFsQ2FsbD86Ym9vbGVhblxuICAgIHN0cmVhbT86UmVhZGFibGVcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRXJyb3J7XG4gICAgY29kZTpudW1iZXIsXG4gICAgbWVzc2FnZTpzdHJpbmcsXG4gICAgZGV0YWlscz86c3RyaW5nLFxuICAgIGh0dHBTdGF0dXM/Om51bWJlclxuICAgIHN0YWNrPzpJRXJyb3JbXVxufSJdfQ==
|
package/dist/index.d.ts
CHANGED
@@ -7,7 +7,5 @@ import { ErrorUtils } from "./apiServer/structures/DefaultErrors";
|
|
7
7
|
import { S_MONITOR_REGISTRATE_ACTION } from "./apiServer/monitor/Monitor";
|
8
8
|
import { DataProvider } from "./apiServer/helper/DataProvider";
|
9
9
|
import { UID } from "./apiServer/helper/UID";
|
10
|
-
import {
|
11
|
-
|
12
|
-
import { ClusterService } from "./apiServer/ClusterService";
|
13
|
-
export { UID, APIService, Initializer, LocalRequest, MysqlService, Validator, LogService, DataProvider, ErrorUtils, HUBService, ClusterService, HUBConnection, S_MONITOR_REGISTRATE_ACTION };
|
10
|
+
import { ExternalService } from "./apiServer/external/ExternalService";
|
11
|
+
export { UID, APIService, Initializer, LocalRequest, MysqlService, Validator, LogService, DataProvider, ErrorUtils, ExternalService, S_MONITOR_REGISTRATE_ACTION };
|
package/dist/index.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.S_MONITOR_REGISTRATE_ACTION = exports.
|
3
|
+
exports.S_MONITOR_REGISTRATE_ACTION = exports.ExternalService = exports.ErrorUtils = exports.DataProvider = exports.LogService = exports.Validator = exports.MysqlService = exports.LocalRequest = exports.Initializer = exports.APIService = exports.UID = void 0;
|
4
4
|
const APIService_1 = require("./apiServer/APIService");
|
5
5
|
Object.defineProperty(exports, "APIService", { enumerable: true, get: function () { return APIService_1.APIService; } });
|
6
6
|
Object.defineProperty(exports, "Initializer", { enumerable: true, get: function () { return APIService_1.Initializer; } });
|
@@ -20,10 +20,6 @@ const DataProvider_1 = require("./apiServer/helper/DataProvider");
|
|
20
20
|
Object.defineProperty(exports, "DataProvider", { enumerable: true, get: function () { return DataProvider_1.DataProvider; } });
|
21
21
|
const UID_1 = require("./apiServer/helper/UID");
|
22
22
|
Object.defineProperty(exports, "UID", { enumerable: true, get: function () { return UID_1.UID; } });
|
23
|
-
const
|
24
|
-
Object.defineProperty(exports, "
|
25
|
-
|
26
|
-
Object.defineProperty(exports, "HUBConnection", { enumerable: true, get: function () { return HUBConnection_1.HUBConnection; } });
|
27
|
-
const ClusterService_1 = require("./apiServer/ClusterService");
|
28
|
-
Object.defineProperty(exports, "ClusterService", { enumerable: true, get: function () { return ClusterService_1.ClusterService; } });
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdURBQWdFO0FBZTVELDJGQWZLLHVCQUFVLE9BZUw7QUFDViw0RkFoQmdCLHdCQUFXLE9BZ0JoQjtBQWZmLDJEQUF3RDtBQWdCcEQsNkZBaEJLLDJCQUFZLE9BZ0JMO0FBZmhCLDJEQUFxRDtBQWdCakQsNkZBaEJJLDJCQUFZLE9BZ0JKO0FBZmhCLDREQUF5RDtBQWdCckQsMEZBaEJLLHFCQUFTLE9BZ0JMO0FBZmIsdURBQW9EO0FBZ0JoRCwyRkFoQkssdUJBQVUsT0FnQkw7QUFmZCx3RUFBa0U7QUFpQjlELDJGQWpCSywwQkFBVSxPQWlCTDtBQWhCZCx5REFBMEU7QUFvQnRFLDRHQXBCSyxxQ0FBMkIsT0FvQkw7QUFuQi9CLGtFQUErRDtBQWMzRCw2RkFkSywyQkFBWSxPQWNMO0FBYmhCLGdEQUE2QztBQU16QyxvRkFOSyxTQUFHLE9BTUw7QUFMUCx1REFBb0Q7QUFjaEQsMkZBZEssdUJBQVUsT0FjTDtBQWJkLHFFQUFrRTtBQWU5RCw4RkFmSyw2QkFBYSxPQWVMO0FBZGpCLCtEQUE0RDtBQWF4RCwrRkFiSywrQkFBYyxPQWFMIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBJU2VydmljZSxJbml0aWFsaXplciB9IGZyb20gXCIuL2FwaVNlcnZlci9BUElTZXJ2aWNlXCI7XG5pbXBvcnQgeyBMb2NhbFJlcXVlc3QgfSBmcm9tIFwiLi9hcGlTZXJ2ZXIvTG9jYWxSZXF1ZXN0XCI7XG5pbXBvcnQge015c3FsU2VydmljZX0gZnJvbSBcIi4vYXBpU2VydmVyL015c3FsU2VydmljZVwiXG5pbXBvcnQgeyBWYWxpZGF0b3IgfSBmcm9tIFwiLi9hcGlTZXJ2ZXIvaGVscGVyL1ZhbGlkYXRvclwiO1xuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gXCIuL2FwaVNlcnZlci9Mb2dTZXJ2aWNlXCI7XG5pbXBvcnQgeyBFcnJvclV0aWxzIH0gZnJvbSBcIi4vYXBpU2VydmVyL3N0cnVjdHVyZXMvRGVmYXVsdEVycm9yc1wiO1xuaW1wb3J0IHsgU19NT05JVE9SX1JFR0lTVFJBVEVfQUNUSU9OIH0gZnJvbSBcIi4vYXBpU2VydmVyL21vbml0b3IvTW9uaXRvclwiO1xuaW1wb3J0IHsgRGF0YVByb3ZpZGVyIH0gZnJvbSBcIi4vYXBpU2VydmVyL2hlbHBlci9EYXRhUHJvdmlkZXJcIjtcbmltcG9ydCB7IFVJRCB9IGZyb20gXCIuL2FwaVNlcnZlci9oZWxwZXIvVUlEXCI7XG5pbXBvcnQgeyBIVUJTZXJ2aWNlIH0gZnJvbSBcIi4vYXBpU2VydmVyL0hVQlNlcnZpY2VcIjtcbmltcG9ydCB7IEhVQkNvbm5lY3Rpb24gfSBmcm9tIFwiLi9hcGlTZXJ2ZXIvY2x1c3Rlci9IVUJDb25uZWN0aW9uXCI7XG5pbXBvcnQgeyBDbHVzdGVyU2VydmljZSB9IGZyb20gXCIuL2FwaVNlcnZlci9DbHVzdGVyU2VydmljZVwiO1xuXG5leHBvcnQge1xuICAgIFVJRCxcbiAgICBBUElTZXJ2aWNlLFxuICAgIEluaXRpYWxpemVyLFxuICAgIExvY2FsUmVxdWVzdCxcbiAgICBNeXNxbFNlcnZpY2UsXG4gICAgVmFsaWRhdG9yLFxuICAgIExvZ1NlcnZpY2UsXG4gICAgRGF0YVByb3ZpZGVyLFxuICAgIEVycm9yVXRpbHMsXG4gICAgSFVCU2VydmljZSxcbiAgICBDbHVzdGVyU2VydmljZSxcbiAgICBIVUJDb25uZWN0aW9uLFxuICAgIFNfTU9OSVRPUl9SRUdJU1RSQVRFX0FDVElPTlxufSJdfQ==
|
23
|
+
const ExternalService_1 = require("./apiServer/external/ExternalService");
|
24
|
+
Object.defineProperty(exports, "ExternalService", { enumerable: true, get: function () { return ExternalService_1.ExternalService; } });
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdURBQWdFO0FBYzVELDJGQWRLLHVCQUFVLE9BY0w7QUFDViw0RkFmZ0Isd0JBQVcsT0FlaEI7QUFkZiwyREFBd0Q7QUFlcEQsNkZBZkssMkJBQVksT0FlTDtBQWRoQiwyREFBcUQ7QUFlakQsNkZBZkksMkJBQVksT0FlSjtBQWRoQiw0REFBeUQ7QUFlckQsMEZBZksscUJBQVMsT0FlTDtBQWRiLHVEQUFvRDtBQWVoRCwyRkFmSyx1QkFBVSxPQWVMO0FBZGQsd0VBQWtFO0FBZ0I5RCwyRkFoQkssMEJBQVUsT0FnQkw7QUFmZCx5REFBMEU7QUFpQnRFLDRHQWpCSyxxQ0FBMkIsT0FpQkw7QUFoQi9CLGtFQUErRDtBQWEzRCw2RkFiSywyQkFBWSxPQWFMO0FBWmhCLGdEQUE2QztBQUt6QyxvRkFMSyxTQUFHLE9BS0w7QUFKUCwwRUFBdUU7QUFhbkUsZ0dBYkssaUNBQWUsT0FhTCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQSVNlcnZpY2UsSW5pdGlhbGl6ZXIgfSBmcm9tIFwiLi9hcGlTZXJ2ZXIvQVBJU2VydmljZVwiO1xuaW1wb3J0IHsgTG9jYWxSZXF1ZXN0IH0gZnJvbSBcIi4vYXBpU2VydmVyL0xvY2FsUmVxdWVzdFwiO1xuaW1wb3J0IHtNeXNxbFNlcnZpY2V9IGZyb20gXCIuL2FwaVNlcnZlci9NeXNxbFNlcnZpY2VcIlxuaW1wb3J0IHsgVmFsaWRhdG9yIH0gZnJvbSBcIi4vYXBpU2VydmVyL2hlbHBlci9WYWxpZGF0b3JcIjtcbmltcG9ydCB7IExvZ1NlcnZpY2UgfSBmcm9tIFwiLi9hcGlTZXJ2ZXIvTG9nU2VydmljZVwiO1xuaW1wb3J0IHsgRXJyb3JVdGlscyB9IGZyb20gXCIuL2FwaVNlcnZlci9zdHJ1Y3R1cmVzL0RlZmF1bHRFcnJvcnNcIjtcbmltcG9ydCB7IFNfTU9OSVRPUl9SRUdJU1RSQVRFX0FDVElPTiB9IGZyb20gXCIuL2FwaVNlcnZlci9tb25pdG9yL01vbml0b3JcIjtcbmltcG9ydCB7IERhdGFQcm92aWRlciB9IGZyb20gXCIuL2FwaVNlcnZlci9oZWxwZXIvRGF0YVByb3ZpZGVyXCI7XG5pbXBvcnQgeyBVSUQgfSBmcm9tIFwiLi9hcGlTZXJ2ZXIvaGVscGVyL1VJRFwiO1xuaW1wb3J0IHsgRXh0ZXJuYWxTZXJ2aWNlIH0gZnJvbSBcIi4vYXBpU2VydmVyL2V4dGVybmFsL0V4dGVybmFsU2VydmljZVwiO1xuXG5cbmV4cG9ydCB7XG4gICAgVUlELFxuICAgIEFQSVNlcnZpY2UsXG4gICAgSW5pdGlhbGl6ZXIsXG4gICAgTG9jYWxSZXF1ZXN0LFxuICAgIE15c3FsU2VydmljZSxcbiAgICBWYWxpZGF0b3IsXG4gICAgTG9nU2VydmljZSxcbiAgICBEYXRhUHJvdmlkZXIsXG4gICAgRXJyb3JVdGlscyxcbiAgICBFeHRlcm5hbFNlcnZpY2UsXG4gICAgU19NT05JVE9SX1JFR0lTVFJBVEVfQUNUSU9OXG59Il19
|