bx-rest 0.9.1 → 0.9.3

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.
@@ -9,26 +9,8 @@ export class BXRestMapImRecent {
9
9
  ...{
10
10
  date_update: toDate(i.date_update),
11
11
  counter: toNum(i.counter),
12
- user: i.user && i.user.id
13
- ? {
14
- ...i.user,
15
- ...{
16
- id: toNum(i.user.id),
17
- last_activity_date: i.user.last_activity_date ? toDate(i.user.last_activity_date) : false,
18
- mobile_last_date: i.user.mobile_last_date ? toDate(i.user.mobile_last_date) : false,
19
- absent: i.user.absent ? toDate(i.user.absent) : false,
20
- }
21
- }
22
- : undefined,
23
- chat: i.chat && BXRestMapImRecent.isIBXRestImDialogRecentGetChatChatDataHttp(i.chat)
24
- ? {
25
- ...i.chat,
26
- ...{
27
- id: toNum(i.chat.id),
28
- date_create: toDate(i.chat.date_create)
29
- }
30
- }
31
- : i.chat,
12
+ user: BXRestMapImRecent.mapUser(i.user),
13
+ chat: BXRestMapImRecent.mapChat(i.chat),
32
14
  }
33
15
  }))
34
16
  : undefined;
@@ -63,6 +45,31 @@ export class BXRestMapImRecent {
63
45
  static isIBXRestImDialogRecentGetChatChatDataHttp(item) {
64
46
  return 'id' in item;
65
47
  }
48
+ static mapUser(user) {
49
+ if (!user || !user.id) {
50
+ return undefined;
51
+ }
52
+ return {
53
+ ...user,
54
+ id: toNum(user.id),
55
+ last_activity_date: user.last_activity_date ? toDate(user.last_activity_date) : false,
56
+ mobile_last_date: user.mobile_last_date ? toDate(user.mobile_last_date) : false,
57
+ absent: user.absent ? toDate(user.absent) : false,
58
+ };
59
+ }
60
+ static mapChat(chat) {
61
+ if (!chat) {
62
+ return undefined;
63
+ }
64
+ if (BXRestMapImRecent.isIBXRestImDialogRecentGetChatChatDataHttp(chat)) {
65
+ return {
66
+ ...chat,
67
+ id: toNum(chat.id),
68
+ date_create: toDate(chat.date_create)
69
+ };
70
+ }
71
+ return chat;
72
+ }
66
73
  }
