@resolveio/client-lib-core 1.3.12 → 1.3.14

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.
@@ -48,33 +48,61 @@ export class AuthGuard {
48
48
  resolve(false);
49
49
  }
50
50
  else {
51
- let view = state.url.replace(/^(\/[-a-z]+\/[^\/]+)\/.*$/, '$1').replace(/\?.+$/, '');
52
- let moduleView = view.replace(/^(\/[-a-z]+\/).*$/, '$1');
51
+ let fullView = state.url.replace(/\/[a-f0-9]{24}$/, '').replace(/\?.+$/, ''); //All but ID and Query String
52
+ let partialView = state.url.replace(/^(\/[-a-z]+\/[^\/]+)\/.*$/, '$1').replace(/\?.+$/, ''); //Module and First Child Only
53
+ let moduleView = partialView.replace(/^(\/[-a-z]+\/).*$/, '$1'); //Module Only
53
54
  if (user.roles.super_admin) {
54
55
  resolve(true);
55
56
  }
56
- else if (!this.isLinkPartialRoute(view) && !user.roles.groups.some(a => a.views.some(b => b === view))) {
57
- if (user.roles.groups.some(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))) {
58
- let link = user.roles.groups.filter(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))[0].views.filter(a => a.startsWith(moduleView) && !this.doesLinkHaveParameter(a) && !this.isLinkFakeRoute(a))[0];
59
- this._router.navigateByUrl(link);
57
+ else if (!this.isLinkFakeRoute(fullView)) {
58
+ if (!this.isLinkPartialRoute(fullView) && !user.roles.groups.some(a => a.views.some(b => b === fullView))) {
59
+ if (user.roles.groups.some(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))) {
60
+ let link = user.roles.groups.filter(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))[0].views.filter(a => a.startsWith(moduleView) && !this.doesLinkHaveParameter(a) && !this.isLinkFakeRoute(a))[0];
61
+ this._router.navigateByUrl(link);
62
+ }
63
+ else {
64
+ this._router.navigateByUrl('/home');
65
+ }
66
+ resolve(false);
67
+ }
68
+ else if (this.isLinkPartialRoute(fullView) && !user.roles.groups.some(a => a.views.some(b => b.startsWith(fullView) || fullView.startsWith(b)))) {
69
+ if (user.roles.groups.some(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))) {
70
+ let link = user.roles.groups.filter(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))[0].views.filter(a => a.startsWith(moduleView) && !this.doesLinkHaveParameter(a) && !this.isLinkFakeRoute(a))[0];
71
+ this._router.navigateByUrl(link);
72
+ }
73
+ else {
74
+ this._router.navigateByUrl('/home');
75
+ }
76
+ resolve(false);
60
77
  }
61
78
  else {
62
- this._router.navigateByUrl('/home');
79
+ resolve(true);
63
80
  }
64
- resolve(false);
65
81
  }
66
- else if (this.isLinkPartialRoute(view) && !user.roles.groups.some(a => a.views.some(b => b.startsWith(view) || view.startsWith(b)))) {
67
- if (user.roles.groups.some(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))) {
68
- let link = user.roles.groups.filter(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))[0].views.filter(a => a.startsWith(moduleView) && !this.doesLinkHaveParameter(a) && !this.isLinkFakeRoute(a))[0];
69
- this._router.navigateByUrl(link);
82
+ else {
83
+ if (!this.isLinkPartialRoute(partialView) && !user.roles.groups.some(a => a.views.some(b => b === partialView))) {
84
+ if (user.roles.groups.some(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))) {
85
+ let link = user.roles.groups.filter(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))[0].views.filter(a => a.startsWith(moduleView) && !this.doesLinkHaveParameter(a) && !this.isLinkFakeRoute(a))[0];
86
+ this._router.navigateByUrl(link);
87
+ }
88
+ else {
89
+ this._router.navigateByUrl('/home');
90
+ }
91
+ resolve(false);
92
+ }
93
+ else if (this.isLinkPartialRoute(partialView) && !user.roles.groups.some(a => a.views.some(b => b.startsWith(partialView) || partialView.startsWith(b)))) {
94
+ if (user.roles.groups.some(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))) {
95
+ let link = user.roles.groups.filter(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))[0].views.filter(a => a.startsWith(moduleView) && !this.doesLinkHaveParameter(a) && !this.isLinkFakeRoute(a))[0];
96
+ this._router.navigateByUrl(link);
97
+ }
98
+ else {
99
+ this._router.navigateByUrl('/home');
100
+ }
101
+ resolve(false);
70
102
  }
71
103
  else {
72
- this._router.navigateByUrl('/home');
104
+ resolve(true);
73
105
  }
74
- resolve(false);
75
- }
76
- else {
77
- resolve(true);
78
106
  }
79
107
  }
80
108
  });
@@ -93,33 +121,58 @@ export class AuthGuard {
93
121
  resolve(false);
94
122
  }
95
123
  else {
96
- let view = state.url.replace(/^(\/[-a-z]+\/[^\/]+)\/.*$/, '$1').replace(/\?.+$/, '');
97
- let moduleView = view.replace(/^(\/[-a-z]+\/).*$/, '$1');
124
+ let fullView = state.url.replace(/\/[a-f0-9]{24}$/, '').replace(/\?.+$/, ''); //All but ID and Query String
125
+ let partialView = state.url.replace(/^(\/[-a-z]+\/[^\/]+)\/.*$/, '$1').replace(/\?.+$/, ''); //Module and First Child Only
126
+ let moduleView = partialView.replace(/^(\/[-a-z]+\/).*$/, '$1'); //Module Only
98
127
  if (user.roles.super_admin) {
99
128
  resolve(true);
100
129
  }
101
- else if (!this.isLinkPartialRoute(view) && !user.roles.groups.some(a => a.views.some(b => b === view))) {
102
- if (user.roles.groups.some(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))) {
103
- let link = user.roles.groups.filter(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))[0].views.filter(a => a.startsWith(moduleView) && !this.doesLinkHaveParameter(a) && !this.isLinkFakeRoute(a))[0];
104
- this._router.navigateByUrl(link);
130
+ else if (!this.isLinkFakeRoute(fullView)) {
131
+ if (!this.isLinkPartialRoute(fullView) && !user.roles.groups.some(a => a.views.some(b => b === fullView))) {
132
+ if (user.roles.groups.some(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))) {
133
+ let link = user.roles.groups.filter(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))[0].views.filter(a => a.startsWith(moduleView) && !this.doesLinkHaveParameter(a) && !this.isLinkFakeRoute(a))[0];
134
+ this._router.navigateByUrl(link);
135
+ }
136
+ else {
137
+ this._router.navigateByUrl('/home');
138
+ }
139
+ resolve(false);
105
140
  }
106
- else {
107
- this._router.navigateByUrl('/home');
141
+ else if (this.isLinkPartialRoute(fullView) && !user.roles.groups.some(a => a.views.some(b => b.startsWith(fullView) || fullView.startsWith(b)))) {
142
+ if (user.roles.groups.some(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))) {
143
+ let link = user.roles.groups.filter(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))[0].views.filter(a => a.startsWith(moduleView) && !this.doesLinkHaveParameter(a) && !this.isLinkFakeRoute(a))[0];
144
+ this._router.navigateByUrl(link);
145
+ }
146
+ else {
147
+ this._router.navigateByUrl('/home');
148
+ }
149
+ resolve(false);
108
150
  }
