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