@aneoconsultingfr/armonik.api.angular 3.29.0-edge.13.eb211e2 → 3.29.0-edge.68.23f0ea8b
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/fesm2022/aneoconsultingfr-armonik.api.angular.mjs +29 -29
- package/fesm2022/aneoconsultingfr-armonik.api.angular.mjs.map +1 -1
- package/index.d.ts +11699 -3
- package/package.json +6 -8
- package/esm2022/aneoconsultingfr-armonik.api.angular.mjs +0 -5
- package/esm2022/lib/generated/applications-common.pb.mjs +0 -586
- package/esm2022/lib/generated/applications-fields.pb.mjs +0 -231
- package/esm2022/lib/generated/applications-filters.pb.mjs +0 -349
- package/esm2022/lib/generated/applications-service.pb.mjs +0 -2
- package/esm2022/lib/generated/applications-service.pbconf.mjs +0 -13
- package/esm2022/lib/generated/applications-service.pbsc.mjs +0 -74
- package/esm2022/lib/generated/auth-common.pb.mjs +0 -318
- package/esm2022/lib/generated/auth-service.pb.mjs +0 -2
- package/esm2022/lib/generated/auth-service.pbconf.mjs +0 -13
- package/esm2022/lib/generated/auth-service.pbsc.mjs +0 -74
- package/esm2022/lib/generated/events-common.pb.mjs +0 -1139
- package/esm2022/lib/generated/events-service.pb.mjs +0 -2
- package/esm2022/lib/generated/events-service.pbconf.mjs +0 -13
- package/esm2022/lib/generated/events-service.pbsc.mjs +0 -74
- package/esm2022/lib/generated/filters-common.pb.mjs +0 -774
- package/esm2022/lib/generated/health-checks-common.pb.mjs +0 -331
- package/esm2022/lib/generated/health-checks-service.pb.mjs +0 -2
- package/esm2022/lib/generated/health-checks-service.pbconf.mjs +0 -13
- package/esm2022/lib/generated/health-checks-service.pbsc.mjs +0 -74
- package/esm2022/lib/generated/objects.pb.mjs +0 -2721
- package/esm2022/lib/generated/partitions-common.pb.mjs +0 -978
- package/esm2022/lib/generated/partitions-fields.pb.mjs +0 -233
- package/esm2022/lib/generated/partitions-filters.pb.mjs +0 -431
- package/esm2022/lib/generated/partitions-service.pb.mjs +0 -2
- package/esm2022/lib/generated/partitions-service.pbconf.mjs +0 -13
- package/esm2022/lib/generated/partitions-service.pbsc.mjs +0 -104
- package/esm2022/lib/generated/result-status.pb.mjs +0 -16
- package/esm2022/lib/generated/results-common.pb.mjs +0 -3476
- package/esm2022/lib/generated/results-fields.pb.mjs +0 -238
- package/esm2022/lib/generated/results-filters.pb.mjs +0 -573
- package/esm2022/lib/generated/results-service.pb.mjs +0 -2
- package/esm2022/lib/generated/results-service.pbconf.mjs +0 -13
- package/esm2022/lib/generated/results-service.pbsc.mjs +0 -375
- package/esm2022/lib/generated/session-status.pb.mjs +0 -17
- package/esm2022/lib/generated/sessions-common.pb.mjs +0 -2638
- package/esm2022/lib/generated/sessions-fields.pb.mjs +0 -509
- package/esm2022/lib/generated/sessions-filters.pb.mjs +0 -629
- package/esm2022/lib/generated/sessions-service.pb.mjs +0 -2
- package/esm2022/lib/generated/sessions-service.pbconf.mjs +0 -13
- package/esm2022/lib/generated/sessions-service.pbsc.mjs +0 -344
- package/esm2022/lib/generated/sort-direction.pb.mjs +0 -13
- package/esm2022/lib/generated/task-status.pb.mjs +0 -24
- package/esm2022/lib/generated/tasks-common.pb.mjs +0 -3383
- package/esm2022/lib/generated/tasks-fields.pb.mjs +0 -518
- package/esm2022/lib/generated/tasks-filters.pb.mjs +0 -629
- package/esm2022/lib/generated/tasks-service.pb.mjs +0 -2
- package/esm2022/lib/generated/tasks-service.pbconf.mjs +0 -13
- package/esm2022/lib/generated/tasks-service.pbsc.mjs +0 -254
- package/esm2022/lib/generated/versions-common.pb.mjs +0 -200
- package/esm2022/lib/generated/versions-service.pb.mjs +0 -2
- package/esm2022/lib/generated/versions-service.pbconf.mjs +0 -13
- package/esm2022/lib/generated/versions-service.pbsc.mjs +0 -74
- package/esm2022/lib/index.mjs +0 -35
- package/esm2022/public-api.mjs +0 -5
- package/lib/generated/applications-common.pb.d.ts +0 -331
- package/lib/generated/applications-fields.pb.d.ts +0 -153
- package/lib/generated/applications-filters.pb.d.ts +0 -222
- package/lib/generated/applications-service.pb.d.ts +0 -1
- package/lib/generated/applications-service.pbconf.d.ts +0 -6
- package/lib/generated/applications-service.pbsc.d.ts +0 -38
- package/lib/generated/auth-common.pb.d.ts +0 -214
- package/lib/generated/auth-service.pb.d.ts +0 -1
- package/lib/generated/auth-service.pbconf.d.ts +0 -6
- package/lib/generated/auth-service.pbsc.d.ts +0 -38
- package/lib/generated/events-common.pb.d.ts +0 -612
- package/lib/generated/events-service.pb.d.ts +0 -1
- package/lib/generated/events-service.pbconf.d.ts +0 -6
- package/lib/generated/events-service.pbsc.d.ts +0 -38
- package/lib/generated/filters-common.pb.d.ts +0 -491
- package/lib/generated/health-checks-common.pb.d.ts +0 -220
- package/lib/generated/health-checks-service.pb.d.ts +0 -1
- package/lib/generated/health-checks-service.pbconf.d.ts +0 -6
- package/lib/generated/health-checks-service.pbsc.d.ts +0 -38
- package/lib/generated/objects.pb.d.ts +0 -1678
- package/lib/generated/partitions-common.pb.d.ts +0 -566
- package/lib/generated/partitions-fields.pb.d.ts +0 -155
- package/lib/generated/partitions-filters.pb.d.ts +0 -240
- package/lib/generated/partitions-service.pb.d.ts +0 -1
- package/lib/generated/partitions-service.pbconf.d.ts +0 -6
- package/lib/generated/partitions-service.pbsc.d.ts +0 -54
- package/lib/generated/result-status.pb.d.ts +0 -8
- package/lib/generated/results-common.pb.d.ts +0 -2121
- package/lib/generated/results-fields.pb.d.ts +0 -160
- package/lib/generated/results-filters.pb.d.ts +0 -321
- package/lib/generated/results-service.pb.d.ts +0 -1
- package/lib/generated/results-service.pbconf.d.ts +0 -6
- package/lib/generated/results-service.pbsc.d.ts +0 -199
- package/lib/generated/session-status.pb.d.ts +0 -9
- package/lib/generated/sessions-common.pb.d.ts +0 -1637
- package/lib/generated/sessions-fields.pb.d.ts +0 -323
- package/lib/generated/sessions-filters.pb.d.ts +0 -333
- package/lib/generated/sessions-service.pb.d.ts +0 -1
- package/lib/generated/sessions-service.pbconf.d.ts +0 -6
- package/lib/generated/sessions-service.pbsc.d.ts +0 -182
- package/lib/generated/sort-direction.pb.d.ts +0 -5
- package/lib/generated/task-status.pb.d.ts +0 -16
- package/lib/generated/tasks-common.pb.d.ts +0 -1754
- package/lib/generated/tasks-fields.pb.d.ts +0 -332
- package/lib/generated/tasks-filters.pb.d.ts +0 -333
- package/lib/generated/tasks-service.pb.d.ts +0 -1
- package/lib/generated/tasks-service.pbconf.d.ts +0 -6
- package/lib/generated/tasks-service.pbsc.d.ts +0 -134
- package/lib/generated/versions-common.pb.d.ts +0 -140
- package/lib/generated/versions-service.pb.d.ts +0 -1
- package/lib/generated/versions-service.pbconf.d.ts +0 -6
- package/lib/generated/versions-service.pbsc.d.ts +0 -38
- package/lib/index.d.ts +0 -34
- package/public-api.d.ts +0 -1
|
@@ -1,2721 +0,0 @@
|
|
|
1
|
-
/* tslint:disable */
|
|
2
|
-
/* eslint-disable */
|
|
3
|
-
// @ts-nocheck
|
|
4
|
-
//
|
|
5
|
-
// THIS IS A GENERATED FILE
|
|
6
|
-
// DO NOT MODIFY IT! YOUR CHANGES WILL BE LOST
|
|
7
|
-
import { uint8ArrayToBase64 } from '@ngx-grpc/common';
|
|
8
|
-
import { BinaryReader, BinaryWriter } from 'google-protobuf';
|
|
9
|
-
import * as googleProtobuf000 from '@ngx-grpc/well-known-types';
|
|
10
|
-
import * as armonikApiGrpcV1Task_status001 from './task-status.pb';
|
|
11
|
-
/**
|
|
12
|
-
* Message implementation for armonik.api.grpc.v1.Empty
|
|
13
|
-
*/
|
|
14
|
-
export class Empty {
|
|
15
|
-
static { this.id = 'armonik.api.grpc.v1.Empty'; }
|
|
16
|
-
/**
|
|
17
|
-
* Deserialize binary data to message
|
|
18
|
-
* @param instance message instance
|
|
19
|
-
*/
|
|
20
|
-
static deserializeBinary(bytes) {
|
|
21
|
-
const instance = new Empty();
|
|
22
|
-
Empty.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
23
|
-
return instance;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Check all the properties and set default protobuf values if necessary
|
|
27
|
-
* @param _instance message instance
|
|
28
|
-
*/
|
|
29
|
-
static refineValues(_instance) { }
|
|
30
|
-
/**
|
|
31
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
32
|
-
* @param _instance message instance
|
|
33
|
-
* @param _reader binary reader instance
|
|
34
|
-
*/
|
|
35
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
36
|
-
while (_reader.nextField()) {
|
|
37
|
-
if (_reader.isEndGroup())
|
|
38
|
-
break;
|
|
39
|
-
switch (_reader.getFieldNumber()) {
|
|
40
|
-
default:
|
|
41
|
-
_reader.skipField();
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
Empty.refineValues(_instance);
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Serializes a message to binary format using provided binary reader
|
|
48
|
-
* @param _instance message instance
|
|
49
|
-
* @param _writer binary writer instance
|
|
50
|
-
*/
|
|
51
|
-
static serializeBinaryToWriter(_instance, _writer) { }
|
|
52
|
-
/**
|
|
53
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
54
|
-
* @param _value initial values object or instance of Empty to deeply clone from
|
|
55
|
-
*/
|
|
56
|
-
constructor(_value) {
|
|
57
|
-
_value = _value || {};
|
|
58
|
-
Empty.refineValues(this);
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Serialize message to binary data
|
|
62
|
-
* @param instance message instance
|
|
63
|
-
*/
|
|
64
|
-
serializeBinary() {
|
|
65
|
-
const writer = new BinaryWriter();
|
|
66
|
-
Empty.serializeBinaryToWriter(this, writer);
|
|
67
|
-
return writer.getResultBuffer();
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
71
|
-
*/
|
|
72
|
-
toObject() {
|
|
73
|
-
return {};
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
77
|
-
*/
|
|
78
|
-
toJSON() {
|
|
79
|
-
return this.toObject();
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
83
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
84
|
-
* 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
|
|
85
|
-
*/
|
|
86
|
-
toProtobufJSON(
|
|
87
|
-
// @ts-ignore
|
|
88
|
-
options) {
|
|
89
|
-
return {};
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Message implementation for armonik.api.grpc.v1.TaskOptions
|
|
94
|
-
*/
|
|
95
|
-
export class TaskOptions {
|
|
96
|
-
static { this.id = 'armonik.api.grpc.v1.TaskOptions'; }
|
|
97
|
-
/**
|
|
98
|
-
* Deserialize binary data to message
|
|
99
|
-
* @param instance message instance
|
|
100
|
-
*/
|
|
101
|
-
static deserializeBinary(bytes) {
|
|
102
|
-
const instance = new TaskOptions();
|
|
103
|
-
TaskOptions.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
104
|
-
return instance;
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Check all the properties and set default protobuf values if necessary
|
|
108
|
-
* @param _instance message instance
|
|
109
|
-
*/
|
|
110
|
-
static refineValues(_instance) {
|
|
111
|
-
_instance.options = _instance.options || {};
|
|
112
|
-
_instance.maxDuration = _instance.maxDuration || undefined;
|
|
113
|
-
_instance.maxRetries = _instance.maxRetries || 0;
|
|
114
|
-
_instance.priority = _instance.priority || 0;
|
|
115
|
-
_instance.partitionId = _instance.partitionId || '';
|
|
116
|
-
_instance.applicationName = _instance.applicationName || '';
|
|
117
|
-
_instance.applicationVersion = _instance.applicationVersion || '';
|
|
118
|
-
_instance.applicationNamespace = _instance.applicationNamespace || '';
|
|
119
|
-
_instance.applicationService = _instance.applicationService || '';
|
|
120
|
-
_instance.engineType = _instance.engineType || '';
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
124
|
-
* @param _instance message instance
|
|
125
|
-
* @param _reader binary reader instance
|
|
126
|
-
*/
|
|
127
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
128
|
-
while (_reader.nextField()) {
|
|
129
|
-
if (_reader.isEndGroup())
|
|
130
|
-
break;
|
|
131
|
-
switch (_reader.getFieldNumber()) {
|
|
132
|
-
case 1:
|
|
133
|
-
const msg_1 = {};
|
|
134
|
-
_reader.readMessage(msg_1, TaskOptions.OptionsEntry.deserializeBinaryFromReader);
|
|
135
|
-
_instance.options = _instance.options || {};
|
|
136
|
-
_instance.options[msg_1.key] = msg_1.value;
|
|
137
|
-
break;
|
|
138
|
-
case 2:
|
|
139
|
-
_instance.maxDuration = new googleProtobuf000.Duration();
|
|
140
|
-
_reader.readMessage(_instance.maxDuration, googleProtobuf000.Duration.deserializeBinaryFromReader);
|
|
141
|
-
break;
|
|
142
|
-
case 3:
|
|
143
|
-
_instance.maxRetries = _reader.readInt32();
|
|
144
|
-
break;
|
|
145
|
-
case 4:
|
|
146
|
-
_instance.priority = _reader.readInt32();
|
|
147
|
-
break;
|
|
148
|
-
case 5:
|
|
149
|
-
_instance.partitionId = _reader.readString();
|
|
150
|
-
break;
|
|
151
|
-
case 6:
|
|
152
|
-
_instance.applicationName = _reader.readString();
|
|
153
|
-
break;
|
|
154
|
-
case 7:
|
|
155
|
-
_instance.applicationVersion = _reader.readString();
|
|
156
|
-
break;
|
|
157
|
-
case 8:
|
|
158
|
-
_instance.applicationNamespace = _reader.readString();
|
|
159
|
-
break;
|
|
160
|
-
case 9:
|
|
161
|
-
_instance.applicationService = _reader.readString();
|
|
162
|
-
break;
|
|
163
|
-
case 10:
|
|
164
|
-
_instance.engineType = _reader.readString();
|
|
165
|
-
break;
|
|
166
|
-
default:
|
|
167
|
-
_reader.skipField();
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
TaskOptions.refineValues(_instance);
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Serializes a message to binary format using provided binary reader
|
|
174
|
-
* @param _instance message instance
|
|
175
|
-
* @param _writer binary writer instance
|
|
176
|
-
*/
|
|
177
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
178
|
-
if (!!_instance.options) {
|
|
179
|
-
const keys_1 = Object.keys(_instance.options);
|
|
180
|
-
if (keys_1.length) {
|
|
181
|
-
const repeated_1 = keys_1
|
|
182
|
-
.map(key => ({ key: key, value: _instance.options[key] }))
|
|
183
|
-
.reduce((r, v) => [...r, v], []);
|
|
184
|
-
_writer.writeRepeatedMessage(1, repeated_1, TaskOptions.OptionsEntry.serializeBinaryToWriter);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
if (_instance.maxDuration) {
|
|
188
|
-
_writer.writeMessage(2, _instance.maxDuration, googleProtobuf000.Duration.serializeBinaryToWriter);
|
|
189
|
-
}
|
|
190
|
-
if (_instance.maxRetries) {
|
|
191
|
-
_writer.writeInt32(3, _instance.maxRetries);
|
|
192
|
-
}
|
|
193
|
-
if (_instance.priority) {
|
|
194
|
-
_writer.writeInt32(4, _instance.priority);
|
|
195
|
-
}
|
|
196
|
-
if (_instance.partitionId) {
|
|
197
|
-
_writer.writeString(5, _instance.partitionId);
|
|
198
|
-
}
|
|
199
|
-
if (_instance.applicationName) {
|
|
200
|
-
_writer.writeString(6, _instance.applicationName);
|
|
201
|
-
}
|
|
202
|
-
if (_instance.applicationVersion) {
|
|
203
|
-
_writer.writeString(7, _instance.applicationVersion);
|
|
204
|
-
}
|
|
205
|
-
if (_instance.applicationNamespace) {
|
|
206
|
-
_writer.writeString(8, _instance.applicationNamespace);
|
|
207
|
-
}
|
|
208
|
-
if (_instance.applicationService) {
|
|
209
|
-
_writer.writeString(9, _instance.applicationService);
|
|
210
|
-
}
|
|
211
|
-
if (_instance.engineType) {
|
|
212
|
-
_writer.writeString(10, _instance.engineType);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
217
|
-
* @param _value initial values object or instance of TaskOptions to deeply clone from
|
|
218
|
-
*/
|
|
219
|
-
constructor(_value) {
|
|
220
|
-
_value = _value || {};
|
|
221
|
-
(this.options = _value.options
|
|
222
|
-
? Object.keys(_value.options).reduce((r, k) => ({ ...r, [k]: _value.options[k] }), {})
|
|
223
|
-
: {}),
|
|
224
|
-
(this.maxDuration = _value.maxDuration
|
|
225
|
-
? new googleProtobuf000.Duration(_value.maxDuration)
|
|
226
|
-
: undefined);
|
|
227
|
-
this.maxRetries = _value.maxRetries;
|
|
228
|
-
this.priority = _value.priority;
|
|
229
|
-
this.partitionId = _value.partitionId;
|
|
230
|
-
this.applicationName = _value.applicationName;
|
|
231
|
-
this.applicationVersion = _value.applicationVersion;
|
|
232
|
-
this.applicationNamespace = _value.applicationNamespace;
|
|
233
|
-
this.applicationService = _value.applicationService;
|
|
234
|
-
this.engineType = _value.engineType;
|
|
235
|
-
TaskOptions.refineValues(this);
|
|
236
|
-
}
|
|
237
|
-
get options() {
|
|
238
|
-
return this._options;
|
|
239
|
-
}
|
|
240
|
-
set options(value) {
|
|
241
|
-
this._options = value;
|
|
242
|
-
}
|
|
243
|
-
get maxDuration() {
|
|
244
|
-
return this._maxDuration;
|
|
245
|
-
}
|
|
246
|
-
set maxDuration(value) {
|
|
247
|
-
this._maxDuration = value;
|
|
248
|
-
}
|
|
249
|
-
get maxRetries() {
|
|
250
|
-
return this._maxRetries;
|
|
251
|
-
}
|
|
252
|
-
set maxRetries(value) {
|
|
253
|
-
this._maxRetries = value;
|
|
254
|
-
}
|
|
255
|
-
get priority() {
|
|
256
|
-
return this._priority;
|
|
257
|
-
}
|
|
258
|
-
set priority(value) {
|
|
259
|
-
this._priority = value;
|
|
260
|
-
}
|
|
261
|
-
get partitionId() {
|
|
262
|
-
return this._partitionId;
|
|
263
|
-
}
|
|
264
|
-
set partitionId(value) {
|
|
265
|
-
this._partitionId = value;
|
|
266
|
-
}
|
|
267
|
-
get applicationName() {
|
|
268
|
-
return this._applicationName;
|
|
269
|
-
}
|
|
270
|
-
set applicationName(value) {
|
|
271
|
-
this._applicationName = value;
|
|
272
|
-
}
|
|
273
|
-
get applicationVersion() {
|
|
274
|
-
return this._applicationVersion;
|
|
275
|
-
}
|
|
276
|
-
set applicationVersion(value) {
|
|
277
|
-
this._applicationVersion = value;
|
|
278
|
-
}
|
|
279
|
-
get applicationNamespace() {
|
|
280
|
-
return this._applicationNamespace;
|
|
281
|
-
}
|
|
282
|
-
set applicationNamespace(value) {
|
|
283
|
-
this._applicationNamespace = value;
|
|
284
|
-
}
|
|
285
|
-
get applicationService() {
|
|
286
|
-
return this._applicationService;
|
|
287
|
-
}
|
|
288
|
-
set applicationService(value) {
|
|
289
|
-
this._applicationService = value;
|
|
290
|
-
}
|
|
291
|
-
get engineType() {
|
|
292
|
-
return this._engineType;
|
|
293
|
-
}
|
|
294
|
-
set engineType(value) {
|
|
295
|
-
this._engineType = value;
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Serialize message to binary data
|
|
299
|
-
* @param instance message instance
|
|
300
|
-
*/
|
|
301
|
-
serializeBinary() {
|
|
302
|
-
const writer = new BinaryWriter();
|
|
303
|
-
TaskOptions.serializeBinaryToWriter(this, writer);
|
|
304
|
-
return writer.getResultBuffer();
|
|
305
|
-
}
|
|
306
|
-
/**
|
|
307
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
308
|
-
*/
|
|
309
|
-
toObject() {
|
|
310
|
-
return {
|
|
311
|
-
options: this.options
|
|
312
|
-
? Object.keys(this.options).reduce((r, k) => ({ ...r, [k]: this.options[k] }), {})
|
|
313
|
-
: {},
|
|
314
|
-
maxDuration: this.maxDuration ? this.maxDuration.toObject() : undefined,
|
|
315
|
-
maxRetries: this.maxRetries,
|
|
316
|
-
priority: this.priority,
|
|
317
|
-
partitionId: this.partitionId,
|
|
318
|
-
applicationName: this.applicationName,
|
|
319
|
-
applicationVersion: this.applicationVersion,
|
|
320
|
-
applicationNamespace: this.applicationNamespace,
|
|
321
|
-
applicationService: this.applicationService,
|
|
322
|
-
engineType: this.engineType
|
|
323
|
-
};
|
|
324
|
-
}
|
|
325
|
-
/**
|
|
326
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
327
|
-
*/
|
|
328
|
-
toJSON() {
|
|
329
|
-
return this.toObject();
|
|
330
|
-
}
|
|
331
|
-
/**
|
|
332
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
333
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
334
|
-
* 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
|
|
335
|
-
*/
|
|
336
|
-
toProtobufJSON(
|
|
337
|
-
// @ts-ignore
|
|
338
|
-
options) {
|
|
339
|
-
return {
|
|
340
|
-
options: this.options
|
|
341
|
-
? Object.keys(this.options).reduce((r, k) => ({ ...r, [k]: this.options[k] }), {})
|
|
342
|
-
: {},
|
|
343
|
-
maxDuration: this.maxDuration
|
|
344
|
-
? this.maxDuration.toProtobufJSON(options)
|
|
345
|
-
: null,
|
|
346
|
-
maxRetries: this.maxRetries,
|
|
347
|
-
priority: this.priority,
|
|
348
|
-
partitionId: this.partitionId,
|
|
349
|
-
applicationName: this.applicationName,
|
|
350
|
-
applicationVersion: this.applicationVersion,
|
|
351
|
-
applicationNamespace: this.applicationNamespace,
|
|
352
|
-
applicationService: this.applicationService,
|
|
353
|
-
engineType: this.engineType
|
|
354
|
-
};
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
(function (TaskOptions) {
|
|
358
|
-
/**
|
|
359
|
-
* Message implementation for armonik.api.grpc.v1.TaskOptions.OptionsEntry
|
|
360
|
-
*/
|
|
361
|
-
class OptionsEntry {
|
|
362
|
-
static { this.id = 'armonik.api.grpc.v1.TaskOptions.OptionsEntry'; }
|
|
363
|
-
/**
|
|
364
|
-
* Deserialize binary data to message
|
|
365
|
-
* @param instance message instance
|
|
366
|
-
*/
|
|
367
|
-
static deserializeBinary(bytes) {
|
|
368
|
-
const instance = new OptionsEntry();
|
|
369
|
-
OptionsEntry.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
370
|
-
return instance;
|
|
371
|
-
}
|
|
372
|
-
/**
|
|
373
|
-
* Check all the properties and set default protobuf values if necessary
|
|
374
|
-
* @param _instance message instance
|
|
375
|
-
*/
|
|
376
|
-
static refineValues(_instance) {
|
|
377
|
-
_instance.key = _instance.key || '';
|
|
378
|
-
_instance.value = _instance.value || '';
|
|
379
|
-
}
|
|
380
|
-
/**
|
|
381
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
382
|
-
* @param _instance message instance
|
|
383
|
-
* @param _reader binary reader instance
|
|
384
|
-
*/
|
|
385
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
386
|
-
while (_reader.nextField()) {
|
|
387
|
-
if (_reader.isEndGroup())
|
|
388
|
-
break;
|
|
389
|
-
switch (_reader.getFieldNumber()) {
|
|
390
|
-
case 1:
|
|
391
|
-
_instance.key = _reader.readString();
|
|
392
|
-
break;
|
|
393
|
-
case 2:
|
|
394
|
-
_instance.value = _reader.readString();
|
|
395
|
-
break;
|
|
396
|
-
default:
|
|
397
|
-
_reader.skipField();
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
OptionsEntry.refineValues(_instance);
|
|
401
|
-
}
|
|
402
|
-
/**
|
|
403
|
-
* Serializes a message to binary format using provided binary reader
|
|
404
|
-
* @param _instance message instance
|
|
405
|
-
* @param _writer binary writer instance
|
|
406
|
-
*/
|
|
407
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
408
|
-
if (_instance.key) {
|
|
409
|
-
_writer.writeString(1, _instance.key);
|
|
410
|
-
}
|
|
411
|
-
if (_instance.value) {
|
|
412
|
-
_writer.writeString(2, _instance.value);
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
/**
|
|
416
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
417
|
-
* @param _value initial values object or instance of OptionsEntry to deeply clone from
|
|
418
|
-
*/
|
|
419
|
-
constructor(_value) {
|
|
420
|
-
_value = _value || {};
|
|
421
|
-
this.key = _value.key;
|
|
422
|
-
this.value = _value.value;
|
|
423
|
-
OptionsEntry.refineValues(this);
|
|
424
|
-
}
|
|
425
|
-
get key() {
|
|
426
|
-
return this._key;
|
|
427
|
-
}
|
|
428
|
-
set key(value) {
|
|
429
|
-
this._key = value;
|
|
430
|
-
}
|
|
431
|
-
get value() {
|
|
432
|
-
return this._value;
|
|
433
|
-
}
|
|
434
|
-
set value(value) {
|
|
435
|
-
this._value = value;
|
|
436
|
-
}
|
|
437
|
-
/**
|
|
438
|
-
* Serialize message to binary data
|
|
439
|
-
* @param instance message instance
|
|
440
|
-
*/
|
|
441
|
-
serializeBinary() {
|
|
442
|
-
const writer = new BinaryWriter();
|
|
443
|
-
OptionsEntry.serializeBinaryToWriter(this, writer);
|
|
444
|
-
return writer.getResultBuffer();
|
|
445
|
-
}
|
|
446
|
-
/**
|
|
447
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
448
|
-
*/
|
|
449
|
-
toObject() {
|
|
450
|
-
return {
|
|
451
|
-
key: this.key,
|
|
452
|
-
value: this.value
|
|
453
|
-
};
|
|
454
|
-
}
|
|
455
|
-
/**
|
|
456
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
457
|
-
*/
|
|
458
|
-
toJSON() {
|
|
459
|
-
return this.toObject();
|
|
460
|
-
}
|
|
461
|
-
/**
|
|
462
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
463
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
464
|
-
* 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
|
|
465
|
-
*/
|
|
466
|
-
toProtobufJSON(
|
|
467
|
-
// @ts-ignore
|
|
468
|
-
options) {
|
|
469
|
-
return {
|
|
470
|
-
key: this.key,
|
|
471
|
-
value: this.value
|
|
472
|
-
};
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
TaskOptions.OptionsEntry = OptionsEntry;
|
|
476
|
-
})(TaskOptions || (TaskOptions = {}));
|
|
477
|
-
/**
|
|
478
|
-
* Message implementation for armonik.api.grpc.v1.Session
|
|
479
|
-
*/
|
|
480
|
-
export class Session {
|
|
481
|
-
static { this.id = 'armonik.api.grpc.v1.Session'; }
|
|
482
|
-
/**
|
|
483
|
-
* Deserialize binary data to message
|
|
484
|
-
* @param instance message instance
|
|
485
|
-
*/
|
|
486
|
-
static deserializeBinary(bytes) {
|
|
487
|
-
const instance = new Session();
|
|
488
|
-
Session.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
489
|
-
return instance;
|
|
490
|
-
}
|
|
491
|
-
/**
|
|
492
|
-
* Check all the properties and set default protobuf values if necessary
|
|
493
|
-
* @param _instance message instance
|
|
494
|
-
*/
|
|
495
|
-
static refineValues(_instance) {
|
|
496
|
-
_instance.id = _instance.id || '';
|
|
497
|
-
}
|
|
498
|
-
/**
|
|
499
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
500
|
-
* @param _instance message instance
|
|
501
|
-
* @param _reader binary reader instance
|
|
502
|
-
*/
|
|
503
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
504
|
-
while (_reader.nextField()) {
|
|
505
|
-
if (_reader.isEndGroup())
|
|
506
|
-
break;
|
|
507
|
-
switch (_reader.getFieldNumber()) {
|
|
508
|
-
case 1:
|
|
509
|
-
_instance.id = _reader.readString();
|
|
510
|
-
break;
|
|
511
|
-
default:
|
|
512
|
-
_reader.skipField();
|
|
513
|
-
}
|
|
514
|
-
}
|
|
515
|
-
Session.refineValues(_instance);
|
|
516
|
-
}
|
|
517
|
-
/**
|
|
518
|
-
* Serializes a message to binary format using provided binary reader
|
|
519
|
-
* @param _instance message instance
|
|
520
|
-
* @param _writer binary writer instance
|
|
521
|
-
*/
|
|
522
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
523
|
-
if (_instance.id) {
|
|
524
|
-
_writer.writeString(1, _instance.id);
|
|
525
|
-
}
|
|
526
|
-
}
|
|
527
|
-
/**
|
|
528
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
529
|
-
* @param _value initial values object or instance of Session to deeply clone from
|
|
530
|
-
*/
|
|
531
|
-
constructor(_value) {
|
|
532
|
-
_value = _value || {};
|
|
533
|
-
this.id = _value.id;
|
|
534
|
-
Session.refineValues(this);
|
|
535
|
-
}
|
|
536
|
-
get id() {
|
|
537
|
-
return this._id;
|
|
538
|
-
}
|
|
539
|
-
set id(value) {
|
|
540
|
-
this._id = value;
|
|
541
|
-
}
|
|
542
|
-
/**
|
|
543
|
-
* Serialize message to binary data
|
|
544
|
-
* @param instance message instance
|
|
545
|
-
*/
|
|
546
|
-
serializeBinary() {
|
|
547
|
-
const writer = new BinaryWriter();
|
|
548
|
-
Session.serializeBinaryToWriter(this, writer);
|
|
549
|
-
return writer.getResultBuffer();
|
|
550
|
-
}
|
|
551
|
-
/**
|
|
552
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
553
|
-
*/
|
|
554
|
-
toObject() {
|
|
555
|
-
return {
|
|
556
|
-
id: this.id
|
|
557
|
-
};
|
|
558
|
-
}
|
|
559
|
-
/**
|
|
560
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
561
|
-
*/
|
|
562
|
-
toJSON() {
|
|
563
|
-
return this.toObject();
|
|
564
|
-
}
|
|
565
|
-
/**
|
|
566
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
567
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
568
|
-
* 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
|
|
569
|
-
*/
|
|
570
|
-
toProtobufJSON(
|
|
571
|
-
// @ts-ignore
|
|
572
|
-
options) {
|
|
573
|
-
return {
|
|
574
|
-
id: this.id
|
|
575
|
-
};
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
/**
|
|
579
|
-
* Message implementation for armonik.api.grpc.v1.Configuration
|
|
580
|
-
*/
|
|
581
|
-
export class Configuration {
|
|
582
|
-
static { this.id = 'armonik.api.grpc.v1.Configuration'; }
|
|
583
|
-
/**
|
|
584
|
-
* Deserialize binary data to message
|
|
585
|
-
* @param instance message instance
|
|
586
|
-
*/
|
|
587
|
-
static deserializeBinary(bytes) {
|
|
588
|
-
const instance = new Configuration();
|
|
589
|
-
Configuration.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
590
|
-
return instance;
|
|
591
|
-
}
|
|
592
|
-
/**
|
|
593
|
-
* Check all the properties and set default protobuf values if necessary
|
|
594
|
-
* @param _instance message instance
|
|
595
|
-
*/
|
|
596
|
-
static refineValues(_instance) {
|
|
597
|
-
_instance.dataChunkMaxSize = _instance.dataChunkMaxSize || 0;
|
|
598
|
-
}
|
|
599
|
-
/**
|
|
600
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
601
|
-
* @param _instance message instance
|
|
602
|
-
* @param _reader binary reader instance
|
|
603
|
-
*/
|
|
604
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
605
|
-
while (_reader.nextField()) {
|
|
606
|
-
if (_reader.isEndGroup())
|
|
607
|
-
break;
|
|
608
|
-
switch (_reader.getFieldNumber()) {
|
|
609
|
-
case 1:
|
|
610
|
-
_instance.dataChunkMaxSize = _reader.readInt32();
|
|
611
|
-
break;
|
|
612
|
-
default:
|
|
613
|
-
_reader.skipField();
|
|
614
|
-
}
|
|
615
|
-
}
|
|
616
|
-
Configuration.refineValues(_instance);
|
|
617
|
-
}
|
|
618
|
-
/**
|
|
619
|
-
* Serializes a message to binary format using provided binary reader
|
|
620
|
-
* @param _instance message instance
|
|
621
|
-
* @param _writer binary writer instance
|
|
622
|
-
*/
|
|
623
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
624
|
-
if (_instance.dataChunkMaxSize) {
|
|
625
|
-
_writer.writeInt32(1, _instance.dataChunkMaxSize);
|
|
626
|
-
}
|
|
627
|
-
}
|
|
628
|
-
/**
|
|
629
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
630
|
-
* @param _value initial values object or instance of Configuration to deeply clone from
|
|
631
|
-
*/
|
|
632
|
-
constructor(_value) {
|
|
633
|
-
_value = _value || {};
|
|
634
|
-
this.dataChunkMaxSize = _value.dataChunkMaxSize;
|
|
635
|
-
Configuration.refineValues(this);
|
|
636
|
-
}
|
|
637
|
-
get dataChunkMaxSize() {
|
|
638
|
-
return this._dataChunkMaxSize;
|
|
639
|
-
}
|
|
640
|
-
set dataChunkMaxSize(value) {
|
|
641
|
-
this._dataChunkMaxSize = value;
|
|
642
|
-
}
|
|
643
|
-
/**
|
|
644
|
-
* Serialize message to binary data
|
|
645
|
-
* @param instance message instance
|
|
646
|
-
*/
|
|
647
|
-
serializeBinary() {
|
|
648
|
-
const writer = new BinaryWriter();
|
|
649
|
-
Configuration.serializeBinaryToWriter(this, writer);
|
|
650
|
-
return writer.getResultBuffer();
|
|
651
|
-
}
|
|
652
|
-
/**
|
|
653
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
654
|
-
*/
|
|
655
|
-
toObject() {
|
|
656
|
-
return {
|
|
657
|
-
dataChunkMaxSize: this.dataChunkMaxSize
|
|
658
|
-
};
|
|
659
|
-
}
|
|
660
|
-
/**
|
|
661
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
662
|
-
*/
|
|
663
|
-
toJSON() {
|
|
664
|
-
return this.toObject();
|
|
665
|
-
}
|
|
666
|
-
/**
|
|
667
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
668
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
669
|
-
* 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
|
|
670
|
-
*/
|
|
671
|
-
toProtobufJSON(
|
|
672
|
-
// @ts-ignore
|
|
673
|
-
options) {
|
|
674
|
-
return {
|
|
675
|
-
dataChunkMaxSize: this.dataChunkMaxSize
|
|
676
|
-
};
|
|
677
|
-
}
|
|
678
|
-
}
|
|
679
|
-
/**
|
|
680
|
-
* Message implementation for armonik.api.grpc.v1.Output
|
|
681
|
-
*/
|
|
682
|
-
export class Output {
|
|
683
|
-
static { this.id = 'armonik.api.grpc.v1.Output'; }
|
|
684
|
-
/**
|
|
685
|
-
* Deserialize binary data to message
|
|
686
|
-
* @param instance message instance
|
|
687
|
-
*/
|
|
688
|
-
static deserializeBinary(bytes) {
|
|
689
|
-
const instance = new Output();
|
|
690
|
-
Output.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
691
|
-
return instance;
|
|
692
|
-
}
|
|
693
|
-
/**
|
|
694
|
-
* Check all the properties and set default protobuf values if necessary
|
|
695
|
-
* @param _instance message instance
|
|
696
|
-
*/
|
|
697
|
-
static refineValues(_instance) { }
|
|
698
|
-
/**
|
|
699
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
700
|
-
* @param _instance message instance
|
|
701
|
-
* @param _reader binary reader instance
|
|
702
|
-
*/
|
|
703
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
704
|
-
while (_reader.nextField()) {
|
|
705
|
-
if (_reader.isEndGroup())
|
|
706
|
-
break;
|
|
707
|
-
switch (_reader.getFieldNumber()) {
|
|
708
|
-
case 2:
|
|
709
|
-
_instance.ok = new Empty();
|
|
710
|
-
_reader.readMessage(_instance.ok, Empty.deserializeBinaryFromReader);
|
|
711
|
-
break;
|
|
712
|
-
case 3:
|
|
713
|
-
_instance.error = new Output.Error();
|
|
714
|
-
_reader.readMessage(_instance.error, Output.Error.deserializeBinaryFromReader);
|
|
715
|
-
break;
|
|
716
|
-
default:
|
|
717
|
-
_reader.skipField();
|
|
718
|
-
}
|
|
719
|
-
}
|
|
720
|
-
Output.refineValues(_instance);
|
|
721
|
-
}
|
|
722
|
-
/**
|
|
723
|
-
* Serializes a message to binary format using provided binary reader
|
|
724
|
-
* @param _instance message instance
|
|
725
|
-
* @param _writer binary writer instance
|
|
726
|
-
*/
|
|
727
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
728
|
-
if (_instance.ok) {
|
|
729
|
-
_writer.writeMessage(2, _instance.ok, Empty.serializeBinaryToWriter);
|
|
730
|
-
}
|
|
731
|
-
if (_instance.error) {
|
|
732
|
-
_writer.writeMessage(3, _instance.error, Output.Error.serializeBinaryToWriter);
|
|
733
|
-
}
|
|
734
|
-
}
|
|
735
|
-
/**
|
|
736
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
737
|
-
* @param _value initial values object or instance of Output to deeply clone from
|
|
738
|
-
*/
|
|
739
|
-
constructor(_value) {
|
|
740
|
-
this._type = Output.TypeCase.none;
|
|
741
|
-
_value = _value || {};
|
|
742
|
-
this.ok = _value.ok ? new Empty(_value.ok) : undefined;
|
|
743
|
-
this.error = _value.error ? new Output.Error(_value.error) : undefined;
|
|
744
|
-
Output.refineValues(this);
|
|
745
|
-
}
|
|
746
|
-
get ok() {
|
|
747
|
-
return this._ok;
|
|
748
|
-
}
|
|
749
|
-
set ok(value) {
|
|
750
|
-
if (value !== undefined && value !== null) {
|
|
751
|
-
this._error = undefined;
|
|
752
|
-
this._type = Output.TypeCase.ok;
|
|
753
|
-
}
|
|
754
|
-
this._ok = value;
|
|
755
|
-
}
|
|
756
|
-
get error() {
|
|
757
|
-
return this._error;
|
|
758
|
-
}
|
|
759
|
-
set error(value) {
|
|
760
|
-
if (value !== undefined && value !== null) {
|
|
761
|
-
this._ok = undefined;
|
|
762
|
-
this._type = Output.TypeCase.error;
|
|
763
|
-
}
|
|
764
|
-
this._error = value;
|
|
765
|
-
}
|
|
766
|
-
get type() {
|
|
767
|
-
return this._type;
|
|
768
|
-
}
|
|
769
|
-
/**
|
|
770
|
-
* Serialize message to binary data
|
|
771
|
-
* @param instance message instance
|
|
772
|
-
*/
|
|
773
|
-
serializeBinary() {
|
|
774
|
-
const writer = new BinaryWriter();
|
|
775
|
-
Output.serializeBinaryToWriter(this, writer);
|
|
776
|
-
return writer.getResultBuffer();
|
|
777
|
-
}
|
|
778
|
-
/**
|
|
779
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
780
|
-
*/
|
|
781
|
-
toObject() {
|
|
782
|
-
return {
|
|
783
|
-
ok: this.ok ? this.ok.toObject() : undefined,
|
|
784
|
-
error: this.error ? this.error.toObject() : undefined
|
|
785
|
-
};
|
|
786
|
-
}
|
|
787
|
-
/**
|
|
788
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
789
|
-
*/
|
|
790
|
-
toJSON() {
|
|
791
|
-
return this.toObject();
|
|
792
|
-
}
|
|
793
|
-
/**
|
|
794
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
795
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
796
|
-
* 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
|
|
797
|
-
*/
|
|
798
|
-
toProtobufJSON(
|
|
799
|
-
// @ts-ignore
|
|
800
|
-
options) {
|
|
801
|
-
return {
|
|
802
|
-
ok: this.ok ? this.ok.toProtobufJSON(options) : null,
|
|
803
|
-
error: this.error ? this.error.toProtobufJSON(options) : null
|
|
804
|
-
};
|
|
805
|
-
}
|
|
806
|
-
}
|
|
807
|
-
(function (Output) {
|
|
808
|
-
let TypeCase;
|
|
809
|
-
(function (TypeCase) {
|
|
810
|
-
TypeCase[TypeCase["none"] = 0] = "none";
|
|
811
|
-
TypeCase[TypeCase["ok"] = 1] = "ok";
|
|
812
|
-
TypeCase[TypeCase["error"] = 2] = "error";
|
|
813
|
-
})(TypeCase = Output.TypeCase || (Output.TypeCase = {}));
|
|
814
|
-
/**
|
|
815
|
-
* Message implementation for armonik.api.grpc.v1.Output.Error
|
|
816
|
-
*/
|
|
817
|
-
class Error {
|
|
818
|
-
static { this.id = 'armonik.api.grpc.v1.Output.Error'; }
|
|
819
|
-
/**
|
|
820
|
-
* Deserialize binary data to message
|
|
821
|
-
* @param instance message instance
|
|
822
|
-
*/
|
|
823
|
-
static deserializeBinary(bytes) {
|
|
824
|
-
const instance = new Error();
|
|
825
|
-
Error.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
826
|
-
return instance;
|
|
827
|
-
}
|
|
828
|
-
/**
|
|
829
|
-
* Check all the properties and set default protobuf values if necessary
|
|
830
|
-
* @param _instance message instance
|
|
831
|
-
*/
|
|
832
|
-
static refineValues(_instance) {
|
|
833
|
-
_instance.details = _instance.details || '';
|
|
834
|
-
}
|
|
835
|
-
/**
|
|
836
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
837
|
-
* @param _instance message instance
|
|
838
|
-
* @param _reader binary reader instance
|
|
839
|
-
*/
|
|
840
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
841
|
-
while (_reader.nextField()) {
|
|
842
|
-
if (_reader.isEndGroup())
|
|
843
|
-
break;
|
|
844
|
-
switch (_reader.getFieldNumber()) {
|
|
845
|
-
case 1:
|
|
846
|
-
_instance.details = _reader.readString();
|
|
847
|
-
break;
|
|
848
|
-
default:
|
|
849
|
-
_reader.skipField();
|
|
850
|
-
}
|
|
851
|
-
}
|
|
852
|
-
Error.refineValues(_instance);
|
|
853
|
-
}
|
|
854
|
-
/**
|
|
855
|
-
* Serializes a message to binary format using provided binary reader
|
|
856
|
-
* @param _instance message instance
|
|
857
|
-
* @param _writer binary writer instance
|
|
858
|
-
*/
|
|
859
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
860
|
-
if (_instance.details) {
|
|
861
|
-
_writer.writeString(1, _instance.details);
|
|
862
|
-
}
|
|
863
|
-
}
|
|
864
|
-
/**
|
|
865
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
866
|
-
* @param _value initial values object or instance of Error to deeply clone from
|
|
867
|
-
*/
|
|
868
|
-
constructor(_value) {
|
|
869
|
-
_value = _value || {};
|
|
870
|
-
this.details = _value.details;
|
|
871
|
-
Error.refineValues(this);
|
|
872
|
-
}
|
|
873
|
-
get details() {
|
|
874
|
-
return this._details;
|
|
875
|
-
}
|
|
876
|
-
set details(value) {
|
|
877
|
-
this._details = value;
|
|
878
|
-
}
|
|
879
|
-
/**
|
|
880
|
-
* Serialize message to binary data
|
|
881
|
-
* @param instance message instance
|
|
882
|
-
*/
|
|
883
|
-
serializeBinary() {
|
|
884
|
-
const writer = new BinaryWriter();
|
|
885
|
-
Error.serializeBinaryToWriter(this, writer);
|
|
886
|
-
return writer.getResultBuffer();
|
|
887
|
-
}
|
|
888
|
-
/**
|
|
889
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
890
|
-
*/
|
|
891
|
-
toObject() {
|
|
892
|
-
return {
|
|
893
|
-
details: this.details
|
|
894
|
-
};
|
|
895
|
-
}
|
|
896
|
-
/**
|
|
897
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
898
|
-
*/
|
|
899
|
-
toJSON() {
|
|
900
|
-
return this.toObject();
|
|
901
|
-
}
|
|
902
|
-
/**
|
|
903
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
904
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
905
|
-
* 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
|
|
906
|
-
*/
|
|
907
|
-
toProtobufJSON(
|
|
908
|
-
// @ts-ignore
|
|
909
|
-
options) {
|
|
910
|
-
return {
|
|
911
|
-
details: this.details
|
|
912
|
-
};
|
|
913
|
-
}
|
|
914
|
-
}
|
|
915
|
-
Output.Error = Error;
|
|
916
|
-
})(Output || (Output = {}));
|
|
917
|
-
/**
|
|
918
|
-
* Message implementation for armonik.api.grpc.v1.TaskRequest
|
|
919
|
-
*/
|
|
920
|
-
export class TaskRequest {
|
|
921
|
-
static { this.id = 'armonik.api.grpc.v1.TaskRequest'; }
|
|
922
|
-
/**
|
|
923
|
-
* Deserialize binary data to message
|
|
924
|
-
* @param instance message instance
|
|
925
|
-
*/
|
|
926
|
-
static deserializeBinary(bytes) {
|
|
927
|
-
const instance = new TaskRequest();
|
|
928
|
-
TaskRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
929
|
-
return instance;
|
|
930
|
-
}
|
|
931
|
-
/**
|
|
932
|
-
* Check all the properties and set default protobuf values if necessary
|
|
933
|
-
* @param _instance message instance
|
|
934
|
-
*/
|
|
935
|
-
static refineValues(_instance) {
|
|
936
|
-
_instance.expectedOutputKeys = _instance.expectedOutputKeys || [];
|
|
937
|
-
_instance.dataDependencies = _instance.dataDependencies || [];
|
|
938
|
-
_instance.payload = _instance.payload || new Uint8Array();
|
|
939
|
-
_instance.payloadName = _instance.payloadName || '';
|
|
940
|
-
}
|
|
941
|
-
/**
|
|
942
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
943
|
-
* @param _instance message instance
|
|
944
|
-
* @param _reader binary reader instance
|
|
945
|
-
*/
|
|
946
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
947
|
-
while (_reader.nextField()) {
|
|
948
|
-
if (_reader.isEndGroup())
|
|
949
|
-
break;
|
|
950
|
-
switch (_reader.getFieldNumber()) {
|
|
951
|
-
case 1:
|
|
952
|
-
(_instance.expectedOutputKeys =
|
|
953
|
-
_instance.expectedOutputKeys || []).push(_reader.readString());
|
|
954
|
-
break;
|
|
955
|
-
case 2:
|
|
956
|
-
(_instance.dataDependencies = _instance.dataDependencies || []).push(_reader.readString());
|
|
957
|
-
break;
|
|
958
|
-
case 3:
|
|
959
|
-
_instance.payload = _reader.readBytes();
|
|
960
|
-
break;
|
|
961
|
-
case 4:
|
|
962
|
-
_instance.payloadName = _reader.readString();
|
|
963
|
-
break;
|
|
964
|
-
default:
|
|
965
|
-
_reader.skipField();
|
|
966
|
-
}
|
|
967
|
-
}
|
|
968
|
-
TaskRequest.refineValues(_instance);
|
|
969
|
-
}
|
|
970
|
-
/**
|
|
971
|
-
* Serializes a message to binary format using provided binary reader
|
|
972
|
-
* @param _instance message instance
|
|
973
|
-
* @param _writer binary writer instance
|
|
974
|
-
*/
|
|
975
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
976
|
-
if (_instance.expectedOutputKeys && _instance.expectedOutputKeys.length) {
|
|
977
|
-
_writer.writeRepeatedString(1, _instance.expectedOutputKeys);
|
|
978
|
-
}
|
|
979
|
-
if (_instance.dataDependencies && _instance.dataDependencies.length) {
|
|
980
|
-
_writer.writeRepeatedString(2, _instance.dataDependencies);
|
|
981
|
-
}
|
|
982
|
-
if (_instance.payload && _instance.payload.length) {
|
|
983
|
-
_writer.writeBytes(3, _instance.payload);
|
|
984
|
-
}
|
|
985
|
-
if (_instance.payloadName) {
|
|
986
|
-
_writer.writeString(4, _instance.payloadName);
|
|
987
|
-
}
|
|
988
|
-
}
|
|
989
|
-
/**
|
|
990
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
991
|
-
* @param _value initial values object or instance of TaskRequest to deeply clone from
|
|
992
|
-
*/
|
|
993
|
-
constructor(_value) {
|
|
994
|
-
_value = _value || {};
|
|
995
|
-
this.expectedOutputKeys = (_value.expectedOutputKeys || []).slice();
|
|
996
|
-
this.dataDependencies = (_value.dataDependencies || []).slice();
|
|
997
|
-
this.payload = _value.payload;
|
|
998
|
-
this.payloadName = _value.payloadName;
|
|
999
|
-
TaskRequest.refineValues(this);
|
|
1000
|
-
}
|
|
1001
|
-
get expectedOutputKeys() {
|
|
1002
|
-
return this._expectedOutputKeys;
|
|
1003
|
-
}
|
|
1004
|
-
set expectedOutputKeys(value) {
|
|
1005
|
-
this._expectedOutputKeys = value;
|
|
1006
|
-
}
|
|
1007
|
-
get dataDependencies() {
|
|
1008
|
-
return this._dataDependencies;
|
|
1009
|
-
}
|
|
1010
|
-
set dataDependencies(value) {
|
|
1011
|
-
this._dataDependencies = value;
|
|
1012
|
-
}
|
|
1013
|
-
get payload() {
|
|
1014
|
-
return this._payload;
|
|
1015
|
-
}
|
|
1016
|
-
set payload(value) {
|
|
1017
|
-
this._payload = value;
|
|
1018
|
-
}
|
|
1019
|
-
get payloadName() {
|
|
1020
|
-
return this._payloadName;
|
|
1021
|
-
}
|
|
1022
|
-
set payloadName(value) {
|
|
1023
|
-
this._payloadName = value;
|
|
1024
|
-
}
|
|
1025
|
-
/**
|
|
1026
|
-
* Serialize message to binary data
|
|
1027
|
-
* @param instance message instance
|
|
1028
|
-
*/
|
|
1029
|
-
serializeBinary() {
|
|
1030
|
-
const writer = new BinaryWriter();
|
|
1031
|
-
TaskRequest.serializeBinaryToWriter(this, writer);
|
|
1032
|
-
return writer.getResultBuffer();
|
|
1033
|
-
}
|
|
1034
|
-
/**
|
|
1035
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1036
|
-
*/
|
|
1037
|
-
toObject() {
|
|
1038
|
-
return {
|
|
1039
|
-
expectedOutputKeys: (this.expectedOutputKeys || []).slice(),
|
|
1040
|
-
dataDependencies: (this.dataDependencies || []).slice(),
|
|
1041
|
-
payload: this.payload ? this.payload.subarray(0) : new Uint8Array(),
|
|
1042
|
-
payloadName: this.payloadName
|
|
1043
|
-
};
|
|
1044
|
-
}
|
|
1045
|
-
/**
|
|
1046
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1047
|
-
*/
|
|
1048
|
-
toJSON() {
|
|
1049
|
-
return this.toObject();
|
|
1050
|
-
}
|
|
1051
|
-
/**
|
|
1052
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1053
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1054
|
-
* 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
|
|
1055
|
-
*/
|
|
1056
|
-
toProtobufJSON(
|
|
1057
|
-
// @ts-ignore
|
|
1058
|
-
options) {
|
|
1059
|
-
return {
|
|
1060
|
-
expectedOutputKeys: (this.expectedOutputKeys || []).slice(),
|
|
1061
|
-
dataDependencies: (this.dataDependencies || []).slice(),
|
|
1062
|
-
payload: this.payload ? uint8ArrayToBase64(this.payload) : '',
|
|
1063
|
-
payloadName: this.payloadName
|
|
1064
|
-
};
|
|
1065
|
-
}
|
|
1066
|
-
}
|
|
1067
|
-
/**
|
|
1068
|
-
* Message implementation for armonik.api.grpc.v1.InitKeyedDataStream
|
|
1069
|
-
*/
|
|
1070
|
-
export class InitKeyedDataStream {
|
|
1071
|
-
static { this.id = 'armonik.api.grpc.v1.InitKeyedDataStream'; }
|
|
1072
|
-
/**
|
|
1073
|
-
* Deserialize binary data to message
|
|
1074
|
-
* @param instance message instance
|
|
1075
|
-
*/
|
|
1076
|
-
static deserializeBinary(bytes) {
|
|
1077
|
-
const instance = new InitKeyedDataStream();
|
|
1078
|
-
InitKeyedDataStream.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1079
|
-
return instance;
|
|
1080
|
-
}
|
|
1081
|
-
/**
|
|
1082
|
-
* Check all the properties and set default protobuf values if necessary
|
|
1083
|
-
* @param _instance message instance
|
|
1084
|
-
*/
|
|
1085
|
-
static refineValues(_instance) { }
|
|
1086
|
-
/**
|
|
1087
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1088
|
-
* @param _instance message instance
|
|
1089
|
-
* @param _reader binary reader instance
|
|
1090
|
-
*/
|
|
1091
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1092
|
-
while (_reader.nextField()) {
|
|
1093
|
-
if (_reader.isEndGroup())
|
|
1094
|
-
break;
|
|
1095
|
-
switch (_reader.getFieldNumber()) {
|
|
1096
|
-
case 1:
|
|
1097
|
-
_instance.key = _reader.readString();
|
|
1098
|
-
break;
|
|
1099
|
-
case 2:
|
|
1100
|
-
_instance.lastResult = _reader.readBool();
|
|
1101
|
-
break;
|
|
1102
|
-
default:
|
|
1103
|
-
_reader.skipField();
|
|
1104
|
-
}
|
|
1105
|
-
}
|
|
1106
|
-
InitKeyedDataStream.refineValues(_instance);
|
|
1107
|
-
}
|
|
1108
|
-
/**
|
|
1109
|
-
* Serializes a message to binary format using provided binary reader
|
|
1110
|
-
* @param _instance message instance
|
|
1111
|
-
* @param _writer binary writer instance
|
|
1112
|
-
*/
|
|
1113
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
1114
|
-
if (_instance.key || _instance.key === '') {
|
|
1115
|
-
_writer.writeString(1, _instance.key);
|
|
1116
|
-
}
|
|
1117
|
-
if (_instance.lastResult || _instance.lastResult === false) {
|
|
1118
|
-
_writer.writeBool(2, _instance.lastResult);
|
|
1119
|
-
}
|
|
1120
|
-
}
|
|
1121
|
-
/**
|
|
1122
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1123
|
-
* @param _value initial values object or instance of InitKeyedDataStream to deeply clone from
|
|
1124
|
-
*/
|
|
1125
|
-
constructor(_value) {
|
|
1126
|
-
this._type = InitKeyedDataStream.TypeCase.none;
|
|
1127
|
-
_value = _value || {};
|
|
1128
|
-
this.key = _value.key;
|
|
1129
|
-
this.lastResult = _value.lastResult;
|
|
1130
|
-
InitKeyedDataStream.refineValues(this);
|
|
1131
|
-
}
|
|
1132
|
-
get key() {
|
|
1133
|
-
return this._key;
|
|
1134
|
-
}
|
|
1135
|
-
set key(value) {
|
|
1136
|
-
if (value !== undefined && value !== null) {
|
|
1137
|
-
this._lastResult = undefined;
|
|
1138
|
-
this._type = InitKeyedDataStream.TypeCase.key;
|
|
1139
|
-
}
|
|
1140
|
-
this._key = value;
|
|
1141
|
-
}
|
|
1142
|
-
get lastResult() {
|
|
1143
|
-
return this._lastResult;
|
|
1144
|
-
}
|
|
1145
|
-
set lastResult(value) {
|
|
1146
|
-
if (value !== undefined && value !== null) {
|
|
1147
|
-
this._key = undefined;
|
|
1148
|
-
this._type = InitKeyedDataStream.TypeCase.lastResult;
|
|
1149
|
-
}
|
|
1150
|
-
this._lastResult = value;
|
|
1151
|
-
}
|
|
1152
|
-
get type() {
|
|
1153
|
-
return this._type;
|
|
1154
|
-
}
|
|
1155
|
-
/**
|
|
1156
|
-
* Serialize message to binary data
|
|
1157
|
-
* @param instance message instance
|
|
1158
|
-
*/
|
|
1159
|
-
serializeBinary() {
|
|
1160
|
-
const writer = new BinaryWriter();
|
|
1161
|
-
InitKeyedDataStream.serializeBinaryToWriter(this, writer);
|
|
1162
|
-
return writer.getResultBuffer();
|
|
1163
|
-
}
|
|
1164
|
-
/**
|
|
1165
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1166
|
-
*/
|
|
1167
|
-
toObject() {
|
|
1168
|
-
return {
|
|
1169
|
-
key: this.key,
|
|
1170
|
-
lastResult: this.lastResult
|
|
1171
|
-
};
|
|
1172
|
-
}
|
|
1173
|
-
/**
|
|
1174
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1175
|
-
*/
|
|
1176
|
-
toJSON() {
|
|
1177
|
-
return this.toObject();
|
|
1178
|
-
}
|
|
1179
|
-
/**
|
|
1180
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1181
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1182
|
-
* 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
|
|
1183
|
-
*/
|
|
1184
|
-
toProtobufJSON(
|
|
1185
|
-
// @ts-ignore
|
|
1186
|
-
options) {
|
|
1187
|
-
return {
|
|
1188
|
-
key: this.key === null || this.key === undefined ? null : this.key,
|
|
1189
|
-
lastResult: this.lastResult
|
|
1190
|
-
};
|
|
1191
|
-
}
|
|
1192
|
-
}
|
|
1193
|
-
(function (InitKeyedDataStream) {
|
|
1194
|
-
let TypeCase;
|
|
1195
|
-
(function (TypeCase) {
|
|
1196
|
-
TypeCase[TypeCase["none"] = 0] = "none";
|
|
1197
|
-
TypeCase[TypeCase["key"] = 1] = "key";
|
|
1198
|
-
TypeCase[TypeCase["lastResult"] = 2] = "lastResult";
|
|
1199
|
-
})(TypeCase = InitKeyedDataStream.TypeCase || (InitKeyedDataStream.TypeCase = {}));
|
|
1200
|
-
})(InitKeyedDataStream || (InitKeyedDataStream = {}));
|
|
1201
|
-
/**
|
|
1202
|
-
* Message implementation for armonik.api.grpc.v1.DataChunk
|
|
1203
|
-
*/
|
|
1204
|
-
export class DataChunk {
|
|
1205
|
-
static { this.id = 'armonik.api.grpc.v1.DataChunk'; }
|
|
1206
|
-
/**
|
|
1207
|
-
* Deserialize binary data to message
|
|
1208
|
-
* @param instance message instance
|
|
1209
|
-
*/
|
|
1210
|
-
static deserializeBinary(bytes) {
|
|
1211
|
-
const instance = new DataChunk();
|
|
1212
|
-
DataChunk.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1213
|
-
return instance;
|
|
1214
|
-
}
|
|
1215
|
-
/**
|
|
1216
|
-
* Check all the properties and set default protobuf values if necessary
|
|
1217
|
-
* @param _instance message instance
|
|
1218
|
-
*/
|
|
1219
|
-
static refineValues(_instance) { }
|
|
1220
|
-
/**
|
|
1221
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1222
|
-
* @param _instance message instance
|
|
1223
|
-
* @param _reader binary reader instance
|
|
1224
|
-
*/
|
|
1225
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1226
|
-
while (_reader.nextField()) {
|
|
1227
|
-
if (_reader.isEndGroup())
|
|
1228
|
-
break;
|
|
1229
|
-
switch (_reader.getFieldNumber()) {
|
|
1230
|
-
case 1:
|
|
1231
|
-
_instance.data = _reader.readBytes();
|
|
1232
|
-
break;
|
|
1233
|
-
case 2:
|
|
1234
|
-
_instance.dataComplete = _reader.readBool();
|
|
1235
|
-
break;
|
|
1236
|
-
default:
|
|
1237
|
-
_reader.skipField();
|
|
1238
|
-
}
|
|
1239
|
-
}
|
|
1240
|
-
DataChunk.refineValues(_instance);
|
|
1241
|
-
}
|
|
1242
|
-
/**
|
|
1243
|
-
* Serializes a message to binary format using provided binary reader
|
|
1244
|
-
* @param _instance message instance
|
|
1245
|
-
* @param _writer binary writer instance
|
|
1246
|
-
*/
|
|
1247
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
1248
|
-
if (_instance.data && _instance.data.length) {
|
|
1249
|
-
_writer.writeBytes(1, _instance.data);
|
|
1250
|
-
}
|
|
1251
|
-
if (_instance.dataComplete || _instance.dataComplete === false) {
|
|
1252
|
-
_writer.writeBool(2, _instance.dataComplete);
|
|
1253
|
-
}
|
|
1254
|
-
}
|
|
1255
|
-
/**
|
|
1256
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1257
|
-
* @param _value initial values object or instance of DataChunk to deeply clone from
|
|
1258
|
-
*/
|
|
1259
|
-
constructor(_value) {
|
|
1260
|
-
this._type = DataChunk.TypeCase.none;
|
|
1261
|
-
_value = _value || {};
|
|
1262
|
-
this.data = _value.data;
|
|
1263
|
-
this.dataComplete = _value.dataComplete;
|
|
1264
|
-
DataChunk.refineValues(this);
|
|
1265
|
-
}
|
|
1266
|
-
get data() {
|
|
1267
|
-
return this._data;
|
|
1268
|
-
}
|
|
1269
|
-
set data(value) {
|
|
1270
|
-
if (value !== undefined && value !== null) {
|
|
1271
|
-
this._dataComplete = undefined;
|
|
1272
|
-
this._type = DataChunk.TypeCase.data;
|
|
1273
|
-
}
|
|
1274
|
-
this._data = value;
|
|
1275
|
-
}
|
|
1276
|
-
get dataComplete() {
|
|
1277
|
-
return this._dataComplete;
|
|
1278
|
-
}
|
|
1279
|
-
set dataComplete(value) {
|
|
1280
|
-
if (value !== undefined && value !== null) {
|
|
1281
|
-
this._data = undefined;
|
|
1282
|
-
this._type = DataChunk.TypeCase.dataComplete;
|
|
1283
|
-
}
|
|
1284
|
-
this._dataComplete = value;
|
|
1285
|
-
}
|
|
1286
|
-
get type() {
|
|
1287
|
-
return this._type;
|
|
1288
|
-
}
|
|
1289
|
-
/**
|
|
1290
|
-
* Serialize message to binary data
|
|
1291
|
-
* @param instance message instance
|
|
1292
|
-
*/
|
|
1293
|
-
serializeBinary() {
|
|
1294
|
-
const writer = new BinaryWriter();
|
|
1295
|
-
DataChunk.serializeBinaryToWriter(this, writer);
|
|
1296
|
-
return writer.getResultBuffer();
|
|
1297
|
-
}
|
|
1298
|
-
/**
|
|
1299
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1300
|
-
*/
|
|
1301
|
-
toObject() {
|
|
1302
|
-
return {
|
|
1303
|
-
data: this.data ? this.data.subarray(0) : new Uint8Array(),
|
|
1304
|
-
dataComplete: this.dataComplete
|
|
1305
|
-
};
|
|
1306
|
-
}
|
|
1307
|
-
/**
|
|
1308
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1309
|
-
*/
|
|
1310
|
-
toJSON() {
|
|
1311
|
-
return this.toObject();
|
|
1312
|
-
}
|
|
1313
|
-
/**
|
|
1314
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1315
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1316
|
-
* 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
|
|
1317
|
-
*/
|
|
1318
|
-
toProtobufJSON(
|
|
1319
|
-
// @ts-ignore
|
|
1320
|
-
options) {
|
|
1321
|
-
return {
|
|
1322
|
-
data: this.data ? uint8ArrayToBase64(this.data) : '',
|
|
1323
|
-
dataComplete: this.dataComplete
|
|
1324
|
-
};
|
|
1325
|
-
}
|
|
1326
|
-
}
|
|
1327
|
-
(function (DataChunk) {
|
|
1328
|
-
let TypeCase;
|
|
1329
|
-
(function (TypeCase) {
|
|
1330
|
-
TypeCase[TypeCase["none"] = 0] = "none";
|
|
1331
|
-
TypeCase[TypeCase["data"] = 1] = "data";
|
|
1332
|
-
TypeCase[TypeCase["dataComplete"] = 2] = "dataComplete";
|
|
1333
|
-
})(TypeCase = DataChunk.TypeCase || (DataChunk.TypeCase = {}));
|
|
1334
|
-
})(DataChunk || (DataChunk = {}));
|
|
1335
|
-
/**
|
|
1336
|
-
* Message implementation for armonik.api.grpc.v1.TaskRequestHeader
|
|
1337
|
-
*/
|
|
1338
|
-
export class TaskRequestHeader {
|
|
1339
|
-
static { this.id = 'armonik.api.grpc.v1.TaskRequestHeader'; }
|
|
1340
|
-
/**
|
|
1341
|
-
* Deserialize binary data to message
|
|
1342
|
-
* @param instance message instance
|
|
1343
|
-
*/
|
|
1344
|
-
static deserializeBinary(bytes) {
|
|
1345
|
-
const instance = new TaskRequestHeader();
|
|
1346
|
-
TaskRequestHeader.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1347
|
-
return instance;
|
|
1348
|
-
}
|
|
1349
|
-
/**
|
|
1350
|
-
* Check all the properties and set default protobuf values if necessary
|
|
1351
|
-
* @param _instance message instance
|
|
1352
|
-
*/
|
|
1353
|
-
static refineValues(_instance) {
|
|
1354
|
-
_instance.expectedOutputKeys = _instance.expectedOutputKeys || [];
|
|
1355
|
-
_instance.dataDependencies = _instance.dataDependencies || [];
|
|
1356
|
-
}
|
|
1357
|
-
/**
|
|
1358
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1359
|
-
* @param _instance message instance
|
|
1360
|
-
* @param _reader binary reader instance
|
|
1361
|
-
*/
|
|
1362
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1363
|
-
while (_reader.nextField()) {
|
|
1364
|
-
if (_reader.isEndGroup())
|
|
1365
|
-
break;
|
|
1366
|
-
switch (_reader.getFieldNumber()) {
|
|
1367
|
-
case 1:
|
|
1368
|
-
(_instance.expectedOutputKeys =
|
|
1369
|
-
_instance.expectedOutputKeys || []).push(_reader.readString());
|
|
1370
|
-
break;
|
|
1371
|
-
case 2:
|
|
1372
|
-
(_instance.dataDependencies = _instance.dataDependencies || []).push(_reader.readString());
|
|
1373
|
-
break;
|
|
1374
|
-
default:
|
|
1375
|
-
_reader.skipField();
|
|
1376
|
-
}
|
|
1377
|
-
}
|
|
1378
|
-
TaskRequestHeader.refineValues(_instance);
|
|
1379
|
-
}
|
|
1380
|
-
/**
|
|
1381
|
-
* Serializes a message to binary format using provided binary reader
|
|
1382
|
-
* @param _instance message instance
|
|
1383
|
-
* @param _writer binary writer instance
|
|
1384
|
-
*/
|
|
1385
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
1386
|
-
if (_instance.expectedOutputKeys && _instance.expectedOutputKeys.length) {
|
|
1387
|
-
_writer.writeRepeatedString(1, _instance.expectedOutputKeys);
|
|
1388
|
-
}
|
|
1389
|
-
if (_instance.dataDependencies && _instance.dataDependencies.length) {
|
|
1390
|
-
_writer.writeRepeatedString(2, _instance.dataDependencies);
|
|
1391
|
-
}
|
|
1392
|
-
}
|
|
1393
|
-
/**
|
|
1394
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1395
|
-
* @param _value initial values object or instance of TaskRequestHeader to deeply clone from
|
|
1396
|
-
*/
|
|
1397
|
-
constructor(_value) {
|
|
1398
|
-
_value = _value || {};
|
|
1399
|
-
this.expectedOutputKeys = (_value.expectedOutputKeys || []).slice();
|
|
1400
|
-
this.dataDependencies = (_value.dataDependencies || []).slice();
|
|
1401
|
-
TaskRequestHeader.refineValues(this);
|
|
1402
|
-
}
|
|
1403
|
-
get expectedOutputKeys() {
|
|
1404
|
-
return this._expectedOutputKeys;
|
|
1405
|
-
}
|
|
1406
|
-
set expectedOutputKeys(value) {
|
|
1407
|
-
this._expectedOutputKeys = value;
|
|
1408
|
-
}
|
|
1409
|
-
get dataDependencies() {
|
|
1410
|
-
return this._dataDependencies;
|
|
1411
|
-
}
|
|
1412
|
-
set dataDependencies(value) {
|
|
1413
|
-
this._dataDependencies = value;
|
|
1414
|
-
}
|
|
1415
|
-
/**
|
|
1416
|
-
* Serialize message to binary data
|
|
1417
|
-
* @param instance message instance
|
|
1418
|
-
*/
|
|
1419
|
-
serializeBinary() {
|
|
1420
|
-
const writer = new BinaryWriter();
|
|
1421
|
-
TaskRequestHeader.serializeBinaryToWriter(this, writer);
|
|
1422
|
-
return writer.getResultBuffer();
|
|
1423
|
-
}
|
|
1424
|
-
/**
|
|
1425
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1426
|
-
*/
|
|
1427
|
-
toObject() {
|
|
1428
|
-
return {
|
|
1429
|
-
expectedOutputKeys: (this.expectedOutputKeys || []).slice(),
|
|
1430
|
-
dataDependencies: (this.dataDependencies || []).slice()
|
|
1431
|
-
};
|
|
1432
|
-
}
|
|
1433
|
-
/**
|
|
1434
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1435
|
-
*/
|
|
1436
|
-
toJSON() {
|
|
1437
|
-
return this.toObject();
|
|
1438
|
-
}
|
|
1439
|
-
/**
|
|
1440
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1441
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1442
|
-
* 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
|
|
1443
|
-
*/
|
|
1444
|
-
toProtobufJSON(
|
|
1445
|
-
// @ts-ignore
|
|
1446
|
-
options) {
|
|
1447
|
-
return {
|
|
1448
|
-
expectedOutputKeys: (this.expectedOutputKeys || []).slice(),
|
|
1449
|
-
dataDependencies: (this.dataDependencies || []).slice()
|
|
1450
|
-
};
|
|
1451
|
-
}
|
|
1452
|
-
}
|
|
1453
|
-
/**
|
|
1454
|
-
* Message implementation for armonik.api.grpc.v1.InitTaskRequest
|
|
1455
|
-
*/
|
|
1456
|
-
export class InitTaskRequest {
|
|
1457
|
-
static { this.id = 'armonik.api.grpc.v1.InitTaskRequest'; }
|
|
1458
|
-
/**
|
|
1459
|
-
* Deserialize binary data to message
|
|
1460
|
-
* @param instance message instance
|
|
1461
|
-
*/
|
|
1462
|
-
static deserializeBinary(bytes) {
|
|
1463
|
-
const instance = new InitTaskRequest();
|
|
1464
|
-
InitTaskRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1465
|
-
return instance;
|
|
1466
|
-
}
|
|
1467
|
-
/**
|
|
1468
|
-
* Check all the properties and set default protobuf values if necessary
|
|
1469
|
-
* @param _instance message instance
|
|
1470
|
-
*/
|
|
1471
|
-
static refineValues(_instance) { }
|
|
1472
|
-
/**
|
|
1473
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1474
|
-
* @param _instance message instance
|
|
1475
|
-
* @param _reader binary reader instance
|
|
1476
|
-
*/
|
|
1477
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1478
|
-
while (_reader.nextField()) {
|
|
1479
|
-
if (_reader.isEndGroup())
|
|
1480
|
-
break;
|
|
1481
|
-
switch (_reader.getFieldNumber()) {
|
|
1482
|
-
case 1:
|
|
1483
|
-
_instance.header = new TaskRequestHeader();
|
|
1484
|
-
_reader.readMessage(_instance.header, TaskRequestHeader.deserializeBinaryFromReader);
|
|
1485
|
-
break;
|
|
1486
|
-
case 2:
|
|
1487
|
-
_instance.lastTask = _reader.readBool();
|
|
1488
|
-
break;
|
|
1489
|
-
default:
|
|
1490
|
-
_reader.skipField();
|
|
1491
|
-
}
|
|
1492
|
-
}
|
|
1493
|
-
InitTaskRequest.refineValues(_instance);
|
|
1494
|
-
}
|
|
1495
|
-
/**
|
|
1496
|
-
* Serializes a message to binary format using provided binary reader
|
|
1497
|
-
* @param _instance message instance
|
|
1498
|
-
* @param _writer binary writer instance
|
|
1499
|
-
*/
|
|
1500
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
1501
|
-
if (_instance.header) {
|
|
1502
|
-
_writer.writeMessage(1, _instance.header, TaskRequestHeader.serializeBinaryToWriter);
|
|
1503
|
-
}
|
|
1504
|
-
if (_instance.lastTask || _instance.lastTask === false) {
|
|
1505
|
-
_writer.writeBool(2, _instance.lastTask);
|
|
1506
|
-
}
|
|
1507
|
-
}
|
|
1508
|
-
/**
|
|
1509
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1510
|
-
* @param _value initial values object or instance of InitTaskRequest to deeply clone from
|
|
1511
|
-
*/
|
|
1512
|
-
constructor(_value) {
|
|
1513
|
-
this._type = InitTaskRequest.TypeCase.none;
|
|
1514
|
-
_value = _value || {};
|
|
1515
|
-
this.header = _value.header
|
|
1516
|
-
? new TaskRequestHeader(_value.header)
|
|
1517
|
-
: undefined;
|
|
1518
|
-
this.lastTask = _value.lastTask;
|
|
1519
|
-
InitTaskRequest.refineValues(this);
|
|
1520
|
-
}
|
|
1521
|
-
get header() {
|
|
1522
|
-
return this._header;
|
|
1523
|
-
}
|
|
1524
|
-
set header(value) {
|
|
1525
|
-
if (value !== undefined && value !== null) {
|
|
1526
|
-
this._lastTask = undefined;
|
|
1527
|
-
this._type = InitTaskRequest.TypeCase.header;
|
|
1528
|
-
}
|
|
1529
|
-
this._header = value;
|
|
1530
|
-
}
|
|
1531
|
-
get lastTask() {
|
|
1532
|
-
return this._lastTask;
|
|
1533
|
-
}
|
|
1534
|
-
set lastTask(value) {
|
|
1535
|
-
if (value !== undefined && value !== null) {
|
|
1536
|
-
this._header = undefined;
|
|
1537
|
-
this._type = InitTaskRequest.TypeCase.lastTask;
|
|
1538
|
-
}
|
|
1539
|
-
this._lastTask = value;
|
|
1540
|
-
}
|
|
1541
|
-
get type() {
|
|
1542
|
-
return this._type;
|
|
1543
|
-
}
|
|
1544
|
-
/**
|
|
1545
|
-
* Serialize message to binary data
|
|
1546
|
-
* @param instance message instance
|
|
1547
|
-
*/
|
|
1548
|
-
serializeBinary() {
|
|
1549
|
-
const writer = new BinaryWriter();
|
|
1550
|
-
InitTaskRequest.serializeBinaryToWriter(this, writer);
|
|
1551
|
-
return writer.getResultBuffer();
|
|
1552
|
-
}
|
|
1553
|
-
/**
|
|
1554
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1555
|
-
*/
|
|
1556
|
-
toObject() {
|
|
1557
|
-
return {
|
|
1558
|
-
header: this.header ? this.header.toObject() : undefined,
|
|
1559
|
-
lastTask: this.lastTask
|
|
1560
|
-
};
|
|
1561
|
-
}
|
|
1562
|
-
/**
|
|
1563
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1564
|
-
*/
|
|
1565
|
-
toJSON() {
|
|
1566
|
-
return this.toObject();
|
|
1567
|
-
}
|
|
1568
|
-
/**
|
|
1569
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1570
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1571
|
-
* 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
|
|
1572
|
-
*/
|
|
1573
|
-
toProtobufJSON(
|
|
1574
|
-
// @ts-ignore
|
|
1575
|
-
options) {
|
|
1576
|
-
return {
|
|
1577
|
-
header: this.header ? this.header.toProtobufJSON(options) : null,
|
|
1578
|
-
lastTask: this.lastTask
|
|
1579
|
-
};
|
|
1580
|
-
}
|
|
1581
|
-
}
|
|
1582
|
-
(function (InitTaskRequest) {
|
|
1583
|
-
let TypeCase;
|
|
1584
|
-
(function (TypeCase) {
|
|
1585
|
-
TypeCase[TypeCase["none"] = 0] = "none";
|
|
1586
|
-
TypeCase[TypeCase["header"] = 1] = "header";
|
|
1587
|
-
TypeCase[TypeCase["lastTask"] = 2] = "lastTask";
|
|
1588
|
-
})(TypeCase = InitTaskRequest.TypeCase || (InitTaskRequest.TypeCase = {}));
|
|
1589
|
-
})(InitTaskRequest || (InitTaskRequest = {}));
|
|
1590
|
-
/**
|
|
1591
|
-
* Message implementation for armonik.api.grpc.v1.TaskId
|
|
1592
|
-
*/
|
|
1593
|
-
export class TaskId {
|
|
1594
|
-
static { this.id = 'armonik.api.grpc.v1.TaskId'; }
|
|
1595
|
-
/**
|
|
1596
|
-
* Deserialize binary data to message
|
|
1597
|
-
* @param instance message instance
|
|
1598
|
-
*/
|
|
1599
|
-
static deserializeBinary(bytes) {
|
|
1600
|
-
const instance = new TaskId();
|
|
1601
|
-
TaskId.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1602
|
-
return instance;
|
|
1603
|
-
}
|
|
1604
|
-
/**
|
|
1605
|
-
* Check all the properties and set default protobuf values if necessary
|
|
1606
|
-
* @param _instance message instance
|
|
1607
|
-
*/
|
|
1608
|
-
static refineValues(_instance) {
|
|
1609
|
-
_instance.session = _instance.session || '';
|
|
1610
|
-
_instance.task = _instance.task || '';
|
|
1611
|
-
}
|
|
1612
|
-
/**
|
|
1613
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1614
|
-
* @param _instance message instance
|
|
1615
|
-
* @param _reader binary reader instance
|
|
1616
|
-
*/
|
|
1617
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1618
|
-
while (_reader.nextField()) {
|
|
1619
|
-
if (_reader.isEndGroup())
|
|
1620
|
-
break;
|
|
1621
|
-
switch (_reader.getFieldNumber()) {
|
|
1622
|
-
case 1:
|
|
1623
|
-
_instance.session = _reader.readString();
|
|
1624
|
-
break;
|
|
1625
|
-
case 2:
|
|
1626
|
-
_instance.task = _reader.readString();
|
|
1627
|
-
break;
|
|
1628
|
-
default:
|
|
1629
|
-
_reader.skipField();
|
|
1630
|
-
}
|
|
1631
|
-
}
|
|
1632
|
-
TaskId.refineValues(_instance);
|
|
1633
|
-
}
|
|
1634
|
-
/**
|
|
1635
|
-
* Serializes a message to binary format using provided binary reader
|
|
1636
|
-
* @param _instance message instance
|
|
1637
|
-
* @param _writer binary writer instance
|
|
1638
|
-
*/
|
|
1639
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
1640
|
-
if (_instance.session) {
|
|
1641
|
-
_writer.writeString(1, _instance.session);
|
|
1642
|
-
}
|
|
1643
|
-
if (_instance.task) {
|
|
1644
|
-
_writer.writeString(2, _instance.task);
|
|
1645
|
-
}
|
|
1646
|
-
}
|
|
1647
|
-
/**
|
|
1648
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1649
|
-
* @param _value initial values object or instance of TaskId to deeply clone from
|
|
1650
|
-
*/
|
|
1651
|
-
constructor(_value) {
|
|
1652
|
-
_value = _value || {};
|
|
1653
|
-
this.session = _value.session;
|
|
1654
|
-
this.task = _value.task;
|
|
1655
|
-
TaskId.refineValues(this);
|
|
1656
|
-
}
|
|
1657
|
-
get session() {
|
|
1658
|
-
return this._session;
|
|
1659
|
-
}
|
|
1660
|
-
set session(value) {
|
|
1661
|
-
this._session = value;
|
|
1662
|
-
}
|
|
1663
|
-
get task() {
|
|
1664
|
-
return this._task;
|
|
1665
|
-
}
|
|
1666
|
-
set task(value) {
|
|
1667
|
-
this._task = value;
|
|
1668
|
-
}
|
|
1669
|
-
/**
|
|
1670
|
-
* Serialize message to binary data
|
|
1671
|
-
* @param instance message instance
|
|
1672
|
-
*/
|
|
1673
|
-
serializeBinary() {
|
|
1674
|
-
const writer = new BinaryWriter();
|
|
1675
|
-
TaskId.serializeBinaryToWriter(this, writer);
|
|
1676
|
-
return writer.getResultBuffer();
|
|
1677
|
-
}
|
|
1678
|
-
/**
|
|
1679
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1680
|
-
*/
|
|
1681
|
-
toObject() {
|
|
1682
|
-
return {
|
|
1683
|
-
session: this.session,
|
|
1684
|
-
task: this.task
|
|
1685
|
-
};
|
|
1686
|
-
}
|
|
1687
|
-
/**
|
|
1688
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1689
|
-
*/
|
|
1690
|
-
toJSON() {
|
|
1691
|
-
return this.toObject();
|
|
1692
|
-
}
|
|
1693
|
-
/**
|
|
1694
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1695
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1696
|
-
* 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
|
|
1697
|
-
*/
|
|
1698
|
-
toProtobufJSON(
|
|
1699
|
-
// @ts-ignore
|
|
1700
|
-
options) {
|
|
1701
|
-
return {
|
|
1702
|
-
session: this.session,
|
|
1703
|
-
task: this.task
|
|
1704
|
-
};
|
|
1705
|
-
}
|
|
1706
|
-
}
|
|
1707
|
-
/**
|
|
1708
|
-
* Message implementation for armonik.api.grpc.v1.TaskIdList
|
|
1709
|
-
*/
|
|
1710
|
-
export class TaskIdList {
|
|
1711
|
-
static { this.id = 'armonik.api.grpc.v1.TaskIdList'; }
|
|
1712
|
-
/**
|
|
1713
|
-
* Deserialize binary data to message
|
|
1714
|
-
* @param instance message instance
|
|
1715
|
-
*/
|
|
1716
|
-
static deserializeBinary(bytes) {
|
|
1717
|
-
const instance = new TaskIdList();
|
|
1718
|
-
TaskIdList.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1719
|
-
return instance;
|
|
1720
|
-
}
|
|
1721
|
-
/**
|
|
1722
|
-
* Check all the properties and set default protobuf values if necessary
|
|
1723
|
-
* @param _instance message instance
|
|
1724
|
-
*/
|
|
1725
|
-
static refineValues(_instance) {
|
|
1726
|
-
_instance.taskIds = _instance.taskIds || [];
|
|
1727
|
-
}
|
|
1728
|
-
/**
|
|
1729
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1730
|
-
* @param _instance message instance
|
|
1731
|
-
* @param _reader binary reader instance
|
|
1732
|
-
*/
|
|
1733
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1734
|
-
while (_reader.nextField()) {
|
|
1735
|
-
if (_reader.isEndGroup())
|
|
1736
|
-
break;
|
|
1737
|
-
switch (_reader.getFieldNumber()) {
|
|
1738
|
-
case 1:
|
|
1739
|
-
(_instance.taskIds = _instance.taskIds || []).push(_reader.readString());
|
|
1740
|
-
break;
|
|
1741
|
-
default:
|
|
1742
|
-
_reader.skipField();
|
|
1743
|
-
}
|
|
1744
|
-
}
|
|
1745
|
-
TaskIdList.refineValues(_instance);
|
|
1746
|
-
}
|
|
1747
|
-
/**
|
|
1748
|
-
* Serializes a message to binary format using provided binary reader
|
|
1749
|
-
* @param _instance message instance
|
|
1750
|
-
* @param _writer binary writer instance
|
|
1751
|
-
*/
|
|
1752
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
1753
|
-
if (_instance.taskIds && _instance.taskIds.length) {
|
|
1754
|
-
_writer.writeRepeatedString(1, _instance.taskIds);
|
|
1755
|
-
}
|
|
1756
|
-
}
|
|
1757
|
-
/**
|
|
1758
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1759
|
-
* @param _value initial values object or instance of TaskIdList to deeply clone from
|
|
1760
|
-
*/
|
|
1761
|
-
constructor(_value) {
|
|
1762
|
-
_value = _value || {};
|
|
1763
|
-
this.taskIds = (_value.taskIds || []).slice();
|
|
1764
|
-
TaskIdList.refineValues(this);
|
|
1765
|
-
}
|
|
1766
|
-
get taskIds() {
|
|
1767
|
-
return this._taskIds;
|
|
1768
|
-
}
|
|
1769
|
-
set taskIds(value) {
|
|
1770
|
-
this._taskIds = value;
|
|
1771
|
-
}
|
|
1772
|
-
/**
|
|
1773
|
-
* Serialize message to binary data
|
|
1774
|
-
* @param instance message instance
|
|
1775
|
-
*/
|
|
1776
|
-
serializeBinary() {
|
|
1777
|
-
const writer = new BinaryWriter();
|
|
1778
|
-
TaskIdList.serializeBinaryToWriter(this, writer);
|
|
1779
|
-
return writer.getResultBuffer();
|
|
1780
|
-
}
|
|
1781
|
-
/**
|
|
1782
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1783
|
-
*/
|
|
1784
|
-
toObject() {
|
|
1785
|
-
return {
|
|
1786
|
-
taskIds: (this.taskIds || []).slice()
|
|
1787
|
-
};
|
|
1788
|
-
}
|
|
1789
|
-
/**
|
|
1790
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1791
|
-
*/
|
|
1792
|
-
toJSON() {
|
|
1793
|
-
return this.toObject();
|
|
1794
|
-
}
|
|
1795
|
-
/**
|
|
1796
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1797
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1798
|
-
* 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
|
|
1799
|
-
*/
|
|
1800
|
-
toProtobufJSON(
|
|
1801
|
-
// @ts-ignore
|
|
1802
|
-
options) {
|
|
1803
|
-
return {
|
|
1804
|
-
taskIds: (this.taskIds || []).slice()
|
|
1805
|
-
};
|
|
1806
|
-
}
|
|
1807
|
-
}
|
|
1808
|
-
/**
|
|
1809
|
-
* Message implementation for armonik.api.grpc.v1.StatusCount
|
|
1810
|
-
*/
|
|
1811
|
-
export class StatusCount {
|
|
1812
|
-
static { this.id = 'armonik.api.grpc.v1.StatusCount'; }
|
|
1813
|
-
/**
|
|
1814
|
-
* Deserialize binary data to message
|
|
1815
|
-
* @param instance message instance
|
|
1816
|
-
*/
|
|
1817
|
-
static deserializeBinary(bytes) {
|
|
1818
|
-
const instance = new StatusCount();
|
|
1819
|
-
StatusCount.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1820
|
-
return instance;
|
|
1821
|
-
}
|
|
1822
|
-
/**
|
|
1823
|
-
* Check all the properties and set default protobuf values if necessary
|
|
1824
|
-
* @param _instance message instance
|
|
1825
|
-
*/
|
|
1826
|
-
static refineValues(_instance) {
|
|
1827
|
-
_instance.status = _instance.status || 0;
|
|
1828
|
-
_instance.count = _instance.count || 0;
|
|
1829
|
-
}
|
|
1830
|
-
/**
|
|
1831
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1832
|
-
* @param _instance message instance
|
|
1833
|
-
* @param _reader binary reader instance
|
|
1834
|
-
*/
|
|
1835
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1836
|
-
while (_reader.nextField()) {
|
|
1837
|
-
if (_reader.isEndGroup())
|
|
1838
|
-
break;
|
|
1839
|
-
switch (_reader.getFieldNumber()) {
|
|
1840
|
-
case 1:
|
|
1841
|
-
_instance.status = _reader.readEnum();
|
|
1842
|
-
break;
|
|
1843
|
-
case 2:
|
|
1844
|
-
_instance.count = _reader.readInt32();
|
|
1845
|
-
break;
|
|
1846
|
-
default:
|
|
1847
|
-
_reader.skipField();
|
|
1848
|
-
}
|
|
1849
|
-
}
|
|
1850
|
-
StatusCount.refineValues(_instance);
|
|
1851
|
-
}
|
|
1852
|
-
/**
|
|
1853
|
-
* Serializes a message to binary format using provided binary reader
|
|
1854
|
-
* @param _instance message instance
|
|
1855
|
-
* @param _writer binary writer instance
|
|
1856
|
-
*/
|
|
1857
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
1858
|
-
if (_instance.status) {
|
|
1859
|
-
_writer.writeEnum(1, _instance.status);
|
|
1860
|
-
}
|
|
1861
|
-
if (_instance.count) {
|
|
1862
|
-
_writer.writeInt32(2, _instance.count);
|
|
1863
|
-
}
|
|
1864
|
-
}
|
|
1865
|
-
/**
|
|
1866
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1867
|
-
* @param _value initial values object or instance of StatusCount to deeply clone from
|
|
1868
|
-
*/
|
|
1869
|
-
constructor(_value) {
|
|
1870
|
-
_value = _value || {};
|
|
1871
|
-
this.status = _value.status;
|
|
1872
|
-
this.count = _value.count;
|
|
1873
|
-
StatusCount.refineValues(this);
|
|
1874
|
-
}
|
|
1875
|
-
get status() {
|
|
1876
|
-
return this._status;
|
|
1877
|
-
}
|
|
1878
|
-
set status(value) {
|
|
1879
|
-
this._status = value;
|
|
1880
|
-
}
|
|
1881
|
-
get count() {
|
|
1882
|
-
return this._count;
|
|
1883
|
-
}
|
|
1884
|
-
set count(value) {
|
|
1885
|
-
this._count = value;
|
|
1886
|
-
}
|
|
1887
|
-
/**
|
|
1888
|
-
* Serialize message to binary data
|
|
1889
|
-
* @param instance message instance
|
|
1890
|
-
*/
|
|
1891
|
-
serializeBinary() {
|
|
1892
|
-
const writer = new BinaryWriter();
|
|
1893
|
-
StatusCount.serializeBinaryToWriter(this, writer);
|
|
1894
|
-
return writer.getResultBuffer();
|
|
1895
|
-
}
|
|
1896
|
-
/**
|
|
1897
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1898
|
-
*/
|
|
1899
|
-
toObject() {
|
|
1900
|
-
return {
|
|
1901
|
-
status: this.status,
|
|
1902
|
-
count: this.count
|
|
1903
|
-
};
|
|
1904
|
-
}
|
|
1905
|
-
/**
|
|
1906
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1907
|
-
*/
|
|
1908
|
-
toJSON() {
|
|
1909
|
-
return this.toObject();
|
|
1910
|
-
}
|
|
1911
|
-
/**
|
|
1912
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1913
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1914
|
-
* 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
|
|
1915
|
-
*/
|
|
1916
|
-
toProtobufJSON(
|
|
1917
|
-
// @ts-ignore
|
|
1918
|
-
options) {
|
|
1919
|
-
return {
|
|
1920
|
-
status: armonikApiGrpcV1Task_status001.TaskStatus[this.status === null || this.status === undefined ? 0 : this.status],
|
|
1921
|
-
count: this.count
|
|
1922
|
-
};
|
|
1923
|
-
}
|
|
1924
|
-
}
|
|
1925
|
-
/**
|
|
1926
|
-
* Message implementation for armonik.api.grpc.v1.Count
|
|
1927
|
-
*/
|
|
1928
|
-
export class Count {
|
|
1929
|
-
static { this.id = 'armonik.api.grpc.v1.Count'; }
|
|
1930
|
-
/**
|
|
1931
|
-
* Deserialize binary data to message
|
|
1932
|
-
* @param instance message instance
|
|
1933
|
-
*/
|
|
1934
|
-
static deserializeBinary(bytes) {
|
|
1935
|
-
const instance = new Count();
|
|
1936
|
-
Count.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1937
|
-
return instance;
|
|
1938
|
-
}
|
|
1939
|
-
/**
|
|
1940
|
-
* Check all the properties and set default protobuf values if necessary
|
|
1941
|
-
* @param _instance message instance
|
|
1942
|
-
*/
|
|
1943
|
-
static refineValues(_instance) {
|
|
1944
|
-
_instance.values = _instance.values || [];
|
|
1945
|
-
}
|
|
1946
|
-
/**
|
|
1947
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1948
|
-
* @param _instance message instance
|
|
1949
|
-
* @param _reader binary reader instance
|
|
1950
|
-
*/
|
|
1951
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1952
|
-
while (_reader.nextField()) {
|
|
1953
|
-
if (_reader.isEndGroup())
|
|
1954
|
-
break;
|
|
1955
|
-
switch (_reader.getFieldNumber()) {
|
|
1956
|
-
case 1:
|
|
1957
|
-
const messageInitializer1 = new StatusCount();
|
|
1958
|
-
_reader.readMessage(messageInitializer1, StatusCount.deserializeBinaryFromReader);
|
|
1959
|
-
(_instance.values = _instance.values || []).push(messageInitializer1);
|
|
1960
|
-
break;
|
|
1961
|
-
default:
|
|
1962
|
-
_reader.skipField();
|
|
1963
|
-
}
|
|
1964
|
-
}
|
|
1965
|
-
Count.refineValues(_instance);
|
|
1966
|
-
}
|
|
1967
|
-
/**
|
|
1968
|
-
* Serializes a message to binary format using provided binary reader
|
|
1969
|
-
* @param _instance message instance
|
|
1970
|
-
* @param _writer binary writer instance
|
|
1971
|
-
*/
|
|
1972
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
1973
|
-
if (_instance.values && _instance.values.length) {
|
|
1974
|
-
_writer.writeRepeatedMessage(1, _instance.values, StatusCount.serializeBinaryToWriter);
|
|
1975
|
-
}
|
|
1976
|
-
}
|
|
1977
|
-
/**
|
|
1978
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1979
|
-
* @param _value initial values object or instance of Count to deeply clone from
|
|
1980
|
-
*/
|
|
1981
|
-
constructor(_value) {
|
|
1982
|
-
_value = _value || {};
|
|
1983
|
-
this.values = (_value.values || []).map(m => new StatusCount(m));
|
|
1984
|
-
Count.refineValues(this);
|
|
1985
|
-
}
|
|
1986
|
-
get values() {
|
|
1987
|
-
return this._values;
|
|
1988
|
-
}
|
|
1989
|
-
set values(value) {
|
|
1990
|
-
this._values = value;
|
|
1991
|
-
}
|
|
1992
|
-
/**
|
|
1993
|
-
* Serialize message to binary data
|
|
1994
|
-
* @param instance message instance
|
|
1995
|
-
*/
|
|
1996
|
-
serializeBinary() {
|
|
1997
|
-
const writer = new BinaryWriter();
|
|
1998
|
-
Count.serializeBinaryToWriter(this, writer);
|
|
1999
|
-
return writer.getResultBuffer();
|
|
2000
|
-
}
|
|
2001
|
-
/**
|
|
2002
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2003
|
-
*/
|
|
2004
|
-
toObject() {
|
|
2005
|
-
return {
|
|
2006
|
-
values: (this.values || []).map(m => m.toObject())
|
|
2007
|
-
};
|
|
2008
|
-
}
|
|
2009
|
-
/**
|
|
2010
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2011
|
-
*/
|
|
2012
|
-
toJSON() {
|
|
2013
|
-
return this.toObject();
|
|
2014
|
-
}
|
|
2015
|
-
/**
|
|
2016
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2017
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2018
|
-
* 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
|
|
2019
|
-
*/
|
|
2020
|
-
toProtobufJSON(
|
|
2021
|
-
// @ts-ignore
|
|
2022
|
-
options) {
|
|
2023
|
-
return {
|
|
2024
|
-
values: (this.values || []).map(m => m.toProtobufJSON(options))
|
|
2025
|
-
};
|
|
2026
|
-
}
|
|
2027
|
-
}
|
|
2028
|
-
/**
|
|
2029
|
-
* Message implementation for armonik.api.grpc.v1.ResultRequest
|
|
2030
|
-
*/
|
|
2031
|
-
export class ResultRequest {
|
|
2032
|
-
static { this.id = 'armonik.api.grpc.v1.ResultRequest'; }
|
|
2033
|
-
/**
|
|
2034
|
-
* Deserialize binary data to message
|
|
2035
|
-
* @param instance message instance
|
|
2036
|
-
*/
|
|
2037
|
-
static deserializeBinary(bytes) {
|
|
2038
|
-
const instance = new ResultRequest();
|
|
2039
|
-
ResultRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2040
|
-
return instance;
|
|
2041
|
-
}
|
|
2042
|
-
/**
|
|
2043
|
-
* Check all the properties and set default protobuf values if necessary
|
|
2044
|
-
* @param _instance message instance
|
|
2045
|
-
*/
|
|
2046
|
-
static refineValues(_instance) {
|
|
2047
|
-
_instance.session = _instance.session || '';
|
|
2048
|
-
_instance.resultId = _instance.resultId || '';
|
|
2049
|
-
}
|
|
2050
|
-
/**
|
|
2051
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2052
|
-
* @param _instance message instance
|
|
2053
|
-
* @param _reader binary reader instance
|
|
2054
|
-
*/
|
|
2055
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2056
|
-
while (_reader.nextField()) {
|
|
2057
|
-
if (_reader.isEndGroup())
|
|
2058
|
-
break;
|
|
2059
|
-
switch (_reader.getFieldNumber()) {
|
|
2060
|
-
case 1:
|
|
2061
|
-
_instance.session = _reader.readString();
|
|
2062
|
-
break;
|
|
2063
|
-
case 2:
|
|
2064
|
-
_instance.resultId = _reader.readString();
|
|
2065
|
-
break;
|
|
2066
|
-
default:
|
|
2067
|
-
_reader.skipField();
|
|
2068
|
-
}
|
|
2069
|
-
}
|
|
2070
|
-
ResultRequest.refineValues(_instance);
|
|
2071
|
-
}
|
|
2072
|
-
/**
|
|
2073
|
-
* Serializes a message to binary format using provided binary reader
|
|
2074
|
-
* @param _instance message instance
|
|
2075
|
-
* @param _writer binary writer instance
|
|
2076
|
-
*/
|
|
2077
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
2078
|
-
if (_instance.session) {
|
|
2079
|
-
_writer.writeString(1, _instance.session);
|
|
2080
|
-
}
|
|
2081
|
-
if (_instance.resultId) {
|
|
2082
|
-
_writer.writeString(2, _instance.resultId);
|
|
2083
|
-
}
|
|
2084
|
-
}
|
|
2085
|
-
/**
|
|
2086
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2087
|
-
* @param _value initial values object or instance of ResultRequest to deeply clone from
|
|
2088
|
-
*/
|
|
2089
|
-
constructor(_value) {
|
|
2090
|
-
_value = _value || {};
|
|
2091
|
-
this.session = _value.session;
|
|
2092
|
-
this.resultId = _value.resultId;
|
|
2093
|
-
ResultRequest.refineValues(this);
|
|
2094
|
-
}
|
|
2095
|
-
get session() {
|
|
2096
|
-
return this._session;
|
|
2097
|
-
}
|
|
2098
|
-
set session(value) {
|
|
2099
|
-
this._session = value;
|
|
2100
|
-
}
|
|
2101
|
-
get resultId() {
|
|
2102
|
-
return this._resultId;
|
|
2103
|
-
}
|
|
2104
|
-
set resultId(value) {
|
|
2105
|
-
this._resultId = value;
|
|
2106
|
-
}
|
|
2107
|
-
/**
|
|
2108
|
-
* Serialize message to binary data
|
|
2109
|
-
* @param instance message instance
|
|
2110
|
-
*/
|
|
2111
|
-
serializeBinary() {
|
|
2112
|
-
const writer = new BinaryWriter();
|
|
2113
|
-
ResultRequest.serializeBinaryToWriter(this, writer);
|
|
2114
|
-
return writer.getResultBuffer();
|
|
2115
|
-
}
|
|
2116
|
-
/**
|
|
2117
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2118
|
-
*/
|
|
2119
|
-
toObject() {
|
|
2120
|
-
return {
|
|
2121
|
-
session: this.session,
|
|
2122
|
-
resultId: this.resultId
|
|
2123
|
-
};
|
|
2124
|
-
}
|
|
2125
|
-
/**
|
|
2126
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2127
|
-
*/
|
|
2128
|
-
toJSON() {
|
|
2129
|
-
return this.toObject();
|
|
2130
|
-
}
|
|
2131
|
-
/**
|
|
2132
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2133
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2134
|
-
* 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
|
|
2135
|
-
*/
|
|
2136
|
-
toProtobufJSON(
|
|
2137
|
-
// @ts-ignore
|
|
2138
|
-
options) {
|
|
2139
|
-
return {
|
|
2140
|
-
session: this.session,
|
|
2141
|
-
resultId: this.resultId
|
|
2142
|
-
};
|
|
2143
|
-
}
|
|
2144
|
-
}
|
|
2145
|
-
/**
|
|
2146
|
-
* Message implementation for armonik.api.grpc.v1.TaskOutputRequest
|
|
2147
|
-
*/
|
|
2148
|
-
export class TaskOutputRequest {
|
|
2149
|
-
static { this.id = 'armonik.api.grpc.v1.TaskOutputRequest'; }
|
|
2150
|
-
/**
|
|
2151
|
-
* Deserialize binary data to message
|
|
2152
|
-
* @param instance message instance
|
|
2153
|
-
*/
|
|
2154
|
-
static deserializeBinary(bytes) {
|
|
2155
|
-
const instance = new TaskOutputRequest();
|
|
2156
|
-
TaskOutputRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2157
|
-
return instance;
|
|
2158
|
-
}
|
|
2159
|
-
/**
|
|
2160
|
-
* Check all the properties and set default protobuf values if necessary
|
|
2161
|
-
* @param _instance message instance
|
|
2162
|
-
*/
|
|
2163
|
-
static refineValues(_instance) {
|
|
2164
|
-
_instance.session = _instance.session || '';
|
|
2165
|
-
_instance.taskId = _instance.taskId || '';
|
|
2166
|
-
}
|
|
2167
|
-
/**
|
|
2168
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2169
|
-
* @param _instance message instance
|
|
2170
|
-
* @param _reader binary reader instance
|
|
2171
|
-
*/
|
|
2172
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2173
|
-
while (_reader.nextField()) {
|
|
2174
|
-
if (_reader.isEndGroup())
|
|
2175
|
-
break;
|
|
2176
|
-
switch (_reader.getFieldNumber()) {
|
|
2177
|
-
case 1:
|
|
2178
|
-
_instance.session = _reader.readString();
|
|
2179
|
-
break;
|
|
2180
|
-
case 2:
|
|
2181
|
-
_instance.taskId = _reader.readString();
|
|
2182
|
-
break;
|
|
2183
|
-
default:
|
|
2184
|
-
_reader.skipField();
|
|
2185
|
-
}
|
|
2186
|
-
}
|
|
2187
|
-
TaskOutputRequest.refineValues(_instance);
|
|
2188
|
-
}
|
|
2189
|
-
/**
|
|
2190
|
-
* Serializes a message to binary format using provided binary reader
|
|
2191
|
-
* @param _instance message instance
|
|
2192
|
-
* @param _writer binary writer instance
|
|
2193
|
-
*/
|
|
2194
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
2195
|
-
if (_instance.session) {
|
|
2196
|
-
_writer.writeString(1, _instance.session);
|
|
2197
|
-
}
|
|
2198
|
-
if (_instance.taskId) {
|
|
2199
|
-
_writer.writeString(2, _instance.taskId);
|
|
2200
|
-
}
|
|
2201
|
-
}
|
|
2202
|
-
/**
|
|
2203
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2204
|
-
* @param _value initial values object or instance of TaskOutputRequest to deeply clone from
|
|
2205
|
-
*/
|
|
2206
|
-
constructor(_value) {
|
|
2207
|
-
_value = _value || {};
|
|
2208
|
-
this.session = _value.session;
|
|
2209
|
-
this.taskId = _value.taskId;
|
|
2210
|
-
TaskOutputRequest.refineValues(this);
|
|
2211
|
-
}
|
|
2212
|
-
get session() {
|
|
2213
|
-
return this._session;
|
|
2214
|
-
}
|
|
2215
|
-
set session(value) {
|
|
2216
|
-
this._session = value;
|
|
2217
|
-
}
|
|
2218
|
-
get taskId() {
|
|
2219
|
-
return this._taskId;
|
|
2220
|
-
}
|
|
2221
|
-
set taskId(value) {
|
|
2222
|
-
this._taskId = value;
|
|
2223
|
-
}
|
|
2224
|
-
/**
|
|
2225
|
-
* Serialize message to binary data
|
|
2226
|
-
* @param instance message instance
|
|
2227
|
-
*/
|
|
2228
|
-
serializeBinary() {
|
|
2229
|
-
const writer = new BinaryWriter();
|
|
2230
|
-
TaskOutputRequest.serializeBinaryToWriter(this, writer);
|
|
2231
|
-
return writer.getResultBuffer();
|
|
2232
|
-
}
|
|
2233
|
-
/**
|
|
2234
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2235
|
-
*/
|
|
2236
|
-
toObject() {
|
|
2237
|
-
return {
|
|
2238
|
-
session: this.session,
|
|
2239
|
-
taskId: this.taskId
|
|
2240
|
-
};
|
|
2241
|
-
}
|
|
2242
|
-
/**
|
|
2243
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2244
|
-
*/
|
|
2245
|
-
toJSON() {
|
|
2246
|
-
return this.toObject();
|
|
2247
|
-
}
|
|
2248
|
-
/**
|
|
2249
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2250
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2251
|
-
* 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
|
|
2252
|
-
*/
|
|
2253
|
-
toProtobufJSON(
|
|
2254
|
-
// @ts-ignore
|
|
2255
|
-
options) {
|
|
2256
|
-
return {
|
|
2257
|
-
session: this.session,
|
|
2258
|
-
taskId: this.taskId
|
|
2259
|
-
};
|
|
2260
|
-
}
|
|
2261
|
-
}
|
|
2262
|
-
/**
|
|
2263
|
-
* Message implementation for armonik.api.grpc.v1.Error
|
|
2264
|
-
*/
|
|
2265
|
-
export class Error {
|
|
2266
|
-
static { this.id = 'armonik.api.grpc.v1.Error'; }
|
|
2267
|
-
/**
|
|
2268
|
-
* Deserialize binary data to message
|
|
2269
|
-
* @param instance message instance
|
|
2270
|
-
*/
|
|
2271
|
-
static deserializeBinary(bytes) {
|
|
2272
|
-
const instance = new Error();
|
|
2273
|
-
Error.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2274
|
-
return instance;
|
|
2275
|
-
}
|
|
2276
|
-
/**
|
|
2277
|
-
* Check all the properties and set default protobuf values if necessary
|
|
2278
|
-
* @param _instance message instance
|
|
2279
|
-
*/
|
|
2280
|
-
static refineValues(_instance) {
|
|
2281
|
-
_instance.taskStatus = _instance.taskStatus || 0;
|
|
2282
|
-
_instance.detail = _instance.detail || '';
|
|
2283
|
-
}
|
|
2284
|
-
/**
|
|
2285
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2286
|
-
* @param _instance message instance
|
|
2287
|
-
* @param _reader binary reader instance
|
|
2288
|
-
*/
|
|
2289
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2290
|
-
while (_reader.nextField()) {
|
|
2291
|
-
if (_reader.isEndGroup())
|
|
2292
|
-
break;
|
|
2293
|
-
switch (_reader.getFieldNumber()) {
|
|
2294
|
-
case 1:
|
|
2295
|
-
_instance.taskStatus = _reader.readEnum();
|
|
2296
|
-
break;
|
|
2297
|
-
case 2:
|
|
2298
|
-
_instance.detail = _reader.readString();
|
|
2299
|
-
break;
|
|
2300
|
-
default:
|
|
2301
|
-
_reader.skipField();
|
|
2302
|
-
}
|
|
2303
|
-
}
|
|
2304
|
-
Error.refineValues(_instance);
|
|
2305
|
-
}
|
|
2306
|
-
/**
|
|
2307
|
-
* Serializes a message to binary format using provided binary reader
|
|
2308
|
-
* @param _instance message instance
|
|
2309
|
-
* @param _writer binary writer instance
|
|
2310
|
-
*/
|
|
2311
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
2312
|
-
if (_instance.taskStatus) {
|
|
2313
|
-
_writer.writeEnum(1, _instance.taskStatus);
|
|
2314
|
-
}
|
|
2315
|
-
if (_instance.detail) {
|
|
2316
|
-
_writer.writeString(2, _instance.detail);
|
|
2317
|
-
}
|
|
2318
|
-
}
|
|
2319
|
-
/**
|
|
2320
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2321
|
-
* @param _value initial values object or instance of Error to deeply clone from
|
|
2322
|
-
*/
|
|
2323
|
-
constructor(_value) {
|
|
2324
|
-
_value = _value || {};
|
|
2325
|
-
this.taskStatus = _value.taskStatus;
|
|
2326
|
-
this.detail = _value.detail;
|
|
2327
|
-
Error.refineValues(this);
|
|
2328
|
-
}
|
|
2329
|
-
get taskStatus() {
|
|
2330
|
-
return this._taskStatus;
|
|
2331
|
-
}
|
|
2332
|
-
set taskStatus(value) {
|
|
2333
|
-
this._taskStatus = value;
|
|
2334
|
-
}
|
|
2335
|
-
get detail() {
|
|
2336
|
-
return this._detail;
|
|
2337
|
-
}
|
|
2338
|
-
set detail(value) {
|
|
2339
|
-
this._detail = value;
|
|
2340
|
-
}
|
|
2341
|
-
/**
|
|
2342
|
-
* Serialize message to binary data
|
|
2343
|
-
* @param instance message instance
|
|
2344
|
-
*/
|
|
2345
|
-
serializeBinary() {
|
|
2346
|
-
const writer = new BinaryWriter();
|
|
2347
|
-
Error.serializeBinaryToWriter(this, writer);
|
|
2348
|
-
return writer.getResultBuffer();
|
|
2349
|
-
}
|
|
2350
|
-
/**
|
|
2351
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2352
|
-
*/
|
|
2353
|
-
toObject() {
|
|
2354
|
-
return {
|
|
2355
|
-
taskStatus: this.taskStatus,
|
|
2356
|
-
detail: this.detail
|
|
2357
|
-
};
|
|
2358
|
-
}
|
|
2359
|
-
/**
|
|
2360
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2361
|
-
*/
|
|
2362
|
-
toJSON() {
|
|
2363
|
-
return this.toObject();
|
|
2364
|
-
}
|
|
2365
|
-
/**
|
|
2366
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2367
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2368
|
-
* 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
|
|
2369
|
-
*/
|
|
2370
|
-
toProtobufJSON(
|
|
2371
|
-
// @ts-ignore
|
|
2372
|
-
options) {
|
|
2373
|
-
return {
|
|
2374
|
-
taskStatus: armonikApiGrpcV1Task_status001.TaskStatus[this.taskStatus === null || this.taskStatus === undefined
|
|
2375
|
-
? 0
|
|
2376
|
-
: this.taskStatus],
|
|
2377
|
-
detail: this.detail
|
|
2378
|
-
};
|
|
2379
|
-
}
|
|
2380
|
-
}
|
|
2381
|
-
/**
|
|
2382
|
-
* Message implementation for armonik.api.grpc.v1.TaskError
|
|
2383
|
-
*/
|
|
2384
|
-
export class TaskError {
|
|
2385
|
-
static { this.id = 'armonik.api.grpc.v1.TaskError'; }
|
|
2386
|
-
/**
|
|
2387
|
-
* Deserialize binary data to message
|
|
2388
|
-
* @param instance message instance
|
|
2389
|
-
*/
|
|
2390
|
-
static deserializeBinary(bytes) {
|
|
2391
|
-
const instance = new TaskError();
|
|
2392
|
-
TaskError.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2393
|
-
return instance;
|
|
2394
|
-
}
|
|
2395
|
-
/**
|
|
2396
|
-
* Check all the properties and set default protobuf values if necessary
|
|
2397
|
-
* @param _instance message instance
|
|
2398
|
-
*/
|
|
2399
|
-
static refineValues(_instance) {
|
|
2400
|
-
_instance.taskId = _instance.taskId || '';
|
|
2401
|
-
_instance.errors = _instance.errors || [];
|
|
2402
|
-
}
|
|
2403
|
-
/**
|
|
2404
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2405
|
-
* @param _instance message instance
|
|
2406
|
-
* @param _reader binary reader instance
|
|
2407
|
-
*/
|
|
2408
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2409
|
-
while (_reader.nextField()) {
|
|
2410
|
-
if (_reader.isEndGroup())
|
|
2411
|
-
break;
|
|
2412
|
-
switch (_reader.getFieldNumber()) {
|
|
2413
|
-
case 1:
|
|
2414
|
-
_instance.taskId = _reader.readString();
|
|
2415
|
-
break;
|
|
2416
|
-
case 2:
|
|
2417
|
-
const messageInitializer2 = new Error();
|
|
2418
|
-
_reader.readMessage(messageInitializer2, Error.deserializeBinaryFromReader);
|
|
2419
|
-
(_instance.errors = _instance.errors || []).push(messageInitializer2);
|
|
2420
|
-
break;
|
|
2421
|
-
default:
|
|
2422
|
-
_reader.skipField();
|
|
2423
|
-
}
|
|
2424
|
-
}
|
|
2425
|
-
TaskError.refineValues(_instance);
|
|
2426
|
-
}
|
|
2427
|
-
/**
|
|
2428
|
-
* Serializes a message to binary format using provided binary reader
|
|
2429
|
-
* @param _instance message instance
|
|
2430
|
-
* @param _writer binary writer instance
|
|
2431
|
-
*/
|
|
2432
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
2433
|
-
if (_instance.taskId) {
|
|
2434
|
-
_writer.writeString(1, _instance.taskId);
|
|
2435
|
-
}
|
|
2436
|
-
if (_instance.errors && _instance.errors.length) {
|
|
2437
|
-
_writer.writeRepeatedMessage(2, _instance.errors, Error.serializeBinaryToWriter);
|
|
2438
|
-
}
|
|
2439
|
-
}
|
|
2440
|
-
/**
|
|
2441
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2442
|
-
* @param _value initial values object or instance of TaskError to deeply clone from
|
|
2443
|
-
*/
|
|
2444
|
-
constructor(_value) {
|
|
2445
|
-
_value = _value || {};
|
|
2446
|
-
this.taskId = _value.taskId;
|
|
2447
|
-
this.errors = (_value.errors || []).map(m => new Error(m));
|
|
2448
|
-
TaskError.refineValues(this);
|
|
2449
|
-
}
|
|
2450
|
-
get taskId() {
|
|
2451
|
-
return this._taskId;
|
|
2452
|
-
}
|
|
2453
|
-
set taskId(value) {
|
|
2454
|
-
this._taskId = value;
|
|
2455
|
-
}
|
|
2456
|
-
get errors() {
|
|
2457
|
-
return this._errors;
|
|
2458
|
-
}
|
|
2459
|
-
set errors(value) {
|
|
2460
|
-
this._errors = value;
|
|
2461
|
-
}
|
|
2462
|
-
/**
|
|
2463
|
-
* Serialize message to binary data
|
|
2464
|
-
* @param instance message instance
|
|
2465
|
-
*/
|
|
2466
|
-
serializeBinary() {
|
|
2467
|
-
const writer = new BinaryWriter();
|
|
2468
|
-
TaskError.serializeBinaryToWriter(this, writer);
|
|
2469
|
-
return writer.getResultBuffer();
|
|
2470
|
-
}
|
|
2471
|
-
/**
|
|
2472
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2473
|
-
*/
|
|
2474
|
-
toObject() {
|
|
2475
|
-
return {
|
|
2476
|
-
taskId: this.taskId,
|
|
2477
|
-
errors: (this.errors || []).map(m => m.toObject())
|
|
2478
|
-
};
|
|
2479
|
-
}
|
|
2480
|
-
/**
|
|
2481
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2482
|
-
*/
|
|
2483
|
-
toJSON() {
|
|
2484
|
-
return this.toObject();
|
|
2485
|
-
}
|
|
2486
|
-
/**
|
|
2487
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2488
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2489
|
-
* 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
|
|
2490
|
-
*/
|
|
2491
|
-
toProtobufJSON(
|
|
2492
|
-
// @ts-ignore
|
|
2493
|
-
options) {
|
|
2494
|
-
return {
|
|
2495
|
-
taskId: this.taskId,
|
|
2496
|
-
errors: (this.errors || []).map(m => m.toProtobufJSON(options))
|
|
2497
|
-
};
|
|
2498
|
-
}
|
|
2499
|
-
}
|
|
2500
|
-
/**
|
|
2501
|
-
* Message implementation for armonik.api.grpc.v1.TaskList
|
|
2502
|
-
*/
|
|
2503
|
-
export class TaskList {
|
|
2504
|
-
static { this.id = 'armonik.api.grpc.v1.TaskList'; }
|
|
2505
|
-
/**
|
|
2506
|
-
* Deserialize binary data to message
|
|
2507
|
-
* @param instance message instance
|
|
2508
|
-
*/
|
|
2509
|
-
static deserializeBinary(bytes) {
|
|
2510
|
-
const instance = new TaskList();
|
|
2511
|
-
TaskList.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2512
|
-
return instance;
|
|
2513
|
-
}
|
|
2514
|
-
/**
|
|
2515
|
-
* Check all the properties and set default protobuf values if necessary
|
|
2516
|
-
* @param _instance message instance
|
|
2517
|
-
*/
|
|
2518
|
-
static refineValues(_instance) {
|
|
2519
|
-
_instance.taskIds = _instance.taskIds || [];
|
|
2520
|
-
}
|
|
2521
|
-
/**
|
|
2522
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2523
|
-
* @param _instance message instance
|
|
2524
|
-
* @param _reader binary reader instance
|
|
2525
|
-
*/
|
|
2526
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2527
|
-
while (_reader.nextField()) {
|
|
2528
|
-
if (_reader.isEndGroup())
|
|
2529
|
-
break;
|
|
2530
|
-
switch (_reader.getFieldNumber()) {
|
|
2531
|
-
case 1:
|
|
2532
|
-
const messageInitializer1 = new TaskId();
|
|
2533
|
-
_reader.readMessage(messageInitializer1, TaskId.deserializeBinaryFromReader);
|
|
2534
|
-
(_instance.taskIds = _instance.taskIds || []).push(messageInitializer1);
|
|
2535
|
-
break;
|
|
2536
|
-
default:
|
|
2537
|
-
_reader.skipField();
|
|
2538
|
-
}
|
|
2539
|
-
}
|
|
2540
|
-
TaskList.refineValues(_instance);
|
|
2541
|
-
}
|
|
2542
|
-
/**
|
|
2543
|
-
* Serializes a message to binary format using provided binary reader
|
|
2544
|
-
* @param _instance message instance
|
|
2545
|
-
* @param _writer binary writer instance
|
|
2546
|
-
*/
|
|
2547
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
2548
|
-
if (_instance.taskIds && _instance.taskIds.length) {
|
|
2549
|
-
_writer.writeRepeatedMessage(1, _instance.taskIds, TaskId.serializeBinaryToWriter);
|
|
2550
|
-
}
|
|
2551
|
-
}
|
|
2552
|
-
/**
|
|
2553
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2554
|
-
* @param _value initial values object or instance of TaskList to deeply clone from
|
|
2555
|
-
*/
|
|
2556
|
-
constructor(_value) {
|
|
2557
|
-
_value = _value || {};
|
|
2558
|
-
this.taskIds = (_value.taskIds || []).map(m => new TaskId(m));
|
|
2559
|
-
TaskList.refineValues(this);
|
|
2560
|
-
}
|
|
2561
|
-
get taskIds() {
|
|
2562
|
-
return this._taskIds;
|
|
2563
|
-
}
|
|
2564
|
-
set taskIds(value) {
|
|
2565
|
-
this._taskIds = value;
|
|
2566
|
-
}
|
|
2567
|
-
/**
|
|
2568
|
-
* Serialize message to binary data
|
|
2569
|
-
* @param instance message instance
|
|
2570
|
-
*/
|
|
2571
|
-
serializeBinary() {
|
|
2572
|
-
const writer = new BinaryWriter();
|
|
2573
|
-
TaskList.serializeBinaryToWriter(this, writer);
|
|
2574
|
-
return writer.getResultBuffer();
|
|
2575
|
-
}
|
|
2576
|
-
/**
|
|
2577
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2578
|
-
*/
|
|
2579
|
-
toObject() {
|
|
2580
|
-
return {
|
|
2581
|
-
taskIds: (this.taskIds || []).map(m => m.toObject())
|
|
2582
|
-
};
|
|
2583
|
-
}
|
|
2584
|
-
/**
|
|
2585
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2586
|
-
*/
|
|
2587
|
-
toJSON() {
|
|
2588
|
-
return this.toObject();
|
|
2589
|
-
}
|
|
2590
|
-
/**
|
|
2591
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2592
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2593
|
-
* 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
|
|
2594
|
-
*/
|
|
2595
|
-
toProtobufJSON(
|
|
2596
|
-
// @ts-ignore
|
|
2597
|
-
options) {
|
|
2598
|
-
return {
|
|
2599
|
-
taskIds: (this.taskIds || []).map(m => m.toProtobufJSON(options))
|
|
2600
|
-
};
|
|
2601
|
-
}
|
|
2602
|
-
}
|
|
2603
|
-
/**
|
|
2604
|
-
* Message implementation for armonik.api.grpc.v1.TaskIdWithStatus
|
|
2605
|
-
*/
|
|
2606
|
-
export class TaskIdWithStatus {
|
|
2607
|
-
static { this.id = 'armonik.api.grpc.v1.TaskIdWithStatus'; }
|
|
2608
|
-
/**
|
|
2609
|
-
* Deserialize binary data to message
|
|
2610
|
-
* @param instance message instance
|
|
2611
|
-
*/
|
|
2612
|
-
static deserializeBinary(bytes) {
|
|
2613
|
-
const instance = new TaskIdWithStatus();
|
|
2614
|
-
TaskIdWithStatus.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2615
|
-
return instance;
|
|
2616
|
-
}
|
|
2617
|
-
/**
|
|
2618
|
-
* Check all the properties and set default protobuf values if necessary
|
|
2619
|
-
* @param _instance message instance
|
|
2620
|
-
*/
|
|
2621
|
-
static refineValues(_instance) {
|
|
2622
|
-
_instance.taskId = _instance.taskId || undefined;
|
|
2623
|
-
_instance.status = _instance.status || 0;
|
|
2624
|
-
}
|
|
2625
|
-
/**
|
|
2626
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2627
|
-
* @param _instance message instance
|
|
2628
|
-
* @param _reader binary reader instance
|
|
2629
|
-
*/
|
|
2630
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2631
|
-
while (_reader.nextField()) {
|
|
2632
|
-
if (_reader.isEndGroup())
|
|
2633
|
-
break;
|
|
2634
|
-
switch (_reader.getFieldNumber()) {
|
|
2635
|
-
case 1:
|
|
2636
|
-
_instance.taskId = new TaskId();
|
|
2637
|
-
_reader.readMessage(_instance.taskId, TaskId.deserializeBinaryFromReader);
|
|
2638
|
-
break;
|
|
2639
|
-
case 2:
|
|
2640
|
-
_instance.status = _reader.readEnum();
|
|
2641
|
-
break;
|
|
2642
|
-
default:
|
|
2643
|
-
_reader.skipField();
|
|
2644
|
-
}
|
|
2645
|
-
}
|
|
2646
|
-
TaskIdWithStatus.refineValues(_instance);
|
|
2647
|
-
}
|
|
2648
|
-
/**
|
|
2649
|
-
* Serializes a message to binary format using provided binary reader
|
|
2650
|
-
* @param _instance message instance
|
|
2651
|
-
* @param _writer binary writer instance
|
|
2652
|
-
*/
|
|
2653
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
2654
|
-
if (_instance.taskId) {
|
|
2655
|
-
_writer.writeMessage(1, _instance.taskId, TaskId.serializeBinaryToWriter);
|
|
2656
|
-
}
|
|
2657
|
-
if (_instance.status) {
|
|
2658
|
-
_writer.writeEnum(2, _instance.status);
|
|
2659
|
-
}
|
|
2660
|
-
}
|
|
2661
|
-
/**
|
|
2662
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2663
|
-
* @param _value initial values object or instance of TaskIdWithStatus to deeply clone from
|
|
2664
|
-
*/
|
|
2665
|
-
constructor(_value) {
|
|
2666
|
-
_value = _value || {};
|
|
2667
|
-
this.taskId = _value.taskId ? new TaskId(_value.taskId) : undefined;
|
|
2668
|
-
this.status = _value.status;
|
|
2669
|
-
TaskIdWithStatus.refineValues(this);
|
|
2670
|
-
}
|
|
2671
|
-
get taskId() {
|
|
2672
|
-
return this._taskId;
|
|
2673
|
-
}
|
|
2674
|
-
set taskId(value) {
|
|
2675
|
-
this._taskId = value;
|
|
2676
|
-
}
|
|
2677
|
-
get status() {
|
|
2678
|
-
return this._status;
|
|
2679
|
-
}
|
|
2680
|
-
set status(value) {
|
|
2681
|
-
this._status = value;
|
|
2682
|
-
}
|
|
2683
|
-
/**
|
|
2684
|
-
* Serialize message to binary data
|
|
2685
|
-
* @param instance message instance
|
|
2686
|
-
*/
|
|
2687
|
-
serializeBinary() {
|
|
2688
|
-
const writer = new BinaryWriter();
|
|
2689
|
-
TaskIdWithStatus.serializeBinaryToWriter(this, writer);
|
|
2690
|
-
return writer.getResultBuffer();
|
|
2691
|
-
}
|
|
2692
|
-
/**
|
|
2693
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2694
|
-
*/
|
|
2695
|
-
toObject() {
|
|
2696
|
-
return {
|
|
2697
|
-
taskId: this.taskId ? this.taskId.toObject() : undefined,
|
|
2698
|
-
status: this.status
|
|
2699
|
-
};
|
|
2700
|
-
}
|
|
2701
|
-
/**
|
|
2702
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2703
|
-
*/
|
|
2704
|
-
toJSON() {
|
|
2705
|
-
return this.toObject();
|
|
2706
|
-
}
|
|
2707
|
-
/**
|
|
2708
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2709
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2710
|
-
* 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
|
|
2711
|
-
*/
|
|
2712
|
-
toProtobufJSON(
|
|
2713
|
-
// @ts-ignore
|
|
2714
|
-
options) {
|
|
2715
|
-
return {
|
|
2716
|
-
taskId: this.taskId ? this.taskId.toProtobufJSON(options) : null,
|
|
2717
|
-
status: armonikApiGrpcV1Task_status001.TaskStatus[this.status === null || this.status === undefined ? 0 : this.status]
|
|
2718
|
-
};
|
|
2719
|
-
}
|
|
2720
|
-
}
|
|
2721
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0cy5wYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZW9jb25zdWx0aW5nZnIvYXJtb25pay5hcGkuYW5ndWxhci9zcmMvbGliL2dlbmVyYXRlZC9vYmplY3RzLnBiLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG9CQUFvQjtBQUNwQixvQkFBb0I7QUFDcEIsY0FBYztBQUNkLEVBQUU7QUFDRiwyQkFBMkI7QUFDM0IsOENBQThDO0FBQzlDLE9BQU8sRUFJTCxrQkFBa0IsRUFDbkIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBYyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pFLE9BQU8sS0FBSyxpQkFBaUIsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEtBQUssOEJBQThCLE1BQU0sa0JBQWtCLENBQUM7QUFDbkU7O0dBRUc7QUFDSCxNQUFNLE9BQU8sS0FBSzthQUNULE9BQUUsR0FBRywyQkFBMkIsQ0FBQztJQUV4Qzs7O09BR0c7SUFDSCxNQUFNLENBQUMsaUJBQWlCLENBQUMsS0FBaUI7UUFDeEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUM3QixLQUFLLENBQUMsMkJBQTJCLENBQUMsUUFBUSxFQUFFLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDckUsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBZ0IsSUFBRyxDQUFDO0lBRXhDOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsMkJBQTJCLENBQUMsU0FBZ0IsRUFBRSxPQUFxQjtRQUN4RSxPQUFPLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQzNCLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRTtnQkFBRSxNQUFNO1lBRWhDLFFBQVEsT0FBTyxDQUFD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Ozs7O09BSUc7SUFDSCxjQUFjO0lBQ1osYUFBYTtJQUNiLE9BQStCO1FBRS9CLE9BQU87WUFDTCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDaEUsTUFBTSxFQUNKLDhCQUE4QixDQUFDLFVBQVUsQ0FDdkMsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FDcEU7U0FDSixDQUFDO0lBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIHRzbGludDpkaXNhYmxlICovXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcbi8vXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEVcbi8vIERPIE5PVCBNT0RJRlkgSVQhIFlPVVIgQ0hBTkdFUyBXSUxMIEJFIExPU1RcbmltcG9ydCB7XG4gIEdycGNNZXNzYWdlLFxuICBSZWN1cnNpdmVQYXJ0aWFsLFxuICBUb1Byb3RvYnVmSlNPTk9wdGlvbnMsXG4gIHVpbnQ4QXJyYXlUb0Jhc2U2NFxufSBmcm9tICdAbmd4LWdycGMvY29tbW9uJztcbmltcG9ydCB7IEJpbmFyeVJlYWRlciwgQmluYXJ5V3JpdGVyLCBCeXRlU291cmNlIH0gZnJvbSAnZ29vZ2xlLXByb3RvYnVmJztcbmltcG9ydCAqIGFzIGdvb2dsZVByb3RvYnVmMDAwIGZyb20gJ0BuZ3gtZ3JwYy93ZWxsLWtub3duLXR5cGVzJztcbmltcG9ydCAqIGFzIGFybW9uaWtBcGlHcnBjVjFUYXNrX3N0YXR1czAwMSBmcm9tICcuL3Rhc2stc3RhdHVzLnBiJztcbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3IgYXJtb25pay5hcGkuZ3JwYy52MS5FbXB0eVxuICovXG5leHBvcnQgY2xhc3MgRW1wdHkgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdhcm1vbmlrLmFwaS5ncnBjLnYxLkVtcHR5JztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRW1wdHkoKTtcbiAgICBFbXB0eS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaW5zdGFuY2UsIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IEVtcHR5KSB7fVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihfaW5zdGFuY2U6IEVtcHR5LCBfcmVhZGVyOiBCaW5hcnlSZWFkZXIpIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEVtcHR5LnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKF9pbnN0YW5jZTogRW1wdHksIF93cml0ZXI6IEJpbmFyeVdyaXRlcikge31cblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIEVtcHR5IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPEVtcHR5LkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICBFbXB0eS5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgRW1wdHkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogRW1wdHkuQXNPYmplY3Qge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogRW1wdHkuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBFbXB0eSB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgRW1wdHlcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge31cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgRW1wdHlcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge31cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLlRhc2tPcHRpb25zXG4gKi9cbmV4cG9ydCBjbGFzcyBUYXNrT3B0aW9ucyBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ2FybW9uaWsuYXBpLmdycGMudjEuVGFza09wdGlvbnMnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBUYXNrT3B0aW9ucygpO1xuICAgIFRhc2tPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihpbnN0YW5jZSwgbmV3IEJpbmFyeVJlYWRlcihieXRlcykpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogVGFza09wdGlvbnMpIHtcbiAgICBfaW5zdGFuY2Uub3B0aW9ucyA9IF9pbnN0YW5jZS5vcHRpb25zIHx8IHt9O1xuICAgIF9pbnN0YW5jZS5tYXhEdXJhdGlvbiA9IF9pbnN0YW5jZS5tYXhEdXJhdGlvbiB8fCB1bmRlZmluZWQ7XG4gICAgX2luc3RhbmNlLm1heFJldHJpZXMgPSBfaW5zdGFuY2UubWF4UmV0cmllcyB8fCAwO1xuICAgIF9pbnN0YW5jZS5wcmlvcml0eSA9IF9pbnN0YW5jZS5wcmlvcml0eSB8fCAwO1xuICAgIF9pbnN0YW5jZS5wYXJ0aXRpb25JZCA9IF9pbnN0YW5jZS5wYXJ0aXRpb25JZCB8fCAnJztcbiAgICBfaW5zdGFuY2UuYXBwbGljYXRpb25OYW1lID0gX2luc3RhbmNlLmFwcGxpY2F0aW9uTmFtZSB8fCAnJztcbiAgICBfaW5zdGFuY2UuYXBwbGljYXRpb25WZXJzaW9uID0gX2luc3RhbmNlLmFwcGxpY2F0aW9uVmVyc2lvbiB8fCAnJztcbiAgICBfaW5zdGFuY2UuYXBwbGljYXRpb25OYW1lc3BhY2UgPSBfaW5zdGFuY2UuYXBwbGljYXRpb25OYW1lc3BhY2UgfHwgJyc7XG4gICAgX2luc3RhbmNlLmFwcGxpY2F0aW9uU2VydmljZSA9IF9pbnN0YW5jZS5hcHBsaWNhdGlvblNlcnZpY2UgfHwgJyc7XG4gICAgX2luc3RhbmNlLmVuZ2luZVR5cGUgPSBfaW5zdGFuY2UuZW5naW5lVHlwZSB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IFRhc2tPcHRpb25zLFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGNvbnN0IG1zZ18xID0ge30gYXMgYW55O1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBtc2dfMSxcbiAgICAgICAgICAgIFRhc2tPcHRpb25zLk9wdGlvbnNFbnRyeS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIF9pbnN0YW5jZS5vcHRpb25zID0gX2luc3RhbmNlLm9wdGlvbnMgfHwge307XG4gICAgICAgICAgX2luc3RhbmNlLm9wdGlvbnNbbXNnXzEua2V5XSA9IG1zZ18xLnZhbHVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgX2luc3RhbmNlLm1heER1cmF0aW9uID0gbmV3IGdvb2dsZVByb3RvYnVmMDAwLkR1cmF0aW9uKCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5tYXhEdXJhdGlvbixcbiAgICAgICAgICAgIGdvb2dsZVByb3RvYnVmMDAwLkR1cmF0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBfaW5zdGFuY2UubWF4UmV0cmllcyA9IF9yZWFkZXIucmVhZEludDMyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBfaW5zdGFuY2UucHJpb3JpdHkgPSBfcmVhZGVyLnJlYWRJbnQzMigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgX2luc3RhbmNlLnBhcnRpdGlvbklkID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBfaW5zdGFuY2UuYXBwbGljYXRpb25OYW1lID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBfaW5zdGFuY2UuYXBwbGljYXRpb25WZXJzaW9uID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICBfaW5zdGFuY2UuYXBwbGljYXRpb25OYW1lc3BhY2UgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIF9pbnN0YW5jZS5hcHBsaWNhdGlvblNlcnZpY2UgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBfaW5zdGFuY2UuZW5naW5lVHlwZSA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgVGFza09wdGlvbnMucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoXG4gICAgX2luc3RhbmNlOiBUYXNrT3B0aW9ucyxcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKCEhX2luc3RhbmNlLm9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGtleXNfMSA9IE9iamVjdC5rZXlzKF9pbnN0YW5jZS5vcHRpb25zIGFzIGFueSk7XG5cbiAgICAgIGlmIChrZXlzXzEubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHJlcGVhdGVkXzEgPSBrZXlzXzFcbiAgICAgICAgICAubWFwKGtleSA9PiAoeyBrZXk6IGtleSwgdmFsdWU6IChfaW5zdGFuY2Uub3B0aW9ucyBhcyBhbnkpW2tleV0gfSkpXG4gICAgICAgICAgLnJlZHVjZSgociwgdikgPT4gWy4uLnIsIHZdLCBbXSBhcyBhbnlbXSk7XG5cbiAgICAgICAgX3dyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgICAgICAxLFxuICAgICAgICAgIHJlcGVhdGVkXzEsXG4gICAgICAgICAgVGFza09wdGlvbnMuT3B0aW9uc0VudHJ5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UubWF4RHVyYXRpb24pIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICAyLFxuICAgICAgICBfaW5zdGFuY2UubWF4RHVyYXRpb24gYXMgYW55LFxuICAgICAgICBnb29nbGVQcm90b2J1ZjAwMC5EdXJhdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5tYXhSZXRyaWVzKSB7XG4gICAgICBfd3JpdGVyLndyaXRlSW50MzIoMywgX2luc3RhbmNlLm1heFJldHJpZXMpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnByaW9yaXR5KSB7XG4gICAgICBfd3JpdGVyLndyaXRlSW50MzIoNCwgX2luc3RhbmNlLnByaW9yaXR5KTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5wYXJ0aXRpb25JZCkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZyg1LCBfaW5zdGFuY2UucGFydGl0aW9uSWQpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmFwcGxpY2F0aW9uTmFtZSkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZyg2LCBfaW5zdGFuY2UuYXBwbGljYXRpb25OYW1lKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5hcHBsaWNhdGlvblZlcnNpb24pIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoNywgX2luc3RhbmNlLmFwcGxpY2F0aW9uVmVyc2lvbik7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UuYXBwbGljYXRpb25OYW1lc3BhY2UpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoOCwgX2luc3RhbmNlLmFwcGxpY2F0aW9uTmFtZXNwYWNlKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5hcHBsaWNhdGlvblNlcnZpY2UpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoOSwgX2luc3RhbmNlLmFwcGxpY2F0aW9uU2VydmljZSk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UuZW5naW5lVHlwZSkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygxMCwgX2luc3RhbmNlLmVuZ2luZVR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX29wdGlvbnM6IHsgW3Byb3A6IHN0cmluZ106IHN0cmluZyB9O1xuICBwcml2YXRlIF9tYXhEdXJhdGlvbj86IGdvb2dsZVByb3RvYnVmMDAwLkR1cmF0aW9uO1xuICBwcml2YXRlIF9tYXhSZXRyaWVzOiBudW1iZXI7XG4gIHByaXZhdGUgX3ByaW9yaXR5OiBudW1iZXI7XG4gIHByaXZhdGUgX3BhcnRpdGlvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2FwcGxpY2F0aW9uTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9hcHBsaWNhdGlvblZlcnNpb246IHN0cmluZztcbiAgcHJpdmF0ZSBfYXBwbGljYXRpb25OYW1lc3BhY2U6IHN0cmluZztcbiAgcHJpdmF0ZSBfYXBwbGljYXRpb25TZXJ2aWNlOiBzdHJpbmc7XG4gIHByaXZhdGUgX2VuZ2luZVR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIFRhc2tPcHRpb25zIHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPFRhc2tPcHRpb25zLkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICAodGhpcy5vcHRpb25zID0gX3ZhbHVlIS5vcHRpb25zXG4gICAgICA/IE9iamVjdC5rZXlzKF92YWx1ZSEub3B0aW9ucykucmVkdWNlKFxuICAgICAgICAgIChyLCBrKSA9PiAoeyAuLi5yLCBba106IF92YWx1ZSEub3B0aW9ucyFba10gfSksXG4gICAgICAgICAge31cbiAgICAgICAgKVxuICAgICAgOiB7fSksXG4gICAgICAodGhpcy5tYXhEdXJhdGlvbiA9IF92YWx1ZS5tYXhEdXJhdGlvblxuICAgICAgICA/IG5ldyBnb29nbGVQcm90b2J1ZjAwMC5EdXJhdGlvbihfdmFsdWUubWF4RHVyYXRpb24pXG4gICAgICAgIDogdW5kZWZpbmVkKTtcbiAgICB0aGlzLm1heFJldHJpZXMgPSBfdmFsdWUubWF4UmV0cmllcztcbiAgICB0aGlzLnByaW9yaXR5ID0gX3ZhbHVlLnByaW9yaXR5O1xuICAgIHRoaXMucGFydGl0aW9uSWQgPSBfdmFsdWUucGFydGl0aW9uSWQ7XG4gICAgdGhpcy5hcHBsaWNhdGlvbk5hbWUgPSBfdmFsdWUuYXBwbGljYXRpb25OYW1lO1xuICAgIHRoaXMuYXBwbGljYXRpb25WZXJzaW9uID0gX3ZhbHVlLmFwcGxpY2F0aW9uVmVyc2lvbjtcbiAgICB0aGlzLmFwcGxpY2F0aW9uTmFtZXNwYWNlID0gX3ZhbHVlLmFwcGxpY2F0aW9uTmFtZXNwYWNlO1xuICAgIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlID0gX3ZhbHVlLmFwcGxpY2F0aW9uU2VydmljZTtcbiAgICB0aGlzLmVuZ2luZVR5cGUgPSBfdmFsdWUuZW5naW5lVHlwZTtcbiAgICBUYXNrT3B0aW9ucy5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IG9wdGlvbnMoKTogeyBbcHJvcDogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG4gIHNldCBvcHRpb25zKHZhbHVlOiB7IFtwcm9wOiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgIHRoaXMuX29wdGlvbnMgPSB2YWx1ZTtcbiAgfVxuICBnZXQgbWF4RHVyYXRpb24oKTogZ29vZ2xlUHJvdG9idWYwMDAuRHVyYXRpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9tYXhEdXJhdGlvbjtcbiAgfVxuICBzZXQgbWF4RHVyYXRpb24odmFsdWU6IGdvb2dsZVByb3RvYnVmMDAwLkR1cmF0aW9uIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbWF4RHVyYXRpb24gPSB2YWx1ZTtcbiAgfVxuICBnZXQgbWF4UmV0cmllcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXhSZXRyaWVzO1xuICB9XG4gIHNldCBtYXhSZXRyaWVzKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhSZXRyaWVzID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHByaW9yaXR5KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3ByaW9yaXR5O1xuICB9XG4gIHNldCBwcmlvcml0eSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fcHJpb3JpdHkgPSB2YWx1ZTtcbiAgfVxuICBnZXQgcGFydGl0aW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcGFydGl0aW9uSWQ7XG4gIH1cbiAgc2V0IHBhcnRpdGlvbklkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wYXJ0aXRpb25JZCA9IHZhbHVlO1xuICB9XG4gIGdldCBhcHBsaWNhdGlvbk5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25OYW1lO1xuICB9XG4gIHNldCBhcHBsaWNhdGlvbk5hbWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uTmFtZSA9IHZhbHVlO1xuICB9XG4gIGdldCBhcHBsaWNhdGlvblZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25WZXJzaW9uO1xuICB9XG4gIHNldCBhcHBsaWNhdGlvblZlcnNpb24odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uVmVyc2lvbiA9IHZhbHVlO1xuICB9XG4gIGdldCBhcHBsaWNhdGlvbk5hbWVzcGFjZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvbk5hbWVzcGFjZTtcbiAgfVxuICBzZXQgYXBwbGljYXRpb25OYW1lc3BhY2UodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uTmFtZXNwYWNlID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGFwcGxpY2F0aW9uU2VydmljZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvblNlcnZpY2U7XG4gIH1cbiAgc2V0IGFwcGxpY2F0aW9uU2VydmljZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fYXBwbGljYXRpb25TZXJ2aWNlID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGVuZ2luZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW5naW5lVHlwZTtcbiAgfVxuICBzZXQgZW5naW5lVHlwZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW5naW5lVHlwZSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIFRhc2tPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IFRhc2tPcHRpb25zLkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zXG4gICAgICAgID8gT2JqZWN0LmtleXModGhpcy5vcHRpb25zKS5yZWR1Y2UoXG4gICAgICAgICAgICAociwgaykgPT4gKHsgLi4uciwgW2tdOiB0aGlzLm9wdGlvbnMhW2tdIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApXG4gICAgICAgIDoge30sXG4gICAgICBtYXhEdXJhdGlvbjogdGhpcy5tYXhEdXJhdGlvbiA/IHRoaXMubWF4RHVyYXRpb24udG9PYmplY3QoKSA6IHVuZGVmaW5lZCxcbiAgICAgIG1heFJldHJpZXM6IHRoaXMubWF4UmV0cmllcyxcbiAgICAgIHByaW9yaXR5OiB0aGlzLnByaW9yaXR5LFxuICAgICAgcGFydGl0aW9uSWQ6IHRoaXMucGFydGl0aW9uSWQsXG4gICAgICBhcHBsaWNhdGlvbk5hbWU6IHRoaXMuYXBwbGljYXRpb25OYW1lLFxuICAgICAgYXBwbGljYXRpb25WZXJzaW9uOiB0aGlzLmFwcGxpY2F0aW9uVmVyc2lvbixcbiAgICAgIGFwcGxpY2F0aW9uTmFtZXNwYWNlOiB0aGlzLmFwcGxpY2F0aW9uTmFtZXNwYWNlLFxuICAgICAgYXBwbGljYXRpb25TZXJ2aWNlOiB0aGlzLmFwcGxpY2F0aW9uU2VydmljZSxcbiAgICAgIGVuZ2luZVR5cGU6IHRoaXMuZW5naW5lVHlwZVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IFRhc2tPcHRpb25zLkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zXG4gICAgICAgID8gT2JqZWN0LmtleXModGhpcy5vcHRpb25zKS5yZWR1Y2UoXG4gICAgICAgICAgICAociwgaykgPT4gKHsgLi4uciwgW2tdOiB0aGlzLm9wdGlvbnMhW2tdIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApXG4gICAgICAgIDoge30sXG4gICAgICBtYXhEdXJhdGlvbjogdGhpcy5tYXhEdXJhdGlvblxuICAgICAgICA/IHRoaXMubWF4RHVyYXRpb24udG9Qcm90b2J1ZkpTT04ob3B0aW9ucylcbiAgICAgICAgOiBudWxsLFxuICAgICAgbWF4UmV0cmllczogdGhpcy5tYXhSZXRyaWVzLFxuICAgICAgcHJpb3JpdHk6IHRoaXMucHJpb3JpdHksXG4gICAgICBwYXJ0aXRpb25JZDogdGhpcy5wYXJ0aXRpb25JZCxcbiAgICAgIGFwcGxpY2F0aW9uTmFtZTogdGhpcy5hcHBsaWNhdGlvbk5hbWUsXG4gICAgICBhcHBsaWNhdGlvblZlcnNpb246IHRoaXMuYXBwbGljYXRpb25WZXJzaW9uLFxuICAgICAgYXBwbGljYXRpb25OYW1lc3BhY2U6IHRoaXMuYXBwbGljYXRpb25OYW1lc3BhY2UsXG4gICAgICBhcHBsaWNhdGlvblNlcnZpY2U6IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLFxuICAgICAgZW5naW5lVHlwZTogdGhpcy5lbmdpbmVUeXBlXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBUYXNrT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgVGFza09wdGlvbnNcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIG9wdGlvbnM6IHsgW3Byb3A6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIG1heER1cmF0aW9uPzogZ29vZ2xlUHJvdG9idWYwMDAuRHVyYXRpb24uQXNPYmplY3Q7XG4gICAgbWF4UmV0cmllczogbnVtYmVyO1xuICAgIHByaW9yaXR5OiBudW1iZXI7XG4gICAgcGFydGl0aW9uSWQ6IHN0cmluZztcbiAgICBhcHBsaWNhdGlvbk5hbWU6IHN0cmluZztcbiAgICBhcHBsaWNhdGlvblZlcnNpb246IHN0cmluZztcbiAgICBhcHBsaWNhdGlvbk5hbWVzcGFjZTogc3RyaW5nO1xuICAgIGFwcGxpY2F0aW9uU2VydmljZTogc3RyaW5nO1xuICAgIGVuZ2luZVR5cGU6IHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBUYXNrT3B0aW9uc1xuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgb3B0aW9uczogeyBbcHJvcDogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgbWF4RHVyYXRpb246IGdvb2dsZVByb3RvYnVmMDAwLkR1cmF0aW9uLkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgICBtYXhSZXRyaWVzOiBudW1iZXI7XG4gICAgcHJpb3JpdHk6IG51bWJlcjtcbiAgICBwYXJ0aXRpb25JZDogc3RyaW5nO1xuICAgIGFwcGxpY2F0aW9uTmFtZTogc3RyaW5nO1xuICAgIGFwcGxpY2F0aW9uVmVyc2lvbjogc3RyaW5nO1xuICAgIGFwcGxpY2F0aW9uTmFtZXNwYWNlOiBzdHJpbmc7XG4gICAgYXBwbGljYXRpb25TZXJ2aWNlOiBzdHJpbmc7XG4gICAgZW5naW5lVHlwZTogc3RyaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGFybW9uaWsuYXBpLmdycGMudjEuVGFza09wdGlvbnMuT3B0aW9uc0VudHJ5XG4gICAqL1xuICBleHBvcnQgY2xhc3MgT3B0aW9uc0VudHJ5IGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICAgIHN0YXRpYyBpZCA9ICdhcm1vbmlrLmFwaS5ncnBjLnYxLlRhc2tPcHRpb25zLk9wdGlvbnNFbnRyeSc7XG5cbiAgICAvKipcbiAgICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IE9wdGlvbnNFbnRyeSgpO1xuICAgICAgT3B0aW9uc0VudHJ5LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgICApO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBPcHRpb25zRW50cnkpIHtcbiAgICAgIF9pbnN0YW5jZS5rZXkgPSBfaW5zdGFuY2Uua2V5IHx8ICcnO1xuICAgICAgX2luc3RhbmNlLnZhbHVlID0gX2luc3RhbmNlLnZhbHVlIHx8ICcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBfaW5zdGFuY2U6IE9wdGlvbnNFbnRyeSxcbiAgICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICAgICkge1xuICAgICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIF9pbnN0YW5jZS5rZXkgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIF9pbnN0YW5jZS52YWx1ZSA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgT3B0aW9uc0VudHJ5LnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoXG4gICAgICBfaW5zdGFuY2U6IE9wdGlvbnNFbnRyeSxcbiAgICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICAgICkge1xuICAgICAgaWYgKF9pbnN0YW5jZS5rZXkpIHtcbiAgICAgICAgX3dyaXRlci53cml0ZVN0cmluZygxLCBfaW5zdGFuY2Uua2V5KTtcbiAgICAgIH1cbiAgICAgIGlmIChfaW5zdGFuY2UudmFsdWUpIHtcbiAgICAgICAgX3dyaXRlci53cml0ZVN0cmluZygyLCBfaW5zdGFuY2UudmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2tleTogc3RyaW5nO1xuICAgIHByaXZhdGUgX3ZhbHVlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBPcHRpb25zRW50cnkgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPE9wdGlvbnNFbnRyeS5Bc09iamVjdD4pIHtcbiAgICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICAgIHRoaXMua2V5ID0gX3ZhbHVlLmtleTtcbiAgICAgIHRoaXMudmFsdWUgPSBfdmFsdWUudmFsdWU7XG4gICAgICBPcHRpb25zRW50cnkucmVmaW5lVmFsdWVzKHRoaXMpO1xuICAgIH1cbiAgICBnZXQga2V5KCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5fa2V5O1xuICAgIH1cbiAgICBzZXQga2V5KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgIHRoaXMuX2tleSA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgdmFsdWUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG4gICAgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqL1xuICAgIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICAgIE9wdGlvbnNFbnRyeS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICAgKi9cbiAgICB0b09iamVjdCgpOiBPcHRpb25zRW50cnkuQXNPYmplY3Qge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiB0aGlzLmtleSxcbiAgICAgICAgdmFsdWU6IHRoaXMudmFsdWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAgICovXG4gICAgdG9Qcm90b2J1ZkpTT04oXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICAgKTogT3B0aW9uc0VudHJ5LkFzUHJvdG9idWZKU09OIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleTogdGhpcy5rZXksXG4gICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBleHBvcnQgbW9kdWxlIE9wdGlvbnNFbnRyeSB7XG4gICAgLyoqXG4gICAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIE9wdGlvbnNFbnRyeVxuICAgICAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgICAga2V5OiBzdHJpbmc7XG4gICAgICB2YWx1ZTogc3RyaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIE9wdGlvbnNFbnRyeVxuICAgICAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgICAga2V5OiBzdHJpbmc7XG4gICAgICB2YWx1ZTogc3RyaW5nO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGFybW9uaWsuYXBpLmdycGMudjEuU2Vzc2lvblxuICovXG5leHBvcnQgY2xhc3MgU2Vzc2lvbiBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ2FybW9uaWsuYXBpLmdycGMudjEuU2Vzc2lvbic7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFNlc3Npb24oKTtcbiAgICBTZXNzaW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihpbnN0YW5jZSwgbmV3IEJpbmFyeVJlYWRlcihieXRlcykpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogU2Vzc2lvbikge1xuICAgIF9pbnN0YW5jZS5pZCA9IF9pbnN0YW5jZS5pZCB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IFNlc3Npb24sXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgX2luc3RhbmNlLmlkID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBTZXNzaW9uLnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKF9pbnN0YW5jZTogU2Vzc2lvbiwgX3dyaXRlcjogQmluYXJ5V3JpdGVyKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5pZCkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygxLCBfaW5zdGFuY2UuaWQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBTZXNzaW9uIHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPFNlc3Npb24uQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMuaWQgPSBfdmFsdWUuaWQ7XG4gICAgU2Vzc2lvbi5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG4gIHNldCBpZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5faWQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBTZXNzaW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IFNlc3Npb24uQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5pZFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IFNlc3Npb24uQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5pZFxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgU2Vzc2lvbiB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgU2Vzc2lvblxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgaWQ6IHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBTZXNzaW9uXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBpZDogc3RyaW5nO1xuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3IgYXJtb25pay5hcGkuZ3JwYy52MS5Db25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uIGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnYXJtb25pay5hcGkuZ3JwYy52MS5Db25maWd1cmF0aW9uJztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQ29uZmlndXJhdGlvbigpO1xuICAgIENvbmZpZ3VyYXRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBDb25maWd1cmF0aW9uKSB7XG4gICAgX2luc3RhbmNlLmRhdGFDaHVua01heFNpemUgPSBfaW5zdGFuY2UuZGF0YUNodW5rTWF4U2l6ZSB8fCAwO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgIF9pbnN0YW5jZTogQ29uZmlndXJhdGlvbixcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBfaW5zdGFuY2UuZGF0YUNodW5rTWF4U2l6ZSA9IF9yZWFkZXIucmVhZEludDMyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBDb25maWd1cmF0aW9uLnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogQ29uZmlndXJhdGlvbixcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5kYXRhQ2h1bmtNYXhTaXplKSB7XG4gICAgICBfd3JpdGVyLndyaXRlSW50MzIoMSwgX2luc3RhbmNlLmRhdGFDaHVua01heFNpemUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2RhdGFDaHVua01heFNpemU6IG51bWJlcjtcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIENvbmZpZ3VyYXRpb24gdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8Q29uZmlndXJhdGlvbi5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5kYXRhQ2h1bmtNYXhTaXplID0gX3ZhbHVlLmRhdGFDaHVua01heFNpemU7XG4gICAgQ29uZmlndXJhdGlvbi5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IGRhdGFDaHVua01heFNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YUNodW5rTWF4U2l6ZTtcbiAgfVxuICBzZXQgZGF0YUNodW5rTWF4U2l6ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZGF0YUNodW5rTWF4U2l6ZSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIENvbmZpZ3VyYXRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogQ29uZmlndXJhdGlvbi5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGFDaHVua01heFNpemU6IHRoaXMuZGF0YUNodW5rTWF4U2l6ZVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IENvbmZpZ3VyYXRpb24uQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhQ2h1bmtNYXhTaXplOiB0aGlzLmRhdGFDaHVua01heFNpemVcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIENvbmZpZ3VyYXRpb25cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIGRhdGFDaHVua01heFNpemU6IG51bWJlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBDb25maWd1cmF0aW9uXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBkYXRhQ2h1bmtNYXhTaXplOiBudW1iZXI7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLk91dHB1dFxuICovXG5leHBvcnQgY2xhc3MgT3V0cHV0IGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnYXJtb25pay5hcGkuZ3JwYy52MS5PdXRwdXQnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBPdXRwdXQoKTtcbiAgICBPdXRwdXQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGluc3RhbmNlLCBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKSk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBPdXRwdXQpIHt9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKF9pbnN0YW5jZTogT3V0cHV0LCBfcmVhZGVyOiBCaW5hcnlSZWFkZXIpIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIF9pbnN0YW5jZS5vayA9IG5ldyBFbXB0eSgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoX2luc3RhbmNlLm9rLCBFbXB0eS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgX2luc3RhbmNlLmVycm9yID0gbmV3IE91dHB1dC5FcnJvcigpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2UuZXJyb3IsXG4gICAgICAgICAgICBPdXRwdXQuRXJyb3IuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIE91dHB1dC5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihfaW5zdGFuY2U6IE91dHB1dCwgX3dyaXRlcjogQmluYXJ5V3JpdGVyKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5vaykge1xuICAgICAgX3dyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAgIDIsXG4gICAgICAgIF9pbnN0YW5jZS5vayBhcyBhbnksXG4gICAgICAgIEVtcHR5LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmVycm9yKSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMyxcbiAgICAgICAgX2luc3RhbmNlLmVycm9yIGFzIGFueSxcbiAgICAgICAgT3V0cHV0LkVycm9yLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX29rPzogRW1wdHk7XG4gIHByaXZhdGUgX2Vycm9yPzogT3V0cHV0LkVycm9yO1xuXG4gIHByaXZhdGUgX3R5cGU6IE91dHB1dC5UeXBlQ2FzZSA9IE91dHB1dC5UeXBlQ2FzZS5ub25lO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgT3V0cHV0IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPE91dHB1dC5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5vayA9IF92YWx1ZS5vayA/IG5ldyBFbXB0eShfdmFsdWUub2spIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuZXJyb3IgPSBfdmFsdWUuZXJyb3IgPyBuZXcgT3V0cHV0LkVycm9yKF92YWx1ZS5lcnJvcikgOiB1bmRlZmluZWQ7XG4gICAgT3V0cHV0LnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgb2soKTogRW1wdHkgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9vaztcbiAgfVxuICBzZXQgb2sodmFsdWU6IEVtcHR5IHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX2Vycm9yID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fdHlwZSA9IE91dHB1dC5UeXBlQ2FzZS5vaztcbiAgICB9XG4gICAgdGhpcy5fb2sgPSB2YWx1ZTtcbiAgfVxuICBnZXQgZXJyb3IoKTogT3V0cHV0LkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZXJyb3I7XG4gIH1cbiAgc2V0IGVycm9yKHZhbHVlOiBPdXRwdXQuRXJyb3IgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fb2sgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl90eXBlID0gT3V0cHV0LlR5cGVDYXNlLmVycm9yO1xuICAgIH1cbiAgICB0aGlzLl9lcnJvciA9IHZhbHVlO1xuICB9XG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiB0aGlzLl90eXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIE91dHB1dC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBPdXRwdXQuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBvazogdGhpcy5vayA/IHRoaXMub2sudG9PYmplY3QoKSA6IHVuZGVmaW5lZCxcbiAgICAgIGVycm9yOiB0aGlzLmVycm9yID8gdGhpcy5lcnJvci50b09iamVjdCgpIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogT3V0cHV0LkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2s6IHRoaXMub2sgPyB0aGlzLm9rLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpIDogbnVsbCxcbiAgICAgIGVycm9yOiB0aGlzLmVycm9yID8gdGhpcy5lcnJvci50b1Byb3RvYnVmSlNPTihvcHRpb25zKSA6IG51bGxcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIE91dHB1dCB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgT3V0cHV0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICBvaz86IEVtcHR5LkFzT2JqZWN0O1xuICAgIGVycm9yPzogT3V0cHV0LkVycm9yLkFzT2JqZWN0O1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIE91dHB1dFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgb2s6IEVtcHR5LkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgICBlcnJvcjogT3V0cHV0LkVycm9yLkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgfVxuICBleHBvcnQgZW51bSBUeXBlQ2FzZSB7XG4gICAgbm9uZSA9IDAsXG4gICAgb2sgPSAxLFxuICAgIGVycm9yID0gMlxuICB9XG4gIC8qKlxuICAgKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLk91dHB1dC5FcnJvclxuICAgKi9cbiAgZXhwb3J0IGNsYXNzIEVycm9yIGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICAgIHN0YXRpYyBpZCA9ICdhcm1vbmlrLmFwaS5ncnBjLnYxLk91dHB1dC5FcnJvcic7XG5cbiAgICAvKipcbiAgICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEVycm9yKCk7XG4gICAgICBFcnJvci5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaW5zdGFuY2UsIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogRXJyb3IpIHtcbiAgICAgIF9pbnN0YW5jZS5kZXRhaWxzID0gX2luc3RhbmNlLmRldGFpbHMgfHwgJyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIF9pbnN0YW5jZTogRXJyb3IsXG4gICAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgICApIHtcbiAgICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBfaW5zdGFuY2UuZGV0YWlscyA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgRXJyb3IucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihfaW5zdGFuY2U6IEVycm9yLCBfd3JpdGVyOiBCaW5hcnlXcml0ZXIpIHtcbiAgICAgIGlmIChfaW5zdGFuY2UuZGV0YWlscykge1xuICAgICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDEsIF9pbnN0YW5jZS5kZXRhaWxzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9kZXRhaWxzOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBFcnJvciB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8RXJyb3IuQXNPYmplY3Q+KSB7XG4gICAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgICB0aGlzLmRldGFpbHMgPSBfdmFsdWUuZGV0YWlscztcbiAgICAgIEVycm9yLnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgICB9XG4gICAgZ2V0IGRldGFpbHMoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLl9kZXRhaWxzO1xuICAgIH1cbiAgICBzZXQgZGV0YWlscyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICB0aGlzLl9kZXRhaWxzID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqL1xuICAgIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICAgIEVycm9yLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgICAqL1xuICAgIHRvT2JqZWN0KCk6IEVycm9yLkFzT2JqZWN0IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRldGFpbHM6IHRoaXMuZGV0YWlsc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICAgKi9cbiAgICB0b1Byb3RvYnVmSlNPTihcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgICApOiBFcnJvci5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZXRhaWxzOiB0aGlzLmRldGFpbHNcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGV4cG9ydCBtb2R1bGUgRXJyb3Ige1xuICAgIC8qKlxuICAgICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBFcnJvclxuICAgICAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgICAgZGV0YWlsczogc3RyaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIEVycm9yXG4gICAgICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgICBkZXRhaWxzOiBzdHJpbmc7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3IgYXJtb25pay5hcGkuZ3JwYy52MS5UYXNrUmVxdWVzdFxuICovXG5leHBvcnQgY2xhc3MgVGFza1JlcXVlc3QgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdhcm1vbmlrLmFwaS5ncnBjLnYxLlRhc2tSZXF1ZXN0JztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgVGFza1JlcXVlc3QoKTtcbiAgICBUYXNrUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaW5zdGFuY2UsIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IFRhc2tSZXF1ZXN0KSB7XG4gICAgX2luc3RhbmNlLmV4cGVjdGVkT3V0cHV0S2V5cyA9IF9pbnN0YW5jZS5leHBlY3RlZE91dHB1dEtleXMgfHwgW107XG4gICAgX2luc3RhbmNlLmRhdGFEZXBlbmRlbmNpZXMgPSBfaW5zdGFuY2UuZGF0YURlcGVuZGVuY2llcyB8fCBbXTtcbiAgICBfaW5zdGFuY2UucGF5bG9hZCA9IF9pbnN0YW5jZS5wYXlsb2FkIHx8IG5ldyBVaW50OEFycmF5KCk7XG4gICAgX2luc3RhbmNlLnBheWxvYWROYW1lID0gX2luc3RhbmNlLnBheWxvYWROYW1lIHx8ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgIF9pbnN0YW5jZTogVGFza1JlcXVlc3QsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgKF9pbnN0YW5jZS5leHBlY3RlZE91dHB1dEtleXMgPVxuICAgICAgICAgICAgX2luc3RhbmNlLmV4cGVjdGVkT3V0cHV0S2V5cyB8fCBbXSkucHVzaChfcmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAoX2luc3RhbmNlLmRhdGFEZXBlbmRlbmNpZXMgPSBfaW5zdGFuY2UuZGF0YURlcGVuZGVuY2llcyB8fCBbXSkucHVzaChcbiAgICAgICAgICAgIF9yZWFkZXIucmVhZFN0cmluZygpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIF9pbnN0YW5jZS5wYXlsb2FkID0gX3JlYWRlci5yZWFkQnl0ZXMoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIF9pbnN0YW5jZS5wYXlsb2FkTmFtZSA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgVGFza1JlcXVlc3QucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoXG4gICAgX2luc3RhbmNlOiBUYXNrUmVxdWVzdCxcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5leHBlY3RlZE91dHB1dEtleXMgJiYgX2luc3RhbmNlLmV4cGVjdGVkT3V0cHV0S2V5cy5sZW5ndGgpIHtcbiAgICAgIF93cml0ZXIud3JpdGVSZXBlYXRlZFN0cmluZygxLCBfaW5zdGFuY2UuZXhwZWN0ZWRPdXRwdXRLZXlzKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5kYXRhRGVwZW5kZW5jaWVzICYmIF9pbnN0YW5jZS5kYXRhRGVwZW5kZW5jaWVzLmxlbmd0aCkge1xuICAgICAgX3dyaXRlci53cml0ZVJlcGVhdGVkU3RyaW5nKDIsIF9pbnN0YW5jZS5kYXRhRGVwZW5kZW5jaWVzKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5wYXlsb2FkICYmIF9pbnN0YW5jZS5wYXlsb2FkLmxlbmd0aCkge1xuICAgICAgX3dyaXRlci53cml0ZUJ5dGVzKDMsIF9pbnN0YW5jZS5wYXlsb2FkKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5wYXlsb2FkTmFtZSkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZyg0LCBfaW5zdGFuY2UucGF5bG9hZE5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2V4cGVjdGVkT3V0cHV0S2V5czogc3RyaW5nW107XG4gIHByaXZhdGUgX2RhdGFEZXBlbmRlbmNpZXM6IHN0cmluZ1tdO1xuICBwcml2YXRlIF9wYXlsb2FkOiBVaW50OEFycmF5O1xuICBwcml2YXRlIF9wYXlsb2FkTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgVGFza1JlcXVlc3QgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8VGFza1JlcXVlc3QuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMuZXhwZWN0ZWRPdXRwdXRLZXlzID0gKF92YWx1ZS5leHBlY3RlZE91dHB1dEtleXMgfHwgW10pLnNsaWNlKCk7XG4gICAgdGhpcy5kYXRhRGVwZW5kZW5jaWVzID0gKF92YWx1ZS5kYXRhRGVwZW5kZW5jaWVzIHx8IFtdKS5zbGljZSgpO1xuICAgIHRoaXMucGF5bG9hZCA9IF92YWx1ZS5wYXlsb2FkO1xuICAgIHRoaXMucGF5bG9hZE5hbWUgPSBfdmFsdWUucGF5bG9hZE5hbWU7XG4gICAgVGFza1JlcXVlc3QucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBleHBlY3RlZE91dHB1dEtleXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9leHBlY3RlZE91dHB1dEtleXM7XG4gIH1cbiAgc2V0IGV4cGVjdGVkT3V0cHV0S2V5cyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLl9leHBlY3RlZE91dHB1dEtleXMgPSB2YWx1ZTtcbiAgfVxuICBnZXQgZGF0YURlcGVuZGVuY2llcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFEZXBlbmRlbmNpZXM7XG4gIH1cbiAgc2V0IGRhdGFEZXBlbmRlbmNpZXModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fZGF0YURlcGVuZGVuY2llcyA9IHZhbHVlO1xuICB9XG4gIGdldCBwYXlsb2FkKCk6IFVpbnQ4QXJyYXkge1xuICAgIHJldHVybiB0aGlzLl9wYXlsb2FkO1xuICB9XG4gIHNldCBwYXlsb2FkKHZhbHVlOiBVaW50OEFycmF5KSB7XG4gICAgdGhpcy5fcGF5bG9hZCA9IHZhbHVlO1xuICB9XG4gIGdldCBwYXlsb2FkTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wYXlsb2FkTmFtZTtcbiAgfVxuICBzZXQgcGF5bG9hZE5hbWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3BheWxvYWROYW1lID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgVGFza1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogVGFza1JlcXVlc3QuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBleHBlY3RlZE91dHB1dEtleXM6ICh0aGlzLmV4cGVjdGVkT3V0cHV0S2V5cyB8fCBbXSkuc2xpY2UoKSxcbiAgICAgIGRhdGFEZXBlbmRlbmNpZXM6ICh0aGlzLmRhdGFEZXBlbmRlbmNpZXMgfHwgW10pLnNsaWNlKCksXG4gICAgICBwYXlsb2FkOiB0aGlzLnBheWxvYWQgPyB0aGlzLnBheWxvYWQuc3ViYXJyYXkoMCkgOiBuZXcgVWludDhBcnJheSgpLFxuICAgICAgcGF5bG9hZE5hbWU6IHRoaXMucGF5bG9hZE5hbWVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBUYXNrUmVxdWVzdC5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV4cGVjdGVkT3V0cHV0S2V5czogKHRoaXMuZXhwZWN0ZWRPdXRwdXRLZXlzIHx8IFtdKS5zbGljZSgpLFxuICAgICAgZGF0YURlcGVuZGVuY2llczogKHRoaXMuZGF0YURlcGVuZGVuY2llcyB8fCBbXSkuc2xpY2UoKSxcbiAgICAgIHBheWxvYWQ6IHRoaXMucGF5bG9hZCA/IHVpbnQ4QXJyYXlUb0Jhc2U2NCh0aGlzLnBheWxvYWQpIDogJycsXG4gICAgICBwYXlsb2FkTmFtZTogdGhpcy5wYXlsb2FkTmFtZVxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgVGFza1JlcXVlc3Qge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIFRhc2tSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICBleHBlY3RlZE91dHB1dEtleXM6IHN0cmluZ1tdO1xuICAgIGRhdGFEZXBlbmRlbmNpZXM6IHN0cmluZ1tdO1xuICAgIHBheWxvYWQ6IFVpbnQ4QXJyYXk7XG4gICAgcGF5bG9hZE5hbWU6IHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBUYXNrUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgZXhwZWN0ZWRPdXRwdXRLZXlzOiBzdHJpbmdbXTtcbiAgICBkYXRhRGVwZW5kZW5jaWVzOiBzdHJpbmdbXTtcbiAgICBwYXlsb2FkOiBzdHJpbmc7XG4gICAgcGF5bG9hZE5hbWU6IHN0cmluZztcbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGFybW9uaWsuYXBpLmdycGMudjEuSW5pdEtleWVkRGF0YVN0cmVhbVxuICovXG5leHBvcnQgY2xhc3MgSW5pdEtleWVkRGF0YVN0cmVhbSBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ2FybW9uaWsuYXBpLmdycGMudjEuSW5pdEtleWVkRGF0YVN0cmVhbSc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEluaXRLZXllZERhdGFTdHJlYW0oKTtcbiAgICBJbml0S2V5ZWREYXRhU3RyZWFtLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIGluc3RhbmNlLFxuICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICApO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogSW5pdEtleWVkRGF0YVN0cmVhbSkge31cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgX2luc3RhbmNlOiBJbml0S2V5ZWREYXRhU3RyZWFtLFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIF9pbnN0YW5jZS5rZXkgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIF9pbnN0YW5jZS5sYXN0UmVzdWx0ID0gX3JlYWRlci5yZWFkQm9vbCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgSW5pdEtleWVkRGF0YVN0cmVhbS5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IEluaXRLZXllZERhdGFTdHJlYW0sXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2Uua2V5IHx8IF9pbnN0YW5jZS5rZXkgPT09ICcnKSB7XG4gICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDEsIF9pbnN0YW5jZS5rZXkpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmxhc3RSZXN1bHQgfHwgX2luc3RhbmNlLmxhc3RSZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICBfd3JpdGVyLndyaXRlQm9vbCgyLCBfaW5zdGFuY2UubGFzdFJlc3VsdCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfa2V5OiBzdHJpbmc7XG4gIHByaXZhdGUgX2xhc3RSZXN1bHQ6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBfdHlwZTogSW5pdEtleWVkRGF0YVN0cmVhbS5UeXBlQ2FzZSA9XG4gICAgSW5pdEtleWVkRGF0YVN0cmVhbS5UeXBlQ2FzZS5ub25lO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgSW5pdEtleWVkRGF0YVN0cmVhbSB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxJbml0S2V5ZWREYXRhU3RyZWFtLkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLmtleSA9IF92YWx1ZS5rZXk7XG4gICAgdGhpcy5sYXN0UmVzdWx0ID0gX3ZhbHVlLmxhc3RSZXN1bHQ7XG4gICAgSW5pdEtleWVkRGF0YVN0cmVhbS5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IGtleSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9rZXk7XG4gIH1cbiAgc2V0IGtleSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX2xhc3RSZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl90eXBlID0gSW5pdEtleWVkRGF0YVN0cmVhbS5UeXBlQ2FzZS5rZXk7XG4gICAgfVxuICAgIHRoaXMuX2tleSA9IHZhbHVlO1xuICB9XG4gIGdldCBsYXN0UmVzdWx0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9sYXN0UmVzdWx0O1xuICB9XG4gIHNldCBsYXN0UmVzdWx0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX2tleSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3R5cGUgPSBJbml0S2V5ZWREYXRhU3RyZWFtLlR5cGVDYXNlLmxhc3RSZXN1bHQ7XG4gICAgfVxuICAgIHRoaXMuX2xhc3RSZXN1bHQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBJbml0S2V5ZWREYXRhU3RyZWFtLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IEluaXRLZXllZERhdGFTdHJlYW0uQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBrZXk6IHRoaXMua2V5LFxuICAgICAgbGFzdFJlc3VsdDogdGhpcy5sYXN0UmVzdWx0XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogSW5pdEtleWVkRGF0YVN0cmVhbS5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogdGhpcy5rZXkgPT09IG51bGwgfHwgdGhpcy5rZXkgPT09IHVuZGVmaW5lZCA/IG51bGwgOiB0aGlzLmtleSxcbiAgICAgIGxhc3RSZXN1bHQ6IHRoaXMubGFzdFJlc3VsdFxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgSW5pdEtleWVkRGF0YVN0cmVhbSB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgSW5pdEtleWVkRGF0YVN0cmVhbVxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgbGFzdFJlc3VsdDogYm9vbGVhbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBJbml0S2V5ZWREYXRhU3RyZWFtXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBrZXk6IHN0cmluZyB8IG51bGw7XG4gICAgbGFzdFJlc3VsdDogYm9vbGVhbjtcbiAgfVxuICBleHBvcnQgZW51bSBUeXBlQ2FzZSB7XG4gICAgbm9uZSA9IDAsXG4gICAga2V5ID0gMSxcbiAgICBsYXN0UmVzdWx0ID0gMlxuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3IgYXJtb25pay5hcGkuZ3JwYy52MS5EYXRhQ2h1bmtcbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFDaHVuayBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ2FybW9uaWsuYXBpLmdycGMudjEuRGF0YUNodW5rJztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRGF0YUNodW5rKCk7XG4gICAgRGF0YUNodW5rLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihpbnN0YW5jZSwgbmV3IEJpbmFyeVJlYWRlcihieXRlcykpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogRGF0YUNodW5rKSB7fVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IERhdGFDaHVuayxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBfaW5zdGFuY2UuZGF0YSA9IF9yZWFkZXIucmVhZEJ5dGVzKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBfaW5zdGFuY2UuZGF0YUNvbXBsZXRlID0gX3JlYWRlci5yZWFkQm9vbCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgRGF0YUNodW5rLnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKF9pbnN0YW5jZTogRGF0YUNodW5rLCBfd3JpdGVyOiBCaW5hcnlXcml0ZXIpIHtcbiAgICBpZiAoX2luc3RhbmNlLmRhdGEgJiYgX2luc3RhbmNlLmRhdGEubGVuZ3RoKSB7XG4gICAgICBfd3JpdGVyLndyaXRlQnl0ZXMoMSwgX2luc3RhbmNlLmRhdGEpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmRhdGFDb21wbGV0ZSB8fCBfaW5zdGFuY2UuZGF0YUNvbXBsZXRlID09PSBmYWxzZSkge1xuICAgICAgX3dyaXRlci53cml0ZUJvb2woMiwgX2luc3RhbmNlLmRhdGFDb21wbGV0ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZGF0YTogVWludDhBcnJheTtcbiAgcHJpdmF0ZSBfZGF0YUNvbXBsZXRlOiBib29sZWFuO1xuXG4gIHByaXZhdGUgX3R5cGU6IERhdGFDaHVuay5UeXBlQ2FzZSA9IERhdGFDaHVuay5UeXBlQ2FzZS5ub25lO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgRGF0YUNodW5rIHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPERhdGFDaHVuay5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5kYXRhID0gX3ZhbHVlLmRhdGE7XG4gICAgdGhpcy5kYXRhQ29tcGxldGUgPSBfdmFsdWUuZGF0YUNvbXBsZXRlO1xuICAgIERhdGFDaHVuay5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IGRhdGEoKTogVWludDhBcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cbiAgc2V0IGRhdGEodmFsdWU6IFVpbnQ4QXJyYXkpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fZGF0YUNvbXBsZXRlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fdHlwZSA9IERhdGFDaHVuay5UeXBlQ2FzZS5kYXRhO1xuICAgIH1cbiAgICB0aGlzLl9kYXRhID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGRhdGFDb21wbGV0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YUNvbXBsZXRlO1xuICB9XG4gIHNldCBkYXRhQ29tcGxldGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fZGF0YSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3R5cGUgPSBEYXRhQ2h1bmsuVHlwZUNhc2UuZGF0YUNvbXBsZXRlO1xuICAgIH1cbiAgICB0aGlzLl9kYXRhQ29tcGxldGUgPSB2YWx1ZTtcbiAgfVxuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBEYXRhQ2h1bmsuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogRGF0YUNodW5rLkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogdGhpcy5kYXRhID8gdGhpcy5kYXRhLnN1YmFycmF5KDApIDogbmV3IFVpbnQ4QXJyYXkoKSxcbiAgICAgIGRhdGFDb21wbGV0ZTogdGhpcy5kYXRhQ29tcGxldGVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBEYXRhQ2h1bmsuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiB0aGlzLmRhdGEgPyB1aW50OEFycmF5VG9CYXNlNjQodGhpcy5kYXRhKSA6ICcnLFxuICAgICAgZGF0YUNvbXBsZXRlOiB0aGlzLmRhdGFDb21wbGV0ZVxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgRGF0YUNodW5rIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBEYXRhQ2h1bmtcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIGRhdGE6IFVpbnQ4QXJyYXk7XG4gICAgZGF0YUNvbXBsZXRlOiBib29sZWFuO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIERhdGFDaHVua1xuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgZGF0YTogc3RyaW5nO1xuICAgIGRhdGFDb21wbGV0ZTogYm9vbGVhbjtcbiAgfVxuICBleHBvcnQgZW51bSBUeXBlQ2FzZSB7XG4gICAgbm9uZSA9IDAsXG4gICAgZGF0YSA9IDEsXG4gICAgZGF0YUNvbXBsZXRlID0gMlxuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3IgYXJtb25pay5hcGkuZ3JwYy52MS5UYXNrUmVxdWVzdEhlYWRlclxuICovXG5leHBvcnQgY2xhc3MgVGFza1JlcXVlc3RIZWFkZXIgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdhcm1vbmlrLmFwaS5ncnBjLnYxLlRhc2tSZXF1ZXN0SGVhZGVyJztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgVGFza1JlcXVlc3RIZWFkZXIoKTtcbiAgICBUYXNrUmVxdWVzdEhlYWRlci5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IFRhc2tSZXF1ZXN0SGVhZGVyKSB7XG4gICAgX2luc3RhbmNlLmV4cGVjdGVkT3V0cHV0S2V5cyA9IF9pbnN0YW5jZS5leHBlY3RlZE91dHB1dEtleXMgfHwgW107XG4gICAgX2luc3RhbmNlLmRhdGFEZXBlbmRlbmNpZXMgPSBfaW5zdGFuY2UuZGF0YURlcGVuZGVuY2llcyB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IFRhc2tSZXF1ZXN0SGVhZGVyLFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIChfaW5zdGFuY2UuZXhwZWN0ZWRPdXRwdXRLZXlzID1cbiAgICAgICAgICAgIF9pbnN0YW5jZS5leHBlY3RlZE91dHB1dEtleXMgfHwgW10pLnB1c2goX3JlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgKF9pbnN0YW5jZS5kYXRhRGVwZW5kZW5jaWVzID0gX2luc3RhbmNlLmRhdGFEZXBlbmRlbmNpZXMgfHwgW10pLnB1c2goXG4gICAgICAgICAgICBfcmVhZGVyLnJlYWRTdHJpbmcoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBUYXNrUmVxdWVzdEhlYWRlci5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IFRhc2tSZXF1ZXN0SGVhZGVyLFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLmV4cGVjdGVkT3V0cHV0S2V5cyAmJiBfaW5zdGFuY2UuZXhwZWN0ZWRPdXRwdXRLZXlzLmxlbmd0aCkge1xuICAgICAgX3dyaXRlci53cml0ZVJlcGVhdGVkU3RyaW5nKDEsIF9pbnN0YW5jZS5leHBlY3RlZE91dHB1dEtleXMpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmRhdGFEZXBlbmRlbmNpZXMgJiYgX2luc3RhbmNlLmRhdGFEZXBlbmRlbmNpZXMubGVuZ3RoKSB7XG4gICAgICBfd3JpdGVyLndyaXRlUmVwZWF0ZWRTdHJpbmcoMiwgX2luc3RhbmNlLmRhdGFEZXBlbmRlbmNpZXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2V4cGVjdGVkT3V0cHV0S2V5czogc3RyaW5nW107XG4gIHByaXZhdGUgX2RhdGFEZXBlbmRlbmNpZXM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgVGFza1JlcXVlc3RIZWFkZXIgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8VGFza1JlcXVlc3RIZWFkZXIuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMuZXhwZWN0ZWRPdXRwdXRLZXlzID0gKF92YWx1ZS5leHBlY3RlZE91dHB1dEtleXMgfHwgW10pLnNsaWNlKCk7XG4gICAgdGhpcy5kYXRhRGVwZW5kZW5jaWVzID0gKF92YWx1ZS5kYXRhRGVwZW5kZW5jaWVzIHx8IFtdKS5zbGljZSgpO1xuICAgIFRhc2tSZXF1ZXN0SGVhZGVyLnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgZXhwZWN0ZWRPdXRwdXRLZXlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fZXhwZWN0ZWRPdXRwdXRLZXlzO1xuICB9XG4gIHNldCBleHBlY3RlZE91dHB1dEtleXModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fZXhwZWN0ZWRPdXRwdXRLZXlzID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGRhdGFEZXBlbmRlbmNpZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhRGVwZW5kZW5jaWVzO1xuICB9XG4gIHNldCBkYXRhRGVwZW5kZW5jaWVzKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuX2RhdGFEZXBlbmRlbmNpZXMgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBUYXNrUmVxdWVzdEhlYWRlci5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBUYXNrUmVxdWVzdEhlYWRlci5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV4cGVjdGVkT3V0cHV0S2V5czogKHRoaXMuZXhwZWN0ZWRPdXRwdXRLZXlzIHx8IFtdKS5zbGljZSgpLFxuICAgICAgZGF0YURlcGVuZGVuY2llczogKHRoaXMuZGF0YURlcGVuZGVuY2llcyB8fCBbXSkuc2xpY2UoKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IFRhc2tSZXF1ZXN0SGVhZGVyLkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXhwZWN0ZWRPdXRwdXRLZXlzOiAodGhpcy5leHBlY3RlZE91dHB1dEtleXMgfHwgW10pLnNsaWNlKCksXG4gICAgICBkYXRhRGVwZW5kZW5jaWVzOiAodGhpcy5kYXRhRGVwZW5kZW5jaWVzIHx8IFtdKS5zbGljZSgpXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBUYXNrUmVxdWVzdEhlYWRlciB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgVGFza1JlcXVlc3RIZWFkZXJcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIGV4cGVjdGVkT3V0cHV0S2V5czogc3RyaW5nW107XG4gICAgZGF0YURlcGVuZGVuY2llczogc3RyaW5nW107XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgVGFza1JlcXVlc3RIZWFkZXJcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIGV4cGVjdGVkT3V0cHV0S2V5czogc3RyaW5nW107XG4gICAgZGF0YURlcGVuZGVuY2llczogc3RyaW5nW107XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLkluaXRUYXNrUmVxdWVzdFxuICovXG5leHBvcnQgY2xhc3MgSW5pdFRhc2tSZXF1ZXN0IGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnYXJtb25pay5hcGkuZ3JwYy52MS5Jbml0VGFza1JlcXVlc3QnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBJbml0VGFza1JlcXVlc3QoKTtcbiAgICBJbml0VGFza1JlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBJbml0VGFza1JlcXVlc3QpIHt9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgIF9pbnN0YW5jZTogSW5pdFRhc2tSZXF1ZXN0LFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIF9pbnN0YW5jZS5oZWFkZXIgPSBuZXcgVGFza1JlcXVlc3RIZWFkZXIoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgX2luc3RhbmNlLmhlYWRlcixcbiAgICAgICAgICAgIFRhc2tSZXF1ZXN0SGVhZGVyLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBfaW5zdGFuY2UubGFzdFRhc2sgPSBfcmVhZGVyLnJlYWRCb29sKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBJbml0VGFza1JlcXVlc3QucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoXG4gICAgX2luc3RhbmNlOiBJbml0VGFza1JlcXVlc3QsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UuaGVhZGVyKSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMSxcbiAgICAgICAgX2luc3RhbmNlLmhlYWRlciBhcyBhbnksXG4gICAgICAgIFRhc2tSZXF1ZXN0SGVhZGVyLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmxhc3RUYXNrIHx8IF9pbnN0YW5jZS5sYXN0VGFzayA9PT0gZmFsc2UpIHtcbiAgICAgIF93cml0ZXIud3JpdGVCb29sKDIsIF9pbnN0YW5jZS5sYXN0VGFzayk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGVhZGVyPzogVGFza1JlcXVlc3RIZWFkZXI7XG4gIHByaXZhdGUgX2xhc3RUYXNrOiBib29sZWFuO1xuXG4gIHByaXZhdGUgX3R5cGU6IEluaXRUYXNrUmVxdWVzdC5UeXBlQ2FzZSA9IEluaXRUYXNrUmVxdWVzdC5UeXBlQ2FzZS5ub25lO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgSW5pdFRhc2tSZXF1ZXN0IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPEluaXRUYXNrUmVxdWVzdC5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5oZWFkZXIgPSBfdmFsdWUuaGVhZGVyXG4gICAgICA/IG5ldyBUYXNrUmVxdWVzdEhlYWRlcihfdmFsdWUuaGVhZGVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5sYXN0VGFzayA9IF92YWx1ZS5sYXN0VGFzaztcbiAgICBJbml0VGFza1JlcXVlc3QucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBoZWFkZXIoKTogVGFza1JlcXVlc3RIZWFkZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9oZWFkZXI7XG4gIH1cbiAgc2V0IGhlYWRlcih2YWx1ZTogVGFza1JlcXVlc3RIZWFkZXIgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fbGFzdFRhc2sgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl90eXBlID0gSW5pdFRhc2tSZXF1ZXN0LlR5cGVDYXNlLmhlYWRlcjtcbiAgICB9XG4gICAgdGhpcy5faGVhZGVyID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGxhc3RUYXNrKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9sYXN0VGFzaztcbiAgfVxuICBzZXQgbGFzdFRhc2sodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5faGVhZGVyID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fdHlwZSA9IEluaXRUYXNrUmVxdWVzdC5UeXBlQ2FzZS5sYXN0VGFzaztcbiAgICB9XG4gICAgdGhpcy5fbGFzdFRhc2sgPSB2YWx1ZTtcbiAgfVxuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBJbml0VGFza1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogSW5pdFRhc2tSZXF1ZXN0LkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaGVhZGVyOiB0aGlzLmhlYWRlciA/IHRoaXMuaGVhZGVyLnRvT2JqZWN0KCkgOiB1bmRlZmluZWQsXG4gICAgICBsYXN0VGFzazogdGhpcy5sYXN0VGFza1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IEluaXRUYXNrUmVxdWVzdC5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlYWRlcjogdGhpcy5oZWFkZXIgPyB0aGlzLmhlYWRlci50b1Byb3RvYnVmSlNPTihvcHRpb25zKSA6IG51bGwsXG4gICAgICBsYXN0VGFzazogdGhpcy5sYXN0VGFza1xuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgSW5pdFRhc2tSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBJbml0VGFza1JlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIGhlYWRlcj86IFRhc2tSZXF1ZXN0SGVhZGVyLkFzT2JqZWN0O1xuICAgIGxhc3RUYXNrOiBib29sZWFuO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIEluaXRUYXNrUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgaGVhZGVyOiBUYXNrUmVxdWVzdEhlYWRlci5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgbGFzdFRhc2s6IGJvb2xlYW47XG4gIH1cbiAgZXhwb3J0IGVudW0gVHlwZUNhc2Uge1xuICAgIG5vbmUgPSAwLFxuICAgIGhlYWRlciA9IDEsXG4gICAgbGFzdFRhc2sgPSAyXG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLlRhc2tJZFxuICovXG5leHBvcnQgY2xhc3MgVGFza0lkIGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnYXJtb25pay5hcGkuZ3JwYy52MS5UYXNrSWQnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBUYXNrSWQoKTtcbiAgICBUYXNrSWQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGluc3RhbmNlLCBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKSk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBUYXNrSWQpIHtcbiAgICBfaW5zdGFuY2Uuc2Vzc2lvbiA9IF9pbnN0YW5jZS5zZXNzaW9uIHx8ICcnO1xuICAgIF9pbnN0YW5jZS50YXNrID0gX2luc3RhbmNlLnRhc2sgfHwgJyc7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoX2luc3RhbmNlOiBUYXNrSWQsIF9yZWFkZXI6IEJpbmFyeVJlYWRlcikge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgX2luc3RhbmNlLnNlc3Npb24gPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIF9pbnN0YW5jZS50YXNrID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBUYXNrSWQucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoX2luc3RhbmNlOiBUYXNrSWQsIF93cml0ZXI6IEJpbmFyeVdyaXRlcikge1xuICAgIGlmIChfaW5zdGFuY2Uuc2Vzc2lvbikge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygxLCBfaW5zdGFuY2Uuc2Vzc2lvbik7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UudGFzaykge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygyLCBfaW5zdGFuY2UudGFzayk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2Vzc2lvbjogc3RyaW5nO1xuICBwcml2YXRlIF90YXNrOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBUYXNrSWQgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8VGFza0lkLkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLnNlc3Npb24gPSBfdmFsdWUuc2Vzc2lvbjtcbiAgICB0aGlzLnRhc2sgPSBfdmFsdWUudGFzaztcbiAgICBUYXNrSWQucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBzZXNzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb247XG4gIH1cbiAgc2V0IHNlc3Npb24odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb24gPSB2YWx1ZTtcbiAgfVxuICBnZXQgdGFzaygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90YXNrO1xuICB9XG4gIHNldCB0YXNrKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90YXNrID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgVGFza0lkLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IFRhc2tJZC5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlc3Npb246IHRoaXMuc2Vzc2lvbixcbiAgICAgIHRhc2s6IHRoaXMudGFza1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IFRhc2tJZC5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlc3Npb246IHRoaXMuc2Vzc2lvbixcbiAgICAgIHRhc2s6IHRoaXMudGFza1xuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgVGFza0lkIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBUYXNrSWRcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIHNlc3Npb246IHN0cmluZztcbiAgICB0YXNrOiBzdHJpbmc7XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgVGFza0lkXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBzZXNzaW9uOiBzdHJpbmc7XG4gICAgdGFzazogc3RyaW5nO1xuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3IgYXJtb25pay5hcGkuZ3JwYy52MS5UYXNrSWRMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBUYXNrSWRMaXN0IGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnYXJtb25pay5hcGkuZ3JwYy52MS5UYXNrSWRMaXN0JztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgVGFza0lkTGlzdCgpO1xuICAgIFRhc2tJZExpc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGluc3RhbmNlLCBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKSk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBUYXNrSWRMaXN0KSB7XG4gICAgX2luc3RhbmNlLnRhc2tJZHMgPSBfaW5zdGFuY2UudGFza0lkcyB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IFRhc2tJZExpc3QsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgKF9pbnN0YW5jZS50YXNrSWRzID0gX2luc3RhbmNlLnRhc2tJZHMgfHwgW10pLnB1c2goXG4gICAgICAgICAgICBfcmVhZGVyLnJlYWRTdHJpbmcoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBUYXNrSWRMaXN0LnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKF9pbnN0YW5jZTogVGFza0lkTGlzdCwgX3dyaXRlcjogQmluYXJ5V3JpdGVyKSB7XG4gICAgaWYgKF9pbnN0YW5jZS50YXNrSWRzICYmIF9pbnN0YW5jZS50YXNrSWRzLmxlbmd0aCkge1xuICAgICAgX3dyaXRlci53cml0ZVJlcGVhdGVkU3RyaW5nKDEsIF9pbnN0YW5jZS50YXNrSWRzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF90YXNrSWRzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIFRhc2tJZExpc3QgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8VGFza0lkTGlzdC5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy50YXNrSWRzID0gKF92YWx1ZS50YXNrSWRzIHx8IFtdKS5zbGljZSgpO1xuICAgIFRhc2tJZExpc3QucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCB0YXNrSWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fdGFza0lkcztcbiAgfVxuICBzZXQgdGFza0lkcyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLl90YXNrSWRzID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgVGFza0lkTGlzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBUYXNrSWRMaXN0LkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFza0lkczogKHRoaXMudGFza0lkcyB8fCBbXSkuc2xpY2UoKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IFRhc2tJZExpc3QuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICB0YXNrSWRzOiAodGhpcy50YXNrSWRzIHx8IFtdKS5zbGljZSgpXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBUYXNrSWRMaXN0IHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBUYXNrSWRMaXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICB0YXNrSWRzOiBzdHJpbmdbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBUYXNrSWRMaXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICB0YXNrSWRzOiBzdHJpbmdbXTtcbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGFybW9uaWsuYXBpLmdycGMudjEuU3RhdHVzQ291bnRcbiAqL1xuZXhwb3J0IGNsYXNzIFN0YXR1c0NvdW50IGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnYXJtb25pay5hcGkuZ3JwYy52MS5TdGF0dXNDb3VudCc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFN0YXR1c0NvdW50KCk7XG4gICAgU3RhdHVzQ291bnQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGluc3RhbmNlLCBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKSk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBTdGF0dXNDb3VudCkge1xuICAgIF9pbnN0YW5jZS5zdGF0dXMgPSBfaW5zdGFuY2Uuc3RhdHVzIHx8IDA7XG4gICAgX2luc3RhbmNlLmNvdW50ID0gX2luc3RhbmNlLmNvdW50IHx8IDA7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgX2luc3RhbmNlOiBTdGF0dXNDb3VudCxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBfaW5zdGFuY2Uuc3RhdHVzID0gX3JlYWRlci5yZWFkRW51bSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgX2luc3RhbmNlLmNvdW50ID0gX3JlYWRlci5yZWFkSW50MzIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIFN0YXR1c0NvdW50LnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogU3RhdHVzQ291bnQsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2Uuc3RhdHVzKSB7XG4gICAgICBfd3JpdGVyLndyaXRlRW51bSgxLCBfaW5zdGFuY2Uuc3RhdHVzKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5jb3VudCkge1xuICAgICAgX3dyaXRlci53cml0ZUludDMyKDIsIF9pbnN0YW5jZS5jb3VudCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc3RhdHVzOiBhcm1vbmlrQXBpR3JwY1YxVGFza19zdGF0dXMwMDEuVGFza1N0YXR1cztcbiAgcHJpdmF0ZSBfY291bnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIFN0YXR1c0NvdW50IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPFN0YXR1c0NvdW50LkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLnN0YXR1cyA9IF92YWx1ZS5zdGF0dXM7XG4gICAgdGhpcy5jb3VudCA9IF92YWx1ZS5jb3VudDtcbiAgICBTdGF0dXNDb3VudC5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IHN0YXR1cygpOiBhcm1vbmlrQXBpR3JwY1YxVGFza19zdGF0dXMwMDEuVGFza1N0YXR1cyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1cztcbiAgfVxuICBzZXQgc3RhdHVzKHZhbHVlOiBhcm1vbmlrQXBpR3JwY1YxVGFza19zdGF0dXMwMDEuVGFza1N0YXR1cykge1xuICAgIHRoaXMuX3N0YXR1cyA9IHZhbHVlO1xuICB9XG4gIGdldCBjb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jb3VudDtcbiAgfVxuICBzZXQgY291bnQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2NvdW50ID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgU3RhdHVzQ291bnQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogU3RhdHVzQ291bnQuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgY291bnQ6IHRoaXMuY291bnRcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBTdGF0dXNDb3VudC5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czpcbiAgICAgICAgYXJtb25pa0FwaUdycGNWMVRhc2tfc3RhdHVzMDAxLlRhc2tTdGF0dXNbXG4gICAgICAgICAgdGhpcy5zdGF0dXMgPT09IG51bGwgfHwgdGhpcy5zdGF0dXMgPT09IHVuZGVmaW5lZCA/IDAgOiB0aGlzLnN0YXR1c1xuICAgICAgICBdLFxuICAgICAgY291bnQ6IHRoaXMuY291bnRcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIFN0YXR1c0NvdW50IHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBTdGF0dXNDb3VudFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgc3RhdHVzOiBhcm1vbmlrQXBpR3JwY1YxVGFza19zdGF0dXMwMDEuVGFza1N0YXR1cztcbiAgICBjb3VudDogbnVtYmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIFN0YXR1c0NvdW50XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBzdGF0dXM6IHN0cmluZztcbiAgICBjb3VudDogbnVtYmVyO1xuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3IgYXJtb25pay5hcGkuZ3JwYy52MS5Db3VudFxuICovXG5leHBvcnQgY2xhc3MgQ291bnQgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdhcm1vbmlrLmFwaS5ncnBjLnYxLkNvdW50JztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQ291bnQoKTtcbiAgICBDb3VudC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaW5zdGFuY2UsIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IENvdW50KSB7XG4gICAgX2luc3RhbmNlLnZhbHVlcyA9IF9pbnN0YW5jZS52YWx1ZXMgfHwgW107XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoX2luc3RhbmNlOiBDb3VudCwgX3JlYWRlcjogQmluYXJ5UmVhZGVyKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBjb25zdCBtZXNzYWdlSW5pdGlhbGl6ZXIxID0gbmV3IFN0YXR1c0NvdW50KCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIG1lc3NhZ2VJbml0aWFsaXplcjEsXG4gICAgICAgICAgICBTdGF0dXNDb3VudC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIChfaW5zdGFuY2UudmFsdWVzID0gX2luc3RhbmNlLnZhbHVlcyB8fCBbXSkucHVzaChtZXNzYWdlSW5pdGlhbGl6ZXIxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIENvdW50LnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKF9pbnN0YW5jZTogQ291bnQsIF93cml0ZXI6IEJpbmFyeVdyaXRlcikge1xuICAgIGlmIChfaW5zdGFuY2UudmFsdWVzICYmIF9pbnN0YW5jZS52YWx1ZXMubGVuZ3RoKSB7XG4gICAgICBfd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgICAxLFxuICAgICAgICBfaW5zdGFuY2UudmFsdWVzIGFzIGFueSxcbiAgICAgICAgU3RhdHVzQ291bnQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdmFsdWVzPzogU3RhdHVzQ291bnRbXTtcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIENvdW50IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPENvdW50LkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLnZhbHVlcyA9IChfdmFsdWUudmFsdWVzIHx8IFtdKS5tYXAobSA9PiBuZXcgU3RhdHVzQ291bnQobSkpO1xuICAgIENvdW50LnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgdmFsdWVzKCk6IFN0YXR1c0NvdW50W10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZXM7XG4gIH1cbiAgc2V0IHZhbHVlcyh2YWx1ZTogU3RhdHVzQ291bnRbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3ZhbHVlcyA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIENvdW50LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IENvdW50LkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWVzOiAodGhpcy52YWx1ZXMgfHwgW10pLm1hcChtID0+IG0udG9PYmplY3QoKSlcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBDb3VudC5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlczogKHRoaXMudmFsdWVzIHx8IFtdKS5tYXAobSA9PiBtLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpKVxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgQ291bnQge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIENvdW50XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICB2YWx1ZXM/OiBTdGF0dXNDb3VudC5Bc09iamVjdFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIENvdW50XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICB2YWx1ZXM6IFN0YXR1c0NvdW50LkFzUHJvdG9idWZKU09OW10gfCBudWxsO1xuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3IgYXJtb25pay5hcGkuZ3JwYy52MS5SZXN1bHRSZXF1ZXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBSZXN1bHRSZXF1ZXN0IGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnYXJtb25pay5hcGkuZ3JwYy52MS5SZXN1bHRSZXF1ZXN0JztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgUmVzdWx0UmVxdWVzdCgpO1xuICAgIFJlc3VsdFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBSZXN1bHRSZXF1ZXN0KSB7XG4gICAgX2luc3RhbmNlLnNlc3Npb24gPSBfaW5zdGFuY2Uuc2Vzc2lvbiB8fCAnJztcbiAgICBfaW5zdGFuY2UucmVzdWx0SWQgPSBfaW5zdGFuY2UucmVzdWx0SWQgfHwgJyc7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgX2luc3RhbmNlOiBSZXN1bHRSZXF1ZXN0LFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIF9pbnN0YW5jZS5zZXNzaW9uID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBfaW5zdGFuY2UucmVzdWx0SWQgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIFJlc3VsdFJlcXVlc3QucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoXG4gICAgX2luc3RhbmNlOiBSZXN1bHRSZXF1ZXN0LFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLnNlc3Npb24pIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMSwgX2luc3RhbmNlLnNlc3Npb24pO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnJlc3VsdElkKSB7XG4gICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDIsIF9pbnN0YW5jZS5yZXN1bHRJZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2Vzc2lvbjogc3RyaW5nO1xuICBwcml2YXRlIF9yZXN1bHRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgUmVzdWx0UmVxdWVzdCB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxSZXN1bHRSZXF1ZXN0LkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLnNlc3Npb24gPSBfdmFsdWUuc2Vzc2lvbjtcbiAgICB0aGlzLnJlc3VsdElkID0gX3ZhbHVlLnJlc3VsdElkO1xuICAgIFJlc3VsdFJlcXVlc3QucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBzZXNzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb247XG4gIH1cbiAgc2V0IHNlc3Npb24odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb24gPSB2YWx1ZTtcbiAgfVxuICBnZXQgcmVzdWx0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzdWx0SWQ7XG4gIH1cbiAgc2V0IHJlc3VsdElkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9yZXN1bHRJZCA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIFJlc3VsdFJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogUmVzdWx0UmVxdWVzdC5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlc3Npb246IHRoaXMuc2Vzc2lvbixcbiAgICAgIHJlc3VsdElkOiB0aGlzLnJlc3VsdElkXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogUmVzdWx0UmVxdWVzdC5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlc3Npb246IHRoaXMuc2Vzc2lvbixcbiAgICAgIHJlc3VsdElkOiB0aGlzLnJlc3VsdElkXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBSZXN1bHRSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBSZXN1bHRSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICBzZXNzaW9uOiBzdHJpbmc7XG4gICAgcmVzdWx0SWQ6IHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBSZXN1bHRSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBzZXNzaW9uOiBzdHJpbmc7XG4gICAgcmVzdWx0SWQ6IHN0cmluZztcbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGFybW9uaWsuYXBpLmdycGMudjEuVGFza091dHB1dFJlcXVlc3RcbiAqL1xuZXhwb3J0IGNsYXNzIFRhc2tPdXRwdXRSZXF1ZXN0IGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnYXJtb25pay5hcGkuZ3JwYy52MS5UYXNrT3V0cHV0UmVxdWVzdCc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFRhc2tPdXRwdXRSZXF1ZXN0KCk7XG4gICAgVGFza091dHB1dFJlcXVlc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBUYXNrT3V0cHV0UmVxdWVzdCkge1xuICAgIF9pbnN0YW5jZS5zZXNzaW9uID0gX2luc3RhbmNlLnNlc3Npb24gfHwgJyc7XG4gICAgX2luc3RhbmNlLnRhc2tJZCA9IF9pbnN0YW5jZS50YXNrSWQgfHwgJyc7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgX2luc3RhbmNlOiBUYXNrT3V0cHV0UmVxdWVzdCxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBfaW5zdGFuY2Uuc2Vzc2lvbiA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgX2luc3RhbmNlLnRhc2tJZCA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgVGFza091dHB1dFJlcXVlc3QucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoXG4gICAgX2luc3RhbmNlOiBUYXNrT3V0cHV0UmVxdWVzdCxcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5zZXNzaW9uKSB7XG4gICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDEsIF9pbnN0YW5jZS5zZXNzaW9uKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS50YXNrSWQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMiwgX2luc3RhbmNlLnRhc2tJZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2Vzc2lvbjogc3RyaW5nO1xuICBwcml2YXRlIF90YXNrSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIFRhc2tPdXRwdXRSZXF1ZXN0IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPFRhc2tPdXRwdXRSZXF1ZXN0LkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLnNlc3Npb24gPSBfdmFsdWUuc2Vzc2lvbjtcbiAgICB0aGlzLnRhc2tJZCA9IF92YWx1ZS50YXNrSWQ7XG4gICAgVGFza091dHB1dFJlcXVlc3QucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBzZXNzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb247XG4gIH1cbiAgc2V0IHNlc3Npb24odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb24gPSB2YWx1ZTtcbiAgfVxuICBnZXQgdGFza0lkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Rhc2tJZDtcbiAgfVxuICBzZXQgdGFza0lkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90YXNrSWQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBUYXNrT3V0cHV0UmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBUYXNrT3V0cHV0UmVxdWVzdC5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlc3Npb246IHRoaXMuc2Vzc2lvbixcbiAgICAgIHRhc2tJZDogdGhpcy50YXNrSWRcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBUYXNrT3V0cHV0UmVxdWVzdC5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlc3Npb246IHRoaXMuc2Vzc2lvbixcbiAgICAgIHRhc2tJZDogdGhpcy50YXNrSWRcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIFRhc2tPdXRwdXRSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBUYXNrT3V0cHV0UmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgc2Vzc2lvbjogc3RyaW5nO1xuICAgIHRhc2tJZDogc3RyaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIFRhc2tPdXRwdXRSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBzZXNzaW9uOiBzdHJpbmc7XG4gICAgdGFza0lkOiBzdHJpbmc7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLkVycm9yXG4gKi9cbmV4cG9ydCBjbGFzcyBFcnJvciBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ2FybW9uaWsuYXBpLmdycGMudjEuRXJyb3InO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBFcnJvcigpO1xuICAgIEVycm9yLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihpbnN0YW5jZSwgbmV3IEJpbmFyeVJlYWRlcihieXRlcykpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogRXJyb3IpIHtcbiAgICBfaW5zdGFuY2UudGFza1N0YXR1cyA9IF9pbnN0YW5jZS50YXNrU3RhdHVzIHx8IDA7XG4gICAgX2luc3RhbmNlLmRldGFpbCA9IF9pbnN0YW5jZS5kZXRhaWwgfHwgJyc7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoX2luc3RhbmNlOiBFcnJvciwgX3JlYWRlcjogQmluYXJ5UmVhZGVyKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBfaW5zdGFuY2UudGFza1N0YXR1cyA9IF9yZWFkZXIucmVhZEVudW0oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIF9pbnN0YW5jZS5kZXRhaWwgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEVycm9yLnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKF9pbnN0YW5jZTogRXJyb3IsIF93cml0ZXI6IEJpbmFyeVdyaXRlcikge1xuICAgIGlmIChfaW5zdGFuY2UudGFza1N0YXR1cykge1xuICAgICAgX3dyaXRlci53cml0ZUVudW0oMSwgX2luc3RhbmNlLnRhc2tTdGF0dXMpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmRldGFpbCkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygyLCBfaW5zdGFuY2UuZGV0YWlsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF90YXNrU3RhdHVzOiBhcm1vbmlrQXBpR3JwY1YxVGFza19zdGF0dXMwMDEuVGFza1N0YXR1cztcbiAgcHJpdmF0ZSBfZGV0YWlsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBFcnJvciB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxFcnJvci5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy50YXNrU3RhdHVzID0gX3ZhbHVlLnRhc2tTdGF0dXM7XG4gICAgdGhpcy5kZXRhaWwgPSBfdmFsdWUuZGV0YWlsO1xuICAgIEVycm9yLnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgdGFza1N0YXR1cygpOiBhcm1vbmlrQXBpR3JwY1YxVGFza19zdGF0dXMwMDEuVGFza1N0YXR1cyB7XG4gICAgcmV0dXJuIHRoaXMuX3Rhc2tTdGF0dXM7XG4gIH1cbiAgc2V0IHRhc2tTdGF0dXModmFsdWU6IGFybW9uaWtBcGlHcnBjVjFUYXNrX3N0YXR1czAwMS5UYXNrU3RhdHVzKSB7XG4gICAgdGhpcy5fdGFza1N0YXR1cyA9IHZhbHVlO1xuICB9XG4gIGdldCBkZXRhaWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZGV0YWlsO1xuICB9XG4gIHNldCBkZXRhaWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2RldGFpbCA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIEVycm9yLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IEVycm9yLkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFza1N0YXR1czogdGhpcy50YXNrU3RhdHVzLFxuICAgICAgZGV0YWlsOiB0aGlzLmRldGFpbFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IEVycm9yLkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFza1N0YXR1czpcbiAgICAgICAgYXJtb25pa0FwaUdycGNWMVRhc2tfc3RhdHVzMDAxLlRhc2tTdGF0dXNbXG4gICAgICAgICAgdGhpcy50YXNrU3RhdHVzID09PSBudWxsIHx8IHRoaXMudGFza1N0YXR1cyA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogdGhpcy50YXNrU3RhdHVzXG4gICAgICAgIF0sXG4gICAgICBkZXRhaWw6IHRoaXMuZGV0YWlsXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBFcnJvciB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgRXJyb3JcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIHRhc2tTdGF0dXM6IGFybW9uaWtBcGlHcnBjVjFUYXNrX3N0YXR1czAwMS5UYXNrU3RhdHVzO1xuICAgIGRldGFpbDogc3RyaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIEVycm9yXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICB0YXNrU3RhdHVzOiBzdHJpbmc7XG4gICAgZGV0YWlsOiBzdHJpbmc7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLlRhc2tFcnJvclxuICovXG5leHBvcnQgY2xhc3MgVGFza0Vycm9yIGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnYXJtb25pay5hcGkuZ3JwYy52MS5UYXNrRXJyb3InO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBUYXNrRXJyb3IoKTtcbiAgICBUYXNrRXJyb3IuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGluc3RhbmNlLCBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKSk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBUYXNrRXJyb3IpIHtcbiAgICBfaW5zdGFuY2UudGFza0lkID0gX2luc3RhbmNlLnRhc2tJZCB8fCAnJztcbiAgICBfaW5zdGFuY2UuZXJyb3JzID0gX2luc3RhbmNlLmVycm9ycyB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IFRhc2tFcnJvcixcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBfaW5zdGFuY2UudGFza0lkID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBjb25zdCBtZXNzYWdlSW5pdGlhbGl6ZXIyID0gbmV3IEVycm9yKCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIG1lc3NhZ2VJbml0aWFsaXplcjIsXG4gICAgICAgICAgICBFcnJvci5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIChfaW5zdGFuY2UuZXJyb3JzID0gX2luc3RhbmNlLmVycm9ycyB8fCBbXSkucHVzaChtZXNzYWdlSW5pdGlhbGl6ZXIyKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIFRhc2tFcnJvci5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihfaW5zdGFuY2U6IFRhc2tFcnJvciwgX3dyaXRlcjogQmluYXJ5V3JpdGVyKSB7XG4gICAgaWYgKF9pbnN0YW5jZS50YXNrSWQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMSwgX2luc3RhbmNlLnRhc2tJZCk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UuZXJyb3JzICYmIF9pbnN0YW5jZS5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICBfd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgICAyLFxuICAgICAgICBfaW5zdGFuY2UuZXJyb3JzIGFzIGFueSxcbiAgICAgICAgRXJyb3Iuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdGFza0lkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vycm9ycz86IEVycm9yW107XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBUYXNrRXJyb3IgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8VGFza0Vycm9yLkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLnRhc2tJZCA9IF92YWx1ZS50YXNrSWQ7XG4gICAgdGhpcy5lcnJvcnMgPSAoX3ZhbHVlLmVycm9ycyB8fCBbXSkubWFwKG0gPT4gbmV3IEVycm9yKG0pKTtcbiAgICBUYXNrRXJyb3IucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCB0YXNrSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGFza0lkO1xuICB9XG4gIHNldCB0YXNrSWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3Rhc2tJZCA9IHZhbHVlO1xuICB9XG4gIGdldCBlcnJvcnMoKTogRXJyb3JbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Vycm9ycztcbiAgfVxuICBzZXQgZXJyb3JzKHZhbHVlOiBFcnJvcltdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZXJyb3JzID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgVGFza0Vycm9yLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IFRhc2tFcnJvci5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhc2tJZDogdGhpcy50YXNrSWQsXG4gICAgICBlcnJvcnM6ICh0aGlzLmVycm9ycyB8fCBbXSkubWFwKG0gPT4gbS50b09iamVjdCgpKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IFRhc2tFcnJvci5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhc2tJZDogdGhpcy50YXNrSWQsXG4gICAgICBlcnJvcnM6ICh0aGlzLmVycm9ycyB8fCBbXSkubWFwKG0gPT4gbS50b1Byb3RvYnVmSlNPTihvcHRpb25zKSlcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIFRhc2tFcnJvciB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgVGFza0Vycm9yXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICB0YXNrSWQ6IHN0cmluZztcbiAgICBlcnJvcnM/OiBFcnJvci5Bc09iamVjdFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIFRhc2tFcnJvclxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgdGFza0lkOiBzdHJpbmc7XG4gICAgZXJyb3JzOiBFcnJvci5Bc1Byb3RvYnVmSlNPTltdIHwgbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGFybW9uaWsuYXBpLmdycGMudjEuVGFza0xpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIFRhc2tMaXN0IGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnYXJtb25pay5hcGkuZ3JwYy52MS5UYXNrTGlzdCc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFRhc2tMaXN0KCk7XG4gICAgVGFza0xpc3QuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGluc3RhbmNlLCBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKSk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBUYXNrTGlzdCkge1xuICAgIF9pbnN0YW5jZS50YXNrSWRzID0gX2luc3RhbmNlLnRhc2tJZHMgfHwgW107XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgX2luc3RhbmNlOiBUYXNrTGlzdCxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBjb25zdCBtZXNzYWdlSW5pdGlhbGl6ZXIxID0gbmV3IFRhc2tJZCgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBtZXNzYWdlSW5pdGlhbGl6ZXIxLFxuICAgICAgICAgICAgVGFza0lkLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgKF9pbnN0YW5jZS50YXNrSWRzID0gX2luc3RhbmNlLnRhc2tJZHMgfHwgW10pLnB1c2goXG4gICAgICAgICAgICBtZXNzYWdlSW5pdGlhbGl6ZXIxXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIFRhc2tMaXN0LnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKF9pbnN0YW5jZTogVGFza0xpc3QsIF93cml0ZXI6IEJpbmFyeVdyaXRlcikge1xuICAgIGlmIChfaW5zdGFuY2UudGFza0lkcyAmJiBfaW5zdGFuY2UudGFza0lkcy5sZW5ndGgpIHtcbiAgICAgIF93cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAgIDEsXG4gICAgICAgIF9pbnN0YW5jZS50YXNrSWRzIGFzIGFueSxcbiAgICAgICAgVGFza0lkLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3Rhc2tJZHM/OiBUYXNrSWRbXTtcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIFRhc2tMaXN0IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPFRhc2tMaXN0LkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLnRhc2tJZHMgPSAoX3ZhbHVlLnRhc2tJZHMgfHwgW10pLm1hcChtID0+IG5ldyBUYXNrSWQobSkpO1xuICAgIFRhc2tMaXN0LnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgdGFza0lkcygpOiBUYXNrSWRbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3Rhc2tJZHM7XG4gIH1cbiAgc2V0IHRhc2tJZHModmFsdWU6IFRhc2tJZFtdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fdGFza0lkcyA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIFRhc2tMaXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IFRhc2tMaXN0LkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFza0lkczogKHRoaXMudGFza0lkcyB8fCBbXSkubWFwKG0gPT4gbS50b09iamVjdCgpKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IFRhc2tMaXN0LkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFza0lkczogKHRoaXMudGFza0lkcyB8fCBbXSkubWFwKG0gPT4gbS50b1Byb3RvYnVmSlNPTihvcHRpb25zKSlcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIFRhc2tMaXN0IHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBUYXNrTGlzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgdGFza0lkcz86IFRhc2tJZC5Bc09iamVjdFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIFRhc2tMaXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICB0YXNrSWRzOiBUYXNrSWQuQXNQcm90b2J1ZkpTT05bXSB8IG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLlRhc2tJZFdpdGhTdGF0dXNcbiAqL1xuZXhwb3J0IGNsYXNzIFRhc2tJZFdpdGhTdGF0dXMgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdhcm1vbmlrLmFwaS5ncnBjLnYxLlRhc2tJZFdpdGhTdGF0dXMnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBUYXNrSWRXaXRoU3RhdHVzKCk7XG4gICAgVGFza0lkV2l0aFN0YXR1cy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IFRhc2tJZFdpdGhTdGF0dXMpIHtcbiAgICBfaW5zdGFuY2UudGFza0lkID0gX2luc3RhbmNlLnRhc2tJZCB8fCB1bmRlZmluZWQ7XG4gICAgX2luc3RhbmNlLnN0YXR1cyA9IF9pbnN0YW5jZS5zdGF0dXMgfHwgMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IFRhc2tJZFdpdGhTdGF0dXMsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgX2luc3RhbmNlLnRhc2tJZCA9IG5ldyBUYXNrSWQoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgX2luc3RhbmNlLnRhc2tJZCxcbiAgICAgICAgICAgIFRhc2tJZC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgX2luc3RhbmNlLnN0YXR1cyA9IF9yZWFkZXIucmVhZEVudW0oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIFRhc2tJZFdpdGhTdGF0dXMucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoXG4gICAgX2luc3RhbmNlOiBUYXNrSWRXaXRoU3RhdHVzLFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLnRhc2tJZCkge1xuICAgICAgX3dyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAgIDEsXG4gICAgICAgIF9pbnN0YW5jZS50YXNrSWQgYXMgYW55LFxuICAgICAgICBUYXNrSWQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2Uuc3RhdHVzKSB7XG4gICAgICBfd3JpdGVyLndyaXRlRW51bSgyLCBfaW5zdGFuY2Uuc3RhdHVzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF90YXNrSWQ/OiBUYXNrSWQ7XG4gIHByaXZhdGUgX3N0YXR1czogYXJtb25pa0FwaUdycGNWMVRhc2tfc3RhdHVzMDAxLlRhc2tTdGF0dXM7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBUYXNrSWRXaXRoU3RhdHVzIHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPFRhc2tJZFdpdGhTdGF0dXMuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMudGFza0lkID0gX3ZhbHVlLnRhc2tJZCA/IG5ldyBUYXNrSWQoX3ZhbHVlLnRhc2tJZCkgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5zdGF0dXMgPSBfdmFsdWUuc3RhdHVzO1xuICAgIFRhc2tJZFdpdGhTdGF0dXMucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCB0YXNrSWQoKTogVGFza0lkIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdGFza0lkO1xuICB9XG4gIHNldCB0YXNrSWQodmFsdWU6IFRhc2tJZCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3Rhc2tJZCA9IHZhbHVlO1xuICB9XG4gIGdldCBzdGF0dXMoKTogYXJtb25pa0FwaUdycGNWMVRhc2tfc3RhdHVzMDAxLlRhc2tTdGF0dXMge1xuICAgIHJldHVybiB0aGlzLl9zdGF0dXM7XG4gIH1cbiAgc2V0IHN0YXR1cyh2YWx1ZTogYXJtb25pa0FwaUdycGNWMVRhc2tfc3RhdHVzMDAxLlRhc2tTdGF0dXMpIHtcbiAgICB0aGlzLl9zdGF0dXMgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBUYXNrSWRXaXRoU3RhdHVzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IFRhc2tJZFdpdGhTdGF0dXMuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICB0YXNrSWQ6IHRoaXMudGFza0lkID8gdGhpcy50YXNrSWQudG9PYmplY3QoKSA6IHVuZGVmaW5lZCxcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXNcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBUYXNrSWRXaXRoU3RhdHVzLkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFza0lkOiB0aGlzLnRhc2tJZCA/IHRoaXMudGFza0lkLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpIDogbnVsbCxcbiAgICAgIHN0YXR1czpcbiAgICAgICAgYXJtb25pa0FwaUdycGNWMVRhc2tfc3RhdHVzMDAxLlRhc2tTdGF0dXNbXG4gICAgICAgICAgdGhpcy5zdGF0dXMgPT09IG51bGwgfHwgdGhpcy5zdGF0dXMgPT09IHVuZGVmaW5lZCA/IDAgOiB0aGlzLnN0YXR1c1xuICAgICAgICBdXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBUYXNrSWRXaXRoU3RhdHVzIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBUYXNrSWRXaXRoU3RhdHVzXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICB0YXNrSWQ/OiBUYXNrSWQuQXNPYmplY3Q7XG4gICAgc3RhdHVzOiBhcm1vbmlrQXBpR3JwY1YxVGFza19zdGF0dXMwMDEuVGFza1N0YXR1cztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBUYXNrSWRXaXRoU3RhdHVzXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICB0YXNrSWQ6IFRhc2tJZC5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgc3RhdHVzOiBzdHJpbmc7XG4gIH1cbn1cbiJdfQ==
|