109
- resolve(false);
110
151
  }
111
- else if (this.isLinkPartialRoute(view) && !user.roles.groups.some(a => a.views.some(b => b.startsWith(view) || view.startsWith(b)))) {
112
- if (user.roles.groups.some(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))) {
113
- let link = user.roles.groups.filter(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))[0].views.filter(a => a.startsWith(moduleView) && !this.doesLinkHaveParameter(a) && !this.isLinkFakeRoute(a))[0];
114
- this._router.navigateByUrl(link);
152
+ else {
153
+ if (!this.isLinkPartialRoute(partialView) && !user.roles.groups.some(a => a.views.some(b => b === partialView))) {
154
+ if (user.roles.groups.some(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))) {
155
+ let link = user.roles.groups.filter(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))[0].views.filter(a => a.startsWith(moduleView) && !this.doesLinkHaveParameter(a) && !this.isLinkFakeRoute(a))[0];
156
+ this._router.navigateByUrl(link);
157
+ }
158
+ else {
159
+ this._router.navigateByUrl('/home');
160
+ }
161
+ resolve(false);
162
+ }
163
+ else if (this.isLinkPartialRoute(partialView) && !user.roles.groups.some(a => a.views.some(b => b.startsWith(partialView) || partialView.startsWith(b)))) {
164
+ if (user.roles.groups.some(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))) {
165
+ let link = user.roles.groups.filter(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))[0].views.filter(a => a.startsWith(moduleView) && !this.doesLinkHaveParameter(a) && !this.isLinkFakeRoute(a))[0];
166
+ this._router.navigateByUrl(link);
167
+ }
168
+ else {
169
+ this._router.navigateByUrl('/home');
170
+ }
171
+ resolve(false);
115
172
  }
116
173
  else {
117
- this._router.navigateByUrl('/home');
174
+ resolve(true);
118
175
  }
119
- resolve(false);
120
- }
121
- else {
122
- resolve(true);
123
176
  }
124
177
  }
125
178
  }
