chat4app-client-angular 1.0.16 → 1.0.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/chat4app-client-angular.umd.js +26 -25
- package/bundles/chat4app-client-angular.umd.js.map +1 -1
- package/bundles/chat4app-client-angular.umd.min.js +1 -1
- package/bundles/chat4app-client-angular.umd.min.js.map +1 -1
- package/chat4app-client-angular.metadata.json +1 -1
- package/esm2015/lib/chat4app-client-angular.service.js +26 -26
- package/fesm2015/chat4app-client-angular.js +25 -25
- package/fesm2015/chat4app-client-angular.js.map +1 -1
- package/lib/chat4app-client-angular.service.d.ts +1 -0
- package/lib/chat4app-client-angular.service.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"__symbolic":"module","version":4,"metadata":{"Chat4appClientAngularService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":8,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/common/http","name":"HttpClient","line":27,"character":31}]}],"ngOnInit":[{"__symbolic":"method"}],"config":[{"__symbolic":"method"}],"init":[{"__symbolic":"method"}],"getChatUrlDownload":[{"__symbolic":"method"}],"getMessageChat":[{"__symbolic":"method"}],"getMessageChatByGrop":[{"__symbolic":"method"}],"addMessageChat":[{"__symbolic":"method"}],"removeUsersChat":[{"__symbolic":"method"}],"removeUserChat":[{"__symbolic":"method"}],"updateUserChat":[{"__symbolic":"method"}],"createUserChat":[{"__symbolic":"method"}],"createUsersChat":[{"__symbolic":"method"}],"createChat":[{"__symbolic":"method"}],"createUpdateChat":[{"__symbolic":"method"}],"getChatByExternalId":[{"__symbolic":"method"}],"getChatById":[{"__symbolic":"method"}],"listChatByUser":[{"__symbolic":"method"}],"closeChat":[{"__symbolic":"method"}],"readMessage":[{"__symbolic":"method"}],"online":[{"__symbolic":"method"}],"setOffLine":[{"__symbolic":"method"}],"sendFile":[{"__symbolic":"method"}],"sendFileGroup":[{"__symbolic":"method"}],"startTyping":[{"__symbolic":"method"}],"startTypingGroup":[{"__symbolic":"method"}],"stopTyping":[{"__symbolic":"method"}],"stopTypingGroup":[{"__symbolic":"method"}],"createGroup":[{"__symbolic":"method"}],"getGroup":[{"__symbolic":"method"}],"listGroups":[{"__symbolic":"method"}],"listFilesGroup":[{"__symbolic":"method"}],"event":[{"__symbolic":"method"}],"getBearerToken":[{"__symbolic":"method"}],"setTokenChat4app":[{"__symbolic":"method"}],"ensureConn":[{"__symbolic":"method"}],"disconnect":[{"__symbolic":"method"}],"disconnectInternal":[{"__symbolic":"method"}],"processAndCallback":[{"__symbolic":"method"}],"connectWebsocket":[{"__symbolic":"method"}],"convertChat4AppMessageReceiveToChatMessage4App":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}},"Chat4App":{"__symbolic":"class","members":{}},"ChatUser4App":{"__symbolic":"class","members":{}},"ChatMessage4App":{"__symbolic":"class","members":{}},"ChatMessageFile4App":{"__symbolic":"class","members":{}},"ChatMessageMeta4App":{"__symbolic":"class","members":{}},"Chat4AppMessageReceive":{"__symbolic":"class","members":{}},"Chat4AppMessageReceiveData":{"__symbolic":"class","members":{}},"Chat4AppMessageReceiveNotification":{"__symbolic":"class","members":{}},"ChatUserResponse4App":{"__symbolic":"class","members":{}},"ChatFilterRequest4App":{"__symbolic":"class","members":{}},"Chat4AppConfig":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","name":"boolean"}]}]}},"Chat4AppTranslate":{"__symbolic":"class","members":{}},"ChatGroupApp":{"__symbolic":"class","members":{}},"ChatStatus4App":{"CREATED":"CREATED","CLOSED":"CLOSED"},"ChatUserStatus4App":{"REMOVED":"REMOVED"},"ChatFilterType":{"COUNT_NOT_READ":1,"LAST_MESSAGE":2},"GroupStatus4App":{"CREATED":"CREATED","CLOSED":"REMOVED"},"IChatCallback":{"__symbolic":"interface"},"Chat4appClientAngularComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":2,"character":1},"arguments":[{"selector":"lib-chat4app-client-angular","template":"\n <p>\n chat4app-client-angular works!\n </p>\n ","styles":[]}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"ngOnInit":[{"__symbolic":"method"}]}},"Chat4appClientAngularModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":5,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"Chat4appClientAngularComponent"}],"imports":[],"exports":[{"__symbolic":"reference","name":"Chat4appClientAngularComponent"}]}]}],"members":{}}},"origins":{"Chat4appClientAngularService":"./lib/chat4app-client-angular.service","Chat4App":"./lib/chat4app-client-angular.service","ChatUser4App":"./lib/chat4app-client-angular.service","ChatMessage4App":"./lib/chat4app-client-angular.service","ChatMessageFile4App":"./lib/chat4app-client-angular.service","ChatMessageMeta4App":"./lib/chat4app-client-angular.service","Chat4AppMessageReceive":"./lib/chat4app-client-angular.service","Chat4AppMessageReceiveData":"./lib/chat4app-client-angular.service","Chat4AppMessageReceiveNotification":"./lib/chat4app-client-angular.service","ChatUserResponse4App":"./lib/chat4app-client-angular.service","ChatFilterRequest4App":"./lib/chat4app-client-angular.service","Chat4AppConfig":"./lib/chat4app-client-angular.service","Chat4AppTranslate":"./lib/chat4app-client-angular.service","ChatGroupApp":"./lib/chat4app-client-angular.service","ChatStatus4App":"./lib/chat4app-client-angular.service","ChatUserStatus4App":"./lib/chat4app-client-angular.service","ChatFilterType":"./lib/chat4app-client-angular.service","GroupStatus4App":"./lib/chat4app-client-angular.service","IChatCallback":"./lib/chat4app-client-angular.service","Chat4appClientAngularComponent":"./lib/chat4app-client-angular.component","Chat4appClientAngularModule":"./lib/chat4app-client-angular.module"},"importAs":"chat4app-client-angular"}
|
|
1
|
+
{"__symbolic":"module","version":4,"metadata":{"Chat4appClientAngularService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":8,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/common/http","name":"HttpClient","line":27,"character":31}]}],"ngOnInit":[{"__symbolic":"method"}],"config":[{"__symbolic":"method"}],"init":[{"__symbolic":"method"}],"getChatUrlDownload":[{"__symbolic":"method"}],"getMessageChat":[{"__symbolic":"method"}],"getMessageChatByGrop":[{"__symbolic":"method"}],"addMessageChat":[{"__symbolic":"method"}],"removeUsersChat":[{"__symbolic":"method"}],"removeUserChat":[{"__symbolic":"method"}],"updateUserChat":[{"__symbolic":"method"}],"createUserChat":[{"__symbolic":"method"}],"createUsersChat":[{"__symbolic":"method"}],"createChat":[{"__symbolic":"method"}],"createUpdateChat":[{"__symbolic":"method"}],"getChatByExternalId":[{"__symbolic":"method"}],"getChatById":[{"__symbolic":"method"}],"listChatByUser":[{"__symbolic":"method"}],"closeChat":[{"__symbolic":"method"}],"readMessage":[{"__symbolic":"method"}],"online":[{"__symbolic":"method"}],"setOffLine":[{"__symbolic":"method"}],"sendFile":[{"__symbolic":"method"}],"sendFileGroup":[{"__symbolic":"method"}],"startTyping":[{"__symbolic":"method"}],"startTypingGroup":[{"__symbolic":"method"}],"stopTyping":[{"__symbolic":"method"}],"stopTypingGroup":[{"__symbolic":"method"}],"createGroup":[{"__symbolic":"method"}],"getGroup":[{"__symbolic":"method"}],"listGroups":[{"__symbolic":"method"}],"listFilesGroup":[{"__symbolic":"method"}],"event":[{"__symbolic":"method"}],"getBearerToken":[{"__symbolic":"method"}],"setTokenChat4app":[{"__symbolic":"method"}],"ensureConn":[{"__symbolic":"method"}],"setIntervalPing":[{"__symbolic":"method"}],"disconnect":[{"__symbolic":"method"}],"disconnectInternal":[{"__symbolic":"method"}],"processAndCallback":[{"__symbolic":"method"}],"connectWebsocket":[{"__symbolic":"method"}],"convertChat4AppMessageReceiveToChatMessage4App":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}},"Chat4App":{"__symbolic":"class","members":{}},"ChatUser4App":{"__symbolic":"class","members":{}},"ChatMessage4App":{"__symbolic":"class","members":{}},"ChatMessageFile4App":{"__symbolic":"class","members":{}},"ChatMessageMeta4App":{"__symbolic":"class","members":{}},"Chat4AppMessageReceive":{"__symbolic":"class","members":{}},"Chat4AppMessageReceiveData":{"__symbolic":"class","members":{}},"Chat4AppMessageReceiveNotification":{"__symbolic":"class","members":{}},"ChatUserResponse4App":{"__symbolic":"class","members":{}},"ChatFilterRequest4App":{"__symbolic":"class","members":{}},"Chat4AppConfig":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","name":"boolean"}]}]}},"Chat4AppTranslate":{"__symbolic":"class","members":{}},"ChatGroupApp":{"__symbolic":"class","members":{}},"ChatStatus4App":{"CREATED":"CREATED","CLOSED":"CLOSED"},"ChatUserStatus4App":{"REMOVED":"REMOVED"},"ChatFilterType":{"COUNT_NOT_READ":1,"LAST_MESSAGE":2},"GroupStatus4App":{"CREATED":"CREATED","CLOSED":"REMOVED"},"IChatCallback":{"__symbolic":"interface"},"Chat4appClientAngularComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":2,"character":1},"arguments":[{"selector":"lib-chat4app-client-angular","template":"\n <p>\n chat4app-client-angular works!\n </p>\n ","styles":[]}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"ngOnInit":[{"__symbolic":"method"}]}},"Chat4appClientAngularModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":5,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"Chat4appClientAngularComponent"}],"imports":[],"exports":[{"__symbolic":"reference","name":"Chat4appClientAngularComponent"}]}]}],"members":{}}},"origins":{"Chat4appClientAngularService":"./lib/chat4app-client-angular.service","Chat4App":"./lib/chat4app-client-angular.service","ChatUser4App":"./lib/chat4app-client-angular.service","ChatMessage4App":"./lib/chat4app-client-angular.service","ChatMessageFile4App":"./lib/chat4app-client-angular.service","ChatMessageMeta4App":"./lib/chat4app-client-angular.service","Chat4AppMessageReceive":"./lib/chat4app-client-angular.service","Chat4AppMessageReceiveData":"./lib/chat4app-client-angular.service","Chat4AppMessageReceiveNotification":"./lib/chat4app-client-angular.service","ChatUserResponse4App":"./lib/chat4app-client-angular.service","ChatFilterRequest4App":"./lib/chat4app-client-angular.service","Chat4AppConfig":"./lib/chat4app-client-angular.service","Chat4AppTranslate":"./lib/chat4app-client-angular.service","ChatGroupApp":"./lib/chat4app-client-angular.service","ChatStatus4App":"./lib/chat4app-client-angular.service","ChatUserStatus4App":"./lib/chat4app-client-angular.service","ChatFilterType":"./lib/chat4app-client-angular.service","GroupStatus4App":"./lib/chat4app-client-angular.service","IChatCallback":"./lib/chat4app-client-angular.service","Chat4appClientAngularComponent":"./lib/chat4app-client-angular.component","Chat4appClientAngularModule":"./lib/chat4app-client-angular.module"},"importAs":"chat4app-client-angular"}
|
|
@@ -25,7 +25,6 @@ export class Chat4appClientAngularService {
|
|
|
25
25
|
init(securityChatToken, chatCallback, connectionClientId) {
|
|
26
26
|
return new Observable((subscriber) => {
|
|
27
27
|
try {
|
|
28
|
-
// 1. Validações Iniciais
|
|
29
28
|
if (!this.chatServer || this.chatServer.trim().length === 0) {
|
|
30
29
|
subscriber.error(new Error("Endpoint is empty"));
|
|
31
30
|
return;
|
|
@@ -34,14 +33,12 @@ export class Chat4appClientAngularService {
|
|
|
34
33
|
subscriber.error(new Error("SecurityChatToken is empty"));
|
|
35
34
|
return;
|
|
36
35
|
}
|
|
37
|
-
// 2. Lógica de Negócio
|
|
38
36
|
this.setTokenChat4app(securityChatToken);
|
|
39
37
|
if (chatCallback && connectionClientId) {
|
|
40
38
|
this.chatUserExternalId = connectionClientId;
|
|
41
39
|
this.chatCallback = chatCallback;
|
|
42
40
|
this.connectWebsocket();
|
|
43
41
|
}
|
|
44
|
-
// 3. Emite o token e finaliza o fluxo
|
|
45
42
|
subscriber.next(securityChatToken);
|
|
46
43
|
subscriber.complete();
|
|
47
44
|
}
|
|
@@ -355,33 +352,13 @@ export class Chat4appClientAngularService {
|
|
|
355
352
|
.then((nc) => {
|
|
356
353
|
that.nc = nc;
|
|
357
354
|
const subject = `chat4app.config.${this.configId}.user.${this.chatUserExternalId}`;
|
|
358
|
-
|
|
355
|
+
that.nc.subscribe(subject, (msg) => {
|
|
359
356
|
if (this.debug) {
|
|
360
357
|
console.log(msg);
|
|
361
358
|
}
|
|
362
359
|
this.processAndCallback(JSON.parse(msg.data));
|
|
363
360
|
});
|
|
364
|
-
|
|
365
|
-
try {
|
|
366
|
-
clearInterval(this.interval);
|
|
367
|
-
}
|
|
368
|
-
catch (e) {
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
that.interval = setInterval(() => {
|
|
372
|
-
if (that.debug) {
|
|
373
|
-
console.log(`publish chat4app.user.online ${this.chatUserExternalId} `);
|
|
374
|
-
}
|
|
375
|
-
try {
|
|
376
|
-
that.nc.publish(`chat4app.user.online`, this.chatUserExternalId);
|
|
377
|
-
}
|
|
378
|
-
catch (e) {
|
|
379
|
-
if (this.debug) {
|
|
380
|
-
console.log("try reconnect...");
|
|
381
|
-
}
|
|
382
|
-
this.ensureConn();
|
|
383
|
-
}
|
|
384
|
-
}, 1000);
|
|
361
|
+
this.setIntervalPing();
|
|
385
362
|
if (this.debug) {
|
|
386
363
|
console.log(`Subscribe online chat4app.user.${this.chatUserExternalId}.online`);
|
|
387
364
|
}
|
|
@@ -391,6 +368,29 @@ export class Chat4appClientAngularService {
|
|
|
391
368
|
console.error("NATS Error:", err);
|
|
392
369
|
});
|
|
393
370
|
}
|
|
371
|
+
setIntervalPing() {
|
|
372
|
+
if (this.interval) {
|
|
373
|
+
try {
|
|
374
|
+
clearInterval(this.interval);
|
|
375
|
+
}
|
|
376
|
+
catch (e) {
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
this.interval = setInterval(() => {
|
|
380
|
+
if (this.debug) {
|
|
381
|
+
console.log(`publish chat4app.user.online ${this.chatUserExternalId} `);
|
|
382
|
+
}
|
|
383
|
+
try {
|
|
384
|
+
this.nc.publish(`chat4app.user.online`, this.chatUserExternalId);
|
|
385
|
+
}
|
|
386
|
+
catch (e) {
|
|
387
|
+
if (this.debug) {
|
|
388
|
+
console.log("try reconnect...");
|
|
389
|
+
}
|
|
390
|
+
this.ensureConn();
|
|
391
|
+
}
|
|
392
|
+
}, 1000);
|
|
393
|
+
}
|
|
394
394
|
disconnect() {
|
|
395
395
|
return this.disconnectInternal(false);
|
|
396
396
|
}
|
|
@@ -576,4 +576,4 @@ export var GroupStatus4App;
|
|
|
576
576
|
GroupStatus4App["CREATED"] = "CREATED";
|
|
577
577
|
GroupStatus4App["CLOSED"] = "REMOVED";
|
|
578
578
|
})(GroupStatus4App || (GroupStatus4App = {}));
|
|
579
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdDRhcHAtY2xpZW50LWFuZ3VsYXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQ0YXBwLWNsaWVudC1hbmd1bGFyL3NyYy9saWIvY2hhdDRhcHAtY2xpZW50LWFuZ3VsYXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQzs7O0FBR3RDLDRCQUE0QjtBQUs1QixNQUFNLE9BQU8sNEJBQTRCO0lBZ0JyQyxZQUFxQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBWnJDLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLFVBQUssR0FBRyxLQUFLLENBQUM7UUFDZCx1QkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDeEIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUlkLHFCQUFnQixHQUFHLEdBQUcsQ0FBQztJQU12QixDQUFDO0lBQ0QsUUFBUTtJQUNSLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBOEI7UUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDO1FBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUU7UUFDckQsSUFBSSxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFJLENBQUMsaUJBQXlCLEVBQUUsWUFBNEIsRUFBRSxrQkFBMkI7UUFFdkYsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLFVBQVUs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TUFBTSxDQUFOLElBQVksY0FJWDtBQUpELFdBQVksY0FBYztJQUN4QixxQ0FBbUIsQ0FBQTtJQUNuQixtQ0FBaUIsQ0FBQTtBQUVuQixDQUFDLEVBSlcsY0FBYyxLQUFkLGNBQWMsUUFJekI7QUFDRCxNQUFNLENBQU4sSUFBWSxrQkFHWDtBQUhELFdBQVksa0JBQWtCO0lBQzVCLHlDQUFtQixDQUFBO0FBRXJCLENBQUMsRUFIVyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBRzdCO0FBQ0QsTUFBTSxDQUFOLElBQVksY0FHWDtBQUhELFdBQVksY0FBYztJQUN4Qix1RUFBa0IsQ0FBQTtJQUNsQixtRUFBZ0IsQ0FBQTtBQUNsQixDQUFDLEVBSFcsY0FBYyxLQUFkLGNBQWMsUUFHekI7QUFFRCxNQUFNLENBQU4sSUFBWSxlQUdYO0FBSEQsV0FBWSxlQUFlO0lBQ3pCLHNDQUFtQixDQUFBO0lBQ25CLHFDQUFrQixDQUFBO0FBQ3BCLENBQUMsRUFIVyxlQUFlLEtBQWYsZUFBZSxRQUcxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgKiBhcyBOQVRTIGZyb20gJy4vbmF0cy5taW4uanMnO1xyXG5cclxuXHJcbi8vZGVjbGFyZSBsZXQgbmF0c19taW46IGFueTtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENoYXQ0YXBwQ2xpZW50QW5ndWxhclNlcnZpY2UgaW1wbGVtZW50cyBPbkluaXQgIHtcclxuXHJcbiAgICBuYzogYW55O1xyXG5cclxuICAgIGNoYXRTZXJ2ZXIgPSBcIlwiO1xyXG4gICAgY2hhdFVybCA9IFwiXCI7XHJcbiAgICBkZWJ1ZyA9IGZhbHNlO1xyXG4gICAgY2hhdFVzZXJFeHRlcm5hbElkID0gXCJcIjtcclxuICAgIGNvbmZpZ0lkID0gXCJcIjtcclxuICAgIGNoYXRDYWxsYmFjazogSUNoYXRDYWxsYmFjaztcclxuXHJcbiAgICBcclxuICAgIHRpbWVvdXRSZWNvbm5lY3QgPSA1MDA7XHJcblxyXG4gICAgaW50ZXJ2YWw7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge1xyXG4gIFxyXG4gICAgfVxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlnKGNoYXQ0QXBwQ29uZmlnOiBDaGF0NEFwcENvbmZpZykge1xyXG4gICAgICB0aGlzLmNoYXRTZXJ2ZXIgPSBjaGF0NEFwcENvbmZpZy5lbmRwb2ludDtcclxuICAgICAgdGhpcy5jaGF0VXJsID0gY2hhdDRBcHBDb25maWcuZW5kcG9pbnQgKyBcIi9hcGkvdjEvXCIgO1xyXG4gICAgICB0aGlzLmRlYnVnID0gY2hhdDRBcHBDb25maWcuZGVidWc7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBpbml0KHNlY3VyaXR5Q2hhdFRva2VuOiBzdHJpbmcsIGNoYXRDYWxsYmFjaz86IElDaGF0Q2FsbGJhY2ssIGNvbm5lY3Rpb25DbGllbnRJZD86IHN0cmluZyk6T2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuXHJcbiAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4ge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gMS4gVmFsaWRhw6fDtWVzIEluaWNpYWlzXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGF0U2VydmVyIHx8IHRoaXMuY2hhdFNlcnZlci50cmltKCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihuZXcgRXJyb3IoXCJFbmRwb2ludCBpcyBlbXB0eVwiKSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghc2VjdXJpdHlDaGF0VG9rZW4gfHwgc2VjdXJpdHlDaGF0VG9rZW4udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IobmV3IEVycm9yKFwiU2VjdXJpdHlDaGF0VG9rZW4gaXMgZW1wdHlcIikpO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gMi4gTMOzZ2ljYSBkZSBOZWfDs2Npb1xyXG4gICAgICAgICAgICB0aGlzLnNldFRva2VuQ2hhdDRhcHAoc2VjdXJpdHlDaGF0VG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNoYXRDYWxsYmFjayAmJiBjb25uZWN0aW9uQ2xpZW50SWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNoYXRVc2VyRXh0ZXJuYWxJZCA9IGNvbm5lY3Rpb25DbGllbnRJZDtcclxuICAgICAgICAgICAgICB0aGlzLmNoYXRDYWxsYmFjayA9IGNoYXRDYWxsYmFjaztcclxuICAgICAgICAgICAgICB0aGlzLmNvbm5lY3RXZWJzb2NrZXQoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gMy4gRW1pdGUgbyB0b2tlbiBlIGZpbmFsaXphIG8gZmx1eG9cclxuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHNlY3VyaXR5Q2hhdFRva2VuKTtcclxuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAvLyBDYXB0dXJhIGVycm9zIGluZXNwZXJhZG9zIGUgZW52aWEgcGFyYSBvIGNhbmFsIGRlIGVycm8gZG8gT2JzZXJ2YWJsZVxyXG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7ICAgICAgXHJcblxyXG4gICAgfVxyXG4gIFxyXG4gICAgZ2V0Q2hhdFVybERvd25sb2FkKG1lc3NhZ2VGaWxlSWQ6IHN0cmluZykge1xyXG4gICAgICByZXR1cm4gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9nZXRGaWxlP21lc3NhZ2VGaWxlSWQ9XCIgKyBtZXNzYWdlRmlsZUlkICsgXCImdG9rZW49XCIgKyB0aGlzLmdldEJlYXJlclRva2VuKCk7XHJcbiAgICB9XHJcbiAgXHJcbiAgXHJcbiAgICBnZXRNZXNzYWdlQ2hhdChjaGF0SWQ6IHN0cmluZywgZnJvbUlkOiBzdHJpbmcsIHRvSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8Q2hhdE1lc3NhZ2U0QXBwPj4ge1xyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9cIiArIGNoYXRJZCArIFwiL1wiICsgZnJvbUlkICsgXCIvXCIgKyB0b0lkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcnJheTxDaGF0TWVzc2FnZTRBcHA+Pih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgXHJcbiAgICB9XHJcbiAgICBnZXRNZXNzYWdlQ2hhdEJ5R3JvcChjaGF0SWQ6IHN0cmluZywgZ3JvdXBJZDogc3RyaW5nLCBmcm9tSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8Q2hhdE1lc3NhZ2U0QXBwPj4ge1xyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9ieUdyb3VwL1wiICsgY2hhdElkICsgXCIvXCIgKyBncm91cElkICsgXCIvXCIgKyBmcm9tSWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFycmF5PENoYXRNZXNzYWdlNEFwcD4+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICBcclxuICAgIH1cclxuICBcclxuICBcclxuICAgIGFkZE1lc3NhZ2VDaGF0KGNoYXRNZXNzYWdlNEFwcDogQ2hhdE1lc3NhZ2U0QXBwKTogT2JzZXJ2YWJsZTxDaGF0TWVzc2FnZTRBcHA+IHtcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2UvXCIgKyBjaGF0TWVzc2FnZTRBcHAuY2hhdElkO1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PENoYXRNZXNzYWdlNEFwcD4odXJsLCBjaGF0TWVzc2FnZTRBcHAsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgXHJcbiAgICB9XHJcbiAgICAvKlxyXG4gICAgcHJvcHMoY2hhdEZpbHRlclJlcXVlc3Q0QXBwOiBBcnJheTxDaGF0RmlsdGVyUmVxdWVzdDRBcHA+KTogT2JzZXJ2YWJsZTxDaGF0VXNlclJlc3BvbnNlNEFwcFtdPiB7XHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL3Byb3BzXCI7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxDaGF0VXNlclJlc3BvbnNlNEFwcFtdPih1cmwsIGNoYXRGaWx0ZXJSZXF1ZXN0NEFwcCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICBcclxuICAgIH1cclxuICAgICovICAgIFxyXG4gIFxyXG4gIFxyXG4gICAgcmVtb3ZlVXNlcnNDaGF0KGNoYXRJZDogc3RyaW5nLCBjaGF0VXNlcnNJZD86IHN0cmluZ1tdLCBjaGF0VXNlcnNFeHRlcm5hbElkPzogc3RyaW5nW10pOiBPYnNlcnZhYmxlPENoYXRVc2VyNEFwcFtdPiB7XHJcbiAgICAgIGxldCBwYXJhbXMgPSBuZXcgQXJyYXkoKTtcclxuICAgICAgaWYgKGNoYXRVc2Vyc0lkICYmIGNoYXRVc2Vyc0lkLmxlbmd0aCA+IDApIHtcclxuICBcclxuICAgICAgICBjaGF0VXNlcnNJZC5mb3JFYWNoKGN1aSA9PiB7XHJcbiAgICAgICAgICBwYXJhbXMucHVzaChcImNoYXRVc2VySWQ9XCIgKyBjdWkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKGNoYXRVc2Vyc0V4dGVybmFsSWQgJiYgY2hhdFVzZXJzRXh0ZXJuYWxJZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY2hhdFVzZXJzRXh0ZXJuYWxJZC5mb3JFYWNoKGN1ZWkgPT4ge1xyXG4gICAgICAgICAgcGFyYW1zLnB1c2goXCJjaGF0VXNlckV4dGVybmFsSWQ9XCIgKyBjdWVpKTtcclxuICAgICAgICB9KVxyXG4gIFxyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXR1c2VyL1wiICsgY2hhdElkICsgXCI/XCIgKyBwYXJhbXMuam9pbihcIiZcIik7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPENoYXRVc2VyNEFwcFtdPih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgXHJcbiAgICByZW1vdmVVc2VyQ2hhdChjaGF0SWQ6IHN0cmluZywgY2hhdFVzZXJJZD86IHN0cmluZywgY2hhdFVzZXJFeHRlcm5hbElkPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxDaGF0VXNlcjRBcHA+IHtcclxuICAgICAgbGV0IHBhcmFtID0gXCJcIjtcclxuICAgICAgaWYgKGNoYXRVc2VySWQpIHtcclxuICAgICAgICBwYXJhbSA9IFwiY2hhdFVzZXJJZD1cIiArIGNoYXRVc2VySWQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcGFyYW0gPSBcImNoYXRVc2VyRXh0ZXJuYWxJZD1cIiArIGNoYXRVc2VyRXh0ZXJuYWxJZDtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0dXNlci9cIiArIGNoYXRJZCArIFwiP1wiICsgcGFyYW07XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPENoYXRVc2VyNEFwcD4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gIFxyXG4gICAgdXBkYXRlVXNlckNoYXQoY2hhdElkOiBzdHJpbmcsIGNoYXJVc2VyNEFwcFVwZGF0ZTogQ2hhdFVzZXI0QXBwKTogT2JzZXJ2YWJsZTxDaGF0VXNlcjRBcHA+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdHVzZXIvXCIgKyBjaGF0SWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PENoYXRVc2VyNEFwcD4odXJsLCBjaGFyVXNlcjRBcHBVcGRhdGUsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgXHJcbiAgXHJcbiAgICBjcmVhdGVVc2VyQ2hhdChjaGF0SWQ6IHN0cmluZywgY2hhdFVzZXI0QXBwOiBDaGF0VXNlcjRBcHApOiBPYnNlcnZhYmxlPENoYXRVc2VyNEFwcD4ge1xyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0dXNlci9cIiArIGNoYXRJZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PENoYXRVc2VyNEFwcD4odXJsLCBjaGF0VXNlcjRBcHAsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgXHJcbiAgICBjcmVhdGVVc2Vyc0NoYXQoY2hhdElkOiBzdHJpbmcsIGNoYXRVc2VyNEFwcDogQ2hhdFVzZXI0QXBwW10pOiBPYnNlcnZhYmxlPENoYXRVc2VyNEFwcFtdPiB7XHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXR1c2VyL3VzZXJzL1wiICsgY2hhdElkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8Q2hhdFVzZXI0QXBwW10+KHVybCwgY2hhdFVzZXI0QXBwLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gIFxyXG4gIFxyXG4gICAgY3JlYXRlQ2hhdChjaGF0NGFwcDogQ2hhdDRBcHApOiBPYnNlcnZhYmxlPENoYXQ0QXBwPiB7XHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRcIjtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PENoYXQ0QXBwPih1cmwsIGNoYXQ0YXBwLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgY3JlYXRlVXBkYXRlQ2hhdChjaGF0NGFwcDogQ2hhdDRBcHApOiBPYnNlcnZhYmxlPENoYXQ0QXBwPiB7XHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRcIjtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8Q2hhdDRBcHA+KHVybCwgY2hhdDRhcHAsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgXHJcbiAgICAvKlxyXG4gICAgZ2V0TGFzdE1lc3NhZ2VHcm91cChjaGF0RXh0ZXJuYWxJZDogc3RyaW5nLCBncm91cElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPENoYXRVc2VyUmVzcG9uc2U0QXBwPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL2xhc3RNZXNzYWdlR3JvdXA/Y2hhdEV4dGVybmFsSWQ9XCIgKyBjaGF0RXh0ZXJuYWxJZCArIFwiJmdyb3VwSWQ9XCIgKyBncm91cElkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxDaGF0VXNlclJlc3BvbnNlNEFwcD4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgZ2V0TGFzdE1lc3NhZ2UoY2hhdEV4dGVybmFsSWQ6IHN0cmluZywgY2hhdFVzZXJFeHRlcm5hbElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPENoYXRVc2VyUmVzcG9uc2U0QXBwPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL2xhc3RNZXNzYWdlP2NoYXRFeHRlcm5hbElkPVwiICsgY2hhdEV4dGVybmFsSWQgKyBcIiZjaGF0VXNlckV4dGVybmFsSWQ9XCIgKyBjaGF0VXNlckV4dGVybmFsSWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PENoYXRVc2VyUmVzcG9uc2U0QXBwPih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICAgICAgXHJcbiAgICBjb3VudE5vdFJlYWRNZXNzYWdlcyhjaGF0VXNlckV4dGVybmFsSWQ6IHN0cmluZywgY2hhdEV4dGVybmFsSWQ/OiBzdHJpbmcsIGdyb3VwSWQ/OiBzdHJpbmcsIGZyb21JZD86c3RyaW5nKTogT2JzZXJ2YWJsZTxDaGF0VXNlclJlc3BvbnNlNEFwcD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9jb3VudE5vdFJlYWRNZXNzYWdlcz9jaGF0VXNlckV4dGVybmFsSWQ9XCIgKyBjaGF0VXNlckV4dGVybmFsSWQ7XHJcbiAgXHJcbiAgICAgIGlmIChjaGF0RXh0ZXJuYWxJZCAmJiBjaGF0RXh0ZXJuYWxJZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdXJsICs9IFwiJmNoYXRFeHRlcm5hbElkPVwiICsgY2hhdEV4dGVybmFsSWQ7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgaWYgKGdyb3VwSWQgJiYgZ3JvdXBJZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdXJsICs9IFwiJmdyb3VwSWQ9XCIgKyBncm91cElkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZnJvbUlkICYmIGZyb21JZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdXJsICs9IFwiJmZyb21JZD1cIiArIGdyb3VwSWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PENoYXRVc2VyUmVzcG9uc2U0QXBwPih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICAqL1xyXG4gIFxyXG4gICAgZ2V0Q2hhdEJ5RXh0ZXJuYWxJZChleHRlcm5hbElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPENoYXQ0QXBwPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXQ/ZXh0ZXJuYWxJZD1cIiArIGV4dGVybmFsSWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PENoYXQ0QXBwPih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2hhdEJ5SWQoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Q2hhdDRBcHA+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdD9jaGF0SWQ9XCIgKyBpZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8Q2hhdDRBcHA+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBsaXN0Q2hhdEJ5VXNlcihleHRlcm5hbFVzZXJJZDogc3RyaW5nLCB1c2VySWQ6IHN0cmluZywgY2hhdFN0YXR1czogQ2hhdFN0YXR1czRBcHAgKTogT2JzZXJ2YWJsZTxBcnJheTwgQ2hhdDRBcHA+PiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXQvbGlzdENoYXRCeVVzZXIvP2V4dGVybmFsVXNlcklkPVwiICsgZXh0ZXJuYWxVc2VySWQgXHJcbiAgICAgICsgXCImdXNlcklkPVwiICsgdXNlcklkXHJcbiAgICAgICsgXCImY2hhdFN0YXR1cz1cIiArIGNoYXRTdGF0dXM7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFycmF5PENoYXQ0QXBwPj4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlQ2hhdChjaGF0SWQ6IHN0cmluZywgY2hhdEV4dGVybmFsSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsIDtcclxuXHJcbiAgICAgIGlmIChjaGF0SWQgJiYgY2hhdElkLmxlbmd0aCA+IDApe1xyXG4gICAgICAgIHVybCs9IFwiY2hhdD9jaGF0SWQ9XCIgKyBjaGF0SWQ7IFxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBpZiAoY2hhdEV4dGVybmFsSWQgJiYgY2hhdEV4dGVybmFsSWQubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgdXJsKz0gXCJjaGF0P2V4dGVybmFsSWQ9XCIgKyBjaGF0RXh0ZXJuYWxJZDsgXHJcbiAgICAgIH1cclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8dm9pZD4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHJlYWRNZXNzYWdlKGNoYXRNZXNzYWdlSWQ6IHN0cmluZywgdG9JZD86IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9yZWFkL1wiICsgY2hhdE1lc3NhZ2VJZDtcclxuICBcclxuICAgICAgaWYgKHRvSWQgJiYgdG9JZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdXJsICs9IFwiL1wiICsgdG9JZDtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDx2b2lkPih1cmwsIG51bGwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBvbmxpbmUoY2hhdElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9vbmxpbmUvXCIgKyBjaGF0SWQgO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxudW1iZXI+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHNldE9mZkxpbmUoY2hhdFVzZXJFeHRlcm5hbElkSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL3NldC1vZmZsaW5lL1wiICsgY2hhdFVzZXJFeHRlcm5hbElkSWQgO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxudW1iZXI+KHVybCwgbnVsbCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgc2VuZEZpbGUoY2hhdElkOiBzdHJpbmcsIGZyb21JZDogc3RyaW5nLCB0b0lkOiBzdHJpbmcsIGZpbGVUb1VwbG9hZDogRmlsZSk6IE9ic2VydmFibGU8Q2hhdE1lc3NhZ2VGaWxlNEFwcD4ge1xyXG4gICAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2Uvc2VuZEZpbGUvXCIgKyBjaGF0SWQgKyBcIi9cIiArIGZyb21JZCArIFwiL1wiICsgdG9JZDtcclxuICBcclxuICAgICAgY29uc3QgZm9ybURhdGE6IEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGVUb1VwbG9hZCk7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgICAucG9zdDxDaGF0TWVzc2FnZUZpbGU0QXBwPihlbmRwb2ludCwgZm9ybURhdGEsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgc2VuZEZpbGVHcm91cChjaGF0SWQ6IHN0cmluZywgZnJvbUlkOiBzdHJpbmcsIGdyb3VwSWQ6IHN0cmluZywgZmlsZVRvVXBsb2FkOiBGaWxlKTogT2JzZXJ2YWJsZTxDaGF0TWVzc2FnZUZpbGU0QXBwPiB7XHJcbiAgICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9zZW5kRmlsZUdyb3VwL1wiICsgY2hhdElkICsgXCIvXCIgKyBmcm9tSWQgKyBcIi9cIiArIGdyb3VwSWQ7XHJcbiAgXHJcbiAgICAgIGNvbnN0IGZvcm1EYXRhOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlVG9VcGxvYWQpO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgICAgLnBvc3Q8Q2hhdE1lc3NhZ2VGaWxlNEFwcD4oZW5kcG9pbnQsIGZvcm1EYXRhLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qXHJcbiAgICB0cmFuc2xhdGVNZXNzYWdlKGNoYXRNZXNzYWdlSWQ6IHN0cmluZywgbGFuZ3VhZ2VUYXJnZXQ6IHN0cmluZyk6IE9ic2VydmFibGU8Q2hhdDRBcHBUcmFuc2xhdGU+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2UvdHJhbnNsYXRlL1wiICsgY2hhdE1lc3NhZ2VJZCArIFwiL1wiICsgbGFuZ3VhZ2VUYXJnZXQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PENoYXQ0QXBwVHJhbnNsYXRlPih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICAqL1xyXG5cclxuICAgIHN0YXJ0VHlwaW5nKGNoYXRJZDogc3RyaW5nLGZyb21JZDogc3RyaW5nLCB0b0lkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2Uvc3RhcnRUeXBpbmcvXCIgKyBjaGF0SWQgKyBcIi9cIiArIGZyb21JZCArIFwiL1wiICsgdG9JZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8dm9pZD4odXJsLCBudWxsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0VHlwaW5nR3JvdXAoY2hhdElkOiBzdHJpbmcsZnJvbUlkOiBzdHJpbmcsIGdyb3VwSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9zdGFydFR5cGluZ0dyb3VwL1wiICsgY2hhdElkICsgXCIvXCIgKyBmcm9tSWQgKyBcIi9cIiArIGdyb3VwSWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PHZvaWQ+KHVybCwgbnVsbCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHN0b3BUeXBpbmcoY2hhdElkOiBzdHJpbmcsZnJvbUlkOiBzdHJpbmcsIHRvSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9zdG9wVHlwaW5nL1wiICsgY2hhdElkICsgXCIvXCIgKyBmcm9tSWQgKyBcIi9cIiArIHRvSWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PHZvaWQ+KHVybCwgbnVsbCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBzdG9wVHlwaW5nR3JvdXAoY2hhdElkOiBzdHJpbmcsZnJvbUlkOiBzdHJpbmcsIGdyb3VwSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9zdG9wVHlwaW5nR3JvdXAvXCIgKyBjaGF0SWQgKyBcIi9cIiArIGZyb21JZCArIFwiL1wiICsgZ3JvdXBJZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8dm9pZD4odXJsLCBudWxsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZUdyb3VwKGdyb3VwOiBDaGF0R3JvdXBBcHApOiBPYnNlcnZhYmxlPENoYXRHcm91cEFwcD4ge1xyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJncm91cFwiO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8Q2hhdEdyb3VwQXBwPih1cmwsIGdyb3VwLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgZ2V0R3JvdXAoY2hhdElkOiBzdHJpbmcsIGdyb3VwSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Q2hhdEdyb3VwQXBwPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImdyb3VwL1wiICsgZ3JvdXBJZCArIFwiL1wiICsgY2hhdElkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxDaGF0R3JvdXBBcHA+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBsaXN0R3JvdXBzKGNoYXRJZD86IHN0cmluZywgZXh0ZXJuYWxJZD86IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8Q2hhdEdyb3VwQXBwPj4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJncm91cC9cIiA7XHJcblxyXG4gICAgICBpZiAoY2hhdElkICYmIGNoYXRJZC5sZW5ndGg+MCkge1xyXG4gICAgICAgIHVybCArPSBcIiZjaGF0SWQ9XCIgKyBjaGF0SWQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGV4dGVybmFsSWQgJiYgZXh0ZXJuYWxJZC5sZW5ndGg+MCkge1xyXG4gICAgICAgIHVybCArPSBcIiZleHRlcm5hbElkPVwiICsgZXh0ZXJuYWxJZDtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcnJheTxDaGF0R3JvdXBBcHA+Pih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdEZpbGVzR3JvdXAoY2hhdElkOiBzdHJpbmcsIGdyb3VwSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8Q2hhdE1lc3NhZ2VGaWxlNEFwcD4+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiZ3JvdXAvXCIgKyBjaGF0SWQgO1xyXG5cclxuICAgICAgaWYgKGdyb3VwSWQgJiYgZ3JvdXBJZC5sZW5ndGg+MCkge1xyXG4gICAgICAgIHVybCArPSBcIiZncm91cElkPVwiICsgY2hhdElkO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFycmF5PENoYXRNZXNzYWdlRmlsZTRBcHA+Pih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgZXZlbnQoZXZlbnROYW1lOiBzdHJpbmcsIGNoYXRVc2VyRXh0ZXJuYWxJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImV2ZW50L1wiICsgZXZlbnROYW1lICsgXCI/Y2hhdFVzZXJFeHRlcm5hbElkPVwiICsgY2hhdFVzZXJFeHRlcm5hbElkIDtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PHZvaWQ+KHVybCwgbnVsbCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSkgICAgICBcclxuXHJcbiAgICB9XHJcbiAgXHJcbiAgICAvKiBUb2tlbiAqL1xyXG4gICAgZ2V0QmVhcmVyVG9rZW4oKTogc3RyaW5nIHtcclxuICBcclxuICAgICAgbGV0IHJldCA9IFwiQmVhcmVyIFwiICsgd2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJjaGF0NEFwcFNlc3Npb25Ub2tlblwiKTtcclxuICBcclxuICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuICBcclxuICBcclxuICAgIHNldFRva2VuQ2hhdDRhcHAoY2hhdDRBcHBTZXNzaW9uVG9rZW46IHN0cmluZykge1xyXG4gIFxyXG4gIFxyXG4gICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcImNoYXQ0QXBwU2Vzc2lvblRva2VuXCIsIGNoYXQ0QXBwU2Vzc2lvblRva2VuKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGVuc3VyZUNvbm4oKSB7XHJcblxyXG4gICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBjaGF0U2VydmVyOiAke3RoaXMuY2hhdFNlcnZlcn1gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgdXNlcklkOiAke3RoaXMuY2hhdFVzZXJFeHRlcm5hbElkfWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBnZXRCZWFyZXJUb2tlbjogJHsgdGhpcy5nZXRCZWFyZXJUb2tlbigpfWApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB0aGF0ID0gdGhpcztcclxuXHJcbiAgICAgIGxldCB1cmlTdGVwMTogc3RyaW5nID0gdGhpcy5jaGF0U2VydmVyLnJlcGxhY2UoL15odHRwcy8sICd3c3MnKTtcclxuXHJcbiAgICAgIGxldCBzZXJ2ZXI6IHN0cmluZyA9IHVyaVN0ZXAxLnJlcGxhY2UoLyhcXC9cXC8uKj8pXFwvLywgJyQxXFwvd3MvJyk7XHJcblxyXG4gICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGB3cyBzZXJ2ZXI6ICR7c2VydmVyfWApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGF0LmRpc2Nvbm5lY3RJbnRlcm5hbCh0cnVlKTtcclxuICAgICAgICBcclxuICAgICAgTkFUUy5jb25uZWN0KHsgdXJsOiBzZXJ2ZXIsIHVzZXI6IHRoaXMuY2hhdFVzZXJFeHRlcm5hbElkLCBwYXNzOiB0aGlzLmdldEJlYXJlclRva2VuKCksIHJlY29ubmVjdDogZmFsc2V9KVxyXG4gICAgICAgIC50aGVuKChuYykgPT4ge1xyXG4gICAgICAgICAgdGhhdC5uYyA9IG5jO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHN1YmplY3QgPSBgY2hhdDRhcHAuY29uZmlnLiR7dGhpcy5jb25maWdJZH0udXNlci4ke3RoaXMuY2hhdFVzZXJFeHRlcm5hbElkfWA7IFxyXG5cclxuICAgICAgICAgIGNvbnN0IHN1YiA9IHRoYXQubmMuc3Vic2NyaWJlKHN1YmplY3QsIChtc2cpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhtc2cpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NBbmRDYWxsYmFjayhKU09OLnBhcnNlKG1zZy5kYXRhKSkgIDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5pbnRlcnZhbCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoYXQuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKT0+e1xyXG4gICAgICAgICAgICBpZiAodGhhdC5kZWJ1Zykge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBwdWJsaXNoIGNoYXQ0YXBwLnVzZXIub25saW5lICR7dGhpcy5jaGF0VXNlckV4dGVybmFsSWR9IGApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgdGhhdC5uYy5wdWJsaXNoKGBjaGF0NGFwcC51c2VyLm9ubGluZWAsIHRoaXMuY2hhdFVzZXJFeHRlcm5hbElkKSA7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJ0cnkgcmVjb25uZWN0Li4uXCIpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLmVuc3VyZUNvbm4oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgIH0sMTAwMCk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFN1YnNjcmliZSBvbmxpbmUgY2hhdDRhcHAudXNlci4ke3RoaXMuY2hhdFVzZXJFeHRlcm5hbElkfS5vbmxpbmVgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgLy8gTm90aWZpY2EgbyBjaGFtYWRvciBzb2JyZSBvIGVycm8gbmEgY29uZXjDo29cclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJOQVRTIEVycm9yOlwiLCBlcnIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2Nvbm5lY3QoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRpc2Nvbm5lY3RJbnRlcm5hbChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkaXNjb25uZWN0SW50ZXJuYWwoaWdub3JlT2ZmTGluZTogYm9vbGVhbikge1xyXG5cclxuICAgICAgLy8gQ2hlY2sgaG93IHdlIGNhbiBkaXNjb25uZWN0XHJcblxyXG4gICAgICBpZiAodGhpcy5pbnRlcnZhbCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFpZ25vcmVPZmZMaW5lICYmIHRoaXMubmMgJiYgdGhpcy5jaGF0VXNlckV4dGVybmFsSWQgJiYgdGhpcy5jaGF0VXNlckV4dGVybmFsSWQubGVuZ3RoID4gMCAmJiB0aGlzLmdldEJlYXJlclRva2VuKCkgJiYgdGhpcy5nZXRCZWFyZXJUb2tlbigpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdGhpcy5zZXRPZmZMaW5lKHRoaXMuY2hhdFVzZXJFeHRlcm5hbElkKS50b1Byb21pc2UoKTtcclxuICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmxvZyhcImhhZCBzZXQgb2ZmbGluZVwiKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5lcnJvcihcIkVycm8gYW8gc2V0YXIgb2ZmbGluZVwiLCBlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5uYykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICB0aGlzLm5jLmNsb3NlKCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGVidWcpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm5jID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5kZWJ1Zyl7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJkaXNjb25lY3RcIilcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHByb2Nlc3NBbmRDYWxsYmFjayhtc2dPYmo6IGFueSkge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5kZWJ1ZyAmJiBtc2dPYmopIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiTXNnIFJlY2VpdmVkOiBcIiArIEpTT04uc3RyaW5naWZ5KG1zZ09iaikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL2lmICghY2hhdENhbGxiYWNrLmlzVG9rZW5GaXJlYmFzZUFjdGl2ZSgpKSB7XHJcblxyXG4gICAgICAgICAgbGV0IGRhdFRtcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcblxyXG4gICAgICAgICAgZm9yIChsZXQga2V5IGluIG1zZ09iai5kYXRhKSB7XHJcbiAgICAgICAgICAgIGRhdFRtcC5zZXQoa2V5LCBtc2dPYmouZGF0YVtrZXldKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBtc2dPYmouZGF0YS5hbGwgPSBkYXRUbXA7XHJcblxyXG4gICAgICAgICAgaWYgKG1zZ09iai5kYXRhLnR5cGUgPT0gXCJtc2dcIikge1xyXG4gICAgICAgICAgICB0aGlzLmNoYXRDYWxsYmFjay5vbk1lc3NhZ2UobXNnT2JqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoKG1zZ09iai5kYXRhLnR5cGUgPT0gXCJvblwiIHx8IG1zZ09iai5kYXRhLnR5cGUgPT0gXCJvZmZcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGF0Q2FsbGJhY2sub25PZmZsaW5lKG1zZ09iaik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1zZ09iai5kYXRhLnR5cGUgPT0gXCJyZWFkXCIgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhdENhbGxiYWNrLm9uUmVhZChtc2dPYmopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtc2dPYmouZGF0YS50eXBlID09IFwic3RhcnRUeXBpbmdcIiB8fCAgbXNnT2JqLmRhdGEudHlwZSA9PSBcInN0b3BUeXBpbmdcIikge1xyXG4gICAgICAgICAgICB0aGlzLmNoYXRDYWxsYmFjay5vblN0YXJ0U3RvcFR5cGluZyhtc2dPYmopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtc2dPYmouZGF0YS50eXBlID09IFwibmV3X3VzZXJcIikge1xyXG4gICAgICAgICAgICB0aGlzLmNoYXRDYWxsYmFjay5vbk5ld1VzZXIobXNnT2JqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAobXNnT2JqLmRhdGEudHlwZSA9PSBcInJlbW92ZV91c2VyXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGF0Q2FsbGJhY2sub25SZW1vdmVVc2VyKG1zZ09iaik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1zZ09iai5kYXRhLnR5cGUgPT0gXCJjaGF0X2Nsb3NlZFwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhdENhbGxiYWNrLm9uQ2hhdENsb3NlZChtc2dPYmopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtc2dPYmouZGF0YS50eXBlID09IFwiY291bnRfbm90cmVhZFwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhdENhbGxiYWNrLm9uQ291bnROb3RSZWFkKG1zZ09iaik7XHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIC8vfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbm5lY3RXZWJzb2NrZXQoKSB7XHJcbiAgICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xyXG4gICAgICB0aGlzLmRpc2Nvbm5lY3RJbnRlcm5hbCh0cnVlKTtcclxuICBcclxuICAgICAgbGV0IHNlY3VyaXR5VG9rZW4gPSB0aGlzLmdldEJlYXJlclRva2VuKCk7XHJcblxyXG4gICAgICBsZXQgdG9rZW5BdXRoID0gXCJcIjtcclxuXHJcbiAgICAgIGlmIChzZWN1cml0eVRva2VuICYmIHNlY3VyaXR5VG9rZW4uc3RhcnRzV2l0aChcIkJlYXJlciBcIikpe1xyXG4gICAgICAgIHRva2VuQXV0aCA9IHNlY3VyaXR5VG9rZW47XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdG9rZW5BdXRoID0gXCJCZWFyZXIgXCIgKyBzZWN1cml0eVRva2VuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNvbmZpZ0lkID0gdGhpcy5jaGF0U2VydmVyLnNwbGl0KFwiL1wiKVszXTtcclxuXHJcbiAgICAgIHRoaXMuZW5zdXJlQ29ubigpO1xyXG4gICAgfVxyXG4gICAgY29udmVydENoYXQ0QXBwTWVzc2FnZVJlY2VpdmVUb0NoYXRNZXNzYWdlNEFwcChtc2c6IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUpOiBDaGF0TWVzc2FnZTRBcHB7XHJcbiAgICAgIGxldCBtZXNzYWdlID0gbmV3IENoYXRNZXNzYWdlNEFwcCgpO1xyXG4gICAgICBtZXNzYWdlLmJvZHkgPSBtc2c/Lm5vdGlmaWNhdGlvbj8uYm9keTtcclxuICAgICAgbWVzc2FnZS5jaGF0SWQgPSBtc2cuZGF0YS5jaGF0SWQ7XHJcbiAgICAgIG1lc3NhZ2UuZnJvbUlkID0gbXNnLmRhdGEuZnJvbUlkO1xyXG4gICAgICBtZXNzYWdlLnRvSWQgPSBtc2cuZGF0YS50b0lkO1xyXG4gICAgICBtZXNzYWdlLmdyb3VwSWQgPSBtc2cuZGF0YS5ncm91cElkO1xyXG4gICAgICBtZXNzYWdlLnJlcGx5RnJvbSA9IG1zZy5kYXRhLnJlcGx5RnJvbTtcclxuICAgICAgaWYgKG1zZy5kYXRhLmRhdGVIb3VyICYmIG1zZy5kYXRhLmRhdGVIb3VyLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBtZXNzYWdlLmRhdGVIb3VySW5jbHVkZWQgPSBtc2cuZGF0YS5kYXRlSG91ci5zdWJzdHJpbmcoNiwxMCkgKyBcIi1cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtc2cuZGF0YS5kYXRlSG91ci5zdWJzdHJpbmcoMyw1KSArIFwiLVwiICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtc2cuZGF0YS5kYXRlSG91ci5zdWJzdHJpbmcoMCwyKSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtc2cuZGF0YS5kYXRlSG91ci5zdWJzdHJpbmcoMTApIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XHJcbiAgICAgIH1cclxuICAgICAgbWVzc2FnZS5pZCA9IG1zZy5kYXRhLmNoYXRNZXNzYWdlSWQ7XHJcblxyXG4gICAgICBpZiAobXNnLmRhdGEuZmlsZUlkICYmIG1zZy5kYXRhLmZpbGVJZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgbGV0IG1lc3NhZ2VGaWxlID0gbmV3IENoYXRNZXNzYWdlRmlsZTRBcHAoKTtcclxuICAgICAgICBcclxuICAgICAgICBtZXNzYWdlRmlsZS5pZCA9IG1zZy5kYXRhLmZpbGVJZDtcclxuICAgICAgICBtZXNzYWdlRmlsZS5uYW1lID0gbXNnLmRhdGEuZmlsZU5hbWU7XHJcbiAgICAgICAgbWVzc2FnZUZpbGUuc2l6ZSA9IG1zZy5kYXRhLmZpbGVTaXplO1xyXG4gICAgICAgIG1lc3NhZ2VGaWxlLnR5cGUgPSBtc2cuZGF0YS5maWxlVHlwZTtcclxuXHJcbiAgICAgICAgbWVzc2FnZS5jaGF0TWVzc2FnZUZpbGUgPSBtZXNzYWdlRmlsZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG1zZy5kYXRhLnZGaWxlSWQgJiYgbXNnLmRhdGEudkZpbGVJZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgbGV0IG1lc3NhZ2VGaWxlID0gbmV3IENoYXRNZXNzYWdlRmlsZTRBcHAoKTtcclxuICAgICAgICBcclxuICAgICAgICBtZXNzYWdlRmlsZS5pZCA9IG1zZy5kYXRhLnZGaWxlSWQ7XHJcbiAgICAgICAgbWVzc2FnZUZpbGUubmFtZSA9IG1zZy5kYXRhLnZGaWxlTmFtZTtcclxuICAgICAgICBtZXNzYWdlRmlsZS5zaXplID0gbXNnLmRhdGEudkZpbGVTaXplO1xyXG4gICAgICAgIG1lc3NhZ2VGaWxlLnR5cGUgPSBtc2cuZGF0YS52RmlsZVR5cGU7XHJcblxyXG4gICAgICAgIG1lc3NhZ2UuY2hhdFZvaWNlRmlsZSA9IG1lc3NhZ2VGaWxlO1xyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgcmV0dXJuIG1lc3NhZ2U7XHJcblxyXG4gICAgfVxyXG4gIFxyXG4gIH1cclxuICBcclxuICBcclxuICBleHBvcnQgY2xhc3MgQ2hhdDRBcHAge1xyXG4gICAgaWQ6IHN0cmluZztcclxuICAgIGNvbmZpZ0lkOiBzdHJpbmc7XHJcbiAgICBleHRlcm5hbElkOiBzdHJpbmc7XHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgc3RhdHVzOiBDaGF0U3RhdHVzNEFwcDtcclxuICAgIHVzZXJzOiBBcnJheTxDaGF0VXNlcjRBcHA+O1xyXG5cclxuICAgIG1ldGE6IEFycmF5PENoYXRNZXNzYWdlTWV0YTRBcHA+O1xyXG4gIFxyXG4gIH1cclxuICBleHBvcnQgY2xhc3MgQ2hhdFVzZXI0QXBwIHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBjbGllbnRUb2tlbjogc3RyaW5nO1xyXG4gICAgcGljdHVyZVBhdGg6IHN0cmluZztcclxuICAgIGVtYWlsOiBzdHJpbmc7XHJcbiAgICBwaG9uZU51bWJlcjogc3RyaW5nO1xyXG4gICAgZXh0ZXJuYWxJZDogc3RyaW5nO1xyXG4gICAgbWV0YTogQXJyYXk8Q2hhdE1lc3NhZ2VNZXRhNEFwcD47XHJcbiAgICBzdGF0dXM6IENoYXRVc2VyU3RhdHVzNEFwcDtcclxuICB9XHJcbiAgZXhwb3J0IGNsYXNzIENoYXRNZXNzYWdlNEFwcCB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgZnJvbUlkOiBzdHJpbmc7XHJcbiAgICB0b0lkOiBzdHJpbmc7XHJcbiAgICBjaGF0SWQ6IHN0cmluZztcclxuICAgIHRpdGxlOiBzdHJpbmc7XHJcbiAgICBib2R5OiBzdHJpbmc7XHJcbiAgICBtZXRhOiBBcnJheTxDaGF0TWVzc2FnZU1ldGE0QXBwPjtcclxuICAgIGdyb3VwSWQ6IHN0cmluZztcclxuICAgIHJlYWQ6IEJvb2xlYW47XHJcbiAgICByZXBseUZyb206IHN0cmluZztcclxuICAgIGRhdGVIb3VySW5jbHVkZWQ6IHN0cmluZztcclxuICAgIGdUb0lkUmVhZDogc3RyaW5nW107XHJcbiAgICBjaGF0TWVzc2FnZUZpbGU6IENoYXRNZXNzYWdlRmlsZTRBcHA7XHJcbiAgICBjaGF0Vm9pY2VGaWxlOiBDaGF0TWVzc2FnZUZpbGU0QXBwO1xyXG4gIH1cclxuICBleHBvcnQgY2xhc3MgQ2hhdE1lc3NhZ2VGaWxlNEFwcCB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgdHlwZTogc3RyaW5nO1xyXG4gICAgc2l6ZTogbnVtYmVyO1xyXG4gICAgZnVsbFBhdGg6IHN0cmluZztcclxuICB9XHJcbiAgZXhwb3J0IGNsYXNzIENoYXRNZXNzYWdlTWV0YTRBcHAge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgdmFsdWU6IHN0cmluZztcclxuICB9XHJcbiAgZXhwb3J0IGNsYXNzIENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUge1xyXG4gICAgZGF0YTogQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZURhdGEgPSBuZXcgQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZURhdGEoKTtcclxuICAgIG5vdGlmaWNhdGlvbjogQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZU5vdGlmaWNhdGlvbiA9IG5ldyBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlTm90aWZpY2F0aW9uKCk7XHJcbiAgICB0b2tlbjogc3RyaW5nO1xyXG4gIH1cclxuICBleHBvcnQgY2xhc3MgQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZURhdGEge1xyXG4gICAgdG9JZDogc3RyaW5nO1xyXG4gICAgY2hhdElkOiBzdHJpbmc7XHJcbiAgICBkYXRlSG91cjogc3RyaW5nO1xyXG4gICAgY2hhdE1lc3NhZ2VJZDogc3RyaW5nO1xyXG4gICAgZXh0ZXJuYWxJZDogc3RyaW5nO1xyXG4gICAgdHlwZTogc3RyaW5nO1xyXG4gICAgZnJvbUlkOiBzdHJpbmc7XHJcbiAgICByZXBseUZyb206IHN0cmluZztcclxuICAgIGdyb3VwSWQ6IHN0cmluZztcclxuICAgIGZpbGVJZDogc3RyaW5nO1xyXG4gICAgZmlsZU5hbWU6IHN0cmluZztcclxuICAgIGZpbGVTaXplOiBudW1iZXI7XHJcbiAgICBmaWxlVHlwZTogc3RyaW5nO1xyXG4gICAgdkZpbGVJZDogc3RyaW5nO1xyXG4gICAgdkZpbGVOYW1lOiBzdHJpbmc7XHJcbiAgICB2RmlsZVNpemU6IG51bWJlcjtcclxuICAgIHZGaWxlVHlwZTogc3RyaW5nO1xyXG5cclxuICAgIGFsbDogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuICB9XHJcbiAgZXhwb3J0IGNsYXNzIENoYXQ0QXBwTWVzc2FnZVJlY2VpdmVOb3RpZmljYXRpb24ge1xyXG4gICAgYm9keTogc3RyaW5nO1xyXG4gIH1cclxuICBcclxuICBleHBvcnQgY2xhc3MgQ2hhdFVzZXJSZXNwb25zZTRBcHAge1xyXG4gICAgdG90YWxNZXNzYWdlczogbnVtYmVyO1xyXG4gICAgY2hhdDogQ2hhdDRBcHA7XHJcbiAgICBjaGF0TWVzc2FnZTogQ2hhdE1lc3NhZ2U0QXBwO1xyXG4gICAgY2hhdHM6IENoYXRVc2VyUmVzcG9uc2U0QXBwW107XHJcbiAgfVxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0RmlsdGVyUmVxdWVzdDRBcHAge1xyXG4gICAgdHlwZTogQ2hhdEZpbHRlclR5cGU7XHJcbiAgICBjaGF0RXh0ZXJuYWxJZDogc3RyaW5nO1xyXG4gICAgY2hhdFVzZXJFeHRlcm5hbElkOiBzdHJpbmc7XHJcbiAgICBjaGF0VXNlckV4dGVybmFsVG9JZDogc3RyaW5nO1xyXG4gICAgZ3JvdXBJZDogc3RyaW5nO1xyXG4gICAgZnJvbUlkOiBzdHJpbmc7XHJcbiAgfVxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0NEFwcENvbmZpZyB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZW5kcG9pbnQ6IHN0cmluZywgcHVibGljIGRlYnVnPzogYm9vbGVhbikge1xyXG4gICAgICBcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0NEFwcFRyYW5zbGF0ZSB7XHJcbiAgICB0ZXh0OiBzdHJpbmc7XHJcbiAgICB0cmFuc2xhdGVkVGV4dDogc3RyaW5nO1xyXG4gICAgb3JpZ2luYWxTb3VyY2VMYW5ndWFnZUNvZGU6IHN0cmluZztcclxuICAgIHNvdXJjZUxhbmd1YWdlQ29kZTogc3RyaW5nO1xyXG4gICAgdGFyZ2V0TGFuZ3VhZ2VDb2RlOiBzdHJpbmc7XHJcbiAgICBtZXNzYWdlSWQ6IHN0cmluZztcclxuICB9XHJcblxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0R3JvdXBBcHAge1xyXG4gICAgaWQ6IHN0cmluZztcclxuICAgIGNoYXRJZDogc3RyaW5nO1xyXG4gICAgZXh0ZXJuYWxJZDogc3RyaW5nO1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgICB1c2VyczogQXJyYXk8c3RyaW5nPjtcclxuICAgIGZpbGVzOiBBcnJheTxDaGF0TWVzc2FnZUZpbGU0QXBwPjtcclxuICAgIG1ldGE6IEFycmF5PENoYXRNZXNzYWdlTWV0YTRBcHA+O1xyXG4gICAgc3RhdHVzOiBHcm91cFN0YXR1czRBcHA7XHJcbiAgfVxyXG5cclxuICBcclxuICBleHBvcnQgZW51bSBDaGF0U3RhdHVzNEFwcCB7XHJcbiAgICBDUkVBVEVEID0gXCJDUkVBVEVEXCIsXHJcbiAgICBDTE9TRUQgPSBcIkNMT1NFRFwiXHJcbiAgXHJcbiAgfVxyXG4gIGV4cG9ydCBlbnVtIENoYXRVc2VyU3RhdHVzNEFwcCB7XHJcbiAgICBSRU1PVkVEID0gXCJSRU1PVkVEXCJcclxuICBcclxuICB9XHJcbiAgZXhwb3J0IGVudW0gQ2hhdEZpbHRlclR5cGUge1xyXG4gICAgQ09VTlRfTk9UX1JFQUQgPSAxLFxyXG4gICAgTEFTVF9NRVNTQUdFID0gMlxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGVudW0gR3JvdXBTdGF0dXM0QXBwIHtcclxuICAgIENSRUFURUQgPSBcIkNSRUFURURcIixcclxuICAgIENMT1NFRCA9IFwiUkVNT1ZFRFwiXHJcbiAgfVxyXG5cclxuICBcclxuICBleHBvcnQgaW50ZXJmYWNlIElDaGF0Q2FsbGJhY2sge1xyXG4gICAgaXNUb2tlbkZpcmViYXNlQWN0aXZlKCk6IEJvb2xlYW47XHJcbiAgICBvbk1lc3NhZ2UobXNnOiBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlKTogdm9pZDtcclxuICAgIG9uT2ZmbGluZShtc2c6IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUpOiB2b2lkO1xyXG4gICAgb25SZWFkKG1zZzogQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSk6IHZvaWQ7XHJcbiAgICBvblN0YXJ0U3RvcFR5cGluZyhtc2c6IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUpOiB2b2lkO1xyXG4gICAgb25OZXdVc2VyKG1zZzogQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSk6IHZvaWQ7XHJcbiAgICBvblJlbW92ZVVzZXIobXNnOiBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlKTogdm9pZDtcclxuICAgIG9uQ2hhdENsb3NlZChtc2c6IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUpOiB2b2lkO1xyXG4gICAgb25Db3VudE5vdFJlYWQobXNnOiBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlKTogdm9pZDtcclxuICB9XHJcbiAgIl19
|
|
579
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdDRhcHAtY2xpZW50LWFuZ3VsYXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQ0YXBwLWNsaWVudC1hbmd1bGFyL3NyYy9saWIvY2hhdDRhcHAtY2xpZW50LWFuZ3VsYXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQzs7O0FBR3RDLDRCQUE0QjtBQUs1QixNQUFNLE9BQU8sNEJBQTRCO0lBZ0JyQyxZQUFxQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBWnJDLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLFVBQUssR0FBRyxLQUFLLENBQUM7UUFDZCx1QkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDeEIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUlkLHFCQUFnQixHQUFHLEdBQUcsQ0FBQztJQU12QixDQUFDO0lBQ0QsUUFBUTtJQUNSLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBOEI7UUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDO1FBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUU7UUFDckQsSUFBSSxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFJLENBQUMsaUJBQXlCLEVBQUUsWUFBNEIsRUFBRSxrQkFBMkI7UUFFdkYsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLFVBQVUs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Y0FJWDtBQUpELFdBQVksY0FBYztJQUN4QixxQ0FBbUIsQ0FBQTtJQUNuQixtQ0FBaUIsQ0FBQTtBQUVuQixDQUFDLEVBSlcsY0FBYyxLQUFkLGNBQWMsUUFJekI7QUFDRCxNQUFNLENBQU4sSUFBWSxrQkFHWDtBQUhELFdBQVksa0JBQWtCO0lBQzVCLHlDQUFtQixDQUFBO0FBRXJCLENBQUMsRUFIVyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBRzdCO0FBQ0QsTUFBTSxDQUFOLElBQVksY0FHWDtBQUhELFdBQVksY0FBYztJQUN4Qix1RUFBa0IsQ0FBQTtJQUNsQixtRUFBZ0IsQ0FBQTtBQUNsQixDQUFDLEVBSFcsY0FBYyxLQUFkLGNBQWMsUUFHekI7QUFFRCxNQUFNLENBQU4sSUFBWSxlQUdYO0FBSEQsV0FBWSxlQUFlO0lBQ3pCLHNDQUFtQixDQUFBO0lBQ25CLHFDQUFrQixDQUFBO0FBQ3BCLENBQUMsRUFIVyxlQUFlLEtBQWYsZUFBZSxRQUcxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgKiBhcyBOQVRTIGZyb20gJy4vbmF0cy5taW4uanMnO1xyXG5cclxuXHJcbi8vZGVjbGFyZSBsZXQgbmF0c19taW46IGFueTtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENoYXQ0YXBwQ2xpZW50QW5ndWxhclNlcnZpY2UgaW1wbGVtZW50cyBPbkluaXQgIHtcclxuXHJcbiAgICBuYzogYW55O1xyXG5cclxuICAgIGNoYXRTZXJ2ZXIgPSBcIlwiO1xyXG4gICAgY2hhdFVybCA9IFwiXCI7XHJcbiAgICBkZWJ1ZyA9IGZhbHNlO1xyXG4gICAgY2hhdFVzZXJFeHRlcm5hbElkID0gXCJcIjtcclxuICAgIGNvbmZpZ0lkID0gXCJcIjtcclxuICAgIGNoYXRDYWxsYmFjazogSUNoYXRDYWxsYmFjaztcclxuXHJcbiAgICBcclxuICAgIHRpbWVvdXRSZWNvbm5lY3QgPSA1MDA7XHJcblxyXG4gICAgaW50ZXJ2YWw7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge1xyXG4gIFxyXG4gICAgfVxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlnKGNoYXQ0QXBwQ29uZmlnOiBDaGF0NEFwcENvbmZpZykge1xyXG4gICAgICB0aGlzLmNoYXRTZXJ2ZXIgPSBjaGF0NEFwcENvbmZpZy5lbmRwb2ludDtcclxuICAgICAgdGhpcy5jaGF0VXJsID0gY2hhdDRBcHBDb25maWcuZW5kcG9pbnQgKyBcIi9hcGkvdjEvXCIgO1xyXG4gICAgICB0aGlzLmRlYnVnID0gY2hhdDRBcHBDb25maWcuZGVidWc7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBpbml0KHNlY3VyaXR5Q2hhdFRva2VuOiBzdHJpbmcsIGNoYXRDYWxsYmFjaz86IElDaGF0Q2FsbGJhY2ssIGNvbm5lY3Rpb25DbGllbnRJZD86IHN0cmluZyk6T2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuXHJcbiAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4ge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNoYXRTZXJ2ZXIgfHwgdGhpcy5jaGF0U2VydmVyLnRyaW0oKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKG5ldyBFcnJvcihcIkVuZHBvaW50IGlzIGVtcHR5XCIpKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFzZWN1cml0eUNoYXRUb2tlbiB8fCBzZWN1cml0eUNoYXRUb2tlbi50cmltKCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihuZXcgRXJyb3IoXCJTZWN1cml0eUNoYXRUb2tlbiBpcyBlbXB0eVwiKSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFRva2VuQ2hhdDRhcHAoc2VjdXJpdHlDaGF0VG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNoYXRDYWxsYmFjayAmJiBjb25uZWN0aW9uQ2xpZW50SWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNoYXRVc2VyRXh0ZXJuYWxJZCA9IGNvbm5lY3Rpb25DbGllbnRJZDtcclxuICAgICAgICAgICAgICB0aGlzLmNoYXRDYWxsYmFjayA9IGNoYXRDYWxsYmFjaztcclxuICAgICAgICAgICAgICB0aGlzLmNvbm5lY3RXZWJzb2NrZXQoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHNlY3VyaXR5Q2hhdFRva2VuKTtcclxuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAvLyBDYXB0dXJhIGVycm9zIGluZXNwZXJhZG9zIGUgZW52aWEgcGFyYSBvIGNhbmFsIGRlIGVycm8gZG8gT2JzZXJ2YWJsZVxyXG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7ICAgICAgXHJcblxyXG4gICAgfVxyXG4gIFxyXG4gICAgZ2V0Q2hhdFVybERvd25sb2FkKG1lc3NhZ2VGaWxlSWQ6IHN0cmluZykge1xyXG4gICAgICByZXR1cm4gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9nZXRGaWxlP21lc3NhZ2VGaWxlSWQ9XCIgKyBtZXNzYWdlRmlsZUlkICsgXCImdG9rZW49XCIgKyB0aGlzLmdldEJlYXJlclRva2VuKCk7XHJcbiAgICB9XHJcbiAgXHJcbiAgXHJcbiAgICBnZXRNZXNzYWdlQ2hhdChjaGF0SWQ6IHN0cmluZywgZnJvbUlkOiBzdHJpbmcsIHRvSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8Q2hhdE1lc3NhZ2U0QXBwPj4ge1xyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9cIiArIGNoYXRJZCArIFwiL1wiICsgZnJvbUlkICsgXCIvXCIgKyB0b0lkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcnJheTxDaGF0TWVzc2FnZTRBcHA+Pih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgXHJcbiAgICB9XHJcbiAgICBnZXRNZXNzYWdlQ2hhdEJ5R3JvcChjaGF0SWQ6IHN0cmluZywgZ3JvdXBJZDogc3RyaW5nLCBmcm9tSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8Q2hhdE1lc3NhZ2U0QXBwPj4ge1xyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9ieUdyb3VwL1wiICsgY2hhdElkICsgXCIvXCIgKyBncm91cElkICsgXCIvXCIgKyBmcm9tSWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFycmF5PENoYXRNZXNzYWdlNEFwcD4+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICBcclxuICAgIH1cclxuICBcclxuICBcclxuICAgIGFkZE1lc3NhZ2VDaGF0KGNoYXRNZXNzYWdlNEFwcDogQ2hhdE1lc3NhZ2U0QXBwKTogT2JzZXJ2YWJsZTxDaGF0TWVzc2FnZTRBcHA+IHtcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2UvXCIgKyBjaGF0TWVzc2FnZTRBcHAuY2hhdElkO1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PENoYXRNZXNzYWdlNEFwcD4odXJsLCBjaGF0TWVzc2FnZTRBcHAsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgXHJcbiAgICB9XHJcbiAgICAvKlxyXG4gICAgcHJvcHMoY2hhdEZpbHRlclJlcXVlc3Q0QXBwOiBBcnJheTxDaGF0RmlsdGVyUmVxdWVzdDRBcHA+KTogT2JzZXJ2YWJsZTxDaGF0VXNlclJlc3BvbnNlNEFwcFtdPiB7XHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL3Byb3BzXCI7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxDaGF0VXNlclJlc3BvbnNlNEFwcFtdPih1cmwsIGNoYXRGaWx0ZXJSZXF1ZXN0NEFwcCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICBcclxuICAgIH1cclxuICAgICovICAgIFxyXG4gIFxyXG4gIFxyXG4gICAgcmVtb3ZlVXNlcnNDaGF0KGNoYXRJZDogc3RyaW5nLCBjaGF0VXNlcnNJZD86IHN0cmluZ1tdLCBjaGF0VXNlcnNFeHRlcm5hbElkPzogc3RyaW5nW10pOiBPYnNlcnZhYmxlPENoYXRVc2VyNEFwcFtdPiB7XHJcbiAgICAgIGxldCBwYXJhbXMgPSBuZXcgQXJyYXkoKTtcclxuICAgICAgaWYgKGNoYXRVc2Vyc0lkICYmIGNoYXRVc2Vyc0lkLmxlbmd0aCA+IDApIHtcclxuICBcclxuICAgICAgICBjaGF0VXNlcnNJZC5mb3JFYWNoKGN1aSA9PiB7XHJcbiAgICAgICAgICBwYXJhbXMucHVzaChcImNoYXRVc2VySWQ9XCIgKyBjdWkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKGNoYXRVc2Vyc0V4dGVybmFsSWQgJiYgY2hhdFVzZXJzRXh0ZXJuYWxJZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY2hhdFVzZXJzRXh0ZXJuYWxJZC5mb3JFYWNoKGN1ZWkgPT4ge1xyXG4gICAgICAgICAgcGFyYW1zLnB1c2goXCJjaGF0VXNlckV4dGVybmFsSWQ9XCIgKyBjdWVpKTtcclxuICAgICAgICB9KVxyXG4gIFxyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXR1c2VyL1wiICsgY2hhdElkICsgXCI/XCIgKyBwYXJhbXMuam9pbihcIiZcIik7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPENoYXRVc2VyNEFwcFtdPih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgXHJcbiAgICByZW1vdmVVc2VyQ2hhdChjaGF0SWQ6IHN0cmluZywgY2hhdFVzZXJJZD86IHN0cmluZywgY2hhdFVzZXJFeHRlcm5hbElkPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxDaGF0VXNlcjRBcHA+IHtcclxuICAgICAgbGV0IHBhcmFtID0gXCJcIjtcclxuICAgICAgaWYgKGNoYXRVc2VySWQpIHtcclxuICAgICAgICBwYXJhbSA9IFwiY2hhdFVzZXJJZD1cIiArIGNoYXRVc2VySWQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcGFyYW0gPSBcImNoYXRVc2VyRXh0ZXJuYWxJZD1cIiArIGNoYXRVc2VyRXh0ZXJuYWxJZDtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0dXNlci9cIiArIGNoYXRJZCArIFwiP1wiICsgcGFyYW07XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPENoYXRVc2VyNEFwcD4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gIFxyXG4gICAgdXBkYXRlVXNlckNoYXQoY2hhdElkOiBzdHJpbmcsIGNoYXJVc2VyNEFwcFVwZGF0ZTogQ2hhdFVzZXI0QXBwKTogT2JzZXJ2YWJsZTxDaGF0VXNlcjRBcHA+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdHVzZXIvXCIgKyBjaGF0SWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PENoYXRVc2VyNEFwcD4odXJsLCBjaGFyVXNlcjRBcHBVcGRhdGUsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgXHJcbiAgXHJcbiAgICBjcmVhdGVVc2VyQ2hhdChjaGF0SWQ6IHN0cmluZywgY2hhdFVzZXI0QXBwOiBDaGF0VXNlcjRBcHApOiBPYnNlcnZhYmxlPENoYXRVc2VyNEFwcD4ge1xyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0dXNlci9cIiArIGNoYXRJZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PENoYXRVc2VyNEFwcD4odXJsLCBjaGF0VXNlcjRBcHAsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgXHJcbiAgICBjcmVhdGVVc2Vyc0NoYXQoY2hhdElkOiBzdHJpbmcsIGNoYXRVc2VyNEFwcDogQ2hhdFVzZXI0QXBwW10pOiBPYnNlcnZhYmxlPENoYXRVc2VyNEFwcFtdPiB7XHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXR1c2VyL3VzZXJzL1wiICsgY2hhdElkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8Q2hhdFVzZXI0QXBwW10+KHVybCwgY2hhdFVzZXI0QXBwLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gIFxyXG4gIFxyXG4gICAgY3JlYXRlQ2hhdChjaGF0NGFwcDogQ2hhdDRBcHApOiBPYnNlcnZhYmxlPENoYXQ0QXBwPiB7XHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRcIjtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PENoYXQ0QXBwPih1cmwsIGNoYXQ0YXBwLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgY3JlYXRlVXBkYXRlQ2hhdChjaGF0NGFwcDogQ2hhdDRBcHApOiBPYnNlcnZhYmxlPENoYXQ0QXBwPiB7XHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRcIjtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8Q2hhdDRBcHA+KHVybCwgY2hhdDRhcHAsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgXHJcbiAgICAvKlxyXG4gICAgZ2V0TGFzdE1lc3NhZ2VHcm91cChjaGF0RXh0ZXJuYWxJZDogc3RyaW5nLCBncm91cElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPENoYXRVc2VyUmVzcG9uc2U0QXBwPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL2xhc3RNZXNzYWdlR3JvdXA/Y2hhdEV4dGVybmFsSWQ9XCIgKyBjaGF0RXh0ZXJuYWxJZCArIFwiJmdyb3VwSWQ9XCIgKyBncm91cElkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxDaGF0VXNlclJlc3BvbnNlNEFwcD4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgZ2V0TGFzdE1lc3NhZ2UoY2hhdEV4dGVybmFsSWQ6IHN0cmluZywgY2hhdFVzZXJFeHRlcm5hbElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPENoYXRVc2VyUmVzcG9uc2U0QXBwPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL2xhc3RNZXNzYWdlP2NoYXRFeHRlcm5hbElkPVwiICsgY2hhdEV4dGVybmFsSWQgKyBcIiZjaGF0VXNlckV4dGVybmFsSWQ9XCIgKyBjaGF0VXNlckV4dGVybmFsSWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PENoYXRVc2VyUmVzcG9uc2U0QXBwPih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICAgICAgXHJcbiAgICBjb3VudE5vdFJlYWRNZXNzYWdlcyhjaGF0VXNlckV4dGVybmFsSWQ6IHN0cmluZywgY2hhdEV4dGVybmFsSWQ/OiBzdHJpbmcsIGdyb3VwSWQ/OiBzdHJpbmcsIGZyb21JZD86c3RyaW5nKTogT2JzZXJ2YWJsZTxDaGF0VXNlclJlc3BvbnNlNEFwcD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9jb3VudE5vdFJlYWRNZXNzYWdlcz9jaGF0VXNlckV4dGVybmFsSWQ9XCIgKyBjaGF0VXNlckV4dGVybmFsSWQ7XHJcbiAgXHJcbiAgICAgIGlmIChjaGF0RXh0ZXJuYWxJZCAmJiBjaGF0RXh0ZXJuYWxJZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdXJsICs9IFwiJmNoYXRFeHRlcm5hbElkPVwiICsgY2hhdEV4dGVybmFsSWQ7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgaWYgKGdyb3VwSWQgJiYgZ3JvdXBJZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdXJsICs9IFwiJmdyb3VwSWQ9XCIgKyBncm91cElkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZnJvbUlkICYmIGZyb21JZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdXJsICs9IFwiJmZyb21JZD1cIiArIGdyb3VwSWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PENoYXRVc2VyUmVzcG9uc2U0QXBwPih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICAqL1xyXG4gIFxyXG4gICAgZ2V0Q2hhdEJ5RXh0ZXJuYWxJZChleHRlcm5hbElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPENoYXQ0QXBwPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXQ/ZXh0ZXJuYWxJZD1cIiArIGV4dGVybmFsSWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PENoYXQ0QXBwPih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2hhdEJ5SWQoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Q2hhdDRBcHA+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdD9jaGF0SWQ9XCIgKyBpZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8Q2hhdDRBcHA+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBsaXN0Q2hhdEJ5VXNlcihleHRlcm5hbFVzZXJJZDogc3RyaW5nLCB1c2VySWQ6IHN0cmluZywgY2hhdFN0YXR1czogQ2hhdFN0YXR1czRBcHAgKTogT2JzZXJ2YWJsZTxBcnJheTwgQ2hhdDRBcHA+PiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXQvbGlzdENoYXRCeVVzZXIvP2V4dGVybmFsVXNlcklkPVwiICsgZXh0ZXJuYWxVc2VySWQgXHJcbiAgICAgICsgXCImdXNlcklkPVwiICsgdXNlcklkXHJcbiAgICAgICsgXCImY2hhdFN0YXR1cz1cIiArIGNoYXRTdGF0dXM7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFycmF5PENoYXQ0QXBwPj4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlQ2hhdChjaGF0SWQ6IHN0cmluZywgY2hhdEV4dGVybmFsSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsIDtcclxuXHJcbiAgICAgIGlmIChjaGF0SWQgJiYgY2hhdElkLmxlbmd0aCA+IDApe1xyXG4gICAgICAgIHVybCs9IFwiY2hhdD9jaGF0SWQ9XCIgKyBjaGF0SWQ7IFxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBpZiAoY2hhdEV4dGVybmFsSWQgJiYgY2hhdEV4dGVybmFsSWQubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgdXJsKz0gXCJjaGF0P2V4dGVybmFsSWQ9XCIgKyBjaGF0RXh0ZXJuYWxJZDsgXHJcbiAgICAgIH1cclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8dm9pZD4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHJlYWRNZXNzYWdlKGNoYXRNZXNzYWdlSWQ6IHN0cmluZywgdG9JZD86IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9yZWFkL1wiICsgY2hhdE1lc3NhZ2VJZDtcclxuICBcclxuICAgICAgaWYgKHRvSWQgJiYgdG9JZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdXJsICs9IFwiL1wiICsgdG9JZDtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDx2b2lkPih1cmwsIG51bGwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBvbmxpbmUoY2hhdElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9vbmxpbmUvXCIgKyBjaGF0SWQgO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxudW1iZXI+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHNldE9mZkxpbmUoY2hhdFVzZXJFeHRlcm5hbElkSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL3NldC1vZmZsaW5lL1wiICsgY2hhdFVzZXJFeHRlcm5hbElkSWQgO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxudW1iZXI+KHVybCwgbnVsbCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgc2VuZEZpbGUoY2hhdElkOiBzdHJpbmcsIGZyb21JZDogc3RyaW5nLCB0b0lkOiBzdHJpbmcsIGZpbGVUb1VwbG9hZDogRmlsZSk6IE9ic2VydmFibGU8Q2hhdE1lc3NhZ2VGaWxlNEFwcD4ge1xyXG4gICAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2Uvc2VuZEZpbGUvXCIgKyBjaGF0SWQgKyBcIi9cIiArIGZyb21JZCArIFwiL1wiICsgdG9JZDtcclxuICBcclxuICAgICAgY29uc3QgZm9ybURhdGE6IEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGVUb1VwbG9hZCk7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgICAucG9zdDxDaGF0TWVzc2FnZUZpbGU0QXBwPihlbmRwb2ludCwgZm9ybURhdGEsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgc2VuZEZpbGVHcm91cChjaGF0SWQ6IHN0cmluZywgZnJvbUlkOiBzdHJpbmcsIGdyb3VwSWQ6IHN0cmluZywgZmlsZVRvVXBsb2FkOiBGaWxlKTogT2JzZXJ2YWJsZTxDaGF0TWVzc2FnZUZpbGU0QXBwPiB7XHJcbiAgICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9zZW5kRmlsZUdyb3VwL1wiICsgY2hhdElkICsgXCIvXCIgKyBmcm9tSWQgKyBcIi9cIiArIGdyb3VwSWQ7XHJcbiAgXHJcbiAgICAgIGNvbnN0IGZvcm1EYXRhOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlVG9VcGxvYWQpO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgICAgLnBvc3Q8Q2hhdE1lc3NhZ2VGaWxlNEFwcD4oZW5kcG9pbnQsIGZvcm1EYXRhLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qXHJcbiAgICB0cmFuc2xhdGVNZXNzYWdlKGNoYXRNZXNzYWdlSWQ6IHN0cmluZywgbGFuZ3VhZ2VUYXJnZXQ6IHN0cmluZyk6IE9ic2VydmFibGU8Q2hhdDRBcHBUcmFuc2xhdGU+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2UvdHJhbnNsYXRlL1wiICsgY2hhdE1lc3NhZ2VJZCArIFwiL1wiICsgbGFuZ3VhZ2VUYXJnZXQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PENoYXQ0QXBwVHJhbnNsYXRlPih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICAqL1xyXG5cclxuICAgIHN0YXJ0VHlwaW5nKGNoYXRJZDogc3RyaW5nLGZyb21JZDogc3RyaW5nLCB0b0lkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2Uvc3RhcnRUeXBpbmcvXCIgKyBjaGF0SWQgKyBcIi9cIiArIGZyb21JZCArIFwiL1wiICsgdG9JZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8dm9pZD4odXJsLCBudWxsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0VHlwaW5nR3JvdXAoY2hhdElkOiBzdHJpbmcsZnJvbUlkOiBzdHJpbmcsIGdyb3VwSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9zdGFydFR5cGluZ0dyb3VwL1wiICsgY2hhdElkICsgXCIvXCIgKyBmcm9tSWQgKyBcIi9cIiArIGdyb3VwSWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PHZvaWQ+KHVybCwgbnVsbCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHN0b3BUeXBpbmcoY2hhdElkOiBzdHJpbmcsZnJvbUlkOiBzdHJpbmcsIHRvSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9zdG9wVHlwaW5nL1wiICsgY2hhdElkICsgXCIvXCIgKyBmcm9tSWQgKyBcIi9cIiArIHRvSWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PHZvaWQ+KHVybCwgbnVsbCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBzdG9wVHlwaW5nR3JvdXAoY2hhdElkOiBzdHJpbmcsZnJvbUlkOiBzdHJpbmcsIGdyb3VwSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9zdG9wVHlwaW5nR3JvdXAvXCIgKyBjaGF0SWQgKyBcIi9cIiArIGZyb21JZCArIFwiL1wiICsgZ3JvdXBJZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8dm9pZD4odXJsLCBudWxsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZUdyb3VwKGdyb3VwOiBDaGF0R3JvdXBBcHApOiBPYnNlcnZhYmxlPENoYXRHcm91cEFwcD4ge1xyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJncm91cFwiO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8Q2hhdEdyb3VwQXBwPih1cmwsIGdyb3VwLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgZ2V0R3JvdXAoY2hhdElkOiBzdHJpbmcsIGdyb3VwSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Q2hhdEdyb3VwQXBwPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImdyb3VwL1wiICsgZ3JvdXBJZCArIFwiL1wiICsgY2hhdElkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxDaGF0R3JvdXBBcHA+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBsaXN0R3JvdXBzKGNoYXRJZD86IHN0cmluZywgZXh0ZXJuYWxJZD86IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8Q2hhdEdyb3VwQXBwPj4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJncm91cC9cIiA7XHJcblxyXG4gICAgICBpZiAoY2hhdElkICYmIGNoYXRJZC5sZW5ndGg+MCkge1xyXG4gICAgICAgIHVybCArPSBcIiZjaGF0SWQ9XCIgKyBjaGF0SWQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGV4dGVybmFsSWQgJiYgZXh0ZXJuYWxJZC5sZW5ndGg+MCkge1xyXG4gICAgICAgIHVybCArPSBcIiZleHRlcm5hbElkPVwiICsgZXh0ZXJuYWxJZDtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcnJheTxDaGF0R3JvdXBBcHA+Pih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdEZpbGVzR3JvdXAoY2hhdElkOiBzdHJpbmcsIGdyb3VwSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8Q2hhdE1lc3NhZ2VGaWxlNEFwcD4+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiZ3JvdXAvXCIgKyBjaGF0SWQgO1xyXG5cclxuICAgICAgaWYgKGdyb3VwSWQgJiYgZ3JvdXBJZC5sZW5ndGg+MCkge1xyXG4gICAgICAgIHVybCArPSBcIiZncm91cElkPVwiICsgY2hhdElkO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFycmF5PENoYXRNZXNzYWdlRmlsZTRBcHA+Pih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgZXZlbnQoZXZlbnROYW1lOiBzdHJpbmcsIGNoYXRVc2VyRXh0ZXJuYWxJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImV2ZW50L1wiICsgZXZlbnROYW1lICsgXCI/Y2hhdFVzZXJFeHRlcm5hbElkPVwiICsgY2hhdFVzZXJFeHRlcm5hbElkIDtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PHZvaWQ+KHVybCwgbnVsbCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSkgICAgICBcclxuXHJcbiAgICB9XHJcbiAgXHJcbiAgICAvKiBUb2tlbiAqL1xyXG4gICAgZ2V0QmVhcmVyVG9rZW4oKTogc3RyaW5nIHtcclxuICBcclxuICAgICAgbGV0IHJldCA9IFwiQmVhcmVyIFwiICsgd2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJjaGF0NEFwcFNlc3Npb25Ub2tlblwiKTtcclxuICBcclxuICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuICBcclxuICBcclxuICAgIHNldFRva2VuQ2hhdDRhcHAoY2hhdDRBcHBTZXNzaW9uVG9rZW46IHN0cmluZykge1xyXG4gIFxyXG4gIFxyXG4gICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcImNoYXQ0QXBwU2Vzc2lvblRva2VuXCIsIGNoYXQ0QXBwU2Vzc2lvblRva2VuKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGVuc3VyZUNvbm4oKSB7XHJcblxyXG4gICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBjaGF0U2VydmVyOiAke3RoaXMuY2hhdFNlcnZlcn1gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgdXNlcklkOiAke3RoaXMuY2hhdFVzZXJFeHRlcm5hbElkfWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBnZXRCZWFyZXJUb2tlbjogJHsgdGhpcy5nZXRCZWFyZXJUb2tlbigpfWApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB0aGF0ID0gdGhpcztcclxuXHJcbiAgICAgIGxldCB1cmlTdGVwMTogc3RyaW5nID0gdGhpcy5jaGF0U2VydmVyLnJlcGxhY2UoL15odHRwcy8sICd3c3MnKTtcclxuXHJcbiAgICAgIGxldCBzZXJ2ZXI6IHN0cmluZyA9IHVyaVN0ZXAxLnJlcGxhY2UoLyhcXC9cXC8uKj8pXFwvLywgJyQxXFwvd3MvJyk7XHJcblxyXG4gICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGB3cyBzZXJ2ZXI6ICR7c2VydmVyfWApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGF0LmRpc2Nvbm5lY3RJbnRlcm5hbCh0cnVlKTtcclxuICAgICAgICBcclxuICAgICAgTkFUUy5jb25uZWN0KHsgdXJsOiBzZXJ2ZXIsIHVzZXI6IHRoaXMuY2hhdFVzZXJFeHRlcm5hbElkLCBwYXNzOiB0aGlzLmdldEJlYXJlclRva2VuKCksIHJlY29ubmVjdDogZmFsc2V9KVxyXG4gICAgICAgIC50aGVuKChuYykgPT4ge1xyXG4gICAgICAgICAgdGhhdC5uYyA9IG5jO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHN1YmplY3QgPSBgY2hhdDRhcHAuY29uZmlnLiR7dGhpcy5jb25maWdJZH0udXNlci4ke3RoaXMuY2hhdFVzZXJFeHRlcm5hbElkfWA7IFxyXG5cclxuICAgICAgICAgIHRoYXQubmMuc3Vic2NyaWJlKHN1YmplY3QsIChtc2cpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhtc2cpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NBbmRDYWxsYmFjayhKU09OLnBhcnNlKG1zZy5kYXRhKSkgIDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLnNldEludGVydmFsUGluZygpO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTdWJzY3JpYmUgb25saW5lIGNoYXQ0YXBwLnVzZXIuJHt0aGlzLmNoYXRVc2VyRXh0ZXJuYWxJZH0ub25saW5lYCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgIFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgIC8vIE5vdGlmaWNhIG8gY2hhbWFkb3Igc29icmUgbyBlcnJvIG5hIGNvbmV4w6NvXHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiTkFUUyBFcnJvcjpcIiwgZXJyKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2V0SW50ZXJ2YWxQaW5nKCk6dm9pZCB7XHJcbiAgICAgIGlmICh0aGlzLmludGVydmFsKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoKCk9PntcclxuICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coYHB1Ymxpc2ggY2hhdDRhcHAudXNlci5vbmxpbmUgJHt0aGlzLmNoYXRVc2VyRXh0ZXJuYWxJZH0gYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICB0aGlzLm5jLnB1Ymxpc2goYGNoYXQ0YXBwLnVzZXIub25saW5lYCwgdGhpcy5jaGF0VXNlckV4dGVybmFsSWQpIDtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInRyeSByZWNvbm5lY3QuLi5cIik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmVuc3VyZUNvbm4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgIH0sMTAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzY29ubmVjdCgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGlzY29ubmVjdEludGVybmFsKGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRpc2Nvbm5lY3RJbnRlcm5hbChpZ25vcmVPZmZMaW5lOiBib29sZWFuKSB7XHJcblxyXG4gICAgICAvLyBDaGVjayBob3cgd2UgY2FuIGRpc2Nvbm5lY3RcclxuXHJcbiAgICAgIGlmICh0aGlzLmludGVydmFsKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWlnbm9yZU9mZkxpbmUgJiYgdGhpcy5uYyAmJiB0aGlzLmNoYXRVc2VyRXh0ZXJuYWxJZCAmJiB0aGlzLmNoYXRVc2VyRXh0ZXJuYWxJZC5sZW5ndGggPiAwICYmIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSAmJiB0aGlzLmdldEJlYXJlclRva2VuKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICB0aGlzLnNldE9mZkxpbmUodGhpcy5jaGF0VXNlckV4dGVybmFsSWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUubG9nKFwiaGFkIHNldCBvZmZsaW5lXCIpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmVycm9yKFwiRXJybyBhbyBzZXRhciBvZmZsaW5lXCIsIGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm5jKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHRoaXMubmMuY2xvc2UoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5kZWJ1Zyl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubmMgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmRlYnVnKXtcclxuICAgICAgICBjb25zb2xlLmxvZyhcImRpc2NvbmVjdFwiKVxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHJvY2Vzc0FuZENhbGxiYWNrKG1zZ09iajogYW55KSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRlYnVnICYmIG1zZ09iaikge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJNc2cgUmVjZWl2ZWQ6IFwiICsgSlNPTi5zdHJpbmdpZnkobXNnT2JqKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vaWYgKCFjaGF0Q2FsbGJhY2suaXNUb2tlbkZpcmViYXNlQWN0aXZlKCkpIHtcclxuXHJcbiAgICAgICAgICBsZXQgZGF0VG1wID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcclxuXHJcbiAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gbXNnT2JqLmRhdGEpIHtcclxuICAgICAgICAgICAgZGF0VG1wLnNldChrZXksIG1zZ09iai5kYXRhW2tleV0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIG1zZ09iai5kYXRhLmFsbCA9IGRhdFRtcDtcclxuXHJcbiAgICAgICAgICBpZiAobXNnT2JqLmRhdGEudHlwZSA9PSBcIm1zZ1wiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhdENhbGxiYWNrLm9uTWVzc2FnZShtc2dPYmopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICgobXNnT2JqLmRhdGEudHlwZSA9PSBcIm9uXCIgfHwgbXNnT2JqLmRhdGEudHlwZSA9PSBcIm9mZlwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNoYXRDYWxsYmFjay5vbk9mZmxpbmUobXNnT2JqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAobXNnT2JqLmRhdGEudHlwZSA9PSBcInJlYWRcIiApIHtcclxuICAgICAgICAgICAgdGhpcy5jaGF0Q2FsbGJhY2sub25SZWFkKG1zZ09iaik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1zZ09iai5kYXRhLnR5cGUgPT0gXCJzdGFydFR5cGluZ1wiIHx8ICBtc2dPYmouZGF0YS50eXBlID09IFwic3RvcFR5cGluZ1wiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhdENhbGxiYWNrLm9uU3RhcnRTdG9wVHlwaW5nKG1zZ09iaik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1zZ09iai5kYXRhLnR5cGUgPT0gXCJuZXdfdXNlclwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhdENhbGxiYWNrLm9uTmV3VXNlcihtc2dPYmopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtc2dPYmouZGF0YS50eXBlID09IFwicmVtb3ZlX3VzZXJcIikge1xyXG4gICAgICAgICAgICB0aGlzLmNoYXRDYWxsYmFjay5vblJlbW92ZVVzZXIobXNnT2JqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAobXNnT2JqLmRhdGEudHlwZSA9PSBcImNoYXRfY2xvc2VkXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGF0Q2FsbGJhY2sub25DaGF0Q2xvc2VkKG1zZ09iaik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1zZ09iai5kYXRhLnR5cGUgPT0gXCJjb3VudF9ub3RyZWFkXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGF0Q2FsbGJhY2sub25Db3VudE5vdFJlYWQobXNnT2JqKTtcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgLy99XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29ubmVjdFdlYnNvY2tldCgpIHtcclxuICAgICAgY29uc3QgdGhhdCA9IHRoaXM7XHJcbiAgICAgIHRoaXMuZGlzY29ubmVjdEludGVybmFsKHRydWUpO1xyXG4gIFxyXG4gICAgICBsZXQgc2VjdXJpdHlUb2tlbiA9IHRoaXMuZ2V0QmVhcmVyVG9rZW4oKTtcclxuXHJcbiAgICAgIGxldCB0b2tlbkF1dGggPSBcIlwiO1xyXG5cclxuICAgICAgaWYgKHNlY3VyaXR5VG9rZW4gJiYgc2VjdXJpdHlUb2tlbi5zdGFydHNXaXRoKFwiQmVhcmVyIFwiKSl7XHJcbiAgICAgICAgdG9rZW5BdXRoID0gc2VjdXJpdHlUb2tlbjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0b2tlbkF1dGggPSBcIkJlYXJlciBcIiArIHNlY3VyaXR5VG9rZW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY29uZmlnSWQgPSB0aGlzLmNoYXRTZXJ2ZXIuc3BsaXQoXCIvXCIpWzNdO1xyXG5cclxuICAgICAgdGhpcy5lbnN1cmVDb25uKCk7XHJcbiAgICB9XHJcbiAgICBjb252ZXJ0Q2hhdDRBcHBNZXNzYWdlUmVjZWl2ZVRvQ2hhdE1lc3NhZ2U0QXBwKG1zZzogQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSk6IENoYXRNZXNzYWdlNEFwcHtcclxuICAgICAgbGV0IG1lc3NhZ2UgPSBuZXcgQ2hhdE1lc3NhZ2U0QXBwKCk7XHJcbiAgICAgIG1lc3NhZ2UuYm9keSA9IG1zZz8ubm90aWZpY2F0aW9uPy5ib2R5O1xyXG4gICAgICBtZXNzYWdlLmNoYXRJZCA9IG1zZy5kYXRhLmNoYXRJZDtcclxuICAgICAgbWVzc2FnZS5mcm9tSWQgPSBtc2cuZGF0YS5mcm9tSWQ7XHJcbiAgICAgIG1lc3NhZ2UudG9JZCA9IG1zZy5kYXRhLnRvSWQ7XHJcbiAgICAgIG1lc3NhZ2UuZ3JvdXBJZCA9IG1zZy5kYXRhLmdyb3VwSWQ7XHJcbiAgICAgIG1lc3NhZ2UucmVwbHlGcm9tID0gbXNnLmRhdGEucmVwbHlGcm9tO1xyXG4gICAgICBpZiAobXNnLmRhdGEuZGF0ZUhvdXIgJiYgbXNnLmRhdGEuZGF0ZUhvdXIubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIG1lc3NhZ2UuZGF0ZUhvdXJJbmNsdWRlZCA9IG1zZy5kYXRhLmRhdGVIb3VyLnN1YnN0cmluZyg2LDEwKSArIFwiLVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG1zZy5kYXRhLmRhdGVIb3VyLnN1YnN0cmluZygzLDUpICsgXCItXCIgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG1zZy5kYXRhLmRhdGVIb3VyLnN1YnN0cmluZygwLDIpIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG1zZy5kYXRhLmRhdGVIb3VyLnN1YnN0cmluZygxMCkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcclxuICAgICAgfVxyXG4gICAgICBtZXNzYWdlLmlkID0gbXNnLmRhdGEuY2hhdE1lc3NhZ2VJZDtcclxuXHJcbiAgICAgIGlmIChtc2cuZGF0YS5maWxlSWQgJiYgbXNnLmRhdGEuZmlsZUlkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBsZXQgbWVzc2FnZUZpbGUgPSBuZXcgQ2hhdE1lc3NhZ2VGaWxlNEFwcCgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIG1lc3NhZ2VGaWxlLmlkID0gbXNnLmRhdGEuZmlsZUlkO1xyXG4gICAgICAgIG1lc3NhZ2VGaWxlLm5hbWUgPSBtc2cuZGF0YS5maWxlTmFtZTtcclxuICAgICAgICBtZXNzYWdlRmlsZS5zaXplID0gbXNnLmRhdGEuZmlsZVNpemU7XHJcbiAgICAgICAgbWVzc2FnZUZpbGUudHlwZSA9IG1zZy5kYXRhLmZpbGVUeXBlO1xyXG5cclxuICAgICAgICBtZXNzYWdlLmNoYXRNZXNzYWdlRmlsZSA9IG1lc3NhZ2VGaWxlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobXNnLmRhdGEudkZpbGVJZCAmJiBtc2cuZGF0YS52RmlsZUlkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBsZXQgbWVzc2FnZUZpbGUgPSBuZXcgQ2hhdE1lc3NhZ2VGaWxlNEFwcCgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIG1lc3NhZ2VGaWxlLmlkID0gbXNnLmRhdGEudkZpbGVJZDtcclxuICAgICAgICBtZXNzYWdlRmlsZS5uYW1lID0gbXNnLmRhdGEudkZpbGVOYW1lO1xyXG4gICAgICAgIG1lc3NhZ2VGaWxlLnNpemUgPSBtc2cuZGF0YS52RmlsZVNpemU7XHJcbiAgICAgICAgbWVzc2FnZUZpbGUudHlwZSA9IG1zZy5kYXRhLnZGaWxlVHlwZTtcclxuXHJcbiAgICAgICAgbWVzc2FnZS5jaGF0Vm9pY2VGaWxlID0gbWVzc2FnZUZpbGU7XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICByZXR1cm4gbWVzc2FnZTtcclxuXHJcbiAgICB9XHJcbiAgXHJcbiAgfVxyXG4gIFxyXG4gIFxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0NEFwcCB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgY29uZmlnSWQ6IHN0cmluZztcclxuICAgIGV4dGVybmFsSWQ6IHN0cmluZztcclxuICAgIHRpdGxlOiBzdHJpbmc7XHJcbiAgICBzdGF0dXM6IENoYXRTdGF0dXM0QXBwO1xyXG4gICAgdXNlcnM6IEFycmF5PENoYXRVc2VyNEFwcD47XHJcblxyXG4gICAgbWV0YTogQXJyYXk8Q2hhdE1lc3NhZ2VNZXRhNEFwcD47XHJcbiAgXHJcbiAgfVxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0VXNlcjRBcHAge1xyXG4gICAgaWQ6IHN0cmluZztcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGNsaWVudFRva2VuOiBzdHJpbmc7XHJcbiAgICBwaWN0dXJlUGF0aDogc3RyaW5nO1xyXG4gICAgZW1haWw6IHN0cmluZztcclxuICAgIHBob25lTnVtYmVyOiBzdHJpbmc7XHJcbiAgICBleHRlcm5hbElkOiBzdHJpbmc7XHJcbiAgICBtZXRhOiBBcnJheTxDaGF0TWVzc2FnZU1ldGE0QXBwPjtcclxuICAgIHN0YXR1czogQ2hhdFVzZXJTdGF0dXM0QXBwO1xyXG4gIH1cclxuICBleHBvcnQgY2xhc3MgQ2hhdE1lc3NhZ2U0QXBwIHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICBmcm9tSWQ6IHN0cmluZztcclxuICAgIHRvSWQ6IHN0cmluZztcclxuICAgIGNoYXRJZDogc3RyaW5nO1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIGJvZHk6IHN0cmluZztcclxuICAgIG1ldGE6IEFycmF5PENoYXRNZXNzYWdlTWV0YTRBcHA+O1xyXG4gICAgZ3JvdXBJZDogc3RyaW5nO1xyXG4gICAgcmVhZDogQm9vbGVhbjtcclxuICAgIHJlcGx5RnJvbTogc3RyaW5nO1xyXG4gICAgZGF0ZUhvdXJJbmNsdWRlZDogc3RyaW5nO1xyXG4gICAgZ1RvSWRSZWFkOiBzdHJpbmdbXTtcclxuICAgIGNoYXRNZXNzYWdlRmlsZTogQ2hhdE1lc3NhZ2VGaWxlNEFwcDtcclxuICAgIGNoYXRWb2ljZUZpbGU6IENoYXRNZXNzYWdlRmlsZTRBcHA7XHJcbiAgfVxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0TWVzc2FnZUZpbGU0QXBwIHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICB0eXBlOiBzdHJpbmc7XHJcbiAgICBzaXplOiBudW1iZXI7XHJcbiAgICBmdWxsUGF0aDogc3RyaW5nO1xyXG4gIH1cclxuICBleHBvcnQgY2xhc3MgQ2hhdE1lc3NhZ2VNZXRhNEFwcCB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICB2YWx1ZTogc3RyaW5nO1xyXG4gIH1cclxuICBleHBvcnQgY2xhc3MgQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSB7XHJcbiAgICBkYXRhOiBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlRGF0YSA9IG5ldyBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlRGF0YSgpO1xyXG4gICAgbm90aWZpY2F0aW9uOiBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlTm90aWZpY2F0aW9uID0gbmV3IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmVOb3RpZmljYXRpb24oKTtcclxuICAgIHRva2VuOiBzdHJpbmc7XHJcbiAgfVxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlRGF0YSB7XHJcbiAgICB0b0lkOiBzdHJpbmc7XHJcbiAgICBjaGF0SWQ6IHN0cmluZztcclxuICAgIGRhdGVIb3VyOiBzdHJpbmc7XHJcbiAgICBjaGF0TWVzc2FnZUlkOiBzdHJpbmc7XHJcbiAgICBleHRlcm5hbElkOiBzdHJpbmc7XHJcbiAgICB0eXBlOiBzdHJpbmc7XHJcbiAgICBmcm9tSWQ6IHN0cmluZztcclxuICAgIHJlcGx5RnJvbTogc3RyaW5nO1xyXG4gICAgZ3JvdXBJZDogc3RyaW5nO1xyXG4gICAgZmlsZUlkOiBzdHJpbmc7XHJcbiAgICBmaWxlTmFtZTogc3RyaW5nO1xyXG4gICAgZmlsZVNpemU6IG51bWJlcjtcclxuICAgIGZpbGVUeXBlOiBzdHJpbmc7XHJcbiAgICB2RmlsZUlkOiBzdHJpbmc7XHJcbiAgICB2RmlsZU5hbWU6IHN0cmluZztcclxuICAgIHZGaWxlU2l6ZTogbnVtYmVyO1xyXG4gICAgdkZpbGVUeXBlOiBzdHJpbmc7XHJcblxyXG4gICAgYWxsOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIH1cclxuICBleHBvcnQgY2xhc3MgQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZU5vdGlmaWNhdGlvbiB7XHJcbiAgICBib2R5OiBzdHJpbmc7XHJcbiAgfVxyXG4gIFxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0VXNlclJlc3BvbnNlNEFwcCB7XHJcbiAgICB0b3RhbE1lc3NhZ2VzOiBudW1iZXI7XHJcbiAgICBjaGF0OiBDaGF0NEFwcDtcclxuICAgIGNoYXRNZXNzYWdlOiBDaGF0TWVzc2FnZTRBcHA7XHJcbiAgICBjaGF0czogQ2hhdFVzZXJSZXNwb25zZTRBcHBbXTtcclxuICB9XHJcbiAgZXhwb3J0IGNsYXNzIENoYXRGaWx0ZXJSZXF1ZXN0NEFwcCB7XHJcbiAgICB0eXBlOiBDaGF0RmlsdGVyVHlwZTtcclxuICAgIGNoYXRFeHRlcm5hbElkOiBzdHJpbmc7XHJcbiAgICBjaGF0VXNlckV4dGVybmFsSWQ6IHN0cmluZztcclxuICAgIGNoYXRVc2VyRXh0ZXJuYWxUb0lkOiBzdHJpbmc7XHJcbiAgICBncm91cElkOiBzdHJpbmc7XHJcbiAgICBmcm9tSWQ6IHN0cmluZztcclxuICB9XHJcbiAgZXhwb3J0IGNsYXNzIENoYXQ0QXBwQ29uZmlnIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbmRwb2ludDogc3RyaW5nLCBwdWJsaWMgZGVidWc/OiBib29sZWFuKSB7XHJcbiAgICAgIFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGNsYXNzIENoYXQ0QXBwVHJhbnNsYXRlIHtcclxuICAgIHRleHQ6IHN0cmluZztcclxuICAgIHRyYW5zbGF0ZWRUZXh0OiBzdHJpbmc7XHJcbiAgICBvcmlnaW5hbFNvdXJjZUxhbmd1YWdlQ29kZTogc3RyaW5nO1xyXG4gICAgc291cmNlTGFuZ3VhZ2VDb2RlOiBzdHJpbmc7XHJcbiAgICB0YXJnZXRMYW5ndWFnZUNvZGU6IHN0cmluZztcclxuICAgIG1lc3NhZ2VJZDogc3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGNsYXNzIENoYXRHcm91cEFwcCB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgY2hhdElkOiBzdHJpbmc7XHJcbiAgICBleHRlcm5hbElkOiBzdHJpbmc7XHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICAgIHVzZXJzOiBBcnJheTxzdHJpbmc+O1xyXG4gICAgZmlsZXM6IEFycmF5PENoYXRNZXNzYWdlRmlsZTRBcHA+O1xyXG4gICAgbWV0YTogQXJyYXk8Q2hhdE1lc3NhZ2VNZXRhNEFwcD47XHJcbiAgICBzdGF0dXM6IEdyb3VwU3RhdHVzNEFwcDtcclxuICB9XHJcblxyXG4gIFxyXG4gIGV4cG9ydCBlbnVtIENoYXRTdGF0dXM0QXBwIHtcclxuICAgIENSRUFURUQgPSBcIkNSRUFURURcIixcclxuICAgIENMT1NFRCA9IFwiQ0xPU0VEXCJcclxuICBcclxuICB9XHJcbiAgZXhwb3J0IGVudW0gQ2hhdFVzZXJTdGF0dXM0QXBwIHtcclxuICAgIFJFTU9WRUQgPSBcIlJFTU9WRURcIlxyXG4gIFxyXG4gIH1cclxuICBleHBvcnQgZW51bSBDaGF0RmlsdGVyVHlwZSB7XHJcbiAgICBDT1VOVF9OT1RfUkVBRCA9IDEsXHJcbiAgICBMQVNUX01FU1NBR0UgPSAyXHJcbiAgfVxyXG5cclxuICBleHBvcnQgZW51bSBHcm91cFN0YXR1czRBcHAge1xyXG4gICAgQ1JFQVRFRCA9IFwiQ1JFQVRFRFwiLFxyXG4gICAgQ0xPU0VEID0gXCJSRU1PVkVEXCJcclxuICB9XHJcblxyXG4gIFxyXG4gIGV4cG9ydCBpbnRlcmZhY2UgSUNoYXRDYWxsYmFjayB7XHJcbiAgICBpc1Rva2VuRmlyZWJhc2VBY3RpdmUoKTogQm9vbGVhbjtcclxuICAgIG9uTWVzc2FnZShtc2c6IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUpOiB2b2lkO1xyXG4gICAgb25PZmZsaW5lKG1zZzogQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSk6IHZvaWQ7XHJcbiAgICBvblJlYWQobXNnOiBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlKTogdm9pZDtcclxuICAgIG9uU3RhcnRTdG9wVHlwaW5nKG1zZzogQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSk6IHZvaWQ7XHJcbiAgICBvbk5ld1VzZXIobXNnOiBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlKTogdm9pZDtcclxuICAgIG9uUmVtb3ZlVXNlcihtc2c6IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUpOiB2b2lkO1xyXG4gICAgb25DaGF0Q2xvc2VkKG1zZzogQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSk6IHZvaWQ7XHJcbiAgICBvbkNvdW50Tm90UmVhZChtc2c6IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUpOiB2b2lkO1xyXG4gIH1cclxuICAiXX0=
|
|
@@ -764,7 +764,6 @@ class Chat4appClientAngularService {
|
|
|
764
764
|
init(securityChatToken, chatCallback, connectionClientId) {
|
|
765
765
|
return new Observable((subscriber) => {
|
|
766
766
|
try {
|
|
767
|
-
// 1. Validações Iniciais
|
|
768
767
|
if (!this.chatServer || this.chatServer.trim().length === 0) {
|
|
769
768
|
subscriber.error(new Error("Endpoint is empty"));
|
|
770
769
|
return;
|
|
@@ -773,14 +772,12 @@ class Chat4appClientAngularService {
|
|
|
773
772
|
subscriber.error(new Error("SecurityChatToken is empty"));
|
|
774
773
|
return;
|
|
775
774
|
}
|
|
776
|
-
// 2. Lógica de Negócio
|
|
777
775
|
this.setTokenChat4app(securityChatToken);
|
|
778
776
|
if (chatCallback && connectionClientId) {
|
|
779
777
|
this.chatUserExternalId = connectionClientId;
|
|
780
778
|
this.chatCallback = chatCallback;
|
|
781
779
|
this.connectWebsocket();
|
|
782
780
|
}
|
|
783
|
-
// 3. Emite o token e finaliza o fluxo
|
|
784
781
|
subscriber.next(securityChatToken);
|
|
785
782
|
subscriber.complete();
|
|
786
783
|
}
|
|
@@ -1094,33 +1091,13 @@ class Chat4appClientAngularService {
|
|
|
1094
1091
|
.then((nc) => {
|
|
1095
1092
|
that.nc = nc;
|
|
1096
1093
|
const subject = `chat4app.config.${this.configId}.user.${this.chatUserExternalId}`;
|
|
1097
|
-
|
|
1094
|
+
that.nc.subscribe(subject, (msg) => {
|
|
1098
1095
|
if (this.debug) {
|
|
1099
1096
|
console.log(msg);
|
|
1100
1097
|
}
|
|
1101
1098
|
this.processAndCallback(JSON.parse(msg.data));
|
|
1102
1099
|
});
|
|
1103
|
-
|
|
1104
|
-
try {
|
|
1105
|
-
clearInterval(this.interval);
|
|
1106
|
-
}
|
|
1107
|
-
catch (e) {
|
|
1108
|
-
}
|
|
1109
|
-
}
|
|
1110
|
-
that.interval = setInterval(() => {
|
|
1111
|
-
if (that.debug) {
|
|
1112
|
-
console.log(`publish chat4app.user.online ${this.chatUserExternalId} `);
|
|
1113
|
-
}
|
|
1114
|
-
try {
|
|
1115
|
-
that.nc.publish(`chat4app.user.online`, this.chatUserExternalId);
|
|
1116
|
-
}
|
|
1117
|
-
catch (e) {
|
|
1118
|
-
if (this.debug) {
|
|
1119
|
-
console.log("try reconnect...");
|
|
1120
|
-
}
|
|
1121
|
-
this.ensureConn();
|
|
1122
|
-
}
|
|
1123
|
-
}, 1000);
|
|
1100
|
+
this.setIntervalPing();
|
|
1124
1101
|
if (this.debug) {
|
|
1125
1102
|
console.log(`Subscribe online chat4app.user.${this.chatUserExternalId}.online`);
|
|
1126
1103
|
}
|
|
@@ -1130,6 +1107,29 @@ class Chat4appClientAngularService {
|
|
|
1130
1107
|
console.error("NATS Error:", err);
|
|
1131
1108
|
});
|
|
1132
1109
|
}
|
|
1110
|
+
setIntervalPing() {
|
|
1111
|
+
if (this.interval) {
|
|
1112
|
+
try {
|
|
1113
|
+
clearInterval(this.interval);
|
|
1114
|
+
}
|
|
1115
|
+
catch (e) {
|
|
1116
|
+
}
|
|
1117
|
+
}
|
|
1118
|
+
this.interval = setInterval(() => {
|
|
1119
|
+
if (this.debug) {
|
|
1120
|
+
console.log(`publish chat4app.user.online ${this.chatUserExternalId} `);
|
|
1121
|
+
}
|
|
1122
|
+
try {
|
|
1123
|
+
this.nc.publish(`chat4app.user.online`, this.chatUserExternalId);
|
|
1124
|
+
}
|
|
1125
|
+
catch (e) {
|
|
1126
|
+
if (this.debug) {
|
|
1127
|
+
console.log("try reconnect...");
|
|
1128
|
+
}
|
|
1129
|
+
this.ensureConn();
|
|
1130
|
+
}
|
|
1131
|
+
}, 1000);
|
|
1132
|
+
}
|
|
1133
1133
|
disconnect() {
|
|
1134
1134
|
return this.disconnectInternal(false);
|
|
1135
1135
|
}
|