@vendasta/developer-training 0.17.0 → 0.21.0
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/_internal/a-olabenjo-todo-list.api.service.mjs +54 -0
- package/esm2020/lib/_internal/admin-library-user.api.service.mjs +65 -0
- package/esm2020/lib/_internal/book-master-data.api.service.mjs +70 -0
- package/esm2020/lib/_internal/book-transaction.api.service.mjs +75 -0
- package/esm2020/lib/_internal/business-qa.api.service.mjs +7 -8
- package/esm2020/lib/_internal/cceleokafor-to-do.api.service.mjs +55 -0
- package/esm2020/lib/_internal/enums/api.enum.mjs +22 -7
- package/esm2020/lib/_internal/enums/index.mjs +2 -2
- package/esm2020/lib/_internal/h-goyal-task.api.service.mjs +52 -0
- package/esm2020/lib/_internal/i-antosh-to-do-list.api.service.mjs +59 -0
- package/esm2020/lib/_internal/index.mjs +13 -13
- package/esm2020/lib/_internal/interfaces/aolabenjo.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/api.interface.mjs +1 -1
- package/esm2020/lib/_internal/interfaces/cceleokafor.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/hgoyal.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/iantosh.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/index.mjs +1 -1
- package/esm2020/lib/_internal/interfaces/kodland.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/ksinghsandhu.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/ntamrazyan.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/sprajapati.interface.mjs +8 -0
- package/esm2020/lib/_internal/k-odland-task.api.service.mjs +50 -0
- package/esm2020/lib/_internal/k-singh-sandhu-todo.api.service.mjs +55 -0
- package/esm2020/lib/_internal/n-tamrazyan-to-do.api.service.mjs +59 -0
- package/esm2020/lib/_internal/objects/aolabenjo.mjs +200 -0
- package/esm2020/lib/_internal/objects/api.mjs +976 -510
- package/esm2020/lib/_internal/objects/cceleokafor.mjs +229 -0
- package/esm2020/lib/_internal/objects/hgoyal.mjs +160 -0
- package/esm2020/lib/_internal/objects/iantosh.mjs +243 -0
- package/esm2020/lib/_internal/objects/index.mjs +10 -5
- package/esm2020/lib/_internal/objects/kodland.mjs +174 -0
- package/esm2020/lib/_internal/objects/ksinghsandhu.mjs +229 -0
- package/esm2020/lib/_internal/objects/ntamrazyan.mjs +243 -0
- package/esm2020/lib/_internal/objects/sprajapati.mjs +238 -0
- package/esm2020/lib/_internal/s-prajapati-to-do.api.service.mjs +55 -0
- package/esm2020/lib/_internal/taxi-user-data.api.service.mjs +60 -0
- package/fesm2015/vendasta-developer-training.mjs +2584 -1046
- package/fesm2015/vendasta-developer-training.mjs.map +1 -1
- package/fesm2020/vendasta-developer-training.mjs +2584 -1046
- package/fesm2020/vendasta-developer-training.mjs.map +1 -1
- package/lib/_internal/a-olabenjo-todo-list.api.service.d.ts +17 -0
- package/lib/_internal/admin-library-user.api.service.d.ts +18 -0
- package/lib/_internal/book-master-data.api.service.d.ts +19 -0
- package/lib/_internal/book-transaction.api.service.d.ts +20 -0
- package/lib/_internal/business-qa.api.service.d.ts +3 -5
- package/lib/_internal/cceleokafor-to-do.api.service.d.ts +16 -0
- package/lib/_internal/enums/api.enum.d.ts +17 -4
- package/lib/_internal/enums/index.d.ts +1 -1
- package/lib/_internal/h-goyal-task.api.service.d.ts +17 -0
- package/lib/_internal/i-antosh-to-do-list.api.service.d.ts +17 -0
- package/lib/_internal/index.d.ts +12 -12
- package/lib/_internal/interfaces/aolabenjo.interface.d.ts +33 -0
- package/lib/_internal/interfaces/api.interface.d.ts +342 -224
- package/lib/_internal/interfaces/cceleokafor.interface.d.ts +33 -0
- package/lib/_internal/interfaces/hgoyal.interface.d.ts +24 -0
- package/lib/_internal/interfaces/iantosh.interface.d.ts +37 -0
- package/lib/_internal/interfaces/index.d.ts +9 -4
- package/lib/_internal/interfaces/kodland.interface.d.ts +27 -0
- package/lib/_internal/interfaces/ksinghsandhu.interface.d.ts +37 -0
- package/lib/_internal/interfaces/ntamrazyan.interface.d.ts +37 -0
- package/lib/_internal/interfaces/sprajapati.interface.d.ts +41 -0
- package/lib/_internal/k-odland-task.api.service.d.ts +15 -0
- package/lib/_internal/k-singh-sandhu-todo.api.service.d.ts +16 -0
- package/lib/_internal/n-tamrazyan-to-do.api.service.d.ts +17 -0
- package/lib/_internal/objects/aolabenjo.d.ts +59 -0
- package/lib/_internal/objects/api.d.ts +491 -373
- package/lib/_internal/objects/cceleokafor.d.ts +62 -0
- package/lib/_internal/objects/hgoyal.d.ts +44 -0
- package/lib/_internal/objects/iantosh.d.ts +69 -0
- package/lib/_internal/objects/index.d.ts +9 -4
- package/lib/_internal/objects/kodland.d.ts +50 -0
- package/lib/_internal/objects/ksinghsandhu.d.ts +66 -0
- package/lib/_internal/objects/ntamrazyan.d.ts +69 -0
- package/lib/_internal/objects/sprajapati.d.ts +70 -0
- package/lib/_internal/s-prajapati-to-do.api.service.d.ts +16 -0
- package/lib/_internal/taxi-user-data.api.service.d.ts +17 -0
- package/package.json +1 -1
- package/esm2020/lib/_internal/a-hundal-to-do-project.api.service.mjs +0 -61
- package/esm2020/lib/_internal/e-currie-list.api.service.mjs +0 -50
- package/esm2020/lib/_internal/hdo-todo.api.service.mjs +0 -60
- package/esm2020/lib/_internal/i-olaleye-to-do-qa.api.service.mjs +0 -61
- package/esm2020/lib/_internal/interfaces/klutodo.interface.mjs +0 -8
- package/esm2020/lib/_internal/interfaces/lfossenier-todo.interface.mjs +0 -8
- package/esm2020/lib/_internal/interfaces/tkabakovtodo.interface.mjs +0 -8
- package/esm2020/lib/_internal/k-lu-todo.api.service.mjs +0 -60
- package/esm2020/lib/_internal/karishma-list.api.service.mjs +0 -50
- package/esm2020/lib/_internal/l-fossenier-todo.api.service.mjs +0 -53
- package/esm2020/lib/_internal/m-mugot-list-qa.api.service.mjs +0 -60
- package/esm2020/lib/_internal/n-valle-todo.api.service.mjs +0 -41
- package/esm2020/lib/_internal/objects/klutodo.mjs +0 -269
- package/esm2020/lib/_internal/objects/lfossenier-todo.mjs +0 -145
- package/esm2020/lib/_internal/objects/tkabakovtodo.mjs +0 -286
- package/esm2020/lib/_internal/s-bueckert-to-do-list.api.service.mjs +0 -63
- package/esm2020/lib/_internal/t-kabakov-to-do.api.service.mjs +0 -61
- package/esm2020/lib/_internal/w-horrell-to-do.api.service.mjs +0 -58
- package/lib/_internal/a-hundal-to-do-project.api.service.d.ts +0 -20
- package/lib/_internal/e-currie-list.api.service.d.ts +0 -18
- package/lib/_internal/hdo-todo.api.service.d.ts +0 -20
- package/lib/_internal/i-olaleye-to-do-qa.api.service.d.ts +0 -20
- package/lib/_internal/interfaces/klutodo.interface.d.ts +0 -39
- package/lib/_internal/interfaces/lfossenier-todo.interface.d.ts +0 -23
- package/lib/_internal/interfaces/tkabakovtodo.interface.d.ts +0 -42
- package/lib/_internal/k-lu-todo.api.service.d.ts +0 -20
- package/lib/_internal/karishma-list.api.service.d.ts +0 -18
- package/lib/_internal/l-fossenier-todo.api.service.d.ts +0 -19
- package/lib/_internal/m-mugot-list-qa.api.service.d.ts +0 -20
- package/lib/_internal/n-valle-todo.api.service.d.ts +0 -16
- package/lib/_internal/objects/klutodo.d.ts +0 -74
- package/lib/_internal/objects/lfossenier-todo.d.ts +0 -43
- package/lib/_internal/objects/tkabakovtodo.d.ts +0 -80
- package/lib/_internal/s-bueckert-to-do-list.api.service.d.ts +0 -21
- package/lib/_internal/t-kabakov-to-do.api.service.d.ts +0 -20
- package/lib/_internal/w-horrell-to-do.api.service.d.ts +0 -20
@@ -1,15 +1,16 @@
|
|
1
|
+
import * as e from '../enums';
|
1
2
|
export function enumStringToValue(enumRef, value) {
|
2
3
|
if (typeof value === 'number') {
|
3
4
|
return value;
|
4
5
|
}
|
5
6
|
return enumRef[value];
|
6
7
|
}
|
7
|
-
export class
|
8
|
+
export class AddAdminLibraryUserRequest {
|
8
9
|
static fromProto(proto) {
|
9
|
-
let m = new
|
10
|
+
let m = new AddAdminLibraryUserRequest();
|
10
11
|
m = Object.assign(m, proto);
|
11
|
-
if (proto.
|
12
|
-
m.
|
12
|
+
if (proto.libraryadd) {
|
13
|
+
m.libraryadd = LibraryAdminUserManangementRequest.fromProto(proto.libraryadd);
|
13
14
|
}
|
14
15
|
return m;
|
15
16
|
}
|
@@ -21,16 +22,19 @@ export class AHundalAddTaskRequest {
|
|
21
22
|
}
|
22
23
|
toApiJson() {
|
23
24
|
const toReturn = {};
|
24
|
-
if (typeof this.
|
25
|
-
toReturn['
|
25
|
+
if (typeof this.libraryadd !== 'undefined' && this.libraryadd !== null) {
|
26
|
+
toReturn['libraryadd'] = 'toApiJson' in this.libraryadd ? this.libraryadd.toApiJson() : this.libraryadd;
|
26
27
|
}
|
27
28
|
return toReturn;
|
28
29
|
}
|
29
30
|
}
|
30
|
-
export class
|
31
|
+
export class AddAdminLibraryUserResponse {
|
31
32
|
static fromProto(proto) {
|
32
|
-
let m = new
|
33
|
+
let m = new AddAdminLibraryUserResponse();
|
33
34
|
m = Object.assign(m, proto);
|
35
|
+
if (proto.addresponse) {
|
36
|
+
m.addresponse = LibraryAdminUserManangementResponse.fromProto(proto.addresponse);
|
37
|
+
}
|
34
38
|
return m;
|
35
39
|
}
|
36
40
|
constructor(kwargs) {
|
@@ -41,16 +45,25 @@ export class AHundalAddTaskResponse {
|
|
41
45
|
}
|
42
46
|
toApiJson() {
|
43
47
|
const toReturn = {};
|
44
|
-
if (typeof this.
|
45
|
-
toReturn['
|
48
|
+
if (typeof this.success !== 'undefined') {
|
49
|
+
toReturn['success'] = this.success;
|
50
|
+
}
|
51
|
+
if (typeof this.message !== 'undefined') {
|
52
|
+
toReturn['message'] = this.message;
|
53
|
+
}
|
54
|
+
if (typeof this.addresponse !== 'undefined' && this.addresponse !== null) {
|
55
|
+
toReturn['addresponse'] = 'toApiJson' in this.addresponse ? this.addresponse.toApiJson() : this.addresponse;
|
46
56
|
}
|
47
57
|
return toReturn;
|
48
58
|
}
|
49
59
|
}
|
50
|
-
export class
|
60
|
+
export class AddTaxiUserDataRequest {
|
51
61
|
static fromProto(proto) {
|
52
|
-
let m = new
|
62
|
+
let m = new AddTaxiUserDataRequest();
|
53
63
|
m = Object.assign(m, proto);
|
64
|
+
if (proto.addtaxiUserdata) {
|
65
|
+
m.addtaxiUserdata = TaxiUserData.fromProto(proto.addtaxiUserdata);
|
66
|
+
}
|
54
67
|
return m;
|
55
68
|
}
|
56
69
|
constructor(kwargs) {
|
@@ -61,15 +74,15 @@ export class AHundalDeleteTaskRequest {
|
|
61
74
|
}
|
62
75
|
toApiJson() {
|
63
76
|
const toReturn = {};
|
64
|
-
if (typeof this.
|
65
|
-
toReturn['
|
77
|
+
if (typeof this.addtaxiUserdata !== 'undefined' && this.addtaxiUserdata !== null) {
|
78
|
+
toReturn['addtaxiUserdata'] = 'toApiJson' in this.addtaxiUserdata ? this.addtaxiUserdata.toApiJson() : this.addtaxiUserdata;
|
66
79
|
}
|
67
80
|
return toReturn;
|
68
81
|
}
|
69
82
|
}
|
70
|
-
export class
|
83
|
+
export class AddTaxiUserDataResponse {
|
71
84
|
static fromProto(proto) {
|
72
|
-
let m = new
|
85
|
+
let m = new AddTaxiUserDataResponse();
|
73
86
|
m = Object.assign(m, proto);
|
74
87
|
return m;
|
75
88
|
}
|
@@ -81,19 +94,22 @@ export class AHundalDeleteTaskResponse {
|
|
81
94
|
}
|
82
95
|
toApiJson() {
|
83
96
|
const toReturn = {};
|
84
|
-
if (typeof this.
|
85
|
-
toReturn['
|
97
|
+
if (typeof this.addtaxiStatus !== 'undefined') {
|
98
|
+
toReturn['addtaxiStatus'] = this.addtaxiStatus;
|
99
|
+
}
|
100
|
+
if (typeof this.id !== 'undefined') {
|
101
|
+
toReturn['id'] = this.id;
|
102
|
+
}
|
103
|
+
if (typeof this.message !== 'undefined') {
|
104
|
+
toReturn['message'] = this.message;
|
86
105
|
}
|
87
106
|
return toReturn;
|
88
107
|
}
|
89
108
|
}
|
90
|
-
export class
|
109
|
+
export class AdminUserManagement {
|
91
110
|
static fromProto(proto) {
|
92
|
-
let m = new
|
111
|
+
let m = new AdminUserManagement();
|
93
112
|
m = Object.assign(m, proto);
|
94
|
-
if (proto.editedTask) {
|
95
|
-
m.editedTask = AHundalTask.fromProto(proto.editedTask);
|
96
|
-
}
|
97
113
|
return m;
|
98
114
|
}
|
99
115
|
constructor(kwargs) {
|
@@ -104,15 +120,18 @@ export class AHundalEditTaskRequest {
|
|
104
120
|
}
|
105
121
|
toApiJson() {
|
106
122
|
const toReturn = {};
|
107
|
-
if (typeof this.
|
108
|
-
toReturn['
|
123
|
+
if (typeof this.emailId !== 'undefined') {
|
124
|
+
toReturn['emailId'] = this.emailId;
|
125
|
+
}
|
126
|
+
if (typeof this.role !== 'undefined') {
|
127
|
+
toReturn['role'] = this.role;
|
109
128
|
}
|
110
129
|
return toReturn;
|
111
130
|
}
|
112
131
|
}
|
113
|
-
export class
|
132
|
+
export class Adminuserfilter {
|
114
133
|
static fromProto(proto) {
|
115
|
-
let m = new
|
134
|
+
let m = new Adminuserfilter();
|
116
135
|
m = Object.assign(m, proto);
|
117
136
|
return m;
|
118
137
|
}
|
@@ -124,16 +143,31 @@ export class AHundalEditTaskResponse {
|
|
124
143
|
}
|
125
144
|
toApiJson() {
|
126
145
|
const toReturn = {};
|
127
|
-
if (typeof this.
|
128
|
-
toReturn['
|
146
|
+
if (typeof this.mailid !== 'undefined') {
|
147
|
+
toReturn['mailid'] = this.mailid;
|
148
|
+
}
|
149
|
+
if (typeof this.role !== 'undefined') {
|
150
|
+
toReturn['role'] = this.role;
|
151
|
+
}
|
152
|
+
if (typeof this.status !== 'undefined') {
|
153
|
+
toReturn['status'] = this.status;
|
129
154
|
}
|
130
155
|
return toReturn;
|
131
156
|
}
|
132
157
|
}
|
133
|
-
export class
|
158
|
+
export class Adminuserpagingrequest {
|
134
159
|
static fromProto(proto) {
|
135
|
-
let m = new
|
160
|
+
let m = new Adminuserpagingrequest();
|
136
161
|
m = Object.assign(m, proto);
|
162
|
+
if (proto.pageSize) {
|
163
|
+
m.pageSize = parseInt(proto.pageSize, 10);
|
164
|
+
}
|
165
|
+
if (proto.filters) {
|
166
|
+
m.filters = Adminuserfilter.fromProto(proto.filters);
|
167
|
+
}
|
168
|
+
if (proto.from) {
|
169
|
+
m.from = parseInt(proto.from, 10);
|
170
|
+
}
|
137
171
|
return m;
|
138
172
|
}
|
139
173
|
constructor(kwargs) {
|
@@ -144,18 +178,33 @@ export class AHundalGetSpecificTaskRequest {
|
|
144
178
|
}
|
145
179
|
toApiJson() {
|
146
180
|
const toReturn = {};
|
147
|
-
if (typeof this.
|
148
|
-
toReturn['
|
181
|
+
if (typeof this.cursor !== 'undefined') {
|
182
|
+
toReturn['cursor'] = this.cursor;
|
183
|
+
}
|
184
|
+
if (typeof this.pageSize !== 'undefined') {
|
185
|
+
toReturn['pageSize'] = this.pageSize;
|
186
|
+
}
|
187
|
+
if (typeof this.filters !== 'undefined' && this.filters !== null) {
|
188
|
+
toReturn['filters'] = 'toApiJson' in this.filters ? this.filters.toApiJson() : this.filters;
|
189
|
+
}
|
190
|
+
if (typeof this.from !== 'undefined') {
|
191
|
+
toReturn['from'] = this.from;
|
192
|
+
}
|
193
|
+
if (typeof this.sortfield !== 'undefined') {
|
194
|
+
toReturn['sortfield'] = this.sortfield;
|
195
|
+
}
|
196
|
+
if (typeof this.directionfield !== 'undefined') {
|
197
|
+
toReturn['directionfield'] = this.directionfield;
|
149
198
|
}
|
150
199
|
return toReturn;
|
151
200
|
}
|
152
201
|
}
|
153
|
-
export class
|
202
|
+
export class Adminuserpagingresponse {
|
154
203
|
static fromProto(proto) {
|
155
|
-
let m = new
|
204
|
+
let m = new Adminuserpagingresponse();
|
156
205
|
m = Object.assign(m, proto);
|
157
|
-
if (proto.
|
158
|
-
m.
|
206
|
+
if (proto.adminuserdata) {
|
207
|
+
m.adminuserdata = proto.adminuserdata.map(AdminUserManagement.fromProto);
|
159
208
|
}
|
160
209
|
return m;
|
161
210
|
}
|
@@ -167,16 +216,28 @@ export class AHundalGetSpecificTaskResponse {
|
|
167
216
|
}
|
168
217
|
toApiJson() {
|
169
218
|
const toReturn = {};
|
170
|
-
if (typeof this.
|
171
|
-
toReturn['
|
219
|
+
if (typeof this.adminuserdata !== 'undefined' && this.adminuserdata !== null) {
|
220
|
+
toReturn['adminuserdata'] = 'toApiJson' in this.adminuserdata ? this.adminuserdata.toApiJson() : this.adminuserdata;
|
221
|
+
}
|
222
|
+
if (typeof this.nextCursor !== 'undefined') {
|
223
|
+
toReturn['nextCursor'] = this.nextCursor;
|
224
|
+
}
|
225
|
+
if (typeof this.hasMore !== 'undefined') {
|
226
|
+
toReturn['hasMore'] = this.hasMore;
|
227
|
+
}
|
228
|
+
if (typeof this.message !== 'undefined') {
|
229
|
+
toReturn['message'] = this.message;
|
172
230
|
}
|
173
231
|
return toReturn;
|
174
232
|
}
|
175
233
|
}
|
176
|
-
export class
|
234
|
+
export class BookCheckOutRequest {
|
177
235
|
static fromProto(proto) {
|
178
|
-
let m = new
|
236
|
+
let m = new BookCheckOutRequest();
|
179
237
|
m = Object.assign(m, proto);
|
238
|
+
if (proto.checkedOutDate) {
|
239
|
+
m.checkedOutDate = new Date(proto.checkedOutDate);
|
240
|
+
}
|
180
241
|
return m;
|
181
242
|
}
|
182
243
|
constructor(kwargs) {
|
@@ -187,18 +248,30 @@ export class AHundalGetTasksRequest {
|
|
187
248
|
}
|
188
249
|
toApiJson() {
|
189
250
|
const toReturn = {};
|
190
|
-
if (typeof this.
|
191
|
-
toReturn['
|
251
|
+
if (typeof this.bookId !== 'undefined') {
|
252
|
+
toReturn['bookId'] = this.bookId;
|
253
|
+
}
|
254
|
+
if (typeof this.employeeId !== 'undefined') {
|
255
|
+
toReturn['employeeId'] = this.employeeId;
|
256
|
+
}
|
257
|
+
if (typeof this.action !== 'undefined') {
|
258
|
+
toReturn['action'] = this.action;
|
259
|
+
}
|
260
|
+
if (typeof this.checkedOutDate !== 'undefined' && this.checkedOutDate !== null) {
|
261
|
+
toReturn['checkedOutDate'] = 'toApiJson' in this.checkedOutDate ? this.checkedOutDate.toApiJson() : this.checkedOutDate;
|
192
262
|
}
|
193
263
|
return toReturn;
|
194
264
|
}
|
195
265
|
}
|
196
|
-
export class
|
266
|
+
export class BookCheckedOutData {
|
197
267
|
static fromProto(proto) {
|
198
|
-
let m = new
|
268
|
+
let m = new BookCheckedOutData();
|
199
269
|
m = Object.assign(m, proto);
|
200
|
-
if (proto.
|
201
|
-
m.
|
270
|
+
if (proto.checkedOutDate) {
|
271
|
+
m.checkedOutDate = new Date(proto.checkedOutDate);
|
272
|
+
}
|
273
|
+
if (proto.returnedDate) {
|
274
|
+
m.returnedDate = new Date(proto.returnedDate);
|
202
275
|
}
|
203
276
|
return m;
|
204
277
|
}
|
@@ -210,15 +283,30 @@ export class AHundalGetTasksResponse {
|
|
210
283
|
}
|
211
284
|
toApiJson() {
|
212
285
|
const toReturn = {};
|
213
|
-
if (typeof this.
|
214
|
-
toReturn['
|
286
|
+
if (typeof this.employeeId !== 'undefined') {
|
287
|
+
toReturn['employeeId'] = this.employeeId;
|
288
|
+
}
|
289
|
+
if (typeof this.bookId !== 'undefined') {
|
290
|
+
toReturn['bookId'] = this.bookId;
|
291
|
+
}
|
292
|
+
if (typeof this.checkedOutDate !== 'undefined' && this.checkedOutDate !== null) {
|
293
|
+
toReturn['checkedOutDate'] = 'toApiJson' in this.checkedOutDate ? this.checkedOutDate.toApiJson() : this.checkedOutDate;
|
294
|
+
}
|
295
|
+
if (typeof this.transactionId !== 'undefined') {
|
296
|
+
toReturn['transactionId'] = this.transactionId;
|
297
|
+
}
|
298
|
+
if (typeof this.bookName !== 'undefined') {
|
299
|
+
toReturn['bookName'] = this.bookName;
|
300
|
+
}
|
301
|
+
if (typeof this.returnedDate !== 'undefined' && this.returnedDate !== null) {
|
302
|
+
toReturn['returnedDate'] = 'toApiJson' in this.returnedDate ? this.returnedDate.toApiJson() : this.returnedDate;
|
215
303
|
}
|
216
304
|
return toReturn;
|
217
305
|
}
|
218
306
|
}
|
219
|
-
export class
|
307
|
+
export class BookCheckoutResponse {
|
220
308
|
static fromProto(proto) {
|
221
|
-
let m = new
|
309
|
+
let m = new BookCheckoutResponse();
|
222
310
|
m = Object.assign(m, proto);
|
223
311
|
return m;
|
224
312
|
}
|
@@ -230,36 +318,15 @@ export class AHundalTask {
|
|
230
318
|
}
|
231
319
|
toApiJson() {
|
232
320
|
const toReturn = {};
|
233
|
-
if (typeof this.
|
234
|
-
toReturn['
|
235
|
-
}
|
236
|
-
if (typeof this.taskTitle !== 'undefined') {
|
237
|
-
toReturn['taskTitle'] = this.taskTitle;
|
238
|
-
}
|
239
|
-
if (typeof this.day !== 'undefined') {
|
240
|
-
toReturn['day'] = this.day;
|
241
|
-
}
|
242
|
-
if (typeof this.month !== 'undefined') {
|
243
|
-
toReturn['month'] = this.month;
|
244
|
-
}
|
245
|
-
if (typeof this.year !== 'undefined') {
|
246
|
-
toReturn['year'] = this.year;
|
247
|
-
}
|
248
|
-
if (typeof this.description !== 'undefined') {
|
249
|
-
toReturn['description'] = this.description;
|
250
|
-
}
|
251
|
-
if (typeof this.completed !== 'undefined') {
|
252
|
-
toReturn['completed'] = this.completed;
|
253
|
-
}
|
254
|
-
if (typeof this.isDeleted !== 'undefined') {
|
255
|
-
toReturn['isDeleted'] = this.isDeleted;
|
321
|
+
if (typeof this.message !== 'undefined') {
|
322
|
+
toReturn['message'] = this.message;
|
256
323
|
}
|
257
324
|
return toReturn;
|
258
325
|
}
|
259
326
|
}
|
260
|
-
export class
|
327
|
+
export class BookDropdownData {
|
261
328
|
static fromProto(proto) {
|
262
|
-
let m = new
|
329
|
+
let m = new BookDropdownData();
|
263
330
|
m = Object.assign(m, proto);
|
264
331
|
return m;
|
265
332
|
}
|
@@ -271,21 +338,21 @@ export class CreateECurrieRequest {
|
|
271
338
|
}
|
272
339
|
toApiJson() {
|
273
340
|
const toReturn = {};
|
274
|
-
if (typeof this.
|
275
|
-
toReturn['
|
341
|
+
if (typeof this.bookId !== 'undefined') {
|
342
|
+
toReturn['bookId'] = this.bookId;
|
276
343
|
}
|
277
|
-
if (typeof this.
|
278
|
-
toReturn['
|
344
|
+
if (typeof this.bookName !== 'undefined') {
|
345
|
+
toReturn['bookName'] = this.bookName;
|
279
346
|
}
|
280
|
-
if (typeof this.
|
281
|
-
toReturn['
|
347
|
+
if (typeof this.quanity !== 'undefined') {
|
348
|
+
toReturn['quanity'] = this.quanity;
|
282
349
|
}
|
283
350
|
return toReturn;
|
284
351
|
}
|
285
352
|
}
|
286
|
-
export class
|
353
|
+
export class BookDropdownRequest {
|
287
354
|
static fromProto(proto) {
|
288
|
-
let m = new
|
355
|
+
let m = new BookDropdownRequest();
|
289
356
|
m = Object.assign(m, proto);
|
290
357
|
return m;
|
291
358
|
}
|
@@ -297,18 +364,15 @@ export class CreateECurrieResponse {
|
|
297
364
|
}
|
298
365
|
toApiJson() {
|
299
366
|
const toReturn = {};
|
300
|
-
if (typeof this.id !== 'undefined') {
|
301
|
-
toReturn['id'] = this.id;
|
302
|
-
}
|
303
367
|
return toReturn;
|
304
368
|
}
|
305
369
|
}
|
306
|
-
export class
|
370
|
+
export class BookDropdownResponse {
|
307
371
|
static fromProto(proto) {
|
308
|
-
let m = new
|
372
|
+
let m = new BookDropdownResponse();
|
309
373
|
m = Object.assign(m, proto);
|
310
|
-
if (proto.
|
311
|
-
m.
|
374
|
+
if (proto.bookDropdownData) {
|
375
|
+
m.bookDropdownData = proto.bookDropdownData.map(BookDropdownData.fromProto);
|
312
376
|
}
|
313
377
|
return m;
|
314
378
|
}
|
@@ -320,18 +384,18 @@ export class CreateHdoTodoRequest {
|
|
320
384
|
}
|
321
385
|
toApiJson() {
|
322
386
|
const toReturn = {};
|
323
|
-
if (typeof this.
|
324
|
-
toReturn['
|
387
|
+
if (typeof this.bookDropdownData !== 'undefined' && this.bookDropdownData !== null) {
|
388
|
+
toReturn['bookDropdownData'] = 'toApiJson' in this.bookDropdownData ? this.bookDropdownData.toApiJson() : this.bookDropdownData;
|
325
389
|
}
|
326
390
|
return toReturn;
|
327
391
|
}
|
328
392
|
}
|
329
|
-
export class
|
393
|
+
export class BookFilterRequest {
|
330
394
|
static fromProto(proto) {
|
331
|
-
let m = new
|
395
|
+
let m = new BookFilterRequest();
|
332
396
|
m = Object.assign(m, proto);
|
333
|
-
if (proto.
|
334
|
-
m.
|
397
|
+
if (proto.pageSize) {
|
398
|
+
m.pageSize = parseInt(proto.pageSize, 10);
|
335
399
|
}
|
336
400
|
return m;
|
337
401
|
}
|
@@ -343,16 +407,25 @@ export class CreateHdoTodoResponse {
|
|
343
407
|
}
|
344
408
|
toApiJson() {
|
345
409
|
const toReturn = {};
|
346
|
-
if (typeof this.
|
347
|
-
toReturn['
|
410
|
+
if (typeof this.cursor !== 'undefined') {
|
411
|
+
toReturn['cursor'] = this.cursor;
|
412
|
+
}
|
413
|
+
if (typeof this.pageSize !== 'undefined') {
|
414
|
+
toReturn['pageSize'] = this.pageSize;
|
415
|
+
}
|
416
|
+
if (typeof this.bookname !== 'undefined') {
|
417
|
+
toReturn['bookname'] = this.bookname;
|
348
418
|
}
|
349
419
|
return toReturn;
|
350
420
|
}
|
351
421
|
}
|
352
|
-
export class
|
422
|
+
export class BookFilterResponse {
|
353
423
|
static fromProto(proto) {
|
354
|
-
let m = new
|
424
|
+
let m = new BookFilterResponse();
|
355
425
|
m = Object.assign(m, proto);
|
426
|
+
if (proto.bookfilterresponse) {
|
427
|
+
m.bookfilterresponse = proto.bookfilterresponse.map(BookFilterRequest.fromProto);
|
428
|
+
}
|
356
429
|
return m;
|
357
430
|
}
|
358
431
|
constructor(kwargs) {
|
@@ -363,19 +436,34 @@ export class CreateListRequest {
|
|
363
436
|
}
|
364
437
|
toApiJson() {
|
365
438
|
const toReturn = {};
|
366
|
-
if (typeof this.
|
367
|
-
toReturn['
|
439
|
+
if (typeof this.bookfilterresponse !== 'undefined' && this.bookfilterresponse !== null) {
|
440
|
+
toReturn['bookfilterresponse'] = 'toApiJson' in this.bookfilterresponse ? this.bookfilterresponse.toApiJson() : this.bookfilterresponse;
|
368
441
|
}
|
369
|
-
if (typeof this.
|
370
|
-
toReturn['
|
442
|
+
if (typeof this.nextCursor !== 'undefined') {
|
443
|
+
toReturn['nextCursor'] = this.nextCursor;
|
444
|
+
}
|
445
|
+
if (typeof this.hasMore !== 'undefined') {
|
446
|
+
toReturn['hasMore'] = this.hasMore;
|
447
|
+
}
|
448
|
+
if (typeof this.message !== 'undefined') {
|
449
|
+
toReturn['message'] = this.message;
|
371
450
|
}
|
372
451
|
return toReturn;
|
373
452
|
}
|
374
453
|
}
|
375
|
-
export class
|
454
|
+
export class BookReturnEditRequest {
|
376
455
|
static fromProto(proto) {
|
377
|
-
let m = new
|
456
|
+
let m = new BookReturnEditRequest();
|
378
457
|
m = Object.assign(m, proto);
|
458
|
+
if (proto.checkedOutDate) {
|
459
|
+
m.checkedOutDate = new Date(proto.checkedOutDate);
|
460
|
+
}
|
461
|
+
if (proto.returnedDate) {
|
462
|
+
m.returnedDate = new Date(proto.returnedDate);
|
463
|
+
}
|
464
|
+
if (proto.missedDate) {
|
465
|
+
m.missedDate = new Date(proto.missedDate);
|
466
|
+
}
|
379
467
|
return m;
|
380
468
|
}
|
381
469
|
constructor(kwargs) {
|
@@ -386,15 +474,33 @@ export class CreateListResponse {
|
|
386
474
|
}
|
387
475
|
toApiJson() {
|
388
476
|
const toReturn = {};
|
389
|
-
if (typeof this.
|
390
|
-
toReturn['
|
477
|
+
if (typeof this.bookId !== 'undefined') {
|
478
|
+
toReturn['bookId'] = this.bookId;
|
479
|
+
}
|
480
|
+
if (typeof this.employeeId !== 'undefined') {
|
481
|
+
toReturn['employeeId'] = this.employeeId;
|
482
|
+
}
|
483
|
+
if (typeof this.transactionId !== 'undefined') {
|
484
|
+
toReturn['transactionId'] = this.transactionId;
|
485
|
+
}
|
486
|
+
if (typeof this.action !== 'undefined') {
|
487
|
+
toReturn['action'] = this.action;
|
488
|
+
}
|
489
|
+
if (typeof this.checkedOutDate !== 'undefined' && this.checkedOutDate !== null) {
|
490
|
+
toReturn['checkedOutDate'] = 'toApiJson' in this.checkedOutDate ? this.checkedOutDate.toApiJson() : this.checkedOutDate;
|
491
|
+
}
|
492
|
+
if (typeof this.returnedDate !== 'undefined' && this.returnedDate !== null) {
|
493
|
+
toReturn['returnedDate'] = 'toApiJson' in this.returnedDate ? this.returnedDate.toApiJson() : this.returnedDate;
|
494
|
+
}
|
495
|
+
if (typeof this.missedDate !== 'undefined' && this.missedDate !== null) {
|
496
|
+
toReturn['missedDate'] = 'toApiJson' in this.missedDate ? this.missedDate.toApiJson() : this.missedDate;
|
391
497
|
}
|
392
498
|
return toReturn;
|
393
499
|
}
|
394
500
|
}
|
395
|
-
export class
|
501
|
+
export class BookReturnEditResponse {
|
396
502
|
static fromProto(proto) {
|
397
|
-
let m = new
|
503
|
+
let m = new BookReturnEditResponse();
|
398
504
|
m = Object.assign(m, proto);
|
399
505
|
return m;
|
400
506
|
}
|
@@ -406,22 +512,22 @@ export class CreateSBueckertToDoListItemRequest {
|
|
406
512
|
}
|
407
513
|
toApiJson() {
|
408
514
|
const toReturn = {};
|
409
|
-
if (typeof this.
|
410
|
-
toReturn['
|
411
|
-
}
|
412
|
-
if (typeof this.title !== 'undefined') {
|
413
|
-
toReturn['title'] = this.title;
|
414
|
-
}
|
415
|
-
if (typeof this.date !== 'undefined') {
|
416
|
-
toReturn['date'] = this.date;
|
515
|
+
if (typeof this.message !== 'undefined') {
|
516
|
+
toReturn['message'] = this.message;
|
417
517
|
}
|
418
518
|
return toReturn;
|
419
519
|
}
|
420
520
|
}
|
421
|
-
export class
|
521
|
+
export class BookReturnRequest {
|
422
522
|
static fromProto(proto) {
|
423
|
-
let m = new
|
523
|
+
let m = new BookReturnRequest();
|
424
524
|
m = Object.assign(m, proto);
|
525
|
+
if (proto.returnedDate) {
|
526
|
+
m.returnedDate = new Date(proto.returnedDate);
|
527
|
+
}
|
528
|
+
if (proto.missedDate) {
|
529
|
+
m.missedDate = new Date(proto.missedDate);
|
530
|
+
}
|
425
531
|
return m;
|
426
532
|
}
|
427
533
|
constructor(kwargs) {
|
@@ -432,19 +538,31 @@ export class CreateSBueckertToDoListItemResponse {
|
|
432
538
|
}
|
433
539
|
toApiJson() {
|
434
540
|
const toReturn = {};
|
435
|
-
if (typeof this.
|
436
|
-
toReturn['
|
541
|
+
if (typeof this.bookId !== 'undefined') {
|
542
|
+
toReturn['bookId'] = this.bookId;
|
543
|
+
}
|
544
|
+
if (typeof this.employeeId !== 'undefined') {
|
545
|
+
toReturn['employeeId'] = this.employeeId;
|
546
|
+
}
|
547
|
+
if (typeof this.returnedDate !== 'undefined' && this.returnedDate !== null) {
|
548
|
+
toReturn['returnedDate'] = 'toApiJson' in this.returnedDate ? this.returnedDate.toApiJson() : this.returnedDate;
|
549
|
+
}
|
550
|
+
if (typeof this.action !== 'undefined') {
|
551
|
+
toReturn['action'] = this.action;
|
552
|
+
}
|
553
|
+
if (typeof this.missedDate !== 'undefined' && this.missedDate !== null) {
|
554
|
+
toReturn['missedDate'] = 'toApiJson' in this.missedDate ? this.missedDate.toApiJson() : this.missedDate;
|
555
|
+
}
|
556
|
+
if (typeof this.transactionId !== 'undefined') {
|
557
|
+
toReturn['transactionId'] = this.transactionId;
|
437
558
|
}
|
438
559
|
return toReturn;
|
439
560
|
}
|
440
561
|
}
|
441
|
-
export class
|
562
|
+
export class BookReturnResponse {
|
442
563
|
static fromProto(proto) {
|
443
|
-
let m = new
|
564
|
+
let m = new BookReturnResponse();
|
444
565
|
m = Object.assign(m, proto);
|
445
|
-
if (proto.task) {
|
446
|
-
m.task = WHorrellTask.fromProto(proto.task);
|
447
|
-
}
|
448
566
|
return m;
|
449
567
|
}
|
450
568
|
constructor(kwargs) {
|
@@ -455,16 +573,22 @@ export class CreateWHorrellTaskRequest {
|
|
455
573
|
}
|
456
574
|
toApiJson() {
|
457
575
|
const toReturn = {};
|
458
|
-
if (typeof this.
|
459
|
-
toReturn['
|
576
|
+
if (typeof this.message !== 'undefined') {
|
577
|
+
toReturn['message'] = this.message;
|
460
578
|
}
|
461
579
|
return toReturn;
|
462
580
|
}
|
463
581
|
}
|
464
|
-
export class
|
582
|
+
export class BookReturnedData {
|
465
583
|
static fromProto(proto) {
|
466
|
-
let m = new
|
584
|
+
let m = new BookReturnedData();
|
467
585
|
m = Object.assign(m, proto);
|
586
|
+
if (proto.returnedDate) {
|
587
|
+
m.returnedDate = new Date(proto.returnedDate);
|
588
|
+
}
|
589
|
+
if (proto.missedDate) {
|
590
|
+
m.missedDate = new Date(proto.missedDate);
|
591
|
+
}
|
468
592
|
return m;
|
469
593
|
}
|
470
594
|
constructor(kwargs) {
|
@@ -475,16 +599,37 @@ export class DeleteECurrieRequest {
|
|
475
599
|
}
|
476
600
|
toApiJson() {
|
477
601
|
const toReturn = {};
|
478
|
-
if (typeof this.
|
479
|
-
toReturn['
|
602
|
+
if (typeof this.employeeId !== 'undefined') {
|
603
|
+
toReturn['employeeId'] = this.employeeId;
|
604
|
+
}
|
605
|
+
if (typeof this.bookId !== 'undefined') {
|
606
|
+
toReturn['bookId'] = this.bookId;
|
607
|
+
}
|
608
|
+
if (typeof this.returnedDate !== 'undefined' && this.returnedDate !== null) {
|
609
|
+
toReturn['returnedDate'] = 'toApiJson' in this.returnedDate ? this.returnedDate.toApiJson() : this.returnedDate;
|
610
|
+
}
|
611
|
+
if (typeof this.transactionId !== 'undefined') {
|
612
|
+
toReturn['transactionId'] = this.transactionId;
|
613
|
+
}
|
614
|
+
if (typeof this.action !== 'undefined') {
|
615
|
+
toReturn['action'] = this.action;
|
616
|
+
}
|
617
|
+
if (typeof this.missedDate !== 'undefined' && this.missedDate !== null) {
|
618
|
+
toReturn['missedDate'] = 'toApiJson' in this.missedDate ? this.missedDate.toApiJson() : this.missedDate;
|
619
|
+
}
|
620
|
+
if (typeof this.bookName !== 'undefined') {
|
621
|
+
toReturn['bookName'] = this.bookName;
|
480
622
|
}
|
481
623
|
return toReturn;
|
482
624
|
}
|
483
625
|
}
|
484
|
-
export class
|
626
|
+
export class BookmasterAddRequest {
|
485
627
|
static fromProto(proto) {
|
486
|
-
let m = new
|
628
|
+
let m = new BookmasterAddRequest();
|
487
629
|
m = Object.assign(m, proto);
|
630
|
+
if (proto.addbookmaster) {
|
631
|
+
m.addbookmaster = BookmasterRequest.fromProto(proto.addbookmaster);
|
632
|
+
}
|
488
633
|
return m;
|
489
634
|
}
|
490
635
|
constructor(kwargs) {
|
@@ -495,16 +640,19 @@ export class DeleteHdoTodoRequest {
|
|
495
640
|
}
|
496
641
|
toApiJson() {
|
497
642
|
const toReturn = {};
|
498
|
-
if (typeof this.
|
499
|
-
toReturn['
|
643
|
+
if (typeof this.addbookmaster !== 'undefined' && this.addbookmaster !== null) {
|
644
|
+
toReturn['addbookmaster'] = 'toApiJson' in this.addbookmaster ? this.addbookmaster.toApiJson() : this.addbookmaster;
|
500
645
|
}
|
501
646
|
return toReturn;
|
502
647
|
}
|
503
648
|
}
|
504
|
-
export class
|
649
|
+
export class BookmasterAddResponse {
|
505
650
|
static fromProto(proto) {
|
506
|
-
let m = new
|
651
|
+
let m = new BookmasterAddResponse();
|
507
652
|
m = Object.assign(m, proto);
|
653
|
+
if (proto.bookmasterresponse) {
|
654
|
+
m.bookmasterresponse = BookmasterResponse.fromProto(proto.bookmasterresponse);
|
655
|
+
}
|
508
656
|
return m;
|
509
657
|
}
|
510
658
|
constructor(kwargs) {
|
@@ -515,16 +663,25 @@ export class DeleteHdoTodoResponse {
|
|
515
663
|
}
|
516
664
|
toApiJson() {
|
517
665
|
const toReturn = {};
|
666
|
+
if (typeof this.bookmasterresponse !== 'undefined' && this.bookmasterresponse !== null) {
|
667
|
+
toReturn['bookmasterresponse'] = 'toApiJson' in this.bookmasterresponse ? this.bookmasterresponse.toApiJson() : this.bookmasterresponse;
|
668
|
+
}
|
669
|
+
if (typeof this.status !== 'undefined') {
|
670
|
+
toReturn['status'] = this.status;
|
671
|
+
}
|
518
672
|
if (typeof this.message !== 'undefined') {
|
519
673
|
toReturn['message'] = this.message;
|
520
674
|
}
|
521
675
|
return toReturn;
|
522
676
|
}
|
523
677
|
}
|
524
|
-
export class
|
678
|
+
export class BookmasterEditRequest {
|
525
679
|
static fromProto(proto) {
|
526
|
-
let m = new
|
680
|
+
let m = new BookmasterEditRequest();
|
527
681
|
m = Object.assign(m, proto);
|
682
|
+
if (proto.editbookmaster) {
|
683
|
+
m.editbookmaster = BookmasterRequest.fromProto(proto.editbookmaster);
|
684
|
+
}
|
528
685
|
return m;
|
529
686
|
}
|
530
687
|
constructor(kwargs) {
|
@@ -535,16 +692,19 @@ export class DeleteListRequest {
|
|
535
692
|
}
|
536
693
|
toApiJson() {
|
537
694
|
const toReturn = {};
|
538
|
-
if (typeof this.
|
539
|
-
toReturn['
|
695
|
+
if (typeof this.editbookmaster !== 'undefined' && this.editbookmaster !== null) {
|
696
|
+
toReturn['editbookmaster'] = 'toApiJson' in this.editbookmaster ? this.editbookmaster.toApiJson() : this.editbookmaster;
|
540
697
|
}
|
541
698
|
return toReturn;
|
542
699
|
}
|
543
700
|
}
|
544
|
-
export class
|
701
|
+
export class BookmasterEditResponse {
|
545
702
|
static fromProto(proto) {
|
546
|
-
let m = new
|
703
|
+
let m = new BookmasterEditResponse();
|
547
704
|
m = Object.assign(m, proto);
|
705
|
+
if (proto.bookmasterresponse) {
|
706
|
+
m.bookmasterresponse = BookmasterResponse.fromProto(proto.bookmasterresponse);
|
707
|
+
}
|
548
708
|
return m;
|
549
709
|
}
|
550
710
|
constructor(kwargs) {
|
@@ -555,16 +715,25 @@ export class DeleteSBueckertToDoListItemRequest {
|
|
555
715
|
}
|
556
716
|
toApiJson() {
|
557
717
|
const toReturn = {};
|
558
|
-
if (typeof this.
|
559
|
-
toReturn['
|
718
|
+
if (typeof this.bookmasterresponse !== 'undefined' && this.bookmasterresponse !== null) {
|
719
|
+
toReturn['bookmasterresponse'] = 'toApiJson' in this.bookmasterresponse ? this.bookmasterresponse.toApiJson() : this.bookmasterresponse;
|
720
|
+
}
|
721
|
+
if (typeof this.status !== 'undefined') {
|
722
|
+
toReturn['status'] = this.status;
|
723
|
+
}
|
724
|
+
if (typeof this.message !== 'undefined') {
|
725
|
+
toReturn['message'] = this.message;
|
560
726
|
}
|
561
727
|
return toReturn;
|
562
728
|
}
|
563
729
|
}
|
564
|
-
export class
|
730
|
+
export class BookmasterRequest {
|
565
731
|
static fromProto(proto) {
|
566
|
-
let m = new
|
732
|
+
let m = new BookmasterRequest();
|
567
733
|
m = Object.assign(m, proto);
|
734
|
+
if (proto.procureBookDate) {
|
735
|
+
m.procureBookDate = new Date(proto.procureBookDate);
|
736
|
+
}
|
568
737
|
return m;
|
569
738
|
}
|
570
739
|
constructor(kwargs) {
|
@@ -575,16 +744,49 @@ export class DeleteWHorrellTaskRequest {
|
|
575
744
|
}
|
576
745
|
toApiJson() {
|
577
746
|
const toReturn = {};
|
578
|
-
if (typeof this.
|
579
|
-
toReturn['
|
747
|
+
if (typeof this.bookid !== 'undefined') {
|
748
|
+
toReturn['bookid'] = this.bookid;
|
749
|
+
}
|
750
|
+
if (typeof this.bookname !== 'undefined') {
|
751
|
+
toReturn['bookname'] = this.bookname;
|
752
|
+
}
|
753
|
+
if (typeof this.bookauthor !== 'undefined') {
|
754
|
+
toReturn['bookauthor'] = this.bookauthor;
|
755
|
+
}
|
756
|
+
if (typeof this.procureBookDate !== 'undefined' && this.procureBookDate !== null) {
|
757
|
+
toReturn['procureBookDate'] = 'toApiJson' in this.procureBookDate ? this.procureBookDate.toApiJson() : this.procureBookDate;
|
758
|
+
}
|
759
|
+
if (typeof this.category !== 'undefined') {
|
760
|
+
toReturn['category'] = this.category;
|
761
|
+
}
|
762
|
+
if (typeof this.createdby !== 'undefined') {
|
763
|
+
toReturn['createdby'] = this.createdby;
|
764
|
+
}
|
765
|
+
if (typeof this.modifiedby !== 'undefined') {
|
766
|
+
toReturn['modifiedby'] = this.modifiedby;
|
767
|
+
}
|
768
|
+
if (typeof this.status !== 'undefined') {
|
769
|
+
toReturn['status'] = this.status;
|
770
|
+
}
|
771
|
+
if (typeof this.qrcodeauth !== 'undefined') {
|
772
|
+
toReturn['qrcodeauth'] = this.qrcodeauth;
|
773
|
+
}
|
774
|
+
if (typeof this.quantity !== 'undefined') {
|
775
|
+
toReturn['quantity'] = this.quantity;
|
776
|
+
}
|
777
|
+
if (typeof this.purchasedquantity !== 'undefined') {
|
778
|
+
toReturn['purchasedquantity'] = this.purchasedquantity;
|
580
779
|
}
|
581
780
|
return toReturn;
|
582
781
|
}
|
583
782
|
}
|
584
|
-
export class
|
783
|
+
export class BookmasterResponse {
|
585
784
|
static fromProto(proto) {
|
586
|
-
let m = new
|
785
|
+
let m = new BookmasterResponse();
|
587
786
|
m = Object.assign(m, proto);
|
787
|
+
if (proto.procureBookDate) {
|
788
|
+
m.procureBookDate = new Date(proto.procureBookDate);
|
789
|
+
}
|
588
790
|
return m;
|
589
791
|
}
|
590
792
|
constructor(kwargs) {
|
@@ -595,27 +797,48 @@ export class ECurrieTodoItem {
|
|
595
797
|
}
|
596
798
|
toApiJson() {
|
597
799
|
const toReturn = {};
|
598
|
-
if (typeof this.
|
599
|
-
toReturn['
|
800
|
+
if (typeof this.bookid !== 'undefined') {
|
801
|
+
toReturn['bookid'] = this.bookid;
|
802
|
+
}
|
803
|
+
if (typeof this.bookname !== 'undefined') {
|
804
|
+
toReturn['bookname'] = this.bookname;
|
600
805
|
}
|
601
|
-
if (typeof this.
|
602
|
-
toReturn['
|
806
|
+
if (typeof this.bookauthor !== 'undefined') {
|
807
|
+
toReturn['bookauthor'] = this.bookauthor;
|
603
808
|
}
|
604
|
-
if (typeof this.
|
605
|
-
toReturn['
|
809
|
+
if (typeof this.procureBookDate !== 'undefined' && this.procureBookDate !== null) {
|
810
|
+
toReturn['procureBookDate'] = 'toApiJson' in this.procureBookDate ? this.procureBookDate.toApiJson() : this.procureBookDate;
|
606
811
|
}
|
607
|
-
if (typeof this.
|
608
|
-
toReturn['
|
812
|
+
if (typeof this.category !== 'undefined') {
|
813
|
+
toReturn['category'] = this.category;
|
814
|
+
}
|
815
|
+
if (typeof this.createdby !== 'undefined') {
|
816
|
+
toReturn['createdby'] = this.createdby;
|
817
|
+
}
|
818
|
+
if (typeof this.modifiedby !== 'undefined') {
|
819
|
+
toReturn['modifiedby'] = this.modifiedby;
|
820
|
+
}
|
821
|
+
if (typeof this.status !== 'undefined') {
|
822
|
+
toReturn['status'] = this.status;
|
823
|
+
}
|
824
|
+
if (typeof this.qrcodeauth !== 'undefined') {
|
825
|
+
toReturn['qrcodeauth'] = this.qrcodeauth;
|
826
|
+
}
|
827
|
+
if (typeof this.quantity !== 'undefined') {
|
828
|
+
toReturn['quantity'] = this.quantity;
|
609
829
|
}
|
610
|
-
if (typeof this.
|
611
|
-
toReturn['
|
830
|
+
if (typeof this.purchasedquantity !== 'undefined') {
|
831
|
+
toReturn['purchasedquantity'] = this.purchasedquantity;
|
832
|
+
}
|
833
|
+
if (typeof this.missedquantity !== 'undefined') {
|
834
|
+
toReturn['missedquantity'] = this.missedquantity;
|
612
835
|
}
|
613
836
|
return toReturn;
|
614
837
|
}
|
615
838
|
}
|
616
|
-
export class
|
839
|
+
export class Bookmasterdeleterequest {
|
617
840
|
static fromProto(proto) {
|
618
|
-
let m = new
|
841
|
+
let m = new Bookmasterdeleterequest();
|
619
842
|
m = Object.assign(m, proto);
|
620
843
|
return m;
|
621
844
|
}
|
@@ -627,24 +850,15 @@ export class EditWHorrellTaskRequest {
|
|
627
850
|
}
|
628
851
|
toApiJson() {
|
629
852
|
const toReturn = {};
|
630
|
-
if (typeof this.
|
631
|
-
toReturn['
|
632
|
-
}
|
633
|
-
if (typeof this.name !== 'undefined') {
|
634
|
-
toReturn['name'] = this.name;
|
635
|
-
}
|
636
|
-
if (typeof this.description !== 'undefined') {
|
637
|
-
toReturn['description'] = this.description;
|
638
|
-
}
|
639
|
-
if (typeof this.isCompleted !== 'undefined') {
|
640
|
-
toReturn['isCompleted'] = this.isCompleted;
|
853
|
+
if (typeof this.bookid !== 'undefined') {
|
854
|
+
toReturn['bookid'] = this.bookid;
|
641
855
|
}
|
642
856
|
return toReturn;
|
643
857
|
}
|
644
858
|
}
|
645
|
-
export class
|
859
|
+
export class Bookmasterdeleteresponse {
|
646
860
|
static fromProto(proto) {
|
647
|
-
let m = new
|
861
|
+
let m = new Bookmasterdeleteresponse();
|
648
862
|
m = Object.assign(m, proto);
|
649
863
|
return m;
|
650
864
|
}
|
@@ -656,25 +870,19 @@ export class GetECurrieListRequest {
|
|
656
870
|
}
|
657
871
|
toApiJson() {
|
658
872
|
const toReturn = {};
|
659
|
-
if (typeof this.
|
660
|
-
toReturn['
|
873
|
+
if (typeof this.message !== 'undefined') {
|
874
|
+
toReturn['message'] = this.message;
|
661
875
|
}
|
662
876
|
if (typeof this.status !== 'undefined') {
|
663
877
|
toReturn['status'] = this.status;
|
664
878
|
}
|
665
|
-
if (typeof this.id !== 'undefined') {
|
666
|
-
toReturn['id'] = this.id;
|
667
|
-
}
|
668
879
|
return toReturn;
|
669
880
|
}
|
670
881
|
}
|
671
|
-
export class
|
882
|
+
export class Bookmasterfilter {
|
672
883
|
static fromProto(proto) {
|
673
|
-
let m = new
|
884
|
+
let m = new Bookmasterfilter();
|
674
885
|
m = Object.assign(m, proto);
|
675
|
-
if (proto.todoItems) {
|
676
|
-
m.todoItems = proto.todoItems.map(ECurrieTodoItem.fromProto);
|
677
|
-
}
|
678
886
|
return m;
|
679
887
|
}
|
680
888
|
constructor(kwargs) {
|
@@ -685,15 +893,27 @@ export class GetECurrieListResponse {
|
|
685
893
|
}
|
686
894
|
toApiJson() {
|
687
895
|
const toReturn = {};
|
688
|
-
if (typeof this.
|
689
|
-
toReturn['
|
896
|
+
if (typeof this.bookname !== 'undefined') {
|
897
|
+
toReturn['bookname'] = this.bookname;
|
898
|
+
}
|
899
|
+
if (typeof this.bookid !== 'undefined') {
|
900
|
+
toReturn['bookid'] = this.bookid;
|
901
|
+
}
|
902
|
+
if (typeof this.bookauthor !== 'undefined') {
|
903
|
+
toReturn['bookauthor'] = this.bookauthor;
|
904
|
+
}
|
905
|
+
if (typeof this.status !== 'undefined') {
|
906
|
+
toReturn['status'] = this.status;
|
907
|
+
}
|
908
|
+
if (typeof this.category !== 'undefined') {
|
909
|
+
toReturn['category'] = this.category;
|
690
910
|
}
|
691
911
|
return toReturn;
|
692
912
|
}
|
693
913
|
}
|
694
|
-
export class
|
914
|
+
export class Bookmastergetbyidrequest {
|
695
915
|
static fromProto(proto) {
|
696
|
-
let m = new
|
916
|
+
let m = new Bookmastergetbyidrequest();
|
697
917
|
m = Object.assign(m, proto);
|
698
918
|
return m;
|
699
919
|
}
|
@@ -705,18 +925,18 @@ export class GetHdoTodoRequest {
|
|
705
925
|
}
|
706
926
|
toApiJson() {
|
707
927
|
const toReturn = {};
|
708
|
-
if (typeof this.
|
709
|
-
toReturn['
|
928
|
+
if (typeof this.bookid !== 'undefined') {
|
929
|
+
toReturn['bookid'] = this.bookid;
|
710
930
|
}
|
711
931
|
return toReturn;
|
712
932
|
}
|
713
933
|
}
|
714
|
-
export class
|
934
|
+
export class Bookmastergetbyidresponse {
|
715
935
|
static fromProto(proto) {
|
716
|
-
let m = new
|
936
|
+
let m = new Bookmastergetbyidresponse();
|
717
937
|
m = Object.assign(m, proto);
|
718
|
-
if (proto.
|
719
|
-
m.
|
938
|
+
if (proto.bookmasterresponse) {
|
939
|
+
m.bookmasterresponse = BookmasterResponse.fromProto(proto.bookmasterresponse);
|
720
940
|
}
|
721
941
|
return m;
|
722
942
|
}
|
@@ -728,16 +948,34 @@ export class GetHdoTodoResponse {
|
|
728
948
|
}
|
729
949
|
toApiJson() {
|
730
950
|
const toReturn = {};
|
731
|
-
if (typeof this.
|
732
|
-
toReturn['
|
951
|
+
if (typeof this.bookmasterresponse !== 'undefined' && this.bookmasterresponse !== null) {
|
952
|
+
toReturn['bookmasterresponse'] = 'toApiJson' in this.bookmasterresponse ? this.bookmasterresponse.toApiJson() : this.bookmasterresponse;
|
953
|
+
}
|
954
|
+
if (typeof this.status !== 'undefined') {
|
955
|
+
toReturn['status'] = this.status;
|
956
|
+
}
|
957
|
+
if (typeof this.message !== 'undefined') {
|
958
|
+
toReturn['message'] = this.message;
|
733
959
|
}
|
734
960
|
return toReturn;
|
735
961
|
}
|
736
962
|
}
|
737
|
-
export class
|
963
|
+
export class Bookmasterpagingrequest {
|
738
964
|
static fromProto(proto) {
|
739
|
-
let m = new
|
965
|
+
let m = new Bookmasterpagingrequest();
|
740
966
|
m = Object.assign(m, proto);
|
967
|
+
if (proto.pageSize) {
|
968
|
+
m.pageSize = parseInt(proto.pageSize, 10);
|
969
|
+
}
|
970
|
+
if (proto.filters) {
|
971
|
+
m.filters = Bookmasterfilter.fromProto(proto.filters);
|
972
|
+
}
|
973
|
+
if (proto.sortOptions) {
|
974
|
+
m.sortOptions = proto.sortOptions.map(Bookmastersortoptions.fromProto);
|
975
|
+
}
|
976
|
+
if (proto.from) {
|
977
|
+
m.from = parseInt(proto.from, 10);
|
978
|
+
}
|
741
979
|
return m;
|
742
980
|
}
|
743
981
|
constructor(kwargs) {
|
@@ -748,24 +986,36 @@ export class GetListRequest {
|
|
748
986
|
}
|
749
987
|
toApiJson() {
|
750
988
|
const toReturn = {};
|
751
|
-
if (typeof this.
|
752
|
-
toReturn['
|
989
|
+
if (typeof this.cursor !== 'undefined') {
|
990
|
+
toReturn['cursor'] = this.cursor;
|
753
991
|
}
|
754
|
-
if (typeof this.
|
755
|
-
toReturn['
|
992
|
+
if (typeof this.pageSize !== 'undefined') {
|
993
|
+
toReturn['pageSize'] = this.pageSize;
|
756
994
|
}
|
757
|
-
if (typeof this.
|
758
|
-
toReturn['
|
995
|
+
if (typeof this.filters !== 'undefined' && this.filters !== null) {
|
996
|
+
toReturn['filters'] = 'toApiJson' in this.filters ? this.filters.toApiJson() : this.filters;
|
997
|
+
}
|
998
|
+
if (typeof this.sortOptions !== 'undefined' && this.sortOptions !== null) {
|
999
|
+
toReturn['sortOptions'] = 'toApiJson' in this.sortOptions ? this.sortOptions.toApiJson() : this.sortOptions;
|
1000
|
+
}
|
1001
|
+
if (typeof this.from !== 'undefined') {
|
1002
|
+
toReturn['from'] = this.from;
|
1003
|
+
}
|
1004
|
+
if (typeof this.sortfield !== 'undefined') {
|
1005
|
+
toReturn['sortfield'] = this.sortfield;
|
1006
|
+
}
|
1007
|
+
if (typeof this.directionfield !== 'undefined') {
|
1008
|
+
toReturn['directionfield'] = this.directionfield;
|
759
1009
|
}
|
760
1010
|
return toReturn;
|
761
1011
|
}
|
762
1012
|
}
|
763
|
-
export class
|
1013
|
+
export class Bookmasterpagingresponse {
|
764
1014
|
static fromProto(proto) {
|
765
|
-
let m = new
|
1015
|
+
let m = new Bookmasterpagingresponse();
|
766
1016
|
m = Object.assign(m, proto);
|
767
|
-
if (proto.
|
768
|
-
m.
|
1017
|
+
if (proto.bookmasterdata) {
|
1018
|
+
m.bookmasterdata = proto.bookmasterdata.map(BookmasterResponse.fromProto);
|
769
1019
|
}
|
770
1020
|
return m;
|
771
1021
|
}
|
@@ -777,16 +1027,31 @@ export class GetListResponse {
|
|
777
1027
|
}
|
778
1028
|
toApiJson() {
|
779
1029
|
const toReturn = {};
|
780
|
-
if (typeof this.
|
781
|
-
toReturn['
|
1030
|
+
if (typeof this.bookmasterdata !== 'undefined' && this.bookmasterdata !== null) {
|
1031
|
+
toReturn['bookmasterdata'] = 'toApiJson' in this.bookmasterdata ? this.bookmasterdata.toApiJson() : this.bookmasterdata;
|
1032
|
+
}
|
1033
|
+
if (typeof this.nextCursor !== 'undefined') {
|
1034
|
+
toReturn['nextCursor'] = this.nextCursor;
|
1035
|
+
}
|
1036
|
+
if (typeof this.hasMore !== 'undefined') {
|
1037
|
+
toReturn['hasMore'] = this.hasMore;
|
1038
|
+
}
|
1039
|
+
if (typeof this.message !== 'undefined') {
|
1040
|
+
toReturn['message'] = this.message;
|
782
1041
|
}
|
783
1042
|
return toReturn;
|
784
1043
|
}
|
785
1044
|
}
|
786
|
-
export class
|
1045
|
+
export class Bookmastersortoptions {
|
787
1046
|
static fromProto(proto) {
|
788
|
-
let m = new
|
1047
|
+
let m = new Bookmastersortoptions();
|
789
1048
|
m = Object.assign(m, proto);
|
1049
|
+
if (proto.direction) {
|
1050
|
+
m.direction = enumStringToValue(e.SortDirection, proto.direction);
|
1051
|
+
}
|
1052
|
+
if (proto.field) {
|
1053
|
+
m.field = enumStringToValue(e.Bookmastersortfield, proto.field);
|
1054
|
+
}
|
790
1055
|
return m;
|
791
1056
|
}
|
792
1057
|
constructor(kwargs) {
|
@@ -797,19 +1062,19 @@ export class GetSBueckertToDoListItemRequest {
|
|
797
1062
|
}
|
798
1063
|
toApiJson() {
|
799
1064
|
const toReturn = {};
|
800
|
-
if (typeof this.
|
801
|
-
toReturn['
|
1065
|
+
if (typeof this.direction !== 'undefined') {
|
1066
|
+
toReturn['direction'] = this.direction;
|
1067
|
+
}
|
1068
|
+
if (typeof this.field !== 'undefined') {
|
1069
|
+
toReturn['field'] = this.field;
|
802
1070
|
}
|
803
1071
|
return toReturn;
|
804
1072
|
}
|
805
1073
|
}
|
806
|
-
export class
|
1074
|
+
export class Bookmastersummaryrequest {
|
807
1075
|
static fromProto(proto) {
|
808
|
-
let m = new
|
1076
|
+
let m = new Bookmastersummaryrequest();
|
809
1077
|
m = Object.assign(m, proto);
|
810
|
-
if (proto.item) {
|
811
|
-
m.item = SBueckertToDoListItem.fromProto(proto.item);
|
812
|
-
}
|
813
1078
|
return m;
|
814
1079
|
}
|
815
1080
|
constructor(kwargs) {
|
@@ -820,16 +1085,25 @@ export class GetSBueckertToDoListItemResponse {
|
|
820
1085
|
}
|
821
1086
|
toApiJson() {
|
822
1087
|
const toReturn = {};
|
823
|
-
if (typeof this.item !== 'undefined' && this.item !== null) {
|
824
|
-
toReturn['item'] = 'toApiJson' in this.item ? this.item.toApiJson() : this.item;
|
825
|
-
}
|
826
1088
|
return toReturn;
|
827
1089
|
}
|
828
1090
|
}
|
829
|
-
export class
|
1091
|
+
export class Bookmastersummaryresponse {
|
830
1092
|
static fromProto(proto) {
|
831
|
-
let m = new
|
1093
|
+
let m = new Bookmastersummaryresponse();
|
832
1094
|
m = Object.assign(m, proto);
|
1095
|
+
if (proto.totalbooks) {
|
1096
|
+
m.totalbooks = parseInt(proto.totalbooks, 10);
|
1097
|
+
}
|
1098
|
+
if (proto.availablebooks) {
|
1099
|
+
m.availablebooks = parseInt(proto.availablebooks, 10);
|
1100
|
+
}
|
1101
|
+
if (proto.checkedoutbooks) {
|
1102
|
+
m.checkedoutbooks = parseInt(proto.checkedoutbooks, 10);
|
1103
|
+
}
|
1104
|
+
if (proto.overduebooks) {
|
1105
|
+
m.overduebooks = parseInt(proto.overduebooks, 10);
|
1106
|
+
}
|
833
1107
|
return m;
|
834
1108
|
}
|
835
1109
|
constructor(kwargs) {
|
@@ -840,19 +1114,25 @@ export class GetWHorrellTaskRequest {
|
|
840
1114
|
}
|
841
1115
|
toApiJson() {
|
842
1116
|
const toReturn = {};
|
843
|
-
if (typeof this.
|
844
|
-
toReturn['
|
1117
|
+
if (typeof this.totalbooks !== 'undefined') {
|
1118
|
+
toReturn['totalbooks'] = this.totalbooks;
|
1119
|
+
}
|
1120
|
+
if (typeof this.availablebooks !== 'undefined') {
|
1121
|
+
toReturn['availablebooks'] = this.availablebooks;
|
1122
|
+
}
|
1123
|
+
if (typeof this.checkedoutbooks !== 'undefined') {
|
1124
|
+
toReturn['checkedoutbooks'] = this.checkedoutbooks;
|
1125
|
+
}
|
1126
|
+
if (typeof this.overduebooks !== 'undefined') {
|
1127
|
+
toReturn['overduebooks'] = this.overduebooks;
|
845
1128
|
}
|
846
1129
|
return toReturn;
|
847
1130
|
}
|
848
1131
|
}
|
849
|
-
export class
|
1132
|
+
export class Bookreturnfilter {
|
850
1133
|
static fromProto(proto) {
|
851
|
-
let m = new
|
1134
|
+
let m = new Bookreturnfilter();
|
852
1135
|
m = Object.assign(m, proto);
|
853
|
-
if (proto.task) {
|
854
|
-
m.task = WHorrellTask.fromProto(proto.task);
|
855
|
-
}
|
856
1136
|
return m;
|
857
1137
|
}
|
858
1138
|
constructor(kwargs) {
|
@@ -863,16 +1143,28 @@ export class GetWHorrellTaskResponse {
|
|
863
1143
|
}
|
864
1144
|
toApiJson() {
|
865
1145
|
const toReturn = {};
|
866
|
-
if (typeof this.
|
867
|
-
toReturn['
|
1146
|
+
if (typeof this.employeeId !== 'undefined') {
|
1147
|
+
toReturn['employeeId'] = this.employeeId;
|
1148
|
+
}
|
1149
|
+
if (typeof this.bookId !== 'undefined') {
|
1150
|
+
toReturn['bookId'] = this.bookId;
|
1151
|
+
}
|
1152
|
+
if (typeof this.action !== 'undefined') {
|
1153
|
+
toReturn['action'] = this.action;
|
868
1154
|
}
|
869
1155
|
return toReturn;
|
870
1156
|
}
|
871
1157
|
}
|
872
|
-
export class
|
1158
|
+
export class Bookreturnsortoptions {
|
873
1159
|
static fromProto(proto) {
|
874
|
-
let m = new
|
1160
|
+
let m = new Bookreturnsortoptions();
|
875
1161
|
m = Object.assign(m, proto);
|
1162
|
+
if (proto.direction) {
|
1163
|
+
m.direction = enumStringToValue(e.SortDirection, proto.direction);
|
1164
|
+
}
|
1165
|
+
if (proto.field) {
|
1166
|
+
m.field = enumStringToValue(e.Bookreturnsortfield, proto.field);
|
1167
|
+
}
|
876
1168
|
return m;
|
877
1169
|
}
|
878
1170
|
constructor(kwargs) {
|
@@ -883,27 +1175,18 @@ export class HdoTodoItem {
|
|
883
1175
|
}
|
884
1176
|
toApiJson() {
|
885
1177
|
const toReturn = {};
|
886
|
-
if (typeof this.
|
887
|
-
toReturn['
|
1178
|
+
if (typeof this.direction !== 'undefined') {
|
1179
|
+
toReturn['direction'] = this.direction;
|
888
1180
|
}
|
889
|
-
if (typeof this.
|
890
|
-
toReturn['
|
891
|
-
}
|
892
|
-
if (typeof this.description !== 'undefined') {
|
893
|
-
toReturn['description'] = this.description;
|
894
|
-
}
|
895
|
-
if (typeof this.completed !== 'undefined') {
|
896
|
-
toReturn['completed'] = this.completed;
|
897
|
-
}
|
898
|
-
if (typeof this.deleted !== 'undefined') {
|
899
|
-
toReturn['deleted'] = this.deleted;
|
1181
|
+
if (typeof this.field !== 'undefined') {
|
1182
|
+
toReturn['field'] = this.field;
|
900
1183
|
}
|
901
1184
|
return toReturn;
|
902
1185
|
}
|
903
1186
|
}
|
904
|
-
export class
|
1187
|
+
export class DeleteAdminLibraryUserRequest {
|
905
1188
|
static fromProto(proto) {
|
906
|
-
let m = new
|
1189
|
+
let m = new DeleteAdminLibraryUserRequest();
|
907
1190
|
m = Object.assign(m, proto);
|
908
1191
|
return m;
|
909
1192
|
}
|
@@ -915,22 +1198,16 @@ export class IOlaleyeCreateTaskRequest {
|
|
915
1198
|
}
|
916
1199
|
toApiJson() {
|
917
1200
|
const toReturn = {};
|
918
|
-
if (typeof this.
|
919
|
-
toReturn['
|
920
|
-
}
|
921
|
-
if (typeof this.description !== 'undefined') {
|
922
|
-
toReturn['description'] = this.description;
|
1201
|
+
if (typeof this.emailId !== 'undefined') {
|
1202
|
+
toReturn['emailId'] = this.emailId;
|
923
1203
|
}
|
924
1204
|
return toReturn;
|
925
1205
|
}
|
926
1206
|
}
|
927
|
-
export class
|
1207
|
+
export class DeleteAdminLibraryUserResponse {
|
928
1208
|
static fromProto(proto) {
|
929
|
-
let m = new
|
1209
|
+
let m = new DeleteAdminLibraryUserResponse();
|
930
1210
|
m = Object.assign(m, proto);
|
931
|
-
if (proto.id) {
|
932
|
-
m.id = parseInt(proto.id, 10);
|
933
|
-
}
|
934
1211
|
return m;
|
935
1212
|
}
|
936
1213
|
constructor(kwargs) {
|
@@ -941,15 +1218,18 @@ export class IOlaleyeCreateTaskResponse {
|
|
941
1218
|
}
|
942
1219
|
toApiJson() {
|
943
1220
|
const toReturn = {};
|
944
|
-
if (typeof this.
|
945
|
-
toReturn['
|
1221
|
+
if (typeof this.success !== 'undefined') {
|
1222
|
+
toReturn['success'] = this.success;
|
1223
|
+
}
|
1224
|
+
if (typeof this.message !== 'undefined') {
|
1225
|
+
toReturn['message'] = this.message;
|
946
1226
|
}
|
947
1227
|
return toReturn;
|
948
1228
|
}
|
949
1229
|
}
|
950
|
-
export class
|
1230
|
+
export class DeleteTaxiUserDataRequest {
|
951
1231
|
static fromProto(proto) {
|
952
|
-
let m = new
|
1232
|
+
let m = new DeleteTaxiUserDataRequest();
|
953
1233
|
m = Object.assign(m, proto);
|
954
1234
|
return m;
|
955
1235
|
}
|
@@ -967,9 +1247,9 @@ export class IOlaleyeDeleteTaskRequest {
|
|
967
1247
|
return toReturn;
|
968
1248
|
}
|
969
1249
|
}
|
970
|
-
export class
|
1250
|
+
export class DeleteTaxiUserDataResponse {
|
971
1251
|
static fromProto(proto) {
|
972
|
-
let m = new
|
1252
|
+
let m = new DeleteTaxiUserDataResponse();
|
973
1253
|
m = Object.assign(m, proto);
|
974
1254
|
return m;
|
975
1255
|
}
|
@@ -981,15 +1261,21 @@ export class IOlaleyeDeleteTaskResponse {
|
|
981
1261
|
}
|
982
1262
|
toApiJson() {
|
983
1263
|
const toReturn = {};
|
1264
|
+
if (typeof this.deleteStatus !== 'undefined') {
|
1265
|
+
toReturn['deleteStatus'] = this.deleteStatus;
|
1266
|
+
}
|
1267
|
+
if (typeof this.id !== 'undefined') {
|
1268
|
+
toReturn['id'] = this.id;
|
1269
|
+
}
|
984
1270
|
return toReturn;
|
985
1271
|
}
|
986
1272
|
}
|
987
|
-
export class
|
1273
|
+
export class EditAdminLibraryUserRequest {
|
988
1274
|
static fromProto(proto) {
|
989
|
-
let m = new
|
1275
|
+
let m = new EditAdminLibraryUserRequest();
|
990
1276
|
m = Object.assign(m, proto);
|
991
|
-
if (proto.
|
992
|
-
m.
|
1277
|
+
if (proto.libraryedit) {
|
1278
|
+
m.libraryedit = LibraryAdminUserManangementRequest.fromProto(proto.libraryedit);
|
993
1279
|
}
|
994
1280
|
return m;
|
995
1281
|
}
|
@@ -1001,18 +1287,18 @@ export class IOlaleyeEditTaskRequest {
|
|
1001
1287
|
}
|
1002
1288
|
toApiJson() {
|
1003
1289
|
const toReturn = {};
|
1004
|
-
if (typeof this.
|
1005
|
-
toReturn['
|
1290
|
+
if (typeof this.libraryedit !== 'undefined' && this.libraryedit !== null) {
|
1291
|
+
toReturn['libraryedit'] = 'toApiJson' in this.libraryedit ? this.libraryedit.toApiJson() : this.libraryedit;
|
1006
1292
|
}
|
1007
1293
|
return toReturn;
|
1008
1294
|
}
|
1009
1295
|
}
|
1010
|
-
export class
|
1296
|
+
export class EditAdminLibraryUserResponse {
|
1011
1297
|
static fromProto(proto) {
|
1012
|
-
let m = new
|
1298
|
+
let m = new EditAdminLibraryUserResponse();
|
1013
1299
|
m = Object.assign(m, proto);
|
1014
|
-
if (proto.
|
1015
|
-
m.
|
1300
|
+
if (proto.editresponse) {
|
1301
|
+
m.editresponse = LibraryAdminUserManangementResponse.fromProto(proto.editresponse);
|
1016
1302
|
}
|
1017
1303
|
return m;
|
1018
1304
|
}
|
@@ -1024,16 +1310,25 @@ export class IOlaleyeEditTaskResponse {
|
|
1024
1310
|
}
|
1025
1311
|
toApiJson() {
|
1026
1312
|
const toReturn = {};
|
1027
|
-
if (typeof this.
|
1028
|
-
toReturn['
|
1313
|
+
if (typeof this.success !== 'undefined') {
|
1314
|
+
toReturn['success'] = this.success;
|
1315
|
+
}
|
1316
|
+
if (typeof this.message !== 'undefined') {
|
1317
|
+
toReturn['message'] = this.message;
|
1318
|
+
}
|
1319
|
+
if (typeof this.editresponse !== 'undefined' && this.editresponse !== null) {
|
1320
|
+
toReturn['editresponse'] = 'toApiJson' in this.editresponse ? this.editresponse.toApiJson() : this.editresponse;
|
1029
1321
|
}
|
1030
1322
|
return toReturn;
|
1031
1323
|
}
|
1032
1324
|
}
|
1033
|
-
export class
|
1325
|
+
export class EditTaxiUserDataRequest {
|
1034
1326
|
static fromProto(proto) {
|
1035
|
-
let m = new
|
1327
|
+
let m = new EditTaxiUserDataRequest();
|
1036
1328
|
m = Object.assign(m, proto);
|
1329
|
+
if (proto.edittaxiUserdata) {
|
1330
|
+
m.edittaxiUserdata = TaxiUserData.fromProto(proto.edittaxiUserdata);
|
1331
|
+
}
|
1037
1332
|
return m;
|
1038
1333
|
}
|
1039
1334
|
constructor(kwargs) {
|
@@ -1044,19 +1339,16 @@ export class IOlaleyeGetTaskRequest {
|
|
1044
1339
|
}
|
1045
1340
|
toApiJson() {
|
1046
1341
|
const toReturn = {};
|
1047
|
-
if (typeof this.
|
1048
|
-
toReturn['
|
1342
|
+
if (typeof this.edittaxiUserdata !== 'undefined' && this.edittaxiUserdata !== null) {
|
1343
|
+
toReturn['edittaxiUserdata'] = 'toApiJson' in this.edittaxiUserdata ? this.edittaxiUserdata.toApiJson() : this.edittaxiUserdata;
|
1049
1344
|
}
|
1050
1345
|
return toReturn;
|
1051
1346
|
}
|
1052
1347
|
}
|
1053
|
-
export class
|
1348
|
+
export class EditTaxiUserDataResponse {
|
1054
1349
|
static fromProto(proto) {
|
1055
|
-
let m = new
|
1350
|
+
let m = new EditTaxiUserDataResponse();
|
1056
1351
|
m = Object.assign(m, proto);
|
1057
|
-
if (proto.task) {
|
1058
|
-
m.task = IOlaleyeTask.fromProto(proto.task);
|
1059
|
-
}
|
1060
1352
|
return m;
|
1061
1353
|
}
|
1062
1354
|
constructor(kwargs) {
|
@@ -1067,16 +1359,25 @@ export class IOlaleyeGetTaskResponse {
|
|
1067
1359
|
}
|
1068
1360
|
toApiJson() {
|
1069
1361
|
const toReturn = {};
|
1070
|
-
if (typeof this.
|
1071
|
-
toReturn['
|
1362
|
+
if (typeof this.edittaxiStatus !== 'undefined') {
|
1363
|
+
toReturn['edittaxiStatus'] = this.edittaxiStatus;
|
1364
|
+
}
|
1365
|
+
if (typeof this.id !== 'undefined') {
|
1366
|
+
toReturn['id'] = this.id;
|
1367
|
+
}
|
1368
|
+
if (typeof this.message !== 'undefined') {
|
1369
|
+
toReturn['message'] = this.message;
|
1072
1370
|
}
|
1073
1371
|
return toReturn;
|
1074
1372
|
}
|
1075
1373
|
}
|
1076
|
-
export class
|
1374
|
+
export class FilterTaxiUserData {
|
1077
1375
|
static fromProto(proto) {
|
1078
|
-
let m = new
|
1376
|
+
let m = new FilterTaxiUserData();
|
1079
1377
|
m = Object.assign(m, proto);
|
1378
|
+
if (proto.phoneno) {
|
1379
|
+
m.phoneno = parseInt(proto.phoneno, 10);
|
1380
|
+
}
|
1080
1381
|
return m;
|
1081
1382
|
}
|
1082
1383
|
constructor(kwargs) {
|
@@ -1087,16 +1388,22 @@ export class IOlaleyeListTasksRequest {
|
|
1087
1388
|
}
|
1088
1389
|
toApiJson() {
|
1089
1390
|
const toReturn = {};
|
1391
|
+
if (typeof this.empname !== 'undefined') {
|
1392
|
+
toReturn['empname'] = this.empname;
|
1393
|
+
}
|
1394
|
+
if (typeof this.licenseno !== 'undefined') {
|
1395
|
+
toReturn['licenseno'] = this.licenseno;
|
1396
|
+
}
|
1397
|
+
if (typeof this.phoneno !== 'undefined') {
|
1398
|
+
toReturn['phoneno'] = this.phoneno;
|
1399
|
+
}
|
1090
1400
|
return toReturn;
|
1091
1401
|
}
|
1092
1402
|
}
|
1093
|
-
export class
|
1403
|
+
export class FilterTransactionReportData {
|
1094
1404
|
static fromProto(proto) {
|
1095
|
-
let m = new
|
1405
|
+
let m = new FilterTransactionReportData();
|
1096
1406
|
m = Object.assign(m, proto);
|
1097
|
-
if (proto.allTasks) {
|
1098
|
-
m.allTasks = proto.allTasks.map(IOlaleyeTask.fromProto);
|
1099
|
-
}
|
1100
1407
|
return m;
|
1101
1408
|
}
|
1102
1409
|
constructor(kwargs) {
|
@@ -1107,16 +1414,25 @@ export class IOlaleyeListTasksResponse {
|
|
1107
1414
|
}
|
1108
1415
|
toApiJson() {
|
1109
1416
|
const toReturn = {};
|
1110
|
-
if (typeof this.
|
1111
|
-
toReturn['
|
1417
|
+
if (typeof this.checkedOut !== 'undefined') {
|
1418
|
+
toReturn['checkedOut'] = this.checkedOut;
|
1419
|
+
}
|
1420
|
+
if (typeof this.returned !== 'undefined') {
|
1421
|
+
toReturn['returned'] = this.returned;
|
1112
1422
|
}
|
1113
1423
|
return toReturn;
|
1114
1424
|
}
|
1115
1425
|
}
|
1116
|
-
export class
|
1426
|
+
export class GetActiveUserListRequest {
|
1117
1427
|
static fromProto(proto) {
|
1118
|
-
let m = new
|
1428
|
+
let m = new GetActiveUserListRequest();
|
1119
1429
|
m = Object.assign(m, proto);
|
1430
|
+
if (proto.userFilter) {
|
1431
|
+
m.userFilter = UserFilter.fromProto(proto.userFilter);
|
1432
|
+
}
|
1433
|
+
if (proto.sortOptions) {
|
1434
|
+
m.sortOptions = proto.sortOptions.map(UserSortData.fromProto);
|
1435
|
+
}
|
1120
1436
|
return m;
|
1121
1437
|
}
|
1122
1438
|
constructor(kwargs) {
|
@@ -1127,28 +1443,31 @@ export class IOlaleyeTask {
|
|
1127
1443
|
}
|
1128
1444
|
toApiJson() {
|
1129
1445
|
const toReturn = {};
|
1130
|
-
if (typeof this.
|
1131
|
-
toReturn['
|
1446
|
+
if (typeof this.namespace !== 'undefined') {
|
1447
|
+
toReturn['namespace'] = this.namespace;
|
1132
1448
|
}
|
1133
|
-
if (typeof this.
|
1134
|
-
toReturn['
|
1449
|
+
if (typeof this.cursor !== 'undefined') {
|
1450
|
+
toReturn['cursor'] = this.cursor;
|
1135
1451
|
}
|
1136
|
-
if (typeof this.
|
1137
|
-
toReturn['
|
1452
|
+
if (typeof this.pageSize !== 'undefined') {
|
1453
|
+
toReturn['pageSize'] = this.pageSize;
|
1138
1454
|
}
|
1139
|
-
if (typeof this.
|
1140
|
-
toReturn['
|
1455
|
+
if (typeof this.userFilter !== 'undefined' && this.userFilter !== null) {
|
1456
|
+
toReturn['userFilter'] = 'toApiJson' in this.userFilter ? this.userFilter.toApiJson() : this.userFilter;
|
1141
1457
|
}
|
1142
|
-
if (typeof this.
|
1143
|
-
toReturn['
|
1458
|
+
if (typeof this.sortOptions !== 'undefined' && this.sortOptions !== null) {
|
1459
|
+
toReturn['sortOptions'] = 'toApiJson' in this.sortOptions ? this.sortOptions.toApiJson() : this.sortOptions;
|
1144
1460
|
}
|
1145
1461
|
return toReturn;
|
1146
1462
|
}
|
1147
1463
|
}
|
1148
|
-
export class
|
1464
|
+
export class GetActiveUserListResponse {
|
1149
1465
|
static fromProto(proto) {
|
1150
|
-
let m = new
|
1466
|
+
let m = new GetActiveUserListResponse();
|
1151
1467
|
m = Object.assign(m, proto);
|
1468
|
+
if (proto.users) {
|
1469
|
+
m.users = proto.users.map(GetActiveUserListResponseData.fromProto);
|
1470
|
+
}
|
1152
1471
|
return m;
|
1153
1472
|
}
|
1154
1473
|
constructor(kwargs) {
|
@@ -1159,15 +1478,24 @@ export class ListHdoTodoRequest {
|
|
1159
1478
|
}
|
1160
1479
|
toApiJson() {
|
1161
1480
|
const toReturn = {};
|
1481
|
+
if (typeof this.users !== 'undefined' && this.users !== null) {
|
1482
|
+
toReturn['users'] = 'toApiJson' in this.users ? this.users.toApiJson() : this.users;
|
1483
|
+
}
|
1484
|
+
if (typeof this.nextCursor !== 'undefined') {
|
1485
|
+
toReturn['nextCursor'] = this.nextCursor;
|
1486
|
+
}
|
1487
|
+
if (typeof this.hasMore !== 'undefined') {
|
1488
|
+
toReturn['hasMore'] = this.hasMore;
|
1489
|
+
}
|
1162
1490
|
return toReturn;
|
1163
1491
|
}
|
1164
1492
|
}
|
1165
|
-
export class
|
1493
|
+
export class GetActiveUserListResponseData {
|
1166
1494
|
static fromProto(proto) {
|
1167
|
-
let m = new
|
1495
|
+
let m = new GetActiveUserListResponseData();
|
1168
1496
|
m = Object.assign(m, proto);
|
1169
|
-
if (proto.
|
1170
|
-
m.
|
1497
|
+
if (proto.publicKeys) {
|
1498
|
+
m.publicKeys = proto.publicKeys.map(GetUserListId.fromProto);
|
1171
1499
|
}
|
1172
1500
|
return m;
|
1173
1501
|
}
|
@@ -1179,15 +1507,48 @@ export class ListHdoTodoResponse {
|
|
1179
1507
|
}
|
1180
1508
|
toApiJson() {
|
1181
1509
|
const toReturn = {};
|
1182
|
-
if (typeof this.
|
1183
|
-
toReturn['
|
1510
|
+
if (typeof this.userId !== 'undefined') {
|
1511
|
+
toReturn['userId'] = this.userId;
|
1512
|
+
}
|
1513
|
+
if (typeof this.email !== 'undefined') {
|
1514
|
+
toReturn['email'] = this.email;
|
1515
|
+
}
|
1516
|
+
if (typeof this.greetingName !== 'undefined') {
|
1517
|
+
toReturn['greetingName'] = this.greetingName;
|
1518
|
+
}
|
1519
|
+
if (typeof this.languageCode !== 'undefined') {
|
1520
|
+
toReturn['languageCode'] = this.languageCode;
|
1521
|
+
}
|
1522
|
+
if (typeof this.created !== 'undefined') {
|
1523
|
+
toReturn['created'] = this.created;
|
1524
|
+
}
|
1525
|
+
if (typeof this.updated !== 'undefined') {
|
1526
|
+
toReturn['updated'] = this.updated;
|
1527
|
+
}
|
1528
|
+
if (typeof this.emailVerified !== 'undefined') {
|
1529
|
+
toReturn['emailVerified'] = this.emailVerified;
|
1530
|
+
}
|
1531
|
+
if (typeof this.roles !== 'undefined') {
|
1532
|
+
toReturn['roles'] = this.roles;
|
1533
|
+
}
|
1534
|
+
if (typeof this.lastLogin !== 'undefined') {
|
1535
|
+
toReturn['lastLogin'] = this.lastLogin;
|
1536
|
+
}
|
1537
|
+
if (typeof this.publicKeys !== 'undefined' && this.publicKeys !== null) {
|
1538
|
+
toReturn['publicKeys'] = 'toApiJson' in this.publicKeys ? this.publicKeys.toApiJson() : this.publicKeys;
|
1539
|
+
}
|
1540
|
+
if (typeof this.firstName !== 'undefined') {
|
1541
|
+
toReturn['firstName'] = this.firstName;
|
1542
|
+
}
|
1543
|
+
if (typeof this.lastName !== 'undefined') {
|
1544
|
+
toReturn['lastName'] = this.lastName;
|
1184
1545
|
}
|
1185
1546
|
return toReturn;
|
1186
1547
|
}
|
1187
1548
|
}
|
1188
|
-
export class
|
1549
|
+
export class GetByIdTaxiUserDataRequest {
|
1189
1550
|
static fromProto(proto) {
|
1190
|
-
let m = new
|
1551
|
+
let m = new GetByIdTaxiUserDataRequest();
|
1191
1552
|
m = Object.assign(m, proto);
|
1192
1553
|
return m;
|
1193
1554
|
}
|
@@ -1199,18 +1560,18 @@ export class ListSBueckertToDoListItemRequest {
|
|
1199
1560
|
}
|
1200
1561
|
toApiJson() {
|
1201
1562
|
const toReturn = {};
|
1202
|
-
if (typeof this.
|
1203
|
-
toReturn['
|
1563
|
+
if (typeof this.id !== 'undefined') {
|
1564
|
+
toReturn['id'] = this.id;
|
1204
1565
|
}
|
1205
1566
|
return toReturn;
|
1206
1567
|
}
|
1207
1568
|
}
|
1208
|
-
export class
|
1569
|
+
export class GetByIdTaxiUserDataResponse {
|
1209
1570
|
static fromProto(proto) {
|
1210
|
-
let m = new
|
1571
|
+
let m = new GetByIdTaxiUserDataResponse();
|
1211
1572
|
m = Object.assign(m, proto);
|
1212
|
-
if (proto.
|
1213
|
-
m.
|
1573
|
+
if (proto.taxidatabyid) {
|
1574
|
+
m.taxidatabyid = TaxiUserData.fromProto(proto.taxidatabyid);
|
1214
1575
|
}
|
1215
1576
|
return m;
|
1216
1577
|
}
|
@@ -1222,15 +1583,15 @@ export class ListSBueckertToDoListItemResponse {
|
|
1222
1583
|
}
|
1223
1584
|
toApiJson() {
|
1224
1585
|
const toReturn = {};
|
1225
|
-
if (typeof this.
|
1226
|
-
toReturn['
|
1586
|
+
if (typeof this.taxidatabyid !== 'undefined' && this.taxidatabyid !== null) {
|
1587
|
+
toReturn['taxidatabyid'] = 'toApiJson' in this.taxidatabyid ? this.taxidatabyid.toApiJson() : this.taxidatabyid;
|
1227
1588
|
}
|
1228
1589
|
return toReturn;
|
1229
1590
|
}
|
1230
1591
|
}
|
1231
|
-
export class
|
1592
|
+
export class GetByMailIdAdminLibraryUserRequest {
|
1232
1593
|
static fromProto(proto) {
|
1233
|
-
let m = new
|
1594
|
+
let m = new GetByMailIdAdminLibraryUserRequest();
|
1234
1595
|
m = Object.assign(m, proto);
|
1235
1596
|
return m;
|
1236
1597
|
}
|
@@ -1242,15 +1603,18 @@ export class ListWHorrellTasksRequest {
|
|
1242
1603
|
}
|
1243
1604
|
toApiJson() {
|
1244
1605
|
const toReturn = {};
|
1606
|
+
if (typeof this.emailId !== 'undefined') {
|
1607
|
+
toReturn['emailId'] = this.emailId;
|
1608
|
+
}
|
1245
1609
|
return toReturn;
|
1246
1610
|
}
|
1247
1611
|
}
|
1248
|
-
export class
|
1612
|
+
export class GetByMailIdAdminLibraryUserResponse {
|
1249
1613
|
static fromProto(proto) {
|
1250
|
-
let m = new
|
1614
|
+
let m = new GetByMailIdAdminLibraryUserResponse();
|
1251
1615
|
m = Object.assign(m, proto);
|
1252
|
-
if (proto.
|
1253
|
-
m.
|
1616
|
+
if (proto.responsedata) {
|
1617
|
+
m.responsedata = LibraryAdminUserManangementResponse.fromProto(proto.responsedata);
|
1254
1618
|
}
|
1255
1619
|
return m;
|
1256
1620
|
}
|
@@ -1262,18 +1626,24 @@ export class ListWHorrellTasksResponse {
|
|
1262
1626
|
}
|
1263
1627
|
toApiJson() {
|
1264
1628
|
const toReturn = {};
|
1265
|
-
if (typeof this.
|
1266
|
-
toReturn['
|
1629
|
+
if (typeof this.status !== 'undefined') {
|
1630
|
+
toReturn['status'] = this.status;
|
1631
|
+
}
|
1632
|
+
if (typeof this.message !== 'undefined') {
|
1633
|
+
toReturn['message'] = this.message;
|
1634
|
+
}
|
1635
|
+
if (typeof this.responsedata !== 'undefined' && this.responsedata !== null) {
|
1636
|
+
toReturn['responsedata'] = 'toApiJson' in this.responsedata ? this.responsedata.toApiJson() : this.responsedata;
|
1267
1637
|
}
|
1268
1638
|
return toReturn;
|
1269
1639
|
}
|
1270
1640
|
}
|
1271
|
-
export class
|
1641
|
+
export class GetCheckedOutDataRequest {
|
1272
1642
|
static fromProto(proto) {
|
1273
|
-
let m = new
|
1643
|
+
let m = new GetCheckedOutDataRequest();
|
1274
1644
|
m = Object.assign(m, proto);
|
1275
|
-
if (proto.
|
1276
|
-
m.
|
1645
|
+
if (proto.pageSize) {
|
1646
|
+
m.pageSize = parseInt(proto.pageSize, 10);
|
1277
1647
|
}
|
1278
1648
|
return m;
|
1279
1649
|
}
|
@@ -1285,16 +1655,22 @@ export class MMugotCreateTaskRequest {
|
|
1285
1655
|
}
|
1286
1656
|
toApiJson() {
|
1287
1657
|
const toReturn = {};
|
1288
|
-
if (typeof this.
|
1289
|
-
toReturn['
|
1658
|
+
if (typeof this.cursor !== 'undefined') {
|
1659
|
+
toReturn['cursor'] = this.cursor;
|
1660
|
+
}
|
1661
|
+
if (typeof this.pageSize !== 'undefined') {
|
1662
|
+
toReturn['pageSize'] = this.pageSize;
|
1290
1663
|
}
|
1291
1664
|
return toReturn;
|
1292
1665
|
}
|
1293
1666
|
}
|
1294
|
-
export class
|
1667
|
+
export class GetCheckedOutDataResponse {
|
1295
1668
|
static fromProto(proto) {
|
1296
|
-
let m = new
|
1669
|
+
let m = new GetCheckedOutDataResponse();
|
1297
1670
|
m = Object.assign(m, proto);
|
1671
|
+
if (proto.bookCheckedOutData) {
|
1672
|
+
m.bookCheckedOutData = proto.bookCheckedOutData.map(BookCheckedOutData.fromProto);
|
1673
|
+
}
|
1298
1674
|
return m;
|
1299
1675
|
}
|
1300
1676
|
constructor(kwargs) {
|
@@ -1305,16 +1681,25 @@ export class MMugotCreateTaskResponse {
|
|
1305
1681
|
}
|
1306
1682
|
toApiJson() {
|
1307
1683
|
const toReturn = {};
|
1308
|
-
if (typeof this.
|
1309
|
-
toReturn['
|
1684
|
+
if (typeof this.bookCheckedOutData !== 'undefined' && this.bookCheckedOutData !== null) {
|
1685
|
+
toReturn['bookCheckedOutData'] = 'toApiJson' in this.bookCheckedOutData ? this.bookCheckedOutData.toApiJson() : this.bookCheckedOutData;
|
1686
|
+
}
|
1687
|
+
if (typeof this.nextCursor !== 'undefined') {
|
1688
|
+
toReturn['nextCursor'] = this.nextCursor;
|
1689
|
+
}
|
1690
|
+
if (typeof this.hasMore !== 'undefined') {
|
1691
|
+
toReturn['hasMore'] = this.hasMore;
|
1310
1692
|
}
|
1311
1693
|
return toReturn;
|
1312
1694
|
}
|
1313
1695
|
}
|
1314
|
-
export class
|
1696
|
+
export class GetReturnedDataRequest {
|
1315
1697
|
static fromProto(proto) {
|
1316
|
-
let m = new
|
1698
|
+
let m = new GetReturnedDataRequest();
|
1317
1699
|
m = Object.assign(m, proto);
|
1700
|
+
if (proto.pageSize) {
|
1701
|
+
m.pageSize = parseInt(proto.pageSize, 10);
|
1702
|
+
}
|
1318
1703
|
return m;
|
1319
1704
|
}
|
1320
1705
|
constructor(kwargs) {
|
@@ -1325,16 +1710,22 @@ export class MMugotDeleteTaskRequest {
|
|
1325
1710
|
}
|
1326
1711
|
toApiJson() {
|
1327
1712
|
const toReturn = {};
|
1328
|
-
if (typeof this.
|
1329
|
-
toReturn['
|
1713
|
+
if (typeof this.cursor !== 'undefined') {
|
1714
|
+
toReturn['cursor'] = this.cursor;
|
1715
|
+
}
|
1716
|
+
if (typeof this.pageSize !== 'undefined') {
|
1717
|
+
toReturn['pageSize'] = this.pageSize;
|
1330
1718
|
}
|
1331
1719
|
return toReturn;
|
1332
1720
|
}
|
1333
1721
|
}
|
1334
|
-
export class
|
1722
|
+
export class GetReturnedDataResponse {
|
1335
1723
|
static fromProto(proto) {
|
1336
|
-
let m = new
|
1724
|
+
let m = new GetReturnedDataResponse();
|
1337
1725
|
m = Object.assign(m, proto);
|
1726
|
+
if (proto.bookReturnData) {
|
1727
|
+
m.bookReturnData = proto.bookReturnData.map(BookReturnedData.fromProto);
|
1728
|
+
}
|
1338
1729
|
return m;
|
1339
1730
|
}
|
1340
1731
|
constructor(kwargs) {
|
@@ -1345,18 +1736,27 @@ export class MMugotGetTaskRequest {
|
|
1345
1736
|
}
|
1346
1737
|
toApiJson() {
|
1347
1738
|
const toReturn = {};
|
1348
|
-
if (typeof this.
|
1349
|
-
toReturn['
|
1739
|
+
if (typeof this.bookReturnData !== 'undefined' && this.bookReturnData !== null) {
|
1740
|
+
toReturn['bookReturnData'] = 'toApiJson' in this.bookReturnData ? this.bookReturnData.toApiJson() : this.bookReturnData;
|
1741
|
+
}
|
1742
|
+
if (typeof this.nextCursor !== 'undefined') {
|
1743
|
+
toReturn['nextCursor'] = this.nextCursor;
|
1744
|
+
}
|
1745
|
+
if (typeof this.hasMore !== 'undefined') {
|
1746
|
+
toReturn['hasMore'] = this.hasMore;
|
1350
1747
|
}
|
1351
1748
|
return toReturn;
|
1352
1749
|
}
|
1353
1750
|
}
|
1354
|
-
export class
|
1751
|
+
export class GetTaxiUserDataPaginationRequest {
|
1355
1752
|
static fromProto(proto) {
|
1356
|
-
let m = new
|
1753
|
+
let m = new GetTaxiUserDataPaginationRequest();
|
1357
1754
|
m = Object.assign(m, proto);
|
1358
|
-
if (proto.
|
1359
|
-
m.
|
1755
|
+
if (proto.pageSize) {
|
1756
|
+
m.pageSize = parseInt(proto.pageSize, 10);
|
1757
|
+
}
|
1758
|
+
if (proto.filters) {
|
1759
|
+
m.filters = FilterTaxiUserData.fromProto(proto.filters);
|
1360
1760
|
}
|
1361
1761
|
return m;
|
1362
1762
|
}
|
@@ -1368,16 +1768,25 @@ export class MMugotGetTaskResponse {
|
|
1368
1768
|
}
|
1369
1769
|
toApiJson() {
|
1370
1770
|
const toReturn = {};
|
1371
|
-
if (typeof this.
|
1372
|
-
toReturn['
|
1771
|
+
if (typeof this.cursor !== 'undefined') {
|
1772
|
+
toReturn['cursor'] = this.cursor;
|
1773
|
+
}
|
1774
|
+
if (typeof this.pageSize !== 'undefined') {
|
1775
|
+
toReturn['pageSize'] = this.pageSize;
|
1776
|
+
}
|
1777
|
+
if (typeof this.filters !== 'undefined' && this.filters !== null) {
|
1778
|
+
toReturn['filters'] = 'toApiJson' in this.filters ? this.filters.toApiJson() : this.filters;
|
1373
1779
|
}
|
1374
1780
|
return toReturn;
|
1375
1781
|
}
|
1376
1782
|
}
|
1377
|
-
export class
|
1783
|
+
export class GetTaxiUserDataPaginationResponse {
|
1378
1784
|
static fromProto(proto) {
|
1379
|
-
let m = new
|
1785
|
+
let m = new GetTaxiUserDataPaginationResponse();
|
1380
1786
|
m = Object.assign(m, proto);
|
1787
|
+
if (proto.taxarrUserdata) {
|
1788
|
+
m.taxarrUserdata = proto.taxarrUserdata.map(TaxiUserData.fromProto);
|
1789
|
+
}
|
1381
1790
|
return m;
|
1382
1791
|
}
|
1383
1792
|
constructor(kwargs) {
|
@@ -1388,16 +1797,25 @@ export class MMugotListTasksRequest {
|
|
1388
1797
|
}
|
1389
1798
|
toApiJson() {
|
1390
1799
|
const toReturn = {};
|
1800
|
+
if (typeof this.taxarrUserdata !== 'undefined' && this.taxarrUserdata !== null) {
|
1801
|
+
toReturn['taxarrUserdata'] = 'toApiJson' in this.taxarrUserdata ? this.taxarrUserdata.toApiJson() : this.taxarrUserdata;
|
1802
|
+
}
|
1803
|
+
if (typeof this.nextCursor !== 'undefined') {
|
1804
|
+
toReturn['nextCursor'] = this.nextCursor;
|
1805
|
+
}
|
1806
|
+
if (typeof this.hasMore !== 'undefined') {
|
1807
|
+
toReturn['hasMore'] = this.hasMore;
|
1808
|
+
}
|
1809
|
+
if (typeof this.message !== 'undefined') {
|
1810
|
+
toReturn['message'] = this.message;
|
1811
|
+
}
|
1391
1812
|
return toReturn;
|
1392
1813
|
}
|
1393
1814
|
}
|
1394
|
-
export class
|
1815
|
+
export class GetUserListId {
|
1395
1816
|
static fromProto(proto) {
|
1396
|
-
let m = new
|
1817
|
+
let m = new GetUserListId();
|
1397
1818
|
m = Object.assign(m, proto);
|
1398
|
-
if (proto.tasks) {
|
1399
|
-
m.tasks = proto.tasks.map(MMugotTask.fromProto);
|
1400
|
-
}
|
1401
1819
|
return m;
|
1402
1820
|
}
|
1403
1821
|
constructor(kwargs) {
|
@@ -1408,18 +1826,21 @@ export class MMugotListTasksResponse {
|
|
1408
1826
|
}
|
1409
1827
|
toApiJson() {
|
1410
1828
|
const toReturn = {};
|
1411
|
-
if (typeof this.
|
1412
|
-
toReturn['
|
1829
|
+
if (typeof this.id !== 'undefined') {
|
1830
|
+
toReturn['id'] = this.id;
|
1831
|
+
}
|
1832
|
+
if (typeof this.key !== 'undefined') {
|
1833
|
+
toReturn['key'] = this.key;
|
1413
1834
|
}
|
1414
1835
|
return toReturn;
|
1415
1836
|
}
|
1416
1837
|
}
|
1417
|
-
export class
|
1838
|
+
export class LibraryAdminUserManangementRequest {
|
1418
1839
|
static fromProto(proto) {
|
1419
|
-
let m = new
|
1840
|
+
let m = new LibraryAdminUserManangementRequest();
|
1420
1841
|
m = Object.assign(m, proto);
|
1421
|
-
if (proto.
|
1422
|
-
m.
|
1842
|
+
if (proto.pageAccess) {
|
1843
|
+
m.pageAccess = proto.pageAccess.map(Pageaccess.fromProto);
|
1423
1844
|
}
|
1424
1845
|
return m;
|
1425
1846
|
}
|
@@ -1431,31 +1852,28 @@ export class MMugotTask {
|
|
1431
1852
|
}
|
1432
1853
|
toApiJson() {
|
1433
1854
|
const toReturn = {};
|
1434
|
-
if (typeof this.
|
1435
|
-
toReturn['
|
1855
|
+
if (typeof this.emailId !== 'undefined') {
|
1856
|
+
toReturn['emailId'] = this.emailId;
|
1436
1857
|
}
|
1437
|
-
if (typeof this.
|
1438
|
-
toReturn['
|
1858
|
+
if (typeof this.role !== 'undefined') {
|
1859
|
+
toReturn['role'] = this.role;
|
1439
1860
|
}
|
1440
|
-
if (typeof this.
|
1441
|
-
toReturn['
|
1442
|
-
}
|
1443
|
-
if (typeof this.taskId !== 'undefined') {
|
1444
|
-
toReturn['taskId'] = this.taskId;
|
1445
|
-
}
|
1446
|
-
if (typeof this.isDeleted !== 'undefined') {
|
1447
|
-
toReturn['isDeleted'] = this.isDeleted;
|
1861
|
+
if (typeof this.status !== 'undefined') {
|
1862
|
+
toReturn['status'] = this.status;
|
1448
1863
|
}
|
1449
|
-
if (typeof this.
|
1450
|
-
toReturn['
|
1864
|
+
if (typeof this.pageAccess !== 'undefined' && this.pageAccess !== null) {
|
1865
|
+
toReturn['pageAccess'] = 'toApiJson' in this.pageAccess ? this.pageAccess.toApiJson() : this.pageAccess;
|
1451
1866
|
}
|
1452
1867
|
return toReturn;
|
1453
1868
|
}
|
1454
1869
|
}
|
1455
|
-
export class
|
1870
|
+
export class LibraryAdminUserManangementResponse {
|
1456
1871
|
static fromProto(proto) {
|
1457
|
-
let m = new
|
1872
|
+
let m = new LibraryAdminUserManangementResponse();
|
1458
1873
|
m = Object.assign(m, proto);
|
1874
|
+
if (proto.pageAccess) {
|
1875
|
+
m.pageAccess = proto.pageAccess.map(Pageaccess.fromProto);
|
1876
|
+
}
|
1459
1877
|
return m;
|
1460
1878
|
}
|
1461
1879
|
constructor(kwargs) {
|
@@ -1466,15 +1884,24 @@ export class MMugotUpdateTaskRequest {
|
|
1466
1884
|
}
|
1467
1885
|
toApiJson() {
|
1468
1886
|
const toReturn = {};
|
1469
|
-
if (typeof this.
|
1470
|
-
toReturn['
|
1887
|
+
if (typeof this.emailId !== 'undefined') {
|
1888
|
+
toReturn['emailId'] = this.emailId;
|
1889
|
+
}
|
1890
|
+
if (typeof this.role !== 'undefined') {
|
1891
|
+
toReturn['role'] = this.role;
|
1892
|
+
}
|
1893
|
+
if (typeof this.status !== 'undefined') {
|
1894
|
+
toReturn['status'] = this.status;
|
1895
|
+
}
|
1896
|
+
if (typeof this.pageAccess !== 'undefined' && this.pageAccess !== null) {
|
1897
|
+
toReturn['pageAccess'] = 'toApiJson' in this.pageAccess ? this.pageAccess.toApiJson() : this.pageAccess;
|
1471
1898
|
}
|
1472
1899
|
return toReturn;
|
1473
1900
|
}
|
1474
1901
|
}
|
1475
|
-
export class
|
1902
|
+
export class Pageaccess {
|
1476
1903
|
static fromProto(proto) {
|
1477
|
-
let m = new
|
1904
|
+
let m = new Pageaccess();
|
1478
1905
|
m = Object.assign(m, proto);
|
1479
1906
|
return m;
|
1480
1907
|
}
|
@@ -1486,15 +1913,33 @@ export class MMugotUpdateTaskResponse {
|
|
1486
1913
|
}
|
1487
1914
|
toApiJson() {
|
1488
1915
|
const toReturn = {};
|
1916
|
+
if (typeof this.pagetitle !== 'undefined') {
|
1917
|
+
toReturn['pagetitle'] = this.pagetitle;
|
1918
|
+
}
|
1919
|
+
if (typeof this.create !== 'undefined') {
|
1920
|
+
toReturn['create'] = this.create;
|
1921
|
+
}
|
1922
|
+
if (typeof this.update !== 'undefined') {
|
1923
|
+
toReturn['update'] = this.update;
|
1924
|
+
}
|
1925
|
+
if (typeof this.delete !== 'undefined') {
|
1926
|
+
toReturn['delete'] = this.delete;
|
1927
|
+
}
|
1928
|
+
if (typeof this.view !== 'undefined') {
|
1929
|
+
toReturn['view'] = this.view;
|
1930
|
+
}
|
1489
1931
|
return toReturn;
|
1490
1932
|
}
|
1491
1933
|
}
|
1492
|
-
export class
|
1934
|
+
export class TaxiUserData {
|
1493
1935
|
static fromProto(proto) {
|
1494
|
-
let m = new
|
1936
|
+
let m = new TaxiUserData();
|
1495
1937
|
m = Object.assign(m, proto);
|
1496
|
-
if (proto.
|
1497
|
-
m.
|
1938
|
+
if (proto.phoneno) {
|
1939
|
+
m.phoneno = parseInt(proto.phoneno, 10);
|
1940
|
+
}
|
1941
|
+
if (proto.experience) {
|
1942
|
+
m.experience = parseInt(proto.experience, 10);
|
1498
1943
|
}
|
1499
1944
|
return m;
|
1500
1945
|
}
|
@@ -1506,33 +1951,48 @@ export class NValleCreateTaskRequest {
|
|
1506
1951
|
}
|
1507
1952
|
toApiJson() {
|
1508
1953
|
const toReturn = {};
|
1509
|
-
if (typeof this.
|
1510
|
-
toReturn['
|
1954
|
+
if (typeof this.id !== 'undefined') {
|
1955
|
+
toReturn['id'] = this.id;
|
1956
|
+
}
|
1957
|
+
if (typeof this.empcode !== 'undefined') {
|
1958
|
+
toReturn['empcode'] = this.empcode;
|
1959
|
+
}
|
1960
|
+
if (typeof this.empname !== 'undefined') {
|
1961
|
+
toReturn['empname'] = this.empname;
|
1962
|
+
}
|
1963
|
+
if (typeof this.address !== 'undefined') {
|
1964
|
+
toReturn['address'] = this.address;
|
1965
|
+
}
|
1966
|
+
if (typeof this.licenseno !== 'undefined') {
|
1967
|
+
toReturn['licenseno'] = this.licenseno;
|
1511
1968
|
}
|
1512
|
-
if (typeof this.
|
1513
|
-
toReturn['
|
1969
|
+
if (typeof this.phoneno !== 'undefined') {
|
1970
|
+
toReturn['phoneno'] = this.phoneno;
|
1514
1971
|
}
|
1515
|
-
if (typeof this.
|
1516
|
-
toReturn['
|
1972
|
+
if (typeof this.experience !== 'undefined') {
|
1973
|
+
toReturn['experience'] = this.experience;
|
1517
1974
|
}
|
1518
|
-
if (typeof this.
|
1519
|
-
toReturn['
|
1975
|
+
if (typeof this.city !== 'undefined') {
|
1976
|
+
toReturn['city'] = this.city;
|
1977
|
+
}
|
1978
|
+
if (typeof this.state !== 'undefined') {
|
1979
|
+
toReturn['state'] = this.state;
|
1980
|
+
}
|
1981
|
+
if (typeof this.country !== 'undefined') {
|
1982
|
+
toReturn['country'] = this.country;
|
1520
1983
|
}
|
1521
1984
|
return toReturn;
|
1522
1985
|
}
|
1523
1986
|
}
|
1524
|
-
export class
|
1987
|
+
export class TaxiUserDataRequest {
|
1525
1988
|
static fromProto(proto) {
|
1526
|
-
let m = new
|
1989
|
+
let m = new TaxiUserDataRequest();
|
1527
1990
|
m = Object.assign(m, proto);
|
1528
|
-
if (proto.
|
1529
|
-
m.
|
1530
|
-
}
|
1531
|
-
if (proto.created) {
|
1532
|
-
m.created = new Date(proto.created);
|
1991
|
+
if (proto.phoneno) {
|
1992
|
+
m.phoneno = parseInt(proto.phoneno, 10);
|
1533
1993
|
}
|
1534
|
-
if (proto.
|
1535
|
-
m.
|
1994
|
+
if (proto.experience) {
|
1995
|
+
m.experience = parseInt(proto.experience, 10);
|
1536
1996
|
}
|
1537
1997
|
return m;
|
1538
1998
|
}
|
@@ -1547,31 +2007,46 @@ export class NValleCreateTaskResponse {
|
|
1547
2007
|
if (typeof this.id !== 'undefined') {
|
1548
2008
|
toReturn['id'] = this.id;
|
1549
2009
|
}
|
1550
|
-
if (typeof this.
|
1551
|
-
toReturn['
|
2010
|
+
if (typeof this.empcode !== 'undefined') {
|
2011
|
+
toReturn['empcode'] = this.empcode;
|
2012
|
+
}
|
2013
|
+
if (typeof this.empname !== 'undefined') {
|
2014
|
+
toReturn['empname'] = this.empname;
|
2015
|
+
}
|
2016
|
+
if (typeof this.address !== 'undefined') {
|
2017
|
+
toReturn['address'] = this.address;
|
2018
|
+
}
|
2019
|
+
if (typeof this.licenseno !== 'undefined') {
|
2020
|
+
toReturn['licenseno'] = this.licenseno;
|
1552
2021
|
}
|
1553
|
-
if (typeof this.
|
1554
|
-
toReturn['
|
2022
|
+
if (typeof this.phoneno !== 'undefined') {
|
2023
|
+
toReturn['phoneno'] = this.phoneno;
|
1555
2024
|
}
|
1556
|
-
if (typeof this.
|
1557
|
-
toReturn['
|
2025
|
+
if (typeof this.experience !== 'undefined') {
|
2026
|
+
toReturn['experience'] = this.experience;
|
1558
2027
|
}
|
1559
|
-
if (typeof this.
|
1560
|
-
toReturn['
|
2028
|
+
if (typeof this.city !== 'undefined') {
|
2029
|
+
toReturn['city'] = this.city;
|
1561
2030
|
}
|
1562
|
-
if (typeof this.
|
1563
|
-
toReturn['
|
2031
|
+
if (typeof this.state !== 'undefined') {
|
2032
|
+
toReturn['state'] = this.state;
|
1564
2033
|
}
|
1565
|
-
if (typeof this.
|
1566
|
-
toReturn['
|
2034
|
+
if (typeof this.country !== 'undefined') {
|
2035
|
+
toReturn['country'] = this.country;
|
1567
2036
|
}
|
1568
2037
|
return toReturn;
|
1569
2038
|
}
|
1570
2039
|
}
|
1571
|
-
export class
|
2040
|
+
export class TransactionReportData {
|
1572
2041
|
static fromProto(proto) {
|
1573
|
-
let m = new
|
2042
|
+
let m = new TransactionReportData();
|
1574
2043
|
m = Object.assign(m, proto);
|
2044
|
+
if (proto.checkedOutDate) {
|
2045
|
+
m.checkedOutDate = new Date(proto.checkedOutDate);
|
2046
|
+
}
|
2047
|
+
if (proto.returnedDate) {
|
2048
|
+
m.returnedDate = new Date(proto.returnedDate);
|
2049
|
+
}
|
1575
2050
|
return m;
|
1576
2051
|
}
|
1577
2052
|
constructor(kwargs) {
|
@@ -1582,16 +2057,34 @@ export class ResolveSBueckertToDoListItemRequest {
|
|
1582
2057
|
}
|
1583
2058
|
toApiJson() {
|
1584
2059
|
const toReturn = {};
|
1585
|
-
if (typeof this.
|
1586
|
-
toReturn['
|
2060
|
+
if (typeof this.employeeId !== 'undefined') {
|
2061
|
+
toReturn['employeeId'] = this.employeeId;
|
2062
|
+
}
|
2063
|
+
if (typeof this.bookId !== 'undefined') {
|
2064
|
+
toReturn['bookId'] = this.bookId;
|
2065
|
+
}
|
2066
|
+
if (typeof this.checkedOutDate !== 'undefined' && this.checkedOutDate !== null) {
|
2067
|
+
toReturn['checkedOutDate'] = 'toApiJson' in this.checkedOutDate ? this.checkedOutDate.toApiJson() : this.checkedOutDate;
|
2068
|
+
}
|
2069
|
+
if (typeof this.transactionId !== 'undefined') {
|
2070
|
+
toReturn['transactionId'] = this.transactionId;
|
2071
|
+
}
|
2072
|
+
if (typeof this.bookName !== 'undefined') {
|
2073
|
+
toReturn['bookName'] = this.bookName;
|
2074
|
+
}
|
2075
|
+
if (typeof this.returnedDate !== 'undefined' && this.returnedDate !== null) {
|
2076
|
+
toReturn['returnedDate'] = 'toApiJson' in this.returnedDate ? this.returnedDate.toApiJson() : this.returnedDate;
|
1587
2077
|
}
|
1588
2078
|
return toReturn;
|
1589
2079
|
}
|
1590
2080
|
}
|
1591
|
-
export class
|
2081
|
+
export class TransactionReportRequest {
|
1592
2082
|
static fromProto(proto) {
|
1593
|
-
let m = new
|
2083
|
+
let m = new TransactionReportRequest();
|
1594
2084
|
m = Object.assign(m, proto);
|
2085
|
+
if (proto.pageSize) {
|
2086
|
+
m.pageSize = parseInt(proto.pageSize, 10);
|
2087
|
+
}
|
1595
2088
|
return m;
|
1596
2089
|
}
|
1597
2090
|
constructor(kwargs) {
|
@@ -1602,33 +2095,21 @@ export class SBueckertToDoListItem {
|
|
1602
2095
|
}
|
1603
2096
|
toApiJson() {
|
1604
2097
|
const toReturn = {};
|
1605
|
-
if (typeof this.
|
1606
|
-
toReturn['
|
1607
|
-
}
|
1608
|
-
if (typeof this.title !== 'undefined') {
|
1609
|
-
toReturn['title'] = this.title;
|
1610
|
-
}
|
1611
|
-
if (typeof this.desc !== 'undefined') {
|
1612
|
-
toReturn['desc'] = this.desc;
|
1613
|
-
}
|
1614
|
-
if (typeof this.date !== 'undefined') {
|
1615
|
-
toReturn['date'] = this.date;
|
2098
|
+
if (typeof this.cursor !== 'undefined') {
|
2099
|
+
toReturn['cursor'] = this.cursor;
|
1616
2100
|
}
|
1617
|
-
if (typeof this.
|
1618
|
-
toReturn['
|
1619
|
-
}
|
1620
|
-
if (typeof this.deleted !== 'undefined') {
|
1621
|
-
toReturn['deleted'] = this.deleted;
|
2101
|
+
if (typeof this.pageSize !== 'undefined') {
|
2102
|
+
toReturn['pageSize'] = this.pageSize;
|
1622
2103
|
}
|
1623
2104
|
return toReturn;
|
1624
2105
|
}
|
1625
2106
|
}
|
1626
|
-
export class
|
2107
|
+
export class TransactionReportResponse {
|
1627
2108
|
static fromProto(proto) {
|
1628
|
-
let m = new
|
2109
|
+
let m = new TransactionReportResponse();
|
1629
2110
|
m = Object.assign(m, proto);
|
1630
|
-
if (proto.
|
1631
|
-
m.
|
2111
|
+
if (proto.transactionReportData) {
|
2112
|
+
m.transactionReportData = proto.transactionReportData.map(TransactionReportData.fromProto);
|
1632
2113
|
}
|
1633
2114
|
return m;
|
1634
2115
|
}
|
@@ -1640,31 +2121,25 @@ export class TodoList {
|
|
1640
2121
|
}
|
1641
2122
|
toApiJson() {
|
1642
2123
|
const toReturn = {};
|
1643
|
-
if (typeof this.
|
1644
|
-
toReturn['
|
1645
|
-
}
|
1646
|
-
if (typeof this.completed !== 'undefined') {
|
1647
|
-
toReturn['completed'] = this.completed;
|
2124
|
+
if (typeof this.transactionReportData !== 'undefined' && this.transactionReportData !== null) {
|
2125
|
+
toReturn['transactionReportData'] = 'toApiJson' in this.transactionReportData ? this.transactionReportData.toApiJson() : this.transactionReportData;
|
1648
2126
|
}
|
1649
|
-
if (typeof this.
|
1650
|
-
toReturn['
|
2127
|
+
if (typeof this.nextCursor !== 'undefined') {
|
2128
|
+
toReturn['nextCursor'] = this.nextCursor;
|
1651
2129
|
}
|
1652
|
-
if (typeof this.
|
1653
|
-
toReturn['
|
2130
|
+
if (typeof this.hasMore !== 'undefined') {
|
2131
|
+
toReturn['hasMore'] = this.hasMore;
|
1654
2132
|
}
|
1655
|
-
if (typeof this.
|
1656
|
-
toReturn['
|
2133
|
+
if (typeof this.message !== 'undefined') {
|
2134
|
+
toReturn['message'] = this.message;
|
1657
2135
|
}
|
1658
2136
|
return toReturn;
|
1659
2137
|
}
|
1660
2138
|
}
|
1661
|
-
export class
|
2139
|
+
export class UserFilter {
|
1662
2140
|
static fromProto(proto) {
|
1663
|
-
let m = new
|
2141
|
+
let m = new UserFilter();
|
1664
2142
|
m = Object.assign(m, proto);
|
1665
|
-
if (proto.todo) {
|
1666
|
-
m.todo = HdoTodoItem.fromProto(proto.todo);
|
1667
|
-
}
|
1668
2143
|
return m;
|
1669
2144
|
}
|
1670
2145
|
constructor(kwargs) {
|
@@ -1675,18 +2150,24 @@ export class UpdateHdoTodoRequest {
|
|
1675
2150
|
}
|
1676
2151
|
toApiJson() {
|
1677
2152
|
const toReturn = {};
|
1678
|
-
if (typeof this.
|
1679
|
-
toReturn['
|
2153
|
+
if (typeof this.subjectTypes !== 'undefined') {
|
2154
|
+
toReturn['subjectTypes'] = this.subjectTypes;
|
2155
|
+
}
|
2156
|
+
if (typeof this.searchTerms !== 'undefined') {
|
2157
|
+
toReturn['searchTerms'] = this.searchTerms;
|
1680
2158
|
}
|
1681
2159
|
return toReturn;
|
1682
2160
|
}
|
1683
2161
|
}
|
1684
|
-
export class
|
2162
|
+
export class UserSortData {
|
1685
2163
|
static fromProto(proto) {
|
1686
|
-
let m = new
|
2164
|
+
let m = new UserSortData();
|
1687
2165
|
m = Object.assign(m, proto);
|
1688
|
-
if (proto.
|
1689
|
-
m.
|
2166
|
+
if (proto.field) {
|
2167
|
+
m.field = parseInt(proto.field, 10);
|
2168
|
+
}
|
2169
|
+
if (proto.direction) {
|
2170
|
+
m.direction = parseInt(proto.direction, 10);
|
1690
2171
|
}
|
1691
2172
|
return m;
|
1692
2173
|
}
|
@@ -1698,15 +2179,18 @@ export class UpdateHdoTodoResponse {
|
|
1698
2179
|
}
|
1699
2180
|
toApiJson() {
|
1700
2181
|
const toReturn = {};
|
1701
|
-
if (typeof this.
|
1702
|
-
toReturn['
|
2182
|
+
if (typeof this.field !== 'undefined') {
|
2183
|
+
toReturn['field'] = this.field;
|
2184
|
+
}
|
2185
|
+
if (typeof this.direction !== 'undefined') {
|
2186
|
+
toReturn['direction'] = this.direction;
|
1703
2187
|
}
|
1704
2188
|
return toReturn;
|
1705
2189
|
}
|
1706
2190
|
}
|
1707
|
-
export class
|
2191
|
+
export class ValidateUserWithIamRequest {
|
1708
2192
|
static fromProto(proto) {
|
1709
|
-
let m = new
|
2193
|
+
let m = new ValidateUserWithIamRequest();
|
1710
2194
|
m = Object.assign(m, proto);
|
1711
2195
|
return m;
|
1712
2196
|
}
|
@@ -1718,24 +2202,15 @@ export class UpdateSBueckertToDoListItemRequest {
|
|
1718
2202
|
}
|
1719
2203
|
toApiJson() {
|
1720
2204
|
const toReturn = {};
|
1721
|
-
if (typeof this.
|
1722
|
-
toReturn['
|
1723
|
-
}
|
1724
|
-
if (typeof this.title !== 'undefined') {
|
1725
|
-
toReturn['title'] = this.title;
|
1726
|
-
}
|
1727
|
-
if (typeof this.desc !== 'undefined') {
|
1728
|
-
toReturn['desc'] = this.desc;
|
1729
|
-
}
|
1730
|
-
if (typeof this.date !== 'undefined') {
|
1731
|
-
toReturn['date'] = this.date;
|
2205
|
+
if (typeof this.emailId !== 'undefined') {
|
2206
|
+
toReturn['emailId'] = this.emailId;
|
1732
2207
|
}
|
1733
2208
|
return toReturn;
|
1734
2209
|
}
|
1735
2210
|
}
|
1736
|
-
export class
|
2211
|
+
export class ValidateUserWithIamResponse {
|
1737
2212
|
static fromProto(proto) {
|
1738
|
-
let m = new
|
2213
|
+
let m = new ValidateUserWithIamResponse();
|
1739
2214
|
m = Object.assign(m, proto);
|
1740
2215
|
return m;
|
1741
2216
|
}
|
@@ -1747,22 +2222,13 @@ export class WHorrellTask {
|
|
1747
2222
|
}
|
1748
2223
|
toApiJson() {
|
1749
2224
|
const toReturn = {};
|
1750
|
-
if (typeof this.
|
1751
|
-
toReturn['
|
1752
|
-
}
|
1753
|
-
if (typeof this.name !== 'undefined') {
|
1754
|
-
toReturn['name'] = this.name;
|
1755
|
-
}
|
1756
|
-
if (typeof this.description !== 'undefined') {
|
1757
|
-
toReturn['description'] = this.description;
|
1758
|
-
}
|
1759
|
-
if (typeof this.isCompleted !== 'undefined') {
|
1760
|
-
toReturn['isCompleted'] = this.isCompleted;
|
2225
|
+
if (typeof this.status !== 'undefined') {
|
2226
|
+
toReturn['status'] = this.status;
|
1761
2227
|
}
|
1762
|
-
if (typeof this.
|
1763
|
-
toReturn['
|
2228
|
+
if (typeof this.message !== 'undefined') {
|
2229
|
+
toReturn['message'] = this.message;
|
1764
2230
|
}
|
1765
2231
|
return toReturn;
|
1766
2232
|
}
|
1767
2233
|
}
|
1768
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vZGV2ZWxvcGVyX3RyYWluaW5nX3Nkay9zcmMvbGliL19pbnRlcm5hbC9vYmplY3RzL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxNQUFNLFVBQVUsaUJBQWlCLENBQUksT0FBWSxFQUFFLEtBQWE7SUFDOUQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDN0IsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hCLENBQUM7QUFFRCxNQUFNLE9BQU8scUJBQXFCO0lBRzlCLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDcEMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FBQztRQUN0RSxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQXlDO1FBQ2pELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENB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QztTQUFDO1FBQzFGLElBQUksT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1NBQUM7UUFDMUYsSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7U0FBQztRQUNwRixPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHNka2dlblxuLy8gRE8gTk9UIEVESVQhLlxuLy9cbi8vIE9iamVjdHMuXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbmltcG9ydCAqIGFzIGkgZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmltcG9ydCAqIGFzIGUgZnJvbSAnLi4vZW51bXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZW51bVN0cmluZ1RvVmFsdWU8RT4oZW51bVJlZjogYW55LCB2YWx1ZTogc3RyaW5nKTogRSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBlbnVtUmVmW3ZhbHVlXTtcbn1cblxuZXhwb3J0IGNsYXNzIEFIdW5kYWxBZGRUYXNrUmVxdWVzdCBpbXBsZW1lbnRzIGkuQUh1bmRhbEFkZFRhc2tSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBuZXdUYXNrOiBBSHVuZGFsVGFzaztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEFIdW5kYWxBZGRUYXNrUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEFIdW5kYWxBZGRUYXNrUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5uZXdUYXNrKSB7bS5uZXdUYXNrID0gQUh1bmRhbFRhc2suZnJvbVByb3RvKHByb3RvLm5ld1Rhc2spO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BSHVuZGFsQWRkVGFza1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5uZXdUYXNrICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm5ld1Rhc2sgIT09IG51bGwpIHt0b1JldHVyblsnbmV3VGFzayddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5uZXdUYXNrID8gKHRoaXMubmV3VGFzayBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5uZXdUYXNrO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFIdW5kYWxBZGRUYXNrUmVzcG9uc2UgaW1wbGVtZW50cyBpLkFIdW5kYWxBZGRUYXNrUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGFkZFN1Y2Nlc2Z1bGw6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBSHVuZGFsQWRkVGFza1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQUh1bmRhbEFkZFRhc2tSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQUh1bmRhbEFkZFRhc2tSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFkZFN1Y2Nlc2Z1bGwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FkZFN1Y2Nlc2Z1bGwnXSA9IHRoaXMuYWRkU3VjY2VzZnVsbDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBSHVuZGFsRGVsZXRlVGFza1JlcXVlc3QgaW1wbGVtZW50cyBpLkFIdW5kYWxEZWxldGVUYXNrUmVxdWVzdEludGVyZmFjZSB7XG4gICAgdGFza0lkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBSHVuZGFsRGVsZXRlVGFza1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBBSHVuZGFsRGVsZXRlVGFza1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFIdW5kYWxEZWxldGVUYXNrUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhc2tJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGFza0lkJ10gPSB0aGlzLnRhc2tJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBSHVuZGFsRGVsZXRlVGFza1Jlc3BvbnNlIGltcGxlbWVudHMgaS5BSHVuZGFsRGVsZXRlVGFza1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBkZWxldGVTdWNjZXNmdWxsOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQUh1bmRhbERlbGV0ZVRhc2tSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEFIdW5kYWxEZWxldGVUYXNrUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFIdW5kYWxEZWxldGVUYXNrUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kZWxldGVTdWNjZXNmdWxsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkZWxldGVTdWNjZXNmdWxsJ10gPSB0aGlzLmRlbGV0ZVN1Y2Nlc2Z1bGw7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQUh1bmRhbEVkaXRUYXNrUmVxdWVzdCBpbXBsZW1lbnRzIGkuQUh1bmRhbEVkaXRUYXNrUmVxdWVzdEludGVyZmFjZSB7XG4gICAgZWRpdGVkVGFzazogQUh1bmRhbFRhc2s7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBSHVuZGFsRWRpdFRhc2tSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQUh1bmRhbEVkaXRUYXNrUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5lZGl0ZWRUYXNrKSB7bS5lZGl0ZWRUYXNrID0gQUh1bmRhbFRhc2suZnJvbVByb3RvKHByb3RvLmVkaXRlZFRhc2spO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BSHVuZGFsRWRpdFRhc2tSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZWRpdGVkVGFzayAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5lZGl0ZWRUYXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ2VkaXRlZFRhc2snXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZWRpdGVkVGFzayA/ICh0aGlzLmVkaXRlZFRhc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZWRpdGVkVGFzazt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBSHVuZGFsRWRpdFRhc2tSZXNwb25zZSBpbXBsZW1lbnRzIGkuQUh1bmRhbEVkaXRUYXNrUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGVkaXRTdWNjZXNmdWxsOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQUh1bmRhbEVkaXRUYXNrUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBBSHVuZGFsRWRpdFRhc2tSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQUh1bmRhbEVkaXRUYXNrUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lZGl0U3VjY2VzZnVsbCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZWRpdFN1Y2Nlc2Z1bGwnXSA9IHRoaXMuZWRpdFN1Y2Nlc2Z1bGw7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQUh1bmRhbEdldFNwZWNpZmljVGFza1JlcXVlc3QgaW1wbGVtZW50cyBpLkFIdW5kYWxHZXRTcGVjaWZpY1Rhc2tSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB0YXNrSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEFIdW5kYWxHZXRTcGVjaWZpY1Rhc2tSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQUh1bmRhbEdldFNwZWNpZmljVGFza1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFIdW5kYWxHZXRTcGVjaWZpY1Rhc2tSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGFza0lkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0YXNrSWQnXSA9IHRoaXMudGFza0lkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFIdW5kYWxHZXRTcGVjaWZpY1Rhc2tSZXNwb25zZSBpbXBsZW1lbnRzIGkuQUh1bmRhbEdldFNwZWNpZmljVGFza1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBhaHVuZGFsVGFzazogQUh1bmRhbFRhc2s7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBSHVuZGFsR2V0U3BlY2lmaWNUYXNrUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBBSHVuZGFsR2V0U3BlY2lmaWNUYXNrUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYWh1bmRhbFRhc2spIHttLmFodW5kYWxUYXNrID0gQUh1bmRhbFRhc2suZnJvbVByb3RvKHByb3RvLmFodW5kYWxUYXNrKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQUh1bmRhbEdldFNwZWNpZmljVGFza1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWh1bmRhbFRhc2sgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYWh1bmRhbFRhc2sgIT09IG51bGwpIHt0b1JldHVyblsnYWh1bmRhbFRhc2snXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuYWh1bmRhbFRhc2sgPyAodGhpcy5haHVuZGFsVGFzayBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5haHVuZGFsVGFzazt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBSHVuZGFsR2V0VGFza3NSZXF1ZXN0IGltcGxlbWVudHMgaS5BSHVuZGFsR2V0VGFza3NSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB0YXNrSWQ6IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEFIdW5kYWxHZXRUYXNrc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBBSHVuZGFsR2V0VGFza3NSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BSHVuZGFsR2V0VGFza3NSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGFza0lkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0YXNrSWQnXSA9IHRoaXMudGFza0lkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFIdW5kYWxHZXRUYXNrc1Jlc3BvbnNlIGltcGxlbWVudHMgaS5BSHVuZGFsR2V0VGFza3NSZXNwb25zZUludGVyZmFjZSB7XG4gICAgYWh1bmRhbFRhc2s6IEFIdW5kYWxUYXNrW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBSHVuZGFsR2V0VGFza3NSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEFIdW5kYWxHZXRUYXNrc1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmFodW5kYWxUYXNrKSB7bS5haHVuZGFsVGFzayA9IHByb3RvLmFodW5kYWxUYXNrLm1hcChBSHVuZGFsVGFzay5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BSHVuZGFsR2V0VGFza3NSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFodW5kYWxUYXNrICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmFodW5kYWxUYXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ2FodW5kYWxUYXNrJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmFodW5kYWxUYXNrID8gKHRoaXMuYWh1bmRhbFRhc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYWh1bmRhbFRhc2s7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQUh1bmRhbFRhc2sgaW1wbGVtZW50cyBpLkFIdW5kYWxUYXNrSW50ZXJmYWNlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHRhc2tUaXRsZTogc3RyaW5nO1xuICAgIGRheTogbnVtYmVyO1xuICAgIG1vbnRoOiBudW1iZXI7XG4gICAgeWVhcjogbnVtYmVyO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgY29tcGxldGVkOiBib29sZWFuO1xuICAgIGlzRGVsZXRlZDogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEFIdW5kYWxUYXNrIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQUh1bmRhbFRhc2soKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFIdW5kYWxUYXNrSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkJ10gPSB0aGlzLmlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhc2tUaXRsZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGFza1RpdGxlJ10gPSB0aGlzLnRhc2tUaXRsZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kYXkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2RheSddID0gdGhpcy5kYXk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubW9udGggIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21vbnRoJ10gPSB0aGlzLm1vbnRoO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnllYXIgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3llYXInXSA9IHRoaXMueWVhcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kZXNjcmlwdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGVzY3JpcHRpb24nXSA9IHRoaXMuZGVzY3JpcHRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29tcGxldGVkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb21wbGV0ZWQnXSA9IHRoaXMuY29tcGxldGVkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlzRGVsZXRlZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaXNEZWxldGVkJ10gPSB0aGlzLmlzRGVsZXRlZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVFQ3VycmllUmVxdWVzdCBpbXBsZW1lbnRzIGkuQ3JlYXRlRUN1cnJpZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgZHVlRGF0ZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVFQ3VycmllUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZUVDdXJyaWVSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVFQ3VycmllUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRpdGxlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0aXRsZSddID0gdGhpcy50aXRsZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kdWVEYXRlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkdWVEYXRlJ10gPSB0aGlzLmR1ZURhdGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rlc2NyaXB0aW9uJ10gPSB0aGlzLmRlc2NyaXB0aW9uO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZUVDdXJyaWVSZXNwb25zZSBpbXBsZW1lbnRzIGkuQ3JlYXRlRUN1cnJpZVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBpZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlRUN1cnJpZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlRUN1cnJpZVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVFQ3VycmllUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlSGRvVG9kb1JlcXVlc3QgaW1wbGVtZW50cyBpLkNyZWF0ZUhkb1RvZG9SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB0b2RvOiBIZG9Ub2RvSXRlbTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZUhkb1RvZG9SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlSGRvVG9kb1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udG9kbykge20udG9kbyA9IEhkb1RvZG9JdGVtLmZyb21Qcm90byhwcm90by50b2RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlSGRvVG9kb1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50b2RvICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRvZG8gIT09IG51bGwpIHt0b1JldHVyblsndG9kbyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50b2RvID8gKHRoaXMudG9kbyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy50b2RvO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZUhkb1RvZG9SZXNwb25zZSBpbXBsZW1lbnRzIGkuQ3JlYXRlSGRvVG9kb1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICB0b2RvOiBIZG9Ub2RvSXRlbTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZUhkb1RvZG9SZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZUhkb1RvZG9SZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by50b2RvKSB7bS50b2RvID0gSGRvVG9kb0l0ZW0uZnJvbVByb3RvKHByb3RvLnRvZG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVIZG9Ub2RvUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50b2RvICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRvZG8gIT09IG51bGwpIHt0b1JldHVyblsndG9kbyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50b2RvID8gKHRoaXMudG9kbyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy50b2RvO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZUxpc3RSZXF1ZXN0IGltcGxlbWVudHMgaS5DcmVhdGVMaXN0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlTGlzdFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVMaXN0UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlTGlzdFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50aXRsZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGl0bGUnXSA9IHRoaXMudGl0bGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rlc2NyaXB0aW9uJ10gPSB0aGlzLmRlc2NyaXB0aW9uO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZUxpc3RSZXNwb25zZSBpbXBsZW1lbnRzIGkuQ3JlYXRlTGlzdFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBpZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlTGlzdFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlTGlzdFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVMaXN0UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlU0J1ZWNrZXJ0VG9Eb0xpc3RJdGVtUmVxdWVzdCBpbXBsZW1lbnRzIGkuQ3JlYXRlU0J1ZWNrZXJ0VG9Eb0xpc3RJdGVtUmVxdWVzdEludGVyZmFjZSB7XG4gICAgZGVzYzogc3RyaW5nO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgZGF0ZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlU0J1ZWNrZXJ0VG9Eb0xpc3RJdGVtUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZVNCdWVja2VydFRvRG9MaXN0SXRlbVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZVNCdWVja2VydFRvRG9MaXN0SXRlbVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kZXNjICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkZXNjJ10gPSB0aGlzLmRlc2M7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGl0bGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RpdGxlJ10gPSB0aGlzLnRpdGxlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRhdGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2RhdGUnXSA9IHRoaXMuZGF0ZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVTQnVlY2tlcnRUb0RvTGlzdEl0ZW1SZXNwb25zZSBpbXBsZW1lbnRzIGkuQ3JlYXRlU0J1ZWNrZXJ0VG9Eb0xpc3RJdGVtUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGl0ZW1JZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlU0J1ZWNrZXJ0VG9Eb0xpc3RJdGVtUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVTQnVlY2tlcnRUb0RvTGlzdEl0ZW1SZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlU0J1ZWNrZXJ0VG9Eb0xpc3RJdGVtUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pdGVtSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2l0ZW1JZCddID0gdGhpcy5pdGVtSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlV0hvcnJlbGxUYXNrUmVxdWVzdCBpbXBsZW1lbnRzIGkuQ3JlYXRlV0hvcnJlbGxUYXNrUmVxdWVzdEludGVyZmFjZSB7XG4gICAgdGFzazogV0hvcnJlbGxUYXNrO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlV0hvcnJlbGxUYXNrUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZVdIb3JyZWxsVGFza1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udGFzaykge20udGFzayA9IFdIb3JyZWxsVGFzay5mcm9tUHJvdG8ocHJvdG8udGFzayk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZVdIb3JyZWxsVGFza1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YXNrICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRhc2sgIT09IG51bGwpIHt0b1JldHVyblsndGFzayddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50YXNrID8gKHRoaXMudGFzayBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy50YXNrO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlbGV0ZUVDdXJyaWVSZXF1ZXN0IGltcGxlbWVudHMgaS5EZWxldGVFQ3VycmllUmVxdWVzdEludGVyZmFjZSB7XG4gICAgaWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IERlbGV0ZUVDdXJyaWVSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRGVsZXRlRUN1cnJpZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkRlbGV0ZUVDdXJyaWVSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkJ10gPSB0aGlzLmlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlbGV0ZUhkb1RvZG9SZXF1ZXN0IGltcGxlbWVudHMgaS5EZWxldGVIZG9Ub2RvUmVxdWVzdEludGVyZmFjZSB7XG4gICAgaWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IERlbGV0ZUhkb1RvZG9SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRGVsZXRlSGRvVG9kb1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkRlbGV0ZUhkb1RvZG9SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkJ10gPSB0aGlzLmlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlbGV0ZUhkb1RvZG9SZXNwb25zZSBpbXBsZW1lbnRzIGkuRGVsZXRlSGRvVG9kb1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBEZWxldGVIZG9Ub2RvUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBEZWxldGVIZG9Ub2RvUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkRlbGV0ZUhkb1RvZG9SZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lc3NhZ2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lc3NhZ2UnXSA9IHRoaXMubWVzc2FnZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZWxldGVMaXN0UmVxdWVzdCBpbXBsZW1lbnRzIGkuRGVsZXRlTGlzdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBEZWxldGVMaXN0UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IERlbGV0ZUxpc3RSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EZWxldGVMaXN0UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZWxldGVTQnVlY2tlcnRUb0RvTGlzdEl0ZW1SZXF1ZXN0IGltcGxlbWVudHMgaS5EZWxldGVTQnVlY2tlcnRUb0RvTGlzdEl0ZW1SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBpdGVtSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IERlbGV0ZVNCdWVja2VydFRvRG9MaXN0SXRlbVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBEZWxldGVTQnVlY2tlcnRUb0RvTGlzdEl0ZW1SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EZWxldGVTQnVlY2tlcnRUb0RvTGlzdEl0ZW1SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaXRlbUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpdGVtSWQnXSA9IHRoaXMuaXRlbUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlbGV0ZVdIb3JyZWxsVGFza1JlcXVlc3QgaW1wbGVtZW50cyBpLkRlbGV0ZVdIb3JyZWxsVGFza1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBEZWxldGVXSG9ycmVsbFRhc2tSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRGVsZXRlV0hvcnJlbGxUYXNrUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRGVsZXRlV0hvcnJlbGxUYXNrUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFQ3VycmllVG9kb0l0ZW0gaW1wbGVtZW50cyBpLkVDdXJyaWVUb2RvSXRlbUludGVyZmFjZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIGNvbXBsZXRlZDogYm9vbGVhbjtcbiAgICBkdWVEYXRlOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEVDdXJyaWVUb2RvSXRlbSB7XG4gICAgICAgIGxldCBtID0gbmV3IEVDdXJyaWVUb2RvSXRlbSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRUN1cnJpZVRvZG9JdGVtSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkJ10gPSB0aGlzLmlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRpdGxlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0aXRsZSddID0gdGhpcy50aXRsZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb21wbGV0ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbXBsZXRlZCddID0gdGhpcy5jb21wbGV0ZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZHVlRGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZHVlRGF0ZSddID0gdGhpcy5kdWVEYXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlc2NyaXB0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkZXNjcmlwdGlvbiddID0gdGhpcy5kZXNjcmlwdGlvbjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFZGl0V0hvcnJlbGxUYXNrUmVxdWVzdCBpbXBsZW1lbnRzIGkuRWRpdFdIb3JyZWxsVGFza1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgaXNDb21wbGV0ZWQ6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBFZGl0V0hvcnJlbGxUYXNrUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEVkaXRXSG9ycmVsbFRhc2tSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5FZGl0V0hvcnJlbGxUYXNrUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5uYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyduYW1lJ10gPSB0aGlzLm5hbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rlc2NyaXB0aW9uJ10gPSB0aGlzLmRlc2NyaXB0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlzQ29tcGxldGVkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpc0NvbXBsZXRlZCddID0gdGhpcy5pc0NvbXBsZXRlZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRFQ3VycmllTGlzdFJlcXVlc3QgaW1wbGVtZW50cyBpLkdldEVDdXJyaWVMaXN0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgY2F0ZWdvcnk6IHN0cmluZztcbiAgICBzdGF0dXM6IHN0cmluZztcbiAgICBpZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0RUN1cnJpZUxpc3RSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0RUN1cnJpZUxpc3RSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRFQ3VycmllTGlzdFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYXRlZ29yeSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2F0ZWdvcnknXSA9IHRoaXMuY2F0ZWdvcnk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhdHVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdGF0dXMnXSA9IHRoaXMuc3RhdHVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRFQ3VycmllTGlzdFJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRFQ3VycmllTGlzdFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICB0b2RvSXRlbXM6IEVDdXJyaWVUb2RvSXRlbVtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0RUN1cnJpZUxpc3RSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldEVDdXJyaWVMaXN0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udG9kb0l0ZW1zKSB7bS50b2RvSXRlbXMgPSBwcm90by50b2RvSXRlbXMubWFwKEVDdXJyaWVUb2RvSXRlbS5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRFQ3VycmllTGlzdFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudG9kb0l0ZW1zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRvZG9JdGVtcyAhPT0gbnVsbCkge3RvUmV0dXJuWyd0b2RvSXRlbXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudG9kb0l0ZW1zID8gKHRoaXMudG9kb0l0ZW1zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRvZG9JdGVtczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRIZG9Ub2RvUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0SGRvVG9kb1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRIZG9Ub2RvUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldEhkb1RvZG9SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRIZG9Ub2RvUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRIZG9Ub2RvUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldEhkb1RvZG9SZXNwb25zZUludGVyZmFjZSB7XG4gICAgdG9kbzogSGRvVG9kb0l0ZW07XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRIZG9Ub2RvUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRIZG9Ub2RvUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udG9kbykge20udG9kbyA9IEhkb1RvZG9JdGVtLmZyb21Qcm90byhwcm90by50b2RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0SGRvVG9kb1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudG9kbyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50b2RvICE9PSBudWxsKSB7dG9SZXR1cm5bJ3RvZG8nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudG9kbyA/ICh0aGlzLnRvZG8gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudG9kbzt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRMaXN0UmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0TGlzdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgY2F0ZWdvcnk6IHN0cmluZztcbiAgICBzdGF0dXM6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldExpc3RSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TGlzdFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldExpc3RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkJ10gPSB0aGlzLmlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhdGVnb3J5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjYXRlZ29yeSddID0gdGhpcy5jYXRlZ29yeTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGF0dXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N0YXR1cyddID0gdGhpcy5zdGF0dXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TGlzdFJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRMaXN0UmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGl0ZW06IFRvZG9MaXN0W107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRMaXN0UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRMaXN0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaXRlbSkge20uaXRlbSA9IHByb3RvLml0ZW0ubWFwKFRvZG9MaXN0LmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldExpc3RSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLml0ZW0gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaXRlbSAhPT0gbnVsbCkge3RvUmV0dXJuWydpdGVtJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLml0ZW0gPyAodGhpcy5pdGVtIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLml0ZW07fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0U0J1ZWNrZXJ0VG9Eb0xpc3RJdGVtUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0U0J1ZWNrZXJ0VG9Eb0xpc3RJdGVtUmVxdWVzdEludGVyZmFjZSB7XG4gICAgaXRlbUlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRTQnVlY2tlcnRUb0RvTGlzdEl0ZW1SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0U0J1ZWNrZXJ0VG9Eb0xpc3RJdGVtUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0U0J1ZWNrZXJ0VG9Eb0xpc3RJdGVtUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLml0ZW1JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaXRlbUlkJ10gPSB0aGlzLml0ZW1JZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRTQnVlY2tlcnRUb0RvTGlzdEl0ZW1SZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0U0J1ZWNrZXJ0VG9Eb0xpc3RJdGVtUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGl0ZW06IFNCdWVja2VydFRvRG9MaXN0SXRlbTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFNCdWVja2VydFRvRG9MaXN0SXRlbVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0U0J1ZWNrZXJ0VG9Eb0xpc3RJdGVtUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaXRlbSkge20uaXRlbSA9IFNCdWVja2VydFRvRG9MaXN0SXRlbS5mcm9tUHJvdG8ocHJvdG8uaXRlbSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFNCdWVja2VydFRvRG9MaXN0SXRlbVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaXRlbSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5pdGVtICE9PSBudWxsKSB7dG9SZXR1cm5bJ2l0ZW0nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuaXRlbSA/ICh0aGlzLml0ZW0gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuaXRlbTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRXSG9ycmVsbFRhc2tSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRXSG9ycmVsbFRhc2tSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBpZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0V0hvcnJlbGxUYXNrUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFdIb3JyZWxsVGFza1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFdIb3JyZWxsVGFza1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0V0hvcnJlbGxUYXNrUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldFdIb3JyZWxsVGFza1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICB0YXNrOiBXSG9ycmVsbFRhc2s7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRXSG9ycmVsbFRhc2tSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFdIb3JyZWxsVGFza1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnRhc2spIHttLnRhc2sgPSBXSG9ycmVsbFRhc2suZnJvbVByb3RvKHByb3RvLnRhc2spO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRXSG9ycmVsbFRhc2tSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhc2sgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudGFzayAhPT0gbnVsbCkge3RvUmV0dXJuWyd0YXNrJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnRhc2sgPyAodGhpcy50YXNrIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRhc2s7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSGRvVG9kb0l0ZW0gaW1wbGVtZW50cyBpLkhkb1RvZG9JdGVtSW50ZXJmYWNlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICBjb21wbGV0ZWQ6IGJvb2xlYW47XG4gICAgZGVsZXRlZDogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEhkb1RvZG9JdGVtIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSGRvVG9kb0l0ZW0oKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkhkb1RvZG9JdGVtSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkJ10gPSB0aGlzLmlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRpdGxlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0aXRsZSddID0gdGhpcy50aXRsZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kZXNjcmlwdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGVzY3JpcHRpb24nXSA9IHRoaXMuZGVzY3JpcHRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29tcGxldGVkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb21wbGV0ZWQnXSA9IHRoaXMuY29tcGxldGVkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlbGV0ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2RlbGV0ZWQnXSA9IHRoaXMuZGVsZXRlZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJT2xhbGV5ZUNyZWF0ZVRhc2tSZXF1ZXN0IGltcGxlbWVudHMgaS5JT2xhbGV5ZUNyZWF0ZVRhc2tSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IElPbGFsZXllQ3JlYXRlVGFza1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBJT2xhbGV5ZUNyZWF0ZVRhc2tSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5JT2xhbGV5ZUNyZWF0ZVRhc2tSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmFtZSddID0gdGhpcy5uYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlc2NyaXB0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkZXNjcmlwdGlvbiddID0gdGhpcy5kZXNjcmlwdGlvbjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJT2xhbGV5ZUNyZWF0ZVRhc2tSZXNwb25zZSBpbXBsZW1lbnRzIGkuSU9sYWxleWVDcmVhdGVUYXNrUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGlkOiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBJT2xhbGV5ZUNyZWF0ZVRhc2tSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IElPbGFsZXllQ3JlYXRlVGFza1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmlkKSB7bS5pZCA9IHBhcnNlSW50KHByb3RvLmlkLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLklPbGFsZXllQ3JlYXRlVGFza1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkJ10gPSB0aGlzLmlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIElPbGFsZXllRGVsZXRlVGFza1JlcXVlc3QgaW1wbGVtZW50cyBpLklPbGFsZXllRGVsZXRlVGFza1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBJT2xhbGV5ZURlbGV0ZVRhc2tSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSU9sYWxleWVEZWxldGVUYXNrUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuSU9sYWxleWVEZWxldGVUYXNrUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJT2xhbGV5ZURlbGV0ZVRhc2tSZXNwb25zZSBpbXBsZW1lbnRzIGkuSU9sYWxleWVEZWxldGVUYXNrUmVzcG9uc2VJbnRlcmZhY2Uge1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogSU9sYWxleWVEZWxldGVUYXNrUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBJT2xhbGV5ZURlbGV0ZVRhc2tSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuSU9sYWxleWVEZWxldGVUYXNrUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJT2xhbGV5ZUVkaXRUYXNrUmVxdWVzdCBpbXBsZW1lbnRzIGkuSU9sYWxleWVFZGl0VGFza1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHRhc2s6IElPbGFsZXllVGFzaztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IElPbGFsZXllRWRpdFRhc2tSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSU9sYWxleWVFZGl0VGFza1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udGFzaykge20udGFzayA9IElPbGFsZXllVGFzay5mcm9tUHJvdG8ocHJvdG8udGFzayk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLklPbGFsZXllRWRpdFRhc2tSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGFzayAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50YXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Rhc2snXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudGFzayA/ICh0aGlzLnRhc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudGFzazt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJT2xhbGV5ZUVkaXRUYXNrUmVzcG9uc2UgaW1wbGVtZW50cyBpLklPbGFsZXllRWRpdFRhc2tSZXNwb25zZUludGVyZmFjZSB7XG4gICAgdGFzazogSU9sYWxleWVUYXNrO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogSU9sYWxleWVFZGl0VGFza1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSU9sYWxleWVFZGl0VGFza1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnRhc2spIHttLnRhc2sgPSBJT2xhbGV5ZVRhc2suZnJvbVByb3RvKHByb3RvLnRhc2spO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5JT2xhbGV5ZUVkaXRUYXNrUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YXNrICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRhc2sgIT09IG51bGwpIHt0b1JldHVyblsndGFzayddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50YXNrID8gKHRoaXMudGFzayBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy50YXNrO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIElPbGFsZXllR2V0VGFza1JlcXVlc3QgaW1wbGVtZW50cyBpLklPbGFsZXllR2V0VGFza1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBJT2xhbGV5ZUdldFRhc2tSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSU9sYWxleWVHZXRUYXNrUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuSU9sYWxleWVHZXRUYXNrUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJT2xhbGV5ZUdldFRhc2tSZXNwb25zZSBpbXBsZW1lbnRzIGkuSU9sYWxleWVHZXRUYXNrUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHRhc2s6IElPbGFsZXllVGFzaztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IElPbGFsZXllR2V0VGFza1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgSU9sYWxleWVHZXRUYXNrUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udGFzaykge20udGFzayA9IElPbGFsZXllVGFzay5mcm9tUHJvdG8ocHJvdG8udGFzayk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLklPbGFsZXllR2V0VGFza1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGFzayAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50YXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Rhc2snXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudGFzayA/ICh0aGlzLnRhc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudGFzazt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJT2xhbGV5ZUxpc3RUYXNrc1JlcXVlc3QgaW1wbGVtZW50cyBpLklPbGFsZXllTGlzdFRhc2tzUmVxdWVzdEludGVyZmFjZSB7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBJT2xhbGV5ZUxpc3RUYXNrc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBJT2xhbGV5ZUxpc3RUYXNrc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLklPbGFsZXllTGlzdFRhc2tzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIElPbGFsZXllTGlzdFRhc2tzUmVzcG9uc2UgaW1wbGVtZW50cyBpLklPbGFsZXllTGlzdFRhc2tzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGFsbFRhc2tzOiBJT2xhbGV5ZVRhc2tbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IElPbGFsZXllTGlzdFRhc2tzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBJT2xhbGV5ZUxpc3RUYXNrc1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmFsbFRhc2tzKSB7bS5hbGxUYXNrcyA9IHByb3RvLmFsbFRhc2tzLm1hcChJT2xhbGV5ZVRhc2suZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuSU9sYWxleWVMaXN0VGFza3NSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFsbFRhc2tzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmFsbFRhc2tzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2FsbFRhc2tzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmFsbFRhc2tzID8gKHRoaXMuYWxsVGFza3MgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYWxsVGFza3M7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSU9sYWxleWVUYXNrIGltcGxlbWVudHMgaS5JT2xhbGV5ZVRhc2tJbnRlcmZhY2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgZGVsZXRlZDogc3RyaW5nO1xuICAgIGlzRG9uZTogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IElPbGFsZXllVGFzayB7XG4gICAgICAgIGxldCBtID0gbmV3IElPbGFsZXllVGFzaygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuSU9sYWxleWVUYXNrSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkJ10gPSB0aGlzLmlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25hbWUnXSA9IHRoaXMubmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kZXNjcmlwdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGVzY3JpcHRpb24nXSA9IHRoaXMuZGVzY3JpcHRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVsZXRlZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGVsZXRlZCddID0gdGhpcy5kZWxldGVkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlzRG9uZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaXNEb25lJ10gPSB0aGlzLmlzRG9uZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0SGRvVG9kb1JlcXVlc3QgaW1wbGVtZW50cyBpLkxpc3RIZG9Ub2RvUmVxdWVzdEludGVyZmFjZSB7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0SGRvVG9kb1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0SGRvVG9kb1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RIZG9Ub2RvUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RIZG9Ub2RvUmVzcG9uc2UgaW1wbGVtZW50cyBpLkxpc3RIZG9Ub2RvUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHRvZG9zOiBIZG9Ub2RvSXRlbVtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdEhkb1RvZG9SZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RIZG9Ub2RvUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udG9kb3MpIHttLnRvZG9zID0gcHJvdG8udG9kb3MubWFwKEhkb1RvZG9JdGVtLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RIZG9Ub2RvUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50b2RvcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50b2RvcyAhPT0gbnVsbCkge3RvUmV0dXJuWyd0b2RvcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50b2RvcyA/ICh0aGlzLnRvZG9zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRvZG9zO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RTQnVlY2tlcnRUb0RvTGlzdEl0ZW1SZXF1ZXN0IGltcGxlbWVudHMgaS5MaXN0U0J1ZWNrZXJ0VG9Eb0xpc3RJdGVtUmVxdWVzdEludGVyZmFjZSB7XG4gICAgcmVzb2x2ZWQ6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0U0J1ZWNrZXJ0VG9Eb0xpc3RJdGVtUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RTQnVlY2tlcnRUb0RvTGlzdEl0ZW1SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0U0J1ZWNrZXJ0VG9Eb0xpc3RJdGVtUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJlc29sdmVkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydyZXNvbHZlZCddID0gdGhpcy5yZXNvbHZlZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0U0J1ZWNrZXJ0VG9Eb0xpc3RJdGVtUmVzcG9uc2UgaW1wbGVtZW50cyBpLkxpc3RTQnVlY2tlcnRUb0RvTGlzdEl0ZW1SZXNwb25zZUludGVyZmFjZSB7XG4gICAgaXRlbXM6IFNCdWVja2VydFRvRG9MaXN0SXRlbVtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdFNCdWVja2VydFRvRG9MaXN0SXRlbVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdFNCdWVja2VydFRvRG9MaXN0SXRlbVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLml0ZW1zKSB7bS5pdGVtcyA9IHByb3RvLml0ZW1zLm1hcChTQnVlY2tlcnRUb0RvTGlzdEl0ZW0uZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdFNCdWVja2VydFRvRG9MaXN0SXRlbVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaXRlbXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaXRlbXMgIT09IG51bGwpIHt0b1JldHVyblsnaXRlbXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuaXRlbXMgPyAodGhpcy5pdGVtcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5pdGVtczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0V0hvcnJlbGxUYXNrc1JlcXVlc3QgaW1wbGVtZW50cyBpLkxpc3RXSG9ycmVsbFRhc2tzUmVxdWVzdEludGVyZmFjZSB7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0V0hvcnJlbGxUYXNrc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0V0hvcnJlbGxUYXNrc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RXSG9ycmVsbFRhc2tzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RXSG9ycmVsbFRhc2tzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkxpc3RXSG9ycmVsbFRhc2tzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHRhc2tzOiBXSG9ycmVsbFRhc2tbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RXSG9ycmVsbFRhc2tzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0V0hvcnJlbGxUYXNrc1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnRhc2tzKSB7bS50YXNrcyA9IHByb3RvLnRhc2tzLm1hcChXSG9ycmVsbFRhc2suZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdFdIb3JyZWxsVGFza3NSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhc2tzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRhc2tzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Rhc2tzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnRhc2tzID8gKHRoaXMudGFza3MgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudGFza3M7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTU11Z290Q3JlYXRlVGFza1JlcXVlc3QgaW1wbGVtZW50cyBpLk1NdWdvdENyZWF0ZVRhc2tSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB0YXNrOiBNTXVnb3RUYXNrO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTU11Z290Q3JlYXRlVGFza1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBNTXVnb3RDcmVhdGVUYXNrUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by50YXNrKSB7bS50YXNrID0gTU11Z290VGFzay5mcm9tUHJvdG8ocHJvdG8udGFzayk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLk1NdWdvdENyZWF0ZVRhc2tSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGFzayAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50YXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Rhc2snXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudGFzayA/ICh0aGlzLnRhc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudGFzazt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNTXVnb3RDcmVhdGVUYXNrUmVzcG9uc2UgaW1wbGVtZW50cyBpLk1NdWdvdENyZWF0ZVRhc2tSZXNwb25zZUludGVyZmFjZSB7XG4gICAgaXNDcmVhdGVkOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTU11Z290Q3JlYXRlVGFza1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTU11Z290Q3JlYXRlVGFza1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5NTXVnb3RDcmVhdGVUYXNrUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc0NyZWF0ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lzQ3JlYXRlZCddID0gdGhpcy5pc0NyZWF0ZWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTU11Z290RGVsZXRlVGFza1JlcXVlc3QgaW1wbGVtZW50cyBpLk1NdWdvdERlbGV0ZVRhc2tSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB0YXNrSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IE1NdWdvdERlbGV0ZVRhc2tSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTU11Z290RGVsZXRlVGFza1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLk1NdWdvdERlbGV0ZVRhc2tSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGFza0lkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0YXNrSWQnXSA9IHRoaXMudGFza0lkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1NdWdvdEdldFRhc2tSZXF1ZXN0IGltcGxlbWVudHMgaS5NTXVnb3RHZXRUYXNrUmVxdWVzdEludGVyZmFjZSB7XG4gICAgdGFza0lkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBNTXVnb3RHZXRUYXNrUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IE1NdWdvdEdldFRhc2tSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5NTXVnb3RHZXRUYXNrUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhc2tJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGFza0lkJ10gPSB0aGlzLnRhc2tJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNTXVnb3RHZXRUYXNrUmVzcG9uc2UgaW1wbGVtZW50cyBpLk1NdWdvdEdldFRhc2tSZXNwb25zZUludGVyZmFjZSB7XG4gICAgdGFzazogTU11Z290VGFzaztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IE1NdWdvdEdldFRhc2tSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IE1NdWdvdEdldFRhc2tSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by50YXNrKSB7bS50YXNrID0gTU11Z290VGFzay5mcm9tUHJvdG8ocHJvdG8udGFzayk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLk1NdWdvdEdldFRhc2tSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhc2sgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudGFzayAhPT0gbnVsbCkge3RvUmV0dXJuWyd0YXNrJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnRhc2sgPyAodGhpcy50YXNrIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRhc2s7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTU11Z290TGlzdFRhc2tzUmVxdWVzdCBpbXBsZW1lbnRzIGkuTU11Z290TGlzdFRhc2tzUmVxdWVzdEludGVyZmFjZSB7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBNTXVnb3RMaXN0VGFza3NSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTU11Z290TGlzdFRhc2tzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTU11Z290TGlzdFRhc2tzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1NdWdvdExpc3RUYXNrc1Jlc3BvbnNlIGltcGxlbWVudHMgaS5NTXVnb3RMaXN0VGFza3NSZXNwb25zZUludGVyZmFjZSB7XG4gICAgdGFza3M6IE1NdWdvdFRhc2tbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IE1NdWdvdExpc3RUYXNrc1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTU11Z290TGlzdFRhc2tzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udGFza3MpIHttLnRhc2tzID0gcHJvdG8udGFza3MubWFwKE1NdWdvdFRhc2suZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTU11Z290TGlzdFRhc2tzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YXNrcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50YXNrcyAhPT0gbnVsbCkge3RvUmV0dXJuWyd0YXNrcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50YXNrcyA/ICh0aGlzLnRhc2tzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRhc2tzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1NdWdvdFRhc2sgaW1wbGVtZW50cyBpLk1NdWdvdFRhc2tJbnRlcmZhY2Uge1xuICAgIHRhc2tOYW1lOiBzdHJpbmc7XG4gICAgdGFza0Rlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgaXNDb21wbGV0ZTogYm9vbGVhbjtcbiAgICB0YXNrSWQ6IHN0cmluZztcbiAgICBpc0RlbGV0ZWQ6IGJvb2xlYW47XG4gICAgZHVlRGF0ZTogRGF0ZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IE1NdWdvdFRhc2sge1xuICAgICAgICBsZXQgbSA9IG5ldyBNTXVnb3RUYXNrKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmR1ZURhdGUpIHttLmR1ZURhdGUgPSBuZXcgRGF0ZShwcm90by5kdWVEYXRlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTU11Z290VGFza0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhc2tOYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0YXNrTmFtZSddID0gdGhpcy50YXNrTmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YXNrRGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Rhc2tEZXNjcmlwdGlvbiddID0gdGhpcy50YXNrRGVzY3JpcHRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaXNDb21wbGV0ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaXNDb21wbGV0ZSddID0gdGhpcy5pc0NvbXBsZXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhc2tJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGFza0lkJ10gPSB0aGlzLnRhc2tJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc0RlbGV0ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lzRGVsZXRlZCddID0gdGhpcy5pc0RlbGV0ZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZHVlRGF0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5kdWVEYXRlICE9PSBudWxsKSB7dG9SZXR1cm5bJ2R1ZURhdGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZHVlRGF0ZSA/ICh0aGlzLmR1ZURhdGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZHVlRGF0ZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNTXVnb3RVcGRhdGVUYXNrUmVxdWVzdCBpbXBsZW1lbnRzIGkuTU11Z290VXBkYXRlVGFza1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHRhc2tJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTU11Z290VXBkYXRlVGFza1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBNTXVnb3RVcGRhdGVUYXNrUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTU11Z290VXBkYXRlVGFza1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YXNrSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Rhc2tJZCddID0gdGhpcy50YXNrSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTU11Z290VXBkYXRlVGFza1Jlc3BvbnNlIGltcGxlbWVudHMgaS5NTXVnb3RVcGRhdGVUYXNrUmVzcG9uc2VJbnRlcmZhY2Uge1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTU11Z290VXBkYXRlVGFza1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTU11Z290VXBkYXRlVGFza1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5NTXVnb3RVcGRhdGVUYXNrUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOVmFsbGVDcmVhdGVUYXNrUmVxdWVzdCBpbXBsZW1lbnRzIGkuTlZhbGxlQ3JlYXRlVGFza1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICBjb21wbGV0ZWQ6IGJvb2xlYW47XG4gICAgZHVlOiBEYXRlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTlZhbGxlQ3JlYXRlVGFza1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBOVmFsbGVDcmVhdGVUYXNrUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5kdWUpIHttLmR1ZSA9IG5ldyBEYXRlKHByb3RvLmR1ZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLk5WYWxsZUNyZWF0ZVRhc2tSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGl0bGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RpdGxlJ10gPSB0aGlzLnRpdGxlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlc2NyaXB0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkZXNjcmlwdGlvbiddID0gdGhpcy5kZXNjcmlwdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb21wbGV0ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbXBsZXRlZCddID0gdGhpcy5jb21wbGV0ZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZHVlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmR1ZSAhPT0gbnVsbCkge3RvUmV0dXJuWydkdWUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZHVlID8gKHRoaXMuZHVlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmR1ZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOVmFsbGVDcmVhdGVUYXNrUmVzcG9uc2UgaW1wbGVtZW50cyBpLk5WYWxsZUNyZWF0ZVRhc2tSZXNwb25zZUludGVyZmFjZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgY29tcGxldGVkOiBib29sZWFuO1xuICAgIGR1ZTogRGF0ZTtcbiAgICBjcmVhdGVkOiBEYXRlO1xuICAgIHVwZGF0ZWQ6IERhdGU7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBOVmFsbGVDcmVhdGVUYXNrUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBOVmFsbGVDcmVhdGVUYXNrUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZHVlKSB7bS5kdWUgPSBuZXcgRGF0ZShwcm90by5kdWUpO31cbiAgICAgICAgaWYgKHByb3RvLmNyZWF0ZWQpIHttLmNyZWF0ZWQgPSBuZXcgRGF0ZShwcm90by5jcmVhdGVkKTt9XG4gICAgICAgIGlmIChwcm90by51cGRhdGVkKSB7bS51cGRhdGVkID0gbmV3IERhdGUocHJvdG8udXBkYXRlZCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLk5WYWxsZUNyZWF0ZVRhc2tSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50aXRsZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGl0bGUnXSA9IHRoaXMudGl0bGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rlc2NyaXB0aW9uJ10gPSB0aGlzLmRlc2NyaXB0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbXBsZXRlZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29tcGxldGVkJ10gPSB0aGlzLmNvbXBsZXRlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kdWUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZHVlICE9PSBudWxsKSB7dG9SZXR1cm5bJ2R1ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5kdWUgPyAodGhpcy5kdWUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZHVlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNyZWF0ZWQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY3JlYXRlZCAhPT0gbnVsbCkge3RvUmV0dXJuWydjcmVhdGVkJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNyZWF0ZWQgPyAodGhpcy5jcmVhdGVkIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNyZWF0ZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXBkYXRlZCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy51cGRhdGVkICE9PSBudWxsKSB7dG9SZXR1cm5bJ3VwZGF0ZWQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudXBkYXRlZCA/ICh0aGlzLnVwZGF0ZWQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudXBkYXRlZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZXNvbHZlU0J1ZWNrZXJ0VG9Eb0xpc3RJdGVtUmVxdWVzdCBpbXBsZW1lbnRzIGkuUmVzb2x2ZVNCdWVja2VydFRvRG9MaXN0SXRlbVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGl0ZW1JZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogUmVzb2x2ZVNCdWVja2VydFRvRG9MaXN0SXRlbVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBSZXNvbHZlU0J1ZWNrZXJ0VG9Eb0xpc3RJdGVtUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuUmVzb2x2ZVNCdWVja2VydFRvRG9MaXN0SXRlbVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pdGVtSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2l0ZW1JZCddID0gdGhpcy5pdGVtSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU0J1ZWNrZXJ0VG9Eb0xpc3RJdGVtIGltcGxlbWVudHMgaS5TQnVlY2tlcnRUb0RvTGlzdEl0ZW1JbnRlcmZhY2Uge1xuICAgIGl0ZW1JZDogc3RyaW5nO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgZGVzYzogc3RyaW5nO1xuICAgIGRhdGU6IHN0cmluZztcbiAgICByZXNvbHZlZDogYm9vbGVhbjtcbiAgICBkZWxldGVkOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU0J1ZWNrZXJ0VG9Eb0xpc3RJdGVtIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgU0J1ZWNrZXJ0VG9Eb0xpc3RJdGVtKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TQnVlY2tlcnRUb0RvTGlzdEl0ZW1JbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pdGVtSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2l0ZW1JZCddID0gdGhpcy5pdGVtSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGl0bGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RpdGxlJ10gPSB0aGlzLnRpdGxlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlc2MgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rlc2MnXSA9IHRoaXMuZGVzYzt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kYXRlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkYXRlJ10gPSB0aGlzLmRhdGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVzb2x2ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Jlc29sdmVkJ10gPSB0aGlzLnJlc29sdmVkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlbGV0ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2RlbGV0ZWQnXSA9IHRoaXMuZGVsZXRlZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUb2RvTGlzdCBpbXBsZW1lbnRzIGkuVG9kb0xpc3RJbnRlcmZhY2Uge1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgY29tcGxldGVkOiBib29sZWFuO1xuICAgIGNyZWF0ZWRBdDogbnVtYmVyO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFRvZG9MaXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVG9kb0xpc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY3JlYXRlZEF0KSB7bS5jcmVhdGVkQXQgPSBwYXJzZUludChwcm90by5jcmVhdGVkQXQsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVG9kb0xpc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50aXRsZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGl0bGUnXSA9IHRoaXMudGl0bGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29tcGxldGVkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb21wbGV0ZWQnXSA9IHRoaXMuY29tcGxldGVkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNyZWF0ZWRBdCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3JlYXRlZEF0J10gPSB0aGlzLmNyZWF0ZWRBdDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rlc2NyaXB0aW9uJ10gPSB0aGlzLmRlc2NyaXB0aW9uO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZUhkb1RvZG9SZXF1ZXN0IGltcGxlbWVudHMgaS5VcGRhdGVIZG9Ub2RvUmVxdWVzdEludGVyZmFjZSB7XG4gICAgdG9kbzogSGRvVG9kb0l0ZW07XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVIZG9Ub2RvUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZUhkb1RvZG9SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnRvZG8pIHttLnRvZG8gPSBIZG9Ub2RvSXRlbS5mcm9tUHJvdG8ocHJvdG8udG9kbyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZUhkb1RvZG9SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudG9kbyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50b2RvICE9PSBudWxsKSB7dG9SZXR1cm5bJ3RvZG8nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudG9kbyA/ICh0aGlzLnRvZG8gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudG9kbzt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVIZG9Ub2RvUmVzcG9uc2UgaW1wbGVtZW50cyBpLlVwZGF0ZUhkb1RvZG9SZXNwb25zZUludGVyZmFjZSB7XG4gICAgdG9kbzogSGRvVG9kb0l0ZW07XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVIZG9Ub2RvUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVIZG9Ub2RvUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udG9kbykge20udG9kbyA9IEhkb1RvZG9JdGVtLmZyb21Qcm90byhwcm90by50b2RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlSGRvVG9kb1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudG9kbyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50b2RvICE9PSBudWxsKSB7dG9SZXR1cm5bJ3RvZG8nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudG9kbyA/ICh0aGlzLnRvZG8gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudG9kbzt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVTQnVlY2tlcnRUb0RvTGlzdEl0ZW1SZXF1ZXN0IGltcGxlbWVudHMgaS5VcGRhdGVTQnVlY2tlcnRUb0RvTGlzdEl0ZW1SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBpdGVtSWQ6IHN0cmluZztcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIGRlc2M6IHN0cmluZztcbiAgICBkYXRlOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVTQnVlY2tlcnRUb0RvTGlzdEl0ZW1SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlU0J1ZWNrZXJ0VG9Eb0xpc3RJdGVtUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlU0J1ZWNrZXJ0VG9Eb0xpc3RJdGVtUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLml0ZW1JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaXRlbUlkJ10gPSB0aGlzLml0ZW1JZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50aXRsZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGl0bGUnXSA9IHRoaXMudGl0bGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVzYyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGVzYyddID0gdGhpcy5kZXNjO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRhdGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2RhdGUnXSA9IHRoaXMuZGF0ZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBXSG9ycmVsbFRhc2sgaW1wbGVtZW50cyBpLldIb3JyZWxsVGFza0ludGVyZmFjZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICBpc0NvbXBsZXRlZDogYm9vbGVhbjtcbiAgICBpc0RlbGV0ZWQ6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBXSG9ycmVsbFRhc2sge1xuICAgICAgICBsZXQgbSA9IG5ldyBXSG9ycmVsbFRhc2soKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLldIb3JyZWxsVGFza0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5uYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyduYW1lJ10gPSB0aGlzLm5hbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rlc2NyaXB0aW9uJ10gPSB0aGlzLmRlc2NyaXB0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlzQ29tcGxldGVkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpc0NvbXBsZXRlZCddID0gdGhpcy5pc0NvbXBsZXRlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc0RlbGV0ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lzRGVsZXRlZCddID0gdGhpcy5pc0RlbGV0ZWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG4iXX0=
|
2234
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vZGV2ZWxvcGVyX3RyYWluaW5nX3Nkay9zcmMvbGliL19pbnRlcm5hbC9vYmplY3RzL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxPQUFPLEtBQUssQ0FBQyxNQUFNLFVBQVUsQ0FBQztBQUU5QixNQUFNLFVBQVUsaUJBQWlCLENBQUksT0FBWSxFQUFFLEtBQWE7SUFDOUQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDN0IsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hCLENBQUM7QUFFRCxNQUFNLE9BQU8sMEJBQTBCO0lBR25DLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLDBCQUEwQixFQUFFLENBQUM7UUFDekMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtZQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsa0NBQWtDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUFDO1FBQ3RHLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBOEM7UUFDdEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsVUFBa0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQzNMLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTywyQkFBMkI7SUFLcEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksMkJBQTJCLEVBQUUsQ0FBQztRQUMxQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFO1lBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxtQ0FBbUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQUM7UUFDMUcsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsWUFBWSxNQUErQztRQUN2RCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQUM7UUFDOUUsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsV0FBbUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUFDO1FBQ2pNLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxzQkFBc0I7SUFHL0IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksc0JBQXNCLEVBQUUsQ0FBQztRQUNyQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsZUFBZSxFQUFFO1lBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUFDO1FBQy9GLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBMEM7UUFDbEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxlQUFlLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxlQUF1QixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1NBQUM7UUFDek4sT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLHVCQUF1QjtJQUtoQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1FBQ3RDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQTJDO1FBQ25ELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1NBQUM7UUFDaEcsSUFBSSxPQUFPLElBQUksQ0FBQyxFQUFFLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7U0FBQztRQUMvRCxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxtQkFBbUI7SUFJNUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUNsQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsWUFBWSxNQUF1QztRQUMvQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQUM7UUFDckUsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLGVBQWU7SUFLeEIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDOUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBbUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUMzRSxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztTQUFDO1FBQ3JFLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQUM7UUFDM0UsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLHNCQUFzQjtJQVEvQixNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1FBQ3JDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFBQyxDQUFDLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQUM7UUFDaEUsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUFDO1FBQzFFLElBQUksS0FBSyxDQUFDLElBQUksRUFBRTtZQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FBQztRQUNwRCxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQTBDO1FBQ2xELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQUM7UUFDM0UsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FBQztRQUNqRixJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxPQUFlLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUN6SyxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztTQUFDO1FBQ3JFLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQUM7UUFDcEYsSUFBSSxPQUFPLElBQUksQ0FBQyxjQUFjLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUFDO1FBQ25HLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyx1QkFBdUI7SUFNaEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksdUJBQXVCLEVBQUUsQ0FBQztRQUN0QyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFO1lBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUFDO1FBQ3BHLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBMkM7UUFDbkQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsYUFBcUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztTQUFDO1FBQzdNLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDdkYsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUM5RSxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxtQkFBbUI7SUFNNUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUNsQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFO1lBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7U0FBQztRQUM5RSxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQXVDO1FBQy9DLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQUM7UUFDM0UsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUN2RixJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUFDO1FBQzNFLElBQUksT0FBTyxJQUFJLENBQUMsY0FBYyxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsY0FBc0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUFDO1FBQ25OLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxrQkFBa0I7SUFRM0IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUNqQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFO1lBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7U0FBQztRQUM5RSxJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUU7WUFBQyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUFDO1FBQ3hFLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBc0M7UUFDOUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUN2RixJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUFDO1FBQzNFLElBQUksT0FBTyxJQUFJLENBQUMsY0FBYyxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsY0FBc0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUFDO1FBQ25OLElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1NBQUM7UUFDaEcsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FBQztRQUNqRixJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxZQUFvQixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQUM7UUFDdk0sT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLG9CQUFvQjtJQUc3QixNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1FBQ25DLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQXdDO1FBQ2hELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQUM7UUFDOUUsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLGdCQUFnQjtJQUt6QixNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQy9CLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQW9DO1FBQzVDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQUM7UUFDM0UsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FBQztRQUNqRixJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxtQkFBbUI7SUFFNUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUNsQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsWUFBWSxNQUF1QztRQUMvQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sb0JBQW9CO0lBRzdCLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFDbkMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLGdCQUFnQixFQUFFO1lBQUMsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7U0FBQztRQUMxRyxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQXdDO1FBQ2hELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsZ0JBQXdCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztTQUFDO1FBQy9OLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxpQkFBaUI7SUFLMUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUNoQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUFDO1FBQ2hFLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBcUM7UUFDN0MsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUMzRSxJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUFDO1FBQ2pGLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQUM7UUFDakYsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLGtCQUFrQjtJQU0zQixNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ2pDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxrQkFBa0IsRUFBRTtZQUFDLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQUM7UUFDakgsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsWUFBWSxNQUFzQztRQUM5QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLGtCQUEwQixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7U0FBQztRQUMzTyxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQ3ZGLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQUM7UUFDOUUsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUM5RSxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8scUJBQXFCO0lBUzlCLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDcEMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRTtZQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQUM7UUFDOUUsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFO1lBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7U0FBQztRQUN4RSxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUFDO1FBQ2xFLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBeUM7UUFDakQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUMzRSxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQ3ZGLElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1NBQUM7UUFDaEcsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUMzRSxJQUFJLE9BQU8sSUFBSSxDQUFDLGNBQWMsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLGNBQXNCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7U0FBQztRQUNuTixJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxZQUFvQixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQUM7UUFDdk0sSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsVUFBa0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQzNMLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxzQkFBc0I7SUFHL0IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksc0JBQXNCLEVBQUUsQ0FBQztRQUNyQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsWUFBWSxNQUEwQztRQUNsRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxpQkFBaUI7SUFRMUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUNoQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFO1lBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7U0FBQztRQUN4RSxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUFDO1FBQ2xFLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBcUM7UUFDN0MsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUMzRSxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQ3ZGLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLFlBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7U0FBQztRQUN2TSxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUFDO1FBQzNFLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLFVBQWtCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUMzTCxJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztTQUFDO1FBQ2hHLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxrQkFBa0I7SUFHM0IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUNqQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsWUFBWSxNQUFzQztRQUM5QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxnQkFBZ0I7SUFTekIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUMvQixDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFO1lBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7U0FBQztRQUN4RSxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUFDO1FBQ2xFLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBb0M7UUFDNUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUN2RixJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUFDO1FBQzNFLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLFlBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7U0FBQztRQUN2TSxJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztTQUFDO1FBQ2hHLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQUM7UUFDM0UsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsVUFBa0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQzNMLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQUM7UUFDakYsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLG9CQUFvQjtJQUc3QixNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1FBQ25DLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFBQyxDQUFDLENBQUMsYUFBYSxHQUFHLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7U0FBQztRQUM5RixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQXdDO1FBQ2hELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLGFBQXFCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7U0FBQztRQUM3TSxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8scUJBQXFCO0lBSzlCLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDcEMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLGtCQUFrQixFQUFFO1lBQUMsQ0FBQyxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUFDO1FBQzlHLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBeUM7UUFDakQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxrQkFBMEIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1NBQUM7UUFDM08sSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUMzRSxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxxQkFBcUI7SUFHOUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUNwQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFO1lBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQUM7UUFDakcsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsWUFBWSxNQUF5QztRQUNqRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLGNBQWMsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLGNBQXNCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7U0FBQztRQUNuTixPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sc0JBQXNCO0lBSy9CLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLHNCQUFzQixFQUFFLENBQUM7UUFDckMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLGtCQUFrQixFQUFFO1lBQUMsQ0FBQyxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUFDO1FBQzlHLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBMEM7UUFDbEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxrQkFBMEIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1NBQUM7UUFDM08sSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUMzRSxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxpQkFBaUI7SUFhMUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUNoQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsZUFBZSxFQUFFO1lBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7U0FBQztRQUNqRixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQXFDO1FBQzdDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQUM7UUFDM0UsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FBQztRQUNqRixJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQ3ZGLElBQUksT0FBTyxJQUFJLENBQUMsZUFBZSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsZUFBdUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztTQUFDO1FBQ3pOLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQUM7UUFDakYsSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7U0FBQztRQUNwRixJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQ3ZGLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQUM7UUFDM0UsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUN2RixJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUFDO1FBQ2pGLElBQUksT0FBTyxJQUFJLENBQUMsaUJBQWlCLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1NBQUM7UUFDNUcsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLGtCQUFrQjtJQWMzQixNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ2pDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxlQUFlLEVBQUU7WUFBQyxDQUFDLENBQUMsZUFBZSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUFDO1FBQ2pGLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBc0M7UUFDOUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUMzRSxJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUFDO1FBQ2pGLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDdkYsSUFBSSxPQUFPLElBQUksQ0FBQyxlQUFlLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxlQUF1QixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1NBQUM7UUFDek4sSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FBQztRQUNqRixJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUFDO1FBQ3BGLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDdkYsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUMzRSxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQ3ZGLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQUM7UUFDakYsSUFBSSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7U0FBQztRQUM1RyxJQUFJLE9BQU8sSUFBSSxDQUFDLGNBQWMsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1NBQUM7UUFDbkcsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLHVCQUF1QjtJQUdoQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1FBQ3RDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQTJDO1FBQ25ELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQUM7UUFDM0UsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLHdCQUF3QjtJQUlqQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO1FBQ3ZDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQTRDO1FBQ3BELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQUM7UUFDOUUsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUMzRSxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sZ0JBQWdCO0lBT3pCLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDL0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBb0M7UUFDNUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FBQztRQUNqRixJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUFDO1FBQzNFLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDdkYsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUMzRSxJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUFDO1FBQ2pGLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyx3QkFBd0I7SUFHakMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksd0JBQXdCLEVBQUUsQ0FBQztRQUN2QyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsWUFBWSxNQUE0QztRQUNwRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUFDO1FBQzNFLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyx5QkFBeUI7SUFLbEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUkseUJBQXlCLEVBQUUsQ0FBQztRQUN4QyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEVBQUU7WUFBQyxDQUFDLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1NBQUM7UUFDOUcsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsWUFBWSxNQUE2QztRQUNyRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLGtCQUEwQixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7U0FBQztRQUMzTyxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUFDO1FBQzNFLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQUM7UUFDOUUsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLHVCQUF1QjtJQVNoQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1FBQ3RDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFBQyxDQUFDLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQUM7UUFDaEUsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQUM7UUFDM0UsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFO1lBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUFDO1FBQ2hHLElBQUksS0FBSyxDQUFDLElBQUksRUFBRTtZQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FBQztRQUNwRCxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQTJDO1FBQ25ELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQUM7UUFDM0UsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FBQztRQUNqRixJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxPQUFlLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUN6SyxJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxXQUFtQixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1NBQUM7UUFDak0sSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7U0FBQztRQUNyRSxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUFDO1FBQ3BGLElBQUksT0FBTyxJQUFJLENBQUMsY0FBYyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7U0FBQztRQUNuRyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sd0JBQXdCO0lBTWpDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLHdCQUF3QixFQUFFLENBQUM7UUFDdkMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRTtZQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7U0FBQztRQUN0RyxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQTRDO1FBQ3BELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsY0FBYyxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsY0FBc0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUFDO1FBQ25OLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDdkYsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUM5RSxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxxQkFBcUI7SUFJOUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUNwQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxpQkFBaUIsQ0FBa0IsQ0FBQyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7U0FBQztRQUMxRyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFBQyxDQUFDLENBQUMsS0FBSyxHQUFHLGlCQUFpQixDQUF3QixDQUFDLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQUM7UUFDMUcsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsWUFBWSxNQUF5QztRQUNqRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUFDO1FBQ3BGLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQUM7UUFDeEUsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLHdCQUF3QjtJQUVqQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO1FBQ3ZDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQTRDO1FBQ3BELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyx5QkFBeUI7SUFNbEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUkseUJBQXlCLEVBQUUsQ0FBQztRQUN4QyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFO1lBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUFDO1FBQ3RFLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRTtZQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FBQztRQUNsRixJQUFJLEtBQUssQ0FBQyxlQUFlLEVBQUU7WUFBQyxDQUFDLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQUM7UUFDckYsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFO1lBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztTQUFDO1FBQzVFLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBNkM7UUFDckQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUN2RixJQUFJLE9BQU8sSUFBSSxDQUFDLGNBQWMsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1NBQUM7UUFDbkcsSUFBSSxPQUFPLElBQUksQ0FBQyxlQUFlLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztTQUFDO1FBQ3RHLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQUM7UUFDN0YsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLGdCQUFnQjtJQUt6QixNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQy9CLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQW9DO1FBQzVDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDdkYsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUMzRSxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUFDO1FBQzNFLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxxQkFBcUI7SUFJOUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUNwQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxpQkFBaUIsQ0FBa0IsQ0FBQyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7U0FBQztRQUMxRyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFBQyxDQUFDLENBQUMsS0FBSyxHQUFHLGlCQUFpQixDQUF3QixDQUFDLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQUM7UUFDMUcsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsWUFBWSxNQUF5QztRQUNqRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUFDO1FBQ3BGLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQUM7UUFDeEUsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLDZCQUE2QjtJQUd0QyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSw2QkFBNkIsRUFBRSxDQUFDO1FBQzVDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQWlEO1FBQ3pELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQUM7UUFDOUUsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLDhCQUE4QjtJQUl2QyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSw4QkFBOEIsRUFBRSxDQUFDO1FBQzdDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQWtEO1FBQzFELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQUM7UUFDOUUsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUM5RSxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8seUJBQXlCO0lBR2xDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLHlCQUF5QixFQUFFLENBQUM7UUFDeEMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBNkM7UUFDckQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxFQUFFLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7U0FBQztRQUMvRCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sMEJBQTBCO0lBSW5DLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLDBCQUEwQixFQUFFLENBQUM7UUFDekMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBOEM7UUFDdEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7U0FBQztRQUM3RixJQUFJLE9BQU8sSUFBSSxDQUFDLEVBQUUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztTQUFDO1FBQy9ELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTywyQkFBMkI7SUFHcEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksMkJBQTJCLEVBQUUsQ0FBQztRQUMxQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFO1lBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxrQ0FBa0MsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQUM7UUFDekcsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsWUFBWSxNQUErQztRQUN2RCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxXQUFtQixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1NBQUM7UUFDak0sT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLDRCQUE0QjtJQUtyQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSw0QkFBNEIsRUFBRSxDQUFDO1FBQzNDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUU7WUFBQyxDQUFDLENBQUMsWUFBWSxHQUFHLG1DQUFtQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7U0FBQztRQUM3RyxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQWdEO1FBQ3hELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQUM7UUFDOUUsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUM5RSxJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxZQUFvQixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQUM7UUFDdk0sT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLHVCQUF1QjtJQUdoQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1FBQ3RDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtZQUFDLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQUM7UUFDbEcsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsWUFBWSxNQUEyQztRQUNuRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLGdCQUF3QixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7U0FBQztRQUMvTixPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sd0JBQXdCO0lBS2pDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLHdCQUF3QixFQUFFLENBQUM7UUFDdkMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBNEM7UUFDcEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxjQUFjLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUFDO1FBQ25HLElBQUksT0FBTyxJQUFJLENBQUMsRUFBRSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1NBQUM7UUFDL0QsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUM5RSxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sa0JBQWtCO0lBSzNCLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDakMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FBQztRQUM3RCxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQXNDO1FBQzlDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQUM7UUFDOUUsSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7U0FBQztRQUNwRixJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTywyQkFBMkI7SUFJcEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksMkJBQTJCLEVBQUUsQ0FBQztRQUMxQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsWUFBWSxNQUErQztRQUN2RCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQ3ZGLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQUM7UUFDakYsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLHdCQUF3QjtJQU9qQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO1FBQ3ZDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQUM7UUFDOUUsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFO1lBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7U0FBQztRQUN2RixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQTRDO1FBQ3BELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQUM7UUFDcEYsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUMzRSxJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUFDO1FBQ2pGLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLFVBQWtCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUMzTCxJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxXQUFtQixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1NBQUM7UUFDak0sT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLHlCQUF5QjtJQUtsQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSx5QkFBeUIsRUFBRSxDQUFDO1FBQ3hDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLDZCQUE2QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQUM7UUFDdEYsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsWUFBWSxNQUE2QztRQUNyRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxLQUFhLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7U0FBQztRQUM3SixJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQ3ZGLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQUM7UUFDOUUsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLDZCQUE2QjtJQWN0QyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSw2QkFBNkIsRUFBRSxDQUFDO1FBQzVDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUFDO1FBQ3JGLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBaUQ7UUFDekQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUMzRSxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUFDO1FBQ3hFLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQUM7UUFDN0YsSUFBSSxPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7U0FBQztRQUM3RixJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQUM7UUFDOUUsSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7U0FBQztRQUNoRyxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUFDO1FBQ3hFLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQUM7UUFDcEYsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsVUFBa0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQzNMLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQUM7UUFDcEYsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FBQztRQUNqRixPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sMEJBQTBCO0lBR25DLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLDBCQUEwQixFQUFFLENBQUM7UUFDekMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBOEM7UUFDdEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxFQUFFLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7U0FBQztRQUMvRCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sMkJBQTJCO0lBR3BDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLDJCQUEyQixFQUFFLENBQUM7UUFDMUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRTtZQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7U0FBQztRQUN0RixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQStDO1FBQ3ZELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLFlBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7U0FBQztRQUN2TSxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sa0NBQWtDO0lBRzNDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLGtDQUFrQyxFQUFFLENBQUM7UUFDakQsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBc0Q7UUFDOUQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUM5RSxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sbUNBQW1DO0lBSzVDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLG1DQUFtQyxFQUFFLENBQUM7UUFDbEQsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRTtZQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsbUNBQW1DLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUFDO1FBQzdHLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBdUQ7UUFDL0QsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUMzRSxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLFlBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7U0FBQztRQUN2TSxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sd0JBQXdCO0lBSWpDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLHdCQUF3QixFQUFFLENBQUM7UUFDdkMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FBQztRQUNoRSxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQTRDO1FBQ3BELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQUM7UUFDM0UsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FBQztRQUNqRixPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8seUJBQXlCO0lBS2xDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLHlCQUF5QixFQUFFLENBQUM7UUFDeEMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLGtCQUFrQixFQUFFO1lBQUMsQ0FBQyxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7U0FBQztRQUNsSCxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQTZDO1FBQ3JELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsa0JBQWtCLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsa0JBQTBCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztTQUFDO1FBQzNPLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDdkYsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUM5RSxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sc0JBQXNCO0lBSS9CLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLHNCQUFzQixFQUFFLENBQUM7UUFDckMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FBQztRQUNoRSxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQTBDO1FBQ2xELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQUM7UUFDM0UsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FBQztRQUNqRixPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sdUJBQXVCO0lBS2hDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLHVCQUF1QixFQUFFLENBQUM7UUFDdEMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRTtZQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7U0FBQztRQUNwRyxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQTJDO1FBQ25ELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsY0FBYyxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsY0FBc0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUFDO1FBQ25OLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDdkYsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUM5RSxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sZ0NBQWdDO0lBS3pDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLGdDQUFnQyxFQUFFLENBQUM7UUFDL0MsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FBQztRQUNoRSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7WUFBQyxDQUFDLENBQUMsT0FBTyxHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FBQztRQUM3RSxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQW9EO1FBQzVELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQUM7UUFDM0UsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FBQztRQUNqRixJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxPQUFlLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUN6SyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8saUNBQWlDO0lBTTFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLGlDQUFpQyxFQUFFLENBQUM7UUFDaEQsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRTtZQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQUM7UUFDaEcsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsWUFBWSxNQUFxRDtRQUM3RCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLGNBQWMsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLGNBQXNCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7U0FBQztRQUNuTixJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQ3ZGLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQUM7UUFDOUUsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUM5RSxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sYUFBYTtJQUl0QixNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUM1QixDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsWUFBWSxNQUFpQztRQUN6QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLEVBQUUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztTQUFDO1FBQy9ELElBQUksT0FBTyxJQUFJLENBQUMsR0FBRyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1NBQUM7UUFDbEUsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLGtDQUFrQztJQU0zQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSxrQ0FBa0MsRUFBRSxDQUFDO1FBQ2pELENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUFDO1FBQ2xGLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBc0Q7UUFDOUQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUM5RSxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztTQUFDO1FBQ3JFLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQUM7UUFDM0UsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsVUFBa0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQzNMLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxtQ0FBbUM7SUFNNUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksbUNBQW1DLEVBQUUsQ0FBQztRQUNsRCxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFO1lBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7U0FBQztRQUNsRixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQXVEO1FBQy9ELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQUM7UUFDOUUsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7U0FBQztRQUNyRSxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUFDO1FBQzNFLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLFVBQWtCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUMzTCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sVUFBVTtJQU9uQixNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUN6QixDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsWUFBWSxNQUE4QjtRQUN0QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUFDO1FBQ3BGLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQUM7UUFDM0UsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUMzRSxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUFDO1FBQzNFLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQUM7UUFDckUsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLFlBQVk7SUFZckIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FBQztRQUM3RCxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQUM7UUFDdEUsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsWUFBWSxNQUFnQztRQUN4QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLEVBQUUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztTQUFDO1FBQy9ELElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQUM7UUFDOUUsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUM5RSxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQUM7UUFDcEYsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUM5RSxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQ3ZGLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQUM7UUFDckUsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7U0FBQztRQUN4RSxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxtQkFBbUI7SUFZNUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUNsQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztTQUFDO1FBQzdELElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtZQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FBQztRQUN0RSxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQXVDO1FBQy9DLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsRUFBRSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1NBQUM7UUFDL0QsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUM5RSxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQUM7UUFDOUUsSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7U0FBQztRQUNwRixJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDdkYsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7U0FBQztRQUNyRSxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUFDO1FBQ3hFLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQUM7UUFDOUUsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLHFCQUFxQjtJQVE5QixNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQ3BDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUU7WUFBQyxDQUFDLENBQUMsY0FBYyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUFDO1FBQzlFLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRTtZQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQUM7UUFDeEUsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsWUFBWSxNQUF5QztRQUNqRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQ3ZGLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQUM7UUFDM0UsSUFBSSxPQUFPLElBQUksQ0FBQyxjQUFjLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxjQUFzQixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1NBQUM7UUFDbk4sSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7U0FBQztRQUNoRyxJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUFDO1FBQ2pGLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLFlBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7U0FBQztRQUN2TSxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sd0JBQXdCO0lBSWpDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLHdCQUF3QixFQUFFLENBQUM7UUFDdkMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FBQztRQUNoRSxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQTRDO1FBQ3BELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQUM7UUFDM0UsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FBQztRQUNqRixPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8seUJBQXlCO0lBTWxDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLHlCQUF5QixFQUFFLENBQUM7UUFDeEMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLHFCQUFxQixFQUFFO1lBQUMsQ0FBQyxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7U0FBQztRQUM5SCxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQTZDO1FBQ3JELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMscUJBQXFCLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMscUJBQTZCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztTQUFDO1FBQzdQLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDdkYsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUM5RSxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxVQUFVO0lBSW5CLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ3pCLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQThCO1FBQ3RDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQUM7UUFDN0YsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7U0FBQztRQUMxRixPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sWUFBWTtJQUlyQixNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMzQixDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO1lBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztTQUFDO1FBQ3ZELElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FBQztRQUNuRSxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQWdDO1FBQ3hDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQUM7UUFDeEUsSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7U0FBQztRQUNwRixPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sMEJBQTBCO0lBR25DLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLDBCQUEwQixFQUFFLENBQUM7UUFDekMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBOEM7UUFDdEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUM5RSxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sMkJBQTJCO0lBSXBDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLDJCQUEyQixFQUFFLENBQUM7UUFDMUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBK0M7UUFDdkQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUMzRSxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8gQ29kZSBnZW5lcmF0ZWQgYnkgc2RrZ2VuXG4vLyBETyBOT1QgRURJVCEuXG4vL1xuLy8gT2JqZWN0cy5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW1wb3J0ICogYXMgaSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuaW1wb3J0ICogYXMgZSBmcm9tICcuLi9lbnVtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnVtU3RyaW5nVG9WYWx1ZTxFPihlbnVtUmVmOiBhbnksIHZhbHVlOiBzdHJpbmcpOiBFIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGVudW1SZWZbdmFsdWVdO1xufVxuXG5leHBvcnQgY2xhc3MgQWRkQWRtaW5MaWJyYXJ5VXNlclJlcXVlc3QgaW1wbGVtZW50cyBpLkFkZEFkbWluTGlicmFyeVVzZXJSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBsaWJyYXJ5YWRkOiBMaWJyYXJ5QWRtaW5Vc2VyTWFuYW5nZW1lbnRSZXF1ZXN0O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQWRkQWRtaW5MaWJyYXJ5VXNlclJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBBZGRBZG1pbkxpYnJhcnlVc2VyUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5saWJyYXJ5YWRkKSB7bS5saWJyYXJ5YWRkID0gTGlicmFyeUFkbWluVXNlck1hbmFuZ2VtZW50UmVxdWVzdC5mcm9tUHJvdG8ocHJvdG8ubGlicmFyeWFkZCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFkZEFkbWluTGlicmFyeVVzZXJSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubGlicmFyeWFkZCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5saWJyYXJ5YWRkICE9PSBudWxsKSB7dG9SZXR1cm5bJ2xpYnJhcnlhZGQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubGlicmFyeWFkZCA/ICh0aGlzLmxpYnJhcnlhZGQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubGlicmFyeWFkZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBZGRBZG1pbkxpYnJhcnlVc2VyUmVzcG9uc2UgaW1wbGVtZW50cyBpLkFkZEFkbWluTGlicmFyeVVzZXJSZXNwb25zZUludGVyZmFjZSB7XG4gICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgYWRkcmVzcG9uc2U6IExpYnJhcnlBZG1pblVzZXJNYW5hbmdlbWVudFJlc3BvbnNlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQWRkQWRtaW5MaWJyYXJ5VXNlclJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQWRkQWRtaW5MaWJyYXJ5VXNlclJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmFkZHJlc3BvbnNlKSB7bS5hZGRyZXNwb25zZSA9IExpYnJhcnlBZG1pblVzZXJNYW5hbmdlbWVudFJlc3BvbnNlLmZyb21Qcm90byhwcm90by5hZGRyZXNwb25zZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFkZEFkbWluTGlicmFyeVVzZXJSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN1Y2Nlc3MgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N1Y2Nlc3MnXSA9IHRoaXMuc3VjY2Vzczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXNzYWdlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXNzYWdlJ10gPSB0aGlzLm1lc3NhZ2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWRkcmVzcG9uc2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYWRkcmVzcG9uc2UgIT09IG51bGwpIHt0b1JldHVyblsnYWRkcmVzcG9uc2UnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuYWRkcmVzcG9uc2UgPyAodGhpcy5hZGRyZXNwb25zZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5hZGRyZXNwb25zZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBZGRUYXhpVXNlckRhdGFSZXF1ZXN0IGltcGxlbWVudHMgaS5BZGRUYXhpVXNlckRhdGFSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhZGR0YXhpVXNlcmRhdGE6IFRheGlVc2VyRGF0YTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEFkZFRheGlVc2VyRGF0YVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBBZGRUYXhpVXNlckRhdGFSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmFkZHRheGlVc2VyZGF0YSkge20uYWRkdGF4aVVzZXJkYXRhID0gVGF4aVVzZXJEYXRhLmZyb21Qcm90byhwcm90by5hZGR0YXhpVXNlcmRhdGEpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BZGRUYXhpVXNlckRhdGFSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWRkdGF4aVVzZXJkYXRhICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmFkZHRheGlVc2VyZGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWydhZGR0YXhpVXNlcmRhdGEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuYWRkdGF4aVVzZXJkYXRhID8gKHRoaXMuYWRkdGF4aVVzZXJkYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmFkZHRheGlVc2VyZGF0YTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBZGRUYXhpVXNlckRhdGFSZXNwb25zZSBpbXBsZW1lbnRzIGkuQWRkVGF4aVVzZXJEYXRhUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGFkZHRheGlTdGF0dXM6IGJvb2xlYW47XG4gICAgaWQ6IHN0cmluZztcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBZGRUYXhpVXNlckRhdGFSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEFkZFRheGlVc2VyRGF0YVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BZGRUYXhpVXNlckRhdGFSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFkZHRheGlTdGF0dXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FkZHRheGlTdGF0dXMnXSA9IHRoaXMuYWRkdGF4aVN0YXR1czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVzc2FnZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVzc2FnZSddID0gdGhpcy5tZXNzYWdlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFkbWluVXNlck1hbmFnZW1lbnQgaW1wbGVtZW50cyBpLkFkbWluVXNlck1hbmFnZW1lbnRJbnRlcmZhY2Uge1xuICAgIGVtYWlsSWQ6IHN0cmluZztcbiAgICByb2xlOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBZG1pblVzZXJNYW5hZ2VtZW50IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQWRtaW5Vc2VyTWFuYWdlbWVudCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQWRtaW5Vc2VyTWFuYWdlbWVudEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVtYWlsSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2VtYWlsSWQnXSA9IHRoaXMuZW1haWxJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yb2xlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydyb2xlJ10gPSB0aGlzLnJvbGU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWRtaW51c2VyZmlsdGVyIGltcGxlbWVudHMgaS5BZG1pbnVzZXJmaWx0ZXJJbnRlcmZhY2Uge1xuICAgIG1haWxpZDogc3RyaW5nO1xuICAgIHJvbGU6IHN0cmluZztcbiAgICBzdGF0dXM6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEFkbWludXNlcmZpbHRlciB7XG4gICAgICAgIGxldCBtID0gbmV3IEFkbWludXNlcmZpbHRlcigpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQWRtaW51c2VyZmlsdGVySW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWFpbGlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtYWlsaWQnXSA9IHRoaXMubWFpbGlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJvbGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3JvbGUnXSA9IHRoaXMucm9sZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGF0dXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N0YXR1cyddID0gdGhpcy5zdGF0dXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWRtaW51c2VycGFnaW5ncmVxdWVzdCBpbXBsZW1lbnRzIGkuQWRtaW51c2VycGFnaW5ncmVxdWVzdEludGVyZmFjZSB7XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICBmaWx0ZXJzOiBBZG1pbnVzZXJmaWx0ZXI7XG4gICAgZnJvbTogbnVtYmVyO1xuICAgIHNvcnRmaWVsZDogc3RyaW5nO1xuICAgIGRpcmVjdGlvbmZpZWxkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBZG1pbnVzZXJwYWdpbmdyZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQWRtaW51c2VycGFnaW5ncmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wYWdlU2l6ZSkge20ucGFnZVNpemUgPSBwYXJzZUludChwcm90by5wYWdlU2l6ZSwgMTApO31cbiAgICAgICAgaWYgKHByb3RvLmZpbHRlcnMpIHttLmZpbHRlcnMgPSBBZG1pbnVzZXJmaWx0ZXIuZnJvbVByb3RvKHByb3RvLmZpbHRlcnMpO31cbiAgICAgICAgaWYgKHByb3RvLmZyb20pIHttLmZyb20gPSBwYXJzZUludChwcm90by5mcm9tLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFkbWludXNlcnBhZ2luZ3JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnNvciddID0gdGhpcy5jdXJzb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnZVNpemUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhZ2VTaXplJ10gPSB0aGlzLnBhZ2VTaXplO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpbHRlcnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmlsdGVycyAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWx0ZXJzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZpbHRlcnMgPyAodGhpcy5maWx0ZXJzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpbHRlcnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZnJvbSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZnJvbSddID0gdGhpcy5mcm9tO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNvcnRmaWVsZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc29ydGZpZWxkJ10gPSB0aGlzLnNvcnRmaWVsZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kaXJlY3Rpb25maWVsZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGlyZWN0aW9uZmllbGQnXSA9IHRoaXMuZGlyZWN0aW9uZmllbGQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWRtaW51c2VycGFnaW5ncmVzcG9uc2UgaW1wbGVtZW50cyBpLkFkbWludXNlcnBhZ2luZ3Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBhZG1pbnVzZXJkYXRhOiBBZG1pblVzZXJNYW5hZ2VtZW50W107XG4gICAgbmV4dEN1cnNvcjogc3RyaW5nO1xuICAgIGhhc01vcmU6IGJvb2xlYW47XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQWRtaW51c2VycGFnaW5ncmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBBZG1pbnVzZXJwYWdpbmdyZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5hZG1pbnVzZXJkYXRhKSB7bS5hZG1pbnVzZXJkYXRhID0gcHJvdG8uYWRtaW51c2VyZGF0YS5tYXAoQWRtaW5Vc2VyTWFuYWdlbWVudC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BZG1pbnVzZXJwYWdpbmdyZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFkbWludXNlcmRhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYWRtaW51c2VyZGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWydhZG1pbnVzZXJkYXRhJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmFkbWludXNlcmRhdGEgPyAodGhpcy5hZG1pbnVzZXJkYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmFkbWludXNlcmRhdGE7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmV4dEN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmV4dEN1cnNvciddID0gdGhpcy5uZXh0Q3Vyc29yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhhc01vcmUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hhc01vcmUnXSA9IHRoaXMuaGFzTW9yZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXNzYWdlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXNzYWdlJ10gPSB0aGlzLm1lc3NhZ2U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQm9va0NoZWNrT3V0UmVxdWVzdCBpbXBsZW1lbnRzIGkuQm9va0NoZWNrT3V0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgYm9va0lkOiBzdHJpbmc7XG4gICAgZW1wbG95ZWVJZDogc3RyaW5nO1xuICAgIGFjdGlvbjogc3RyaW5nO1xuICAgIGNoZWNrZWRPdXREYXRlOiBEYXRlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQm9va0NoZWNrT3V0UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEJvb2tDaGVja091dFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY2hlY2tlZE91dERhdGUpIHttLmNoZWNrZWRPdXREYXRlID0gbmV3IERhdGUocHJvdG8uY2hlY2tlZE91dERhdGUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Cb29rQ2hlY2tPdXRSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYm9va0lkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydib29rSWQnXSA9IHRoaXMuYm9va0lkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVtcGxveWVlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2VtcGxveWVlSWQnXSA9IHRoaXMuZW1wbG95ZWVJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY3Rpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjdGlvbiddID0gdGhpcy5hY3Rpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2hlY2tlZE91dERhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY2hlY2tlZE91dERhdGUgIT09IG51bGwpIHt0b1JldHVyblsnY2hlY2tlZE91dERhdGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY2hlY2tlZE91dERhdGUgPyAodGhpcy5jaGVja2VkT3V0RGF0ZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jaGVja2VkT3V0RGF0ZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCb29rQ2hlY2tlZE91dERhdGEgaW1wbGVtZW50cyBpLkJvb2tDaGVja2VkT3V0RGF0YUludGVyZmFjZSB7XG4gICAgZW1wbG95ZWVJZDogc3RyaW5nO1xuICAgIGJvb2tJZDogc3RyaW5nO1xuICAgIGNoZWNrZWRPdXREYXRlOiBEYXRlO1xuICAgIHRyYW5zYWN0aW9uSWQ6IHN0cmluZztcbiAgICBib29rTmFtZTogc3RyaW5nO1xuICAgIHJldHVybmVkRGF0ZTogRGF0ZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEJvb2tDaGVja2VkT3V0RGF0YSB7XG4gICAgICAgIGxldCBtID0gbmV3IEJvb2tDaGVja2VkT3V0RGF0YSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jaGVja2VkT3V0RGF0ZSkge20uY2hlY2tlZE91dERhdGUgPSBuZXcgRGF0ZShwcm90by5jaGVja2VkT3V0RGF0ZSk7fVxuICAgICAgICBpZiAocHJvdG8ucmV0dXJuZWREYXRlKSB7bS5yZXR1cm5lZERhdGUgPSBuZXcgRGF0ZShwcm90by5yZXR1cm5lZERhdGUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Cb29rQ2hlY2tlZE91dERhdGFJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbXBsb3llZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydlbXBsb3llZUlkJ10gPSB0aGlzLmVtcGxveWVlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYm9va0lkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydib29rSWQnXSA9IHRoaXMuYm9va0lkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNoZWNrZWRPdXREYXRlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNoZWNrZWRPdXREYXRlICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NoZWNrZWRPdXREYXRlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNoZWNrZWRPdXREYXRlID8gKHRoaXMuY2hlY2tlZE91dERhdGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY2hlY2tlZE91dERhdGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudHJhbnNhY3Rpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndHJhbnNhY3Rpb25JZCddID0gdGhpcy50cmFuc2FjdGlvbklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJvb2tOYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydib29rTmFtZSddID0gdGhpcy5ib29rTmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXR1cm5lZERhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucmV0dXJuZWREYXRlICE9PSBudWxsKSB7dG9SZXR1cm5bJ3JldHVybmVkRGF0ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5yZXR1cm5lZERhdGUgPyAodGhpcy5yZXR1cm5lZERhdGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucmV0dXJuZWREYXRlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJvb2tDaGVja291dFJlc3BvbnNlIGltcGxlbWVudHMgaS5Cb29rQ2hlY2tvdXRSZXNwb25zZUludGVyZmFjZSB7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQm9va0NoZWNrb3V0UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBCb29rQ2hlY2tvdXRSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQm9va0NoZWNrb3V0UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXNzYWdlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXNzYWdlJ10gPSB0aGlzLm1lc3NhZ2U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQm9va0Ryb3Bkb3duRGF0YSBpbXBsZW1lbnRzIGkuQm9va0Ryb3Bkb3duRGF0YUludGVyZmFjZSB7XG4gICAgYm9va0lkOiBzdHJpbmc7XG4gICAgYm9va05hbWU6IHN0cmluZztcbiAgICBxdWFuaXR5OiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBCb29rRHJvcGRvd25EYXRhIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQm9va0Ryb3Bkb3duRGF0YSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQm9va0Ryb3Bkb3duRGF0YUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJvb2tJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYm9va0lkJ10gPSB0aGlzLmJvb2tJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ib29rTmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYm9va05hbWUnXSA9IHRoaXMuYm9va05hbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucXVhbml0eSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncXVhbml0eSddID0gdGhpcy5xdWFuaXR5O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJvb2tEcm9wZG93blJlcXVlc3QgaW1wbGVtZW50cyBpLkJvb2tEcm9wZG93blJlcXVlc3RJbnRlcmZhY2Uge1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQm9va0Ryb3Bkb3duUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEJvb2tEcm9wZG93blJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkJvb2tEcm9wZG93blJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCb29rRHJvcGRvd25SZXNwb25zZSBpbXBsZW1lbnRzIGkuQm9va0Ryb3Bkb3duUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGJvb2tEcm9wZG93bkRhdGE6IEJvb2tEcm9wZG93bkRhdGFbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEJvb2tEcm9wZG93blJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQm9va0Ryb3Bkb3duUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYm9va0Ryb3Bkb3duRGF0YSkge20uYm9va0Ryb3Bkb3duRGF0YSA9IHByb3RvLmJvb2tEcm9wZG93bkRhdGEubWFwKEJvb2tEcm9wZG93bkRhdGEuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQm9va0Ryb3Bkb3duUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ib29rRHJvcGRvd25EYXRhICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmJvb2tEcm9wZG93bkRhdGEgIT09IG51bGwpIHt0b1JldHVyblsnYm9va0Ryb3Bkb3duRGF0YSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5ib29rRHJvcGRvd25EYXRhID8gKHRoaXMuYm9va0Ryb3Bkb3duRGF0YSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5ib29rRHJvcGRvd25EYXRhO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJvb2tGaWx0ZXJSZXF1ZXN0IGltcGxlbWVudHMgaS5Cb29rRmlsdGVyUmVxdWVzdEludGVyZmFjZSB7XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICBib29rbmFtZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQm9va0ZpbHRlclJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBCb29rRmlsdGVyUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wYWdlU2l6ZSkge20ucGFnZVNpemUgPSBwYXJzZUludChwcm90by5wYWdlU2l6ZSwgMTApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Cb29rRmlsdGVyUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3Vyc29yJ10gPSB0aGlzLmN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFnZVNpemUnXSA9IHRoaXMucGFnZVNpemU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYm9va25hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Jvb2tuYW1lJ10gPSB0aGlzLmJvb2tuYW1lO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJvb2tGaWx0ZXJSZXNwb25zZSBpbXBsZW1lbnRzIGkuQm9va0ZpbHRlclJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBib29rZmlsdGVycmVzcG9uc2U6IEJvb2tGaWx0ZXJSZXF1ZXN0W107XG4gICAgbmV4dEN1cnNvcjogc3RyaW5nO1xuICAgIGhhc01vcmU6IGJvb2xlYW47XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQm9va0ZpbHRlclJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQm9va0ZpbHRlclJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmJvb2tmaWx0ZXJyZXNwb25zZSkge20uYm9va2ZpbHRlcnJlc3BvbnNlID0gcHJvdG8uYm9va2ZpbHRlcnJlc3BvbnNlLm1hcChCb29rRmlsdGVyUmVxdWVzdC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Cb29rRmlsdGVyUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ib29rZmlsdGVycmVzcG9uc2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYm9va2ZpbHRlcnJlc3BvbnNlICE9PSBudWxsKSB7dG9SZXR1cm5bJ2Jvb2tmaWx0ZXJyZXNwb25zZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5ib29rZmlsdGVycmVzcG9uc2UgPyAodGhpcy5ib29rZmlsdGVycmVzcG9uc2UgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYm9va2ZpbHRlcnJlc3BvbnNlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5leHRDdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25leHRDdXJzb3InXSA9IHRoaXMubmV4dEN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNNb3JlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNNb3JlJ10gPSB0aGlzLmhhc01vcmU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVzc2FnZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVzc2FnZSddID0gdGhpcy5tZXNzYWdlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJvb2tSZXR1cm5FZGl0UmVxdWVzdCBpbXBsZW1lbnRzIGkuQm9va1JldHVybkVkaXRSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBib29rSWQ6IHN0cmluZztcbiAgICBlbXBsb3llZUlkOiBzdHJpbmc7XG4gICAgdHJhbnNhY3Rpb25JZDogc3RyaW5nO1xuICAgIGFjdGlvbjogc3RyaW5nO1xuICAgIGNoZWNrZWRPdXREYXRlOiBEYXRlO1xuICAgIHJldHVybmVkRGF0ZTogRGF0ZTtcbiAgICBtaXNzZWREYXRlOiBEYXRlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQm9va1JldHVybkVkaXRSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQm9va1JldHVybkVkaXRSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmNoZWNrZWRPdXREYXRlKSB7bS5jaGVja2VkT3V0RGF0ZSA9IG5ldyBEYXRlKHByb3RvLmNoZWNrZWRPdXREYXRlKTt9XG4gICAgICAgIGlmIChwcm90by5yZXR1cm5lZERhdGUpIHttLnJldHVybmVkRGF0ZSA9IG5ldyBEYXRlKHByb3RvLnJldHVybmVkRGF0ZSk7fVxuICAgICAgICBpZiAocHJvdG8ubWlzc2VkRGF0ZSkge20ubWlzc2VkRGF0ZSA9IG5ldyBEYXRlKHByb3RvLm1pc3NlZERhdGUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Cb29rUmV0dXJuRWRpdFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ib29rSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Jvb2tJZCddID0gdGhpcy5ib29rSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW1wbG95ZWVJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZW1wbG95ZWVJZCddID0gdGhpcy5lbXBsb3llZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRyYW5zYWN0aW9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RyYW5zYWN0aW9uSWQnXSA9IHRoaXMudHJhbnNhY3Rpb25JZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY3Rpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjdGlvbiddID0gdGhpcy5hY3Rpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2hlY2tlZE91dERhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY2hlY2tlZE91dERhdGUgIT09IG51bGwpIHt0b1JldHVyblsnY2hlY2tlZE91dERhdGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY2hlY2tlZE91dERhdGUgPyAodGhpcy5jaGVja2VkT3V0RGF0ZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jaGVja2VkT3V0RGF0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXR1cm5lZERhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucmV0dXJuZWREYXRlICE9PSBudWxsKSB7dG9SZXR1cm5bJ3JldHVybmVkRGF0ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5yZXR1cm5lZERhdGUgPyAodGhpcy5yZXR1cm5lZERhdGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucmV0dXJuZWREYXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1pc3NlZERhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubWlzc2VkRGF0ZSAhPT0gbnVsbCkge3RvUmV0dXJuWydtaXNzZWREYXRlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm1pc3NlZERhdGUgPyAodGhpcy5taXNzZWREYXRlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm1pc3NlZERhdGU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQm9va1JldHVybkVkaXRSZXNwb25zZSBpbXBsZW1lbnRzIGkuQm9va1JldHVybkVkaXRSZXNwb25zZUludGVyZmFjZSB7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQm9va1JldHVybkVkaXRSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEJvb2tSZXR1cm5FZGl0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkJvb2tSZXR1cm5FZGl0UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXNzYWdlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXNzYWdlJ10gPSB0aGlzLm1lc3NhZ2U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQm9va1JldHVyblJlcXVlc3QgaW1wbGVtZW50cyBpLkJvb2tSZXR1cm5SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBib29rSWQ6IHN0cmluZztcbiAgICBlbXBsb3llZUlkOiBzdHJpbmc7XG4gICAgcmV0dXJuZWREYXRlOiBEYXRlO1xuICAgIGFjdGlvbjogc3RyaW5nO1xuICAgIG1pc3NlZERhdGU6IERhdGU7XG4gICAgdHJhbnNhY3Rpb25JZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQm9va1JldHVyblJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBCb29rUmV0dXJuUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5yZXR1cm5lZERhdGUpIHttLnJldHVybmVkRGF0ZSA9IG5ldyBEYXRlKHByb3RvLnJldHVybmVkRGF0ZSk7fVxuICAgICAgICBpZiAocHJvdG8ubWlzc2VkRGF0ZSkge20ubWlzc2VkRGF0ZSA9IG5ldyBEYXRlKHByb3RvLm1pc3NlZERhdGUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Cb29rUmV0dXJuUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJvb2tJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYm9va0lkJ10gPSB0aGlzLmJvb2tJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbXBsb3llZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydlbXBsb3llZUlkJ10gPSB0aGlzLmVtcGxveWVlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmV0dXJuZWREYXRlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnJldHVybmVkRGF0ZSAhPT0gbnVsbCkge3RvUmV0dXJuWydyZXR1cm5lZERhdGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucmV0dXJuZWREYXRlID8gKHRoaXMucmV0dXJuZWREYXRlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnJldHVybmVkRGF0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY3Rpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjdGlvbiddID0gdGhpcy5hY3Rpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWlzc2VkRGF0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5taXNzZWREYXRlICE9PSBudWxsKSB7dG9SZXR1cm5bJ21pc3NlZERhdGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWlzc2VkRGF0ZSA/ICh0aGlzLm1pc3NlZERhdGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubWlzc2VkRGF0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50cmFuc2FjdGlvbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0cmFuc2FjdGlvbklkJ10gPSB0aGlzLnRyYW5zYWN0aW9uSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQm9va1JldHVyblJlc3BvbnNlIGltcGxlbWVudHMgaS5Cb29rUmV0dXJuUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIG1lc3NhZ2U6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEJvb2tSZXR1cm5SZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEJvb2tSZXR1cm5SZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQm9va1JldHVyblJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVzc2FnZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVzc2FnZSddID0gdGhpcy5tZXNzYWdlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJvb2tSZXR1cm5lZERhdGEgaW1wbGVtZW50cyBpLkJvb2tSZXR1cm5lZERhdGFJbnRlcmZhY2Uge1xuICAgIGVtcGxveWVlSWQ6IHN0cmluZztcbiAgICBib29rSWQ6IHN0cmluZztcbiAgICByZXR1cm5lZERhdGU6IERhdGU7XG4gICAgdHJhbnNhY3Rpb25JZDogc3RyaW5nO1xuICAgIGFjdGlvbjogc3RyaW5nO1xuICAgIG1pc3NlZERhdGU6IERhdGU7XG4gICAgYm9va05hbWU6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEJvb2tSZXR1cm5lZERhdGEge1xuICAgICAgICBsZXQgbSA9IG5ldyBCb29rUmV0dXJuZWREYXRhKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnJldHVybmVkRGF0ZSkge20ucmV0dXJuZWREYXRlID0gbmV3IERhdGUocHJvdG8ucmV0dXJuZWREYXRlKTt9XG4gICAgICAgIGlmIChwcm90by5taXNzZWREYXRlKSB7bS5taXNzZWREYXRlID0gbmV3IERhdGUocHJvdG8ubWlzc2VkRGF0ZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkJvb2tSZXR1cm5lZERhdGFJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbXBsb3llZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydlbXBsb3llZUlkJ10gPSB0aGlzLmVtcGxveWVlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYm9va0lkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydib29rSWQnXSA9IHRoaXMuYm9va0lkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJldHVybmVkRGF0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5yZXR1cm5lZERhdGUgIT09IG51bGwpIHt0b1JldHVyblsncmV0dXJuZWREYXRlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnJldHVybmVkRGF0ZSA/ICh0aGlzLnJldHVybmVkRGF0ZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5yZXR1cm5lZERhdGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudHJhbnNhY3Rpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndHJhbnNhY3Rpb25JZCddID0gdGhpcy50cmFuc2FjdGlvbklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWN0aW9uJ10gPSB0aGlzLmFjdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5taXNzZWREYXRlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1pc3NlZERhdGUgIT09IG51bGwpIHt0b1JldHVyblsnbWlzc2VkRGF0ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5taXNzZWREYXRlID8gKHRoaXMubWlzc2VkRGF0ZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5taXNzZWREYXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJvb2tOYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydib29rTmFtZSddID0gdGhpcy5ib29rTmFtZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCb29rbWFzdGVyQWRkUmVxdWVzdCBpbXBsZW1lbnRzIGkuQm9va21hc3RlckFkZFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFkZGJvb2ttYXN0ZXI6IEJvb2ttYXN0ZXJSZXF1ZXN0O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQm9va21hc3RlckFkZFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBCb29rbWFzdGVyQWRkUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5hZGRib29rbWFzdGVyKSB7bS5hZGRib29rbWFzdGVyID0gQm9va21hc3RlclJlcXVlc3QuZnJvbVByb3RvKHByb3RvLmFkZGJvb2ttYXN0ZXIpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Cb29rbWFzdGVyQWRkUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFkZGJvb2ttYXN0ZXIgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYWRkYm9va21hc3RlciAhPT0gbnVsbCkge3RvUmV0dXJuWydhZGRib29rbWFzdGVyJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmFkZGJvb2ttYXN0ZXIgPyAodGhpcy5hZGRib29rbWFzdGVyIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmFkZGJvb2ttYXN0ZXI7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQm9va21hc3RlckFkZFJlc3BvbnNlIGltcGxlbWVudHMgaS5Cb29rbWFzdGVyQWRkUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGJvb2ttYXN0ZXJyZXNwb25zZTogQm9va21hc3RlclJlc3BvbnNlO1xuICAgIHN0YXR1czogYm9vbGVhbjtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBCb29rbWFzdGVyQWRkUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBCb29rbWFzdGVyQWRkUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYm9va21hc3RlcnJlc3BvbnNlKSB7bS5ib29rbWFzdGVycmVzcG9uc2UgPSBCb29rbWFzdGVyUmVzcG9uc2UuZnJvbVByb3RvKHByb3RvLmJvb2ttYXN0ZXJyZXNwb25zZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkJvb2ttYXN0ZXJBZGRSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJvb2ttYXN0ZXJyZXNwb25zZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5ib29rbWFzdGVycmVzcG9uc2UgIT09IG51bGwpIHt0b1JldHVyblsnYm9va21hc3RlcnJlc3BvbnNlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmJvb2ttYXN0ZXJyZXNwb25zZSA/ICh0aGlzLmJvb2ttYXN0ZXJyZXNwb25zZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5ib29rbWFzdGVycmVzcG9uc2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhdHVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdGF0dXMnXSA9IHRoaXMuc3RhdHVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lc3NhZ2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lc3NhZ2UnXSA9IHRoaXMubWVzc2FnZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCb29rbWFzdGVyRWRpdFJlcXVlc3QgaW1wbGVtZW50cyBpLkJvb2ttYXN0ZXJFZGl0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgZWRpdGJvb2ttYXN0ZXI6IEJvb2ttYXN0ZXJSZXF1ZXN0O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQm9va21hc3RlckVkaXRSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQm9va21hc3RlckVkaXRSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmVkaXRib29rbWFzdGVyKSB7bS5lZGl0Ym9va21hc3RlciA9IEJvb2ttYXN0ZXJSZXF1ZXN0LmZyb21Qcm90byhwcm90by5lZGl0Ym9va21hc3Rlcik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkJvb2ttYXN0ZXJFZGl0UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVkaXRib29rbWFzdGVyICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmVkaXRib29rbWFzdGVyICE9PSBudWxsKSB7dG9SZXR1cm5bJ2VkaXRib29rbWFzdGVyJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmVkaXRib29rbWFzdGVyID8gKHRoaXMuZWRpdGJvb2ttYXN0ZXIgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZWRpdGJvb2ttYXN0ZXI7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQm9va21hc3RlckVkaXRSZXNwb25zZSBpbXBsZW1lbnRzIGkuQm9va21hc3RlckVkaXRSZXNwb25zZUludGVyZmFjZSB7XG4gICAgYm9va21hc3RlcnJlc3BvbnNlOiBCb29rbWFzdGVyUmVzcG9uc2U7XG4gICAgc3RhdHVzOiBib29sZWFuO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEJvb2ttYXN0ZXJFZGl0UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBCb29rbWFzdGVyRWRpdFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmJvb2ttYXN0ZXJyZXNwb25zZSkge20uYm9va21hc3RlcnJlc3BvbnNlID0gQm9va21hc3RlclJlc3BvbnNlLmZyb21Qcm90byhwcm90by5ib29rbWFzdGVycmVzcG9uc2UpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Cb29rbWFzdGVyRWRpdFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYm9va21hc3RlcnJlc3BvbnNlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmJvb2ttYXN0ZXJyZXNwb25zZSAhPT0gbnVsbCkge3RvUmV0dXJuWydib29rbWFzdGVycmVzcG9uc2UnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuYm9va21hc3RlcnJlc3BvbnNlID8gKHRoaXMuYm9va21hc3RlcnJlc3BvbnNlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmJvb2ttYXN0ZXJyZXNwb25zZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGF0dXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N0YXR1cyddID0gdGhpcy5zdGF0dXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVzc2FnZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVzc2FnZSddID0gdGhpcy5tZXNzYWdlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJvb2ttYXN0ZXJSZXF1ZXN0IGltcGxlbWVudHMgaS5Cb29rbWFzdGVyUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYm9va2lkOiBzdHJpbmc7XG4gICAgYm9va25hbWU6IHN0cmluZztcbiAgICBib29rYXV0aG9yOiBzdHJpbmc7XG4gICAgcHJvY3VyZUJvb2tEYXRlOiBEYXRlO1xuICAgIGNhdGVnb3J5OiBzdHJpbmc7XG4gICAgY3JlYXRlZGJ5OiBzdHJpbmc7XG4gICAgbW9kaWZpZWRieTogc3RyaW5nO1xuICAgIHN0YXR1czogc3RyaW5nO1xuICAgIHFyY29kZWF1dGg6IHN0cmluZztcbiAgICBxdWFudGl0eTogc3RyaW5nO1xuICAgIHB1cmNoYXNlZHF1YW50aXR5OiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBCb29rbWFzdGVyUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEJvb2ttYXN0ZXJSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnByb2N1cmVCb29rRGF0ZSkge20ucHJvY3VyZUJvb2tEYXRlID0gbmV3IERhdGUocHJvdG8ucHJvY3VyZUJvb2tEYXRlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQm9va21hc3RlclJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ib29raWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Jvb2tpZCddID0gdGhpcy5ib29raWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYm9va25hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Jvb2tuYW1lJ10gPSB0aGlzLmJvb2tuYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJvb2thdXRob3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Jvb2thdXRob3InXSA9IHRoaXMuYm9va2F1dGhvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9jdXJlQm9va0RhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucHJvY3VyZUJvb2tEYXRlICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Byb2N1cmVCb29rRGF0ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wcm9jdXJlQm9va0RhdGUgPyAodGhpcy5wcm9jdXJlQm9va0RhdGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucHJvY3VyZUJvb2tEYXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhdGVnb3J5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjYXRlZ29yeSddID0gdGhpcy5jYXRlZ29yeTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jcmVhdGVkYnkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NyZWF0ZWRieSddID0gdGhpcy5jcmVhdGVkYnk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubW9kaWZpZWRieSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbW9kaWZpZWRieSddID0gdGhpcy5tb2RpZmllZGJ5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXR1cyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3RhdHVzJ10gPSB0aGlzLnN0YXR1czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5xcmNvZGVhdXRoICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydxcmNvZGVhdXRoJ10gPSB0aGlzLnFyY29kZWF1dGg7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucXVhbnRpdHkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3F1YW50aXR5J10gPSB0aGlzLnF1YW50aXR5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnB1cmNoYXNlZHF1YW50aXR5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwdXJjaGFzZWRxdWFudGl0eSddID0gdGhpcy5wdXJjaGFzZWRxdWFudGl0eTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCb29rbWFzdGVyUmVzcG9uc2UgaW1wbGVtZW50cyBpLkJvb2ttYXN0ZXJSZXNwb25zZUludGVyZmFjZSB7XG4gICAgYm9va2lkOiBzdHJpbmc7XG4gICAgYm9va25hbWU6IHN0cmluZztcbiAgICBib29rYXV0aG9yOiBzdHJpbmc7XG4gICAgcHJvY3VyZUJvb2tEYXRlOiBEYXRlO1xuICAgIGNhdGVnb3J5OiBzdHJpbmc7XG4gICAgY3JlYXRlZGJ5OiBzdHJpbmc7XG4gICAgbW9kaWZpZWRieTogc3RyaW5nO1xuICAgIHN0YXR1czogc3RyaW5nO1xuICAgIHFyY29kZWF1dGg6IHN0cmluZztcbiAgICBxdWFudGl0eTogc3RyaW5nO1xuICAgIHB1cmNoYXNlZHF1YW50aXR5OiBzdHJpbmc7XG4gICAgbWlzc2VkcXVhbnRpdHk6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEJvb2ttYXN0ZXJSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEJvb2ttYXN0ZXJSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wcm9jdXJlQm9va0RhdGUpIHttLnByb2N1cmVCb29rRGF0ZSA9IG5ldyBEYXRlKHByb3RvLnByb2N1cmVCb29rRGF0ZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkJvb2ttYXN0ZXJSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJvb2tpZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYm9va2lkJ10gPSB0aGlzLmJvb2tpZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ib29rbmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYm9va25hbWUnXSA9IHRoaXMuYm9va25hbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYm9va2F1dGhvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYm9va2F1dGhvciddID0gdGhpcy5ib29rYXV0aG9yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb2N1cmVCb29rRGF0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wcm9jdXJlQm9va0RhdGUgIT09IG51bGwpIHt0b1JldHVyblsncHJvY3VyZUJvb2tEYXRlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnByb2N1cmVCb29rRGF0ZSA/ICh0aGlzLnByb2N1cmVCb29rRGF0ZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wcm9jdXJlQm9va0RhdGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2F0ZWdvcnkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NhdGVnb3J5J10gPSB0aGlzLmNhdGVnb3J5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNyZWF0ZWRieSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3JlYXRlZGJ5J10gPSB0aGlzLmNyZWF0ZWRieTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tb2RpZmllZGJ5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtb2RpZmllZGJ5J10gPSB0aGlzLm1vZGlmaWVkYnk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhdHVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdGF0dXMnXSA9IHRoaXMuc3RhdHVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnFyY29kZWF1dGggIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3FyY29kZWF1dGgnXSA9IHRoaXMucXJjb2RlYXV0aDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5xdWFudGl0eSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncXVhbnRpdHknXSA9IHRoaXMucXVhbnRpdHk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHVyY2hhc2VkcXVhbnRpdHkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3B1cmNoYXNlZHF1YW50aXR5J10gPSB0aGlzLnB1cmNoYXNlZHF1YW50aXR5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1pc3NlZHF1YW50aXR5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtaXNzZWRxdWFudGl0eSddID0gdGhpcy5taXNzZWRxdWFudGl0eTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCb29rbWFzdGVyZGVsZXRlcmVxdWVzdCBpbXBsZW1lbnRzIGkuQm9va21hc3RlcmRlbGV0ZXJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGJvb2tpZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQm9va21hc3RlcmRlbGV0ZXJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBCb29rbWFzdGVyZGVsZXRlcmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQm9va21hc3RlcmRlbGV0ZXJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ib29raWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Jvb2tpZCddID0gdGhpcy5ib29raWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQm9va21hc3RlcmRlbGV0ZXJlc3BvbnNlIGltcGxlbWVudHMgaS5Cb29rbWFzdGVyZGVsZXRlcmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBzdGF0dXM6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBCb29rbWFzdGVyZGVsZXRlcmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBCb29rbWFzdGVyZGVsZXRlcmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkJvb2ttYXN0ZXJkZWxldGVyZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lc3NhZ2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lc3NhZ2UnXSA9IHRoaXMubWVzc2FnZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGF0dXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N0YXR1cyddID0gdGhpcy5zdGF0dXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQm9va21hc3RlcmZpbHRlciBpbXBsZW1lbnRzIGkuQm9va21hc3RlcmZpbHRlckludGVyZmFjZSB7XG4gICAgYm9va25hbWU6IHN0cmluZztcbiAgICBib29raWQ6IHN0cmluZztcbiAgICBib29rYXV0aG9yOiBzdHJpbmc7XG4gICAgc3RhdHVzOiBzdHJpbmc7XG4gICAgY2F0ZWdvcnk6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEJvb2ttYXN0ZXJmaWx0ZXIge1xuICAgICAgICBsZXQgbSA9IG5ldyBCb29rbWFzdGVyZmlsdGVyKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Cb29rbWFzdGVyZmlsdGVySW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYm9va25hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Jvb2tuYW1lJ10gPSB0aGlzLmJvb2tuYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJvb2tpZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYm9va2lkJ10gPSB0aGlzLmJvb2tpZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ib29rYXV0aG9yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydib29rYXV0aG9yJ10gPSB0aGlzLmJvb2thdXRob3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhdHVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdGF0dXMnXSA9IHRoaXMuc3RhdHVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhdGVnb3J5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjYXRlZ29yeSddID0gdGhpcy5jYXRlZ29yeTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCb29rbWFzdGVyZ2V0YnlpZHJlcXVlc3QgaW1wbGVtZW50cyBpLkJvb2ttYXN0ZXJnZXRieWlkcmVxdWVzdEludGVyZmFjZSB7XG4gICAgYm9va2lkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBCb29rbWFzdGVyZ2V0YnlpZHJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBCb29rbWFzdGVyZ2V0YnlpZHJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkJvb2ttYXN0ZXJnZXRieWlkcmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJvb2tpZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYm9va2lkJ10gPSB0aGlzLmJvb2tpZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCb29rbWFzdGVyZ2V0YnlpZHJlc3BvbnNlIGltcGxlbWVudHMgaS5Cb29rbWFzdGVyZ2V0YnlpZHJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBib29rbWFzdGVycmVzcG9uc2U6IEJvb2ttYXN0ZXJSZXNwb25zZTtcbiAgICBzdGF0dXM6IGJvb2xlYW47XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQm9va21hc3RlcmdldGJ5aWRyZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEJvb2ttYXN0ZXJnZXRieWlkcmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYm9va21hc3RlcnJlc3BvbnNlKSB7bS5ib29rbWFzdGVycmVzcG9uc2UgPSBCb29rbWFzdGVyUmVzcG9uc2UuZnJvbVByb3RvKHByb3RvLmJvb2ttYXN0ZXJyZXNwb25zZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkJvb2ttYXN0ZXJnZXRieWlkcmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ib29rbWFzdGVycmVzcG9uc2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYm9va21hc3RlcnJlc3BvbnNlICE9PSBudWxsKSB7dG9SZXR1cm5bJ2Jvb2ttYXN0ZXJyZXNwb25zZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5ib29rbWFzdGVycmVzcG9uc2UgPyAodGhpcy5ib29rbWFzdGVycmVzcG9uc2UgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYm9va21hc3RlcnJlc3BvbnNlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXR1cyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3RhdHVzJ10gPSB0aGlzLnN0YXR1czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXNzYWdlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXNzYWdlJ10gPSB0aGlzLm1lc3NhZ2U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQm9va21hc3RlcnBhZ2luZ3JlcXVlc3QgaW1wbGVtZW50cyBpLkJvb2ttYXN0ZXJwYWdpbmdyZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBjdXJzb3I6IHN0cmluZztcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIGZpbHRlcnM6IEJvb2ttYXN0ZXJmaWx0ZXI7XG4gICAgc29ydE9wdGlvbnM6IEJvb2ttYXN0ZXJzb3J0b3B0aW9uc1tdO1xuICAgIGZyb206IG51bWJlcjtcbiAgICBzb3J0ZmllbGQ6IHN0cmluZztcbiAgICBkaXJlY3Rpb25maWVsZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQm9va21hc3RlcnBhZ2luZ3JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBCb29rbWFzdGVycGFnaW5ncmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wYWdlU2l6ZSkge20ucGFnZVNpemUgPSBwYXJzZUludChwcm90by5wYWdlU2l6ZSwgMTApO31cbiAgICAgICAgaWYgKHByb3RvLmZpbHRlcnMpIHttLmZpbHRlcnMgPSBCb29rbWFzdGVyZmlsdGVyLmZyb21Qcm90byhwcm90by5maWx0ZXJzKTt9XG4gICAgICAgIGlmIChwcm90by5zb3J0T3B0aW9ucykge20uc29ydE9wdGlvbnMgPSBwcm90by5zb3J0T3B0aW9ucy5tYXAoQm9va21hc3RlcnNvcnRvcHRpb25zLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8uZnJvbSkge20uZnJvbSA9IHBhcnNlSW50KHByb3RvLmZyb20sIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQm9va21hc3RlcnBhZ2luZ3JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnNvciddID0gdGhpcy5jdXJzb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnZVNpemUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhZ2VTaXplJ10gPSB0aGlzLnBhZ2VTaXplO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpbHRlcnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmlsdGVycyAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWx0ZXJzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZpbHRlcnMgPyAodGhpcy5maWx0ZXJzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpbHRlcnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29ydE9wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc29ydE9wdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsnc29ydE9wdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc29ydE9wdGlvbnMgPyAodGhpcy5zb3J0T3B0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zb3J0T3B0aW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mcm9tICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydmcm9tJ10gPSB0aGlzLmZyb207fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29ydGZpZWxkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzb3J0ZmllbGQnXSA9IHRoaXMuc29ydGZpZWxkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRpcmVjdGlvbmZpZWxkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkaXJlY3Rpb25maWVsZCddID0gdGhpcy5kaXJlY3Rpb25maWVsZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCb29rbWFzdGVycGFnaW5ncmVzcG9uc2UgaW1wbGVtZW50cyBpLkJvb2ttYXN0ZXJwYWdpbmdyZXNwb25zZUludGVyZmFjZSB7XG4gICAgYm9va21hc3RlcmRhdGE6IEJvb2ttYXN0ZXJSZXNwb25zZVtdO1xuICAgIG5leHRDdXJzb3I6IHN0cmluZztcbiAgICBoYXNNb3JlOiBib29sZWFuO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEJvb2ttYXN0ZXJwYWdpbmdyZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEJvb2ttYXN0ZXJwYWdpbmdyZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5ib29rbWFzdGVyZGF0YSkge20uYm9va21hc3RlcmRhdGEgPSBwcm90by5ib29rbWFzdGVyZGF0YS5tYXAoQm9va21hc3RlclJlc3BvbnNlLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkJvb2ttYXN0ZXJwYWdpbmdyZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJvb2ttYXN0ZXJkYXRhICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmJvb2ttYXN0ZXJkYXRhICE9PSBudWxsKSB7dG9SZXR1cm5bJ2Jvb2ttYXN0ZXJkYXRhJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmJvb2ttYXN0ZXJkYXRhID8gKHRoaXMuYm9va21hc3RlcmRhdGEgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYm9va21hc3RlcmRhdGE7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmV4dEN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmV4dEN1cnNvciddID0gdGhpcy5uZXh0Q3Vyc29yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhhc01vcmUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hhc01vcmUnXSA9IHRoaXMuaGFzTW9yZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXNzYWdlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXNzYWdlJ10gPSB0aGlzLm1lc3NhZ2U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQm9va21hc3RlcnNvcnRvcHRpb25zIGltcGxlbWVudHMgaS5Cb29rbWFzdGVyc29ydG9wdGlvbnNJbnRlcmZhY2Uge1xuICAgIGRpcmVjdGlvbjogZS5Tb3J0RGlyZWN0aW9uO1xuICAgIGZpZWxkOiBlLkJvb2ttYXN0ZXJzb3J0ZmllbGQ7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBCb29rbWFzdGVyc29ydG9wdGlvbnMge1xuICAgICAgICBsZXQgbSA9IG5ldyBCb29rbWFzdGVyc29ydG9wdGlvbnMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZGlyZWN0aW9uKSB7bS5kaXJlY3Rpb24gPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLlNvcnREaXJlY3Rpb24+KGUuU29ydERpcmVjdGlvbiwgcHJvdG8uZGlyZWN0aW9uKTt9XG4gICAgICAgIGlmIChwcm90by5maWVsZCkge20uZmllbGQgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkJvb2ttYXN0ZXJzb3J0ZmllbGQ+KGUuQm9va21hc3RlcnNvcnRmaWVsZCwgcHJvdG8uZmllbGQpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Cb29rbWFzdGVyc29ydG9wdGlvbnNJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kaXJlY3Rpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2RpcmVjdGlvbiddID0gdGhpcy5kaXJlY3Rpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmllbGQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ZpZWxkJ10gPSB0aGlzLmZpZWxkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJvb2ttYXN0ZXJzdW1tYXJ5cmVxdWVzdCBpbXBsZW1lbnRzIGkuQm9va21hc3RlcnN1bW1hcnlyZXF1ZXN0SW50ZXJmYWNlIHtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEJvb2ttYXN0ZXJzdW1tYXJ5cmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEJvb2ttYXN0ZXJzdW1tYXJ5cmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQm9va21hc3RlcnN1bW1hcnlyZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQm9va21hc3RlcnN1bW1hcnlyZXNwb25zZSBpbXBsZW1lbnRzIGkuQm9va21hc3RlcnN1bW1hcnlyZXNwb25zZUludGVyZmFjZSB7XG4gICAgdG90YWxib29rczogbnVtYmVyO1xuICAgIGF2YWlsYWJsZWJvb2tzOiBudW1iZXI7XG4gICAgY2hlY2tlZG91dGJvb2tzOiBudW1iZXI7XG4gICAgb3ZlcmR1ZWJvb2tzOiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBCb29rbWFzdGVyc3VtbWFyeXJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQm9va21hc3RlcnN1bW1hcnlyZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by50b3RhbGJvb2tzKSB7bS50b3RhbGJvb2tzID0gcGFyc2VJbnQocHJvdG8udG90YWxib29rcywgMTApO31cbiAgICAgICAgaWYgKHByb3RvLmF2YWlsYWJsZWJvb2tzKSB7bS5hdmFpbGFibGVib29rcyA9IHBhcnNlSW50KHByb3RvLmF2YWlsYWJsZWJvb2tzLCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8uY2hlY2tlZG91dGJvb2tzKSB7bS5jaGVja2Vkb3V0Ym9va3MgPSBwYXJzZUludChwcm90by5jaGVja2Vkb3V0Ym9va3MsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by5vdmVyZHVlYm9va3MpIHttLm92ZXJkdWVib29rcyA9IHBhcnNlSW50KHByb3RvLm92ZXJkdWVib29rcywgMTApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Cb29rbWFzdGVyc3VtbWFyeXJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudG90YWxib29rcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndG90YWxib29rcyddID0gdGhpcy50b3RhbGJvb2tzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmF2YWlsYWJsZWJvb2tzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhdmFpbGFibGVib29rcyddID0gdGhpcy5hdmFpbGFibGVib29rczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jaGVja2Vkb3V0Ym9va3MgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NoZWNrZWRvdXRib29rcyddID0gdGhpcy5jaGVja2Vkb3V0Ym9va3M7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3ZlcmR1ZWJvb2tzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydvdmVyZHVlYm9va3MnXSA9IHRoaXMub3ZlcmR1ZWJvb2tzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJvb2tyZXR1cm5maWx0ZXIgaW1wbGVtZW50cyBpLkJvb2tyZXR1cm5maWx0ZXJJbnRlcmZhY2Uge1xuICAgIGVtcGxveWVlSWQ6IHN0cmluZztcbiAgICBib29rSWQ6IHN0cmluZztcbiAgICBhY3Rpb246IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEJvb2tyZXR1cm5maWx0ZXIge1xuICAgICAgICBsZXQgbSA9IG5ldyBCb29rcmV0dXJuZmlsdGVyKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Cb29rcmV0dXJuZmlsdGVySW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW1wbG95ZWVJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZW1wbG95ZWVJZCddID0gdGhpcy5lbXBsb3llZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJvb2tJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYm9va0lkJ10gPSB0aGlzLmJvb2tJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY3Rpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjdGlvbiddID0gdGhpcy5hY3Rpb247fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQm9va3JldHVybnNvcnRvcHRpb25zIGltcGxlbWVudHMgaS5Cb29rcmV0dXJuc29ydG9wdGlvbnNJbnRlcmZhY2Uge1xuICAgIGRpcmVjdGlvbjogZS5Tb3J0RGlyZWN0aW9uO1xuICAgIGZpZWxkOiBlLkJvb2tyZXR1cm5zb3J0ZmllbGQ7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBCb29rcmV0dXJuc29ydG9wdGlvbnMge1xuICAgICAgICBsZXQgbSA9IG5ldyBCb29rcmV0dXJuc29ydG9wdGlvbnMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZGlyZWN0aW9uKSB7bS5kaXJlY3Rpb24gPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLlNvcnREaXJlY3Rpb24+KGUuU29ydERpcmVjdGlvbiwgcHJvdG8uZGlyZWN0aW9uKTt9XG4gICAgICAgIGlmIChwcm90by5maWVsZCkge20uZmllbGQgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkJvb2tyZXR1cm5zb3J0ZmllbGQ+KGUuQm9va3JldHVybnNvcnRmaWVsZCwgcHJvdG8uZmllbGQpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Cb29rcmV0dXJuc29ydG9wdGlvbnNJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kaXJlY3Rpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2RpcmVjdGlvbiddID0gdGhpcy5kaXJlY3Rpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmllbGQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ZpZWxkJ10gPSB0aGlzLmZpZWxkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlbGV0ZUFkbWluTGlicmFyeVVzZXJSZXF1ZXN0IGltcGxlbWVudHMgaS5EZWxldGVBZG1pbkxpYnJhcnlVc2VyUmVxdWVzdEludGVyZmFjZSB7XG4gICAgZW1haWxJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRGVsZXRlQWRtaW5MaWJyYXJ5VXNlclJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBEZWxldGVBZG1pbkxpYnJhcnlVc2VyUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRGVsZXRlQWRtaW5MaWJyYXJ5VXNlclJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbWFpbElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydlbWFpbElkJ10gPSB0aGlzLmVtYWlsSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVsZXRlQWRtaW5MaWJyYXJ5VXNlclJlc3BvbnNlIGltcGxlbWVudHMgaS5EZWxldGVBZG1pbkxpYnJhcnlVc2VyUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHN1Y2Nlc3M6IGJvb2xlYW47XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRGVsZXRlQWRtaW5MaWJyYXJ5VXNlclJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRGVsZXRlQWRtaW5MaWJyYXJ5VXNlclJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EZWxldGVBZG1pbkxpYnJhcnlVc2VyUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdWNjZXNzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdWNjZXNzJ10gPSB0aGlzLnN1Y2Nlc3M7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVzc2FnZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVzc2FnZSddID0gdGhpcy5tZXNzYWdlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlbGV0ZVRheGlVc2VyRGF0YVJlcXVlc3QgaW1wbGVtZW50cyBpLkRlbGV0ZVRheGlVc2VyRGF0YVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBEZWxldGVUYXhpVXNlckRhdGFSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRGVsZXRlVGF4aVVzZXJEYXRhUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRGVsZXRlVGF4aVVzZXJEYXRhUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZWxldGVUYXhpVXNlckRhdGFSZXNwb25zZSBpbXBsZW1lbnRzIGkuRGVsZXRlVGF4aVVzZXJEYXRhUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGRlbGV0ZVN0YXR1czogYm9vbGVhbjtcbiAgICBpZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRGVsZXRlVGF4aVVzZXJEYXRhUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBEZWxldGVUYXhpVXNlckRhdGFSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRGVsZXRlVGF4aVVzZXJEYXRhUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kZWxldGVTdGF0dXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2RlbGV0ZVN0YXR1cyddID0gdGhpcy5kZWxldGVTdGF0dXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkJ10gPSB0aGlzLmlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVkaXRBZG1pbkxpYnJhcnlVc2VyUmVxdWVzdCBpbXBsZW1lbnRzIGkuRWRpdEFkbWluTGlicmFyeVVzZXJSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBsaWJyYXJ5ZWRpdDogTGlicmFyeUFkbWluVXNlck1hbmFuZ2VtZW50UmVxdWVzdDtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEVkaXRBZG1pbkxpYnJhcnlVc2VyUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEVkaXRBZG1pbkxpYnJhcnlVc2VyUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5saWJyYXJ5ZWRpdCkge20ubGlicmFyeWVkaXQgPSBMaWJyYXJ5QWRtaW5Vc2VyTWFuYW5nZW1lbnRSZXF1ZXN0LmZyb21Qcm90byhwcm90by5saWJyYXJ5ZWRpdCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkVkaXRBZG1pbkxpYnJhcnlVc2VyUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxpYnJhcnllZGl0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmxpYnJhcnllZGl0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ2xpYnJhcnllZGl0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmxpYnJhcnllZGl0ID8gKHRoaXMubGlicmFyeWVkaXQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubGlicmFyeWVkaXQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRWRpdEFkbWluTGlicmFyeVVzZXJSZXNwb25zZSBpbXBsZW1lbnRzIGkuRWRpdEFkbWluTGlicmFyeVVzZXJSZXNwb25zZUludGVyZmFjZSB7XG4gICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgZWRpdHJlc3BvbnNlOiBMaWJyYXJ5QWRtaW5Vc2VyTWFuYW5nZW1lbnRSZXNwb25zZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEVkaXRBZG1pbkxpYnJhcnlVc2VyUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBFZGl0QWRtaW5MaWJyYXJ5VXNlclJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmVkaXRyZXNwb25zZSkge20uZWRpdHJlc3BvbnNlID0gTGlicmFyeUFkbWluVXNlck1hbmFuZ2VtZW50UmVzcG9uc2UuZnJvbVByb3RvKHByb3RvLmVkaXRyZXNwb25zZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkVkaXRBZG1pbkxpYnJhcnlVc2VyUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdWNjZXNzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdWNjZXNzJ10gPSB0aGlzLnN1Y2Nlc3M7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVzc2FnZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVzc2FnZSddID0gdGhpcy5tZXNzYWdlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVkaXRyZXNwb25zZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5lZGl0cmVzcG9uc2UgIT09IG51bGwpIHt0b1JldHVyblsnZWRpdHJlc3BvbnNlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmVkaXRyZXNwb25zZSA/ICh0aGlzLmVkaXRyZXNwb25zZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5lZGl0cmVzcG9uc2U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRWRpdFRheGlVc2VyRGF0YVJlcXVlc3QgaW1wbGVtZW50cyBpLkVkaXRUYXhpVXNlckRhdGFSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBlZGl0dGF4aVVzZXJkYXRhOiBUYXhpVXNlckRhdGE7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBFZGl0VGF4aVVzZXJEYXRhUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEVkaXRUYXhpVXNlckRhdGFSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmVkaXR0YXhpVXNlcmRhdGEpIHttLmVkaXR0YXhpVXNlcmRhdGEgPSBUYXhpVXNlckRhdGEuZnJvbVByb3RvKHByb3RvLmVkaXR0YXhpVXNlcmRhdGEpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5FZGl0VGF4aVVzZXJEYXRhUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVkaXR0YXhpVXNlcmRhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZWRpdHRheGlVc2VyZGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWydlZGl0dGF4aVVzZXJkYXRhJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmVkaXR0YXhpVXNlcmRhdGEgPyAodGhpcy5lZGl0dGF4aVVzZXJkYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmVkaXR0YXhpVXNlcmRhdGE7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRWRpdFRheGlVc2VyRGF0YVJlc3BvbnNlIGltcGxlbWVudHMgaS5FZGl0VGF4aVVzZXJEYXRhUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGVkaXR0YXhpU3RhdHVzOiBib29sZWFuO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRWRpdFRheGlVc2VyRGF0YVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRWRpdFRheGlVc2VyRGF0YVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5FZGl0VGF4aVVzZXJEYXRhUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lZGl0dGF4aVN0YXR1cyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZWRpdHRheGlTdGF0dXMnXSA9IHRoaXMuZWRpdHRheGlTdGF0dXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkJ10gPSB0aGlzLmlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lc3NhZ2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lc3NhZ2UnXSA9IHRoaXMubWVzc2FnZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJUYXhpVXNlckRhdGEgaW1wbGVtZW50cyBpLkZpbHRlclRheGlVc2VyRGF0YUludGVyZmFjZSB7XG4gICAgZW1wbmFtZTogc3RyaW5nO1xuICAgIGxpY2Vuc2Vubzogc3RyaW5nO1xuICAgIHBob25lbm86IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEZpbHRlclRheGlVc2VyRGF0YSB7XG4gICAgICAgIGxldCBtID0gbmV3IEZpbHRlclRheGlVc2VyRGF0YSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5waG9uZW5vKSB7bS5waG9uZW5vID0gcGFyc2VJbnQocHJvdG8ucGhvbmVubywgMTApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5GaWx0ZXJUYXhpVXNlckRhdGFJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbXBuYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydlbXBuYW1lJ10gPSB0aGlzLmVtcG5hbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubGljZW5zZW5vICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydsaWNlbnNlbm8nXSA9IHRoaXMubGljZW5zZW5vO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBob25lbm8gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Bob25lbm8nXSA9IHRoaXMucGhvbmVubzt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJUcmFuc2FjdGlvblJlcG9ydERhdGEgaW1wbGVtZW50cyBpLkZpbHRlclRyYW5zYWN0aW9uUmVwb3J0RGF0YUludGVyZmFjZSB7XG4gICAgY2hlY2tlZE91dDogc3RyaW5nO1xuICAgIHJldHVybmVkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBGaWx0ZXJUcmFuc2FjdGlvblJlcG9ydERhdGEge1xuICAgICAgICBsZXQgbSA9IG5ldyBGaWx0ZXJUcmFuc2FjdGlvblJlcG9ydERhdGEoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkZpbHRlclRyYW5zYWN0aW9uUmVwb3J0RGF0YUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNoZWNrZWRPdXQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NoZWNrZWRPdXQnXSA9IHRoaXMuY2hlY2tlZE91dDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXR1cm5lZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncmV0dXJuZWQnXSA9IHRoaXMucmV0dXJuZWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0QWN0aXZlVXNlckxpc3RSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRBY3RpdmVVc2VyTGlzdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG5hbWVzcGFjZTogc3RyaW5nO1xuICAgIGN1cnNvcjogc3RyaW5nO1xuICAgIHBhZ2VTaXplOiBzdHJpbmc7XG4gICAgdXNlckZpbHRlcjogVXNlckZpbHRlcjtcbiAgICBzb3J0T3B0aW9uczogVXNlclNvcnREYXRhW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRBY3RpdmVVc2VyTGlzdFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRBY3RpdmVVc2VyTGlzdFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udXNlckZpbHRlcikge20udXNlckZpbHRlciA9IFVzZXJGaWx0ZXIuZnJvbVByb3RvKHByb3RvLnVzZXJGaWx0ZXIpO31cbiAgICAgICAgaWYgKHByb3RvLnNvcnRPcHRpb25zKSB7bS5zb3J0T3B0aW9ucyA9IHByb3RvLnNvcnRPcHRpb25zLm1hcChVc2VyU29ydERhdGEuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0QWN0aXZlVXNlckxpc3RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmFtZXNwYWNlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyduYW1lc3BhY2UnXSA9IHRoaXMubmFtZXNwYWNlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3Vyc29yJ10gPSB0aGlzLmN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFnZVNpemUnXSA9IHRoaXMucGFnZVNpemU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXNlckZpbHRlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy51c2VyRmlsdGVyICE9PSBudWxsKSB7dG9SZXR1cm5bJ3VzZXJGaWx0ZXInXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudXNlckZpbHRlciA/ICh0aGlzLnVzZXJGaWx0ZXIgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudXNlckZpbHRlcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zb3J0T3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zb3J0T3B0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydzb3J0T3B0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zb3J0T3B0aW9ucyA/ICh0aGlzLnNvcnRPcHRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnNvcnRPcHRpb25zO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldEFjdGl2ZVVzZXJMaXN0UmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldEFjdGl2ZVVzZXJMaXN0UmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHVzZXJzOiBHZXRBY3RpdmVVc2VyTGlzdFJlc3BvbnNlRGF0YVtdO1xuICAgIG5leHRDdXJzb3I6IHN0cmluZztcbiAgICBoYXNNb3JlOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0QWN0aXZlVXNlckxpc3RSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldEFjdGl2ZVVzZXJMaXN0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udXNlcnMpIHttLnVzZXJzID0gcHJvdG8udXNlcnMubWFwKEdldEFjdGl2ZVVzZXJMaXN0UmVzcG9uc2VEYXRhLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldEFjdGl2ZVVzZXJMaXN0UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51c2VycyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy51c2VycyAhPT0gbnVsbCkge3RvUmV0dXJuWyd1c2VycyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy51c2VycyA/ICh0aGlzLnVzZXJzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnVzZXJzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5leHRDdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25leHRDdXJzb3InXSA9IHRoaXMubmV4dEN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNNb3JlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNNb3JlJ10gPSB0aGlzLmhhc01vcmU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0QWN0aXZlVXNlckxpc3RSZXNwb25zZURhdGEgaW1wbGVtZW50cyBpLkdldEFjdGl2ZVVzZXJMaXN0UmVzcG9uc2VEYXRhSW50ZXJmYWNlIHtcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgICBlbWFpbDogc3RyaW5nO1xuICAgIGdyZWV0aW5nTmFtZTogc3RyaW5nO1xuICAgIGxhbmd1YWdlQ29kZTogc3RyaW5nO1xuICAgIGNyZWF0ZWQ6IHN0cmluZztcbiAgICB1cGRhdGVkOiBzdHJpbmc7XG4gICAgZW1haWxWZXJpZmllZDogc3RyaW5nO1xuICAgIHJvbGVzOiBzdHJpbmdbXTtcbiAgICBsYXN0TG9naW46IHN0cmluZztcbiAgICBwdWJsaWNLZXlzOiBHZXRVc2VyTGlzdElkW107XG4gICAgZmlyc3ROYW1lOiBzdHJpbmc7XG4gICAgbGFzdE5hbWU6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldEFjdGl2ZVVzZXJMaXN0UmVzcG9uc2VEYXRhIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0QWN0aXZlVXNlckxpc3RSZXNwb25zZURhdGEoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucHVibGljS2V5cykge20ucHVibGljS2V5cyA9IHByb3RvLnB1YmxpY0tleXMubWFwKEdldFVzZXJMaXN0SWQuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0QWN0aXZlVXNlckxpc3RSZXNwb25zZURhdGFJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51c2VySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3VzZXJJZCddID0gdGhpcy51c2VySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW1haWwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2VtYWlsJ10gPSB0aGlzLmVtYWlsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmdyZWV0aW5nTmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZ3JlZXRpbmdOYW1lJ10gPSB0aGlzLmdyZWV0aW5nTmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5sYW5ndWFnZUNvZGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2xhbmd1YWdlQ29kZSddID0gdGhpcy5sYW5ndWFnZUNvZGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3JlYXRlZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3JlYXRlZCddID0gdGhpcy5jcmVhdGVkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVwZGF0ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3VwZGF0ZWQnXSA9IHRoaXMudXBkYXRlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbWFpbFZlcmlmaWVkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydlbWFpbFZlcmlmaWVkJ10gPSB0aGlzLmVtYWlsVmVyaWZpZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucm9sZXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3JvbGVzJ10gPSB0aGlzLnJvbGVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxhc3RMb2dpbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbGFzdExvZ2luJ10gPSB0aGlzLmxhc3RMb2dpbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wdWJsaWNLZXlzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnB1YmxpY0tleXMgIT09IG51bGwpIHt0b1JldHVyblsncHVibGljS2V5cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wdWJsaWNLZXlzID8gKHRoaXMucHVibGljS2V5cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wdWJsaWNLZXlzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpcnN0TmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZmlyc3ROYW1lJ10gPSB0aGlzLmZpcnN0TmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5sYXN0TmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbGFzdE5hbWUnXSA9IHRoaXMubGFzdE5hbWU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0QnlJZFRheGlVc2VyRGF0YVJlcXVlc3QgaW1wbGVtZW50cyBpLkdldEJ5SWRUYXhpVXNlckRhdGFSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBpZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0QnlJZFRheGlVc2VyRGF0YVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRCeUlkVGF4aVVzZXJEYXRhUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0QnlJZFRheGlVc2VyRGF0YVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0QnlJZFRheGlVc2VyRGF0YVJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRCeUlkVGF4aVVzZXJEYXRhUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHRheGlkYXRhYnlpZDogVGF4aVVzZXJEYXRhO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0QnlJZFRheGlVc2VyRGF0YVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0QnlJZFRheGlVc2VyRGF0YVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnRheGlkYXRhYnlpZCkge20udGF4aWRhdGFieWlkID0gVGF4aVVzZXJEYXRhLmZyb21Qcm90byhwcm90by50YXhpZGF0YWJ5aWQpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRCeUlkVGF4aVVzZXJEYXRhUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YXhpZGF0YWJ5aWQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudGF4aWRhdGFieWlkICE9PSBudWxsKSB7dG9SZXR1cm5bJ3RheGlkYXRhYnlpZCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50YXhpZGF0YWJ5aWQgPyAodGhpcy50YXhpZGF0YWJ5aWQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudGF4aWRhdGFieWlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldEJ5TWFpbElkQWRtaW5MaWJyYXJ5VXNlclJlcXVlc3QgaW1wbGVtZW50cyBpLkdldEJ5TWFpbElkQWRtaW5MaWJyYXJ5VXNlclJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGVtYWlsSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldEJ5TWFpbElkQWRtaW5MaWJyYXJ5VXNlclJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRCeU1haWxJZEFkbWluTGlicmFyeVVzZXJSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRCeU1haWxJZEFkbWluTGlicmFyeVVzZXJSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW1haWxJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZW1haWxJZCddID0gdGhpcy5lbWFpbElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldEJ5TWFpbElkQWRtaW5MaWJyYXJ5VXNlclJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRCeU1haWxJZEFkbWluTGlicmFyeVVzZXJSZXNwb25zZUludGVyZmFjZSB7XG4gICAgc3RhdHVzOiBib29sZWFuO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICByZXNwb25zZWRhdGE6IExpYnJhcnlBZG1pblVzZXJNYW5hbmdlbWVudFJlc3BvbnNlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0QnlNYWlsSWRBZG1pbkxpYnJhcnlVc2VyUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRCeU1haWxJZEFkbWluTGlicmFyeVVzZXJSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5yZXNwb25zZWRhdGEpIHttLnJlc3BvbnNlZGF0YSA9IExpYnJhcnlBZG1pblVzZXJNYW5hbmdlbWVudFJlc3BvbnNlLmZyb21Qcm90byhwcm90by5yZXNwb25zZWRhdGEpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRCeU1haWxJZEFkbWluTGlicmFyeVVzZXJSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXR1cyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3RhdHVzJ10gPSB0aGlzLnN0YXR1czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXNzYWdlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXNzYWdlJ10gPSB0aGlzLm1lc3NhZ2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVzcG9uc2VkYXRhICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnJlc3BvbnNlZGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWydyZXNwb25zZWRhdGEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucmVzcG9uc2VkYXRhID8gKHRoaXMucmVzcG9uc2VkYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnJlc3BvbnNlZGF0YTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRDaGVja2VkT3V0RGF0YVJlcXVlc3QgaW1wbGVtZW50cyBpLkdldENoZWNrZWRPdXREYXRhUmVxdWVzdEludGVyZmFjZSB7XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldENoZWNrZWRPdXREYXRhUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldENoZWNrZWRPdXREYXRhUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wYWdlU2l6ZSkge20ucGFnZVNpemUgPSBwYXJzZUludChwcm90by5wYWdlU2l6ZSwgMTApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRDaGVja2VkT3V0RGF0YVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnNvciddID0gdGhpcy5jdXJzb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnZVNpemUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhZ2VTaXplJ10gPSB0aGlzLnBhZ2VTaXplO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldENoZWNrZWRPdXREYXRhUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldENoZWNrZWRPdXREYXRhUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGJvb2tDaGVja2VkT3V0RGF0YTogQm9va0NoZWNrZWRPdXREYXRhW107XG4gICAgbmV4dEN1cnNvcjogc3RyaW5nO1xuICAgIGhhc01vcmU6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRDaGVja2VkT3V0RGF0YVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0Q2hlY2tlZE91dERhdGFSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5ib29rQ2hlY2tlZE91dERhdGEpIHttLmJvb2tDaGVja2VkT3V0RGF0YSA9IHByb3RvLmJvb2tDaGVja2VkT3V0RGF0YS5tYXAoQm9va0NoZWNrZWRPdXREYXRhLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldENoZWNrZWRPdXREYXRhUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ib29rQ2hlY2tlZE91dERhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYm9va0NoZWNrZWRPdXREYXRhICE9PSBudWxsKSB7dG9SZXR1cm5bJ2Jvb2tDaGVja2VkT3V0RGF0YSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5ib29rQ2hlY2tlZE91dERhdGEgPyAodGhpcy5ib29rQ2hlY2tlZE91dERhdGEgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYm9va0NoZWNrZWRPdXREYXRhO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5leHRDdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25leHRDdXJzb3InXSA9IHRoaXMubmV4dEN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNNb3JlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNNb3JlJ10gPSB0aGlzLmhhc01vcmU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0UmV0dXJuZWREYXRhUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0UmV0dXJuZWREYXRhUmVxdWVzdEludGVyZmFjZSB7XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFJldHVybmVkRGF0YVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRSZXR1cm5lZERhdGFSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBhZ2VTaXplKSB7bS5wYWdlU2l6ZSA9IHBhcnNlSW50KHByb3RvLnBhZ2VTaXplLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFJldHVybmVkRGF0YVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnNvciddID0gdGhpcy5jdXJzb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnZVNpemUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhZ2VTaXplJ10gPSB0aGlzLnBhZ2VTaXplO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFJldHVybmVkRGF0YVJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRSZXR1cm5lZERhdGFSZXNwb25zZUludGVyZmFjZSB7XG4gICAgYm9va1JldHVybkRhdGE6IEJvb2tSZXR1cm5lZERhdGFbXTtcbiAgICBuZXh0Q3Vyc29yOiBzdHJpbmc7XG4gICAgaGFzTW9yZTogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFJldHVybmVkRGF0YVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0UmV0dXJuZWREYXRhUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYm9va1JldHVybkRhdGEpIHttLmJvb2tSZXR1cm5EYXRhID0gcHJvdG8uYm9va1JldHVybkRhdGEubWFwKEJvb2tSZXR1cm5lZERhdGEuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0UmV0dXJuZWREYXRhUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ib29rUmV0dXJuRGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5ib29rUmV0dXJuRGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWydib29rUmV0dXJuRGF0YSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5ib29rUmV0dXJuRGF0YSA/ICh0aGlzLmJvb2tSZXR1cm5EYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmJvb2tSZXR1cm5EYXRhO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5leHRDdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25leHRDdXJzb3InXSA9IHRoaXMubmV4dEN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNNb3JlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNNb3JlJ10gPSB0aGlzLmhhc01vcmU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0VGF4aVVzZXJEYXRhUGFnaW5hdGlvblJlcXVlc3QgaW1wbGVtZW50cyBpLkdldFRheGlVc2VyRGF0YVBhZ2luYXRpb25SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBjdXJzb3I6IHN0cmluZztcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIGZpbHRlcnM6IEZpbHRlclRheGlVc2VyRGF0YTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFRheGlVc2VyRGF0YVBhZ2luYXRpb25SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0VGF4aVVzZXJEYXRhUGFnaW5hdGlvblJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucGFnZVNpemUpIHttLnBhZ2VTaXplID0gcGFyc2VJbnQocHJvdG8ucGFnZVNpemUsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by5maWx0ZXJzKSB7bS5maWx0ZXJzID0gRmlsdGVyVGF4aVVzZXJEYXRhLmZyb21Qcm90byhwcm90by5maWx0ZXJzKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0VGF4aVVzZXJEYXRhUGFnaW5hdGlvblJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnNvciddID0gdGhpcy5jdXJzb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnZVNpemUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhZ2VTaXplJ10gPSB0aGlzLnBhZ2VTaXplO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpbHRlcnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmlsdGVycyAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWx0ZXJzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZpbHRlcnMgPyAodGhpcy5maWx0ZXJzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpbHRlcnM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0VGF4aVVzZXJEYXRhUGFnaW5hdGlvblJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRUYXhpVXNlckRhdGFQYWdpbmF0aW9uUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHRheGFyclVzZXJkYXRhOiBUYXhpVXNlckRhdGFbXTtcbiAgICBuZXh0Q3Vyc29yOiBzdHJpbmc7XG4gICAgaGFzTW9yZTogYm9vbGVhbjtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRUYXhpVXNlckRhdGFQYWdpbmF0aW9uUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRUYXhpVXNlckRhdGFQYWdpbmF0aW9uUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udGF4YXJyVXNlcmRhdGEpIHttLnRheGFyclVzZXJkYXRhID0gcHJvdG8udGF4YXJyVXNlcmRhdGEubWFwKFRheGlVc2VyRGF0YS5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRUYXhpVXNlckRhdGFQYWdpbmF0aW9uUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YXhhcnJVc2VyZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50YXhhcnJVc2VyZGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWyd0YXhhcnJVc2VyZGF0YSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50YXhhcnJVc2VyZGF0YSA/ICh0aGlzLnRheGFyclVzZXJkYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRheGFyclVzZXJkYXRhO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5leHRDdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25leHRDdXJzb3InXSA9IHRoaXMubmV4dEN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNNb3JlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNNb3JlJ10gPSB0aGlzLmhhc01vcmU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVzc2FnZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVzc2FnZSddID0gdGhpcy5tZXNzYWdlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFVzZXJMaXN0SWQgaW1wbGVtZW50cyBpLkdldFVzZXJMaXN0SWRJbnRlcmZhY2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAga2V5OiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRVc2VyTGlzdElkIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0VXNlckxpc3RJZCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0VXNlckxpc3RJZEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5rZXkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2tleSddID0gdGhpcy5rZXk7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlicmFyeUFkbWluVXNlck1hbmFuZ2VtZW50UmVxdWVzdCBpbXBsZW1lbnRzIGkuTGlicmFyeUFkbWluVXNlck1hbmFuZ2VtZW50UmVxdWVzdEludGVyZmFjZSB7XG4gICAgZW1haWxJZDogc3RyaW5nO1xuICAgIHJvbGU6IHN0cmluZztcbiAgICBzdGF0dXM6IGJvb2xlYW47XG4gICAgcGFnZUFjY2VzczogUGFnZWFjY2Vzc1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlicmFyeUFkbWluVXNlck1hbmFuZ2VtZW50UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IExpYnJhcnlBZG1pblVzZXJNYW5hbmdlbWVudFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucGFnZUFjY2Vzcykge20ucGFnZUFjY2VzcyA9IHByb3RvLnBhZ2VBY2Nlc3MubWFwKFBhZ2VhY2Nlc3MuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlicmFyeUFkbWluVXNlck1hbmFuZ2VtZW50UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVtYWlsSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2VtYWlsSWQnXSA9IHRoaXMuZW1haWxJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yb2xlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydyb2xlJ10gPSB0aGlzLnJvbGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhdHVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdGF0dXMnXSA9IHRoaXMuc3RhdHVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2VBY2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFnZUFjY2VzcyAhPT0gbnVsbCkge3RvUmV0dXJuWydwYWdlQWNjZXNzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhZ2VBY2Nlc3MgPyAodGhpcy5wYWdlQWNjZXNzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhZ2VBY2Nlc3M7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlicmFyeUFkbWluVXNlck1hbmFuZ2VtZW50UmVzcG9uc2UgaW1wbGVtZW50cyBpLkxpYnJhcnlBZG1pblVzZXJNYW5hbmdlbWVudFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBlbWFpbElkOiBzdHJpbmc7XG4gICAgcm9sZTogc3RyaW5nO1xuICAgIHN0YXR1czogYm9vbGVhbjtcbiAgICBwYWdlQWNjZXNzOiBQYWdlYWNjZXNzW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaWJyYXJ5QWRtaW5Vc2VyTWFuYW5nZW1lbnRSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IExpYnJhcnlBZG1pblVzZXJNYW5hbmdlbWVudFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBhZ2VBY2Nlc3MpIHttLnBhZ2VBY2Nlc3MgPSBwcm90by5wYWdlQWNjZXNzLm1hcChQYWdlYWNjZXNzLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpYnJhcnlBZG1pblVzZXJNYW5hbmdlbWVudFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW1haWxJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZW1haWxJZCddID0gdGhpcy5lbWFpbElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJvbGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3JvbGUnXSA9IHRoaXMucm9sZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGF0dXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N0YXR1cyddID0gdGhpcy5zdGF0dXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnZUFjY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYWdlQWNjZXNzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BhZ2VBY2Nlc3MnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGFnZUFjY2VzcyA/ICh0aGlzLnBhZ2VBY2Nlc3MgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGFnZUFjY2Vzczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQYWdlYWNjZXNzIGltcGxlbWVudHMgaS5QYWdlYWNjZXNzSW50ZXJmYWNlIHtcbiAgICBwYWdldGl0bGU6IHN0cmluZztcbiAgICBjcmVhdGU6IGJvb2xlYW47XG4gICAgdXBkYXRlOiBib29sZWFuO1xuICAgIGRlbGV0ZTogYm9vbGVhbjtcbiAgICB2aWV3OiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogUGFnZWFjY2VzcyB7XG4gICAgICAgIGxldCBtID0gbmV3IFBhZ2VhY2Nlc3MoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlBhZ2VhY2Nlc3NJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdldGl0bGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhZ2V0aXRsZSddID0gdGhpcy5wYWdldGl0bGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3JlYXRlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjcmVhdGUnXSA9IHRoaXMuY3JlYXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVwZGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndXBkYXRlJ10gPSB0aGlzLnVwZGF0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kZWxldGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2RlbGV0ZSddID0gdGhpcy5kZWxldGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmlldyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndmlldyddID0gdGhpcy52aWV3O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRheGlVc2VyRGF0YSBpbXBsZW1lbnRzIGkuVGF4aVVzZXJEYXRhSW50ZXJmYWNlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGVtcGNvZGU6IHN0cmluZztcbiAgICBlbXBuYW1lOiBzdHJpbmc7XG4gICAgYWRkcmVzczogc3RyaW5nO1xuICAgIGxpY2Vuc2Vubzogc3RyaW5nO1xuICAgIHBob25lbm86IG51bWJlcjtcbiAgICBleHBlcmllbmNlOiBudW1iZXI7XG4gICAgY2l0eTogc3RyaW5nO1xuICAgIHN0YXRlOiBzdHJpbmc7XG4gICAgY291bnRyeTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVGF4aVVzZXJEYXRhIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVGF4aVVzZXJEYXRhKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBob25lbm8pIHttLnBob25lbm8gPSBwYXJzZUludChwcm90by5waG9uZW5vLCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8uZXhwZXJpZW5jZSkge20uZXhwZXJpZW5jZSA9IHBhcnNlSW50KHByb3RvLmV4cGVyaWVuY2UsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVGF4aVVzZXJEYXRhSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkJ10gPSB0aGlzLmlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVtcGNvZGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2VtcGNvZGUnXSA9IHRoaXMuZW1wY29kZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbXBuYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydlbXBuYW1lJ10gPSB0aGlzLmVtcG5hbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWRkcmVzcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWRkcmVzcyddID0gdGhpcy5hZGRyZXNzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxpY2Vuc2VubyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbGljZW5zZW5vJ10gPSB0aGlzLmxpY2Vuc2Vubzt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5waG9uZW5vICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwaG9uZW5vJ10gPSB0aGlzLnBob25lbm87fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZXhwZXJpZW5jZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZXhwZXJpZW5jZSddID0gdGhpcy5leHBlcmllbmNlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNpdHkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NpdHknXSA9IHRoaXMuY2l0eTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3RhdGUnXSA9IHRoaXMuc3RhdGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY291bnRyeSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY291bnRyeSddID0gdGhpcy5jb3VudHJ5O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRheGlVc2VyRGF0YVJlcXVlc3QgaW1wbGVtZW50cyBpLlRheGlVc2VyRGF0YVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZW1wY29kZTogc3RyaW5nO1xuICAgIGVtcG5hbWU6IHN0cmluZztcbiAgICBhZGRyZXNzOiBzdHJpbmc7XG4gICAgbGljZW5zZW5vOiBzdHJpbmc7XG4gICAgcGhvbmVubzogbnVtYmVyO1xuICAgIGV4cGVyaWVuY2U6IG51bWJlcjtcbiAgICBjaXR5OiBzdHJpbmc7XG4gICAgc3RhdGU6IHN0cmluZztcbiAgICBjb3VudHJ5OiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBUYXhpVXNlckRhdGFSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVGF4aVVzZXJEYXRhUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5waG9uZW5vKSB7bS5waG9uZW5vID0gcGFyc2VJbnQocHJvdG8ucGhvbmVubywgMTApO31cbiAgICAgICAgaWYgKHByb3RvLmV4cGVyaWVuY2UpIHttLmV4cGVyaWVuY2UgPSBwYXJzZUludChwcm90by5leHBlcmllbmNlLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlRheGlVc2VyRGF0YVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW1wY29kZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZW1wY29kZSddID0gdGhpcy5lbXBjb2RlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVtcG5hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2VtcG5hbWUnXSA9IHRoaXMuZW1wbmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hZGRyZXNzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhZGRyZXNzJ10gPSB0aGlzLmFkZHJlc3M7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubGljZW5zZW5vICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydsaWNlbnNlbm8nXSA9IHRoaXMubGljZW5zZW5vO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBob25lbm8gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Bob25lbm8nXSA9IHRoaXMucGhvbmVubzt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5leHBlcmllbmNlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydleHBlcmllbmNlJ10gPSB0aGlzLmV4cGVyaWVuY2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2l0eSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2l0eSddID0gdGhpcy5jaXR5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXRlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdGF0ZSddID0gdGhpcy5zdGF0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb3VudHJ5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb3VudHJ5J10gPSB0aGlzLmNvdW50cnk7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25SZXBvcnREYXRhIGltcGxlbWVudHMgaS5UcmFuc2FjdGlvblJlcG9ydERhdGFJbnRlcmZhY2Uge1xuICAgIGVtcGxveWVlSWQ6IHN0cmluZztcbiAgICBib29rSWQ6IHN0cmluZztcbiAgICBjaGVja2VkT3V0RGF0ZTogRGF0ZTtcbiAgICB0cmFuc2FjdGlvbklkOiBzdHJpbmc7XG4gICAgYm9va05hbWU6IHN0cmluZztcbiAgICByZXR1cm5lZERhdGU6IERhdGU7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBUcmFuc2FjdGlvblJlcG9ydERhdGEge1xuICAgICAgICBsZXQgbSA9IG5ldyBUcmFuc2FjdGlvblJlcG9ydERhdGEoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY2hlY2tlZE91dERhdGUpIHttLmNoZWNrZWRPdXREYXRlID0gbmV3IERhdGUocHJvdG8uY2hlY2tlZE91dERhdGUpO31cbiAgICAgICAgaWYgKHByb3RvLnJldHVybmVkRGF0ZSkge20ucmV0dXJuZWREYXRlID0gbmV3IERhdGUocHJvdG8ucmV0dXJuZWREYXRlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVHJhbnNhY3Rpb25SZXBvcnREYXRhSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW1wbG95ZWVJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZW1wbG95ZWVJZCddID0gdGhpcy5lbXBsb3llZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJvb2tJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYm9va0lkJ10gPSB0aGlzLmJvb2tJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jaGVja2VkT3V0RGF0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jaGVja2VkT3V0RGF0ZSAhPT0gbnVsbCkge3RvUmV0dXJuWydjaGVja2VkT3V0RGF0ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jaGVja2VkT3V0RGF0ZSA/ICh0aGlzLmNoZWNrZWRPdXREYXRlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNoZWNrZWRPdXREYXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRyYW5zYWN0aW9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RyYW5zYWN0aW9uSWQnXSA9IHRoaXMudHJhbnNhY3Rpb25JZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ib29rTmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYm9va05hbWUnXSA9IHRoaXMuYm9va05hbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmV0dXJuZWREYXRlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnJldHVybmVkRGF0ZSAhPT0gbnVsbCkge3RvUmV0dXJuWydyZXR1cm5lZERhdGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucmV0dXJuZWREYXRlID8gKHRoaXMucmV0dXJuZWREYXRlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnJldHVybmVkRGF0ZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvblJlcG9ydFJlcXVlc3QgaW1wbGVtZW50cyBpLlRyYW5zYWN0aW9uUmVwb3J0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFRyYW5zYWN0aW9uUmVwb3J0UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFRyYW5zYWN0aW9uUmVwb3J0UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wYWdlU2l6ZSkge20ucGFnZVNpemUgPSBwYXJzZUludChwcm90by5wYWdlU2l6ZSwgMTApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5UcmFuc2FjdGlvblJlcG9ydFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnNvciddID0gdGhpcy5jdXJzb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnZVNpemUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhZ2VTaXplJ10gPSB0aGlzLnBhZ2VTaXplO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uUmVwb3J0UmVzcG9uc2UgaW1wbGVtZW50cyBpLlRyYW5zYWN0aW9uUmVwb3J0UmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHRyYW5zYWN0aW9uUmVwb3J0RGF0YTogVHJhbnNhY3Rpb25SZXBvcnREYXRhW107XG4gICAgbmV4dEN1cnNvcjogc3RyaW5nO1xuICAgIGhhc01vcmU6IGJvb2xlYW47XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVHJhbnNhY3Rpb25SZXBvcnRSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFRyYW5zYWN0aW9uUmVwb3J0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udHJhbnNhY3Rpb25SZXBvcnREYXRhKSB7bS50cmFuc2FjdGlvblJlcG9ydERhdGEgPSBwcm90by50cmFuc2FjdGlvblJlcG9ydERhdGEubWFwKFRyYW5zYWN0aW9uUmVwb3J0RGF0YS5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5UcmFuc2FjdGlvblJlcG9ydFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudHJhbnNhY3Rpb25SZXBvcnREYXRhICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRyYW5zYWN0aW9uUmVwb3J0RGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWyd0cmFuc2FjdGlvblJlcG9ydERhdGEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudHJhbnNhY3Rpb25SZXBvcnREYXRhID8gKHRoaXMudHJhbnNhY3Rpb25SZXBvcnREYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRyYW5zYWN0aW9uUmVwb3J0RGF0YTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5uZXh0Q3Vyc29yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyduZXh0Q3Vyc29yJ10gPSB0aGlzLm5leHRDdXJzb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaGFzTW9yZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaGFzTW9yZSddID0gdGhpcy5oYXNNb3JlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lc3NhZ2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lc3NhZ2UnXSA9IHRoaXMubWVzc2FnZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVc2VyRmlsdGVyIGltcGxlbWVudHMgaS5Vc2VyRmlsdGVySW50ZXJmYWNlIHtcbiAgICBzdWJqZWN0VHlwZXM6IHN0cmluZ1tdO1xuICAgIHNlYXJjaFRlcm1zOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVzZXJGaWx0ZXIge1xuICAgICAgICBsZXQgbSA9IG5ldyBVc2VyRmlsdGVyKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Vc2VyRmlsdGVySW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3ViamVjdFR5cGVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdWJqZWN0VHlwZXMnXSA9IHRoaXMuc3ViamVjdFR5cGVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNlYXJjaFRlcm1zICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzZWFyY2hUZXJtcyddID0gdGhpcy5zZWFyY2hUZXJtczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVc2VyU29ydERhdGEgaW1wbGVtZW50cyBpLlVzZXJTb3J0RGF0YUludGVyZmFjZSB7XG4gICAgZmllbGQ6IG51bWJlcjtcbiAgICBkaXJlY3Rpb246IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVzZXJTb3J0RGF0YSB7XG4gICAgICAgIGxldCBtID0gbmV3IFVzZXJTb3J0RGF0YSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5maWVsZCkge20uZmllbGQgPSBwYXJzZUludChwcm90by5maWVsZCwgMTApO31cbiAgICAgICAgaWYgKHByb3RvLmRpcmVjdGlvbikge20uZGlyZWN0aW9uID0gcGFyc2VJbnQocHJvdG8uZGlyZWN0aW9uLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVzZXJTb3J0RGF0YUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpZWxkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydmaWVsZCddID0gdGhpcy5maWVsZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kaXJlY3Rpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2RpcmVjdGlvbiddID0gdGhpcy5kaXJlY3Rpb247fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmFsaWRhdGVVc2VyV2l0aElhbVJlcXVlc3QgaW1wbGVtZW50cyBpLlZhbGlkYXRlVXNlcldpdGhJYW1SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBlbWFpbElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBWYWxpZGF0ZVVzZXJXaXRoSWFtUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFZhbGlkYXRlVXNlcldpdGhJYW1SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5WYWxpZGF0ZVVzZXJXaXRoSWFtUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVtYWlsSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2VtYWlsSWQnXSA9IHRoaXMuZW1haWxJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0ZVVzZXJXaXRoSWFtUmVzcG9uc2UgaW1wbGVtZW50cyBpLlZhbGlkYXRlVXNlcldpdGhJYW1SZXNwb25zZUludGVyZmFjZSB7XG4gICAgc3RhdHVzOiBib29sZWFuO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFZhbGlkYXRlVXNlcldpdGhJYW1SZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFZhbGlkYXRlVXNlcldpdGhJYW1SZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVmFsaWRhdGVVc2VyV2l0aElhbVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhdHVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdGF0dXMnXSA9IHRoaXMuc3RhdHVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lc3NhZ2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lc3NhZ2UnXSA9IHRoaXMubWVzc2FnZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbiJdfQ==
|