@@ -171,4 +224,4 @@ AuthGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
171
224
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: AuthGuard, decorators: [{
172
225
  type: Injectable
173
226
  }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.AuthService }, { type: i3.DialogService }, { type: i4.AccountManagerService }, { type: i5.CoreService }, { type: i6.OfflineManagerService }, { type: i7.AuthPermissionService }, { type: i8.AlertService }]; } });
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1ndWFyZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL2F1dGgvYXV0aC1ndWFyZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFlLE1BQU0sRUFBK0MsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7Ozs7O0FBRzlELE1BQU0sT0FBTyxTQUFTO0lBSXJCLFlBQW9CLE9BQWUsRUFDeEIsS0FBa0IsRUFDbEIsR0FBa0IsRUFDbEIsUUFBK0IsRUFDL0IsSUFBaUIsRUFDakIsUUFBK0IsRUFDL0IsSUFBMkIsRUFDM0IsTUFBb0I7UUFQWCxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ3hCLFVBQUssR0FBTCxLQUFLLENBQWE7UUFDbEIsUUFBRyxHQUFILEdBQUcsQ0FBZTtRQUNsQixhQUFRLEdBQVIsUUFBUSxDQUF1QjtRQUMvQixTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ2pCLGFBQVEsR0FBUixRQUFRLENBQXVCO1FBQy9CLFNBQUksR0FBSixJ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QUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUV0RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1QyxJQUFJLFVBQVUsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNqRCxJQUFJLElBQUksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUUvQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO29CQUN2QixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO2lCQUM1QjthQUNEO1NBQ0Q7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNkLENBQUM7O3NHQTNLVyxTQUFTOzBHQUFULFNBQVM7MkZBQVQsU0FBUztrQkFEckIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjY291bnRNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uL2FjY291bnQtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhbkFjdGl2YXRlLCBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJvdXRlclN0YXRlU25hcHNob3QgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vd2lkZ2V0cy9kaWFsb2cvZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgT2ZmbGluZU1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vb2ZmbGluZS1tYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgZGF0ZVJldml2ZXIgfSBmcm9tICcuLi91dGlsL2NvbW1vbi5oZWxwZXInO1xuaW1wb3J0IHsgQ29yZVNlcnZpY2UgfSBmcm9tICcuLi9jb3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXV0aFBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLXBlcm1pc3Npb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vd2lkZ2V0cy9hbGVydC9hbGVydC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEF1dGhHdWFyZCBpbXBsZW1lbnRzIENhbkFjdGl2YXRlIHtcblxuXHRyZWRpcmVjdFVybDogc3RyaW5nO1xuXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgX3JvdXRlcjogUm91dGVyLCBcblx0XHRcdFx0cHJpdmF0ZSBfYXV0aDogQXV0aFNlcnZpY2UsIFxuXHRcdFx0XHRwcml2YXRlIF9kczogRGlhbG9nU2VydmljZSxcblx0XHRcdFx0cHJpdmF0ZSBfYWNjb3VudDogQWNjb3VudE1hbmFnZXJTZXJ2aWNlLFxuXHRcdFx0XHRwcml2YXRlIF9hcHA6IENvcmVTZXJ2aWNlLFxuXHRcdFx0XHRwcml2YXRlIF9vZmZsaW5lOiBPZmZsaW5lTWFuYWdlclNlcnZpY2UsXG5cdFx0XHRcdHByaXZhdGUgX2FwczogQXV0aFBlcm1pc3Npb25TZXJ2aWNlLFxuXHRcdFx0XHRwcml2YXRlIF9hbGVydDogQWxlcnRTZXJ2aWNlKSBcblx0e31cblx0XG5cdGNhbkFjdGl2YXRlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCk6IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHR0aGlzLl9hY2NvdW50LmlzSW5pdENvbXBsZXRlZCgpLnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRsZXQgdXNlciA9IHRoaXMuX2FjY291bnQuZ2V0VXNlcigpO1xuXG5cdFx0XHRcdGlmICghdXNlcikge1xuXHRcdFx0XHRcdHVzZXIgPSBKU09OLnBhcnNlKHRoaXMuX29mZmxpbmUuZ2V0VXNlcigpLCBkYXRlUmV2aXZlcik7XG5cdFx0XHRcdFx0aWYgKHVzZXIpIHtcblx0XHRcdFx0XHRcdHRoaXMuX2FjY291bnQuc2V0VXNlcih1c2VyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIXVzZXIpIHtcblx0XHRcdFx0XHRpZiAobmF2aWdhdG9yLm9uTGluZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5fYXV0aC5sb2dpblVzZXIoKS50aGVuKG5ld1VzZXIgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl9hY2NvdW50LmlzTG9naW5Db21wbGV0ZWQoKS50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHR1c2VyID0gdGhpcy5fYWNjb3VudC5nZXRVc2VyKCk7XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoIXVzZXIuYWN0aXZlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgnL2hvbWUnKTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxldCB2aWV3ID0gc3RhdGUudXJsLnJlcGxhY2UoL14oXFwvWy1hLXpdK1xcL1teXFwvXSspXFwvLiokLywgJyQxJykucmVwbGFjZSgvXFw/LiskLywgJycpO1xuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IG1vZHVsZVZpZXcgPSB2aWV3LnJlcGxhY2UoL14oXFwvWy1hLXpdK1xcLykuKiQvLCAnJDEnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHVzZXIucm9sZXMuc3VwZXJfYWRtaW4pIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKCF0aGlzLmlzTGlua1BhcnRpYWxSb3V0ZSh2aWV3KSAmJiAhdXNlci5yb2xlcy5ncm91cHMuc29tZShhID0+IGEudmlld3Muc29tZShiID0+IGIgPT09IHZpZXcpKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodXNlci5yb2xlcy5ncm91cHMuc29tZShhID0+IGEudmlld3Muc29tZShiID0+IGIuc3RhcnRzV2l0aChtb2R1bGVWaWV3KSAmJiAhdGhpcy5kb2VzTGlua0hhdmVQYXJhbWV0ZXIoYikgJiYgIXRoaXMuaXNMaW5rRmFrZVJvdXRlKGIpKSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgbGluayA9IHVzZXIucm9sZXMuZ3JvdXBzLmZpbHRlcihhID0+IGEudmlld3Muc29tZShiID0+IGIuc3RhcnRzV2l0aChtb2R1bGVWaWV3KSAmJiAhdGhpcy5kb2VzTGlua0hhdmVQYXJhbWV0ZXIoYikgJiYgIXRoaXMuaXNMaW5rRmFrZVJvdXRlKGIpKSlbMF0udmlld3MuZmlsdGVyKGEgPT4gYS5zdGFydHNXaXRoKG1vZHVsZVZpZXcpICYmICF0aGlzLmRvZXNMaW5rSGF2ZVBhcmFtZXRlcihhKSAmJiAhdGhpcy5pc0xpbmtGYWtlUm91dGUoYSkpWzBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKGxpbmspO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvaG9tZScpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKHRoaXMuaXNMaW5rUGFydGlhbFJvdXRlKHZpZXcpICYmICF1c2VyLnJvbGVzLmdyb3Vwcy5zb21lKGEgPT4gYS52aWV3cy5zb21lKGIgPT4gYi5zdGFydHNXaXRoKHZpZXcpIHx8IHZpZXcuc3RhcnRzV2l0aChiKSkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh1c2VyLnJvbGVzLmdyb3Vwcy5zb21lKGEgPT4gYS52aWV3cy5zb21lKGIgPT4gYi5zdGFydHNXaXRoKG1vZHVsZVZpZXcpICYmICF0aGlzLmRvZXNMaW5rSGF2ZVBhcmFtZXRlcihiKSAmJiAhdGhpcy5pc0xpbmtGYWtlUm91dGUoYikpKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBsaW5rID0gdXNlci5yb2xlcy5ncm91cHMuZmlsdGVyKGEgPT4gYS52aWV3cy5zb21lKGIgPT4gYi5zdGFydHNXaXRoKG1vZHVsZVZpZXcpICYmICF0aGlzLmRvZXNMaW5rSGF2ZVBhcmFtZXRlcihiKSAmJiAhdGhpcy5pc0xpbmtGYWtlUm91dGUoYikpKVswXS52aWV3cy5maWx0ZXIoYSA9PiBhLnN0YXJ0c1dpdGgobW9kdWxlVmlldykgJiYgIXRoaXMuZG9lc0xpbmtIYXZlUGFyYW1ldGVyKGEpICYmICF0aGlzLmlzTGlua0Zha2VSb3V0ZShhKSlbMF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwobGluayk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJy9ob21lJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0sICgpID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJy9ob21lJyk7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoZmFsc2UpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0aWYgKCF1c2VyLmFjdGl2ZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJy9ob21lJyk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRsZXQgdmlldyA9IHN0YXRlLnVybC5yZXBsYWNlKC9eKFxcL1stYS16XStcXC9bXlxcL10rKVxcLy4qJC8sICckMScpLnJlcGxhY2UoL1xcPy4rJC8sICcnKTtcblx0XHRcdFx0XHRcdGxldCBtb2R1bGVWaWV3ID0gdmlldy5yZXBsYWNlKC9eKFxcL1stYS16XStcXC8pLiokLywgJyQxJyk7XG5cdFx0XHRcdFxuXHRcdFx0XHRcdFx0aWYgKHVzZXIucm9sZXMuc3VwZXJfYWRtaW4pIHtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2UgaWYgKCF0aGlzLmlzTGlua1BhcnRpYWxSb3V0ZSh2aWV3KSAmJiAhdXNlci5yb2xlcy5ncm91cHMuc29tZShhID0+IGEudmlld3Muc29tZShiID0+IGIgPT09IHZpZXcpKSkge1xuXHRcdFx0XHRcdFx0XHRpZiAodXNlci5yb2xlcy5ncm91cHMuc29tZShhID0+IGEudmlld3Muc29tZShiID0+IGIuc3RhcnRzV2l0aChtb2R1bGVWaWV3KSAmJiAhdGhpcy5kb2VzTGlua0hhdmVQYXJhbWV0ZXIoYikgJiYgIXRoaXMuaXNMaW5rRmFrZVJvdXRlKGIpKSkpIHtcblx0XHRcdFx0XHRcdFx0XHRsZXQgbGluayA9IHVzZXIucm9sZXMuZ3JvdXBzLmZpbHRlcihhID0+IGEudmlld3Muc29tZShiID0+IGIuc3RhcnRzV2l0aChtb2R1bGVWaWV3KSAmJiAhdGhpcy5kb2VzTGlua0hhdmVQYXJhbWV0ZXIoYikgJiYgIXRoaXMuaXNMaW5rRmFrZVJvdXRlKGIpKSlbMF0udmlld3MuZmlsdGVyKGEgPT4gYS5zdGFydHNXaXRoKG1vZHVsZVZpZXcpICYmICF0aGlzLmRvZXNMaW5rSGF2ZVBhcmFtZXRlcihhKSAmJiAhdGhpcy5pc0xpbmtGYWtlUm91dGUoYSkpWzBdO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKGxpbmspO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvaG9tZScpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2UgaWYgKHRoaXMuaXNMaW5rUGFydGlhbFJvdXRlKHZpZXcpICYmICF1c2VyLnJvbGVzLmdyb3Vwcy5zb21lKGEgPT4gYS52aWV3cy5zb21lKGIgPT4gYi5zdGFydHNXaXRoKHZpZXcpIHx8IHZpZXcuc3RhcnRzV2l0aChiKSkpKSB7XG5cdFx0XHRcdFx0XHRcdGlmICh1c2VyLnJvbGVzLmdyb3Vwcy5zb21lKGEgPT4gYS52aWV3cy5zb21lKGIgPT4gYi5zdGFydHNXaXRoKG1vZHVsZVZpZXcpICYmICF0aGlzLmRvZXNMaW5rSGF2ZVBhcmFtZXRlcihiKSAmJiAhdGhpcy5pc0xpbmtGYWtlUm91dGUoYikpKSkge1xuXHRcdFx0XHRcdFx0XHRcdGxldCBsaW5rID0gdXNlci5yb2xlcy5ncm91cHMuZmlsdGVyKGEgPT4gYS52aWV3cy5zb21lKGIgPT4gYi5zdGFydHNXaXRoKG1vZHVsZVZpZXcpICYmICF0aGlzLmRvZXNMaW5rSGF2ZVBhcmFtZXRlcihiKSAmJiAhdGhpcy5pc0xpbmtGYWtlUm91dGUoYikpKVswXS52aWV3cy5maWx0ZXIoYSA9PiBhLnN0YXJ0c1dpdGgobW9kdWxlVmlldykgJiYgIXRoaXMuZG9lc0xpbmtIYXZlUGFyYW1ldGVyKGEpICYmICF0aGlzLmlzTGlua0Zha2VSb3V0ZShhKSlbMF07XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwobGluayk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJy9ob21lJyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoZmFsc2UpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LCAoKSA9PiB7fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRkb2VzTGlua0hhdmVQYXJhbWV0ZXIobGluazogc3RyaW5nKSB7XG5cdFx0bGV0IHBlcm1pc3Npb25zID0gdGhpcy5fYXBzLmdldEFsbE1vZHVsZVBlcm1pc3Npb25zKCk7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHBlcm1pc3Npb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRsZXQgcGVybWlzc2lvbiA9IHBlcm1pc3Npb25zW2ldO1xuXHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBwZXJtaXNzaW9uLnZpZXdzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGxldCB2aWV3ID0gcGVybWlzc2lvbi52aWV3c1tqXTtcblxuXHRcdFx0XHRpZiAodmlldy5saW5rID09PSBsaW5rKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEhdmlldy5oYXNfcGFyYW1ldGVyO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aXNMaW5rRmFrZVJvdXRlKGxpbms6IHN0cmluZykge1xuXHRcdGxldCBwZXJtaXNzaW9ucyA9IHRoaXMuX2Fwcy5nZXRBbGxNb2R1bGVQZXJtaXNzaW9ucygpO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwZXJtaXNzaW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0bGV0IHBlcm1pc3Npb24gPSBwZXJtaXNzaW9uc1tpXTtcblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgcGVybWlzc2lvbi52aWV3cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRsZXQgdmlldyA9IHBlcm1pc3Npb24udmlld3Nbal07XG5cblx0XHRcdFx0aWYgKHZpZXcubGluayA9PT0gbGluaykge1xuXHRcdFx0XHRcdHJldHVybiAhIXZpZXcuZmFrZV9yb3V0ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aXNMaW5rUGFydGlhbFJvdXRlKGxpbms6IHN0cmluZykge1xuXHRcdGxldCBwZXJtaXNzaW9ucyA9IHRoaXMuX2Fwcy5nZXRBbGxNb2R1bGVQZXJtaXNzaW9ucygpO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwZXJtaXNzaW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0bGV0IHBlcm1pc3Npb24gPSBwZXJtaXNzaW9uc1tpXTtcblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgcGVybWlzc2lvbi52aWV3cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRsZXQgdmlldyA9IHBlcm1pc3Npb24udmlld3Nbal07XG5cblx0XHRcdFx0aWYgKHZpZXcubGluayA9PT0gbGluaykge1xuXHRcdFx0XHRcdHJldHVybiAhIXZpZXcucGFydGlhbF9yb3V0ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufSJdfQ==
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1ndWFyZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL2F1dGgvYXV0aC1ndWFyZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFlLE1BQU0sRUFBK0MsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7Ozs7O0FBRzlELE1BQU0sT0FBTyxTQUFTO0lBSXJCLFlBQW9CLE9BQWUsRUFDeEIsS0FBa0IsRUFDbEIsR0FBa0IsRUFDbEIsUUFBK0IsRUFDL0IsSUFBaUIsRUFDakIsUUFBK0IsRUFDL0IsSUFBMkIsRUFDM0IsTUFBb0I7UUFQWCxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ3hCLFVBQUssR0FBTCxLQUFLLENBQWE7UUFDbEIsUUFBRyxHQUFILEdBQUcsQ0FBZTtRQUNsQixhQUFRLEdBQVIsUUFBUSxDQUF1QjtRQUMvQixTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ2pCLGFBQVEsR0FBUixRQUFRLENBQXVCO1FBQy9CLFNBQUksR0FBSixJ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QUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDakQsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFL0IsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtvQkFDdkIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztpQkFDekI7YUFDRDtTQUNEO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBWTtRQUM5QixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFFdEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUMsSUFBSSxVQUFVLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDakQsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFL0IsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtvQkFDdkIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztpQkFDNUI7YUFDRDtTQUNEO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDOztzR0FwT1csU0FBUzswR0FBVCxTQUFTOzJGQUFULFNBQVM7a0JBRHJCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY2NvdW50TWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi9hY2NvdW50LW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYW5BY3RpdmF0ZSwgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXJTdGF0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uL3dpZGdldHMvZGlhbG9nL2RpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7IE9mZmxpbmVNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uL29mZmxpbmUtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IGRhdGVSZXZpdmVyIH0gZnJvbSAnLi4vdXRpbC9jb21tb24uaGVscGVyJztcbmltcG9ydCB7IENvcmVTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4vYXV0aC1wZXJtaXNzaW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uL3dpZGdldHMvYWxlcnQvYWxlcnQuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBdXRoR3VhcmQgaW1wbGVtZW50cyBDYW5BY3RpdmF0ZSB7XG5cblx0cmVkaXJlY3RVcmw6IHN0cmluZztcblxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIF9yb3V0ZXI6IFJvdXRlciwgXG5cdFx0XHRcdHByaXZhdGUgX2F1dGg6IEF1dGhTZXJ2aWNlLCBcblx0XHRcdFx0cHJpdmF0ZSBfZHM6IERpYWxvZ1NlcnZpY2UsXG5cdFx0XHRcdHByaXZhdGUgX2FjY291bnQ6IEFjY291bnRNYW5hZ2VyU2VydmljZSxcblx0XHRcdFx0cHJpdmF0ZSBfYXBwOiBDb3JlU2VydmljZSxcblx0XHRcdFx0cHJpdmF0ZSBfb2ZmbGluZTogT2ZmbGluZU1hbmFnZXJTZXJ2aWNlLFxuXHRcdFx0XHRwcml2YXRlIF9hcHM6IEF1dGhQZXJtaXNzaW9uU2VydmljZSxcblx0XHRcdFx0cHJpdmF0ZSBfYWxlcnQ6IEFsZXJ0U2VydmljZSkgXG5cdHt9XG5cdFxuXHRjYW5BY3RpdmF0ZShyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW4ge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0dGhpcy5fYWNjb3VudC5pc0luaXRDb21wbGV0ZWQoKS50aGVuKCgpID0+IHtcblx0XHRcdFx0bGV0IHVzZXIgPSB0aGlzLl9hY2NvdW50LmdldFVzZXIoKTtcblxuXHRcdFx0XHRpZiAoIXVzZXIpIHtcblx0XHRcdFx0XHR1c2VyID0gSlNPTi5wYXJzZSh0aGlzLl9vZmZsaW5lLmdldFVzZXIoKSwgZGF0ZVJldml2ZXIpO1xuXHRcdFx0XHRcdGlmICh1c2VyKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9hY2NvdW50LnNldFVzZXIodXNlcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCF1c2VyKSB7XG5cdFx0XHRcdFx0aWYgKG5hdmlnYXRvci5vbkxpbmUpIHtcblx0XHRcdFx0XHRcdHRoaXMuX2F1dGgubG9naW5Vc2VyKCkudGhlbihuZXdVc2VyID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fYWNjb3VudC5pc0xvZ2luQ29tcGxldGVkKCkudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0dXNlciA9IHRoaXMuX2FjY291bnQuZ2V0VXNlcigpO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCF1c2VyLmFjdGl2ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJy9ob21lJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgZnVsbFZpZXcgPSBzdGF0ZS51cmwucmVwbGFjZSgvXFwvW2EtZjAtOV17MjR9JC8sICcnKS5yZXBsYWNlKC9cXD8uKyQvLCAnJyk7IC8vQWxsIGJ1dCBJRCBhbmQgUXVlcnkgU3RyaW5nXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgcGFydGlhbFZpZXcgPSBzdGF0ZS51cmwucmVwbGFjZSgvXihcXC9bLWEtel0rXFwvW15cXC9dKylcXC8uKiQvLCAnJDEnKS5yZXBsYWNlKC9cXD8uKyQvLCAnJyk7IC8vTW9kdWxlIGFuZCBGaXJzdCBDaGlsZCBPbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgbW9kdWxlVmlldyA9IHBhcnRpYWxWaWV3LnJlcGxhY2UoL14oXFwvWy1hLXpdK1xcLykuKiQvLCAnJDEnKTsgLy9Nb2R1bGUgT25seVxuXHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAodXNlci5yb2xlcy5zdXBlcl9hZG1pbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoIXRoaXMuaXNMaW5rRmFrZVJvdXRlKGZ1bGxWaWV3KSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIXRoaXMuaXNMaW5rUGFydGlhbFJvdXRlKGZ1bGxWaWV3KSAmJiAhdXNlci5yb2xlcy5ncm91cHMuc29tZShhID0+IGEudmlld3Muc29tZShiID0+IGIgPT09IGZ1bGxWaWV3KSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodXNlci5yb2xlcy5ncm91cHMuc29tZShhID0+IGEudmlld3Muc29tZShiID0+IGIuc3RhcnRzV2l0aChtb2R1bGVWaWV3KSAmJiAhdGhpcy5kb2VzTGlua0hhdmVQYXJhbWV0ZXIoYikgJiYgIXRoaXMuaXNMaW5rRmFrZVJvdXRlKGIpKSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBsaW5rID0gdXNlci5yb2xlcy5ncm91cHMuZmlsdGVyKGEgPT4gYS52aWV3cy5zb21lKGIgPT4gYi5zdGFydHNXaXRoKG1vZHVsZVZpZXcpICYmICF0aGlzLmRvZXNMaW5rSGF2ZVBhcmFtZXRlcihiKSAmJiAhdGhpcy5pc0xpbmtGYWtlUm91dGUoYikpKVswXS52aWV3cy5maWx0ZXIoYSA9PiBhLnN0YXJ0c1dpdGgobW9kdWxlVmlldykgJiYgIXRoaXMuZG9lc0xpbmtIYXZlUGFyYW1ldGVyKGEpICYmICF0aGlzLmlzTGlua0Zha2VSb3V0ZShhKSlbMF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybChsaW5rKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgnL2hvbWUnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAodGhpcy5pc0xpbmtQYXJ0aWFsUm91dGUoZnVsbFZpZXcpICYmICF1c2VyLnJvbGVzLmdyb3Vwcy5zb21lKGEgPT4gYS52aWV3cy5zb21lKGIgPT4gYi5zdGFydHNXaXRoKGZ1bGxWaWV3KSB8fCBmdWxsVmlldy5zdGFydHNXaXRoKGIpKSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodXNlci5yb2xlcy5ncm91cHMuc29tZShhID0+IGEudmlld3Muc29tZShiID0+IGIuc3RhcnRzV2l0aChtb2R1bGVWaWV3KSAmJiAhdGhpcy5kb2VzTGlua0hhdmVQYXJhbWV0ZXIoYikgJiYgIXRoaXMuaXNMaW5rRmFrZVJvdXRlKGIpKSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBsaW5rID0gdXNlci5yb2xlcy5ncm91cHMuZmlsdGVyKGEgPT4gYS52aWV3cy5zb21lKGIgPT4gYi5zdGFydHNXaXRoKG1vZHVsZVZpZXcpICYmICF0aGlzLmRvZXNMaW5rSGF2ZVBhcmFtZXRlcihiKSAmJiAhdGhpcy5pc0xpbmtGYWtlUm91dGUoYikpKVswXS52aWV3cy5maWx0ZXIoYSA9PiBhLnN0YXJ0c1dpdGgobW9kdWxlVmlldykgJiYgIXRoaXMuZG9lc0xpbmtIYXZlUGFyYW1ldGVyKGEpICYmICF0aGlzLmlzTGlua0Zha2VSb3V0ZShhKSlbMF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybChsaW5rKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgnL2hvbWUnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghdGhpcy5pc0xpbmtQYXJ0aWFsUm91dGUocGFydGlhbFZpZXcpICYmICF1c2VyLnJvbGVzLmdyb3Vwcy5zb21lKGEgPT4gYS52aWV3cy5zb21lKGIgPT4gYiA9PT0gcGFydGlhbFZpZXcpKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh1c2VyLnJvbGVzLmdyb3Vwcy5zb21lKGEgPT4gYS52aWV3cy5zb21lKGIgPT4gYi5zdGFydHNXaXRoKG1vZHVsZVZpZXcpICYmICF0aGlzLmRvZXNMaW5rSGF2ZVBhcmFtZXRlcihiKSAmJiAhdGhpcy5pc0xpbmtGYWtlUm91dGUoYikpKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IGxpbmsgPSB1c2VyLnJvbGVzLmdyb3Vwcy5maWx0ZXIoYSA9PiBhLnZpZXdzLnNvbWUoYiA9PiBiLnN0YXJ0c1dpdGgobW9kdWxlVmlldykgJiYgIXRoaXMuZG9lc0xpbmtIYXZlUGFyYW1ldGVyKGIpICYmICF0aGlzLmlzTGlua0Zha2VSb3V0ZShiKSkpWzBdLnZpZXdzLmZpbHRlcihhID0+IGEuc3RhcnRzV2l0aChtb2R1bGVWaWV3KSAmJiAhdGhpcy5kb2VzTGlua0hhdmVQYXJhbWV0ZXIoYSkgJiYgIXRoaXMuaXNMaW5rRmFrZVJvdXRlKGEpKVswXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKGxpbmspO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvaG9tZScpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmICh0aGlzLmlzTGlua1BhcnRpYWxSb3V0ZShwYXJ0aWFsVmlldykgJiYgIXVzZXIucm9sZXMuZ3JvdXBzLnNvbWUoYSA9PiBhLnZpZXdzLnNvbWUoYiA9PiBiLnN0YXJ0c1dpdGgocGFydGlhbFZpZXcpIHx8IHBhcnRpYWxWaWV3LnN0YXJ0c1dpdGgoYikpKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh1c2VyLnJvbGVzLmdyb3Vwcy5zb21lKGEgPT4gYS52aWV3cy5zb21lKGIgPT4gYi5zdGFydHNXaXRoKG1vZHVsZVZpZXcpICYmICF0aGlzLmRvZXNMaW5rSGF2ZVBhcmFtZXRlcihiKSAmJiAhdGhpcy5pc0xpbmtGYWtlUm91dGUoYikpKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IGxpbmsgPSB1c2VyLnJvbGVzLmdyb3Vwcy5maWx0ZXIoYSA9PiBhLnZpZXdzLnNvbWUoYiA9PiBiLnN0YXJ0c1dpdGgobW9kdWxlVmlldykgJiYgIXRoaXMuZG9lc0xpbmtIYXZlUGFyYW1ldGVyKGIpICYmICF0aGlzLmlzTGlua0Zha2VSb3V0ZShiKSkpWzBdLnZpZXdzLmZpbHRlcihhID0+IGEuc3RhcnRzV2l0aChtb2R1bGVWaWV3KSAmJiAhdGhpcy5kb2VzTGlua0hhdmVQYXJhbWV0ZXIoYSkgJiYgIXRoaXMuaXNMaW5rRmFrZVJvdXRlKGEpKVswXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKGxpbmspO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvaG9tZScpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0sICgpID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJy9ob21lJyk7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoZmFsc2UpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0aWYgKCF1c2VyLmFjdGl2ZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJy9ob21lJyk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRsZXQgZnVsbFZpZXcgPSBzdGF0ZS51cmwucmVwbGFjZSgvXFwvW2EtZjAtOV17MjR9JC8sICcnKS5yZXBsYWNlKC9cXD8uKyQvLCAnJyk7IC8vQWxsIGJ1dCBJRCBhbmQgUXVlcnkgU3RyaW5nXG5cdFx0XHRcdFx0XHRsZXQgcGFydGlhbFZpZXcgPSBzdGF0ZS51cmwucmVwbGFjZSgvXihcXC9bLWEtel0rXFwvW15cXC9dKylcXC8uKiQvLCAnJDEnKS5yZXBsYWNlKC9cXD8uKyQvLCAnJyk7IC8vTW9kdWxlIGFuZCBGaXJzdCBDaGlsZCBPbmx5XG5cdFx0XHRcdFx0XHRsZXQgbW9kdWxlVmlldyA9IHBhcnRpYWxWaWV3LnJlcGxhY2UoL14oXFwvWy1hLXpdK1xcLykuKiQvLCAnJDEnKTsgLy9Nb2R1bGUgT25seVxuXHRcdFx0XHRcblx0XHRcdFx0XHRcdGlmICh1c2VyLnJvbGVzLnN1cGVyX2FkbWluKSB7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlIGlmICghdGhpcy5pc0xpbmtGYWtlUm91dGUoZnVsbFZpZXcpKSB7XG5cdFx0XHRcdFx0XHRcdGlmICghdGhpcy5pc0xpbmtQYXJ0aWFsUm91dGUoZnVsbFZpZXcpICYmICF1c2VyLnJvbGVzLmdyb3Vwcy5zb21lKGEgPT4gYS52aWV3cy5zb21lKGIgPT4gYiA9PT0gZnVsbFZpZXcpKSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICh1c2VyLnJvbGVzLmdyb3Vwcy5zb21lKGEgPT4gYS52aWV3cy5zb21lKGIgPT4gYi5zdGFydHNXaXRoKG1vZHVsZVZpZXcpICYmICF0aGlzLmRvZXNMaW5rSGF2ZVBhcmFtZXRlcihiKSAmJiAhdGhpcy5pc0xpbmtGYWtlUm91dGUoYikpKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IGxpbmsgPSB1c2VyLnJvbGVzLmdyb3Vwcy5maWx0ZXIoYSA9PiBhLnZpZXdzLnNvbWUoYiA9PiBiLnN0YXJ0c1dpdGgobW9kdWxlVmlldykgJiYgIXRoaXMuZG9lc0xpbmtIYXZlUGFyYW1ldGVyKGIpICYmICF0aGlzLmlzTGlua0Zha2VSb3V0ZShiKSkpWzBdLnZpZXdzLmZpbHRlcihhID0+IGEuc3RhcnRzV2l0aChtb2R1bGVWaWV3KSAmJiAhdGhpcy5kb2VzTGlua0hhdmVQYXJhbWV0ZXIoYSkgJiYgIXRoaXMuaXNMaW5rRmFrZVJvdXRlKGEpKVswXTtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKGxpbmspO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvaG9tZScpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRlbHNlIGlmICh0aGlzLmlzTGlua1BhcnRpYWxSb3V0ZShmdWxsVmlldykgJiYgIXVzZXIucm9sZXMuZ3JvdXBzLnNvbWUoYSA9PiBhLnZpZXdzLnNvbWUoYiA9PiBiLnN0YXJ0c1dpdGgoZnVsbFZpZXcpIHx8IGZ1bGxWaWV3LnN0YXJ0c1dpdGgoYikpKSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICh1c2VyLnJvbGVzLmdyb3Vwcy5zb21lKGEgPT4gYS52aWV3cy5zb21lKGIgPT4gYi5zdGFydHNXaXRoKG1vZHVsZVZpZXcpICYmICF0aGlzLmRvZXNMaW5rSGF2ZVBhcmFtZXRlcihiKSAmJiAhdGhpcy5pc0xpbmtGYWtlUm91dGUoYikpKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IGxpbmsgPSB1c2VyLnJvbGVzLmdyb3Vwcy5maWx0ZXIoYSA9PiBhLnZpZXdzLnNvbWUoYiA9PiBiLnN0YXJ0c1dpdGgobW9kdWxlVmlldykgJiYgIXRoaXMuZG9lc0xpbmtIYXZlUGFyYW1ldGVyKGIpICYmICF0aGlzLmlzTGlua0Zha2VSb3V0ZShiKSkpWzBdLnZpZXdzLmZpbHRlcihhID0+IGEuc3RhcnRzV2l0aChtb2R1bGVWaWV3KSAmJiAhdGhpcy5kb2VzTGlua0hhdmVQYXJhbWV0ZXIoYSkgJiYgIXRoaXMuaXNMaW5rRmFrZVJvdXRlKGEpKVswXTtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKGxpbmspO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvaG9tZScpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGlmICghdGhpcy5pc0xpbmtQYXJ0aWFsUm91dGUocGFydGlhbFZpZXcpICYmICF1c2VyLnJvbGVzLmdyb3Vwcy5zb21lKGEgPT4gYS52aWV3cy5zb21lKGIgPT4gYiA9PT0gcGFydGlhbFZpZXcpKSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICh1c2VyLnJvbGVzLmdyb3Vwcy5zb21lKGEgPT4gYS52aWV3cy5zb21lKGIgPT4gYi5zdGFydHNXaXRoKG1vZHVsZVZpZXcpICYmICF0aGlzLmRvZXNMaW5rSGF2ZVBhcmFtZXRlcihiKSAmJiAhdGhpcy5pc0xpbmtGYWtlUm91dGUoYikpKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IGxpbmsgPSB1c2VyLnJvbGVzLmdyb3Vwcy5maWx0ZXIoYSA9PiBhLnZpZXdzLnNvbWUoYiA9PiBiLnN0YXJ0c1dpdGgobW9kdWxlVmlldykgJiYgIXRoaXMuZG9lc0xpbmtIYXZlUGFyYW1ldGVyKGIpICYmICF0aGlzLmlzTGlua0Zha2VSb3V0ZShiKSkpWzBdLnZpZXdzLmZpbHRlcihhID0+IGEuc3RhcnRzV2l0aChtb2R1bGVWaWV3KSAmJiAhdGhpcy5kb2VzTGlua0hhdmVQYXJhbWV0ZXIoYSkgJiYgIXRoaXMuaXNMaW5rRmFrZVJvdXRlKGEpKVswXTtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKGxpbmspO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvaG9tZScpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRlbHNlIGlmICh0aGlzLmlzTGlua1BhcnRpYWxSb3V0ZShwYXJ0aWFsVmlldykgJiYgIXVzZXIucm9sZXMuZ3JvdXBzLnNvbWUoYSA9PiBhLnZpZXdzLnNvbWUoYiA9PiBiLnN0YXJ0c1dpdGgocGFydGlhbFZpZXcpIHx8IHBhcnRpYWxWaWV3LnN0YXJ0c1dpdGgoYikpKSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICh1c2VyLnJvbGVzLmdyb3Vwcy5zb21lKGEgPT4gYS52aWV3cy5zb21lKGIgPT4gYi5zdGFydHNXaXRoKG1vZHVsZVZpZXcpICYmICF0aGlzLmRvZXNMaW5rSGF2ZVBhcmFtZXRlcihiKSAmJiAhdGhpcy5pc0xpbmtGYWtlUm91dGUoYikpKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IGxpbmsgPSB1c2VyLnJvbGVzLmdyb3Vwcy5maWx0ZXIoYSA9PiBhLnZpZXdzLnNvbWUoYiA9PiBiLnN0YXJ0c1dpdGgobW9kdWxlVmlldykgJiYgIXRoaXMuZG9lc0xpbmtIYXZlUGFyYW1ldGVyKGIpICYmICF0aGlzLmlzTGlua0Zha2VSb3V0ZShiKSkpWzBdLnZpZXdzLmZpbHRlcihhID0+IGEuc3RhcnRzV2l0aChtb2R1bGVWaWV3KSAmJiAhdGhpcy5kb2VzTGlua0hhdmVQYXJhbWV0ZXIoYSkgJiYgIXRoaXMuaXNMaW5rRmFrZVJvdXRlKGEpKVswXTtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKGxpbmspO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvaG9tZScpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LCAoKSA9PiB7fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRkb2VzTGlua0hhdmVQYXJhbWV0ZXIobGluazogc3RyaW5nKSB7XG5cdFx0bGV0IHBlcm1pc3Npb25zID0gdGhpcy5fYXBzLmdldEFsbE1vZHVsZVBlcm1pc3Npb25zKCk7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHBlcm1pc3Npb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRsZXQgcGVybWlzc2lvbiA9IHBlcm1pc3Npb25zW2ldO1xuXHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBwZXJtaXNzaW9uLnZpZXdzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGxldCB2aWV3ID0gcGVybWlzc2lvbi52aWV3c1tqXTtcblxuXHRcdFx0XHRpZiAodmlldy5saW5rID09PSBsaW5rKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEhdmlldy5oYXNfcGFyYW1ldGVyO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aXNMaW5rRmFrZVJvdXRlKGxpbms6IHN0cmluZykge1xuXHRcdGxldCBwZXJtaXNzaW9ucyA9IHRoaXMuX2Fwcy5nZXRBbGxNb2R1bGVQZXJtaXNzaW9ucygpO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwZXJtaXNzaW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0bGV0IHBlcm1pc3Npb24gPSBwZXJtaXNzaW9uc1tpXTtcblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgcGVybWlzc2lvbi52aWV3cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRsZXQgdmlldyA9IHBlcm1pc3Npb24udmlld3Nbal07XG5cblx0XHRcdFx0aWYgKHZpZXcubGluayA9PT0gbGluaykge1xuXHRcdFx0XHRcdHJldHVybiAhIXZpZXcuZmFrZV9yb3V0ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aXNMaW5rUGFydGlhbFJvdXRlKGxpbms6IHN0cmluZykge1xuXHRcdGxldCBwZXJtaXNzaW9ucyA9IHRoaXMuX2Fwcy5nZXRBbGxNb2R1bGVQZXJtaXNzaW9ucygpO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwZXJtaXNzaW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0bGV0IHBlcm1pc3Npb24gPSBwZXJtaXNzaW9uc1tpXTtcblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgcGVybWlzc2lvbi52aWV3cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRsZXQgdmlldyA9IHBlcm1pc3Npb24udmlld3Nbal07XG5cblx0XHRcdFx0aWYgKHZpZXcubGluayA9PT0gbGluaykge1xuXHRcdFx0XHRcdHJldHVybiAhIXZpZXcucGFydGlhbF9yb3V0ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufSJdfQ==
@@ -5523,33 +5523,61 @@ class AuthGuard {
5523
5523
  resolve(false);
5524
5524
  }