67
74
  __decorate([
68
75
  CatchError({ rethrow: true })
@@ -70,4 +77,4 @@ __decorate([
70
77
  __decorate([
71
78
  CatchError({ rethrow: true })
72
79
  ], BXRestMapImRecent, "list", null);
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYngtcmVzdC9zcmMvbWFwL2ltL3JlY2VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBSUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUtuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFFekQsTUFBTSxPQUFPLGlCQUFpQjtJQUdyQixBQUFQLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBaUQ7UUFFeEQsT0FBTyxLQUFLO1lBQ1YsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNoQixHQUFHLENBQUM7Z0JBQ0osR0FBRztvQkFDRCxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7b0JBQ2xDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztvQkFDekIsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFO3dCQUN2QixDQUFDLENBQUM7NEJBQ0EsR0FBRyxDQUFDLENBQUMsSUFBSTs0QkFDVCxHQUFHO2dDQUNELEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0NBQ3BCLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7Z0NBQ3pGLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxD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QkFDRixDQUFDLENBQUM7aUJBQ0o7YUFDRjtZQUNELENBQUMsQ0FBQyxTQUFTLENBQUE7SUFDZixDQUFDO0lBRUQsTUFBTSxDQUFDLDBDQUEwQyxDQUFDLElBQXlGO1FBQ3pJLE9BQU8sSUFBSSxJQUFJLElBQUksQ0FBQTtJQUNyQixDQUFDO0NBQ0Y7QUFsRVE7SUFETixVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7a0NBaUM3QjtBQUdNO0lBRE4sVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO21DQTJCN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIGlCWFJlc3RJbURpYWxvZ1JlY2VudEdldCwgaUJYUmVzdEltRGlhbG9nUmVjZW50R2V0Q2hhdENoYXREYXRhSHR0cCwgaUJYUmVzdEltRGlhbG9nUmVjZW50R2V0Q2hhdFVzZXJEYXRhQmFzZSxcclxuICBpQlhSZXN0SW1EaWFsb2dSZWNlbnRHZXRIdHRwLFxyXG59IGZyb20gJy4uLy4uL3R5cGlmaWNhdGlvbi9yZXN0L2ltL2RpYWxvZy9yZWNlbnQvZ2V0J1xyXG5pbXBvcnQgeyB0b0RhdGUsIHRvTnVtIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYmFzZSdcclxuaW1wb3J0IHtcclxuICBpQlhSZXN0SW1EaWFsb2dSZWNlbnRMaXN0LFxyXG4gIGlCWFJlc3RJbURpYWxvZ1JlY2VudExpc3RIdHRwXHJcbn0gZnJvbSAnLi4vLi4vdHlwaWZpY2F0aW9uL3Jlc3QvaW0vZGlhbG9nL3JlY2VudC9saXN0J1xyXG5pbXBvcnQgeyBDYXRjaEVycm9yIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL2Vycm9ySGFuZGxlcidcclxuXHJcbmV4cG9ydCBjbGFzcyBCWFJlc3RNYXBJbVJlY2VudCB7XHJcblxyXG4gIEBDYXRjaEVycm9yKHsgcmV0aHJvdzogdHJ1ZSB9KVxyXG4gIHN0YXRpYyBnZXQodmFsdWU6IGlCWFJlc3RJbURpYWxvZ1JlY2VudEdldEh0dHBbXSB8IHVuZGVmaW5lZCk6IGlCWFJlc3RJbURpYWxvZ1JlY2VudEdldFtdIHwgdW5kZWZpbmVkIHtcclxuXHJcbiAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICAgID8gdmFsdWUubWFwKGkgPT4gKHtcclxuICAgICAgICAgIC4uLmksXHJcbiAgICAgICAgICAuLi57XHJcbiAgICAgICAgICAgIGRhdGVfdXBkYXRlOiB0b0RhdGUoaS5kYXRlX3VwZGF0ZSksXHJcbiAgICAgICAgICAgIGNvdW50ZXI6IHRvTnVtKGkuY291bnRlciksXHJcbiAgICAgICAgICAgIHVzZXI6IGkudXNlciAmJiBpLnVzZXIuaWRcclxuICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgIC4uLmkudXNlcixcclxuICAgICAgICAgICAgICAgIC4uLntcclxuICAgICAgICAgICAgICAgICAgaWQ6IHRvTnVtKGkudXNlci5pZCksXHJcbiAgICAgICAgICAgICAgICAgIGxhc3RfYWN0aXZpdHlfZGF0ZTogaS51c2VyLmxhc3RfYWN0aXZpdHlfZGF0ZSA/IHRvRGF0ZShpLnVzZXIubGFzdF9hY3Rpdml0eV9kYXRlKSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBtb2JpbGVfbGFzdF9kYXRlOiBpLnVzZXIubW9iaWxlX2xhc3RfZGF0ZSA/IHRvRGF0ZShpLnVzZXIubW9iaWxlX2xhc3RfZGF0ZSkgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgYWJzZW50OiBpLnVzZXIuYWJzZW50ID8gdG9EYXRlKGkudXNlci5hYnNlbnQpIDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBjaGF0OiBpLmNoYXQgJiYgQlhSZXN0TWFwSW1SZWNlbnQuaXNJQlhSZXN0SW1EaWFsb2dSZWNlbnRHZXRDaGF0Q2hhdERhdGFIdHRwKGkuY2hhdClcclxuICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgIC4uLmkuY2hhdCxcclxuICAgICAgICAgICAgICAgIC4uLntcclxuICAgICAgICAgICAgICAgICAgaWQ6IHRvTnVtKGkuY2hhdC5pZCksXHJcbiAgICAgICAgICAgICAgICAgIGRhdGVfY3JlYXRlOiB0b0RhdGUoaS5jaGF0LmRhdGVfY3JlYXRlKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA6IGkuY2hhdCxcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSlcclxuICAgICAgICA6IHVuZGVmaW5lZFxyXG5cclxuICB9XHJcblxyXG4gIEBDYXRjaEVycm9yKHsgcmV0aHJvdzogdHJ1ZSB9KVxyXG4gIHN0YXRpYyBsaXN0KHZhbHVlOiBpQlhSZXN0SW1EaWFsb2dSZWNlbnRMaXN0SHR0cCB8IHVuZGVmaW5lZCk6IGlCWFJlc3RJbURpYWxvZ1JlY2VudExpc3QgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuICh2YWx1ZSlcclxuICAgICAgPyB7XHJcbiAgICAgICAgLi4udmFsdWUsIC4uLntcclxuICAgICAgICAgIGl0ZW1zOiB2YWx1ZS5pdGVtcy5tYXAoaSA9PiAoe1xyXG4gICAgICAgICAgICAuLi5pLCAuLi57XHJcbiAgICAgICAgICAgICAgaWQ6IHRvTnVtKGkuaWQpLFxyXG4gICAgICAgICAgICAgIGRhdGVfdXBkYXRlOiB0b0RhdGUoaS5kYXRlX3VwZGF0ZSksXHJcbiAgICAgICAgICAgICAgbGluZXM6IChpLmxpbmVzKSA/IHsuLi5pLmxpbmVzLCAuLi57ZGF0ZV9jcmVhdGU6IHRvRGF0ZShpLmxpbmVzLmRhdGVfY3JlYXRlKX19IDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHsuLi5pLm1lc3NhZ2UsIC4uLntkYXRlOiB0b0RhdGUoaS5tZXNzYWdlLmRhdGUpfX0sXHJcbiAgICAgICAgICAgICAgY2hhdDogKGkuY2hhdCkgPyB7Li4uaS5jaGF0LCAuLi57ZGF0ZV9jcmVhdGU6IHRvRGF0ZShpLmNoYXQuZGF0ZV9jcmVhdGUpfX0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgdXNlcjogKGkudXNlcilcclxuICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAuLi5pLnVzZXIsXHJcbiAgICAgICAgICAgICAgICAgIC4uLntcclxuICAgICAgICAgICAgICAgICAgICBiaXJ0aGRheTogKGkudXNlci5iaXJ0aGRheSkgPyB0b0RhdGUoaS51c2VyLmJpcnRoZGF5KSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RfYWN0aXZpdHlfZGF0ZTogKGkudXNlci5sYXN0X2FjdGl2aXR5X2RhdGUpID8gdG9EYXRlKGkudXNlci5sYXN0X2FjdGl2aXR5X2RhdGUpIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIG1vYmlsZV9sYXN0X2RhdGU6IChpLnVzZXIubW9iaWxlX2xhc3RfZGF0ZSkgPyB0b0RhdGUoaS51c2VyLm1vYmlsZV9sYXN0X2RhdGUpIDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgOiB1bmRlZmluZWRcclxuICB9XHJcblxyXG4gIHN0YXRpYyBpc0lCWFJlc3RJbURpYWxvZ1JlY2VudEdldENoYXRDaGF0RGF0YUh0dHAoaXRlbTogaUJYUmVzdEltRGlhbG9nUmVjZW50R2V0Q2hhdENoYXREYXRhSHR0cCB8IGlCWFJlc3RJbURpYWxvZ1JlY2VudEdldENoYXRVc2VyRGF0YUJhc2UpOiBpdGVtIGlzIGlCWFJlc3RJbURpYWxvZ1JlY2VudEdldENoYXRDaGF0RGF0YUh0dHAge1xyXG4gICAgcmV0dXJuICdpZCcgaW4gaXRlbVxyXG4gIH1cclxufSJdfQ==
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYngtcmVzdC9zcmMvbWFwL2ltL3JlY2VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBSUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUtuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFFekQsTUFBTSxPQUFPLGlCQUFpQjtJQUdyQixBQUFQLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBaUQ7UUFFeEQsT0FBTyxLQUFLO1lBQ1YsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNoQixHQUFHLENBQUM7Z0JBQ0osR0FBRztvQkFDRCxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7b0JBQ2xDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztvQkFDekIsSUFBSSxFQUFFLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUN2QyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7aUJBQ3hDO2FBQ0YsQ0FBQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtJQUVqQixDQUFDO0lBR00sQUFBUCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQWdEO1FBQzFELE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDWixDQUFDLENBQUM7Z0JBQ0EsR0FBRyxLQUFLLEVBQUUsR0FBRztvQkFDWCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUMzQixHQUFHLENBQUMsRUFBRSxHQUFHOzRCQUNQLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxD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RUQsSUFBSSxpQkFBaUIsQ0FBQywwQ0FBMEMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLE9BQU87Z0JBQ0wsR0FBRyxJQUFJO2dCQUNQLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDbEIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO2FBQ3RDLENBQUE7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0NBQ0Y7QUE5RVE7SUFETixVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7a0NBZTdCO0FBR007SUFETixVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7bUNBMkI3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgaUJYUmVzdEltRGlhbG9nUmVjZW50R2V0LCBpQlhSZXN0SW1EaWFsb2dSZWNlbnRHZXRDaGF0Q2hhdERhdGFIdHRwLCBpQlhSZXN0SW1EaWFsb2dSZWNlbnRHZXRDaGF0VXNlckRhdGFCYXNlLFxyXG4gIGlCWFJlc3RJbURpYWxvZ1JlY2VudEdldEh0dHAsXHJcbn0gZnJvbSAnLi4vLi4vdHlwaWZpY2F0aW9uL3Jlc3QvaW0vZGlhbG9nL3JlY2VudC9nZXQnXHJcbmltcG9ydCB7IHRvRGF0ZSwgdG9OdW0gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9iYXNlJ1xyXG5pbXBvcnQge1xyXG4gIGlCWFJlc3RJbURpYWxvZ1JlY2VudExpc3QsXHJcbiAgaUJYUmVzdEltRGlhbG9nUmVjZW50TGlzdEh0dHBcclxufSBmcm9tICcuLi8uLi90eXBpZmljYXRpb24vcmVzdC9pbS9kaWFsb2cvcmVjZW50L2xpc3QnXHJcbmltcG9ydCB7IENhdGNoRXJyb3IgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMvZXJyb3JIYW5kbGVyJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEJYUmVzdE1hcEltUmVjZW50IHtcblxuICBAQ2F0Y2hFcnJvcih7IHJldGhyb3c6IHRydWUgfSlcbiAgc3RhdGljIGdldCh2YWx1ZTogaUJYUmVzdEltRGlhbG9nUmVjZW50R2V0SHR0cFtdIHwgdW5kZWZpbmVkKTogaUJYUmVzdEltRGlhbG9nUmVjZW50R2V0W10gfCB1bmRlZmluZWQge1xuXG4gICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgPyB2YWx1ZS5tYXAoaSA9PiAoe1xuICAgICAgICAgIC4uLmksXG4gICAgICAgICAgLi4ue1xuICAgICAgICAgICAgZGF0ZV91cGRhdGU6IHRvRGF0ZShpLmRhdGVfdXBkYXRlKSxcbiAgICAgICAgICAgIGNvdW50ZXI6IHRvTnVtKGkuY291bnRlciksXG4gICAgICAgICAgICB1c2VyOiBCWFJlc3RNYXBJbVJlY2VudC5tYXBVc2VyKGkudXNlciksXG4gICAgICAgICAgICBjaGF0OiBCWFJlc3RNYXBJbVJlY2VudC5tYXBDaGF0KGkuY2hhdCksXG4gICAgICAgICAgfVxuICAgICAgICB9KSlcbiAgICAgICAgOiB1bmRlZmluZWRcblxuICB9XG5cclxuICBAQ2F0Y2hFcnJvcih7IHJldGhyb3c6IHRydWUgfSlcclxuICBzdGF0aWMgbGlzdCh2YWx1ZTogaUJYUmVzdEltRGlhbG9nUmVjZW50TGlzdEh0dHAgfCB1bmRlZmluZWQpOiBpQlhSZXN0SW1EaWFsb2dSZWNlbnRMaXN0IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiAodmFsdWUpXHJcbiAgICAgID8ge1xyXG4gICAgICAgIC4uLnZhbHVlLCAuLi57XHJcbiAgICAgICAgICBpdGVtczogdmFsdWUuaXRlbXMubWFwKGkgPT4gKHtcclxuICAgICAgICAgICAgLi4uaSwgLi4ue1xyXG4gICAgICAgICAgICAgIGlkOiB0b051bShpLmlkKSxcclxuICAgICAgICAgICAgICBkYXRlX3VwZGF0ZTogdG9EYXRlKGkuZGF0ZV91cGRhdGUpLFxyXG4gICAgICAgICAgICAgIGxpbmVzOiAoaS5saW5lcykgPyB7Li4uaS5saW5lcywgLi4ue2RhdGVfY3JlYXRlOiB0b0RhdGUoaS5saW5lcy5kYXRlX2NyZWF0ZSl9fSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICBtZXNzYWdlOiB7Li4uaS5tZXNzYWdlLCAuLi57ZGF0ZTogdG9EYXRlKGkubWVzc2FnZS5kYXRlKX19LFxyXG4gICAgICAgICAgICAgIGNoYXQ6IChpLmNoYXQpID8gey4uLmkuY2hhdCwgLi4ue2RhdGVfY3JlYXRlOiB0b0RhdGUoaS5jaGF0LmRhdGVfY3JlYXRlKX19IDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgIHVzZXI6IChpLnVzZXIpXHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgLi4uaS51c2VyLFxyXG4gICAgICAgICAgICAgICAgICAuLi57XHJcbiAgICAgICAgICAgICAgICAgICAgYmlydGhkYXk6IChpLnVzZXIuYmlydGhkYXkpID8gdG9EYXRlKGkudXNlci5iaXJ0aGRheSkgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBsYXN0X2FjdGl2aXR5X2RhdGU6IChpLnVzZXIubGFzdF9hY3Rpdml0eV9kYXRlKSA/IHRvRGF0ZShpLnVzZXIubGFzdF9hY3Rpdml0eV9kYXRlKSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICBtb2JpbGVfbGFzdF9kYXRlOiAoaS51c2VyLm1vYmlsZV9sYXN0X2RhdGUpID8gdG9EYXRlKGkudXNlci5tb2JpbGVfbGFzdF9kYXRlKSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSkpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIDogdW5kZWZpbmVkXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaXNJQlhSZXN0SW1EaWFsb2dSZWNlbnRHZXRDaGF0Q2hhdERhdGFIdHRwKGl0ZW06IGlCWFJlc3RJbURpYWxvZ1JlY2VudEdldENoYXRDaGF0RGF0YUh0dHAgfCBpQlhSZXN0SW1EaWFsb2dSZWNlbnRHZXRDaGF0VXNlckRhdGFCYXNlKTogaXRlbSBpcyBpQlhSZXN0SW1EaWFsb2dSZWNlbnRHZXRDaGF0Q2hhdERhdGFIdHRwIHtcbiAgICByZXR1cm4gJ2lkJyBpbiBpdGVtXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBtYXBVc2VyKHVzZXI6IGlCWFJlc3RJbURpYWxvZ1JlY2VudEdldEh0dHBbJ3VzZXInXSk6IGlCWFJlc3RJbURpYWxvZ1JlY2VudEdldFsndXNlciddIHtcbiAgICBpZiAoIXVzZXIgfHwgIXVzZXIuaWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udXNlcixcbiAgICAgIGlkOiB0b051bSh1c2VyLmlkKSxcbiAgICAgIGxhc3RfYWN0aXZpdHlfZGF0ZTogdXNlci5sYXN0X2FjdGl2aXR5X2RhdGUgPyB0b0RhdGUodXNlci5sYXN0X2FjdGl2aXR5X2RhdGUpIDogZmFsc2UsXG4gICAgICBtb2JpbGVfbGFzdF9kYXRlOiB1c2VyLm1vYmlsZV9sYXN0X2RhdGUgPyB0b0RhdGUodXNlci5tb2JpbGVfbGFzdF9kYXRlKSA6IGZhbHNlLFxuICAgICAgYWJzZW50OiB1c2VyLmFic2VudCA/IHRvRGF0ZSh1c2VyLmFic2VudCkgOiBmYWxzZSxcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBtYXBDaGF0KGNoYXQ6IGlCWFJlc3RJbURpYWxvZ1JlY2VudEdldEh0dHBbJ2NoYXQnXSk6IGlCWFJlc3RJbURpYWxvZ1JlY2VudEdldFsnY2hhdCddIHtcbiAgICBpZiAoIWNoYXQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBpZiAoQlhSZXN0TWFwSW1SZWNlbnQuaXNJQlhSZXN0SW1EaWFsb2dSZWNlbnRHZXRDaGF0Q2hhdERhdGFIdHRwKGNoYXQpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5jaGF0LFxuICAgICAgICBpZDogdG9OdW0oY2hhdC5pZCksXG4gICAgICAgIGRhdGVfY3JlYXRlOiB0b0RhdGUoY2hhdC5kYXRlX2NyZWF0ZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hhdFxuICB9XG59XG4iXX0=
@@ -1,8 +1,8 @@
1
1
  import { HttpBXServices } from '../../../services/http/HttpBX';
2
- import { $elapseditem, $getlist, $isactionallowed, $task } from '../../../consts/part-name-methods';
2
+ import { $elapseditem, $getaccess, $getlist, $isactionallowed, $task, $tasks } from '../../../consts/part-name-methods';
3
3
  import { map, take } from 'rxjs/operators';
4
4
  import { BXRestMapTaskElapsedItem } from '../../../map/task/elapseditem';
5
- import { forkJoin, mergeMap, of, throwError } from 'rxjs';
5
+ import { mergeMap, of, throwError } from 'rxjs';
6
6
  import { BXRestNavvyUser } from '../../user';
7
7
  import { BXRestNavvyTasks } from '../../tasks';
8
8
  import { BXRestNavvyDelegateElapsedItem } from '../delegate/elapseditem';
@@ -57,42 +57,73 @@ export class BXRestNavvyOperationElapsedItem {
57
57
  }));
58
58
  }
59
59
  checkPermissionAddElapsedTimeToTaskArr(tasks, userCurrent = undefined) {
60
- let request = Object.assign({}, ...tasks.map(i => {
61
- return { [i]: this.checkPermissionAddElapsedTimeToTask(i, userCurrent) };
62
- }));
63
- return forkJoin(request)
64
- .pipe(take(1), mergeMap(v => {
65
- let forForeach = Object.entries(v).map(([key, value]) => {
66
- return { id: Number(key), value: value };
67
- });
68
- if (forForeach.find(i => i.value === undefined) !== undefined) {
69
- let forForeachHave = forForeach.filter(i => i.value !== undefined);
70
- let forForeachNotHave = forForeach.filter(i => i.value === undefined); // тут получаем все id не сохраненных у нас прав
71
- return this.http.branch(Object.assign({}, ...forForeachNotHave
72
- .map(i => i.id)
73
- .map(i => {
74
- return {
75
- [i]: {
76
- name: this.http.getNameMethod([$task, $elapseditem, $isactionallowed]),
77
- param: {
78
- TASKID: i,
79
- ITEMID: 1,
80
- ACTIONID: 1
81
- }
60
+ // Убираем дубли, чтобы не проверять права по одной задаче несколько раз.
61
+ const ids = [...new Set(tasks.filter(i => !!i))];
62
+ // Если текущий пользователь не передан снаружи, запрашиваем его один раз на весь набор задач.
63
+ const user$ = userCurrent ? of(userCurrent) : this.BXRestNavvyUser.current().res();
64
+ // Старый batch через task.elapseditem.isactionallowed.
65
+ // Вызываем его ниже только для задач, по которым getaccess не вернул ELAPSEDTIME.ADD.
66
+ const loadMissingByActionAllowed = (missingIds, resolved) => {
67
+ return this.http.branch(Object.assign({}, ...missingIds.map(i => {
68
+ return {
69
+ [i]: {
70
+ name: this.http.getNameMethod([$task, $elapseditem, $isactionallowed]),
71
+ param: {
72
+ TASKID: i,
73
+ ITEMID: 1,
74
+ ACTIONID: 1
82
75
  }
83
- };
84
- }))).pipe(map(v => {
85
- if (v && v.length) {
86
- const res = this.http.mapBranchResult(v);
87
- forForeachNotHave = Object.entries(res).map(([key, value]) => {
88
- return { id: Number(key), value: value };
89
- });
90
- return Object.assign(forForeachHave, forForeachNotHave);
91
76
  }
92
- return undefined;
93
- }));
77
+ };
78
+ }))).pipe(map(v => {
79
+ if (v && v.length) {
80
+ const res = this.http.mapBranchResult(v);
81
+ const loaded = Object.entries(res).map(([key, value]) => {
82
+ return { id: Number(key), value };
83
+ });
84
+ return [...resolved, ...loaded];
85
+ }
86
+ return undefined;
87
+ }));
88
+ };
89
+ if (!ids.length) {
90
+ return of([]);
91
+ }
92
+ return user$.pipe(take(1), mergeMap(self => {
93
+ if (!self) {
94
+ // Страховочная ветка: если user.current не вернулся, getaccess вызвать нельзя.
95
+ return loadMissingByActionAllowed(ids, []);
94
96
  }
95
- return of(forForeach);
97
+ // Основной путь: одним batch-запросом получаем права ELAPSEDTIME.ADD по всем задачам.
98
+ return this.http.branch(Object.assign({}, ...ids.map(id => {
99
+ return {
100
+ [id]: {
101
+ name: this.http.getNameMethod([$tasks, $task, $getaccess]),
102
+ param: {
103
+ id,
104
+ users: [self.ID]
105
+ }
106
+ }
107
+ };
108
+ }))).pipe(mergeMap(v => {
109
+ if (v && v.length) {
110
+ const res = this.http.mapBranchResult(v);
111
+ const permissions = ids.map(id => ({
112
+ id,
113
+ value: res[id]?.allowedActions?.[self.ID]?.['ELAPSEDTIME.ADD']
114
+ }));
115
+ // getaccess может вернуть true или false - оба значения считаем готовым ответом.
116
+ // В старый isactionallowed отправляем только задачи без явного ELAPSEDTIME.ADD.
117
+ const resolved = permissions.filter(i => i.value !== undefined);
118
+ const missingIds = permissions.filter(i => i.value === undefined).map(i => i.id);
119
+ if (missingIds.length) {
120
+ return loadMissingByActionAllowed(missingIds, resolved);
121
+ }
122
+ return of(permissions);
123
+ }
124
+ // Если batch getaccess не вернулся, сохраняем поведение старого fallback.
125
+ return loadMissingByActionAllowed(ids, []);
126
+ }));
96
127
  }));
97
128
  }
98
129
  /**
@@ -291,4 +322,4 @@ export class BXRestNavvyOperationElapsedItem {
291
322
  });
292
323
  }
293
324
  }
294
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxhcHNlZGl0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ieC1yZXN0L3NyYy9yZXF1ZXN0LW5hdnZ5L3Rhc2svb3BlcmF0aW9uL2VsYXBzZWRpdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQTtBQUNuRyxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQzFDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFBO0FBQ3hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDOUMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFJeEUsTUFBTSxPQUFPLCtCQUErQjtJQU8xQyx5RUFBeUU7SUFFekUsWUFBb0Isc0JBQThDO1FBQTlDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFQakQsU0FBSSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUE7UUFDM0IsYUFBUSxHQUFHLElBQUksOEJBQThCLEVBQUUsQ0FBQTtRQUMvQyxvQkFBZSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUE7UUFDdkMscUJBQWdCLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFBO0lBSzFELENBQUM7SUFFRCxhQUFhLENBQUMsUUFBa0IsRUFBRSxTQUFlLEVBQUUsT0FBYTtRQUM5RCxNQUFNLEtBQUssR0FBK0I7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RUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUMsQ0FBQTtZQUMxRSxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUNILENBQUM7SUFFTyxlQUFlLENBQUMsTUFBYyxFQUFFLE1BQWM7UUFDcEQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUN6QjtZQUNFLE1BQU0sRUFBRSxNQUFNO1lBQ2QsTUFBTSxFQUFFLE1BQU07WUFDZCxRQUFRLEVBQUUsQ0FBQztTQUNaLENBQUMsQ0FBQTtJQUNOLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgaUJYUmVzdFBhcmFtRWxhcHNlZGl0ZW1HZXQsXHJcbiAgaUJYUmVzdFRhc2tFbGFwc2VkSXRlbUh0dHAsXHJcbiAgaUlzQWN0aW9uQWxsb3dlZFBhcmFtLFxyXG4gIGlCWFJlc3RQYXJhbUFkZEVsYXBzZWRpdGVtLFxyXG4gIGlCWFJlc3RQYXJhbVVwZGF0ZUVsYXBzZWRpdGVtLFxyXG4gIGlCWFJlc3RQYXJhbURlbEVsYXBzZWRpdGVtXHJcbn0gZnJvbSAnLi4vLi4vLi4vdHlwaWZpY2F0aW9uL3Jlc3QvdGFzaydcclxuaW1wb3J0IHsgSHR0cEJYU2VydmljZXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9odHRwL0h0dHBCWCdcclxuaW1wb3J0IHsgJGVsYXBzZWRpdGVtLCAkZ2V0bGlzdCwgJGlzYWN0aW9uYWxsb3dlZCwgJHRhc2sgfSBmcm9tICcuLi8uLi8uLi9jb25zdHMvcGFydC1uYW1lLW1ldGhvZHMnXHJcbmltcG9ydCB7IG1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xyXG5pbXBvcnQgeyBCWFJlc3RNYXBUYXNrRWxhcHNlZEl0ZW0gfSBmcm9tICcuLi8uLi8uLi9tYXAvdGFzay9lbGFwc2VkaXRlbSdcclxuaW1wb3J0IHsgZm9ya0pvaW4sIG1lcmdlTWFwLCBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnXHJcbmltcG9ydCB7IEJYUmVzdE5hdnZ5VXNlciB9IGZyb20gJy4uLy4uL3VzZXInXHJcbmltcG9ydCB7IEJYUmVzdE5hdnZ5VGFza3MgfSBmcm9tICcuLi8uLi90YXNrcydcclxuaW1wb3J0IHsgQlhSZXN0TmF2dnlEZWxlZ2F0ZUVsYXBzZWRJdGVtIH0gZnJvbSAnLi4vZGVsZWdhdGUvZWxhcHNlZGl0ZW0nXHJcbmltcG9ydCB7IGlCWFJlc3RVc2VyIH0gZnJvbSAnLi4vLi4vLi4vdHlwaWZpY2F0aW9uL3Jlc3QvdXNlcidcclxuaW1wb3J0IHsgQlhSZXN0TmF2dnlFbGFwc2VkSXRlbSB9IGZyb20gJy4uL2VsYXBzZWRpdGVtJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEJYUmVzdE5hdnZ5T3BlcmF0aW9uRWxhcHNlZEl0ZW0ge1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGh0dHAgPSBuZXcgSHR0cEJYU2VydmljZXMoKVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVsZWdhdGUgPSBuZXcgQlhSZXN0TmF2dnlEZWxlZ2F0ZUVsYXBzZWRJdGVtKClcclxuICBwcml2YXRlIHJlYWRvbmx5IEJYUmVzdE5hdnZ5VXNlciA9IG5ldyBCWFJlc3ROYXZ2eVVzZXIoKVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgQlhSZXN0TmF2dnlUYXNrcyA9IG5ldyBCWFJlc3ROYXZ2eVRhc2tzKClcclxuXHJcbiAgLy8gcHJpdmF0ZSByZWFkb25seSBCWFJlc3ROYXZ2eUVsYXBzZWRJdGVtID0gbmV3IEJYUmVzdE5hdnZ5RWxhcHNlZEl0ZW0oKVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIEJYUmVzdE5hdnZ5RWxhcHNlZEl0ZW06IEJYUmVzdE5hdnZ5RWxhcHNlZEl0ZW0pIHtcclxuICB9XHJcblxyXG4gIGdldEJ5SW50ZXJ2YWwoaWRzVXNlcnM6IG51bWJlcltdLCBkYXRlU3RhcnQ6IERhdGUsIGRhdGVFbmQ6IERhdGUpIHtcclxuICAgIGNvbnN0IHBhcmFtOiBpQlhSZXN0UGFyYW1FbGFwc2VkaXRlbUdldCA9IHtcclxuICAgICAgT1JERVI6IHtcclxuICAgICAgICBJRDogJ0RFU0MnXHJcbiAgICAgIH0sXHJcbiAgICAgIEZJTFRFUjoge1xyXG4gICAgICAgIFVTRVJfSUQ6IGlkc1VzZXJzLFxyXG4gICAgICAgICc+PUNSRUFURURfREFURSc6IGRhdGVTdGFydC50b0xvY2FsZVN0cmluZygncnUtUnUnLCB7XHJcbiAgICAgICAgICB0aW1lWm9uZU5hbWU6ICdzaG9ydCdcclxuICAgICAgICB9KSxcclxuICAgICAgICAnPD1DUkVBVEVEX0RBVEUnOiBkYXRlRW5kLnRvTG9jYWxlU3RyaW5nKCdydS1SdScsIHtcclxuICAgICAgICAgIHRpbWVab25lTmFtZTogJ3Nob3J0J1xyXG4gICAgICAgIH0pLFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5nZXRMaXN0KHBhcmFtKVxyXG4gIH1cclxuXHJcbiAgLy8gVE9ETzog0KHQtNC10LvQsNGC0Ywg0L3QvtGA0LzQsNC70YzQvdC+XHJcbiAgZ2V0TGlzdEJ5SURUYXNrKGlkczogbnVtYmVyW10pIHtcclxuICAgIC8vINCg0LDQsdC+0YLQsNC10YIg0YLQvtC70YzQutC+INC/0L7RgtC+0LzRgyDRh9GC0L4gXCJuUGFnZVNpemU6IDk5OTk5XCJcclxuICAgIHJldHVybiB0aGlzLmh0dHAuYnJhbmNoPGlCWFJlc3RQYXJhbUVsYXBzZWRpdGVtR2V0LCBpQlhSZXN0VGFza0VsYXBzZWRJdGVtSHR0cD5cclxuICAgIChcclxuICAgICAgaWRzLm1hcChpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgbmFtZTogdGhpcy5odHRwLmdldE5hbWVNZXRob2QoWyR0YXNrLCAkZWxhcHNlZGl0ZW0sICRnZXRsaXN0XSksXHJcbiAgICAgICAgICBwYXJhbToge1xyXG4gICAgICAgICAgICBUQVNLSUQ6IGksXHJcbiAgICAgICAgICAgIFBBUkFNUzoge1xyXG4gICAgICAgICAgICAgIE5BVl9QQVJBTVM6IHtcclxuICAgICAgICAgICAgICAgIG5QYWdlU2l6ZTogOTk5OTksXHJcbiAgICAgICAgICAgICAgICBpTnVtUGFnZTogMVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICkucGlwZShcclxuICAgICAgbWFwKHYgPT4ge1xyXG4gICAgICAgIGlmICh2ICYmIHYubGVuZ3RoKSB7XHJcbiAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLmh0dHAubWFwQnJhbmNoUmVzdWx0V2l0aG91dEtleSh2KVxyXG4gICAgICAgICAgcmV0dXJuIEJYUmVzdE1hcFRhc2tFbGFwc2VkSXRlbS5nZXRMaXN0KHJlcylcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgY2hlY2tQZXJtaXNzaW9uQWRkRWxhcHNlZFRpbWVUb1Rhc2tBcnIodGFza3M6IG51bWJlcltdLCB1c2VyQ3VycmVudDogaUJYUmVzdFVzZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpIHtcclxuICAgIGxldCByZXF1ZXN0OiBSZWNvcmQ8bnVtYmVyLCBPYnNlcnZhYmxlPGJvb2xlYW4+PiA9IE9iamVjdC5hc3NpZ24oe30sIC4uLnRhc2tzLm1hcChpID0+IHtcclxuICAgICAgcmV0dXJuIHtbaV06IHRoaXMuY2hlY2tQZXJtaXNzaW9uQWRkRWxhcHNlZFRpbWVUb1Rhc2soaSwgdXNlckN1cnJlbnQpfVxyXG4gICAgfSkpXHJcbiAgICByZXR1cm4gZm9ya0pvaW4ocmVxdWVzdClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICBtZXJnZU1hcCh2ID0+IHtcclxuICAgICAgICAgIGxldCBmb3JGb3JlYWNoID0gT2JqZWN0LmVudHJpZXModikubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtpZDogTnVtYmVyKGtleSksIHZhbHVlOiB2YWx1ZX1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBpZiAoZm9yRm9yZWFjaC5maW5kKGkgPT4gaS52YWx1ZSA9PT0gdW5kZWZpbmVkKSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGxldCBmb3JGb3JlYWNoSGF2ZSA9IGZvckZvcmVhY2guZmlsdGVyKGkgPT4gaS52YWx1ZSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICBsZXQgZm9yRm9yZWFjaE5vdEhhdmUgPSBmb3JGb3JlYWNoLmZpbHRlcihpID0+IGkudmFsdWUgPT09IHVuZGVmaW5lZCkgLy8g0YLRg9GCINC/0L7Qu9GD0YfQsNC10Lwg0LLRgdC1IGlkINC90LUg0YHQvtGF0YDQsNC90LXQvdC90YvRhSDRgyDQvdCw0YEg0L/RgNCw0LJcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5icmFuY2g8aUlzQWN0aW9uQWxsb3dlZFBhcmFtLCBib29sZWFuPihcclxuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5mb3JGb3JlYWNoTm90SGF2ZVxyXG4gICAgICAgICAgICAgICAgLm1hcChpID0+IGkuaWQpXHJcbiAgICAgICAgICAgICAgICAubWFwKGkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIFtpXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5odHRwLmdldE5hbWVNZXRob2QoWyR0YXNrLCAkZWxhcHNlZGl0ZW0sICRpc2FjdGlvbmFsbG93ZWRdKSxcclxuICAgICAgICAgICAgICAgICAgICAgIHBhcmFtOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRBU0tJRDogaSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgSVRFTUlEOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBQ1RJT05JRDogMVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICkucGlwZShcclxuICAgICAgICAgICAgICBtYXAodiA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodiAmJiB2Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCByZXM6IFJlY29yZDxudW1iZXIsIGJvb2xlYW4+ID0gdGhpcy5odHRwLm1hcEJyYW5jaFJlc3VsdCh2KVxyXG4gICAgICAgICAgICAgICAgICBmb3JGb3JlYWNoTm90SGF2ZSA9IE9iamVjdC5lbnRyaWVzKHJlcykubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge2lkOiBOdW1iZXIoa2V5KSwgdmFsdWU6IHZhbHVlfVxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihmb3JGb3JlYWNoSGF2ZSwgZm9yRm9yZWFjaE5vdEhhdmUpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIG9mKGZvckZvcmVhY2gpXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog0J/RgNC+0LLQtdGA0LrQsCDQvdCwINCy0L7Qt9C80L7QttC90L7RgdGC0Ywg0LTQvtCx0LDQstC70LXQvdC40LUg0LfQsNC/0LjRgdC4INGC0YDQtdC60LAg0LIg0YLQsNGB0LrRg1xyXG4gICAqXHJcbiAgICogQHBhcmFtIGlkVGFza1xyXG4gICAqIEBwYXJhbSB1c2VyQ3VycmVudFxyXG4gICAqL1xyXG4gIGNoZWNrUGVybWlzc2lvbkFkZEVsYXBzZWRUaW1lVG9UYXNrKGlkVGFzazogbnVtYmVyLCB1c2VyQ3VycmVudDogaUJYUmVzdFVzZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpIHtcclxuICAgIC8vIGxldCBwZXJtaXNzaW9uID0gUGVybWlzc2lvbi5nZXQoKVxyXG4gICAgLy8gaWYgKHBlcm1pc3Npb24/LnRhc2tzPy5sZW5ndGgpIHtcclxuICAgIC8vICAgbGV0IGZpbmRUYXNrID0gcGVybWlzc2lvbi50YXNrcy5maW5kKGkgPT4gaS5pZCA9PT0gaWRUYXNrKVxyXG4gICAgLy8gICBpZiAoZmluZFRhc2s/LnBlcm1pc3Npb24pIHtcclxuICAgIC8vICAgICByZXR1cm4gb2YoZmluZFRhc2sucGVybWlzc2lvblsnRUxBUFNFRFRJTUUuQUREJ10pXHJcbiAgICAvLyAgIH1cclxuICAgIHJldHVybiAoKHVzZXJDdXJyZW50KSA/IG9mKHVzZXJDdXJyZW50KSA6IHRoaXMuQlhSZXN0TmF2dnlVc2VyLmN1cnJlbnQoKS5yZXMoKSkucGlwZShcclxuICAgICAgbWVyZ2VNYXAoc2VsZiA9PiB7XHJcbiAgICAgICAgaWYgKHNlbGYpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLkJYUmVzdE5hdnZ5VGFza3MudGFzay5nZXRBY2Nlc3MoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBpZDogaWRUYXNrLFxyXG4gICAgICAgICAgICAgIHVzZXJzOiBbc2VsZi5JRF1cclxuICAgICAgICAgICAgfSkucmVzKCkucGlwZShcclxuICAgICAgICAgICAgLy8gdGFwKHYgPT4ge1xyXG4gICAgICAgICAgICAvLyAgIGlmICh2ICYmIHZbc2VsZi5JRF0pIHtcclxuICAgICAgICAgICAgLy8gICAgIFBlcm1pc3Npb24uc2V0KHtcclxuICAgICAgICAgICAgLy8gICAgICAgdGFza3M6IFt7aWQ6IGlkVGFzaywgcGVybWlzc2lvbjogdltzZWxmLklEXSwgZWxhcHNlZEl0ZW06IFtdfV1cclxuICAgICAgICAgICAgLy8gICAgIH0pXHJcbiAgICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgICAvLyB9KSxcclxuICAgICAgICAgICAgbWFwKHYgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiAodiAmJiB2W3NlbGYuSURdKSA/IHZbc2VsZi5JRF1bJ0VMQVBTRURUSU1FLkFERCddIDogZmFsc2VcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpXHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gcmV0dXJuIG9mKHVuZGVmaW5lZClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqINCf0YDQvtCy0LXRgNC60LAg0L3QsCDQstC+0LfQvNC+0LbQvdC+0YHRgtGMINC/0YDQvtGH0YLQtdC90LjRjyDRgtCw0LrRgdC60LhcclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZFRhc2tcclxuICAgKiBAcGFyYW0gdXNlckN1cnJlbnRcclxuICAgKi9cclxuICBjaGVja1Blcm1pc3Npb25SZWFkVGFzayhpZFRhc2s6IG51bWJlciwgdXNlckN1cnJlbnQ6IGlCWFJlc3RVc2VyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkKSB7XHJcbiAgICAvLyBsZXQgcGVybWlzc2lvbiA9IFBlcm1pc3Npb24uZ2V0KClcclxuICAgIC8vIGlmIChwZXJtaXNzaW9uPy50YXNrcz8ubGVuZ3RoKSB7XHJcbiAgICAvLyAgIGxldCBmaW5kVGFzayA9IHBlcm1pc3Npb24udGFza3MuZmluZChpID0+IGkuaWQgPT09IGlkVGFzaylcclxuICAgIC8vICAgaWYgKGZpbmRUYXNrPy5wZXJtaXNzaW9uKSB7XHJcbiAgICAvLyAgICAgcmV0dXJuIG9mKGZpbmRUYXNrLnBlcm1pc3Npb24uQUNDRVBUKVxyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIGNvbnNvbGUubG9nKCdpZFRhc2snLCBpZFRhc2spXHJcbiAgICByZXR1cm4gKCh1c2VyQ3VycmVudCkgPyBvZih1c2VyQ3VycmVudCkgOiB0aGlzLkJYUmVzdE5hdnZ5VXNlci5jdXJyZW50KCkucmVzKCkpLnBpcGUoXHJcbiAgICAgIG1lcmdlTWFwKHNlbGYgPT4ge1xyXG4gICAgICAgIGlmIChzZWxmKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5CWFJlc3ROYXZ2eVRhc2tzLnRhc2suZ2V0QWNjZXNzKFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgaWQ6IGlkVGFzayxcclxuICAgICAgICAgICAgICB1c2VyczogW3NlbGYuSURdXHJcbiAgICAgICAgICAgIH0pLnJlcygpLnBpcGUoXHJcbiAgICAgICAgICAgIC8vIHRhcCh2ID0+IHtcclxuICAgICAgICAgICAgLy8gICBpZiAodiAmJiB2W3NlbGYuSURdKSB7XHJcbiAgICAgICAgICAgIC8vICAgICBQZXJtaXNzaW9uLnNldCh7XHJcbiAgICAgICAgICAgIC8vICAgICAgIHRhc2tzOiBbe2lkOiBpZFRhc2ssIHBlcm1pc3Npb246IHZbc2VsZi5JRF0sIGVsYXBzZWRJdGVtOiBbXX1dXHJcbiAgICAgICAgICAgIC8vICAgICB9KVxyXG4gICAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgICAgLy8gfSksXHJcbiAgICAgICAgICAgIG1hcCh2ID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gKHYgJiYgdltzZWxmLklEXSkgPyAhIXZbc2VsZi5JRF0gOiBmYWxzZSAvLyDQvtGC0LTQtdC70YzQvdC+0LPQviDRhNC70LDQs9CwINC90LAg0YfRgtC10L3QuNC1INC90LXRgiwg0LLRi9GF0L7QtNC40YIg0YfRgtC+INC10YHQu9C4INC/0YDQsNCy0LAg0L7RgtC00LDQu9C40YHRjCDRgtC+INC4INC/0YDQsNCy0LAg0LXRgdGC0YxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpXHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgICAvLyB9XHJcbiAgICAvL1xyXG4gICAgLy8gcmV0dXJuIG9mKHVuZGVmaW5lZClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqINCX0LDQutC+0L3Rh9C10L3QvdGL0Lkg0LzQtdGC0L7QtCDQtNC+0LHQsNCy0LvQtdC90LjRjyDQt9Cw0L/QuNGB0Lgg0YEg0L/RgNC10LTQstCw0YDQuNGC0LXQu9GM0L3QvtC5INC/0YDQvtCy0LXRgNC60L7QuSDQv9GA0LDQslxyXG4gICAqXHJcbiAgICogVE9ETzog0LTQvtCx0LDQstC40YLRjCDRgdC+0YXRgNCw0L3QtdC90LjQtSDQv9GA0LXQtNCy0LDRgNC40YLQtdC70YzQvdC+INC/0YDQvtCy0LXRgNC10L3QvdGL0YUg0LfQsNC/0LjRgdC10LlcclxuICAgKiBAcGFyYW0gcGFyYW1cclxuICAgKi9cclxuICBhZGQocGFyYW06IGlCWFJlc3RQYXJhbUFkZEVsYXBzZWRpdGVtKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGVja1Blcm1pc3Npb25SZWFkVGFzayhwYXJhbS5UQVNLSUQpLnBpcGUoXHJcbiAgICAgIG1lcmdlTWFwKGFsbG93ZWRSZWFkVGFzayA9PiB7XHJcbiAgICAgICAgaWYgKGFsbG93ZWRSZWFkVGFzaykge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tQZXJtaXNzaW9uQWRkRWxhcHNlZFRpbWVUb1Rhc2socGFyYW0uVEFTS0lEKS5waXBlKFxyXG4gICAgICAgICAgICBtZXJnZU1hcChhbGxvd2VkID0+IHtcclxuICAgICAgICAgICAgICBpZiAoYWxsb3dlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuQlhSZXN0TmF2dnlFbGFwc2VkSXRlbS5hZGQocGFyYW0pLnJlcygpXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcign0J7RgtGB0YPRgtGB0YLQstGD0Y7RgiDQv9GA0LDQstCwINC00L7QsdCw0LLQu9C10L3QuNC1INC30LDQv9C40YHQuCDQt9Cw0YLRgNCw0YfQtdC90L3QvtCz0L4g0LLRgNC10LzQtdC90LgnKSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ9Ce0YLRgdGD0YLRgdGC0LLRg9GO0YIg0L/RgNCw0LLQsCDQvdCwINGH0YLQtdC90LjQtSDQt9Cw0LTQsNGH0LgnKSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog0JfQsNC60L7QvdGH0LXQvdC90YvQuSDQvNC10YLQvtC0INC+0LHQvdC+0LLQu9C10L3QuNGPINC30LDQv9C40YHQuCDRgSDQv9GA0LXQtNCy0LDRgNC40YLQtdC70YzQvdC+0Lkg0L/RgNC+0LLQtdGA0LrQvtC5INC/0YDQsNCyXHJcbiAgICpcclxuICAgKiBUT0RPOiDQtNC+0LHQsNCy0LjRgtGMINGB0L7RhdGA0LDQvdC10L3QuNC1INC/0YDQtdC00LLQsNGA0LjRgtC10LvRjNC90L4g0L/RgNC+0LLQtdGA0LXQvdC90YvRhSDQt9Cw0L/QuNGB0LXQuVxyXG4gICAqIEBwYXJhbSBwYXJhbVxyXG4gICAqL1xyXG4gIHVwZGF0ZShwYXJhbTogaUJYUmVzdFBhcmFtVXBkYXRlRWxhcHNlZGl0ZW0pIHtcclxuICAgIHJldHVybiB0aGlzLmNoZWNrUGVybWlzc2lvblJlYWRUYXNrKHBhcmFtLlRBU0tJRCkucGlwZShcclxuICAgICAgbWVyZ2VNYXAoKGFsbG93ZWRSZWFkVGFzaykgPT4ge1xyXG4gICAgICAgIGlmIChhbGxvd2VkUmVhZFRhc2spIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmlzQWxsb3dlZE1vZGlmeShwYXJhbS5UQVNLSUQsIHBhcmFtLklURU1JRCkucGlwZShcclxuICAgICAgICAgICAgbWVyZ2VNYXAoYWxsb3dlZCA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGFsbG93ZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkJYUmVzdE5hdnZ5RWxhcHNlZEl0ZW0udXBkYXRlKHBhcmFtKS5yZXMoKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ9Ce0YLRgdGD0YLRgdGC0LLRg9GO0YIg0L/RgNCw0LLQsCDQvdCwINC40LfQvNC10L3QtdC90LjQtSDQt9Cw0L/QuNGB0Lgg0LfQsNGC0YDQsNGH0LXQvdC90L7Qs9C+INCy0YDQtdC80LXQvdC4JykpXHJcbiAgICAgICAgICAgIH0pKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ9Ce0YLRgdGD0YLRgdGC0LLRg9GO0YIg0L/RgNCw0LLQsCDQvdCwINGH0YLQtdC90LjQtSDQt9Cw0LTQsNGH0LgnKSlcclxuICAgICAgfSkpXHJcbiAgfVxyXG5cclxuICAvLyBUT0RPOiDRgNCw0LfQvtCx0YDQsNGC0YzRgdGPINGH0YLQviDRjdGC0L4g0LfQsCDQtdCx0LDRgtC90Y8g0LIg0LrQvtC80LzQtdC90YLQsNGFINC4INCy0L/QuNGB0LDRgtGMINC90L7RgNC80LDQu9GM0L3QvtC5INC60L7QvNC10L3RgiDQtdGB0LvQuCDQvtC90LAg0L3Rg9C20L3QsFxyXG4gIGlzQWxsb3dlZE1vZGlmeShpZFRhc2s6IG51bWJlciwgaWRJdGVtOiBudW1iZXIpIHtcclxuICAgIC8vIGxldCBwZXJtaXNzaW9uID0gUGVybWlzc2lvbi5nZXQoKVxyXG4gICAgLy8gaWYgKHBlcm1pc3Npb24/LnRhc2tzPy5sZW5ndGgpIHtcclxuICAgIC8vICAgbGV0IGZpbmRUYXNrID0gcGVybWlzc2lvbi50YXNrcy5maW5kKGkgPT4gaS5pZCA9PT0gaWRUYXNrKVxyXG4gICAgLy8gICBpZiAoZmluZFRhc2spIHtcclxuICAgIC8vICAgICBsZXQgZmluZCA9IGZpbmRUYXNrLmVsYXBzZWRJdGVtLmZpbmQoaSA9PiBpLmlkID09PSBpZEl0ZW0pXHJcbiAgICAvLyAgICAgaWYgKGZpbmQgJiYgZmluZC52ZXJpZmllZC5lZGl0KSB7XHJcbiAgICAvLyAgICAgICByZXR1cm4gb2YoZmluZC5lZGl0KVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG5cclxuICAgIHJldHVybiB0aGlzLkJYUmVzdE5hdnZ5RWxhcHNlZEl0ZW0uaXNBY3Rpb25BbGxvd2VkKHtcclxuICAgICAgVEFTS0lEOiBpZFRhc2ssXHJcbiAgICAgIElURU1JRDogaWRJdGVtLFxyXG4gICAgICBBQ1RJT05JRDogMlxyXG4gICAgfSkucmVzKClcclxuICAgIC8vICAgLnBpcGUoXHJcbiAgICAvLyAgIHRhcCh2ID0+IHtcclxuICAgIC8vICAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAvLyAgICAgICBQZXJtaXNzaW9uLnNldFRhc2tFbGFwc2VkSXRlbShpZFRhc2ssXHJcbiAgICAvLyAgICAgICAgIHtcclxuICAgIC8vICAgICAgICAgICBpZDogaWRJdGVtLFxyXG4gICAgLy8gICAgICAgICAgIGVkaXQ6IHYsXHJcbiAgICAvLyAgICAgICAgICAgZGVsOiBmYWxzZSxcclxuICAgIC8vICAgICAgICAgICB2ZXJpZmllZDoge1xyXG4gICAgLy8gICAgICAgICAgICAgZWRpdDogdHJ1ZSxcclxuICAgIC8vICAgICAgICAgICAgIGRlbDogZmFsc2UsXHJcbiAgICAvLyAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICB9KVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfSlcclxuICAgIC8vIClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGlzQWN0aW9uQWxsb3dlZCDRgSDRhNC40LrRgdC+0Lwg0L3QsCDQv9GA0L7QstC10YDQutGDINCy0L7Qt9C80L7QttC90L7RgdGC0Lgg0YfRgtC10L3QuNGPINC30LDQtNCw0YfQuCDQt9Cw0L/QuNGB0LhcclxuICAgKiAo0LHQtdC3INC/0YDQvtCy0LXRgNC60Lgg0LTQsNGR0YIg0L7RiNC40LHQutGDKVxyXG4gICAqXHJcbiAgICogaWRBY3Rpb246XHJcbiAgICogMSAtIEFDVElPTl9FTEFQU0VEX1RJTUVfQUREXHJcbiAgICogMiAtIEFDVElPTl9FTEFQU0VEX1RJTUVfTU9ESUZZXHJcbiAgICogMyAtIEFDVElPTl9FTEFQU0VEX1RJTUVfUkVNT1ZFXHJcbiAgICogQHBhcmFtIHBhcmFtXHJcbiAgICovXHJcbiAgaXNBY3Rpb25BbGxvd2VkKHBhcmFtOiBpSXNBY3Rpb25BbGxvd2VkUGFyYW0pIHtcclxuICAgIHJldHVybiB0aGlzLmNoZWNrUGVybWlzc2lvblJlYWRUYXNrKHBhcmFtLlRBU0tJRCkucGlwZShcclxuICAgICAgbWVyZ2VNYXAoY2FuUmVhZCA9PiB7XHJcbiAgICAgICAgaWYgKGNhblJlYWQpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLkJYUmVzdE5hdnZ5RWxhcHNlZEl0ZW0uaXNBY3Rpb25BbGxvd2VkKHBhcmFtKS5yZXMoKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ9Ce0YLRgdGD0YLRgdGC0LLRg9GO0YIg0L/RgNCw0LLQsCDQvdCwINGH0YLQtdC90LjQtSDQt9Cw0LTQsNGH0LgnKSlcclxuICAgICAgfSlcclxuICAgIClcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiDQn9C+0LvQvdC+0YbQtdC90L3Ri9C5INC80LXRgtC+0LQg0YPQtNCw0LvQtdC90LjRj1xyXG4gICAqXHJcbiAgICogQHBhcmFtIHBhcmFtXHJcbiAgICovXHJcbiAgZGVsKHBhcmFtOiBpQlhSZXN0UGFyYW1EZWxFbGFwc2VkaXRlbSkge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hlY2tQZXJtaXNzaW9uUmVhZFRhc2socGFyYW0uVEFTS0lEKS5waXBlKFxyXG4gICAgICBtZXJnZU1hcChhbGxvd2VkUmVhZFRhc2sgPT4ge1xyXG4gICAgICAgIGlmIChhbGxvd2VkUmVhZFRhc2spIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmlzQWxsb3dlZFJlbW92ZShwYXJhbS5UQVNLSUQsIHBhcmFtLklURU1JRCkucGlwZShcclxuICAgICAgICAgICAgbWVyZ2VNYXAoYWxsb3dlZCA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGFsbG93ZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkJYUmVzdE5hdnZ5RWxhcHNlZEl0ZW0uZGVsZXRlKHBhcmFtKS5yZXMoKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ9Ce0YLRgdGD0YLRgdGC0LLRg9GO0YIg0L/RgNCw0LLQsCDQvdCwINGD0LTQsNC70LXQvdC40LUg0LfQsNC/0LjRgdC4INC30LDRgtGA0LDRh9C10L3QvdC+0LPQviDQstGA0LXQvNC10L3QuCcpKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcign0J7RgtGB0YPRgtGB0YLQstGD0Y7RgiDQv9GA0LDQstCwINC90LAg0YfRgtC10L3QuNC1INC30LDQtNCw0YfQuCcpKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNBbGxvd2VkUmVtb3ZlKGlkVGFzazogbnVtYmVyLCBpZEl0ZW06IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNBY3Rpb25BbGxvd2VkKFxyXG4gICAgICB7XHJcbiAgICAgICAgVEFTS0lEOiBpZFRhc2ssXHJcbiAgICAgICAgSVRFTUlEOiBpZEl0ZW0sXHJcbiAgICAgICAgQUNUSU9OSUQ6IDNcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuIl19
325
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxhcHNlZGl0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ieC1yZXN0L3NyYy9yZXF1ZXN0LW5hdnZ5L3Rhc2svb3BlcmF0aW9uL2VsYXBzZWRpdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVVBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQ3ZILE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDMUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFDeEUsT0FBTyxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQzlDLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBSXhFLE1BQU0sT0FBTywrQkFBK0I7SUFPMUMseUVBQXlFO0lBRXpFLFlBQW9CLHNCQUE4QztRQUE5QywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBUGpELFNBQUksR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFBO1FBQzNCLGFBQVEsR0FBRyxJQUFJLDhCQUE4QixFQUFFLENBQUE7UUFDL0Msb0JBQWUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFBO1FBQ3ZDLHFCQUFnQixHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQTtJQUsxRCxDQUFDO0lBRUQsYUFBYSxDQUFDLFFBQWtCLEVBQUUsU0FBZSxFQUFFLE9BQWE7UUFDOUQsTUFBTSxL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LENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLENBQUE7WUFDMUUsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNILENBQUE7SUFDSCxDQUFDO0lBRU8sZUFBZSxDQUFDLE1BQWMsRUFBRSxNQUFjO1FBQ3BELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FDekI7WUFDRSxNQUFNLEVBQUUsTUFBTTtZQUNkLE1BQU0sRUFBRSxNQUFNO1lBQ2QsUUFBUSxFQUFFLENBQUM7U0FDWixDQUFDLENBQUE7SUFDTixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIGlCWFJlc3RQYXJhbUVsYXBzZWRpdGVtR2V0LFxyXG4gIGlCWFJlc3RUYXNrRWxhcHNlZEl0ZW1IdHRwLFxyXG4gIGlCWFJlc3RQYXJhbVRhc2tHZXRBY2Nlc3MsXHJcbiAgaUJYUmVzdFRhc2tHZXRBY2Nlc3MsXHJcbiAgaUlzQWN0aW9uQWxsb3dlZFBhcmFtLFxyXG4gIGlCWFJlc3RQYXJhbUFkZEVsYXBzZWRpdGVtLFxyXG4gIGlCWFJlc3RQYXJhbVVwZGF0ZUVsYXBzZWRpdGVtLFxyXG4gIGlCWFJlc3RQYXJhbURlbEVsYXBzZWRpdGVtXHJcbn0gZnJvbSAnLi4vLi4vLi4vdHlwaWZpY2F0aW9uL3Jlc3QvdGFzaydcclxuaW1wb3J0IHsgSHR0cEJYU2VydmljZXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9odHRwL0h0dHBCWCdcclxuaW1wb3J0IHsgJGVsYXBzZWRpdGVtLCAkZ2V0YWNjZXNzLCAkZ2V0bGlzdCwgJGlzYWN0aW9uYWxsb3dlZCwgJHRhc2ssICR0YXNrcyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0cy9wYXJ0LW5hbWUtbWV0aG9kcydcclxuaW1wb3J0IHsgbWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXHJcbmltcG9ydCB7IEJYUmVzdE1hcFRhc2tFbGFwc2VkSXRlbSB9IGZyb20gJy4uLy4uLy4uL21hcC90YXNrL2VsYXBzZWRpdGVtJ1xyXG5pbXBvcnQgeyBtZXJnZU1hcCwgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJ1xyXG5pbXBvcnQgeyBCWFJlc3ROYXZ2eVVzZXIgfSBmcm9tICcuLi8uLi91c2VyJ1xyXG5pbXBvcnQgeyBCWFJlc3ROYXZ2eVRhc2tzIH0gZnJvbSAnLi4vLi4vdGFza3MnXHJcbmltcG9ydCB7IEJYUmVzdE5hdnZ5RGVsZWdhdGVFbGFwc2VkSXRlbSB9IGZyb20gJy4uL2RlbGVnYXRlL2VsYXBzZWRpdGVtJ1xyXG5pbXBvcnQgeyBpQlhSZXN0VXNlciB9IGZyb20gJy4uLy4uLy4uL3R5cGlmaWNhdGlvbi9yZXN0L3VzZXInXHJcbmltcG9ydCB7IEJYUmVzdE5hdnZ5RWxhcHNlZEl0ZW0gfSBmcm9tICcuLi9lbGFwc2VkaXRlbSdcclxuXHJcbmV4cG9ydCBjbGFzcyBCWFJlc3ROYXZ2eU9wZXJhdGlvbkVsYXBzZWRJdGVtIHtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gbmV3IEh0dHBCWFNlcnZpY2VzKClcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlbGVnYXRlID0gbmV3IEJYUmVzdE5hdnZ5RGVsZWdhdGVFbGFwc2VkSXRlbSgpXHJcbiAgcHJpdmF0ZSByZWFkb25seSBCWFJlc3ROYXZ2eVVzZXIgPSBuZXcgQlhSZXN0TmF2dnlVc2VyKClcclxuICBwcml2YXRlIHJlYWRvbmx5IEJYUmVzdE5hdnZ5VGFza3MgPSBuZXcgQlhSZXN0TmF2dnlUYXNrcygpXHJcblxyXG4gIC8vIHByaXZhdGUgcmVhZG9ubHkgQlhSZXN0TmF2dnlFbGFwc2VkSXRlbSA9IG5ldyBCWFJlc3ROYXZ2eUVsYXBzZWRJdGVtKClcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBCWFJlc3ROYXZ2eUVsYXBzZWRJdGVtOiBCWFJlc3ROYXZ2eUVsYXBzZWRJdGVtKSB7XHJcbiAgfVxyXG5cclxuICBnZXRCeUludGVydmFsKGlkc1VzZXJzOiBudW1iZXJbXSwgZGF0ZVN0YXJ0OiBEYXRlLCBkYXRlRW5kOiBEYXRlKSB7XHJcbiAgICBjb25zdCBwYXJhbTogaUJYUmVzdFBhcmFtRWxhcHNlZGl0ZW1HZXQgPSB7XHJcbiAgICAgIE9SREVSOiB7XHJcbiAgICAgICAgSUQ6ICdERVNDJ1xyXG4gICAgICB9LFxyXG4gICAgICBGSUxURVI6IHtcclxuICAgICAgICBVU0VSX0lEOiBpZHNVc2VycyxcclxuICAgICAgICAnPj1DUkVBVEVEX0RBVEUnOiBkYXRlU3RhcnQudG9Mb2NhbGVTdHJpbmcoJ3J1LVJ1Jywge1xyXG4gICAgICAgICAgdGltZVpvbmVOYW1lOiAnc2hvcnQnXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgJzw9Q1JFQVRFRF9EQVRFJzogZGF0ZUVuZC50b0xvY2FsZVN0cmluZygncnUtUnUnLCB7XHJcbiAgICAgICAgICB0aW1lWm9uZU5hbWU6ICdzaG9ydCdcclxuICAgICAgICB9KSxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuZ2V0TGlzdChwYXJhbSlcclxuICB9XHJcblxyXG4gIC8vIFRPRE86INCh0LTQtdC70LDRgtGMINC90L7RgNC80LDQu9GM0L3QvlxyXG4gIGdldExpc3RCeUlEVGFzayhpZHM6IG51bWJlcltdKSB7XHJcbiAgICAvLyDQoNCw0LHQvtGC0LDQtdGCINGC0L7Qu9GM0LrQviDQv9C+0YLQvtC80YMg0YfRgtC+IFwiblBhZ2VTaXplOiA5OTk5OVwiXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmJyYW5jaDxpQlhSZXN0UGFyYW1FbGFwc2VkaXRlbUdldCwgaUJYUmVzdFRhc2tFbGFwc2VkSXRlbUh0dHA+XHJcbiAgICAoXHJcbiAgICAgIGlkcy5tYXAoaSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIG5hbWU6IHRoaXMuaHR0cC5nZXROYW1lTWV0aG9kKFskdGFzaywgJGVsYXBzZWRpdGVtLCAkZ2V0bGlzdF0pLFxyXG4gICAgICAgICAgcGFyYW06IHtcclxuICAgICAgICAgICAgVEFTS0lEOiBpLFxyXG4gICAgICAgICAgICBQQVJBTVM6IHtcclxuICAgICAgICAgICAgICBOQVZfUEFSQU1TOiB7XHJcbiAgICAgICAgICAgICAgICBuUGFnZVNpemU6IDk5OTk5LFxyXG4gICAgICAgICAgICAgICAgaU51bVBhZ2U6IDFcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApLnBpcGUoXHJcbiAgICAgIG1hcCh2ID0+IHtcclxuICAgICAgICBpZiAodiAmJiB2Lmxlbmd0aCkge1xyXG4gICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5odHRwLm1hcEJyYW5jaFJlc3VsdFdpdGhvdXRLZXkodilcclxuICAgICAgICAgIHJldHVybiBCWFJlc3RNYXBUYXNrRWxhcHNlZEl0ZW0uZ2V0TGlzdChyZXMpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgfSlcclxuICAgIClcclxuICB9XHJcblxyXG4gIGNoZWNrUGVybWlzc2lvbkFkZEVsYXBzZWRUaW1lVG9UYXNrQXJyKHRhc2tzOiBudW1iZXJbXSwgdXNlckN1cnJlbnQ6IGlCWFJlc3RVc2VyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkKSB7XG4gICAgLy8g0KPQsdC40YDQsNC10Lwg0LTRg9Cx0LvQuCwg0YfRgtC+0LHRiyDQvdC1INC/0YDQvtCy0LXRgNGP0YLRjCDQv9GA0LDQstCwINC/0L4g0L7QtNC90L7QuSDQt9Cw0LTQsNGH0LUg0L3QtdGB0LrQvtC70YzQutC+INGA0LDQty5cbiAgICBjb25zdCBpZHMgPSBbLi4ubmV3IFNldCh0YXNrcy5maWx0ZXIoaSA9PiAhIWkpKV1cbiAgICAvLyDQldGB0LvQuCDRgtC10LrRg9GJ0LjQuSDQv9C+0LvRjNC30L7QstCw0YLQtdC70Ywg0L3QtSDQv9C10YDQtdC00LDQvSDRgdC90LDRgNGD0LbQuCwg0LfQsNC/0YDQsNGI0LjQstCw0LXQvCDQtdCz0L4g0L7QtNC40L0g0YDQsNC3INC90LAg0LLQtdGB0Ywg0L3QsNCx0L7RgCDQt9Cw0LTQsNGHLlxuICAgIGNvbnN0IHVzZXIkID0gdXNlckN1cnJlbnQgPyBvZih1c2VyQ3VycmVudCkgOiB0aGlzLkJYUmVzdE5hdnZ5VXNlci5jdXJyZW50KCkucmVzKClcblxuICAgIC8vINCh0YLQsNGA0YvQuSBiYXRjaCDRh9C10YDQtdC3IHRhc2suZWxhcHNlZGl0ZW0uaXNhY3Rpb25hbGxvd2VkLlxuICAgIC8vINCS0YvQt9GL0LLQsNC10Lwg0LXQs9C+INC90LjQttC1INGC0L7Qu9GM0LrQviDQtNC70Y8g0LfQsNC00LDRhywg0L/QviDQutC+0YLQvtGA0YvQvCBnZXRhY2Nlc3Mg0L3QtSDQstC10YDQvdGD0LsgRUxBUFNFRFRJTUUuQURELlxuICAgIGNvbnN0IGxvYWRNaXNzaW5nQnlBY3Rpb25BbGxvd2VkID0gKG1pc3NpbmdJZHM6IG51bWJlcltdLCByZXNvbHZlZDogeyBpZDogbnVtYmVyLCB2YWx1ZTogYm9vbGVhbiB9W10pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuYnJhbmNoPGlJc0FjdGlvbkFsbG93ZWRQYXJhbSwgYm9vbGVhbj4oXG4gICAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLm1pc3NpbmdJZHMubWFwKGkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBbaV06IHtcbiAgICAgICAgICAgICAgbmFtZTogdGhpcy5odHRwLmdldE5hbWVNZXRob2QoWyR0YXNrLCAkZWxhcHNlZGl0ZW0sICRpc2FjdGlvbmFsbG93ZWRdKSxcbiAgICAgICAgICAgICAgcGFyYW06IHtcbiAgICAgICAgICAgICAgICBUQVNLSUQ6IGksXG4gICAgICAgICAgICAgICAgSVRFTUlEOiAxLFxuICAgICAgICAgICAgICAgIEFDVElPTklEOiAxXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pKVxuICAgICAgKS5waXBlKFxuICAgICAgICBtYXAodiA9PiB7XG4gICAgICAgICAgaWYgKHYgJiYgdi5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlczogUmVjb3JkPG51bWJlciwgYm9vbGVhbj4gPSB0aGlzLmh0dHAubWFwQnJhbmNoUmVzdWx0KHYpXG4gICAgICAgICAgICBjb25zdCBsb2FkZWQgPSBPYmplY3QuZW50cmllcyhyZXMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7aWQ6IE51bWJlcihrZXkpLCB2YWx1ZX1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHJldHVybiBbLi4ucmVzb2x2ZWQsIC4uLmxvYWRlZF1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfVxuXG4gICAgaWYgKCFpZHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gb2YoW10pXG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXIkLnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgbWVyZ2VNYXAoc2VsZiA9PiB7XG4gICAgICAgIGlmICghc2VsZikge1xuICAgICAgICAgIC8vINCh0YLRgNCw0YXQvtCy0L7Rh9C90LDRjyDQstC10YLQutCwOiDQtdGB0LvQuCB1c2VyLmN1cnJlbnQg0L3QtSDQstC10YDQvdGD0LvRgdGPLCBnZXRhY2Nlc3Mg0LLRi9C30LLQsNGC0Ywg0L3QtdC70YzQt9GPLlxuICAgICAgICAgIHJldHVybiBsb2FkTWlzc2luZ0J5QWN0aW9uQWxsb3dlZChpZHMsIFtdKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8g0J7RgdC90L7QstC90L7QuSDQv9GD0YLRjDog0L7QtNC90LjQvCBiYXRjaC3Qt9Cw0L/RgNC+0YHQvtC8INC/0L7Qu9GD0YfQsNC10Lwg0L/RgNCw0LLQsCBFTEFQU0VEVElNRS5BREQg0L/QviDQstGB0LXQvCDQt9Cw0LTQsNGH0LDQvC5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5icmFuY2g8aUJYUmVzdFBhcmFtVGFza0dldEFjY2VzcywgaUJYUmVzdFRhc2tHZXRBY2Nlc3M+KFxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLmlkcy5tYXAoaWQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgW2lkXToge1xuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuaHR0cC5nZXROYW1lTWV0aG9kKFskdGFza3MsICR0YXNrLCAkZ2V0YWNjZXNzXSksXG4gICAgICAgICAgICAgICAgcGFyYW06IHtcbiAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgdXNlcnM6IFtzZWxmLklEXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKVxuICAgICAgICApLnBpcGUoXG4gICAgICAgICAgbWVyZ2VNYXAodiA9PiB7XG4gICAgICAgICAgICBpZiAodiAmJiB2Lmxlbmd0aCkge1xuICAgICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLmh0dHAubWFwQnJhbmNoUmVzdWx0PGlCWFJlc3RUYXNrR2V0QWNjZXNzPih2KVxuICAgICAgICAgICAgICBjb25zdCBwZXJtaXNzaW9ucyA9IGlkcy5tYXAoaWQgPT4gKHtcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcmVzW2lkXT8uYWxsb3dlZEFjdGlvbnM/LltzZWxmLklEXT8uWydFTEFQU0VEVElNRS5BREQnXVxuICAgICAgICAgICAgICB9KSlcblxuICAgICAgICAgICAgICAvLyBnZXRhY2Nlc3Mg0LzQvtC20LXRgiDQstC10YDQvdGD0YLRjCB0cnVlINC40LvQuCBmYWxzZSAtINC+0LHQsCDQt9C90LDRh9C10L3QuNGPINGB0YfQuNGC0LDQtdC8INCz0L7RgtC+0LLRi9C8INC+0YLQstC10YLQvtC8LlxuICAgICAgICAgICAgICAvLyDQkiDRgdGC0LDRgNGL0LkgaXNhY3Rpb25hbGxvd2VkINC+0YLQv9GA0LDQstC70Y/QtdC8INGC0L7Qu9GM0LrQviDQt9Cw0LTQsNGH0Lgg0LHQtdC3INGP0LLQvdC+0LPQviBFTEFQU0VEVElNRS5BREQuXG4gICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkID0gcGVybWlzc2lvbnMuZmlsdGVyKGkgPT4gaS52YWx1ZSAhPT0gdW5kZWZpbmVkKSBhcyB7IGlkOiBudW1iZXIsIHZhbHVlOiBib29sZWFuIH1bXVxuICAgICAgICAgICAgICBjb25zdCBtaXNzaW5nSWRzID0gcGVybWlzc2lvbnMuZmlsdGVyKGkgPT4gaS52YWx1ZSA9PT0gdW5kZWZpbmVkKS5tYXAoaSA9PiBpLmlkKVxuXG4gICAgICAgICAgICAgIGlmIChtaXNzaW5nSWRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2FkTWlzc2luZ0J5QWN0aW9uQWxsb3dlZChtaXNzaW5nSWRzLCByZXNvbHZlZClcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBvZihwZXJtaXNzaW9ucylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8g0JXRgdC70LggYmF0Y2ggZ2V0YWNjZXNzINC90LUg0LLQtdGA0L3Rg9C70YHRjywg0YHQvtGF0YDQsNC90Y/QtdC8INC/0L7QstC10LTQtdC90LjQtSDRgdGC0LDRgNC+0LPQviBmYWxsYmFjay5cbiAgICAgICAgICAgIHJldHVybiBsb2FkTWlzc2luZ0J5QWN0aW9uQWxsb3dlZChpZHMsIFtdKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgKVxuICB9XG4gIC8qKlxyXG4gICAqINCf0YDQvtCy0LXRgNC60LAg0L3QsCDQstC+0LfQvNC+0LbQvdC+0YHRgtGMINC00L7QsdCw0LLQu9C10L3QuNC1INC30LDQv9C40YHQuCDRgtGA0LXQutCwINCyINGC0LDRgdC60YNcclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZFRhc2tcclxuICAgKiBAcGFyYW0gdXNlckN1cnJlbnRcclxuICAgKi9cclxuICBjaGVja1Blcm1pc3Npb25BZGRFbGFwc2VkVGltZVRvVGFzayhpZFRhc2s6IG51bWJlciwgdXNlckN1cnJlbnQ6IGlCWFJlc3RVc2VyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkKSB7XG4gICAgLy8gbGV0IHBlcm1pc3Npb24gPSBQZXJtaXNzaW9uLmdldCgpXG4gICAgLy8gaWYgKHBlcm1pc3Npb24/LnRhc2tzPy5sZW5ndGgpIHtcbiAgICAvLyAgIGxldCBmaW5kVGFzayA9IHBlcm1pc3Npb24udGFza3MuZmluZChpID0+IGkuaWQgPT09IGlkVGFzaylcbiAgICAvLyAgIGlmIChmaW5kVGFzaz8ucGVybWlzc2lvbikge1xuICAgIC8vICAgICByZXR1cm4gb2YoZmluZFRhc2sucGVybWlzc2lvblsnRUxBUFNFRFRJTUUuQUREJ10pXG4gICAgLy8gICB9XG4gICAgcmV0dXJuICgodXNlckN1cnJlbnQpID8gb2YodXNlckN1cnJlbnQpIDogdGhpcy5CWFJlc3ROYXZ2eVVzZXIuY3VycmVudCgpLnJlcygpKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoc2VsZiA9PiB7XG4gICAgICAgIGlmIChzZWxmKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuQlhSZXN0TmF2dnlUYXNrcy50YXNrLmdldEFjY2VzcyhcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGlkOiBpZFRhc2ssXG4gICAgICAgICAgICAgIHVzZXJzOiBbc2VsZi5JRF1cbiAgICAgICAgICAgIH0pLnJlcygpLnBpcGUoXG4gICAgICAgICAgICAvLyB0YXAodiA9PiB7XG4gICAgICAgICAgICAvLyAgIGlmICh2ICYmIHZbc2VsZi5JRF0pIHtcbiAgICAgICAgICAgIC8vICAgICBQZXJtaXNzaW9uLnNldCh7XG4gICAgICAgICAgICAvLyAgICAgICB0YXNrczogW3tpZDogaWRUYXNrLCBwZXJtaXNzaW9uOiB2W3NlbGYuSURdLCBlbGFwc2VkSXRlbTogW119XVxuICAgICAgICAgICAgLy8gICAgIH0pXG4gICAgICAgICAgICAvLyAgIH1cbiAgICAgICAgICAgIC8vIH0pLFxuICAgICAgICAgICAgbWFwKHYgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gKHYgJiYgdltzZWxmLklEXSkgPyB2W3NlbGYuSURdWydFTEFQU0VEVElNRS5BREQnXSA6IGZhbHNlXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpXG4gICAgICB9KVxuICAgIClcbiAgICAvLyB9XG5cbiAgICAvLyByZXR1cm4gb2YodW5kZWZpbmVkKVxuICB9XG5cbiAgLyoqXG4gICAqINCf0YDQvtCy0LXRgNC60LAg0L3QsCDQstC+0LfQvNC+0LbQvdC+0YHRgtGMINC/0YDQvtGH0YLQtdC90LjRjyDRgtCw0LrRgdC60LhcbiAgICpcclxuICAgKiBAcGFyYW0gaWRUYXNrXHJcbiAgICogQHBhcmFtIHVzZXJDdXJyZW50XHJcbiAgICovXHJcbiAgY2hlY2tQZXJtaXNzaW9uUmVhZFRhc2soaWRUYXNrOiBudW1iZXIsIHVzZXJDdXJyZW50OiBpQlhSZXN0VXNlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCkge1xyXG4gICAgLy8gbGV0IHBlcm1pc3Npb24gPSBQZXJtaXNzaW9uLmdldCgpXHJcbiAgICAvLyBpZiAocGVybWlzc2lvbj8udGFza3M/Lmxlbmd0aCkge1xyXG4gICAgLy8gICBsZXQgZmluZFRhc2sgPSBwZXJtaXNzaW9uLnRhc2tzLmZpbmQoaSA9PiBpLmlkID09PSBpZFRhc2spXHJcbiAgICAvLyAgIGlmIChmaW5kVGFzaz8ucGVybWlzc2lvbikge1xyXG4gICAgLy8gICAgIHJldHVybiBvZihmaW5kVGFzay5wZXJtaXNzaW9uLkFDQ0VQVClcclxuICAgIC8vICAgfVxyXG4gICAgLy8gICBjb25zb2xlLmxvZygnaWRUYXNrJywgaWRUYXNrKVxyXG4gICAgcmV0dXJuICgodXNlckN1cnJlbnQpID8gb2YodXNlckN1cnJlbnQpIDogdGhpcy5CWFJlc3ROYXZ2eVVzZXIuY3VycmVudCgpLnJlcygpKS5waXBlKFxyXG4gICAgICBtZXJnZU1hcChzZWxmID0+IHtcclxuICAgICAgICBpZiAoc2VsZikge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuQlhSZXN0TmF2dnlUYXNrcy50YXNrLmdldEFjY2VzcyhcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGlkOiBpZFRhc2ssXHJcbiAgICAgICAgICAgICAgdXNlcnM6IFtzZWxmLklEXVxyXG4gICAgICAgICAgICB9KS5yZXMoKS5waXBlKFxyXG4gICAgICAgICAgICAvLyB0YXAodiA9PiB7XHJcbiAgICAgICAgICAgIC8vICAgaWYgKHYgJiYgdltzZWxmLklEXSkge1xyXG4gICAgICAgICAgICAvLyAgICAgUGVybWlzc2lvbi5zZXQoe1xyXG4gICAgICAgICAgICAvLyAgICAgICB0YXNrczogW3tpZDogaWRUYXNrLCBwZXJtaXNzaW9uOiB2W3NlbGYuSURdLCBlbGFwc2VkSXRlbTogW119XVxyXG4gICAgICAgICAgICAvLyAgICAgfSlcclxuICAgICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAgIC8vIH0pLFxyXG4gICAgICAgICAgICBtYXAodiA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICh2ICYmIHZbc2VsZi5JRF0pID8gISF2W3NlbGYuSURdIDogZmFsc2UgLy8g0L7RgtC00LXQu9GM0L3QvtCz0L4g0YTQu9Cw0LPQsCDQvdCwINGH0YLQtdC90LjQtSDQvdC10YIsINCy0YvRhdC+0LTQuNGCINGH0YLQviDQtdGB0LvQuCDQv9GA0LDQstCwINC+0YLQtNCw0LvQuNGB0Ywg0YLQviDQuCDQv9GA0LDQstCwINC10YHRgtGMXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKVxyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gICAgLy8gfVxyXG4gICAgLy9cclxuICAgIC8vIHJldHVybiBvZih1bmRlZmluZWQpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDQl9Cw0LrQvtC90YfQtdC90L3Ri9C5INC80LXRgtC+0LQg0LTQvtCx0LDQstC70LXQvdC40Y8g0LfQsNC/0LjRgdC4INGBINC/0YDQtdC00LLQsNGA0LjRgtC10LvRjNC90L7QuSDQv9GA0L7QstC10YDQutC+0Lkg0L/RgNCw0LJcclxuICAgKlxyXG4gICAqIFRPRE86INC00L7QsdCw0LLQuNGC0Ywg0YHQvtGF0YDQsNC90LXQvdC40LUg0L/RgNC10LTQstCw0YDQuNGC0LXQu9GM0L3QviDQv9GA0L7QstC10YDQtdC90L3Ri9GFINC30LDQv9C40YHQtdC5XHJcbiAgICogQHBhcmFtIHBhcmFtXHJcbiAgICovXHJcbiAgYWRkKHBhcmFtOiBpQlhSZXN0UGFyYW1BZGRFbGFwc2VkaXRlbSkge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hlY2tQZXJtaXNzaW9uUmVhZFRhc2socGFyYW0uVEFTS0lEKS5waXBlKFxyXG4gICAgICBtZXJnZU1hcChhbGxvd2VkUmVhZFRhc2sgPT4ge1xyXG4gICAgICAgIGlmIChhbGxvd2VkUmVhZFRhc2spIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrUGVybWlzc2lvbkFkZEVsYXBzZWRUaW1lVG9UYXNrKHBhcmFtLlRBU0tJRCkucGlwZShcclxuICAgICAgICAgICAgbWVyZ2VNYXAoYWxsb3dlZCA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGFsbG93ZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkJYUmVzdE5hdnZ5RWxhcHNlZEl0ZW0uYWRkKHBhcmFtKS5yZXMoKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ9Ce0YLRgdGD0YLRgdGC0LLRg9GO0YIg0L/RgNCw0LLQsCDQtNC+0LHQsNCy0LvQtdC90LjQtSDQt9Cw0L/QuNGB0Lgg0LfQsNGC0YDQsNGH0LXQvdC90L7Qs9C+INCy0YDQtdC80LXQvdC4JykpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCfQntGC0YHRg9GC0YHRgtCy0YPRjtGCINC/0YDQsNCy0LAg0L3QsCDRh9GC0LXQvdC40LUg0LfQsNC00LDRh9C4JykpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqINCX0LDQutC+0L3Rh9C10L3QvdGL0Lkg0LzQtdGC0L7QtCDQvtCx0L3QvtCy0LvQtdC90LjRjyDQt9Cw0L/QuNGB0Lgg0YEg0L/RgNC10LTQstCw0YDQuNGC0LXQu9GM0L3QvtC5INC/0YDQvtCy0LXRgNC60L7QuSDQv9GA0LDQslxyXG4gICAqXHJcbiAgICogVE9ETzog0LTQvtCx0LDQstC40YLRjCDRgdC+0YXRgNCw0L3QtdC90LjQtSDQv9GA0LXQtNCy0LDRgNC40YLQtdC70YzQvdC+INC/0YDQvtCy0LXRgNC10L3QvdGL0YUg0LfQsNC/0LjRgdC10LlcclxuICAgKiBAcGFyYW0gcGFyYW1cclxuICAgKi9cclxuICB1cGRhdGUocGFyYW06IGlCWFJlc3RQYXJhbVVwZGF0ZUVsYXBzZWRpdGVtKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGVja1Blcm1pc3Npb25SZWFkVGFzayhwYXJhbS5UQVNLSUQpLnBpcGUoXHJcbiAgICAgIG1lcmdlTWFwKChhbGxvd2VkUmVhZFRhc2spID0+IHtcclxuICAgICAgICBpZiAoYWxsb3dlZFJlYWRUYXNrKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5pc0FsbG93ZWRNb2RpZnkocGFyYW0uVEFTS0lELCBwYXJhbS5JVEVNSUQpLnBpcGUoXHJcbiAgICAgICAgICAgIG1lcmdlTWFwKGFsbG93ZWQgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChhbGxvd2VkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5CWFJlc3ROYXZ2eUVsYXBzZWRJdGVtLnVwZGF0ZShwYXJhbSkucmVzKClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCfQntGC0YHRg9GC0YHRgtCy0YPRjtGCINC/0YDQsNCy0LAg0L3QsCDQuNC30LzQtdC90LXQvdC40LUg0LfQsNC/0LjRgdC4INC30LDRgtGA0LDRh9C10L3QvdC+0LPQviDQstGA0LXQvNC10L3QuCcpKVxyXG4gICAgICAgICAgICB9KSlcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCfQntGC0YHRg9GC0YHRgtCy0YPRjtGCINC/0YDQsNCy0LAg0L3QsCDRh9GC0LXQvdC40LUg0LfQsNC00LDRh9C4JykpXHJcbiAgICAgIH0pKVxyXG4gIH1cclxuXHJcbiAgLy8gVE9ETzog0YDQsNC30L7QsdGA0LDRgtGM0YHRjyDRh9GC0L4g0Y3RgtC+INC30LAg0LXQsdCw0YLQvdGPINCyINC60L7QvNC80LXQvdGC0LDRhSDQuCDQstC/0LjRgdCw0YLRjCDQvdC+0YDQvNCw0LvRjNC90L7QuSDQutC+0LzQtdC90YIg0LXRgdC70Lgg0L7QvdCwINC90YPQttC90LBcclxuICBpc0FsbG93ZWRNb2RpZnkoaWRUYXNrOiBudW1iZXIsIGlkSXRlbTogbnVtYmVyKSB7XHJcbiAgICAvLyBsZXQgcGVybWlzc2lvbiA9IFBlcm1pc3Npb24uZ2V0KClcclxuICAgIC8vIGlmIChwZXJtaXNzaW9uPy50YXNrcz8ubGVuZ3RoKSB7XHJcbiAgICAvLyAgIGxldCBmaW5kVGFzayA9IHBlcm1pc3Npb24udGFza3MuZmluZChpID0+IGkuaWQgPT09IGlkVGFzaylcclxuICAgIC8vICAgaWYgKGZpbmRUYXNrKSB7XHJcbiAgICAvLyAgICAgbGV0IGZpbmQgPSBmaW5kVGFzay5lbGFwc2VkSXRlbS5maW5kKGkgPT4gaS5pZCA9PT0gaWRJdGVtKVxyXG4gICAgLy8gICAgIGlmIChmaW5kICYmIGZpbmQudmVyaWZpZWQuZWRpdCkge1xyXG4gICAgLy8gICAgICAgcmV0dXJuIG9mKGZpbmQuZWRpdClcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5CWFJlc3ROYXZ2eUVsYXBzZWRJdGVtLmlzQWN0aW9uQWxsb3dlZCh7XHJcbiAgICAgIFRBU0tJRDogaWRUYXNrLFxyXG4gICAgICBJVEVNSUQ6IGlkSXRlbSxcclxuICAgICAgQUNUSU9OSUQ6IDJcclxuICAgIH0pLnJlcygpXHJcbiAgICAvLyAgIC5waXBlKFxyXG4gICAgLy8gICB0YXAodiA9PiB7XHJcbiAgICAvLyAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgLy8gICAgICAgUGVybWlzc2lvbi5zZXRUYXNrRWxhcHNlZEl0ZW0oaWRUYXNrLFxyXG4gICAgLy8gICAgICAgICB7XHJcbiAgICAvLyAgICAgICAgICAgaWQ6IGlkSXRlbSxcclxuICAgIC8vICAgICAgICAgICBlZGl0OiB2LFxyXG4gICAgLy8gICAgICAgICAgIGRlbDogZmFsc2UsXHJcbiAgICAvLyAgICAgICAgICAgdmVyaWZpZWQ6IHtcclxuICAgIC8vICAgICAgICAgICAgIGVkaXQ6IHRydWUsXHJcbiAgICAvLyAgICAgICAgICAgICBkZWw6IGZhbHNlLFxyXG4gICAgLy8gICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgfSlcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH0pXHJcbiAgICAvLyApXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBpc0FjdGlvbkFsbG93ZWQg0YEg0YTQuNC60YHQvtC8INC90LAg0L/RgNC+0LLQtdGA0LrRgyDQstC+0LfQvNC+0LbQvdC+0YHRgtC4INGH0YLQtdC90LjRjyDQt9Cw0LTQsNGH0Lgg0LfQsNC/0LjRgdC4XHJcbiAgICogKNCx0LXQtyDQv9GA0L7QstC10YDQutC4INC00LDRkdGCINC+0YjQuNCx0LrRgylcclxuICAgKlxyXG4gICAqIGlkQWN0aW9uOlxyXG4gICAqIDEgLSBBQ1RJT05fRUxBUFNFRF9USU1FX0FERFxyXG4gICAqIDIgLSBBQ1RJT05fRUxBUFNFRF9USU1FX01PRElGWVxyXG4gICAqIDMgLSBBQ1RJT05fRUxBUFNFRF9USU1FX1JFTU9WRVxyXG4gICAqIEBwYXJhbSBwYXJhbVxyXG4gICAqL1xyXG4gIGlzQWN0aW9uQWxsb3dlZChwYXJhbTogaUlzQWN0aW9uQWxsb3dlZFBhcmFtKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGVja1Blcm1pc3Npb25SZWFkVGFzayhwYXJhbS5UQVNLSUQpLnBpcGUoXHJcbiAgICAgIG1lcmdlTWFwKGNhblJlYWQgPT4ge1xyXG4gICAgICAgIGlmIChjYW5SZWFkKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5CWFJlc3ROYXZ2eUVsYXBzZWRJdGVtLmlzQWN0aW9uQWxsb3dlZChwYXJhbSkucmVzKClcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCfQntGC0YHRg9GC0YHRgtCy0YPRjtGCINC/0YDQsNCy0LAg0L3QsCDRh9GC0LXQvdC40LUg0LfQsNC00LDRh9C4JykpXHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICog0J/QvtC70L3QvtGG0LXQvdC90YvQuSDQvNC10YLQvtC0INGD0LTQsNC70LXQvdC40Y9cclxuICAgKlxyXG4gICAqIEBwYXJhbSBwYXJhbVxyXG4gICAqL1xyXG4gIGRlbChwYXJhbTogaUJYUmVzdFBhcmFtRGVsRWxhcHNlZGl0ZW0pIHtcclxuICAgIHJldHVybiB0aGlzLmNoZWNrUGVybWlzc2lvblJlYWRUYXNrKHBhcmFtLlRBU0tJRCkucGlwZShcclxuICAgICAgbWVyZ2VNYXAoYWxsb3dlZFJlYWRUYXNrID0+IHtcclxuICAgICAgICBpZiAoYWxsb3dlZFJlYWRUYXNrKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5pc0FsbG93ZWRSZW1vdmUocGFyYW0uVEFTS0lELCBwYXJhbS5JVEVNSUQpLnBpcGUoXHJcbiAgICAgICAgICAgIG1lcmdlTWFwKGFsbG93ZWQgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChhbGxvd2VkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5CWFJlc3ROYXZ2eUVsYXBzZWRJdGVtLmRlbGV0ZShwYXJhbSkucmVzKClcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCfQntGC0YHRg9GC0YHRgtCy0YPRjtGCINC/0YDQsNCy0LAg0L3QsCDRg9C00LDQu9C10L3QuNC1INC30LDQv9C40YHQuCDQt9Cw0YLRgNCw0YfQtdC90L3QvtCz0L4g0LLRgNC10LzQtdC90LgnKSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ9Ce0YLRgdGD0YLRgdGC0LLRg9GO0YIg0L/RgNCw0LLQsCDQvdCwINGH0YLQtdC90LjQtSDQt9Cw0LTQsNGH0LgnKSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzQWxsb3dlZFJlbW92ZShpZFRhc2s6IG51bWJlciwgaWRJdGVtOiBudW1iZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmlzQWN0aW9uQWxsb3dlZChcclxuICAgICAge1xyXG4gICAgICAgIFRBU0tJRDogaWRUYXNrLFxyXG4gICAgICAgIElURU1JRDogaWRJdGVtLFxyXG4gICAgICAgIEFDVElPTklEOiAzXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -3922,42 +3922,73 @@ class BXRestNavvyOperationElapsedItem {
3922
3922
  }));
3923
3923
  }
3924
3924
  checkPermissionAddElapsedTimeToTaskArr(tasks, userCurrent = undefined) {
3925
- let request = Object.assign({}, ...tasks.map(i => {
3926
- return { [i]: this.checkPermissionAddElapsedTimeToTask(i, userCurrent) };
3927
- }));
3928
- return forkJoin(request)
3929
- .pipe(take(1), mergeMap(v => {
3930
- let forForeach = Object.entries(v).map(([key, value]) => {
3931
- return { id: Number(key), value: value };
3932
- });
3933
- if (forForeach.find(i => i.value === undefined) !== undefined) {
3934
- let forForeachHave = forForeach.filter(i => i.value !== undefined);
3935
- let forForeachNotHave = forForeach.filter(i => i.value === undefined); // тут получаем все id не сохраненных у нас прав
3936
- return this.http.branch(Object.assign({}, ...forForeachNotHave
3937
- .map(i => i.id)
3938
- .map(i => {
3939
- return {
3940
- [i]: {
3941
- name: this.http.getNameMethod([$task, $elapseditem, $isactionallowed]),
3942
- param: {
3943
- TASKID: i,
3944
- ITEMID: 1,
3945
- ACTIONID: 1
3946
- }
3925
+ // Убираем дубли, чтобы не проверять права по одной задаче несколько раз.
3926
+ const ids = [...new Set(tasks.filter(i => !!i))];
3927
+ // Если текущий пользователь не передан снаружи, запрашиваем его один раз на весь набор задач.
3928
+ const user$ = userCurrent ? of(userCurrent) : this.BXRestNavvyUser.current().res();
3929
+ // Старый batch через task.elapseditem.isactionallowed.
3930
+ // Вызываем его ниже только для задач, по которым getaccess не вернул ELAPSEDTIME.ADD.
3931
+ const loadMissingByActionAllowed = (missingIds, resolved) => {
3932
+ return this.http.branch(Object.assign({}, ...missingIds.map(i => {
3933
+ return {
3934
+ [i]: {
3935
+ name: this.http.getNameMethod([$task, $elapseditem, $isactionallowed]),
3936
+ param: {
3937
+ TASKID: i,
3938
+ ITEMID: 1,
3939
+ ACTIONID: 1
3947
3940
  }
3948
- };
3949
- }))).pipe(map(v => {
3950
- if (v && v.length) {
3951
- const res = this.http.mapBranchResult(v);
3952
- forForeachNotHave = Object.entries(res).map(([key, value]) => {
3953
- return { id: Number(key), value: value };
3954
- });
3955
- return Object.assign(forForeachHave, forForeachNotHave);
3956
3941
  }
3957
- return undefined;
3958
- }));
3942
+ };
3943
+ }))).pipe(map(v => {
3944
+ if (v && v.length) {
3945
+ const res = this.http.mapBranchResult(v);
3946
+ const loaded = Object.entries(res).map(([key, value]) => {
3947
+ return { id: Number(key), value };
3948
+ });
3949
+ return [...resolved, ...loaded];
3950
+ }
3951
+ return undefined;
3952
+ }));
3953
+ };
3954
+ if (!ids.length) {
3955
+ return of([]);
3956
+ }
3957
+ return user$.pipe(take(1), mergeMap(self => {
3958
+ if (!self) {
3959
+ // Страховочная ветка: если user.current не вернулся, getaccess вызвать нельзя.
3960
+ return loadMissingByActionAllowed(ids, []);
3959
3961
  }
3960
- return of(forForeach);
3962
+ // Основной путь: одним batch-запросом получаем права ELAPSEDTIME.ADD по всем задачам.
3963
+ return this.http.branch(Object.assign({}, ...ids.map(id => {
3964
+ return {
3965
+ [id]: {
3966
+ name: this.http.getNameMethod([$tasks, $task, $getaccess]),
3967
+ param: {
3968
+ id,
3969
+ users: [self.ID]
3970
+ }
3971
+ }
3972
+ };
3973
+ }))).pipe(mergeMap(v => {
3974
+ if (v && v.length) {
3975
+ const res = this.http.mapBranchResult(v);
3976
+ const permissions = ids.map(id => ({
3977
+ id,
3978
+ value: res[id]?.allowedActions?.[self.ID]?.['ELAPSEDTIME.ADD']
3979
+ }));
3980
+ // getaccess может вернуть true или false - оба значения считаем готовым ответом.
3981
+ // В старый isactionallowed отправляем только задачи без явного ELAPSEDTIME.ADD.
3982
+ const resolved = permissions.filter(i => i.value !== undefined);
3983
+ const missingIds = permissions.filter(i => i.value === undefined).map(i => i.id);
3984
+ if (missingIds.length) {
3985
+ return loadMissingByActionAllowed(missingIds, resolved);
3986
+ }
3987
+ return of(permissions);
3988
+ }
3989
+ // Если batch getaccess не вернулся, сохраняем поведение старого fallback.
3990
+ return loadMissingByActionAllowed(ids, []);
3991
+ }));
3961
3992
  }));
3962
3993
  }
3963
3994
  /**
@@ -5756,26 +5787,8 @@ class BXRestMapImRecent {
5756
5787
  ...{
5757
5788
  date_update: toDate(i.date_update),
5758
5789
  counter: toNum(i.counter),
5759
- user: i.user && i.user.id
5760
- ? {
5761
- ...i.user,
5762
- ...{
5763
- id: toNum(i.user.id),
5764
- last_activity_date: i.user.last_activity_date ? toDate(i.user.last_activity_date) : false,
5765
- mobile_last_date: i.user.mobile_last_date ? toDate(i.user.mobile_last_date) : false,
5766
- absent: i.user.absent ? toDate(i.user.absent) : false,
5767
- }
5768
- }
5769
- : undefined,
5770
- chat: i.chat && BXRestMapImRecent.isIBXRestImDialogRecentGetChatChatDataHttp(i.chat)
5771
- ? {
5772
- ...i.chat,
5773
- ...{
5774
- id: toNum(i.chat.id),
5775
- date_create: toDate(i.chat.date_create)
5776
- }
5777
- }
5778
- : i.chat,
5790
+ user: BXRestMapImRecent.mapUser(i.user),
5791
+ chat: BXRestMapImRecent.mapChat(i.chat),
5779
5792
  }
5780
5793
  }))
5781
5794
  : undefined;
@@ -5810,6 +5823,31 @@ class BXRestMapImRecent {
5810
5823
  static isIBXRestImDialogRecentGetChatChatDataHttp(item) {
5811
5824
  return 'id' in item;
5812
5825
  }
5826
+ static mapUser(user) {
5827
+ if (!user || !user.id) {
5828
+ return undefined;
5829
+ }
5830
+ return {
5831
+ ...user,
5832
+ id: toNum(user.id),
5833
+ last_activity_date: user.last_activity_date ? toDate(user.last_activity_date) : false,
5834
+ mobile_last_date: user.mobile_last_date ? toDate(user.mobile_last_date) : false,
5835
+ absent: user.absent ? toDate(user.absent) : false,
5836
+ };
5837
+ }
5838
+ static mapChat(chat) {
5839
+ if (!chat) {
5840
+ return undefined;
5841
+ }
5842
+ if (BXRestMapImRecent.isIBXRestImDialogRecentGetChatChatDataHttp(chat)) {
5843
+ return {
5844
+ ...chat,
5845
+ id: toNum(chat.id),
5846
+ date_create: toDate(chat.date_create)
5847
+ };
5848
+ }
5849
+ return chat;
5850
+ }
5813
5851
  }
5814
5852
  __decorate([
5815
5853
  CatchError({ rethrow: true })