tin-spa 2.2.3 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/accounts/accountDialog.component.mjs +2 -2
- package/esm2020/lib/components/accounts/accounts.component.mjs +2 -2
- package/esm2020/lib/components/attach/attach.component.mjs +1 -20
- package/esm2020/lib/components/change-password/change-password.component.mjs +2 -2
- package/esm2020/lib/components/create-account/create-account.component.mjs +2 -2
- package/esm2020/lib/components/customers/customers.component.mjs +2 -2
- package/esm2020/lib/components/date/date.component.mjs +23 -16
- package/esm2020/lib/components/departments/departments.component.mjs +6 -26
- package/esm2020/lib/components/employees/employees.component.mjs +10 -53
- package/esm2020/lib/components/form/form.component.mjs +2 -2
- package/esm2020/lib/components/inventory/inventory.component.mjs +2 -2
- package/esm2020/lib/components/inventory/quantityDialog.component.mjs +2 -2
- package/esm2020/lib/components/invitations-table/invitations-table.component.mjs +2 -2
- package/esm2020/lib/components/list-dialog/list-dialog.component.mjs +2 -2
- package/esm2020/lib/components/login/login.component.mjs +2 -2
- package/esm2020/lib/components/logs/logs.component.mjs +2 -2
- package/esm2020/lib/components/membership/membership.component.mjs +2 -2
- package/esm2020/lib/components/nav-menu/nav-menu.component.mjs +2 -2
- package/esm2020/lib/components/plans/plans.component.mjs +2 -2
- package/esm2020/lib/components/positions/positions.component.mjs +13 -6
- package/esm2020/lib/components/profile/profile.component.mjs +2 -2
- package/esm2020/lib/components/recover-account/recover-account.component.mjs +2 -2
- package/esm2020/lib/components/roles/addRoleDialog.component.mjs +2 -2
- package/esm2020/lib/components/roles/roles.component.mjs +2 -2
- package/esm2020/lib/components/settings/settings.component.mjs +2 -2
- package/esm2020/lib/components/signup/signup.component.mjs +2 -2
- package/esm2020/lib/components/suppliers/suppliers.component.mjs +2 -2
- package/esm2020/lib/components/table/detailsDialog.component.mjs +72 -142
- package/esm2020/lib/components/table/table.component.mjs +151 -333
- package/esm2020/lib/components/table-action/table-action.component.mjs +46 -0
- package/esm2020/lib/components/table-header/table-header.component.mjs +52 -0
- package/esm2020/lib/components/table-internal/detailsDialog-internal.component.mjs +78 -139
- package/esm2020/lib/components/table-internal/table-internal.component.mjs +153 -334
- package/esm2020/lib/components/table-row/table-row.component.mjs +58 -0
- package/esm2020/lib/components/tasks/tasks.component.mjs +2 -2
- package/esm2020/lib/components/tenant-settings/inviteDialog.component.mjs +2 -2
- package/esm2020/lib/components/tenant-settings/tenant-settings.component.mjs +2 -2
- package/esm2020/lib/components/tenants/tenants.component.mjs +2 -2
- package/esm2020/lib/components/tiles/tiles.component.mjs +2 -2
- package/esm2020/lib/components/transactions/transactDialog.component.mjs +2 -2
- package/esm2020/lib/components/transactions/transactions.component.mjs +2 -2
- package/esm2020/lib/components/users/users.component.mjs +2 -2
- package/esm2020/lib/components/viewer/viewer.component.mjs +2 -2
- package/esm2020/lib/components/welcome/welcome.component.mjs +2 -2
- package/esm2020/lib/services/button.service.mjs +100 -0
- package/esm2020/lib/services/condition.service.mjs +32 -0
- package/esm2020/lib/services/datalib.service.mjs +387 -0
- package/esm2020/lib/services/dialog.service.mjs +38 -0
- package/esm2020/lib/services/table-config.service.mjs +26 -0
- package/esm2020/lib/tin-spa.module.mjs +6 -3
- package/esm2020/public-api.mjs +3 -2
- package/fesm2015/tin-spa.mjs +963 -1075
- package/fesm2015/tin-spa.mjs.map +1 -1
- package/fesm2020/tin-spa.mjs +970 -1070
- package/fesm2020/tin-spa.mjs.map +1 -1
- package/lib/components/accounts/accountDialog.component.d.ts +1 -1
- package/lib/components/accounts/accounts.component.d.ts +1 -1
- package/lib/components/attach/attach.component.d.ts +0 -19
- package/lib/components/change-password/change-password.component.d.ts +1 -1
- package/lib/components/create-account/create-account.component.d.ts +1 -1
- package/lib/components/customers/customers.component.d.ts +1 -1
- package/lib/components/date/date.component.d.ts +10 -9
- package/lib/components/departments/departments.component.d.ts +2 -5
- package/lib/components/employees/employees.component.d.ts +3 -14
- package/lib/components/form/form.component.d.ts +1 -1
- package/lib/components/inventory/inventory.component.d.ts +1 -1
- package/lib/components/inventory/quantityDialog.component.d.ts +1 -1
- package/lib/components/invitations-table/invitations-table.component.d.ts +1 -1
- package/lib/components/list-dialog/list-dialog.component.d.ts +1 -1
- package/lib/components/login/login.component.d.ts +1 -1
- package/lib/components/logs/logs.component.d.ts +1 -1
- package/lib/components/membership/membership.component.d.ts +1 -1
- package/lib/components/nav-menu/nav-menu.component.d.ts +1 -1
- package/lib/components/plans/plans.component.d.ts +1 -1
- package/lib/components/positions/positions.component.d.ts +5 -1
- package/lib/components/profile/profile.component.d.ts +1 -1
- package/lib/components/recover-account/recover-account.component.d.ts +1 -1
- package/lib/components/roles/addRoleDialog.component.d.ts +1 -1
- package/lib/components/roles/roles.component.d.ts +1 -1
- package/lib/components/settings/settings.component.d.ts +1 -1
- package/lib/components/signup/signup.component.d.ts +1 -1
- package/lib/components/suppliers/suppliers.component.d.ts +1 -1
- package/lib/components/table/detailsDialog.component.d.ts +11 -4
- package/lib/components/table/table.component.d.ts +28 -15
- package/lib/components/table-action/table-action.component.d.ts +22 -0
- package/lib/components/table-header/table-header.component.d.ts +22 -0
- package/lib/components/table-internal/detailsDialog-internal.component.d.ts +16 -6
- package/lib/components/table-internal/table-internal.component.d.ts +28 -15
- package/lib/components/table-row/table-row.component.d.ts +28 -0
- package/lib/components/tasks/tasks.component.d.ts +1 -1
- package/lib/components/tenant-settings/inviteDialog.component.d.ts +1 -1
- package/lib/components/tenant-settings/tenant-settings.component.d.ts +1 -1
- package/lib/components/tenants/tenants.component.d.ts +1 -1
- package/lib/components/tiles/tiles.component.d.ts +1 -1
- package/lib/components/transactions/transactDialog.component.d.ts +1 -1
- package/lib/components/transactions/transactions.component.d.ts +1 -1
- package/lib/components/users/users.component.d.ts +1 -1
- package/lib/components/viewer/viewer.component.d.ts +1 -1
- package/lib/components/welcome/welcome.component.d.ts +1 -1
- package/lib/services/button.service.d.ts +27 -0
- package/lib/services/condition.service.d.ts +10 -0
- package/lib/services/{data.service.d.ts → datalib.service.d.ts} +15 -1
- package/lib/services/dialog.service.d.ts +18 -0
- package/lib/services/table-config.service.d.ts +8 -0
- package/lib/tin-spa.module.d.ts +8 -5
- package/package.json +1 -1
- package/public-api.d.ts +2 -1
- package/esm2020/lib/services/data.service.mjs +0 -236
|
@@ -1,236 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { AppConfig, CapItem } from '../classes/Classes';
|
|
3
|
-
import { BehaviorSubject } from 'rxjs';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "./http.service";
|
|
6
|
-
import * as i2 from "@angular/router";
|
|
7
|
-
export class DataServiceLib {
|
|
8
|
-
constructor(httpService, router, route) {
|
|
9
|
-
this.httpService = httpService;
|
|
10
|
-
this.router = router;
|
|
11
|
-
this.route = route;
|
|
12
|
-
this.appConfig = new AppConfig();
|
|
13
|
-
this.appConfigSource = new BehaviorSubject(this.appConfig);
|
|
14
|
-
this.appConfigObserv = this.appConfigSource.asObservable();
|
|
15
|
-
this.capHome = new CapItem;
|
|
16
|
-
this.capAdmin = new CapItem;
|
|
17
|
-
this.capUsers = new CapItem;
|
|
18
|
-
this.capRoles = new CapItem;
|
|
19
|
-
this.capLogs = new CapItem;
|
|
20
|
-
this.capSettings = new CapItem;
|
|
21
|
-
this.capMultitenant = new CapItem;
|
|
22
|
-
this.capTenants = new CapItem;
|
|
23
|
-
this.capMembership = new CapItem;
|
|
24
|
-
this.capPlans = new CapItem;
|
|
25
|
-
this.capGeneral = new CapItem;
|
|
26
|
-
this.capCustomers = new CapItem;
|
|
27
|
-
this.capInventory = new CapItem;
|
|
28
|
-
this.capAccounts = new CapItem;
|
|
29
|
-
this.capSuppliers = new CapItem;
|
|
30
|
-
this.capTasks = new CapItem;
|
|
31
|
-
this.capHR = new CapItem;
|
|
32
|
-
this.capEmployees = new CapItem;
|
|
33
|
-
this.capDepartments = new CapItem;
|
|
34
|
-
this.capPositions = new CapItem;
|
|
35
|
-
this.capGrades = new CapItem;
|
|
36
|
-
this.tmpProfileuserName = "";
|
|
37
|
-
this.isProcessing = false;
|
|
38
|
-
this.appConfig.appName = "App-Name";
|
|
39
|
-
this.appConfig.logo = "./assets/logo.png";
|
|
40
|
-
this.appConfig.ADAuth = true;
|
|
41
|
-
this.appConfig.capItems = [this.capMultitenant, this.capAdmin, this.capHome];
|
|
42
|
-
this.capHome.name = "cap1";
|
|
43
|
-
this.capHome.display = "Home";
|
|
44
|
-
this.capHome.link = "home";
|
|
45
|
-
this.capHome.icon = "home";
|
|
46
|
-
this.capAdmin.name = "cap2";
|
|
47
|
-
this.capAdmin.display = "Admin";
|
|
48
|
-
this.capAdmin.icon = "security";
|
|
49
|
-
this.capAdmin.capSubItems = [this.capUsers, this.capRoles, this.capLogs, this.capSettings];
|
|
50
|
-
this.capUsers.name = "cap3";
|
|
51
|
-
this.capUsers.display = "Users";
|
|
52
|
-
this.capUsers.link = "home/admin/users";
|
|
53
|
-
this.capUsers.icon = "group";
|
|
54
|
-
this.capRoles.name = "cap4";
|
|
55
|
-
this.capRoles.display = "Roles";
|
|
56
|
-
this.capRoles.link = "home/admin/roles";
|
|
57
|
-
this.capRoles.icon = "work";
|
|
58
|
-
this.capLogs.name = "cap5";
|
|
59
|
-
this.capLogs.display = "Logs";
|
|
60
|
-
this.capLogs.link = "home/admin/logs";
|
|
61
|
-
this.capLogs.icon = "text_snippet";
|
|
62
|
-
this.capSettings.name = "cap6";
|
|
63
|
-
this.capSettings.display = "Settings";
|
|
64
|
-
this.capSettings.link = "home/admin/settings";
|
|
65
|
-
this.capSettings.icon = "settings";
|
|
66
|
-
this.capMultitenant.name = "cap7";
|
|
67
|
-
this.capMultitenant.display = "Multitenant";
|
|
68
|
-
this.capMultitenant.icon = "apartment";
|
|
69
|
-
this.capMultitenant.capSubItems = [this.capTenants, this.capMembership, this.capPlans];
|
|
70
|
-
this.capTenants.name = "cap8";
|
|
71
|
-
this.capTenants.display = "Tenants";
|
|
72
|
-
this.capTenants.link = "home/admin/tenants";
|
|
73
|
-
this.capMembership.name = "cap9";
|
|
74
|
-
this.capMembership.display = "Membership";
|
|
75
|
-
this.capMembership.link = "home/admin/membership";
|
|
76
|
-
this.capPlans.name = "cap10";
|
|
77
|
-
this.capPlans.display = "Plans";
|
|
78
|
-
this.capPlans.link = "home/admin/plans";
|
|
79
|
-
this.capGeneral.name = "cap11";
|
|
80
|
-
this.capGeneral.display = "General";
|
|
81
|
-
this.capGeneral.capSubItems = [this.capCustomers, this.capInventory, this.capAccounts, this.capSuppliers, this.capTasks];
|
|
82
|
-
this.capCustomers.name = "cap12";
|
|
83
|
-
this.capCustomers.display = "Customers";
|
|
84
|
-
this.capCustomers.link = "home/admin/customers";
|
|
85
|
-
this.capCustomers.icon = "group";
|
|
86
|
-
this.capInventory.name = "cap13";
|
|
87
|
-
this.capInventory.display = "Inventory";
|
|
88
|
-
this.capInventory.link = "home/admin/inventory";
|
|
89
|
-
this.capInventory.icon = "storefront";
|
|
90
|
-
this.capAccounts.name = "cap14";
|
|
91
|
-
this.capAccounts.display = "Accounts";
|
|
92
|
-
this.capAccounts.link = "home/admin/accounts";
|
|
93
|
-
this.capAccounts.icon = "account_balance_wallet";
|
|
94
|
-
this.capSuppliers.name = "cap15";
|
|
95
|
-
this.capSuppliers.display = "Suppliers";
|
|
96
|
-
this.capSuppliers.link = "home/admin/suppliers";
|
|
97
|
-
this.capSuppliers.icon = "groups";
|
|
98
|
-
this.capTasks.name = "cap16";
|
|
99
|
-
this.capTasks.display = "Tasks";
|
|
100
|
-
this.capTasks.link = "home/admin/tasks";
|
|
101
|
-
this.capTasks.icon = "task_alt";
|
|
102
|
-
this.capHR.name = "cap17";
|
|
103
|
-
this.capHR.display = "HR";
|
|
104
|
-
this.capHR.link = "home/admin/hr";
|
|
105
|
-
this.capHR.icon = "diversity_3";
|
|
106
|
-
this.capHR.capSubItems = [this.capEmployees, this.capDepartments, this.capPositions, this.capGrades];
|
|
107
|
-
this.capEmployees.name = "cap17";
|
|
108
|
-
this.capEmployees.display = "Employees";
|
|
109
|
-
this.capEmployees.link = "home/admin/employees";
|
|
110
|
-
this.capEmployees.icon = "group";
|
|
111
|
-
this.capDepartments.name = "cap17";
|
|
112
|
-
this.capDepartments.display = "Departments";
|
|
113
|
-
this.capDepartments.link = "home/admin/departments";
|
|
114
|
-
this.capDepartments.icon = "business_center";
|
|
115
|
-
this.capPositions.name = "cap17";
|
|
116
|
-
this.capPositions.display = "Positions";
|
|
117
|
-
this.capPositions.link = "home/admin/positions";
|
|
118
|
-
this.capPositions.icon = "picture_in_picture_medium";
|
|
119
|
-
this.capGrades.name = "cap17";
|
|
120
|
-
this.capGrades.display = "Grades";
|
|
121
|
-
this.capGrades.link = "home/admin/grades";
|
|
122
|
-
this.capGrades.icon = "grading";
|
|
123
|
-
}
|
|
124
|
-
UpdateAppConfig(config) {
|
|
125
|
-
this.appConfigSource.next(config);
|
|
126
|
-
this.appConfig = config;
|
|
127
|
-
}
|
|
128
|
-
CallApi(action, data = '') {
|
|
129
|
-
if (!action.method) {
|
|
130
|
-
return this.httpService.Get(action.url);
|
|
131
|
-
}
|
|
132
|
-
if (action.method == 'get') {
|
|
133
|
-
return this.httpService.Get(action.url);
|
|
134
|
-
}
|
|
135
|
-
else if (action.method == 'post') {
|
|
136
|
-
if (action.isFormData) {
|
|
137
|
-
return this.httpService.Post_FormData(action.url, data);
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
return this.httpService.Post(action.url, data);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
else {
|
|
144
|
-
return this.httpService.Post(action.url, data);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
CheckWelcomed(path = 'home/admin/welcome') {
|
|
148
|
-
this.CallApi({ url: 'tenant/welcome/x' }).subscribe((x) => {
|
|
149
|
-
if (!x.data) {
|
|
150
|
-
this.Navigate(path);
|
|
151
|
-
}
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
Navigate(path) {
|
|
155
|
-
this.router.navigate([path]);
|
|
156
|
-
}
|
|
157
|
-
NavigateWithValue(path, value) {
|
|
158
|
-
this.router.navigate([path], {
|
|
159
|
-
queryParams: { v: value },
|
|
160
|
-
queryParamsHandling: 'merge',
|
|
161
|
-
skipLocationChange: false
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
GetNavigationValue() {
|
|
165
|
-
if (this.route.snapshot.queryParams["v"] != undefined) {
|
|
166
|
-
return this.route.snapshot.queryParams["v"];
|
|
167
|
-
}
|
|
168
|
-
else {
|
|
169
|
-
return "";
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
//Users
|
|
173
|
-
GetUser() {
|
|
174
|
-
return this.httpService.Get("User/all/x");
|
|
175
|
-
}
|
|
176
|
-
RegisterAccount(u) {
|
|
177
|
-
return this.httpService.Post("User/register", u);
|
|
178
|
-
}
|
|
179
|
-
GetUserByID(val) {
|
|
180
|
-
return this.httpService.Get(`User/id/${val}`);
|
|
181
|
-
}
|
|
182
|
-
UpdateUser(profile) {
|
|
183
|
-
return this.httpService.Post("User/edit", profile);
|
|
184
|
-
}
|
|
185
|
-
UnlockUser(user) {
|
|
186
|
-
return this.httpService.Post("User/unlock", user);
|
|
187
|
-
}
|
|
188
|
-
LockUser(user) {
|
|
189
|
-
return this.httpService.Post("User/lock", user);
|
|
190
|
-
}
|
|
191
|
-
DeleteUser(user) {
|
|
192
|
-
return this.httpService.Post("User/delete", user);
|
|
193
|
-
}
|
|
194
|
-
Login(u) {
|
|
195
|
-
return this.httpService.Post("User/login", u);
|
|
196
|
-
}
|
|
197
|
-
ChangePassword(u) {
|
|
198
|
-
return this.httpService.Post("User/changepassword-self", u);
|
|
199
|
-
}
|
|
200
|
-
ChangePasswordAdmin(u) {
|
|
201
|
-
return this.httpService.Post("User/changepassword-admin", u);
|
|
202
|
-
}
|
|
203
|
-
SelfReset(u) {
|
|
204
|
-
return this.httpService.Post("Basic/SelfReset", u);
|
|
205
|
-
}
|
|
206
|
-
//Roles
|
|
207
|
-
PostRole(role, action) {
|
|
208
|
-
return this.httpService.Post(`Role?action=${action}`, role);
|
|
209
|
-
}
|
|
210
|
-
PutRole(role) {
|
|
211
|
-
return this.httpService.Put("Role", role);
|
|
212
|
-
}
|
|
213
|
-
GetRole(by, val) {
|
|
214
|
-
return this.httpService.Get("Role/all/x");
|
|
215
|
-
}
|
|
216
|
-
//Logs
|
|
217
|
-
GetLog(by, val) {
|
|
218
|
-
return this.httpService.Get("Log/all/x");
|
|
219
|
-
}
|
|
220
|
-
//Settings
|
|
221
|
-
GetSetting(by, val) {
|
|
222
|
-
return this.httpService.Get("Setting/all/x");
|
|
223
|
-
}
|
|
224
|
-
UpdateSetting(setting, action) {
|
|
225
|
-
return this.httpService.Post(`Setting?action=${action}`, setting);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
DataServiceLib.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DataServiceLib, deps: [{ token: i1.HttpService }, { token: i2.Router }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
229
|
-
DataServiceLib.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DataServiceLib, providedIn: 'root' });
|
|
230
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DataServiceLib, decorators: [{
|
|
231
|
-
type: Injectable,
|
|
232
|
-
args: [{
|
|
233
|
-
providedIn: 'root'
|
|
234
|
-
}]
|
|
235
|
-
}], ctorParameters: function () { return [{ type: i1.HttpService }, { type: i2.Router }, { type: i2.ActivatedRoute }]; } });
|
|
236
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL3NlcnZpY2VzL2RhdGEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBVSxTQUFTLEVBQUUsT0FBTyxFQUFRLE1BQU0sb0JBQW9CLENBQUM7QUFDdEUsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQzs7OztBQU9uRCxNQUFNLE9BQU8sY0FBYztJQUV6QixZQUFvQixXQUF3QixFQUFTLE1BQWMsRUFBVSxLQUFxQjtRQUE5RSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFTLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQXVIbEcsY0FBUyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7UUFDcEIsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkQsb0JBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBTTdELFlBQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUN0QixhQUFRLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDdkIsYUFBUSxHQUFHLElBQUksT0FBTyxDQUFDO1FBQ3ZCLGFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUN2QixZQUFPLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDdEIsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUUxQixtQkFBYyxHQUFHLElBQUksT0FBTyxDQUFDO1FBQzdCLGVBQVUsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUN6QixrQkFBYSxHQUFHLElBQUksT0FBTyxDQUFDO1FBQzVCLGFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUV2QixlQUFVLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDekIsaUJBQVksR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUMzQixpQkFBWSxHQUFHLElBQUksT0FBTyxDQUFDO1FBQzNCLGdCQUFXLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDMUIsaUJBQVksR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUMzQixhQUFRLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFFdkIsVUFBSyxHQUFHLElBQUksT0FBTyxDQUFDO1FBQ3BCLGlCQUFZLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDM0IsbUJBQWMsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUM3QixpQkFBWSxHQUFHLElBQUksT0FBTyxDQUFDO1FBQzNCLGNBQVMsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUVqQix1QkFBa0IsR0FBRyxFQUFFLENBQUM7UUFHL0IsaUJBQVksR0FBRyxLQUFLLENBQUM7UUF6Sm5CLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQztRQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxtQkFBbUIsQ0FBQTtRQUN6QyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRzdFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFFLE1BQU0sQ0FBQztRQUcxQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQTtRQUMvQixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUUzRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFDO1FBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztRQUU3QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUE7UUFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFDO1FBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztRQUU1QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUE7UUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO1FBQ3RDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQztRQUVuQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUE7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDO1FBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFFLFVBQVUsQ0FBQztRQUdsQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUE7UUFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDO1FBQzVDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQTtRQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFFLENBQUM7UUFFeEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFBO1FBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUNwQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQztRQUU1QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUE7UUFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDO1FBQzFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLHVCQUF1QixDQUFDO1FBRWxELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQTtRQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUM7UUFHeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFBO1FBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUNwQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXpILElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQTtRQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUM7UUFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsc0JBQXNCLENBQUM7UUFDaEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFBO1FBRWhDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQTtRQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUM7UUFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsc0JBQXNCLENBQUM7UUFDaEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFBO1FBRXJDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQTtRQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUM7UUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUM7UUFDOUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsd0JBQXdCLENBQUE7UUFFaEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFBO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQztRQUN4QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxzQkFBc0IsQ0FBQztRQUNoRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUE7UUFFakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFBO1FBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQztRQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUE7UUFHL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFBO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7UUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFBO1FBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBQyxJQUFJLENBQUMsY0FBYyxFQUFDLElBQUksQ0FBQyxZQUFZLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBRWpHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQTtRQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUM7UUFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsc0JBQXNCLENBQUM7UUFDaEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFBO1FBRWhDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQTtRQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUM7UUFDNUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsd0JBQXdCLENBQUM7UUFDcEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUE7UUFFNUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFBO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQztRQUN4QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxzQkFBc0IsQ0FBQztRQUNoRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRywyQkFBMkIsQ0FBQTtRQUVwRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUE7UUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLG1CQUFtQixDQUFDO1FBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQTtJQUlqQyxDQUFDO0lBTUQsZUFBZSxDQUFDLE1BQWlCO1FBQy9CLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0lBQzFCLENBQUM7SUFnQ00sT0FBTyxDQUFDLE1BQWMsRUFBRSxPQUFZLEVBQUU7UUFFM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUM7WUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDekM7UUFFRCxJQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUcsS0FBSyxFQUFDO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pDO2FBQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sRUFBQztZQUVqQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUM7Z0JBQ3BCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUN6RDtpQkFBSTtnQkFDSCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDaEQ7U0FFRjthQUNHO1lBQ0YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ2hEO0lBRUgsQ0FBQztJQUVNLGFBQWEsQ0FBQyxPQUFlLG9CQUFvQjtRQUN0RCxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN4RCxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTtnQkFDWCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO2FBQ3BCO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBSU0sUUFBUSxDQUFDLElBQVk7UUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsS0FBYztRQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzNCLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7WUFDekIsbUJBQW1CLEVBQUUsT0FBTztZQUM1QixrQkFBa0IsRUFBRSxLQUFLO1NBQzFCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksU0FBUyxFQUFFO1lBQ3JELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1NBQzVDO2FBQUk7WUFDSCxPQUFPLEVBQUUsQ0FBQztTQUNYO0lBQ0gsQ0FBQztJQU1ELE9BQU87SUFDQSxPQUFPO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU0sZUFBZSxDQUFDLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVNLFdBQVcsQ0FBQyxHQUFXO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFTSxVQUFVLENBQUMsT0FBTztRQUN2QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU0sVUFBVSxDQUFDLElBQUk7UUFDcEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVNLFFBQVEsQ0FBQyxJQUFJO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTSxVQUFVLENBQUMsSUFBSTtRQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU0sS0FBSyxDQUFDLENBQU87UUFDbEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVNLGNBQWMsQ0FBQyxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVNLG1CQUFtQixDQUFDLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRU0sU0FBUyxDQUFDLENBQU87UUFDdEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBR0QsT0FBTztJQUVBLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBYztRQUNsQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVNLE9BQU8sQ0FBQyxJQUFJO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFTSxPQUFPLENBQUMsRUFBVSxFQUFFLEdBQVc7UUFDcEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBSUQsTUFBTTtJQUNDLE1BQU0sQ0FBQyxFQUFVLEVBQUUsR0FBVztRQUNuQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFHRCxVQUFVO0lBQ0gsVUFBVSxDQUFDLEVBQVUsRUFBRSxHQUFXO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVNLGFBQWEsQ0FBQyxPQUFPLEVBQUUsTUFBYztRQUMxQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixNQUFNLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNwRSxDQUFDOzsyR0FuU1UsY0FBYzsrR0FBZCxjQUFjLGNBRmIsTUFBTTsyRkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGlvbiwgQXBwQ29uZmlnLCBDYXBJdGVtLCBVc2VyIH0gZnJvbSAnLi4vY2xhc3Nlcy9DbGFzc2VzJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi9odHRwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGFTZXJ2aWNlTGliIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwU2VydmljZTogSHR0cFNlcnZpY2UsIHB1YmxpYyByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcclxuXHJcbiAgICB0aGlzLmFwcENvbmZpZy5hcHBOYW1lID0gXCJBcHAtTmFtZVwiO1xyXG4gICAgdGhpcy5hcHBDb25maWcubG9nbyA9IFwiLi9hc3NldHMvbG9nby5wbmdcIlxyXG4gICAgdGhpcy5hcHBDb25maWcuQURBdXRoID0gdHJ1ZTtcclxuICAgIHRoaXMuYXBwQ29uZmlnLmNhcEl0ZW1zID0gW3RoaXMuY2FwTXVsdGl0ZW5hbnQsIHRoaXMuY2FwQWRtaW4sIHRoaXMuY2FwSG9tZV07XHJcblxyXG5cclxuICAgIHRoaXMuY2FwSG9tZS5uYW1lID0gXCJjYXAxXCI7XHJcbiAgICB0aGlzLmNhcEhvbWUuZGlzcGxheSA9IFwiSG9tZVwiO1xyXG4gICAgdGhpcy5jYXBIb21lLmxpbmsgPSBcImhvbWVcIjtcclxuICAgIHRoaXMuY2FwSG9tZS5pY29uID1cImhvbWVcIjtcclxuXHJcblxyXG4gICAgdGhpcy5jYXBBZG1pbi5uYW1lID0gXCJjYXAyXCI7XHJcbiAgICB0aGlzLmNhcEFkbWluLmRpc3BsYXkgPSBcIkFkbWluXCI7XHJcbiAgICB0aGlzLmNhcEFkbWluLmljb24gPSBcInNlY3VyaXR5XCJcclxuICAgIHRoaXMuY2FwQWRtaW4uY2FwU3ViSXRlbXMgPSBbdGhpcy5jYXBVc2VycywgdGhpcy5jYXBSb2xlcywgdGhpcy5jYXBMb2dzLCB0aGlzLmNhcFNldHRpbmdzXTtcclxuXHJcbiAgICB0aGlzLmNhcFVzZXJzLm5hbWUgPSBcImNhcDNcIjtcclxuICAgIHRoaXMuY2FwVXNlcnMuZGlzcGxheSA9IFwiVXNlcnNcIjtcclxuICAgIHRoaXMuY2FwVXNlcnMubGluayA9IFwiaG9tZS9hZG1pbi91c2Vyc1wiO1xyXG4gICAgdGhpcy5jYXBVc2Vycy5pY29uID0gXCJncm91cFwiO1xyXG5cclxuICAgIHRoaXMuY2FwUm9sZXMubmFtZSA9IFwiY2FwNFwiXHJcbiAgICB0aGlzLmNhcFJvbGVzLmRpc3BsYXkgPSBcIlJvbGVzXCI7XHJcbiAgICB0aGlzLmNhcFJvbGVzLmxpbmsgPSBcImhvbWUvYWRtaW4vcm9sZXNcIjtcclxuICAgIHRoaXMuY2FwUm9sZXMuaWNvbiA9IFwid29ya1wiO1xyXG5cclxuICAgIHRoaXMuY2FwTG9ncy5uYW1lID0gXCJjYXA1XCJcclxuICAgIHRoaXMuY2FwTG9ncy5kaXNwbGF5ID0gXCJMb2dzXCI7XHJcbiAgICB0aGlzLmNhcExvZ3MubGluayA9IFwiaG9tZS9hZG1pbi9sb2dzXCI7XHJcbiAgICB0aGlzLmNhcExvZ3MuaWNvbiA9IFwidGV4dF9zbmlwcGV0XCI7XHJcblxyXG4gICAgdGhpcy5jYXBTZXR0aW5ncy5uYW1lID0gXCJjYXA2XCJcclxuICAgIHRoaXMuY2FwU2V0dGluZ3MuZGlzcGxheSA9IFwiU2V0dGluZ3NcIjtcclxuICAgIHRoaXMuY2FwU2V0dGluZ3MubGluayA9IFwiaG9tZS9hZG1pbi9zZXR0aW5nc1wiO1xyXG4gICAgdGhpcy5jYXBTZXR0aW5ncy5pY29uID1cInNldHRpbmdzXCI7XHJcblxyXG5cclxuICAgIHRoaXMuY2FwTXVsdGl0ZW5hbnQubmFtZSA9IFwiY2FwN1wiXHJcbiAgICB0aGlzLmNhcE11bHRpdGVuYW50LmRpc3BsYXkgPSBcIk11bHRpdGVuYW50XCI7XHJcbiAgICB0aGlzLmNhcE11bHRpdGVuYW50Lmljb24gPSBcImFwYXJ0bWVudFwiXHJcbiAgICB0aGlzLmNhcE11bHRpdGVuYW50LmNhcFN1Ykl0ZW1zID0gW3RoaXMuY2FwVGVuYW50cywgdGhpcy5jYXBNZW1iZXJzaGlwLCB0aGlzLmNhcFBsYW5zIF07XHJcblxyXG4gICAgdGhpcy5jYXBUZW5hbnRzLm5hbWUgPSBcImNhcDhcIlxyXG4gICAgdGhpcy5jYXBUZW5hbnRzLmRpc3BsYXkgPSBcIlRlbmFudHNcIjtcclxuICAgIHRoaXMuY2FwVGVuYW50cy5saW5rID0gXCJob21lL2FkbWluL3RlbmFudHNcIjtcclxuXHJcbiAgICB0aGlzLmNhcE1lbWJlcnNoaXAubmFtZSA9IFwiY2FwOVwiXHJcbiAgICB0aGlzLmNhcE1lbWJlcnNoaXAuZGlzcGxheSA9IFwiTWVtYmVyc2hpcFwiO1xyXG4gICAgdGhpcy5jYXBNZW1iZXJzaGlwLmxpbmsgPSBcImhvbWUvYWRtaW4vbWVtYmVyc2hpcFwiO1xyXG5cclxuICAgIHRoaXMuY2FwUGxhbnMubmFtZSA9IFwiY2FwMTBcIlxyXG4gICAgdGhpcy5jYXBQbGFucy5kaXNwbGF5ID0gXCJQbGFuc1wiO1xyXG4gICAgdGhpcy5jYXBQbGFucy5saW5rID0gXCJob21lL2FkbWluL3BsYW5zXCI7XHJcblxyXG5cclxuICAgIHRoaXMuY2FwR2VuZXJhbC5uYW1lID0gXCJjYXAxMVwiXHJcbiAgICB0aGlzLmNhcEdlbmVyYWwuZGlzcGxheSA9IFwiR2VuZXJhbFwiO1xyXG4gICAgdGhpcy5jYXBHZW5lcmFsLmNhcFN1Ykl0ZW1zID0gW3RoaXMuY2FwQ3VzdG9tZXJzLCB0aGlzLmNhcEludmVudG9yeSwgdGhpcy5jYXBBY2NvdW50cywgdGhpcy5jYXBTdXBwbGllcnMsIHRoaXMuY2FwVGFza3NdO1xyXG5cclxuICAgIHRoaXMuY2FwQ3VzdG9tZXJzLm5hbWUgPSBcImNhcDEyXCJcclxuICAgIHRoaXMuY2FwQ3VzdG9tZXJzLmRpc3BsYXkgPSBcIkN1c3RvbWVyc1wiO1xyXG4gICAgdGhpcy5jYXBDdXN0b21lcnMubGluayA9IFwiaG9tZS9hZG1pbi9jdXN0b21lcnNcIjtcclxuICAgIHRoaXMuY2FwQ3VzdG9tZXJzLmljb24gPSBcImdyb3VwXCJcclxuXHJcbiAgICB0aGlzLmNhcEludmVudG9yeS5uYW1lID0gXCJjYXAxM1wiXHJcbiAgICB0aGlzLmNhcEludmVudG9yeS5kaXNwbGF5ID0gXCJJbnZlbnRvcnlcIjtcclxuICAgIHRoaXMuY2FwSW52ZW50b3J5LmxpbmsgPSBcImhvbWUvYWRtaW4vaW52ZW50b3J5XCI7XHJcbiAgICB0aGlzLmNhcEludmVudG9yeS5pY29uID0gXCJzdG9yZWZyb250XCJcclxuXHJcbiAgICB0aGlzLmNhcEFjY291bnRzLm5hbWUgPSBcImNhcDE0XCJcclxuICAgIHRoaXMuY2FwQWNjb3VudHMuZGlzcGxheSA9IFwiQWNjb3VudHNcIjtcclxuICAgIHRoaXMuY2FwQWNjb3VudHMubGluayA9IFwiaG9tZS9hZG1pbi9hY2NvdW50c1wiO1xyXG4gICAgdGhpcy5jYXBBY2NvdW50cy5pY29uID0gXCJhY2NvdW50X2JhbGFuY2Vfd2FsbGV0XCJcclxuXHJcbiAgICB0aGlzLmNhcFN1cHBsaWVycy5uYW1lID0gXCJjYXAxNVwiXHJcbiAgICB0aGlzLmNhcFN1cHBsaWVycy5kaXNwbGF5ID0gXCJTdXBwbGllcnNcIjtcclxuICAgIHRoaXMuY2FwU3VwcGxpZXJzLmxpbmsgPSBcImhvbWUvYWRtaW4vc3VwcGxpZXJzXCI7XHJcbiAgICB0aGlzLmNhcFN1cHBsaWVycy5pY29uID0gXCJncm91cHNcIlxyXG5cclxuICAgIHRoaXMuY2FwVGFza3MubmFtZSA9IFwiY2FwMTZcIlxyXG4gICAgdGhpcy5jYXBUYXNrcy5kaXNwbGF5ID0gXCJUYXNrc1wiO1xyXG4gICAgdGhpcy5jYXBUYXNrcy5saW5rID0gXCJob21lL2FkbWluL3Rhc2tzXCI7XHJcbiAgICB0aGlzLmNhcFRhc2tzLmljb24gPSBcInRhc2tfYWx0XCJcclxuXHJcblxyXG4gICAgdGhpcy5jYXBIUi5uYW1lID0gXCJjYXAxN1wiXHJcbiAgICB0aGlzLmNhcEhSLmRpc3BsYXkgPSBcIkhSXCI7XHJcbiAgICB0aGlzLmNhcEhSLmxpbmsgPSBcImhvbWUvYWRtaW4vaHJcIjtcclxuICAgIHRoaXMuY2FwSFIuaWNvbiA9IFwiZGl2ZXJzaXR5XzNcIlxyXG4gICAgdGhpcy5jYXBIUi5jYXBTdWJJdGVtcyA9IFt0aGlzLmNhcEVtcGxveWVlcyx0aGlzLmNhcERlcGFydG1lbnRzLHRoaXMuY2FwUG9zaXRpb25zLHRoaXMuY2FwR3JhZGVzXVxyXG5cclxuICAgIHRoaXMuY2FwRW1wbG95ZWVzLm5hbWUgPSBcImNhcDE3XCJcclxuICAgIHRoaXMuY2FwRW1wbG95ZWVzLmRpc3BsYXkgPSBcIkVtcGxveWVlc1wiO1xyXG4gICAgdGhpcy5jYXBFbXBsb3llZXMubGluayA9IFwiaG9tZS9hZG1pbi9lbXBsb3llZXNcIjtcclxuICAgIHRoaXMuY2FwRW1wbG95ZWVzLmljb24gPSBcImdyb3VwXCJcclxuXHJcbiAgICB0aGlzLmNhcERlcGFydG1lbnRzLm5hbWUgPSBcImNhcDE3XCJcclxuICAgIHRoaXMuY2FwRGVwYXJ0bWVudHMuZGlzcGxheSA9IFwiRGVwYXJ0bWVudHNcIjtcclxuICAgIHRoaXMuY2FwRGVwYXJ0bWVudHMubGluayA9IFwiaG9tZS9hZG1pbi9kZXBhcnRtZW50c1wiO1xyXG4gICAgdGhpcy5jYXBEZXBhcnRtZW50cy5pY29uID0gXCJidXNpbmVzc19jZW50ZXJcIlxyXG5cclxuICAgIHRoaXMuY2FwUG9zaXRpb25zLm5hbWUgPSBcImNhcDE3XCJcclxuICAgIHRoaXMuY2FwUG9zaXRpb25zLmRpc3BsYXkgPSBcIlBvc2l0aW9uc1wiO1xyXG4gICAgdGhpcy5jYXBQb3NpdGlvbnMubGluayA9IFwiaG9tZS9hZG1pbi9wb3NpdGlvbnNcIjtcclxuICAgIHRoaXMuY2FwUG9zaXRpb25zLmljb24gPSBcInBpY3R1cmVfaW5fcGljdHVyZV9tZWRpdW1cIlxyXG5cclxuICAgIHRoaXMuY2FwR3JhZGVzLm5hbWUgPSBcImNhcDE3XCJcclxuICAgIHRoaXMuY2FwR3JhZGVzLmRpc3BsYXkgPSBcIkdyYWRlc1wiO1xyXG4gICAgdGhpcy5jYXBHcmFkZXMubGluayA9IFwiaG9tZS9hZG1pbi9ncmFkZXNcIjtcclxuICAgIHRoaXMuY2FwR3JhZGVzLmljb24gPSBcImdyYWRpbmdcIlxyXG5cclxuXHJcblxyXG4gIH1cclxuXHJcblxyXG4gIGFwcENvbmZpZyA9IG5ldyBBcHBDb25maWcoKTtcclxuICBwcml2YXRlIGFwcENvbmZpZ1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5hcHBDb25maWcpO1xyXG4gIHB1YmxpYyBhcHBDb25maWdPYnNlcnYgPSB0aGlzLmFwcENvbmZpZ1NvdXJjZS5hc09ic2VydmFibGUoKTtcclxuICBVcGRhdGVBcHBDb25maWcoY29uZmlnOiBBcHBDb25maWcpIHtcclxuICAgIHRoaXMuYXBwQ29uZmlnU291cmNlLm5leHQoY29uZmlnKTtcclxuICAgIHRoaXMuYXBwQ29uZmlnID0gY29uZmlnO1xyXG4gIH1cclxuXHJcbiAgY2FwSG9tZSA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEFkbWluID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwVXNlcnMgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBSb2xlcyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcExvZ3MgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBTZXR0aW5ncyA9IG5ldyBDYXBJdGVtO1xyXG5cclxuICBjYXBNdWx0aXRlbmFudCA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcFRlbmFudHMgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBNZW1iZXJzaGlwID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwUGxhbnMgPSBuZXcgQ2FwSXRlbTtcclxuXHJcbiAgY2FwR2VuZXJhbCA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEN1c3RvbWVycyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEludmVudG9yeSA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEFjY291bnRzID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwU3VwcGxpZXJzID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwVGFza3MgPSBuZXcgQ2FwSXRlbTtcclxuXHJcbiAgY2FwSFIgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBFbXBsb3llZXMgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBEZXBhcnRtZW50cyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcFBvc2l0aW9ucyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEdyYWRlcyA9IG5ldyBDYXBJdGVtO1xyXG5cclxuICBwdWJsaWMgdG1wUHJvZmlsZXVzZXJOYW1lID0gXCJcIjtcclxuXHJcblxyXG4gIGlzUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgQ2FsbEFwaShhY3Rpb246IEFjdGlvbiwgZGF0YTogYW55ID0gJycgKSB7XHJcblxyXG4gICAgaWYgKCFhY3Rpb24ubWV0aG9kKXtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuR2V0KGFjdGlvbi51cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKGFjdGlvbi5tZXRob2QgPT0nZ2V0Jyl7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLkdldChhY3Rpb24udXJsKTtcclxuICAgIH0gZWxzZSBpZiAoYWN0aW9uLm1ldGhvZCA9PSAncG9zdCcpe1xyXG5cclxuICAgICAgaWYgKGFjdGlvbi5pc0Zvcm1EYXRhKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5Qb3N0X0Zvcm1EYXRhKGFjdGlvbi51cmwsIGRhdGEpO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5Qb3N0KGFjdGlvbi51cmwsIGRhdGEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChhY3Rpb24udXJsLCBkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgQ2hlY2tXZWxjb21lZChwYXRoOiBzdHJpbmcgPSAnaG9tZS9hZG1pbi93ZWxjb21lJykge1xyXG4gICAgdGhpcy5DYWxsQXBpKHsgdXJsOiAndGVuYW50L3dlbGNvbWUveCcgfSkuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgIGlmICgheC5kYXRhKSB7XHJcbiAgICAgICAgdGhpcy5OYXZpZ2F0ZShwYXRoKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBwdWJsaWMgTmF2aWdhdGUocGF0aDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcGF0aF0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIE5hdmlnYXRlV2l0aFZhbHVlKHBhdGg6IHN0cmluZywgdmFsdWUgOiBzdHJpbmcpe1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3BhdGhdLCB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7IHY6IHZhbHVlIH0sXHJcbiAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXHJcbiAgICAgIHNraXBMb2NhdGlvbkNoYW5nZTogZmFsc2VcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEdldE5hdmlnYXRpb25WYWx1ZSgpe1xyXG4gICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbXCJ2XCJdICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1tcInZcIl1cclxuICAgIH1lbHNle1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB0bXBBY2NvdW50SUQ7XHJcblxyXG5cclxuXHJcbiAgLy9Vc2Vyc1xyXG4gIHB1YmxpYyBHZXRVc2VyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuR2V0KFwiVXNlci9hbGwveFwiKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBSZWdpc3RlckFjY291bnQodSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChcIlVzZXIvcmVnaXN0ZXJcIiwgdSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgR2V0VXNlckJ5SUQodmFsOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLkdldChgVXNlci9pZC8ke3ZhbH1gKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBVcGRhdGVVc2VyKHByb2ZpbGUpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoXCJVc2VyL2VkaXRcIiwgcHJvZmlsZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgVW5sb2NrVXNlcih1c2VyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5Qb3N0KFwiVXNlci91bmxvY2tcIiwgdXNlcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgTG9ja1VzZXIodXNlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChcIlVzZXIvbG9ja1wiLCB1c2VyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBEZWxldGVVc2VyKHVzZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoXCJVc2VyL2RlbGV0ZVwiLCB1c2VyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBMb2dpbih1OiBVc2VyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5Qb3N0KFwiVXNlci9sb2dpblwiLCB1KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBDaGFuZ2VQYXNzd29yZCh1KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5Qb3N0KFwiVXNlci9jaGFuZ2VwYXNzd29yZC1zZWxmXCIsIHUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIENoYW5nZVBhc3N3b3JkQWRtaW4odSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChcIlVzZXIvY2hhbmdlcGFzc3dvcmQtYWRtaW5cIiwgdSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2VsZlJlc2V0KHU6IFVzZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChcIkJhc2ljL1NlbGZSZXNldFwiLCB1KTtcclxuICB9XHJcblxyXG5cclxuICAvL1JvbGVzXHJcblxyXG4gIHB1YmxpYyBQb3N0Um9sZShyb2xlLCBhY3Rpb246IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChgUm9sZT9hY3Rpb249JHthY3Rpb259YCwgcm9sZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgUHV0Um9sZShyb2xlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5QdXQoXCJSb2xlXCIsIHJvbGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEdldFJvbGUoYnk6IHN0cmluZywgdmFsOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLkdldChcIlJvbGUvYWxsL3hcIik7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vTG9nc1xyXG4gIHB1YmxpYyBHZXRMb2coYnk6IHN0cmluZywgdmFsOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLkdldChcIkxvZy9hbGwveFwiKTtcclxuICB9XHJcblxyXG5cclxuICAvL1NldHRpbmdzXHJcbiAgcHVibGljIEdldFNldHRpbmcoYnk6IHN0cmluZywgdmFsOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLkdldChcIlNldHRpbmcvYWxsL3hcIik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgVXBkYXRlU2V0dGluZyhzZXR0aW5nLCBhY3Rpb246IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChgU2V0dGluZz9hY3Rpb249JHthY3Rpb259YCwgc2V0dGluZyk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|