5525
5525
  else {
5526
- let view = state.url.replace(/^(\/[-a-z]+\/[^\/]+)\/.*$/, '$1').replace(/\?.+$/, '');
5527
- let moduleView = view.replace(/^(\/[-a-z]+\/).*$/, '$1');
5526
+ let fullView = state.url.replace(/\/[a-f0-9]{24}$/, '').replace(/\?.+$/, ''); //All but ID and Query String
5527
+ let partialView = state.url.replace(/^(\/[-a-z]+\/[^\/]+)\/.*$/, '$1').replace(/\?.+$/, ''); //Module and First Child Only
5528
+ let moduleView = partialView.replace(/^(\/[-a-z]+\/).*$/, '$1'); //Module Only
5528
5529
  if (user.roles.super_admin) {
5529
5530
  resolve(true);
5530
5531
  }
5531
- else if (!this.isLinkPartialRoute(view) && !user.roles.groups.some(a => a.views.some(b => b === view))) {
5532
- if (user.roles.groups.some(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))) {
5533
- let link = user.roles.groups.filter(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))[0].views.filter(a => a.startsWith(moduleView) && !this.doesLinkHaveParameter(a) && !this.isLinkFakeRoute(a))[0];
5534
- this._router.navigateByUrl(link);
5532
+ else if (!this.isLinkFakeRoute(fullView)) {
5533
+ if (!this.isLinkPartialRoute(fullView) && !user.roles.groups.some(a => a.views.some(b => b === fullView))) {
5534
+ if (user.roles.groups.some(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))) {
5535
+ let link = user.roles.groups.filter(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))[0].views.filter(a => a.startsWith(moduleView) && !this.doesLinkHaveParameter(a) && !this.isLinkFakeRoute(a))[0];
5536
+ this._router.navigateByUrl(link);
5537
+ }
5538
+ else {
5539
+ this._router.navigateByUrl('/home');
5540
+ }
5541
+ resolve(false);
5542
+ }
5543
+ else if (this.isLinkPartialRoute(fullView) && !user.roles.groups.some(a => a.views.some(b => b.startsWith(fullView) || fullView.startsWith(b)))) {
5544
+ if (user.roles.groups.some(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))) {
5545
+ let link = user.roles.groups.filter(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))[0].views.filter(a => a.startsWith(moduleView) && !this.doesLinkHaveParameter(a) && !this.isLinkFakeRoute(a))[0];
5546
+ this._router.navigateByUrl(link);
5547
+ }
5548
+ else {
5549
+ this._router.navigateByUrl('/home');
5550
+ }
5551
+ resolve(false);
5535
5552
  }
