@aneoconsultingfr/armonik.api.angular 3.11.0-edge.89.ab31d7c → 3.11.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.
Files changed (55) hide show
  1. package/README.md +1 -1
  2. package/esm2022/lib/generated/applications-common.pb.mjs +22 -618
  3. package/esm2022/lib/generated/applications-fields.pb.mjs +231 -0
  4. package/esm2022/lib/generated/applications-filters.pb.mjs +349 -0
  5. package/esm2022/lib/generated/applications-service.pb.mjs +1 -1
  6. package/esm2022/lib/generated/applications-service.pbsc.mjs +6 -36
  7. package/esm2022/lib/generated/events-common.pb.mjs +19 -3
  8. package/esm2022/lib/generated/filters-common.pb.mjs +642 -0
  9. package/esm2022/lib/generated/partitions-common.pb.mjs +25 -433
  10. package/esm2022/lib/generated/partitions-fields.pb.mjs +233 -0
  11. package/esm2022/lib/generated/partitions-filters.pb.mjs +431 -0
  12. package/esm2022/lib/generated/partitions-service.pb.mjs +1 -1
  13. package/esm2022/lib/generated/partitions-service.pbsc.mjs +10 -10
  14. package/esm2022/lib/generated/results-common.pb.mjs +33 -565
  15. package/esm2022/lib/generated/results-fields.pb.mjs +234 -0
  16. package/esm2022/lib/generated/results-filters.pb.mjs +546 -0
  17. package/esm2022/lib/generated/results-service.pb.mjs +1 -1
  18. package/esm2022/lib/generated/results-service.pbsc.mjs +39 -39
  19. package/esm2022/lib/generated/sessions-common.pb.mjs +104 -822
  20. package/esm2022/lib/generated/sessions-fields.pb.mjs +504 -0
  21. package/esm2022/lib/generated/sessions-filters.pb.mjs +602 -0
  22. package/esm2022/lib/generated/sessions-service.pb.mjs +1 -1
  23. package/esm2022/lib/generated/sessions-service.pbsc.mjs +24 -24
  24. package/esm2022/lib/generated/tasks-common.pb.mjs +166 -900
  25. package/esm2022/lib/generated/tasks-fields.pb.mjs +513 -0
  26. package/esm2022/lib/generated/tasks-filters.pb.mjs +602 -0
  27. package/esm2022/lib/generated/tasks-service.pb.mjs +1 -1
  28. package/esm2022/lib/generated/tasks-service.pbsc.mjs +36 -36
  29. package/esm2022/lib/index.mjs +22 -12
  30. package/fesm2022/aneoconsultingfr-armonik.api.angular.mjs +11857 -10006
  31. package/fesm2022/aneoconsultingfr-armonik.api.angular.mjs.map +1 -1
  32. package/lib/generated/applications-common.pb.d.ts +11 -388
  33. package/lib/generated/applications-fields.pb.d.ts +153 -0
  34. package/lib/generated/applications-filters.pb.d.ts +222 -0
  35. package/lib/generated/applications-service.pbsc.d.ts +5 -21
  36. package/lib/generated/events-common.pb.d.ts +5 -0
  37. package/lib/generated/filters-common.pb.d.ts +408 -0
  38. package/lib/generated/partitions-common.pb.d.ts +15 -260
  39. package/lib/generated/partitions-fields.pb.d.ts +155 -0
  40. package/lib/generated/partitions-filters.pb.d.ts +240 -0
  41. package/lib/generated/partitions-service.pbsc.d.ts +9 -9
  42. package/lib/generated/results-common.pb.d.ts +24 -295
  43. package/lib/generated/results-fields.pb.d.ts +156 -0
  44. package/lib/generated/results-filters.pb.d.ts +315 -0
  45. package/lib/generated/results-service.pbsc.d.ts +38 -38
  46. package/lib/generated/sessions-common.pb.d.ts +76 -489
  47. package/lib/generated/sessions-fields.pb.d.ts +318 -0
  48. package/lib/generated/sessions-filters.pb.d.ts +327 -0
  49. package/lib/generated/sessions-service.pbsc.d.ts +19 -19
  50. package/lib/generated/tasks-common.pb.d.ts +139 -561
  51. package/lib/generated/tasks-fields.pb.d.ts +327 -0
  52. package/lib/generated/tasks-filters.pb.d.ts +327 -0
  53. package/lib/generated/tasks-service.pbsc.d.ts +31 -31
  54. package/lib/index.d.ts +21 -11
  55. package/package.json +2 -2