5536
5553
  else {
5537
- this._router.navigateByUrl('/home');
5554
+ resolve(true);
5538
5555
  }
5539
- resolve(false);
5540
5556
  }
5541
- else if (this.isLinkPartialRoute(view) && !user.roles.groups.some(a => a.views.some(b => b.startsWith(view) || view.startsWith(b)))) {
5542
- if (user.roles.groups.some(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))) {
5543
- let link = user.roles.groups.filter(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))[0].views.filter(a => a.startsWith(moduleView) && !this.doesLinkHaveParameter(a) && !this.isLinkFakeRoute(a))[0];
5544
- this._router.navigateByUrl(link);
5557
+ else {
5558
+ if (!this.isLinkPartialRoute(partialView) && !user.roles.groups.some(a => a.views.some(b => b === partialView))) {
5559
+ if (user.roles.groups.some(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))) {
5560
+ let link = user.roles.groups.filter(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))[0].views.filter(a => a.startsWith(moduleView) && !this.doesLinkHaveParameter(a) && !this.isLinkFakeRoute(a))[0];
5561
+ this._router.navigateByUrl(link);
5562
+ }
5563
+ else {
5564
+ this._router.navigateByUrl('/home');
5565
+ }
5566
+ resolve(false);
5567
+ }
5568
+ else if (this.isLinkPartialRoute(partialView) && !user.roles.groups.some(a => a.views.some(b => b.startsWith(partialView) || partialView.startsWith(b)))) {
5569
+ if (user.roles.groups.some(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))) {
5570
+ let link = user.roles.groups.filter(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))[0].views.filter(a => a.startsWith(moduleView) && !this.doesLinkHaveParameter(a) && !this.isLinkFakeRoute(a))[0];
5571
+ this._router.navigateByUrl(link);
5572
+ }
5573
+ else {
5574
+ this._router.navigateByUrl('/home');
5575
+ }
5576
+ resolve(false);
5545
5577
  }
5546
5578
  else {
5547
- this._router.navigateByUrl('/home');
5579
+ resolve(true);
5548
5580
  }
5549
- resolve(false);
5550
- }
5551
- else {
5552
- resolve(true);
5553
5581
  }
5554
5582
  }
5555
5583
  });
@@ -5568,33 +5596,58 @@ class AuthGuard {
5568
5596
  resolve(false);
5569
5597
  }
5570
5598
  else {
5571
- let view = state.url.replace(/^(\/[-a-z]+\/[^\/]+)\/.*$/, '$1').replace(/\?.+$/, '');
5572
- let moduleView = view.replace(/^(\/[-a-z]+\/).*$/, '$1');
5599
+ let fullView = state.url.replace(/\/[a-f0-9]{24}$/, '').replace(/\?.+$/, ''); //All but ID and Query String
5600
+ let partialView = state.url.replace(/^(\/[-a-z]+\/[^\/]+)\/.*$/, '$1').replace(/\?.+$/, ''); //Module and First Child Only
5601
+ let moduleView = partialView.replace(/^(\/[-a-z]+\/).*$/, '$1'); //Module Only
5573
5602
  if (user.roles.super_admin) {
5574
5603
  resolve(true);
5575
5604
  }
5576
- else if (!this.isLinkPartialRoute(view) && !user.roles.groups.some(a => a.views.some(b => b === view))) {
5577
- if (user.roles.groups.some(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))) {
5578
- let link = user.roles.groups.filter(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))[0].views.filter(a => a.startsWith(moduleView) && !this.doesLinkHaveParameter(a) && !this.isLinkFakeRoute(a))[0];
5579
- this._router.navigateByUrl(link);
5605
+ else if (!this.isLinkFakeRoute(fullView)) {
5606
+ if (!this.isLinkPartialRoute(fullView) && !user.roles.groups.some(a => a.views.some(b => b === fullView))) {
5607
+ if (user.roles.groups.some(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))) {
5608
+ let link = user.roles.groups.filter(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))[0].views.filter(a => a.startsWith(moduleView) && !this.doesLinkHaveParameter(a) && !this.isLinkFakeRoute(a))[0];
5609
+ this._router.navigateByUrl(link);
5610
+ }
5611
+ else {
5612
+ this._router.navigateByUrl('/home');
5613
+ }
5614
+ resolve(false);
5580
5615
  }