@@ -0,0 +1,602 @@
1
+ import { BinaryReader, BinaryWriter } from 'google-protobuf';
2
+ import * as armonikApiGrpcV1001 from './filters-common.pb';
3
+ import * as armonikApiGrpcV1Task_status002 from './task-status.pb';
4
+ import * as armonikApiGrpcV1Tasks003 from './tasks-fields.pb';
5
+ /**
6
+ * Message implementation for armonik.api.grpc.v1.tasks.FilterStatus
7
+ */
8
+ export class FilterStatus {
9
+ static { this.id = 'armonik.api.grpc.v1.tasks.FilterStatus'; }
10
+ /**
11
+ * Deserialize binary data to message
12
+ * @param instance message instance
13
+ */
14
+ static deserializeBinary(bytes) {
15
+ const instance = new FilterStatus();
16
+ FilterStatus.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
17
+ return instance;
18
+ }
19
+ /**
20
+ * Check all the properties and set default protobuf values if necessary
21
+ * @param _instance message instance
22
+ */
23
+ static refineValues(_instance) {
24
+ _instance.value = _instance.value || 0;
25
+ _instance.operator = _instance.operator || 0;
26
+ }
27
+ /**
28
+ * Deserializes / reads binary message into message instance using provided binary reader
29
+ * @param _instance message instance
30
+ * @param _reader binary reader instance
31
+ */
32
+ static deserializeBinaryFromReader(_instance, _reader) {
33
+ while (_reader.nextField()) {
34
+ if (_reader.isEndGroup())
35
+ break;
36
+ switch (_reader.getFieldNumber()) {
37
+ case 1:
38
+ _instance.value = _reader.readEnum();
39
+ break;
40
+ case 2:
41
+ _instance.operator = _reader.readEnum();
42
+ break;
43
+ default:
44
+ _reader.skipField();
45
+ }
46
+ }
47
+ FilterStatus.refineValues(_instance);
48
+ }
49
+ /**
50
+ * Serializes a message to binary format using provided binary reader
51
+ * @param _instance message instance
52
+ * @param _writer binary writer instance
53
+ */
54
+ static serializeBinaryToWriter(_instance, _writer) {
55
+ if (_instance.value) {
56
+ _writer.writeEnum(1, _instance.value);
57
+ }
58
+ if (_instance.operator) {
59
+ _writer.writeEnum(2, _instance.operator);
60
+ }
61
+ }
62
+ /**
63
+ * Message constructor. Initializes the properties and applies default Protobuf values if necessary
64
+ * @param _value initial values object or instance of FilterStatus to deeply clone from
65
+ */
66
+ constructor(_value) {
67
+ _value = _value || {};
68
+ this.value = _value.value;
69
+ this.operator = _value.operator;
70
+ FilterStatus.refineValues(this);
71
+ }
72
+ get value() {
73
+ return this._value;
74
+ }
75
+ set value(value) {
76
+ this._value = value;
77
+ }
78
+ get operator() {
79
+ return this._operator;
80
+ }
81
+ set operator(value) {
82
+ this._operator = value;
83
+ }
84
+ /**
85
+ * Serialize message to binary data
86
+ * @param instance message instance
87
+ */
88
+ serializeBinary() {
89
+ const writer = new BinaryWriter();
90
+ FilterStatus.serializeBinaryToWriter(this, writer);
91
+ return writer.getResultBuffer();
92
+ }
93
+ /**
94
+ * Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
95
+ */
96
+ toObject() {
97
+ return {
98
+ value: this.value,
99
+ operator: this.operator
100
+ };
101
+ }
102
+ /**
103
+ * Convenience method to support JSON.stringify(message), replicates the structure of toObject()
104
+ */
105
+ toJSON() {
106
+ return this.toObject();
107
+ }
108
+ /**
109
+ * Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
110
+ * Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
111
+ * If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
112
+ */
113
+ toProtobufJSON(
114
+ // @ts-ignore
115
+ options) {
116
+ return {
117
+ value: armonikApiGrpcV1Task_status002.TaskStatus[this.value === null || this.value === undefined ? 0 : this.value],
118
+ operator: armonikApiGrpcV1001.FilterStatusOperator[this.operator === null || this.operator === undefined
119
+ ? 0
120
+ : this.operator]
121
+ };
122
+ }
123
+ }
124
+ /**
125
+ * Message implementation for armonik.api.grpc.v1.tasks.FilterField
126
+ */
127
+ export class FilterField {
128
+ static { this.id = 'armonik.api.grpc.v1.tasks.FilterField'; }
129
+ /**
130
+ * Deserialize binary data to message
131
+ * @param instance message instance
132
+ */
133
+ static deserializeBinary(bytes) {
134
+ const instance = new FilterField();
135
+ FilterField.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
136
+ return instance;
137
+ }
138
+ /**
139
+ * Check all the properties and set default protobuf values if necessary
140
+ * @param _instance message instance
141
+ */
142
+ static refineValues(_instance) {
143
+ _instance.field = _instance.field || undefined;
144
+ }
145
+ /**
146
+ * Deserializes / reads binary message into message instance using provided binary reader
147
+ * @param _instance message instance
148
+ * @param _reader binary reader instance
149
+ */
150
+ static deserializeBinaryFromReader(_instance, _reader) {
151
+ while (_reader.nextField()) {
152
+ if (_reader.isEndGroup())
153
+ break;
154
+ switch (_reader.getFieldNumber()) {
155
+ case 1:
156
+ _instance.field = new armonikApiGrpcV1Tasks003.TaskField();
157
+ _reader.readMessage(_instance.field, armonikApiGrpcV1Tasks003.TaskField.deserializeBinaryFromReader);
158
+ break;
159
+ case 2:
160
+ _instance.filterString = new armonikApiGrpcV1001.FilterString();
161
+ _reader.readMessage(_instance.filterString, armonikApiGrpcV1001.FilterString.deserializeBinaryFromReader);
162
+ break;
163
+ case 3:
164
+ _instance.filterNumber = new armonikApiGrpcV1001.FilterNumber();
165
+ _reader.readMessage(_instance.filterNumber, armonikApiGrpcV1001.FilterNumber.deserializeBinaryFromReader);
166
+ break;
167
+ case 4:
168
+ _instance.filterBoolean = new armonikApiGrpcV1001.FilterBoolean();
169
+ _reader.readMessage(_instance.filterBoolean, armonikApiGrpcV1001.FilterBoolean.deserializeBinaryFromReader);
170
+ break;
171
+ case 5:
172
+ _instance.filterStatus = new FilterStatus();
173
+ _reader.readMessage(_instance.filterStatus, FilterStatus.deserializeBinaryFromReader);
174
+ break;
175
+ case 6:
176
+ _instance.filterDate = new armonikApiGrpcV1001.FilterDate();
177
+ _reader.readMessage(_instance.filterDate, armonikApiGrpcV1001.FilterDate.deserializeBinaryFromReader);
178
+ break;
179
+ case 7:
180
+ _instance.filterArray = new armonikApiGrpcV1001.FilterArray();
181
+ _reader.readMessage(_instance.filterArray, armonikApiGrpcV1001.FilterArray.deserializeBinaryFromReader);
182
+ break;
183
+ default:
184
+ _reader.skipField();
185
+ }
186
+ }
187
+ FilterField.refineValues(_instance);
188
+ }
189
+ /**
190
+ * Serializes a message to binary format using provided binary reader
191
+ * @param _instance message instance
192
+ * @param _writer binary writer instance
193
+ */
194
+ static serializeBinaryToWriter(_instance, _writer) {
195
+ if (_instance.field) {
196
+ _writer.writeMessage(1, _instance.field, armonikApiGrpcV1Tasks003.TaskField.serializeBinaryToWriter);
197
+ }
198
+ if (_instance.filterString) {
199
+ _writer.writeMessage(2, _instance.filterString, armonikApiGrpcV1001.FilterString.serializeBinaryToWriter);
200
+ }
201
+ if (_instance.filterNumber) {
202
+ _writer.writeMessage(3, _instance.filterNumber, armonikApiGrpcV1001.FilterNumber.serializeBinaryToWriter);
203
+ }
204
+ if (_instance.filterBoolean) {
205
+ _writer.writeMessage(4, _instance.filterBoolean, armonikApiGrpcV1001.FilterBoolean.serializeBinaryToWriter);
206
+ }
207
+ if (_instance.filterStatus) {
208
+ _writer.writeMessage(5, _instance.filterStatus, FilterStatus.serializeBinaryToWriter);
209
+ }
210
+ if (_instance.filterDate) {
211
+ _writer.writeMessage(6, _instance.filterDate, armonikApiGrpcV1001.FilterDate.serializeBinaryToWriter);
212
+ }
213
+ if (_instance.filterArray) {
214
+ _writer.writeMessage(7, _instance.filterArray, armonikApiGrpcV1001.FilterArray.serializeBinaryToWriter);
215
+ }
216
+ }
217
+ /**
218
+ * Message constructor. Initializes the properties and applies default Protobuf values if necessary
219
+ * @param _value initial values object or instance of FilterField to deeply clone from
220
+ */
221
+ constructor(_value) {
222
+ this._valueCondition = FilterField.ValueConditionCase.none;
223
+ _value = _value || {};
224
+ this.field = _value.field
225
+ ? new armonikApiGrpcV1Tasks003.TaskField(_value.field)
226
+ : undefined;
227
+ this.filterString = _value.filterString
228
+ ? new armonikApiGrpcV1001.FilterString(_value.filterString)
229
+ : undefined;
230
+ this.filterNumber = _value.filterNumber
231
+ ? new armonikApiGrpcV1001.FilterNumber(_value.filterNumber)
232
+ : undefined;
233
+ this.filterBoolean = _value.filterBoolean
234
+ ? new armonikApiGrpcV1001.FilterBoolean(_value.filterBoolean)
235
+ : undefined;
236
+ this.filterStatus = _value.filterStatus
237
+ ? new FilterStatus(_value.filterStatus)
238
+ : undefined;
239
+ this.filterDate = _value.filterDate
240
+ ? new armonikApiGrpcV1001.FilterDate(_value.filterDate)
241
+ : undefined;
242
+ this.filterArray = _value.filterArray
243
+ ? new armonikApiGrpcV1001.FilterArray(_value.filterArray)
244
+ : undefined;
245
+ FilterField.refineValues(this);
246
+ }
247
+ get field() {
248
+ return this._field;
249
+ }
250
+ set field(value) {
251
+ this._field = value;
252
+ }
253
+ get filterString() {
254
+ return this._filterString;
255
+ }
256
+ set filterString(value) {
257
+ if (value !== undefined && value !== null) {
258
+ this._filterNumber = this._filterBoolean = this._filterStatus = this._filterDate = this._filterArray = undefined;
259
+ this._valueCondition = FilterField.ValueConditionCase.filterString;
260
+ }
261
+ this._filterString = value;
262
+ }
263
+ get filterNumber() {
264
+ return this._filterNumber;
265
+ }
266
+ set filterNumber(value) {
267
+ if (value !== undefined && value !== null) {
268
+ this._filterString = this._filterBoolean = this._filterStatus = this._filterDate = this._filterArray = undefined;
269
+ this._valueCondition = FilterField.ValueConditionCase.filterNumber;
270
+ }
271
+ this._filterNumber = value;
272
+ }
273
+ get filterBoolean() {
274
+ return this._filterBoolean;
275
+ }
276
+ set filterBoolean(value) {
277
+ if (value !== undefined && value !== null) {
278
+ this._filterString = this._filterNumber = this._filterStatus = this._filterDate = this._filterArray = undefined;
279
+ this._valueCondition = FilterField.ValueConditionCase.filterBoolean;
280
+ }
281
+ this._filterBoolean = value;
282
+ }
283
+ get filterStatus() {
284
+ return this._filterStatus;
285
+ }
286
+ set filterStatus(value) {
287
+ if (value !== undefined && value !== null) {
288
+ this._filterString = this._filterNumber = this._filterBoolean = this._filterDate = this._filterArray = undefined;
289
+ this._valueCondition = FilterField.ValueConditionCase.filterStatus;
290
+ }
291
+ this._filterStatus = value;
292
+ }
293
+ get filterDate() {
294
+ return this._filterDate;
295
+ }
296
+ set filterDate(value) {
297
+ if (value !== undefined && value !== null) {
298
+ this._filterString = this._filterNumber = this._filterBoolean = this._filterStatus = this._filterArray = undefined;
299
+ this._valueCondition = FilterField.ValueConditionCase.filterDate;
300
+ }
301
+ this._filterDate = value;
302
+ }
303
+ get filterArray() {
304
+ return this._filterArray;
305
+ }
306
+ set filterArray(value) {
307
+ if (value !== undefined && value !== null) {
308
+ this._filterString = this._filterNumber = this._filterBoolean = this._filterStatus = this._filterDate = undefined;
309
+ this._valueCondition = FilterField.ValueConditionCase.filterArray;
310
+ }
311
+ this._filterArray = value;
312
+ }
313
+ get valueCondition() {
314
+ return this._valueCondition;
315
+ }
316
+ /**
317
+ * Serialize message to binary data
318
+ * @param instance message instance
319
+ */
320
+ serializeBinary() {
321
+ const writer = new BinaryWriter();
322
+ FilterField.serializeBinaryToWriter(this, writer);
323
+ return writer.getResultBuffer();
324
+ }
325
+ /**
326
+ * Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
327
+ */
328
+ toObject() {
329
+ return {
330
+ field: this.field ? this.field.toObject() : undefined,
331
+ filterString: this.filterString
332
+ ? this.filterString.toObject()
333
+ : undefined,
334
+ filterNumber: this.filterNumber
335
+ ? this.filterNumber.toObject()
336
+ : undefined,
337
+ filterBoolean: this.filterBoolean
338
+ ? this.filterBoolean.toObject()
339
+ : undefined,
340
+ filterStatus: this.filterStatus
341
+ ? this.filterStatus.toObject()
342
+ : undefined,
343
+ filterDate: this.filterDate ? this.filterDate.toObject() : undefined,
344
+ filterArray: this.filterArray ? this.filterArray.toObject() : undefined
345
+ };
346
+ }
347
+ /**
348
+ * Convenience method to support JSON.stringify(message), replicates the structure of toObject()
349
+ */
350
+ toJSON() {
351
+ return this.toObject();
352
+ }
353
+ /**
354
+ * Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
355
+ * Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
356
+ * If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
357
+ */
358
+ toProtobufJSON(
359
+ // @ts-ignore
360
+ options) {
361
+ return {
362
+ field: this.field ? this.field.toProtobufJSON(options) : null,
363
+ filterString: this.filterString
364
+ ? this.filterString.toProtobufJSON(options)
365
+ : null,
366
+ filterNumber: this.filterNumber
367
+ ? this.filterNumber.toProtobufJSON(options)
368
+ : null,
369
+ filterBoolean: this.filterBoolean
370
+ ? this.filterBoolean.toProtobufJSON(options)
371
+ : null,
372
+ filterStatus: this.filterStatus
373
+ ? this.filterStatus.toProtobufJSON(options)
374
+ : null,
375
+ filterDate: this.filterDate
376
+ ? this.filterDate.toProtobufJSON(options)
377
+ : null,
378
+ filterArray: this.filterArray
379
+ ? this.filterArray.toProtobufJSON(options)
380
+ : null
381
+ };
382
+ }
383
+ }
384
+ (function (FilterField) {
385
+ let ValueConditionCase;
386
+ (function (ValueConditionCase) {
387
+ ValueConditionCase[ValueConditionCase["none"] = 0] = "none";
388
+ ValueConditionCase[ValueConditionCase["filterString"] = 1] = "filterString";
389
+ ValueConditionCase[ValueConditionCase["filterNumber"] = 2] = "filterNumber";
390
+ ValueConditionCase[ValueConditionCase["filterBoolean"] = 3] = "filterBoolean";
391
+ ValueConditionCase[ValueConditionCase["filterStatus"] = 4] = "filterStatus";
392
+ ValueConditionCase[ValueConditionCase["filterDate"] = 5] = "filterDate";
393
+ ValueConditionCase[ValueConditionCase["filterArray"] = 6] = "filterArray";
394
+ })(ValueConditionCase = FilterField.ValueConditionCase || (FilterField.ValueConditionCase = {}));
395
+ })(FilterField || (FilterField = {}));
396
+ /**
397
+ * Message implementation for armonik.api.grpc.v1.tasks.FiltersAnd
398
+ */
399
+ export class FiltersAnd {
400
+ static { this.id = 'armonik.api.grpc.v1.tasks.FiltersAnd'; }
401
+ /**
402
+ * Deserialize binary data to message
403
+ * @param instance message instance
404
+ */
405
+ static deserializeBinary(bytes) {
406
+ const instance = new FiltersAnd();
407
+ FiltersAnd.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
408
+ return instance;
409
+ }
410
+ /**
411
+ * Check all the properties and set default protobuf values if necessary
412
+ * @param _instance message instance
413
+ */
414
+ static refineValues(_instance) {
415
+ _instance.and = _instance.and || [];
416
+ }
417
+ /**
418
+ * Deserializes / reads binary message into message instance using provided binary reader
419
+ * @param _instance message instance
420
+ * @param _reader binary reader instance
421
+ */
422
+ static deserializeBinaryFromReader(_instance, _reader) {
423
+ while (_reader.nextField()) {
424
+ if (_reader.isEndGroup())
425
+ break;
426
+ switch (_reader.getFieldNumber()) {
427
+ case 1:
428
+ const messageInitializer1 = new FilterField();
429
+ _reader.readMessage(messageInitializer1, FilterField.deserializeBinaryFromReader);
430
+ (_instance.and = _instance.and || []).push(messageInitializer1);
431
+ break;
432
+ default:
433
+ _reader.skipField();
434
+ }
435
+ }
436
+ FiltersAnd.refineValues(_instance);
437
+ }
438
+ /**
439
+ * Serializes a message to binary format using provided binary reader
440
+ * @param _instance message instance
441
+ * @param _writer binary writer instance
442
+ */
443
+ static serializeBinaryToWriter(_instance, _writer) {
444
+ if (_instance.and && _instance.and.length) {
445
+ _writer.writeRepeatedMessage(1, _instance.and, FilterField.serializeBinaryToWriter);
446
+ }
447
+ }
448
+ /**
449
+ * Message constructor. Initializes the properties and applies default Protobuf values if necessary
450
+ * @param _value initial values object or instance of FiltersAnd to deeply clone from
451
+ */
452
+ constructor(_value) {
453
+ _value = _value || {};
454
+ this.and = (_value.and || []).map(m => new FilterField(m));
455
+ FiltersAnd.refineValues(this);
456
+ }
457
+ get and() {
458
+ return this._and;
459
+ }
460
+ set and(value) {
461
+ this._and = value;
462
+ }
463
+ /**
464
+ * Serialize message to binary data
465
+ * @param instance message instance
466
+ */
467
+ serializeBinary() {
468
+ const writer = new BinaryWriter();
469
+ FiltersAnd.serializeBinaryToWriter(this, writer);
470
+ return writer.getResultBuffer();
471
+ }
472
+ /**
473
+ * Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
474
+ */
475
+ toObject() {
476
+ return {
477
+ and: (this.and || []).map(m => m.toObject())
478
+ };
479
+ }
480
+ /**
481
+ * Convenience method to support JSON.stringify(message), replicates the structure of toObject()
482
+ */
483
+ toJSON() {
484
+ return this.toObject();
485
+ }
486
+ /**
487
+ * Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
488
+ * Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
489
+ * If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
490
+ */
491
+ toProtobufJSON(
492
+ // @ts-ignore
493
+ options) {
494
+ return {
495
+ and: (this.and || []).map(m => m.toProtobufJSON(options))
496
+ };
497
+ }
498
+ }
499
+ /**
500
+ * Message implementation for armonik.api.grpc.v1.tasks.Filters
501
+ */
502
+ export class Filters {
503
+ static { this.id = 'armonik.api.grpc.v1.tasks.Filters'; }
504
+ /**
505
+ * Deserialize binary data to message
506
+ * @param instance message instance
507
+ */
508
+ static deserializeBinary(bytes) {
509
+ const instance = new Filters();
510
+ Filters.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
511
+ return instance;
512
+ }
513
+ /**
514
+ * Check all the properties and set default protobuf values if necessary
515
+ * @param _instance message instance
516
+ */
517
+ static refineValues(_instance) {
518
+ _instance.or = _instance.or || [];
519
+ }
520
+ /**
521
+ * Deserializes / reads binary message into message instance using provided binary reader
522
+ * @param _instance message instance
523
+ * @param _reader binary reader instance
524
+ */
525
+ static deserializeBinaryFromReader(_instance, _reader) {
526
+ while (_reader.nextField()) {
527
+ if (_reader.isEndGroup())
528
+ break;
529
+ switch (_reader.getFieldNumber()) {
530
+ case 1:
531
+ const messageInitializer1 = new FiltersAnd();
532
+ _reader.readMessage(messageInitializer1, FiltersAnd.deserializeBinaryFromReader);
533
+ (_instance.or = _instance.or || []).push(messageInitializer1);
534
+ break;
535
+ default:
536
+ _reader.skipField();
537
+ }
538
+ }
539
+ Filters.refineValues(_instance);
540
+ }
541
+ /**
542
+ * Serializes a message to binary format using provided binary reader
543
+ * @param _instance message instance
544
+ * @param _writer binary writer instance
545
+ */
546
+ static serializeBinaryToWriter(_instance, _writer) {
547
+ if (_instance.or && _instance.or.length) {
548
+ _writer.writeRepeatedMessage(1, _instance.or, FiltersAnd.serializeBinaryToWriter);
549
+ }
550
+ }
551
+ /**
552
+ * Message constructor. Initializes the properties and applies default Protobuf values if necessary
553
+ * @param _value initial values object or instance of Filters to deeply clone from
554
+ */
555
+ constructor(_value) {
556
+ _value = _value || {};
557
+ this.or = (_value.or || []).map(m => new FiltersAnd(m));
558
+ Filters.refineValues(this);
559
+ }
560
+ get or() {
561
+ return this._or;
562
+ }
563
+ set or(value) {
564
+ this._or = value;
565
+ }
566
+ /**
567
+ * Serialize message to binary data
568
+ * @param instance message instance
569
+ */
570
+ serializeBinary() {
571
+ const writer = new BinaryWriter();
572
+ Filters.serializeBinaryToWriter(this, writer);
573
+ return writer.getResultBuffer();
574
+ }
575
+ /**
576
+ * Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
577
+ */
578
+ toObject() {
579
+ return {
580
+ or: (this.or || []).map(m => m.toObject())
581
+ };
582
+ }
583
+ /**
584
+ * Convenience method to support JSON.stringify(message), replicates the structure of toObject()
585
+ */
586
+ toJSON() {
587
+ return this.toObject();
588
+ }
589
+ /**
590
+ * Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
591
+ * Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
592
+ * If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
593
+ */
594
+ toProtobufJSON(
595
+ // @ts-ignore
596
+ options) {
597
+ return {
598
+ or: (this.or || []).map(m => m.toProtobufJSON(options))
599
+ };
600
+ }
601
+ }
602
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza3MtZmlsdGVycy5wYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZW9jb25zdWx0aW5nZnIvYXJtb25pay5hcGkuYW5ndWxhci9zcmMvbGliL2dlbmVyYXRlZC90YXNrcy1maWx0ZXJzLnBiLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFjLE1BQU0saUJBQWlCLENBQUM7QUFFekUsT0FBTyxLQUFLLG1CQUFtQixNQUFNLHFCQUFxQixDQUFDO0FBQzNELE9BQU8sS0FBSyw4QkFBOEIsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRSxPQUFPLEtBQUssd0JBQXdCLE1BQU0sbUJBQW1CLENBQUM7QUFDOUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sWUFBWTthQUNoQixPQUFFLEdBQUcsd0NBQXdDLENBQUM7SUFFckQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQWlCO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDcEMsWUFBWSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsRUFBRSxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQXVCO1FBQ3pDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDdkMsU0FBUyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQywyQkFBMkIsQ0FDaEMsU0FBdUIsRUFDdkIsT0FBcUI7UUFFckIsT0FBTyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDMUIsSUFBSSxPQUFPLENB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O0lBQ0QsSUFBSSxFQUFFLENBQUMsS0FBK0I7UUFDcEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWU7UUFDYixNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDOUMsT0FBTyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNOLE9BQU87WUFDTCxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUMzQyxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsY0FBYztJQUNaLGFBQWE7SUFDYixPQUErQjtRQUUvQixPQUFPO1lBQ0wsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3hELENBQUM7SUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogdHNsaW50OmRpc2FibGUgKi9cbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBAdHMtbm9jaGVja1xuLy9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRVxuLy8gRE8gTk9UIE1PRElGWSBJVCEgWU9VUiBDSEFOR0VTIFdJTEwgQkUgTE9TVFxuaW1wb3J0IHtcbiAgR3JwY01lc3NhZ2UsXG4gIFJlY3Vyc2l2ZVBhcnRpYWwsXG4gIFRvUHJvdG9idWZKU09OT3B0aW9uc1xufSBmcm9tICdAbmd4LWdycGMvY29tbW9uJztcbmltcG9ydCB7IEJpbmFyeVJlYWRlciwgQmluYXJ5V3JpdGVyLCBCeXRlU291cmNlIH0gZnJvbSAnZ29vZ2xlLXByb3RvYnVmJztcbmltcG9ydCAqIGFzIGdvb2dsZVByb3RvYnVmMDAwIGZyb20gJ0BuZ3gtZ3JwYy93ZWxsLWtub3duLXR5cGVzJztcbmltcG9ydCAqIGFzIGFybW9uaWtBcGlHcnBjVjEwMDEgZnJvbSAnLi9maWx0ZXJzLWNvbW1vbi5wYic7XG5pbXBvcnQgKiBhcyBhcm1vbmlrQXBpR3JwY1YxVGFza19zdGF0dXMwMDIgZnJvbSAnLi90YXNrLXN0YXR1cy5wYic7XG5pbXBvcnQgKiBhcyBhcm1vbmlrQXBpR3JwY1YxVGFza3MwMDMgZnJvbSAnLi90YXNrcy1maWVsZHMucGInO1xuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLnRhc2tzLkZpbHRlclN0YXR1c1xuICovXG5leHBvcnQgY2xhc3MgRmlsdGVyU3RhdHVzIGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnYXJtb25pay5hcGkuZ3JwYy52MS50YXNrcy5GaWx0ZXJTdGF0dXMnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBGaWx0ZXJTdGF0dXMoKTtcbiAgICBGaWx0ZXJTdGF0dXMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGluc3RhbmNlLCBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKSk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBGaWx0ZXJTdGF0dXMpIHtcbiAgICBfaW5zdGFuY2UudmFsdWUgPSBfaW5zdGFuY2UudmFsdWUgfHwgMDtcbiAgICBfaW5zdGFuY2Uub3BlcmF0b3IgPSBfaW5zdGFuY2Uub3BlcmF0b3IgfHwgMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IEZpbHRlclN0YXR1cyxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBfaW5zdGFuY2UudmFsdWUgPSBfcmVhZGVyLnJlYWRFbnVtKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBfaW5zdGFuY2Uub3BlcmF0b3IgPSBfcmVhZGVyLnJlYWRFbnVtKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBGaWx0ZXJTdGF0dXMucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoXG4gICAgX2luc3RhbmNlOiBGaWx0ZXJTdGF0dXMsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UudmFsdWUpIHtcbiAgICAgIF93cml0ZXIud3JpdGVFbnVtKDEsIF9pbnN0YW5jZS52YWx1ZSk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2Uub3BlcmF0b3IpIHtcbiAgICAgIF93cml0ZXIud3JpdGVFbnVtKDIsIF9pbnN0YW5jZS5vcGVyYXRvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdmFsdWU6IGFybW9uaWtBcGlHcnBjVjFUYXNrX3N0YXR1czAwMi5UYXNrU3RhdHVzO1xuICBwcml2YXRlIF9vcGVyYXRvcjogYXJtb25pa0FwaUdycGNWMTAwMS5GaWx0ZXJTdGF0dXNPcGVyYXRvcjtcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIEZpbHRlclN0YXR1cyB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxGaWx0ZXJTdGF0dXMuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMudmFsdWUgPSBfdmFsdWUudmFsdWU7XG4gICAgdGhpcy5vcGVyYXRvciA9IF92YWx1ZS5vcGVyYXRvcjtcbiAgICBGaWx0ZXJTdGF0dXMucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCB2YWx1ZSgpOiBhcm1vbmlrQXBpR3JwY1YxVGFza19zdGF0dXMwMDIuVGFza1N0YXR1cyB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG4gIHNldCB2YWx1ZSh2YWx1ZTogYXJtb25pa0FwaUdycGNWMVRhc2tfc3RhdHVzMDAyLlRhc2tTdGF0dXMpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICB9XG4gIGdldCBvcGVyYXRvcigpOiBhcm1vbmlrQXBpR3JwY1YxMDAxLkZpbHRlclN0YXR1c09wZXJhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5fb3BlcmF0b3I7XG4gIH1cbiAgc2V0IG9wZXJhdG9yKHZhbHVlOiBhcm1vbmlrQXBpR3JwY1YxMDAxLkZpbHRlclN0YXR1c09wZXJhdG9yKSB7XG4gICAgdGhpcy5fb3BlcmF0b3IgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBGaWx0ZXJTdGF0dXMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogRmlsdGVyU3RhdHVzLkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBvcGVyYXRvcjogdGhpcy5vcGVyYXRvclxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IEZpbHRlclN0YXR1cy5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOlxuICAgICAgICBhcm1vbmlrQXBpR3JwY1YxVGFza19zdGF0dXMwMDIuVGFza1N0YXR1c1tcbiAgICAgICAgICB0aGlzLnZhbHVlID09PSBudWxsIHx8IHRoaXMudmFsdWUgPT09IHVuZGVmaW5lZCA/IDAgOiB0aGlzLnZhbHVlXG4gICAgICAgIF0sXG4gICAgICBvcGVyYXRvcjpcbiAgICAgICAgYXJtb25pa0FwaUdycGNWMTAwMS5GaWx0ZXJTdGF0dXNPcGVyYXRvcltcbiAgICAgICAgICB0aGlzLm9wZXJhdG9yID09PSBudWxsIHx8IHRoaXMub3BlcmF0b3IgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHRoaXMub3BlcmF0b3JcbiAgICAgICAgXVxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgRmlsdGVyU3RhdHVzIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBGaWx0ZXJTdGF0dXNcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIHZhbHVlOiBhcm1vbmlrQXBpR3JwY1YxVGFza19zdGF0dXMwMDIuVGFza1N0YXR1cztcbiAgICBvcGVyYXRvcjogYXJtb25pa0FwaUdycGNWMTAwMS5GaWx0ZXJTdGF0dXNPcGVyYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBGaWx0ZXJTdGF0dXNcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgb3BlcmF0b3I6IHN0cmluZztcbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGFybW9uaWsuYXBpLmdycGMudjEudGFza3MuRmlsdGVyRmllbGRcbiAqL1xuZXhwb3J0IGNsYXNzIEZpbHRlckZpZWxkIGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnYXJtb25pay5hcGkuZ3JwYy52MS50YXNrcy5GaWx0ZXJGaWVsZCc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZpbHRlckZpZWxkKCk7XG4gICAgRmlsdGVyRmllbGQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGluc3RhbmNlLCBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKSk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBGaWx0ZXJGaWVsZCkge1xuICAgIF9pbnN0YW5jZS5maWVsZCA9IF9pbnN0YW5jZS5maWVsZCB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgX2luc3RhbmNlOiBGaWx0ZXJGaWVsZCxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBfaW5zdGFuY2UuZmllbGQgPSBuZXcgYXJtb25pa0FwaUdycGNWMVRhc2tzMDAzLlRhc2tGaWVsZCgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2UuZmllbGQsXG4gICAgICAgICAgICBhcm1vbmlrQXBpR3JwY1YxVGFza3MwMDMuVGFza0ZpZWxkLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBfaW5zdGFuY2UuZmlsdGVyU3RyaW5nID0gbmV3IGFybW9uaWtBcGlHcnBjVjEwMDEuRmlsdGVyU3RyaW5nKCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5maWx0ZXJTdHJpbmcsXG4gICAgICAgICAgICBhcm1vbmlrQXBpR3JwY1YxMDAxLkZpbHRlclN0cmluZy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgX2luc3RhbmNlLmZpbHRlck51bWJlciA9IG5ldyBhcm1vbmlrQXBpR3JwY1YxMDAxLkZpbHRlck51bWJlcigpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2UuZmlsdGVyTnVtYmVyLFxuICAgICAgICAgICAgYXJtb25pa0FwaUdycGNWMTAwMS5GaWx0ZXJOdW1iZXIuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIF9pbnN0YW5jZS5maWx0ZXJCb29sZWFuID0gbmV3IGFybW9uaWtBcGlHcnBjVjEwMDEuRmlsdGVyQm9vbGVhbigpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2UuZmlsdGVyQm9vbGVhbixcbiAgICAgICAgICAgIGFybW9uaWtBcGlHcnBjVjEwMDEuRmlsdGVyQm9vbGVhbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgX2luc3RhbmNlLmZpbHRlclN0YXR1cyA9IG5ldyBGaWx0ZXJTdGF0dXMoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgX2luc3RhbmNlLmZpbHRlclN0YXR1cyxcbiAgICAgICAgICAgIEZpbHRlclN0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgX2luc3RhbmNlLmZpbHRlckRhdGUgPSBuZXcgYXJtb25pa0FwaUdycGNWMTAwMS5GaWx0ZXJEYXRlKCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5maWx0ZXJEYXRlLFxuICAgICAgICAgICAgYXJtb25pa0FwaUdycGNWMTAwMS5GaWx0ZXJEYXRlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBfaW5zdGFuY2UuZmlsdGVyQXJyYXkgPSBuZXcgYXJtb25pa0FwaUdycGNWMTAwMS5GaWx0ZXJBcnJheSgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2UuZmlsdGVyQXJyYXksXG4gICAgICAgICAgICBhcm1vbmlrQXBpR3JwY1YxMDAxLkZpbHRlckFycmF5LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBGaWx0ZXJGaWVsZC5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IEZpbHRlckZpZWxkLFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLmZpZWxkKSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMSxcbiAgICAgICAgX2luc3RhbmNlLmZpZWxkIGFzIGFueSxcbiAgICAgICAgYXJtb25pa0FwaUdycGNWMVRhc2tzMDAzLlRhc2tGaWVsZC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5maWx0ZXJTdHJpbmcpIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICAyLFxuICAgICAgICBfaW5zdGFuY2UuZmlsdGVyU3RyaW5nIGFzIGFueSxcbiAgICAgICAgYXJtb25pa0FwaUdycGNWMTAwMS5GaWx0ZXJTdHJpbmcuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UuZmlsdGVyTnVtYmVyKSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMyxcbiAgICAgICAgX2luc3RhbmNlLmZpbHRlck51bWJlciBhcyBhbnksXG4gICAgICAgIGFybW9uaWtBcGlHcnBjVjEwMDEuRmlsdGVyTnVtYmVyLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmZpbHRlckJvb2xlYW4pIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICA0LFxuICAgICAgICBfaW5zdGFuY2UuZmlsdGVyQm9vbGVhbiBhcyBhbnksXG4gICAgICAgIGFybW9uaWtBcGlHcnBjVjEwMDEuRmlsdGVyQm9vbGVhbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5maWx0ZXJTdGF0dXMpIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICA1LFxuICAgICAgICBfaW5zdGFuY2UuZmlsdGVyU3RhdHVzIGFzIGFueSxcbiAgICAgICAgRmlsdGVyU3RhdHVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmZpbHRlckRhdGUpIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICA2LFxuICAgICAgICBfaW5zdGFuY2UuZmlsdGVyRGF0ZSBhcyBhbnksXG4gICAgICAgIGFybW9uaWtBcGlHcnBjVjEwMDEuRmlsdGVyRGF0ZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5maWx0ZXJBcnJheSkge1xuICAgICAgX3dyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAgIDcsXG4gICAgICAgIF9pbnN0YW5jZS5maWx0ZXJBcnJheSBhcyBhbnksXG4gICAgICAgIGFybW9uaWtBcGlHcnBjVjEwMDEuRmlsdGVyQXJyYXkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZmllbGQ/OiBhcm1vbmlrQXBpR3JwY1YxVGFza3MwMDMuVGFza0ZpZWxkO1xuICBwcml2YXRlIF9maWx0ZXJTdHJpbmc/OiBhcm1vbmlrQXBpR3JwY1YxMDAxLkZpbHRlclN0cmluZztcbiAgcHJpdmF0ZSBfZmlsdGVyTnVtYmVyPzogYXJtb25pa0FwaUdycGNWMTAwMS5GaWx0ZXJOdW1iZXI7XG4gIHByaXZhdGUgX2ZpbHRlckJvb2xlYW4/OiBhcm1vbmlrQXBpR3JwY1YxMDAxLkZpbHRlckJvb2xlYW47XG4gIHByaXZhdGUgX2ZpbHRlclN0YXR1cz86IEZpbHRlclN0YXR1cztcbiAgcHJpdmF0ZSBfZmlsdGVyRGF0ZT86IGFybW9uaWtBcGlHcnBjVjEwMDEuRmlsdGVyRGF0ZTtcbiAgcHJpdmF0ZSBfZmlsdGVyQXJyYXk/OiBhcm1vbmlrQXBpR3JwY1YxMDAxLkZpbHRlckFycmF5O1xuXG4gIHByaXZhdGUgX3ZhbHVlQ29uZGl0aW9uOiBGaWx0ZXJGaWVsZC5WYWx1ZUNvbmRpdGlvbkNhc2UgPVxuICAgIEZpbHRlckZpZWxkLlZhbHVlQ29uZGl0aW9uQ2FzZS5ub25lO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgRmlsdGVyRmllbGQgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8RmlsdGVyRmllbGQuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMuZmllbGQgPSBfdmFsdWUuZmllbGRcbiAgICAgID8gbmV3IGFybW9uaWtBcGlHcnBjVjFUYXNrczAwMy5UYXNrRmllbGQoX3ZhbHVlLmZpZWxkKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5maWx0ZXJTdHJpbmcgPSBfdmFsdWUuZmlsdGVyU3RyaW5nXG4gICAgICA/IG5ldyBhcm1vbmlrQXBpR3JwY1YxMDAxLkZpbHRlclN0cmluZyhfdmFsdWUuZmlsdGVyU3RyaW5nKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5maWx0ZXJOdW1iZXIgPSBfdmFsdWUuZmlsdGVyTnVtYmVyXG4gICAgICA/IG5ldyBhcm1vbmlrQXBpR3JwY1YxMDAxLkZpbHRlck51bWJlcihfdmFsdWUuZmlsdGVyTnVtYmVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5maWx0ZXJCb29sZWFuID0gX3ZhbHVlLmZpbHRlckJvb2xlYW5cbiAgICAgID8gbmV3IGFybW9uaWtBcGlHcnBjVjEwMDEuRmlsdGVyQm9vbGVhbihfdmFsdWUuZmlsdGVyQm9vbGVhbilcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuZmlsdGVyU3RhdHVzID0gX3ZhbHVlLmZpbHRlclN0YXR1c1xuICAgICAgPyBuZXcgRmlsdGVyU3RhdHVzKF92YWx1ZS5maWx0ZXJTdGF0dXMpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLmZpbHRlckRhdGUgPSBfdmFsdWUuZmlsdGVyRGF0ZVxuICAgICAgPyBuZXcgYXJtb25pa0FwaUdycGNWMTAwMS5GaWx0ZXJEYXRlKF92YWx1ZS5maWx0ZXJEYXRlKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5maWx0ZXJBcnJheSA9IF92YWx1ZS5maWx0ZXJBcnJheVxuICAgICAgPyBuZXcgYXJtb25pa0FwaUdycGNWMTAwMS5GaWx0ZXJBcnJheShfdmFsdWUuZmlsdGVyQXJyYXkpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBGaWx0ZXJGaWVsZC5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IGZpZWxkKCk6IGFybW9uaWtBcGlHcnBjVjFUYXNrczAwMy5UYXNrRmllbGQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9maWVsZDtcbiAgfVxuICBzZXQgZmllbGQodmFsdWU6IGFybW9uaWtBcGlHcnBjVjFUYXNrczAwMy5UYXNrRmllbGQgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9maWVsZCA9IHZhbHVlO1xuICB9XG4gIGdldCBmaWx0ZXJTdHJpbmcoKTogYXJtb25pa0FwaUdycGNWMTAwMS5GaWx0ZXJTdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJTdHJpbmc7XG4gIH1cbiAgc2V0IGZpbHRlclN0cmluZyh2YWx1ZTogYXJtb25pa0FwaUdycGNWMTAwMS5GaWx0ZXJTdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fZmlsdGVyTnVtYmVyID0gdGhpcy5fZmlsdGVyQm9vbGVhbiA9IHRoaXMuX2ZpbHRlclN0YXR1cyA9IHRoaXMuX2ZpbHRlckRhdGUgPSB0aGlzLl9maWx0ZXJBcnJheSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3ZhbHVlQ29uZGl0aW9uID0gRmlsdGVyRmllbGQuVmFsdWVDb25kaXRpb25DYXNlLmZpbHRlclN0cmluZztcbiAgICB9XG4gICAgdGhpcy5fZmlsdGVyU3RyaW5nID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGZpbHRlck51bWJlcigpOiBhcm1vbmlrQXBpR3JwY1YxMDAxLkZpbHRlck51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlck51bWJlcjtcbiAgfVxuICBzZXQgZmlsdGVyTnVtYmVyKHZhbHVlOiBhcm1vbmlrQXBpR3JwY1YxMDAxLkZpbHRlck51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl9maWx0ZXJTdHJpbmcgPSB0aGlzLl9maWx0ZXJCb29sZWFuID0gdGhpcy5fZmlsdGVyU3RhdHVzID0gdGhpcy5fZmlsdGVyRGF0ZSA9IHRoaXMuX2ZpbHRlckFycmF5ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fdmFsdWVDb25kaXRpb24gPSBGaWx0ZXJGaWVsZC5WYWx1ZUNvbmRpdGlvbkNhc2UuZmlsdGVyTnVtYmVyO1xuICAgIH1cbiAgICB0aGlzLl9maWx0ZXJOdW1iZXIgPSB2YWx1ZTtcbiAgfVxuICBnZXQgZmlsdGVyQm9vbGVhbigpOiBhcm1vbmlrQXBpR3JwY1YxMDAxLkZpbHRlckJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJCb29sZWFuO1xuICB9XG4gIHNldCBmaWx0ZXJCb29sZWFuKHZhbHVlOiBhcm1vbmlrQXBpR3JwY1YxMDAxLkZpbHRlckJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fZmlsdGVyU3RyaW5nID0gdGhpcy5fZmlsdGVyTnVtYmVyID0gdGhpcy5fZmlsdGVyU3RhdHVzID0gdGhpcy5fZmlsdGVyRGF0ZSA9IHRoaXMuX2ZpbHRlckFycmF5ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fdmFsdWVDb25kaXRpb24gPSBGaWx0ZXJGaWVsZC5WYWx1ZUNvbmRpdGlvbkNhc2UuZmlsdGVyQm9vbGVhbjtcbiAgICB9XG4gICAgdGhpcy5fZmlsdGVyQm9vbGVhbiA9IHZhbHVlO1xuICB9XG4gIGdldCBmaWx0ZXJTdGF0dXMoKTogRmlsdGVyU3RhdHVzIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyU3RhdHVzO1xuICB9XG4gIHNldCBmaWx0ZXJTdGF0dXModmFsdWU6IEZpbHRlclN0YXR1cyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl9maWx0ZXJTdHJpbmcgPSB0aGlzLl9maWx0ZXJOdW1iZXIgPSB0aGlzLl9maWx0ZXJCb29sZWFuID0gdGhpcy5fZmlsdGVyRGF0ZSA9IHRoaXMuX2ZpbHRlckFycmF5ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fdmFsdWVDb25kaXRpb24gPSBGaWx0ZXJGaWVsZC5WYWx1ZUNvbmRpdGlvbkNhc2UuZmlsdGVyU3RhdHVzO1xuICAgIH1cbiAgICB0aGlzLl9maWx0ZXJTdGF0dXMgPSB2YWx1ZTtcbiAgfVxuICBnZXQgZmlsdGVyRGF0ZSgpOiBhcm1vbmlrQXBpR3JwY1YxMDAxLkZpbHRlckRhdGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJEYXRlO1xuICB9XG4gIHNldCBmaWx0ZXJEYXRlKHZhbHVlOiBhcm1vbmlrQXBpR3JwY1YxMDAxLkZpbHRlckRhdGUgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fZmlsdGVyU3RyaW5nID0gdGhpcy5fZmlsdGVyTnVtYmVyID0gdGhpcy5fZmlsdGVyQm9vbGVhbiA9IHRoaXMuX2ZpbHRlclN0YXR1cyA9IHRoaXMuX2ZpbHRlckFycmF5ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fdmFsdWVDb25kaXRpb24gPSBGaWx0ZXJGaWVsZC5WYWx1ZUNvbmRpdGlvbkNhc2UuZmlsdGVyRGF0ZTtcbiAgICB9XG4gICAgdGhpcy5fZmlsdGVyRGF0ZSA9IHZhbHVlO1xuICB9XG4gIGdldCBmaWx0ZXJBcnJheSgpOiBhcm1vbmlrQXBpR3JwY1YxMDAxLkZpbHRlckFycmF5IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyQXJyYXk7XG4gIH1cbiAgc2V0IGZpbHRlckFycmF5KHZhbHVlOiBhcm1vbmlrQXBpR3JwY1YxMDAxLkZpbHRlckFycmF5IHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX2ZpbHRlclN0cmluZyA9IHRoaXMuX2ZpbHRlck51bWJlciA9IHRoaXMuX2ZpbHRlckJvb2xlYW4gPSB0aGlzLl9maWx0ZXJTdGF0dXMgPSB0aGlzLl9maWx0ZXJEYXRlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fdmFsdWVDb25kaXRpb24gPSBGaWx0ZXJGaWVsZC5WYWx1ZUNvbmRpdGlvbkNhc2UuZmlsdGVyQXJyYXk7XG4gICAgfVxuICAgIHRoaXMuX2ZpbHRlckFycmF5ID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHZhbHVlQ29uZGl0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZUNvbmRpdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBGaWx0ZXJGaWVsZC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBGaWx0ZXJGaWVsZC5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpZWxkOiB0aGlzLmZpZWxkID8gdGhpcy5maWVsZC50b09iamVjdCgpIDogdW5kZWZpbmVkLFxuICAgICAgZmlsdGVyU3RyaW5nOiB0aGlzLmZpbHRlclN0cmluZ1xuICAgICAgICA/IHRoaXMuZmlsdGVyU3RyaW5nLnRvT2JqZWN0KClcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBmaWx0ZXJOdW1iZXI6IHRoaXMuZmlsdGVyTnVtYmVyXG4gICAgICAgID8gdGhpcy5maWx0ZXJOdW1iZXIudG9PYmplY3QoKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGZpbHRlckJvb2xlYW46IHRoaXMuZmlsdGVyQm9vbGVhblxuICAgICAgICA/IHRoaXMuZmlsdGVyQm9vbGVhbi50b09iamVjdCgpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgZmlsdGVyU3RhdHVzOiB0aGlzLmZpbHRlclN0YXR1c1xuICAgICAgICA/IHRoaXMuZmlsdGVyU3RhdHVzLnRvT2JqZWN0KClcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBmaWx0ZXJEYXRlOiB0aGlzLmZpbHRlckRhdGUgPyB0aGlzLmZpbHRlckRhdGUudG9PYmplY3QoKSA6IHVuZGVmaW5lZCxcbiAgICAgIGZpbHRlckFycmF5OiB0aGlzLmZpbHRlckFycmF5ID8gdGhpcy5maWx0ZXJBcnJheS50b09iamVjdCgpIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogRmlsdGVyRmllbGQuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBmaWVsZDogdGhpcy5maWVsZCA/IHRoaXMuZmllbGQudG9Qcm90b2J1ZkpTT04ob3B0aW9ucykgOiBudWxsLFxuICAgICAgZmlsdGVyU3RyaW5nOiB0aGlzLmZpbHRlclN0cmluZ1xuICAgICAgICA/IHRoaXMuZmlsdGVyU3RyaW5nLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGZpbHRlck51bWJlcjogdGhpcy5maWx0ZXJOdW1iZXJcbiAgICAgICAgPyB0aGlzLmZpbHRlck51bWJlci50b1Byb3RvYnVmSlNPTihvcHRpb25zKVxuICAgICAgICA6IG51bGwsXG4gICAgICBmaWx0ZXJCb29sZWFuOiB0aGlzLmZpbHRlckJvb2xlYW5cbiAgICAgICAgPyB0aGlzLmZpbHRlckJvb2xlYW4udG9Qcm90b2J1ZkpTT04ob3B0aW9ucylcbiAgICAgICAgOiBudWxsLFxuICAgICAgZmlsdGVyU3RhdHVzOiB0aGlzLmZpbHRlclN0YXR1c1xuICAgICAgICA/IHRoaXMuZmlsdGVyU3RhdHVzLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGZpbHRlckRhdGU6IHRoaXMuZmlsdGVyRGF0ZVxuICAgICAgICA/IHRoaXMuZmlsdGVyRGF0ZS50b1Byb3RvYnVmSlNPTihvcHRpb25zKVxuICAgICAgICA6IG51bGwsXG4gICAgICBmaWx0ZXJBcnJheTogdGhpcy5maWx0ZXJBcnJheVxuICAgICAgICA/IHRoaXMuZmlsdGVyQXJyYXkudG9Qcm90b2J1ZkpTT04ob3B0aW9ucylcbiAgICAgICAgOiBudWxsXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBGaWx0ZXJGaWVsZCB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgRmlsdGVyRmllbGRcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIGZpZWxkPzogYXJtb25pa0FwaUdycGNWMVRhc2tzMDAzLlRhc2tGaWVsZC5Bc09iamVjdDtcbiAgICBmaWx0ZXJTdHJpbmc/OiBhcm1vbmlrQXBpR3JwY1YxMDAxLkZpbHRlclN0cmluZy5Bc09iamVjdDtcbiAgICBmaWx0ZXJOdW1iZXI/OiBhcm1vbmlrQXBpR3JwY1YxMDAxLkZpbHRlck51bWJlci5Bc09iamVjdDtcbiAgICBmaWx0ZXJCb29sZWFuPzogYXJtb25pa0FwaUdycGNWMTAwMS5GaWx0ZXJCb29sZWFuLkFzT2JqZWN0O1xuICAgIGZpbHRlclN0YXR1cz86IEZpbHRlclN0YXR1cy5Bc09iamVjdDtcbiAgICBmaWx0ZXJEYXRlPzogYXJtb25pa0FwaUdycGNWMTAwMS5GaWx0ZXJEYXRlLkFzT2JqZWN0O1xuICAgIGZpbHRlckFycmF5PzogYXJtb25pa0FwaUdycGNWMTAwMS5GaWx0ZXJBcnJheS5Bc09iamVjdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBGaWx0ZXJGaWVsZFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgZmllbGQ6IGFybW9uaWtBcGlHcnBjVjFUYXNrczAwMy5UYXNrRmllbGQuQXNQcm90b2J1ZkpTT04gfCBudWxsO1xuICAgIGZpbHRlclN0cmluZzogYXJtb25pa0FwaUdycGNWMTAwMS5GaWx0ZXJTdHJpbmcuQXNQcm90b2J1ZkpTT04gfCBudWxsO1xuICAgIGZpbHRlck51bWJlcjogYXJtb25pa0FwaUdycGNWMTAwMS5GaWx0ZXJOdW1iZXIuQXNQcm90b2J1ZkpTT04gfCBudWxsO1xuICAgIGZpbHRlckJvb2xlYW46IGFybW9uaWtBcGlHcnBjVjEwMDEuRmlsdGVyQm9vbGVhbi5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgZmlsdGVyU3RhdHVzOiBGaWx0ZXJTdGF0dXMuQXNQcm90b2J1ZkpTT04gfCBudWxsO1xuICAgIGZpbHRlckRhdGU6IGFybW9uaWtBcGlHcnBjVjEwMDEuRmlsdGVyRGF0ZS5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgZmlsdGVyQXJyYXk6IGFybW9uaWtBcGlHcnBjVjEwMDEuRmlsdGVyQXJyYXkuQXNQcm90b2J1ZkpTT04gfCBudWxsO1xuICB9XG4gIGV4cG9ydCBlbnVtIFZhbHVlQ29uZGl0aW9uQ2FzZSB7XG4gICAgbm9uZSA9IDAsXG4gICAgZmlsdGVyU3RyaW5nID0gMSxcbiAgICBmaWx0ZXJOdW1iZXIgPSAyLFxuICAgIGZpbHRlckJvb2xlYW4gPSAzLFxuICAgIGZpbHRlclN0YXR1cyA9IDQsXG4gICAgZmlsdGVyRGF0ZSA9IDUsXG4gICAgZmlsdGVyQXJyYXkgPSA2XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLnRhc2tzLkZpbHRlcnNBbmRcbiAqL1xuZXhwb3J0IGNsYXNzIEZpbHRlcnNBbmQgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdhcm1vbmlrLmFwaS5ncnBjLnYxLnRhc2tzLkZpbHRlcnNBbmQnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBGaWx0ZXJzQW5kKCk7XG4gICAgRmlsdGVyc0FuZC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaW5zdGFuY2UsIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IEZpbHRlcnNBbmQpIHtcbiAgICBfaW5zdGFuY2UuYW5kID0gX2luc3RhbmNlLmFuZCB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IEZpbHRlcnNBbmQsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgY29uc3QgbWVzc2FnZUluaXRpYWxpemVyMSA9IG5ldyBGaWx0ZXJGaWVsZCgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBtZXNzYWdlSW5pdGlhbGl6ZXIxLFxuICAgICAgICAgICAgRmlsdGVyRmllbGQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICAoX2luc3RhbmNlLmFuZCA9IF9pbnN0YW5jZS5hbmQgfHwgW10pLnB1c2gobWVzc2FnZUluaXRpYWxpemVyMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBGaWx0ZXJzQW5kLnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKF9pbnN0YW5jZTogRmlsdGVyc0FuZCwgX3dyaXRlcjogQmluYXJ5V3JpdGVyKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5hbmQgJiYgX2luc3RhbmNlLmFuZC5sZW5ndGgpIHtcbiAgICAgIF93cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAgIDEsXG4gICAgICAgIF9pbnN0YW5jZS5hbmQgYXMgYW55LFxuICAgICAgICBGaWx0ZXJGaWVsZC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9hbmQ/OiBGaWx0ZXJGaWVsZFtdO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgRmlsdGVyc0FuZCB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxGaWx0ZXJzQW5kLkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLmFuZCA9IChfdmFsdWUuYW5kIHx8IFtdKS5tYXAobSA9PiBuZXcgRmlsdGVyRmllbGQobSkpO1xuICAgIEZpbHRlcnNBbmQucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBhbmQoKTogRmlsdGVyRmllbGRbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2FuZDtcbiAgfVxuICBzZXQgYW5kKHZhbHVlOiBGaWx0ZXJGaWVsZFtdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fYW5kID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgRmlsdGVyc0FuZC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBGaWx0ZXJzQW5kLkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgYW5kOiAodGhpcy5hbmQgfHwgW10pLm1hcChtID0+IG0udG9PYmplY3QoKSlcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBGaWx0ZXJzQW5kLkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgYW5kOiAodGhpcy5hbmQgfHwgW10pLm1hcChtID0+IG0udG9Qcm90b2J1ZkpTT04ob3B0aW9ucykpXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBGaWx0ZXJzQW5kIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBGaWx0ZXJzQW5kXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICBhbmQ/OiBGaWx0ZXJGaWVsZC5Bc09iamVjdFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIEZpbHRlcnNBbmRcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIGFuZDogRmlsdGVyRmllbGQuQXNQcm90b2J1ZkpTT05bXSB8IG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLnRhc2tzLkZpbHRlcnNcbiAqL1xuZXhwb3J0IGNsYXNzIEZpbHRlcnMgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdhcm1vbmlrLmFwaS5ncnBjLnYxLnRhc2tzLkZpbHRlcnMnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBGaWx0ZXJzKCk7XG4gICAgRmlsdGVycy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaW5zdGFuY2UsIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IEZpbHRlcnMpIHtcbiAgICBfaW5zdGFuY2Uub3IgPSBfaW5zdGFuY2Uub3IgfHwgW107XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgX2luc3RhbmNlOiBGaWx0ZXJzLFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VJbml0aWFsaXplcjEgPSBuZXcgRmlsdGVyc0FuZCgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBtZXNzYWdlSW5pdGlhbGl6ZXIxLFxuICAgICAgICAgICAgRmlsdGVyc0FuZC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIChfaW5zdGFuY2Uub3IgPSBfaW5zdGFuY2Uub3IgfHwgW10pLnB1c2gobWVzc2FnZUluaXRpYWxpemVyMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBGaWx0ZXJzLnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKF9pbnN0YW5jZTogRmlsdGVycywgX3dyaXRlcjogQmluYXJ5V3JpdGVyKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5vciAmJiBfaW5zdGFuY2Uub3IubGVuZ3RoKSB7XG4gICAgICBfd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgICAxLFxuICAgICAgICBfaW5zdGFuY2Uub3IgYXMgYW55LFxuICAgICAgICBGaWx0ZXJzQW5kLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX29yPzogRmlsdGVyc0FuZFtdO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgRmlsdGVycyB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxGaWx0ZXJzLkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLm9yID0gKF92YWx1ZS5vciB8fCBbXSkubWFwKG0gPT4gbmV3IEZpbHRlcnNBbmQobSkpO1xuICAgIEZpbHRlcnMucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBvcigpOiBGaWx0ZXJzQW5kW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9vcjtcbiAgfVxuICBzZXQgb3IodmFsdWU6IEZpbHRlcnNBbmRbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX29yID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgRmlsdGVycy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBGaWx0ZXJzLkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgb3I6ICh0aGlzLm9yIHx8IFtdKS5tYXAobSA9PiBtLnRvT2JqZWN0KCkpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogRmlsdGVycy5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9yOiAodGhpcy5vciB8fCBbXSkubWFwKG0gPT4gbS50b1Byb3RvYnVmSlNPTihvcHRpb25zKSlcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIEZpbHRlcnMge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIEZpbHRlcnNcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIG9yPzogRmlsdGVyc0FuZC5Bc09iamVjdFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIEZpbHRlcnNcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIG9yOiBGaWx0ZXJzQW5kLkFzUHJvdG9idWZKU09OW10gfCBudWxsO1xuICB9XG59XG4iXX0=