5581
- else {
5582
- this._router.navigateByUrl('/home');
5616
+ else if (this.isLinkPartialRoute(fullView) && !user.roles.groups.some(a => a.views.some(b => b.startsWith(fullView) || fullView.startsWith(b)))) {
5617
+ if (user.roles.groups.some(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))) {
5618
+ let link = user.roles.groups.filter(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))[0].views.filter(a => a.startsWith(moduleView) && !this.doesLinkHaveParameter(a) && !this.isLinkFakeRoute(a))[0];
5619
+ this._router.navigateByUrl(link);
5620
+ }
5621
+ else {
5622
+ this._router.navigateByUrl('/home');
5623
+ }
5624
+ resolve(false);
5583
5625
  }
5584
- resolve(false);
5585
5626
  }
5586
- else if (this.isLinkPartialRoute(view) && !user.roles.groups.some(a => a.views.some(b => b.startsWith(view) || view.startsWith(b)))) {
5587
- if (user.roles.groups.some(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))) {
5588
- let link = user.roles.groups.filter(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))[0].views.filter(a => a.startsWith(moduleView) && !this.doesLinkHaveParameter(a) && !this.isLinkFakeRoute(a))[0];
5589
- this._router.navigateByUrl(link);
5627
+ else {
5628
+ if (!this.isLinkPartialRoute(partialView) && !user.roles.groups.some(a => a.views.some(b => b === partialView))) {
5629
+ if (user.roles.groups.some(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))) {
5630
+ let link = user.roles.groups.filter(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))[0].views.filter(a => a.startsWith(moduleView) && !this.doesLinkHaveParameter(a) && !this.isLinkFakeRoute(a))[0];
5631
+ this._router.navigateByUrl(link);
5632
+ }
5633
+ else {
5634
+ this._router.navigateByUrl('/home');
5635
+ }
5636
+ resolve(false);
5637
+ }
5638
+ else if (this.isLinkPartialRoute(partialView) && !user.roles.groups.some(a => a.views.some(b => b.startsWith(partialView) || partialView.startsWith(b)))) {
5639
+ if (user.roles.groups.some(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))) {
5640
+ let link = user.roles.groups.filter(a => a.views.some(b => b.startsWith(moduleView) && !this.doesLinkHaveParameter(b) && !this.isLinkFakeRoute(b)))[0].views.filter(a => a.startsWith(moduleView) && !this.doesLinkHaveParameter(a) && !this.isLinkFakeRoute(a))[0];
5641
+ this._router.navigateByUrl(link);
5642
+ }
5643
+ else {
5644
+ this._router.navigateByUrl('/home');
5645
+ }
5646
+ resolve(false);
5590
5647
  }
5591
5648
  else {
5592
- this._router.navigateByUrl('/home');
5649
+ resolve(true);
5593
5650
  }
5594
- resolve(false);
5595
- }
5596
- else {
5597
- resolve(true);
5598
5651
  }
5599
5652
  }
5600
5653
  }