@coralogix/rum-cli 1.1.2 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -7
- package/api/rum-api.ts +3 -3
- package/dist/api/rum-api.d.ts +1 -1
- package/dist/api/rum-api.js +2 -2
- package/dist/proto-models/com/coralogix/rum/v2/audit_log.js +62 -0
- package/dist/proto-models/com/coralogix/rum/v2/chunk.js +330 -0
- package/dist/proto-models/com/coralogix/rum/v2/file.js +140 -0
- package/dist/proto-models/com/coralogix/rum/v2/rum_service.js +233 -0
- package/dist/proto-models/com/coralogix/rum/v2/rum_source_map_service.js +181 -0
- package/dist/proto-models/com/coralogix/rum/v2/source_code_file_mapping.js +277 -0
- package/dist/proto-models/google/protobuf/descriptor.js +3612 -0
- package/dist/services/source-maps/source-maps.service.js +2 -2
- package/dist/services/source-maps/utils/traverse-folder.util.d.ts +1 -1
- package/dist/services/source-maps/utils/traverse-folder.util.js +1 -1
- package/generate-protos.sh +3 -3
- package/package.json +2 -2
- package/protoset.bin +0 -0
- package/services/source-maps/source-maps.service.ts +1 -1
- package/services/source-maps/utils/traverse-folder.util.ts +2 -2
- package/dist/src/app/proto-models/com/coralogix/rum/v2/audit_log.js +0 -62
- package/dist/src/app/proto-models/com/coralogix/rum/v2/chunk.js +0 -330
- package/dist/src/app/proto-models/com/coralogix/rum/v2/file.js +0 -140
- package/dist/src/app/proto-models/com/coralogix/rum/v2/rum_service.js +0 -233
- package/dist/src/app/proto-models/com/coralogix/rum/v2/rum_source_map_service.js +0 -181
- package/dist/src/app/proto-models/com/coralogix/rum/v2/source_code_file_mapping.js +0 -277
- package/dist/src/app/proto-models/google/protobuf/descriptor.js +0 -3612
- /package/dist/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/audit_log.d.ts +0 -0
- /package/dist/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/chunk.d.ts +0 -0
- /package/dist/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/file.d.ts +0 -0
- /package/dist/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/rum_service.d.ts +0 -0
- /package/dist/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/rum_source_map_service.d.ts +0 -0
- /package/dist/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/source_code_file_mapping.d.ts +0 -0
- /package/dist/{src/app/proto-models → proto-models}/google/protobuf/descriptor.d.ts +0 -0
- /package/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/audit_log.ts +0 -0
- /package/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/chunk.ts +0 -0
- /package/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/file.ts +0 -0
- /package/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/rum_service.ts +0 -0
- /package/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/rum_source_map_service.ts +0 -0
- /package/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/source_code_file_mapping.ts +0 -0
- /package/{src/app/proto-models → proto-models}/google/protobuf/descriptor.ts +0 -0
|
@@ -1,3612 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.UninterpretedOption = exports.MethodOptions = exports.ServiceOptions = exports.EnumValueOptions = exports.EnumOptions = exports.OneofOptions = exports.FieldOptions = exports.MessageOptions = exports.FileOptions = exports.MethodDescriptorProto = exports.ServiceDescriptorProto = exports.EnumValueDescriptorProto = exports.EnumDescriptorProto_EnumReservedRange = exports.EnumDescriptorProto = exports.OneofDescriptorProto = exports.FieldDescriptorProto = exports.ExtensionRangeOptions = exports.DescriptorProto_ReservedRange = exports.DescriptorProto_ExtensionRange = exports.DescriptorProto = exports.FileDescriptorProto = exports.FileDescriptorSet = exports.generatedCodeInfo_Annotation_SemanticToJSON = exports.generatedCodeInfo_Annotation_SemanticFromJSON = exports.GeneratedCodeInfo_Annotation_Semantic = exports.methodOptions_IdempotencyLevelToJSON = exports.methodOptions_IdempotencyLevelFromJSON = exports.MethodOptions_IdempotencyLevel = exports.fieldOptions_OptionTargetTypeToJSON = exports.fieldOptions_OptionTargetTypeFromJSON = exports.FieldOptions_OptionTargetType = exports.fieldOptions_OptionRetentionToJSON = exports.fieldOptions_OptionRetentionFromJSON = exports.FieldOptions_OptionRetention = exports.fieldOptions_JSTypeToJSON = exports.fieldOptions_JSTypeFromJSON = exports.FieldOptions_JSType = exports.fieldOptions_CTypeToJSON = exports.fieldOptions_CTypeFromJSON = exports.FieldOptions_CType = exports.fileOptions_OptimizeModeToJSON = exports.fileOptions_OptimizeModeFromJSON = exports.FileOptions_OptimizeMode = exports.fieldDescriptorProto_LabelToJSON = exports.fieldDescriptorProto_LabelFromJSON = exports.FieldDescriptorProto_Label = exports.fieldDescriptorProto_TypeToJSON = exports.fieldDescriptorProto_TypeFromJSON = exports.FieldDescriptorProto_Type = exports.protobufPackage = void 0;
|
|
7
|
-
exports.GeneratedCodeInfo_Annotation = exports.GeneratedCodeInfo = exports.SourceCodeInfo_Location = exports.SourceCodeInfo = exports.UninterpretedOption_NamePart = void 0;
|
|
8
|
-
/* eslint-disable */
|
|
9
|
-
const long_1 = __importDefault(require("long"));
|
|
10
|
-
const minimal_1 = __importDefault(require("protobufjs/minimal"));
|
|
11
|
-
exports.protobufPackage = "google.protobuf";
|
|
12
|
-
var FieldDescriptorProto_Type;
|
|
13
|
-
(function (FieldDescriptorProto_Type) {
|
|
14
|
-
/**
|
|
15
|
-
* TYPE_DOUBLE - 0 is reserved for errors.
|
|
16
|
-
* Order is weird for historical reasons.
|
|
17
|
-
*/
|
|
18
|
-
FieldDescriptorProto_Type[FieldDescriptorProto_Type["TYPE_DOUBLE"] = 1] = "TYPE_DOUBLE";
|
|
19
|
-
FieldDescriptorProto_Type[FieldDescriptorProto_Type["TYPE_FLOAT"] = 2] = "TYPE_FLOAT";
|
|
20
|
-
/**
|
|
21
|
-
* TYPE_INT64 - Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if
|
|
22
|
-
* negative values are likely.
|
|
23
|
-
*/
|
|
24
|
-
FieldDescriptorProto_Type[FieldDescriptorProto_Type["TYPE_INT64"] = 3] = "TYPE_INT64";
|
|
25
|
-
FieldDescriptorProto_Type[FieldDescriptorProto_Type["TYPE_UINT64"] = 4] = "TYPE_UINT64";
|
|
26
|
-
/**
|
|
27
|
-
* TYPE_INT32 - Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if
|
|
28
|
-
* negative values are likely.
|
|
29
|
-
*/
|
|
30
|
-
FieldDescriptorProto_Type[FieldDescriptorProto_Type["TYPE_INT32"] = 5] = "TYPE_INT32";
|
|
31
|
-
FieldDescriptorProto_Type[FieldDescriptorProto_Type["TYPE_FIXED64"] = 6] = "TYPE_FIXED64";
|
|
32
|
-
FieldDescriptorProto_Type[FieldDescriptorProto_Type["TYPE_FIXED32"] = 7] = "TYPE_FIXED32";
|
|
33
|
-
FieldDescriptorProto_Type[FieldDescriptorProto_Type["TYPE_BOOL"] = 8] = "TYPE_BOOL";
|
|
34
|
-
FieldDescriptorProto_Type[FieldDescriptorProto_Type["TYPE_STRING"] = 9] = "TYPE_STRING";
|
|
35
|
-
/**
|
|
36
|
-
* TYPE_GROUP - Tag-delimited aggregate.
|
|
37
|
-
* Group type is deprecated and not supported in proto3. However, Proto3
|
|
38
|
-
* implementations should still be able to parse the group wire format and
|
|
39
|
-
* treat group fields as unknown fields.
|
|
40
|
-
*/
|
|
41
|
-
FieldDescriptorProto_Type[FieldDescriptorProto_Type["TYPE_GROUP"] = 10] = "TYPE_GROUP";
|
|
42
|
-
/** TYPE_MESSAGE - Length-delimited aggregate. */
|
|
43
|
-
FieldDescriptorProto_Type[FieldDescriptorProto_Type["TYPE_MESSAGE"] = 11] = "TYPE_MESSAGE";
|
|
44
|
-
/** TYPE_BYTES - New in version 2. */
|
|
45
|
-
FieldDescriptorProto_Type[FieldDescriptorProto_Type["TYPE_BYTES"] = 12] = "TYPE_BYTES";
|
|
46
|
-
FieldDescriptorProto_Type[FieldDescriptorProto_Type["TYPE_UINT32"] = 13] = "TYPE_UINT32";
|
|
47
|
-
FieldDescriptorProto_Type[FieldDescriptorProto_Type["TYPE_ENUM"] = 14] = "TYPE_ENUM";
|
|
48
|
-
FieldDescriptorProto_Type[FieldDescriptorProto_Type["TYPE_SFIXED32"] = 15] = "TYPE_SFIXED32";
|
|
49
|
-
FieldDescriptorProto_Type[FieldDescriptorProto_Type["TYPE_SFIXED64"] = 16] = "TYPE_SFIXED64";
|
|
50
|
-
/** TYPE_SINT32 - Uses ZigZag encoding. */
|
|
51
|
-
FieldDescriptorProto_Type[FieldDescriptorProto_Type["TYPE_SINT32"] = 17] = "TYPE_SINT32";
|
|
52
|
-
/** TYPE_SINT64 - Uses ZigZag encoding. */
|
|
53
|
-
FieldDescriptorProto_Type[FieldDescriptorProto_Type["TYPE_SINT64"] = 18] = "TYPE_SINT64";
|
|
54
|
-
})(FieldDescriptorProto_Type = exports.FieldDescriptorProto_Type || (exports.FieldDescriptorProto_Type = {}));
|
|
55
|
-
function fieldDescriptorProto_TypeFromJSON(object) {
|
|
56
|
-
switch (object) {
|
|
57
|
-
case 1:
|
|
58
|
-
case "TYPE_DOUBLE":
|
|
59
|
-
return FieldDescriptorProto_Type.TYPE_DOUBLE;
|
|
60
|
-
case 2:
|
|
61
|
-
case "TYPE_FLOAT":
|
|
62
|
-
return FieldDescriptorProto_Type.TYPE_FLOAT;
|
|
63
|
-
case 3:
|
|
64
|
-
case "TYPE_INT64":
|
|
65
|
-
return FieldDescriptorProto_Type.TYPE_INT64;
|
|
66
|
-
case 4:
|
|
67
|
-
case "TYPE_UINT64":
|
|
68
|
-
return FieldDescriptorProto_Type.TYPE_UINT64;
|
|
69
|
-
case 5:
|
|
70
|
-
case "TYPE_INT32":
|
|
71
|
-
return FieldDescriptorProto_Type.TYPE_INT32;
|
|
72
|
-
case 6:
|
|
73
|
-
case "TYPE_FIXED64":
|
|
74
|
-
return FieldDescriptorProto_Type.TYPE_FIXED64;
|
|
75
|
-
case 7:
|
|
76
|
-
case "TYPE_FIXED32":
|
|
77
|
-
return FieldDescriptorProto_Type.TYPE_FIXED32;
|
|
78
|
-
case 8:
|
|
79
|
-
case "TYPE_BOOL":
|
|
80
|
-
return FieldDescriptorProto_Type.TYPE_BOOL;
|
|
81
|
-
case 9:
|
|
82
|
-
case "TYPE_STRING":
|
|
83
|
-
return FieldDescriptorProto_Type.TYPE_STRING;
|
|
84
|
-
case 10:
|
|
85
|
-
case "TYPE_GROUP":
|
|
86
|
-
return FieldDescriptorProto_Type.TYPE_GROUP;
|
|
87
|
-
case 11:
|
|
88
|
-
case "TYPE_MESSAGE":
|
|
89
|
-
return FieldDescriptorProto_Type.TYPE_MESSAGE;
|
|
90
|
-
case 12:
|
|
91
|
-
case "TYPE_BYTES":
|
|
92
|
-
return FieldDescriptorProto_Type.TYPE_BYTES;
|
|
93
|
-
case 13:
|
|
94
|
-
case "TYPE_UINT32":
|
|
95
|
-
return FieldDescriptorProto_Type.TYPE_UINT32;
|
|
96
|
-
case 14:
|
|
97
|
-
case "TYPE_ENUM":
|
|
98
|
-
return FieldDescriptorProto_Type.TYPE_ENUM;
|
|
99
|
-
case 15:
|
|
100
|
-
case "TYPE_SFIXED32":
|
|
101
|
-
return FieldDescriptorProto_Type.TYPE_SFIXED32;
|
|
102
|
-
case 16:
|
|
103
|
-
case "TYPE_SFIXED64":
|
|
104
|
-
return FieldDescriptorProto_Type.TYPE_SFIXED64;
|
|
105
|
-
case 17:
|
|
106
|
-
case "TYPE_SINT32":
|
|
107
|
-
return FieldDescriptorProto_Type.TYPE_SINT32;
|
|
108
|
-
case 18:
|
|
109
|
-
case "TYPE_SINT64":
|
|
110
|
-
return FieldDescriptorProto_Type.TYPE_SINT64;
|
|
111
|
-
default:
|
|
112
|
-
throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum FieldDescriptorProto_Type");
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
exports.fieldDescriptorProto_TypeFromJSON = fieldDescriptorProto_TypeFromJSON;
|
|
116
|
-
function fieldDescriptorProto_TypeToJSON(object) {
|
|
117
|
-
switch (object) {
|
|
118
|
-
case FieldDescriptorProto_Type.TYPE_DOUBLE:
|
|
119
|
-
return "TYPE_DOUBLE";
|
|
120
|
-
case FieldDescriptorProto_Type.TYPE_FLOAT:
|
|
121
|
-
return "TYPE_FLOAT";
|
|
122
|
-
case FieldDescriptorProto_Type.TYPE_INT64:
|
|
123
|
-
return "TYPE_INT64";
|
|
124
|
-
case FieldDescriptorProto_Type.TYPE_UINT64:
|
|
125
|
-
return "TYPE_UINT64";
|
|
126
|
-
case FieldDescriptorProto_Type.TYPE_INT32:
|
|
127
|
-
return "TYPE_INT32";
|
|
128
|
-
case FieldDescriptorProto_Type.TYPE_FIXED64:
|
|
129
|
-
return "TYPE_FIXED64";
|
|
130
|
-
case FieldDescriptorProto_Type.TYPE_FIXED32:
|
|
131
|
-
return "TYPE_FIXED32";
|
|
132
|
-
case FieldDescriptorProto_Type.TYPE_BOOL:
|
|
133
|
-
return "TYPE_BOOL";
|
|
134
|
-
case FieldDescriptorProto_Type.TYPE_STRING:
|
|
135
|
-
return "TYPE_STRING";
|
|
136
|
-
case FieldDescriptorProto_Type.TYPE_GROUP:
|
|
137
|
-
return "TYPE_GROUP";
|
|
138
|
-
case FieldDescriptorProto_Type.TYPE_MESSAGE:
|
|
139
|
-
return "TYPE_MESSAGE";
|
|
140
|
-
case FieldDescriptorProto_Type.TYPE_BYTES:
|
|
141
|
-
return "TYPE_BYTES";
|
|
142
|
-
case FieldDescriptorProto_Type.TYPE_UINT32:
|
|
143
|
-
return "TYPE_UINT32";
|
|
144
|
-
case FieldDescriptorProto_Type.TYPE_ENUM:
|
|
145
|
-
return "TYPE_ENUM";
|
|
146
|
-
case FieldDescriptorProto_Type.TYPE_SFIXED32:
|
|
147
|
-
return "TYPE_SFIXED32";
|
|
148
|
-
case FieldDescriptorProto_Type.TYPE_SFIXED64:
|
|
149
|
-
return "TYPE_SFIXED64";
|
|
150
|
-
case FieldDescriptorProto_Type.TYPE_SINT32:
|
|
151
|
-
return "TYPE_SINT32";
|
|
152
|
-
case FieldDescriptorProto_Type.TYPE_SINT64:
|
|
153
|
-
return "TYPE_SINT64";
|
|
154
|
-
default:
|
|
155
|
-
throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum FieldDescriptorProto_Type");
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
exports.fieldDescriptorProto_TypeToJSON = fieldDescriptorProto_TypeToJSON;
|
|
159
|
-
var FieldDescriptorProto_Label;
|
|
160
|
-
(function (FieldDescriptorProto_Label) {
|
|
161
|
-
/** LABEL_OPTIONAL - 0 is reserved for errors */
|
|
162
|
-
FieldDescriptorProto_Label[FieldDescriptorProto_Label["LABEL_OPTIONAL"] = 1] = "LABEL_OPTIONAL";
|
|
163
|
-
FieldDescriptorProto_Label[FieldDescriptorProto_Label["LABEL_REQUIRED"] = 2] = "LABEL_REQUIRED";
|
|
164
|
-
FieldDescriptorProto_Label[FieldDescriptorProto_Label["LABEL_REPEATED"] = 3] = "LABEL_REPEATED";
|
|
165
|
-
})(FieldDescriptorProto_Label = exports.FieldDescriptorProto_Label || (exports.FieldDescriptorProto_Label = {}));
|
|
166
|
-
function fieldDescriptorProto_LabelFromJSON(object) {
|
|
167
|
-
switch (object) {
|
|
168
|
-
case 1:
|
|
169
|
-
case "LABEL_OPTIONAL":
|
|
170
|
-
return FieldDescriptorProto_Label.LABEL_OPTIONAL;
|
|
171
|
-
case 2:
|
|
172
|
-
case "LABEL_REQUIRED":
|
|
173
|
-
return FieldDescriptorProto_Label.LABEL_REQUIRED;
|
|
174
|
-
case 3:
|
|
175
|
-
case "LABEL_REPEATED":
|
|
176
|
-
return FieldDescriptorProto_Label.LABEL_REPEATED;
|
|
177
|
-
default:
|
|
178
|
-
throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum FieldDescriptorProto_Label");
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
exports.fieldDescriptorProto_LabelFromJSON = fieldDescriptorProto_LabelFromJSON;
|
|
182
|
-
function fieldDescriptorProto_LabelToJSON(object) {
|
|
183
|
-
switch (object) {
|
|
184
|
-
case FieldDescriptorProto_Label.LABEL_OPTIONAL:
|
|
185
|
-
return "LABEL_OPTIONAL";
|
|
186
|
-
case FieldDescriptorProto_Label.LABEL_REQUIRED:
|
|
187
|
-
return "LABEL_REQUIRED";
|
|
188
|
-
case FieldDescriptorProto_Label.LABEL_REPEATED:
|
|
189
|
-
return "LABEL_REPEATED";
|
|
190
|
-
default:
|
|
191
|
-
throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum FieldDescriptorProto_Label");
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
exports.fieldDescriptorProto_LabelToJSON = fieldDescriptorProto_LabelToJSON;
|
|
195
|
-
/** Generated classes can be optimized for speed or code size. */
|
|
196
|
-
var FileOptions_OptimizeMode;
|
|
197
|
-
(function (FileOptions_OptimizeMode) {
|
|
198
|
-
/** SPEED - Generate complete code for parsing, serialization, */
|
|
199
|
-
FileOptions_OptimizeMode[FileOptions_OptimizeMode["SPEED"] = 1] = "SPEED";
|
|
200
|
-
/** CODE_SIZE - etc. */
|
|
201
|
-
FileOptions_OptimizeMode[FileOptions_OptimizeMode["CODE_SIZE"] = 2] = "CODE_SIZE";
|
|
202
|
-
/** LITE_RUNTIME - Generate code using MessageLite and the lite runtime. */
|
|
203
|
-
FileOptions_OptimizeMode[FileOptions_OptimizeMode["LITE_RUNTIME"] = 3] = "LITE_RUNTIME";
|
|
204
|
-
})(FileOptions_OptimizeMode = exports.FileOptions_OptimizeMode || (exports.FileOptions_OptimizeMode = {}));
|
|
205
|
-
function fileOptions_OptimizeModeFromJSON(object) {
|
|
206
|
-
switch (object) {
|
|
207
|
-
case 1:
|
|
208
|
-
case "SPEED":
|
|
209
|
-
return FileOptions_OptimizeMode.SPEED;
|
|
210
|
-
case 2:
|
|
211
|
-
case "CODE_SIZE":
|
|
212
|
-
return FileOptions_OptimizeMode.CODE_SIZE;
|
|
213
|
-
case 3:
|
|
214
|
-
case "LITE_RUNTIME":
|
|
215
|
-
return FileOptions_OptimizeMode.LITE_RUNTIME;
|
|
216
|
-
default:
|
|
217
|
-
throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum FileOptions_OptimizeMode");
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
exports.fileOptions_OptimizeModeFromJSON = fileOptions_OptimizeModeFromJSON;
|
|
221
|
-
function fileOptions_OptimizeModeToJSON(object) {
|
|
222
|
-
switch (object) {
|
|
223
|
-
case FileOptions_OptimizeMode.SPEED:
|
|
224
|
-
return "SPEED";
|
|
225
|
-
case FileOptions_OptimizeMode.CODE_SIZE:
|
|
226
|
-
return "CODE_SIZE";
|
|
227
|
-
case FileOptions_OptimizeMode.LITE_RUNTIME:
|
|
228
|
-
return "LITE_RUNTIME";
|
|
229
|
-
default:
|
|
230
|
-
throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum FileOptions_OptimizeMode");
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
exports.fileOptions_OptimizeModeToJSON = fileOptions_OptimizeModeToJSON;
|
|
234
|
-
var FieldOptions_CType;
|
|
235
|
-
(function (FieldOptions_CType) {
|
|
236
|
-
/** STRING - Default mode. */
|
|
237
|
-
FieldOptions_CType[FieldOptions_CType["STRING"] = 0] = "STRING";
|
|
238
|
-
FieldOptions_CType[FieldOptions_CType["CORD"] = 1] = "CORD";
|
|
239
|
-
FieldOptions_CType[FieldOptions_CType["STRING_PIECE"] = 2] = "STRING_PIECE";
|
|
240
|
-
})(FieldOptions_CType = exports.FieldOptions_CType || (exports.FieldOptions_CType = {}));
|
|
241
|
-
function fieldOptions_CTypeFromJSON(object) {
|
|
242
|
-
switch (object) {
|
|
243
|
-
case 0:
|
|
244
|
-
case "STRING":
|
|
245
|
-
return FieldOptions_CType.STRING;
|
|
246
|
-
case 1:
|
|
247
|
-
case "CORD":
|
|
248
|
-
return FieldOptions_CType.CORD;
|
|
249
|
-
case 2:
|
|
250
|
-
case "STRING_PIECE":
|
|
251
|
-
return FieldOptions_CType.STRING_PIECE;
|
|
252
|
-
default:
|
|
253
|
-
throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum FieldOptions_CType");
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
exports.fieldOptions_CTypeFromJSON = fieldOptions_CTypeFromJSON;
|
|
257
|
-
function fieldOptions_CTypeToJSON(object) {
|
|
258
|
-
switch (object) {
|
|
259
|
-
case FieldOptions_CType.STRING:
|
|
260
|
-
return "STRING";
|
|
261
|
-
case FieldOptions_CType.CORD:
|
|
262
|
-
return "CORD";
|
|
263
|
-
case FieldOptions_CType.STRING_PIECE:
|
|
264
|
-
return "STRING_PIECE";
|
|
265
|
-
default:
|
|
266
|
-
throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum FieldOptions_CType");
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
exports.fieldOptions_CTypeToJSON = fieldOptions_CTypeToJSON;
|
|
270
|
-
var FieldOptions_JSType;
|
|
271
|
-
(function (FieldOptions_JSType) {
|
|
272
|
-
/** JS_NORMAL - Use the default type. */
|
|
273
|
-
FieldOptions_JSType[FieldOptions_JSType["JS_NORMAL"] = 0] = "JS_NORMAL";
|
|
274
|
-
/** JS_STRING - Use JavaScript strings. */
|
|
275
|
-
FieldOptions_JSType[FieldOptions_JSType["JS_STRING"] = 1] = "JS_STRING";
|
|
276
|
-
/** JS_NUMBER - Use JavaScript numbers. */
|
|
277
|
-
FieldOptions_JSType[FieldOptions_JSType["JS_NUMBER"] = 2] = "JS_NUMBER";
|
|
278
|
-
})(FieldOptions_JSType = exports.FieldOptions_JSType || (exports.FieldOptions_JSType = {}));
|
|
279
|
-
function fieldOptions_JSTypeFromJSON(object) {
|
|
280
|
-
switch (object) {
|
|
281
|
-
case 0:
|
|
282
|
-
case "JS_NORMAL":
|
|
283
|
-
return FieldOptions_JSType.JS_NORMAL;
|
|
284
|
-
case 1:
|
|
285
|
-
case "JS_STRING":
|
|
286
|
-
return FieldOptions_JSType.JS_STRING;
|
|
287
|
-
case 2:
|
|
288
|
-
case "JS_NUMBER":
|
|
289
|
-
return FieldOptions_JSType.JS_NUMBER;
|
|
290
|
-
default:
|
|
291
|
-
throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum FieldOptions_JSType");
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
exports.fieldOptions_JSTypeFromJSON = fieldOptions_JSTypeFromJSON;
|
|
295
|
-
function fieldOptions_JSTypeToJSON(object) {
|
|
296
|
-
switch (object) {
|
|
297
|
-
case FieldOptions_JSType.JS_NORMAL:
|
|
298
|
-
return "JS_NORMAL";
|
|
299
|
-
case FieldOptions_JSType.JS_STRING:
|
|
300
|
-
return "JS_STRING";
|
|
301
|
-
case FieldOptions_JSType.JS_NUMBER:
|
|
302
|
-
return "JS_NUMBER";
|
|
303
|
-
default:
|
|
304
|
-
throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum FieldOptions_JSType");
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
exports.fieldOptions_JSTypeToJSON = fieldOptions_JSTypeToJSON;
|
|
308
|
-
/**
|
|
309
|
-
* If set to RETENTION_SOURCE, the option will be omitted from the binary.
|
|
310
|
-
* Note: as of January 2023, support for this is in progress and does not yet
|
|
311
|
-
* have an effect (b/264593489).
|
|
312
|
-
*/
|
|
313
|
-
var FieldOptions_OptionRetention;
|
|
314
|
-
(function (FieldOptions_OptionRetention) {
|
|
315
|
-
FieldOptions_OptionRetention[FieldOptions_OptionRetention["RETENTION_UNKNOWN"] = 0] = "RETENTION_UNKNOWN";
|
|
316
|
-
FieldOptions_OptionRetention[FieldOptions_OptionRetention["RETENTION_RUNTIME"] = 1] = "RETENTION_RUNTIME";
|
|
317
|
-
FieldOptions_OptionRetention[FieldOptions_OptionRetention["RETENTION_SOURCE"] = 2] = "RETENTION_SOURCE";
|
|
318
|
-
})(FieldOptions_OptionRetention = exports.FieldOptions_OptionRetention || (exports.FieldOptions_OptionRetention = {}));
|
|
319
|
-
function fieldOptions_OptionRetentionFromJSON(object) {
|
|
320
|
-
switch (object) {
|
|
321
|
-
case 0:
|
|
322
|
-
case "RETENTION_UNKNOWN":
|
|
323
|
-
return FieldOptions_OptionRetention.RETENTION_UNKNOWN;
|
|
324
|
-
case 1:
|
|
325
|
-
case "RETENTION_RUNTIME":
|
|
326
|
-
return FieldOptions_OptionRetention.RETENTION_RUNTIME;
|
|
327
|
-
case 2:
|
|
328
|
-
case "RETENTION_SOURCE":
|
|
329
|
-
return FieldOptions_OptionRetention.RETENTION_SOURCE;
|
|
330
|
-
default:
|
|
331
|
-
throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum FieldOptions_OptionRetention");
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
exports.fieldOptions_OptionRetentionFromJSON = fieldOptions_OptionRetentionFromJSON;
|
|
335
|
-
function fieldOptions_OptionRetentionToJSON(object) {
|
|
336
|
-
switch (object) {
|
|
337
|
-
case FieldOptions_OptionRetention.RETENTION_UNKNOWN:
|
|
338
|
-
return "RETENTION_UNKNOWN";
|
|
339
|
-
case FieldOptions_OptionRetention.RETENTION_RUNTIME:
|
|
340
|
-
return "RETENTION_RUNTIME";
|
|
341
|
-
case FieldOptions_OptionRetention.RETENTION_SOURCE:
|
|
342
|
-
return "RETENTION_SOURCE";
|
|
343
|
-
default:
|
|
344
|
-
throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum FieldOptions_OptionRetention");
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
exports.fieldOptions_OptionRetentionToJSON = fieldOptions_OptionRetentionToJSON;
|
|
348
|
-
/**
|
|
349
|
-
* This indicates the types of entities that the field may apply to when used
|
|
350
|
-
* as an option. If it is unset, then the field may be freely used as an
|
|
351
|
-
* option on any kind of entity. Note: as of January 2023, support for this is
|
|
352
|
-
* in progress and does not yet have an effect (b/264593489).
|
|
353
|
-
*/
|
|
354
|
-
var FieldOptions_OptionTargetType;
|
|
355
|
-
(function (FieldOptions_OptionTargetType) {
|
|
356
|
-
FieldOptions_OptionTargetType[FieldOptions_OptionTargetType["TARGET_TYPE_UNKNOWN"] = 0] = "TARGET_TYPE_UNKNOWN";
|
|
357
|
-
FieldOptions_OptionTargetType[FieldOptions_OptionTargetType["TARGET_TYPE_FILE"] = 1] = "TARGET_TYPE_FILE";
|
|
358
|
-
FieldOptions_OptionTargetType[FieldOptions_OptionTargetType["TARGET_TYPE_EXTENSION_RANGE"] = 2] = "TARGET_TYPE_EXTENSION_RANGE";
|
|
359
|
-
FieldOptions_OptionTargetType[FieldOptions_OptionTargetType["TARGET_TYPE_MESSAGE"] = 3] = "TARGET_TYPE_MESSAGE";
|
|
360
|
-
FieldOptions_OptionTargetType[FieldOptions_OptionTargetType["TARGET_TYPE_FIELD"] = 4] = "TARGET_TYPE_FIELD";
|
|
361
|
-
FieldOptions_OptionTargetType[FieldOptions_OptionTargetType["TARGET_TYPE_ONEOF"] = 5] = "TARGET_TYPE_ONEOF";
|
|
362
|
-
FieldOptions_OptionTargetType[FieldOptions_OptionTargetType["TARGET_TYPE_ENUM"] = 6] = "TARGET_TYPE_ENUM";
|
|
363
|
-
FieldOptions_OptionTargetType[FieldOptions_OptionTargetType["TARGET_TYPE_ENUM_ENTRY"] = 7] = "TARGET_TYPE_ENUM_ENTRY";
|
|
364
|
-
FieldOptions_OptionTargetType[FieldOptions_OptionTargetType["TARGET_TYPE_SERVICE"] = 8] = "TARGET_TYPE_SERVICE";
|
|
365
|
-
FieldOptions_OptionTargetType[FieldOptions_OptionTargetType["TARGET_TYPE_METHOD"] = 9] = "TARGET_TYPE_METHOD";
|
|
366
|
-
})(FieldOptions_OptionTargetType = exports.FieldOptions_OptionTargetType || (exports.FieldOptions_OptionTargetType = {}));
|
|
367
|
-
function fieldOptions_OptionTargetTypeFromJSON(object) {
|
|
368
|
-
switch (object) {
|
|
369
|
-
case 0:
|
|
370
|
-
case "TARGET_TYPE_UNKNOWN":
|
|
371
|
-
return FieldOptions_OptionTargetType.TARGET_TYPE_UNKNOWN;
|
|
372
|
-
case 1:
|
|
373
|
-
case "TARGET_TYPE_FILE":
|
|
374
|
-
return FieldOptions_OptionTargetType.TARGET_TYPE_FILE;
|
|
375
|
-
case 2:
|
|
376
|
-
case "TARGET_TYPE_EXTENSION_RANGE":
|
|
377
|
-
return FieldOptions_OptionTargetType.TARGET_TYPE_EXTENSION_RANGE;
|
|
378
|
-
case 3:
|
|
379
|
-
case "TARGET_TYPE_MESSAGE":
|
|
380
|
-
return FieldOptions_OptionTargetType.TARGET_TYPE_MESSAGE;
|
|
381
|
-
case 4:
|
|
382
|
-
case "TARGET_TYPE_FIELD":
|
|
383
|
-
return FieldOptions_OptionTargetType.TARGET_TYPE_FIELD;
|
|
384
|
-
case 5:
|
|
385
|
-
case "TARGET_TYPE_ONEOF":
|
|
386
|
-
return FieldOptions_OptionTargetType.TARGET_TYPE_ONEOF;
|
|
387
|
-
case 6:
|
|
388
|
-
case "TARGET_TYPE_ENUM":
|
|
389
|
-
return FieldOptions_OptionTargetType.TARGET_TYPE_ENUM;
|
|
390
|
-
case 7:
|
|
391
|
-
case "TARGET_TYPE_ENUM_ENTRY":
|
|
392
|
-
return FieldOptions_OptionTargetType.TARGET_TYPE_ENUM_ENTRY;
|
|
393
|
-
case 8:
|
|
394
|
-
case "TARGET_TYPE_SERVICE":
|
|
395
|
-
return FieldOptions_OptionTargetType.TARGET_TYPE_SERVICE;
|
|
396
|
-
case 9:
|
|
397
|
-
case "TARGET_TYPE_METHOD":
|
|
398
|
-
return FieldOptions_OptionTargetType.TARGET_TYPE_METHOD;
|
|
399
|
-
default:
|
|
400
|
-
throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum FieldOptions_OptionTargetType");
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
exports.fieldOptions_OptionTargetTypeFromJSON = fieldOptions_OptionTargetTypeFromJSON;
|
|
404
|
-
function fieldOptions_OptionTargetTypeToJSON(object) {
|
|
405
|
-
switch (object) {
|
|
406
|
-
case FieldOptions_OptionTargetType.TARGET_TYPE_UNKNOWN:
|
|
407
|
-
return "TARGET_TYPE_UNKNOWN";
|
|
408
|
-
case FieldOptions_OptionTargetType.TARGET_TYPE_FILE:
|
|
409
|
-
return "TARGET_TYPE_FILE";
|
|
410
|
-
case FieldOptions_OptionTargetType.TARGET_TYPE_EXTENSION_RANGE:
|
|
411
|
-
return "TARGET_TYPE_EXTENSION_RANGE";
|
|
412
|
-
case FieldOptions_OptionTargetType.TARGET_TYPE_MESSAGE:
|
|
413
|
-
return "TARGET_TYPE_MESSAGE";
|
|
414
|
-
case FieldOptions_OptionTargetType.TARGET_TYPE_FIELD:
|
|
415
|
-
return "TARGET_TYPE_FIELD";
|
|
416
|
-
case FieldOptions_OptionTargetType.TARGET_TYPE_ONEOF:
|
|
417
|
-
return "TARGET_TYPE_ONEOF";
|
|
418
|
-
case FieldOptions_OptionTargetType.TARGET_TYPE_ENUM:
|
|
419
|
-
return "TARGET_TYPE_ENUM";
|
|
420
|
-
case FieldOptions_OptionTargetType.TARGET_TYPE_ENUM_ENTRY:
|
|
421
|
-
return "TARGET_TYPE_ENUM_ENTRY";
|
|
422
|
-
case FieldOptions_OptionTargetType.TARGET_TYPE_SERVICE:
|
|
423
|
-
return "TARGET_TYPE_SERVICE";
|
|
424
|
-
case FieldOptions_OptionTargetType.TARGET_TYPE_METHOD:
|
|
425
|
-
return "TARGET_TYPE_METHOD";
|
|
426
|
-
default:
|
|
427
|
-
throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum FieldOptions_OptionTargetType");
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
exports.fieldOptions_OptionTargetTypeToJSON = fieldOptions_OptionTargetTypeToJSON;
|
|
431
|
-
/**
|
|
432
|
-
* Is this method side-effect-free (or safe in HTTP parlance), or idempotent,
|
|
433
|
-
* or neither? HTTP based RPC implementation may choose GET verb for safe
|
|
434
|
-
* methods, and PUT verb for idempotent methods instead of the default POST.
|
|
435
|
-
*/
|
|
436
|
-
var MethodOptions_IdempotencyLevel;
|
|
437
|
-
(function (MethodOptions_IdempotencyLevel) {
|
|
438
|
-
MethodOptions_IdempotencyLevel[MethodOptions_IdempotencyLevel["IDEMPOTENCY_UNKNOWN"] = 0] = "IDEMPOTENCY_UNKNOWN";
|
|
439
|
-
/** NO_SIDE_EFFECTS - implies idempotent */
|
|
440
|
-
MethodOptions_IdempotencyLevel[MethodOptions_IdempotencyLevel["NO_SIDE_EFFECTS"] = 1] = "NO_SIDE_EFFECTS";
|
|
441
|
-
/** IDEMPOTENT - idempotent, but may have side effects */
|
|
442
|
-
MethodOptions_IdempotencyLevel[MethodOptions_IdempotencyLevel["IDEMPOTENT"] = 2] = "IDEMPOTENT";
|
|
443
|
-
})(MethodOptions_IdempotencyLevel = exports.MethodOptions_IdempotencyLevel || (exports.MethodOptions_IdempotencyLevel = {}));
|
|
444
|
-
function methodOptions_IdempotencyLevelFromJSON(object) {
|
|
445
|
-
switch (object) {
|
|
446
|
-
case 0:
|
|
447
|
-
case "IDEMPOTENCY_UNKNOWN":
|
|
448
|
-
return MethodOptions_IdempotencyLevel.IDEMPOTENCY_UNKNOWN;
|
|
449
|
-
case 1:
|
|
450
|
-
case "NO_SIDE_EFFECTS":
|
|
451
|
-
return MethodOptions_IdempotencyLevel.NO_SIDE_EFFECTS;
|
|
452
|
-
case 2:
|
|
453
|
-
case "IDEMPOTENT":
|
|
454
|
-
return MethodOptions_IdempotencyLevel.IDEMPOTENT;
|
|
455
|
-
default:
|
|
456
|
-
throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum MethodOptions_IdempotencyLevel");
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
exports.methodOptions_IdempotencyLevelFromJSON = methodOptions_IdempotencyLevelFromJSON;
|
|
460
|
-
function methodOptions_IdempotencyLevelToJSON(object) {
|
|
461
|
-
switch (object) {
|
|
462
|
-
case MethodOptions_IdempotencyLevel.IDEMPOTENCY_UNKNOWN:
|
|
463
|
-
return "IDEMPOTENCY_UNKNOWN";
|
|
464
|
-
case MethodOptions_IdempotencyLevel.NO_SIDE_EFFECTS:
|
|
465
|
-
return "NO_SIDE_EFFECTS";
|
|
466
|
-
case MethodOptions_IdempotencyLevel.IDEMPOTENT:
|
|
467
|
-
return "IDEMPOTENT";
|
|
468
|
-
default:
|
|
469
|
-
throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum MethodOptions_IdempotencyLevel");
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
exports.methodOptions_IdempotencyLevelToJSON = methodOptions_IdempotencyLevelToJSON;
|
|
473
|
-
/**
|
|
474
|
-
* Represents the identified object's effect on the element in the original
|
|
475
|
-
* .proto file.
|
|
476
|
-
*/
|
|
477
|
-
var GeneratedCodeInfo_Annotation_Semantic;
|
|
478
|
-
(function (GeneratedCodeInfo_Annotation_Semantic) {
|
|
479
|
-
/** NONE - There is no effect or the effect is indescribable. */
|
|
480
|
-
GeneratedCodeInfo_Annotation_Semantic[GeneratedCodeInfo_Annotation_Semantic["NONE"] = 0] = "NONE";
|
|
481
|
-
/** SET - The element is set or otherwise mutated. */
|
|
482
|
-
GeneratedCodeInfo_Annotation_Semantic[GeneratedCodeInfo_Annotation_Semantic["SET"] = 1] = "SET";
|
|
483
|
-
/** ALIAS - An alias to the element is returned. */
|
|
484
|
-
GeneratedCodeInfo_Annotation_Semantic[GeneratedCodeInfo_Annotation_Semantic["ALIAS"] = 2] = "ALIAS";
|
|
485
|
-
})(GeneratedCodeInfo_Annotation_Semantic = exports.GeneratedCodeInfo_Annotation_Semantic || (exports.GeneratedCodeInfo_Annotation_Semantic = {}));
|
|
486
|
-
function generatedCodeInfo_Annotation_SemanticFromJSON(object) {
|
|
487
|
-
switch (object) {
|
|
488
|
-
case 0:
|
|
489
|
-
case "NONE":
|
|
490
|
-
return GeneratedCodeInfo_Annotation_Semantic.NONE;
|
|
491
|
-
case 1:
|
|
492
|
-
case "SET":
|
|
493
|
-
return GeneratedCodeInfo_Annotation_Semantic.SET;
|
|
494
|
-
case 2:
|
|
495
|
-
case "ALIAS":
|
|
496
|
-
return GeneratedCodeInfo_Annotation_Semantic.ALIAS;
|
|
497
|
-
default:
|
|
498
|
-
throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum GeneratedCodeInfo_Annotation_Semantic");
|
|
499
|
-
}
|
|
500
|
-
}
|
|
501
|
-
exports.generatedCodeInfo_Annotation_SemanticFromJSON = generatedCodeInfo_Annotation_SemanticFromJSON;
|
|
502
|
-
function generatedCodeInfo_Annotation_SemanticToJSON(object) {
|
|
503
|
-
switch (object) {
|
|
504
|
-
case GeneratedCodeInfo_Annotation_Semantic.NONE:
|
|
505
|
-
return "NONE";
|
|
506
|
-
case GeneratedCodeInfo_Annotation_Semantic.SET:
|
|
507
|
-
return "SET";
|
|
508
|
-
case GeneratedCodeInfo_Annotation_Semantic.ALIAS:
|
|
509
|
-
return "ALIAS";
|
|
510
|
-
default:
|
|
511
|
-
throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum GeneratedCodeInfo_Annotation_Semantic");
|
|
512
|
-
}
|
|
513
|
-
}
|
|
514
|
-
exports.generatedCodeInfo_Annotation_SemanticToJSON = generatedCodeInfo_Annotation_SemanticToJSON;
|
|
515
|
-
function createBaseFileDescriptorSet() {
|
|
516
|
-
return { file: [] };
|
|
517
|
-
}
|
|
518
|
-
exports.FileDescriptorSet = {
|
|
519
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
520
|
-
for (const v of message.file) {
|
|
521
|
-
exports.FileDescriptorProto.encode(v, writer.uint32(10).fork()).ldelim();
|
|
522
|
-
}
|
|
523
|
-
return writer;
|
|
524
|
-
},
|
|
525
|
-
decode(input, length) {
|
|
526
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
527
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
528
|
-
const message = createBaseFileDescriptorSet();
|
|
529
|
-
while (reader.pos < end) {
|
|
530
|
-
const tag = reader.uint32();
|
|
531
|
-
switch (tag >>> 3) {
|
|
532
|
-
case 1:
|
|
533
|
-
if (tag !== 10) {
|
|
534
|
-
break;
|
|
535
|
-
}
|
|
536
|
-
message.file.push(exports.FileDescriptorProto.decode(reader, reader.uint32()));
|
|
537
|
-
continue;
|
|
538
|
-
}
|
|
539
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
540
|
-
break;
|
|
541
|
-
}
|
|
542
|
-
reader.skipType(tag & 7);
|
|
543
|
-
}
|
|
544
|
-
return message;
|
|
545
|
-
},
|
|
546
|
-
fromJSON(object) {
|
|
547
|
-
return { file: Array.isArray(object === null || object === void 0 ? void 0 : object.file) ? object.file.map((e) => exports.FileDescriptorProto.fromJSON(e)) : [] };
|
|
548
|
-
},
|
|
549
|
-
toJSON(message) {
|
|
550
|
-
const obj = {};
|
|
551
|
-
if (message.file) {
|
|
552
|
-
obj.file = message.file.map((e) => e ? exports.FileDescriptorProto.toJSON(e) : undefined);
|
|
553
|
-
}
|
|
554
|
-
else {
|
|
555
|
-
obj.file = [];
|
|
556
|
-
}
|
|
557
|
-
return obj;
|
|
558
|
-
},
|
|
559
|
-
create(base) {
|
|
560
|
-
return exports.FileDescriptorSet.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
561
|
-
},
|
|
562
|
-
fromPartial(object) {
|
|
563
|
-
var _a;
|
|
564
|
-
const message = createBaseFileDescriptorSet();
|
|
565
|
-
message.file = ((_a = object.file) === null || _a === void 0 ? void 0 : _a.map((e) => exports.FileDescriptorProto.fromPartial(e))) || [];
|
|
566
|
-
return message;
|
|
567
|
-
},
|
|
568
|
-
};
|
|
569
|
-
function createBaseFileDescriptorProto() {
|
|
570
|
-
return {
|
|
571
|
-
name: "",
|
|
572
|
-
package: "",
|
|
573
|
-
dependency: [],
|
|
574
|
-
publicDependency: [],
|
|
575
|
-
weakDependency: [],
|
|
576
|
-
messageType: [],
|
|
577
|
-
enumType: [],
|
|
578
|
-
service: [],
|
|
579
|
-
extension: [],
|
|
580
|
-
options: undefined,
|
|
581
|
-
sourceCodeInfo: undefined,
|
|
582
|
-
syntax: "",
|
|
583
|
-
edition: "",
|
|
584
|
-
};
|
|
585
|
-
}
|
|
586
|
-
exports.FileDescriptorProto = {
|
|
587
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
588
|
-
if (message.name !== "") {
|
|
589
|
-
writer.uint32(10).string(message.name);
|
|
590
|
-
}
|
|
591
|
-
if (message.package !== "") {
|
|
592
|
-
writer.uint32(18).string(message.package);
|
|
593
|
-
}
|
|
594
|
-
for (const v of message.dependency) {
|
|
595
|
-
writer.uint32(26).string(v);
|
|
596
|
-
}
|
|
597
|
-
writer.uint32(82).fork();
|
|
598
|
-
for (const v of message.publicDependency) {
|
|
599
|
-
writer.int32(v);
|
|
600
|
-
}
|
|
601
|
-
writer.ldelim();
|
|
602
|
-
writer.uint32(90).fork();
|
|
603
|
-
for (const v of message.weakDependency) {
|
|
604
|
-
writer.int32(v);
|
|
605
|
-
}
|
|
606
|
-
writer.ldelim();
|
|
607
|
-
for (const v of message.messageType) {
|
|
608
|
-
exports.DescriptorProto.encode(v, writer.uint32(34).fork()).ldelim();
|
|
609
|
-
}
|
|
610
|
-
for (const v of message.enumType) {
|
|
611
|
-
exports.EnumDescriptorProto.encode(v, writer.uint32(42).fork()).ldelim();
|
|
612
|
-
}
|
|
613
|
-
for (const v of message.service) {
|
|
614
|
-
exports.ServiceDescriptorProto.encode(v, writer.uint32(50).fork()).ldelim();
|
|
615
|
-
}
|
|
616
|
-
for (const v of message.extension) {
|
|
617
|
-
exports.FieldDescriptorProto.encode(v, writer.uint32(58).fork()).ldelim();
|
|
618
|
-
}
|
|
619
|
-
if (message.options !== undefined) {
|
|
620
|
-
exports.FileOptions.encode(message.options, writer.uint32(66).fork()).ldelim();
|
|
621
|
-
}
|
|
622
|
-
if (message.sourceCodeInfo !== undefined) {
|
|
623
|
-
exports.SourceCodeInfo.encode(message.sourceCodeInfo, writer.uint32(74).fork()).ldelim();
|
|
624
|
-
}
|
|
625
|
-
if (message.syntax !== "") {
|
|
626
|
-
writer.uint32(98).string(message.syntax);
|
|
627
|
-
}
|
|
628
|
-
if (message.edition !== "") {
|
|
629
|
-
writer.uint32(106).string(message.edition);
|
|
630
|
-
}
|
|
631
|
-
return writer;
|
|
632
|
-
},
|
|
633
|
-
decode(input, length) {
|
|
634
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
635
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
636
|
-
const message = createBaseFileDescriptorProto();
|
|
637
|
-
while (reader.pos < end) {
|
|
638
|
-
const tag = reader.uint32();
|
|
639
|
-
switch (tag >>> 3) {
|
|
640
|
-
case 1:
|
|
641
|
-
if (tag !== 10) {
|
|
642
|
-
break;
|
|
643
|
-
}
|
|
644
|
-
message.name = reader.string();
|
|
645
|
-
continue;
|
|
646
|
-
case 2:
|
|
647
|
-
if (tag !== 18) {
|
|
648
|
-
break;
|
|
649
|
-
}
|
|
650
|
-
message.package = reader.string();
|
|
651
|
-
continue;
|
|
652
|
-
case 3:
|
|
653
|
-
if (tag !== 26) {
|
|
654
|
-
break;
|
|
655
|
-
}
|
|
656
|
-
message.dependency.push(reader.string());
|
|
657
|
-
continue;
|
|
658
|
-
case 10:
|
|
659
|
-
if (tag === 80) {
|
|
660
|
-
message.publicDependency.push(reader.int32());
|
|
661
|
-
continue;
|
|
662
|
-
}
|
|
663
|
-
if (tag === 82) {
|
|
664
|
-
const end2 = reader.uint32() + reader.pos;
|
|
665
|
-
while (reader.pos < end2) {
|
|
666
|
-
message.publicDependency.push(reader.int32());
|
|
667
|
-
}
|
|
668
|
-
continue;
|
|
669
|
-
}
|
|
670
|
-
break;
|
|
671
|
-
case 11:
|
|
672
|
-
if (tag === 88) {
|
|
673
|
-
message.weakDependency.push(reader.int32());
|
|
674
|
-
continue;
|
|
675
|
-
}
|
|
676
|
-
if (tag === 90) {
|
|
677
|
-
const end2 = reader.uint32() + reader.pos;
|
|
678
|
-
while (reader.pos < end2) {
|
|
679
|
-
message.weakDependency.push(reader.int32());
|
|
680
|
-
}
|
|
681
|
-
continue;
|
|
682
|
-
}
|
|
683
|
-
break;
|
|
684
|
-
case 4:
|
|
685
|
-
if (tag !== 34) {
|
|
686
|
-
break;
|
|
687
|
-
}
|
|
688
|
-
message.messageType.push(exports.DescriptorProto.decode(reader, reader.uint32()));
|
|
689
|
-
continue;
|
|
690
|
-
case 5:
|
|
691
|
-
if (tag !== 42) {
|
|
692
|
-
break;
|
|
693
|
-
}
|
|
694
|
-
message.enumType.push(exports.EnumDescriptorProto.decode(reader, reader.uint32()));
|
|
695
|
-
continue;
|
|
696
|
-
case 6:
|
|
697
|
-
if (tag !== 50) {
|
|
698
|
-
break;
|
|
699
|
-
}
|
|
700
|
-
message.service.push(exports.ServiceDescriptorProto.decode(reader, reader.uint32()));
|
|
701
|
-
continue;
|
|
702
|
-
case 7:
|
|
703
|
-
if (tag !== 58) {
|
|
704
|
-
break;
|
|
705
|
-
}
|
|
706
|
-
message.extension.push(exports.FieldDescriptorProto.decode(reader, reader.uint32()));
|
|
707
|
-
continue;
|
|
708
|
-
case 8:
|
|
709
|
-
if (tag !== 66) {
|
|
710
|
-
break;
|
|
711
|
-
}
|
|
712
|
-
message.options = exports.FileOptions.decode(reader, reader.uint32());
|
|
713
|
-
continue;
|
|
714
|
-
case 9:
|
|
715
|
-
if (tag !== 74) {
|
|
716
|
-
break;
|
|
717
|
-
}
|
|
718
|
-
message.sourceCodeInfo = exports.SourceCodeInfo.decode(reader, reader.uint32());
|
|
719
|
-
continue;
|
|
720
|
-
case 12:
|
|
721
|
-
if (tag !== 98) {
|
|
722
|
-
break;
|
|
723
|
-
}
|
|
724
|
-
message.syntax = reader.string();
|
|
725
|
-
continue;
|
|
726
|
-
case 13:
|
|
727
|
-
if (tag !== 106) {
|
|
728
|
-
break;
|
|
729
|
-
}
|
|
730
|
-
message.edition = reader.string();
|
|
731
|
-
continue;
|
|
732
|
-
}
|
|
733
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
734
|
-
break;
|
|
735
|
-
}
|
|
736
|
-
reader.skipType(tag & 7);
|
|
737
|
-
}
|
|
738
|
-
return message;
|
|
739
|
-
},
|
|
740
|
-
fromJSON(object) {
|
|
741
|
-
return {
|
|
742
|
-
name: isSet(object.name) ? String(object.name) : "",
|
|
743
|
-
package: isSet(object.package) ? String(object.package) : "",
|
|
744
|
-
dependency: Array.isArray(object === null || object === void 0 ? void 0 : object.dependency) ? object.dependency.map((e) => String(e)) : [],
|
|
745
|
-
publicDependency: Array.isArray(object === null || object === void 0 ? void 0 : object.publicDependency)
|
|
746
|
-
? object.publicDependency.map((e) => Number(e))
|
|
747
|
-
: [],
|
|
748
|
-
weakDependency: Array.isArray(object === null || object === void 0 ? void 0 : object.weakDependency) ? object.weakDependency.map((e) => Number(e)) : [],
|
|
749
|
-
messageType: Array.isArray(object === null || object === void 0 ? void 0 : object.messageType)
|
|
750
|
-
? object.messageType.map((e) => exports.DescriptorProto.fromJSON(e))
|
|
751
|
-
: [],
|
|
752
|
-
enumType: Array.isArray(object === null || object === void 0 ? void 0 : object.enumType) ? object.enumType.map((e) => exports.EnumDescriptorProto.fromJSON(e)) : [],
|
|
753
|
-
service: Array.isArray(object === null || object === void 0 ? void 0 : object.service) ? object.service.map((e) => exports.ServiceDescriptorProto.fromJSON(e)) : [],
|
|
754
|
-
extension: Array.isArray(object === null || object === void 0 ? void 0 : object.extension)
|
|
755
|
-
? object.extension.map((e) => exports.FieldDescriptorProto.fromJSON(e))
|
|
756
|
-
: [],
|
|
757
|
-
options: isSet(object.options) ? exports.FileOptions.fromJSON(object.options) : undefined,
|
|
758
|
-
sourceCodeInfo: isSet(object.sourceCodeInfo) ? exports.SourceCodeInfo.fromJSON(object.sourceCodeInfo) : undefined,
|
|
759
|
-
syntax: isSet(object.syntax) ? String(object.syntax) : "",
|
|
760
|
-
edition: isSet(object.edition) ? String(object.edition) : "",
|
|
761
|
-
};
|
|
762
|
-
},
|
|
763
|
-
toJSON(message) {
|
|
764
|
-
const obj = {};
|
|
765
|
-
message.name !== undefined && (obj.name = message.name);
|
|
766
|
-
message.package !== undefined && (obj.package = message.package);
|
|
767
|
-
if (message.dependency) {
|
|
768
|
-
obj.dependency = message.dependency.map((e) => e);
|
|
769
|
-
}
|
|
770
|
-
else {
|
|
771
|
-
obj.dependency = [];
|
|
772
|
-
}
|
|
773
|
-
if (message.publicDependency) {
|
|
774
|
-
obj.publicDependency = message.publicDependency.map((e) => Math.round(e));
|
|
775
|
-
}
|
|
776
|
-
else {
|
|
777
|
-
obj.publicDependency = [];
|
|
778
|
-
}
|
|
779
|
-
if (message.weakDependency) {
|
|
780
|
-
obj.weakDependency = message.weakDependency.map((e) => Math.round(e));
|
|
781
|
-
}
|
|
782
|
-
else {
|
|
783
|
-
obj.weakDependency = [];
|
|
784
|
-
}
|
|
785
|
-
if (message.messageType) {
|
|
786
|
-
obj.messageType = message.messageType.map((e) => e ? exports.DescriptorProto.toJSON(e) : undefined);
|
|
787
|
-
}
|
|
788
|
-
else {
|
|
789
|
-
obj.messageType = [];
|
|
790
|
-
}
|
|
791
|
-
if (message.enumType) {
|
|
792
|
-
obj.enumType = message.enumType.map((e) => e ? exports.EnumDescriptorProto.toJSON(e) : undefined);
|
|
793
|
-
}
|
|
794
|
-
else {
|
|
795
|
-
obj.enumType = [];
|
|
796
|
-
}
|
|
797
|
-
if (message.service) {
|
|
798
|
-
obj.service = message.service.map((e) => e ? exports.ServiceDescriptorProto.toJSON(e) : undefined);
|
|
799
|
-
}
|
|
800
|
-
else {
|
|
801
|
-
obj.service = [];
|
|
802
|
-
}
|
|
803
|
-
if (message.extension) {
|
|
804
|
-
obj.extension = message.extension.map((e) => e ? exports.FieldDescriptorProto.toJSON(e) : undefined);
|
|
805
|
-
}
|
|
806
|
-
else {
|
|
807
|
-
obj.extension = [];
|
|
808
|
-
}
|
|
809
|
-
message.options !== undefined && (obj.options = message.options ? exports.FileOptions.toJSON(message.options) : undefined);
|
|
810
|
-
message.sourceCodeInfo !== undefined &&
|
|
811
|
-
(obj.sourceCodeInfo = message.sourceCodeInfo ? exports.SourceCodeInfo.toJSON(message.sourceCodeInfo) : undefined);
|
|
812
|
-
message.syntax !== undefined && (obj.syntax = message.syntax);
|
|
813
|
-
message.edition !== undefined && (obj.edition = message.edition);
|
|
814
|
-
return obj;
|
|
815
|
-
},
|
|
816
|
-
create(base) {
|
|
817
|
-
return exports.FileDescriptorProto.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
818
|
-
},
|
|
819
|
-
fromPartial(object) {
|
|
820
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
821
|
-
const message = createBaseFileDescriptorProto();
|
|
822
|
-
message.name = (_a = object.name) !== null && _a !== void 0 ? _a : "";
|
|
823
|
-
message.package = (_b = object.package) !== null && _b !== void 0 ? _b : "";
|
|
824
|
-
message.dependency = ((_c = object.dependency) === null || _c === void 0 ? void 0 : _c.map((e) => e)) || [];
|
|
825
|
-
message.publicDependency = ((_d = object.publicDependency) === null || _d === void 0 ? void 0 : _d.map((e) => e)) || [];
|
|
826
|
-
message.weakDependency = ((_e = object.weakDependency) === null || _e === void 0 ? void 0 : _e.map((e) => e)) || [];
|
|
827
|
-
message.messageType = ((_f = object.messageType) === null || _f === void 0 ? void 0 : _f.map((e) => exports.DescriptorProto.fromPartial(e))) || [];
|
|
828
|
-
message.enumType = ((_g = object.enumType) === null || _g === void 0 ? void 0 : _g.map((e) => exports.EnumDescriptorProto.fromPartial(e))) || [];
|
|
829
|
-
message.service = ((_h = object.service) === null || _h === void 0 ? void 0 : _h.map((e) => exports.ServiceDescriptorProto.fromPartial(e))) || [];
|
|
830
|
-
message.extension = ((_j = object.extension) === null || _j === void 0 ? void 0 : _j.map((e) => exports.FieldDescriptorProto.fromPartial(e))) || [];
|
|
831
|
-
message.options = (object.options !== undefined && object.options !== null)
|
|
832
|
-
? exports.FileOptions.fromPartial(object.options)
|
|
833
|
-
: undefined;
|
|
834
|
-
message.sourceCodeInfo = (object.sourceCodeInfo !== undefined && object.sourceCodeInfo !== null)
|
|
835
|
-
? exports.SourceCodeInfo.fromPartial(object.sourceCodeInfo)
|
|
836
|
-
: undefined;
|
|
837
|
-
message.syntax = (_k = object.syntax) !== null && _k !== void 0 ? _k : "";
|
|
838
|
-
message.edition = (_l = object.edition) !== null && _l !== void 0 ? _l : "";
|
|
839
|
-
return message;
|
|
840
|
-
},
|
|
841
|
-
};
|
|
842
|
-
function createBaseDescriptorProto() {
|
|
843
|
-
return {
|
|
844
|
-
name: "",
|
|
845
|
-
field: [],
|
|
846
|
-
extension: [],
|
|
847
|
-
nestedType: [],
|
|
848
|
-
enumType: [],
|
|
849
|
-
extensionRange: [],
|
|
850
|
-
oneofDecl: [],
|
|
851
|
-
options: undefined,
|
|
852
|
-
reservedRange: [],
|
|
853
|
-
reservedName: [],
|
|
854
|
-
};
|
|
855
|
-
}
|
|
856
|
-
exports.DescriptorProto = {
|
|
857
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
858
|
-
if (message.name !== "") {
|
|
859
|
-
writer.uint32(10).string(message.name);
|
|
860
|
-
}
|
|
861
|
-
for (const v of message.field) {
|
|
862
|
-
exports.FieldDescriptorProto.encode(v, writer.uint32(18).fork()).ldelim();
|
|
863
|
-
}
|
|
864
|
-
for (const v of message.extension) {
|
|
865
|
-
exports.FieldDescriptorProto.encode(v, writer.uint32(50).fork()).ldelim();
|
|
866
|
-
}
|
|
867
|
-
for (const v of message.nestedType) {
|
|
868
|
-
exports.DescriptorProto.encode(v, writer.uint32(26).fork()).ldelim();
|
|
869
|
-
}
|
|
870
|
-
for (const v of message.enumType) {
|
|
871
|
-
exports.EnumDescriptorProto.encode(v, writer.uint32(34).fork()).ldelim();
|
|
872
|
-
}
|
|
873
|
-
for (const v of message.extensionRange) {
|
|
874
|
-
exports.DescriptorProto_ExtensionRange.encode(v, writer.uint32(42).fork()).ldelim();
|
|
875
|
-
}
|
|
876
|
-
for (const v of message.oneofDecl) {
|
|
877
|
-
exports.OneofDescriptorProto.encode(v, writer.uint32(66).fork()).ldelim();
|
|
878
|
-
}
|
|
879
|
-
if (message.options !== undefined) {
|
|
880
|
-
exports.MessageOptions.encode(message.options, writer.uint32(58).fork()).ldelim();
|
|
881
|
-
}
|
|
882
|
-
for (const v of message.reservedRange) {
|
|
883
|
-
exports.DescriptorProto_ReservedRange.encode(v, writer.uint32(74).fork()).ldelim();
|
|
884
|
-
}
|
|
885
|
-
for (const v of message.reservedName) {
|
|
886
|
-
writer.uint32(82).string(v);
|
|
887
|
-
}
|
|
888
|
-
return writer;
|
|
889
|
-
},
|
|
890
|
-
decode(input, length) {
|
|
891
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
892
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
893
|
-
const message = createBaseDescriptorProto();
|
|
894
|
-
while (reader.pos < end) {
|
|
895
|
-
const tag = reader.uint32();
|
|
896
|
-
switch (tag >>> 3) {
|
|
897
|
-
case 1:
|
|
898
|
-
if (tag !== 10) {
|
|
899
|
-
break;
|
|
900
|
-
}
|
|
901
|
-
message.name = reader.string();
|
|
902
|
-
continue;
|
|
903
|
-
case 2:
|
|
904
|
-
if (tag !== 18) {
|
|
905
|
-
break;
|
|
906
|
-
}
|
|
907
|
-
message.field.push(exports.FieldDescriptorProto.decode(reader, reader.uint32()));
|
|
908
|
-
continue;
|
|
909
|
-
case 6:
|
|
910
|
-
if (tag !== 50) {
|
|
911
|
-
break;
|
|
912
|
-
}
|
|
913
|
-
message.extension.push(exports.FieldDescriptorProto.decode(reader, reader.uint32()));
|
|
914
|
-
continue;
|
|
915
|
-
case 3:
|
|
916
|
-
if (tag !== 26) {
|
|
917
|
-
break;
|
|
918
|
-
}
|
|
919
|
-
message.nestedType.push(exports.DescriptorProto.decode(reader, reader.uint32()));
|
|
920
|
-
continue;
|
|
921
|
-
case 4:
|
|
922
|
-
if (tag !== 34) {
|
|
923
|
-
break;
|
|
924
|
-
}
|
|
925
|
-
message.enumType.push(exports.EnumDescriptorProto.decode(reader, reader.uint32()));
|
|
926
|
-
continue;
|
|
927
|
-
case 5:
|
|
928
|
-
if (tag !== 42) {
|
|
929
|
-
break;
|
|
930
|
-
}
|
|
931
|
-
message.extensionRange.push(exports.DescriptorProto_ExtensionRange.decode(reader, reader.uint32()));
|
|
932
|
-
continue;
|
|
933
|
-
case 8:
|
|
934
|
-
if (tag !== 66) {
|
|
935
|
-
break;
|
|
936
|
-
}
|
|
937
|
-
message.oneofDecl.push(exports.OneofDescriptorProto.decode(reader, reader.uint32()));
|
|
938
|
-
continue;
|
|
939
|
-
case 7:
|
|
940
|
-
if (tag !== 58) {
|
|
941
|
-
break;
|
|
942
|
-
}
|
|
943
|
-
message.options = exports.MessageOptions.decode(reader, reader.uint32());
|
|
944
|
-
continue;
|
|
945
|
-
case 9:
|
|
946
|
-
if (tag !== 74) {
|
|
947
|
-
break;
|
|
948
|
-
}
|
|
949
|
-
message.reservedRange.push(exports.DescriptorProto_ReservedRange.decode(reader, reader.uint32()));
|
|
950
|
-
continue;
|
|
951
|
-
case 10:
|
|
952
|
-
if (tag !== 82) {
|
|
953
|
-
break;
|
|
954
|
-
}
|
|
955
|
-
message.reservedName.push(reader.string());
|
|
956
|
-
continue;
|
|
957
|
-
}
|
|
958
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
959
|
-
break;
|
|
960
|
-
}
|
|
961
|
-
reader.skipType(tag & 7);
|
|
962
|
-
}
|
|
963
|
-
return message;
|
|
964
|
-
},
|
|
965
|
-
fromJSON(object) {
|
|
966
|
-
return {
|
|
967
|
-
name: isSet(object.name) ? String(object.name) : "",
|
|
968
|
-
field: Array.isArray(object === null || object === void 0 ? void 0 : object.field) ? object.field.map((e) => exports.FieldDescriptorProto.fromJSON(e)) : [],
|
|
969
|
-
extension: Array.isArray(object === null || object === void 0 ? void 0 : object.extension)
|
|
970
|
-
? object.extension.map((e) => exports.FieldDescriptorProto.fromJSON(e))
|
|
971
|
-
: [],
|
|
972
|
-
nestedType: Array.isArray(object === null || object === void 0 ? void 0 : object.nestedType)
|
|
973
|
-
? object.nestedType.map((e) => exports.DescriptorProto.fromJSON(e))
|
|
974
|
-
: [],
|
|
975
|
-
enumType: Array.isArray(object === null || object === void 0 ? void 0 : object.enumType) ? object.enumType.map((e) => exports.EnumDescriptorProto.fromJSON(e)) : [],
|
|
976
|
-
extensionRange: Array.isArray(object === null || object === void 0 ? void 0 : object.extensionRange)
|
|
977
|
-
? object.extensionRange.map((e) => exports.DescriptorProto_ExtensionRange.fromJSON(e))
|
|
978
|
-
: [],
|
|
979
|
-
oneofDecl: Array.isArray(object === null || object === void 0 ? void 0 : object.oneofDecl)
|
|
980
|
-
? object.oneofDecl.map((e) => exports.OneofDescriptorProto.fromJSON(e))
|
|
981
|
-
: [],
|
|
982
|
-
options: isSet(object.options) ? exports.MessageOptions.fromJSON(object.options) : undefined,
|
|
983
|
-
reservedRange: Array.isArray(object === null || object === void 0 ? void 0 : object.reservedRange)
|
|
984
|
-
? object.reservedRange.map((e) => exports.DescriptorProto_ReservedRange.fromJSON(e))
|
|
985
|
-
: [],
|
|
986
|
-
reservedName: Array.isArray(object === null || object === void 0 ? void 0 : object.reservedName) ? object.reservedName.map((e) => String(e)) : [],
|
|
987
|
-
};
|
|
988
|
-
},
|
|
989
|
-
toJSON(message) {
|
|
990
|
-
const obj = {};
|
|
991
|
-
message.name !== undefined && (obj.name = message.name);
|
|
992
|
-
if (message.field) {
|
|
993
|
-
obj.field = message.field.map((e) => e ? exports.FieldDescriptorProto.toJSON(e) : undefined);
|
|
994
|
-
}
|
|
995
|
-
else {
|
|
996
|
-
obj.field = [];
|
|
997
|
-
}
|
|
998
|
-
if (message.extension) {
|
|
999
|
-
obj.extension = message.extension.map((e) => e ? exports.FieldDescriptorProto.toJSON(e) : undefined);
|
|
1000
|
-
}
|
|
1001
|
-
else {
|
|
1002
|
-
obj.extension = [];
|
|
1003
|
-
}
|
|
1004
|
-
if (message.nestedType) {
|
|
1005
|
-
obj.nestedType = message.nestedType.map((e) => e ? exports.DescriptorProto.toJSON(e) : undefined);
|
|
1006
|
-
}
|
|
1007
|
-
else {
|
|
1008
|
-
obj.nestedType = [];
|
|
1009
|
-
}
|
|
1010
|
-
if (message.enumType) {
|
|
1011
|
-
obj.enumType = message.enumType.map((e) => e ? exports.EnumDescriptorProto.toJSON(e) : undefined);
|
|
1012
|
-
}
|
|
1013
|
-
else {
|
|
1014
|
-
obj.enumType = [];
|
|
1015
|
-
}
|
|
1016
|
-
if (message.extensionRange) {
|
|
1017
|
-
obj.extensionRange = message.extensionRange.map((e) => e ? exports.DescriptorProto_ExtensionRange.toJSON(e) : undefined);
|
|
1018
|
-
}
|
|
1019
|
-
else {
|
|
1020
|
-
obj.extensionRange = [];
|
|
1021
|
-
}
|
|
1022
|
-
if (message.oneofDecl) {
|
|
1023
|
-
obj.oneofDecl = message.oneofDecl.map((e) => e ? exports.OneofDescriptorProto.toJSON(e) : undefined);
|
|
1024
|
-
}
|
|
1025
|
-
else {
|
|
1026
|
-
obj.oneofDecl = [];
|
|
1027
|
-
}
|
|
1028
|
-
message.options !== undefined &&
|
|
1029
|
-
(obj.options = message.options ? exports.MessageOptions.toJSON(message.options) : undefined);
|
|
1030
|
-
if (message.reservedRange) {
|
|
1031
|
-
obj.reservedRange = message.reservedRange.map((e) => e ? exports.DescriptorProto_ReservedRange.toJSON(e) : undefined);
|
|
1032
|
-
}
|
|
1033
|
-
else {
|
|
1034
|
-
obj.reservedRange = [];
|
|
1035
|
-
}
|
|
1036
|
-
if (message.reservedName) {
|
|
1037
|
-
obj.reservedName = message.reservedName.map((e) => e);
|
|
1038
|
-
}
|
|
1039
|
-
else {
|
|
1040
|
-
obj.reservedName = [];
|
|
1041
|
-
}
|
|
1042
|
-
return obj;
|
|
1043
|
-
},
|
|
1044
|
-
create(base) {
|
|
1045
|
-
return exports.DescriptorProto.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
1046
|
-
},
|
|
1047
|
-
fromPartial(object) {
|
|
1048
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
1049
|
-
const message = createBaseDescriptorProto();
|
|
1050
|
-
message.name = (_a = object.name) !== null && _a !== void 0 ? _a : "";
|
|
1051
|
-
message.field = ((_b = object.field) === null || _b === void 0 ? void 0 : _b.map((e) => exports.FieldDescriptorProto.fromPartial(e))) || [];
|
|
1052
|
-
message.extension = ((_c = object.extension) === null || _c === void 0 ? void 0 : _c.map((e) => exports.FieldDescriptorProto.fromPartial(e))) || [];
|
|
1053
|
-
message.nestedType = ((_d = object.nestedType) === null || _d === void 0 ? void 0 : _d.map((e) => exports.DescriptorProto.fromPartial(e))) || [];
|
|
1054
|
-
message.enumType = ((_e = object.enumType) === null || _e === void 0 ? void 0 : _e.map((e) => exports.EnumDescriptorProto.fromPartial(e))) || [];
|
|
1055
|
-
message.extensionRange = ((_f = object.extensionRange) === null || _f === void 0 ? void 0 : _f.map((e) => exports.DescriptorProto_ExtensionRange.fromPartial(e))) || [];
|
|
1056
|
-
message.oneofDecl = ((_g = object.oneofDecl) === null || _g === void 0 ? void 0 : _g.map((e) => exports.OneofDescriptorProto.fromPartial(e))) || [];
|
|
1057
|
-
message.options = (object.options !== undefined && object.options !== null)
|
|
1058
|
-
? exports.MessageOptions.fromPartial(object.options)
|
|
1059
|
-
: undefined;
|
|
1060
|
-
message.reservedRange = ((_h = object.reservedRange) === null || _h === void 0 ? void 0 : _h.map((e) => exports.DescriptorProto_ReservedRange.fromPartial(e))) || [];
|
|
1061
|
-
message.reservedName = ((_j = object.reservedName) === null || _j === void 0 ? void 0 : _j.map((e) => e)) || [];
|
|
1062
|
-
return message;
|
|
1063
|
-
},
|
|
1064
|
-
};
|
|
1065
|
-
function createBaseDescriptorProto_ExtensionRange() {
|
|
1066
|
-
return { start: 0, end: 0, options: undefined };
|
|
1067
|
-
}
|
|
1068
|
-
exports.DescriptorProto_ExtensionRange = {
|
|
1069
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
1070
|
-
if (message.start !== 0) {
|
|
1071
|
-
writer.uint32(8).int32(message.start);
|
|
1072
|
-
}
|
|
1073
|
-
if (message.end !== 0) {
|
|
1074
|
-
writer.uint32(16).int32(message.end);
|
|
1075
|
-
}
|
|
1076
|
-
if (message.options !== undefined) {
|
|
1077
|
-
exports.ExtensionRangeOptions.encode(message.options, writer.uint32(26).fork()).ldelim();
|
|
1078
|
-
}
|
|
1079
|
-
return writer;
|
|
1080
|
-
},
|
|
1081
|
-
decode(input, length) {
|
|
1082
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
1083
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
1084
|
-
const message = createBaseDescriptorProto_ExtensionRange();
|
|
1085
|
-
while (reader.pos < end) {
|
|
1086
|
-
const tag = reader.uint32();
|
|
1087
|
-
switch (tag >>> 3) {
|
|
1088
|
-
case 1:
|
|
1089
|
-
if (tag !== 8) {
|
|
1090
|
-
break;
|
|
1091
|
-
}
|
|
1092
|
-
message.start = reader.int32();
|
|
1093
|
-
continue;
|
|
1094
|
-
case 2:
|
|
1095
|
-
if (tag !== 16) {
|
|
1096
|
-
break;
|
|
1097
|
-
}
|
|
1098
|
-
message.end = reader.int32();
|
|
1099
|
-
continue;
|
|
1100
|
-
case 3:
|
|
1101
|
-
if (tag !== 26) {
|
|
1102
|
-
break;
|
|
1103
|
-
}
|
|
1104
|
-
message.options = exports.ExtensionRangeOptions.decode(reader, reader.uint32());
|
|
1105
|
-
continue;
|
|
1106
|
-
}
|
|
1107
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
1108
|
-
break;
|
|
1109
|
-
}
|
|
1110
|
-
reader.skipType(tag & 7);
|
|
1111
|
-
}
|
|
1112
|
-
return message;
|
|
1113
|
-
},
|
|
1114
|
-
fromJSON(object) {
|
|
1115
|
-
return {
|
|
1116
|
-
start: isSet(object.start) ? Number(object.start) : 0,
|
|
1117
|
-
end: isSet(object.end) ? Number(object.end) : 0,
|
|
1118
|
-
options: isSet(object.options) ? exports.ExtensionRangeOptions.fromJSON(object.options) : undefined,
|
|
1119
|
-
};
|
|
1120
|
-
},
|
|
1121
|
-
toJSON(message) {
|
|
1122
|
-
const obj = {};
|
|
1123
|
-
message.start !== undefined && (obj.start = Math.round(message.start));
|
|
1124
|
-
message.end !== undefined && (obj.end = Math.round(message.end));
|
|
1125
|
-
message.options !== undefined &&
|
|
1126
|
-
(obj.options = message.options ? exports.ExtensionRangeOptions.toJSON(message.options) : undefined);
|
|
1127
|
-
return obj;
|
|
1128
|
-
},
|
|
1129
|
-
create(base) {
|
|
1130
|
-
return exports.DescriptorProto_ExtensionRange.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
1131
|
-
},
|
|
1132
|
-
fromPartial(object) {
|
|
1133
|
-
var _a, _b;
|
|
1134
|
-
const message = createBaseDescriptorProto_ExtensionRange();
|
|
1135
|
-
message.start = (_a = object.start) !== null && _a !== void 0 ? _a : 0;
|
|
1136
|
-
message.end = (_b = object.end) !== null && _b !== void 0 ? _b : 0;
|
|
1137
|
-
message.options = (object.options !== undefined && object.options !== null)
|
|
1138
|
-
? exports.ExtensionRangeOptions.fromPartial(object.options)
|
|
1139
|
-
: undefined;
|
|
1140
|
-
return message;
|
|
1141
|
-
},
|
|
1142
|
-
};
|
|
1143
|
-
function createBaseDescriptorProto_ReservedRange() {
|
|
1144
|
-
return { start: 0, end: 0 };
|
|
1145
|
-
}
|
|
1146
|
-
exports.DescriptorProto_ReservedRange = {
|
|
1147
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
1148
|
-
if (message.start !== 0) {
|
|
1149
|
-
writer.uint32(8).int32(message.start);
|
|
1150
|
-
}
|
|
1151
|
-
if (message.end !== 0) {
|
|
1152
|
-
writer.uint32(16).int32(message.end);
|
|
1153
|
-
}
|
|
1154
|
-
return writer;
|
|
1155
|
-
},
|
|
1156
|
-
decode(input, length) {
|
|
1157
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
1158
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
1159
|
-
const message = createBaseDescriptorProto_ReservedRange();
|
|
1160
|
-
while (reader.pos < end) {
|
|
1161
|
-
const tag = reader.uint32();
|
|
1162
|
-
switch (tag >>> 3) {
|
|
1163
|
-
case 1:
|
|
1164
|
-
if (tag !== 8) {
|
|
1165
|
-
break;
|
|
1166
|
-
}
|
|
1167
|
-
message.start = reader.int32();
|
|
1168
|
-
continue;
|
|
1169
|
-
case 2:
|
|
1170
|
-
if (tag !== 16) {
|
|
1171
|
-
break;
|
|
1172
|
-
}
|
|
1173
|
-
message.end = reader.int32();
|
|
1174
|
-
continue;
|
|
1175
|
-
}
|
|
1176
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
1177
|
-
break;
|
|
1178
|
-
}
|
|
1179
|
-
reader.skipType(tag & 7);
|
|
1180
|
-
}
|
|
1181
|
-
return message;
|
|
1182
|
-
},
|
|
1183
|
-
fromJSON(object) {
|
|
1184
|
-
return { start: isSet(object.start) ? Number(object.start) : 0, end: isSet(object.end) ? Number(object.end) : 0 };
|
|
1185
|
-
},
|
|
1186
|
-
toJSON(message) {
|
|
1187
|
-
const obj = {};
|
|
1188
|
-
message.start !== undefined && (obj.start = Math.round(message.start));
|
|
1189
|
-
message.end !== undefined && (obj.end = Math.round(message.end));
|
|
1190
|
-
return obj;
|
|
1191
|
-
},
|
|
1192
|
-
create(base) {
|
|
1193
|
-
return exports.DescriptorProto_ReservedRange.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
1194
|
-
},
|
|
1195
|
-
fromPartial(object) {
|
|
1196
|
-
var _a, _b;
|
|
1197
|
-
const message = createBaseDescriptorProto_ReservedRange();
|
|
1198
|
-
message.start = (_a = object.start) !== null && _a !== void 0 ? _a : 0;
|
|
1199
|
-
message.end = (_b = object.end) !== null && _b !== void 0 ? _b : 0;
|
|
1200
|
-
return message;
|
|
1201
|
-
},
|
|
1202
|
-
};
|
|
1203
|
-
function createBaseExtensionRangeOptions() {
|
|
1204
|
-
return { uninterpretedOption: [] };
|
|
1205
|
-
}
|
|
1206
|
-
exports.ExtensionRangeOptions = {
|
|
1207
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
1208
|
-
for (const v of message.uninterpretedOption) {
|
|
1209
|
-
exports.UninterpretedOption.encode(v, writer.uint32(7994).fork()).ldelim();
|
|
1210
|
-
}
|
|
1211
|
-
return writer;
|
|
1212
|
-
},
|
|
1213
|
-
decode(input, length) {
|
|
1214
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
1215
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
1216
|
-
const message = createBaseExtensionRangeOptions();
|
|
1217
|
-
while (reader.pos < end) {
|
|
1218
|
-
const tag = reader.uint32();
|
|
1219
|
-
switch (tag >>> 3) {
|
|
1220
|
-
case 999:
|
|
1221
|
-
if (tag !== 7994) {
|
|
1222
|
-
break;
|
|
1223
|
-
}
|
|
1224
|
-
message.uninterpretedOption.push(exports.UninterpretedOption.decode(reader, reader.uint32()));
|
|
1225
|
-
continue;
|
|
1226
|
-
}
|
|
1227
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
1228
|
-
break;
|
|
1229
|
-
}
|
|
1230
|
-
reader.skipType(tag & 7);
|
|
1231
|
-
}
|
|
1232
|
-
return message;
|
|
1233
|
-
},
|
|
1234
|
-
fromJSON(object) {
|
|
1235
|
-
return {
|
|
1236
|
-
uninterpretedOption: Array.isArray(object === null || object === void 0 ? void 0 : object.uninterpretedOption)
|
|
1237
|
-
? object.uninterpretedOption.map((e) => exports.UninterpretedOption.fromJSON(e))
|
|
1238
|
-
: [],
|
|
1239
|
-
};
|
|
1240
|
-
},
|
|
1241
|
-
toJSON(message) {
|
|
1242
|
-
const obj = {};
|
|
1243
|
-
if (message.uninterpretedOption) {
|
|
1244
|
-
obj.uninterpretedOption = message.uninterpretedOption.map((e) => e ? exports.UninterpretedOption.toJSON(e) : undefined);
|
|
1245
|
-
}
|
|
1246
|
-
else {
|
|
1247
|
-
obj.uninterpretedOption = [];
|
|
1248
|
-
}
|
|
1249
|
-
return obj;
|
|
1250
|
-
},
|
|
1251
|
-
create(base) {
|
|
1252
|
-
return exports.ExtensionRangeOptions.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
1253
|
-
},
|
|
1254
|
-
fromPartial(object) {
|
|
1255
|
-
var _a;
|
|
1256
|
-
const message = createBaseExtensionRangeOptions();
|
|
1257
|
-
message.uninterpretedOption = ((_a = object.uninterpretedOption) === null || _a === void 0 ? void 0 : _a.map((e) => exports.UninterpretedOption.fromPartial(e))) || [];
|
|
1258
|
-
return message;
|
|
1259
|
-
},
|
|
1260
|
-
};
|
|
1261
|
-
function createBaseFieldDescriptorProto() {
|
|
1262
|
-
return {
|
|
1263
|
-
name: "",
|
|
1264
|
-
number: 0,
|
|
1265
|
-
label: 1,
|
|
1266
|
-
type: 1,
|
|
1267
|
-
typeName: "",
|
|
1268
|
-
extendee: "",
|
|
1269
|
-
defaultValue: "",
|
|
1270
|
-
oneofIndex: 0,
|
|
1271
|
-
jsonName: "",
|
|
1272
|
-
options: undefined,
|
|
1273
|
-
proto3Optional: false,
|
|
1274
|
-
};
|
|
1275
|
-
}
|
|
1276
|
-
exports.FieldDescriptorProto = {
|
|
1277
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
1278
|
-
if (message.name !== "") {
|
|
1279
|
-
writer.uint32(10).string(message.name);
|
|
1280
|
-
}
|
|
1281
|
-
if (message.number !== 0) {
|
|
1282
|
-
writer.uint32(24).int32(message.number);
|
|
1283
|
-
}
|
|
1284
|
-
if (message.label !== 1) {
|
|
1285
|
-
writer.uint32(32).int32(message.label);
|
|
1286
|
-
}
|
|
1287
|
-
if (message.type !== 1) {
|
|
1288
|
-
writer.uint32(40).int32(message.type);
|
|
1289
|
-
}
|
|
1290
|
-
if (message.typeName !== "") {
|
|
1291
|
-
writer.uint32(50).string(message.typeName);
|
|
1292
|
-
}
|
|
1293
|
-
if (message.extendee !== "") {
|
|
1294
|
-
writer.uint32(18).string(message.extendee);
|
|
1295
|
-
}
|
|
1296
|
-
if (message.defaultValue !== "") {
|
|
1297
|
-
writer.uint32(58).string(message.defaultValue);
|
|
1298
|
-
}
|
|
1299
|
-
if (message.oneofIndex !== 0) {
|
|
1300
|
-
writer.uint32(72).int32(message.oneofIndex);
|
|
1301
|
-
}
|
|
1302
|
-
if (message.jsonName !== "") {
|
|
1303
|
-
writer.uint32(82).string(message.jsonName);
|
|
1304
|
-
}
|
|
1305
|
-
if (message.options !== undefined) {
|
|
1306
|
-
exports.FieldOptions.encode(message.options, writer.uint32(66).fork()).ldelim();
|
|
1307
|
-
}
|
|
1308
|
-
if (message.proto3Optional === true) {
|
|
1309
|
-
writer.uint32(136).bool(message.proto3Optional);
|
|
1310
|
-
}
|
|
1311
|
-
return writer;
|
|
1312
|
-
},
|
|
1313
|
-
decode(input, length) {
|
|
1314
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
1315
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
1316
|
-
const message = createBaseFieldDescriptorProto();
|
|
1317
|
-
while (reader.pos < end) {
|
|
1318
|
-
const tag = reader.uint32();
|
|
1319
|
-
switch (tag >>> 3) {
|
|
1320
|
-
case 1:
|
|
1321
|
-
if (tag !== 10) {
|
|
1322
|
-
break;
|
|
1323
|
-
}
|
|
1324
|
-
message.name = reader.string();
|
|
1325
|
-
continue;
|
|
1326
|
-
case 3:
|
|
1327
|
-
if (tag !== 24) {
|
|
1328
|
-
break;
|
|
1329
|
-
}
|
|
1330
|
-
message.number = reader.int32();
|
|
1331
|
-
continue;
|
|
1332
|
-
case 4:
|
|
1333
|
-
if (tag !== 32) {
|
|
1334
|
-
break;
|
|
1335
|
-
}
|
|
1336
|
-
message.label = reader.int32();
|
|
1337
|
-
continue;
|
|
1338
|
-
case 5:
|
|
1339
|
-
if (tag !== 40) {
|
|
1340
|
-
break;
|
|
1341
|
-
}
|
|
1342
|
-
message.type = reader.int32();
|
|
1343
|
-
continue;
|
|
1344
|
-
case 6:
|
|
1345
|
-
if (tag !== 50) {
|
|
1346
|
-
break;
|
|
1347
|
-
}
|
|
1348
|
-
message.typeName = reader.string();
|
|
1349
|
-
continue;
|
|
1350
|
-
case 2:
|
|
1351
|
-
if (tag !== 18) {
|
|
1352
|
-
break;
|
|
1353
|
-
}
|
|
1354
|
-
message.extendee = reader.string();
|
|
1355
|
-
continue;
|
|
1356
|
-
case 7:
|
|
1357
|
-
if (tag !== 58) {
|
|
1358
|
-
break;
|
|
1359
|
-
}
|
|
1360
|
-
message.defaultValue = reader.string();
|
|
1361
|
-
continue;
|
|
1362
|
-
case 9:
|
|
1363
|
-
if (tag !== 72) {
|
|
1364
|
-
break;
|
|
1365
|
-
}
|
|
1366
|
-
message.oneofIndex = reader.int32();
|
|
1367
|
-
continue;
|
|
1368
|
-
case 10:
|
|
1369
|
-
if (tag !== 82) {
|
|
1370
|
-
break;
|
|
1371
|
-
}
|
|
1372
|
-
message.jsonName = reader.string();
|
|
1373
|
-
continue;
|
|
1374
|
-
case 8:
|
|
1375
|
-
if (tag !== 66) {
|
|
1376
|
-
break;
|
|
1377
|
-
}
|
|
1378
|
-
message.options = exports.FieldOptions.decode(reader, reader.uint32());
|
|
1379
|
-
continue;
|
|
1380
|
-
case 17:
|
|
1381
|
-
if (tag !== 136) {
|
|
1382
|
-
break;
|
|
1383
|
-
}
|
|
1384
|
-
message.proto3Optional = reader.bool();
|
|
1385
|
-
continue;
|
|
1386
|
-
}
|
|
1387
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
1388
|
-
break;
|
|
1389
|
-
}
|
|
1390
|
-
reader.skipType(tag & 7);
|
|
1391
|
-
}
|
|
1392
|
-
return message;
|
|
1393
|
-
},
|
|
1394
|
-
fromJSON(object) {
|
|
1395
|
-
return {
|
|
1396
|
-
name: isSet(object.name) ? String(object.name) : "",
|
|
1397
|
-
number: isSet(object.number) ? Number(object.number) : 0,
|
|
1398
|
-
label: isSet(object.label) ? fieldDescriptorProto_LabelFromJSON(object.label) : 1,
|
|
1399
|
-
type: isSet(object.type) ? fieldDescriptorProto_TypeFromJSON(object.type) : 1,
|
|
1400
|
-
typeName: isSet(object.typeName) ? String(object.typeName) : "",
|
|
1401
|
-
extendee: isSet(object.extendee) ? String(object.extendee) : "",
|
|
1402
|
-
defaultValue: isSet(object.defaultValue) ? String(object.defaultValue) : "",
|
|
1403
|
-
oneofIndex: isSet(object.oneofIndex) ? Number(object.oneofIndex) : 0,
|
|
1404
|
-
jsonName: isSet(object.jsonName) ? String(object.jsonName) : "",
|
|
1405
|
-
options: isSet(object.options) ? exports.FieldOptions.fromJSON(object.options) : undefined,
|
|
1406
|
-
proto3Optional: isSet(object.proto3Optional) ? Boolean(object.proto3Optional) : false,
|
|
1407
|
-
};
|
|
1408
|
-
},
|
|
1409
|
-
toJSON(message) {
|
|
1410
|
-
const obj = {};
|
|
1411
|
-
message.name !== undefined && (obj.name = message.name);
|
|
1412
|
-
message.number !== undefined && (obj.number = Math.round(message.number));
|
|
1413
|
-
message.label !== undefined && (obj.label = fieldDescriptorProto_LabelToJSON(message.label));
|
|
1414
|
-
message.type !== undefined && (obj.type = fieldDescriptorProto_TypeToJSON(message.type));
|
|
1415
|
-
message.typeName !== undefined && (obj.typeName = message.typeName);
|
|
1416
|
-
message.extendee !== undefined && (obj.extendee = message.extendee);
|
|
1417
|
-
message.defaultValue !== undefined && (obj.defaultValue = message.defaultValue);
|
|
1418
|
-
message.oneofIndex !== undefined && (obj.oneofIndex = Math.round(message.oneofIndex));
|
|
1419
|
-
message.jsonName !== undefined && (obj.jsonName = message.jsonName);
|
|
1420
|
-
message.options !== undefined && (obj.options = message.options ? exports.FieldOptions.toJSON(message.options) : undefined);
|
|
1421
|
-
message.proto3Optional !== undefined && (obj.proto3Optional = message.proto3Optional);
|
|
1422
|
-
return obj;
|
|
1423
|
-
},
|
|
1424
|
-
create(base) {
|
|
1425
|
-
return exports.FieldDescriptorProto.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
1426
|
-
},
|
|
1427
|
-
fromPartial(object) {
|
|
1428
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
1429
|
-
const message = createBaseFieldDescriptorProto();
|
|
1430
|
-
message.name = (_a = object.name) !== null && _a !== void 0 ? _a : "";
|
|
1431
|
-
message.number = (_b = object.number) !== null && _b !== void 0 ? _b : 0;
|
|
1432
|
-
message.label = (_c = object.label) !== null && _c !== void 0 ? _c : 1;
|
|
1433
|
-
message.type = (_d = object.type) !== null && _d !== void 0 ? _d : 1;
|
|
1434
|
-
message.typeName = (_e = object.typeName) !== null && _e !== void 0 ? _e : "";
|
|
1435
|
-
message.extendee = (_f = object.extendee) !== null && _f !== void 0 ? _f : "";
|
|
1436
|
-
message.defaultValue = (_g = object.defaultValue) !== null && _g !== void 0 ? _g : "";
|
|
1437
|
-
message.oneofIndex = (_h = object.oneofIndex) !== null && _h !== void 0 ? _h : 0;
|
|
1438
|
-
message.jsonName = (_j = object.jsonName) !== null && _j !== void 0 ? _j : "";
|
|
1439
|
-
message.options = (object.options !== undefined && object.options !== null)
|
|
1440
|
-
? exports.FieldOptions.fromPartial(object.options)
|
|
1441
|
-
: undefined;
|
|
1442
|
-
message.proto3Optional = (_k = object.proto3Optional) !== null && _k !== void 0 ? _k : false;
|
|
1443
|
-
return message;
|
|
1444
|
-
},
|
|
1445
|
-
};
|
|
1446
|
-
function createBaseOneofDescriptorProto() {
|
|
1447
|
-
return { name: "", options: undefined };
|
|
1448
|
-
}
|
|
1449
|
-
exports.OneofDescriptorProto = {
|
|
1450
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
1451
|
-
if (message.name !== "") {
|
|
1452
|
-
writer.uint32(10).string(message.name);
|
|
1453
|
-
}
|
|
1454
|
-
if (message.options !== undefined) {
|
|
1455
|
-
exports.OneofOptions.encode(message.options, writer.uint32(18).fork()).ldelim();
|
|
1456
|
-
}
|
|
1457
|
-
return writer;
|
|
1458
|
-
},
|
|
1459
|
-
decode(input, length) {
|
|
1460
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
1461
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
1462
|
-
const message = createBaseOneofDescriptorProto();
|
|
1463
|
-
while (reader.pos < end) {
|
|
1464
|
-
const tag = reader.uint32();
|
|
1465
|
-
switch (tag >>> 3) {
|
|
1466
|
-
case 1:
|
|
1467
|
-
if (tag !== 10) {
|
|
1468
|
-
break;
|
|
1469
|
-
}
|
|
1470
|
-
message.name = reader.string();
|
|
1471
|
-
continue;
|
|
1472
|
-
case 2:
|
|
1473
|
-
if (tag !== 18) {
|
|
1474
|
-
break;
|
|
1475
|
-
}
|
|
1476
|
-
message.options = exports.OneofOptions.decode(reader, reader.uint32());
|
|
1477
|
-
continue;
|
|
1478
|
-
}
|
|
1479
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
1480
|
-
break;
|
|
1481
|
-
}
|
|
1482
|
-
reader.skipType(tag & 7);
|
|
1483
|
-
}
|
|
1484
|
-
return message;
|
|
1485
|
-
},
|
|
1486
|
-
fromJSON(object) {
|
|
1487
|
-
return {
|
|
1488
|
-
name: isSet(object.name) ? String(object.name) : "",
|
|
1489
|
-
options: isSet(object.options) ? exports.OneofOptions.fromJSON(object.options) : undefined,
|
|
1490
|
-
};
|
|
1491
|
-
},
|
|
1492
|
-
toJSON(message) {
|
|
1493
|
-
const obj = {};
|
|
1494
|
-
message.name !== undefined && (obj.name = message.name);
|
|
1495
|
-
message.options !== undefined && (obj.options = message.options ? exports.OneofOptions.toJSON(message.options) : undefined);
|
|
1496
|
-
return obj;
|
|
1497
|
-
},
|
|
1498
|
-
create(base) {
|
|
1499
|
-
return exports.OneofDescriptorProto.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
1500
|
-
},
|
|
1501
|
-
fromPartial(object) {
|
|
1502
|
-
var _a;
|
|
1503
|
-
const message = createBaseOneofDescriptorProto();
|
|
1504
|
-
message.name = (_a = object.name) !== null && _a !== void 0 ? _a : "";
|
|
1505
|
-
message.options = (object.options !== undefined && object.options !== null)
|
|
1506
|
-
? exports.OneofOptions.fromPartial(object.options)
|
|
1507
|
-
: undefined;
|
|
1508
|
-
return message;
|
|
1509
|
-
},
|
|
1510
|
-
};
|
|
1511
|
-
function createBaseEnumDescriptorProto() {
|
|
1512
|
-
return { name: "", value: [], options: undefined, reservedRange: [], reservedName: [] };
|
|
1513
|
-
}
|
|
1514
|
-
exports.EnumDescriptorProto = {
|
|
1515
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
1516
|
-
if (message.name !== "") {
|
|
1517
|
-
writer.uint32(10).string(message.name);
|
|
1518
|
-
}
|
|
1519
|
-
for (const v of message.value) {
|
|
1520
|
-
exports.EnumValueDescriptorProto.encode(v, writer.uint32(18).fork()).ldelim();
|
|
1521
|
-
}
|
|
1522
|
-
if (message.options !== undefined) {
|
|
1523
|
-
exports.EnumOptions.encode(message.options, writer.uint32(26).fork()).ldelim();
|
|
1524
|
-
}
|
|
1525
|
-
for (const v of message.reservedRange) {
|
|
1526
|
-
exports.EnumDescriptorProto_EnumReservedRange.encode(v, writer.uint32(34).fork()).ldelim();
|
|
1527
|
-
}
|
|
1528
|
-
for (const v of message.reservedName) {
|
|
1529
|
-
writer.uint32(42).string(v);
|
|
1530
|
-
}
|
|
1531
|
-
return writer;
|
|
1532
|
-
},
|
|
1533
|
-
decode(input, length) {
|
|
1534
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
1535
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
1536
|
-
const message = createBaseEnumDescriptorProto();
|
|
1537
|
-
while (reader.pos < end) {
|
|
1538
|
-
const tag = reader.uint32();
|
|
1539
|
-
switch (tag >>> 3) {
|
|
1540
|
-
case 1:
|
|
1541
|
-
if (tag !== 10) {
|
|
1542
|
-
break;
|
|
1543
|
-
}
|
|
1544
|
-
message.name = reader.string();
|
|
1545
|
-
continue;
|
|
1546
|
-
case 2:
|
|
1547
|
-
if (tag !== 18) {
|
|
1548
|
-
break;
|
|
1549
|
-
}
|
|
1550
|
-
message.value.push(exports.EnumValueDescriptorProto.decode(reader, reader.uint32()));
|
|
1551
|
-
continue;
|
|
1552
|
-
case 3:
|
|
1553
|
-
if (tag !== 26) {
|
|
1554
|
-
break;
|
|
1555
|
-
}
|
|
1556
|
-
message.options = exports.EnumOptions.decode(reader, reader.uint32());
|
|
1557
|
-
continue;
|
|
1558
|
-
case 4:
|
|
1559
|
-
if (tag !== 34) {
|
|
1560
|
-
break;
|
|
1561
|
-
}
|
|
1562
|
-
message.reservedRange.push(exports.EnumDescriptorProto_EnumReservedRange.decode(reader, reader.uint32()));
|
|
1563
|
-
continue;
|
|
1564
|
-
case 5:
|
|
1565
|
-
if (tag !== 42) {
|
|
1566
|
-
break;
|
|
1567
|
-
}
|
|
1568
|
-
message.reservedName.push(reader.string());
|
|
1569
|
-
continue;
|
|
1570
|
-
}
|
|
1571
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
1572
|
-
break;
|
|
1573
|
-
}
|
|
1574
|
-
reader.skipType(tag & 7);
|
|
1575
|
-
}
|
|
1576
|
-
return message;
|
|
1577
|
-
},
|
|
1578
|
-
fromJSON(object) {
|
|
1579
|
-
return {
|
|
1580
|
-
name: isSet(object.name) ? String(object.name) : "",
|
|
1581
|
-
value: Array.isArray(object === null || object === void 0 ? void 0 : object.value) ? object.value.map((e) => exports.EnumValueDescriptorProto.fromJSON(e)) : [],
|
|
1582
|
-
options: isSet(object.options) ? exports.EnumOptions.fromJSON(object.options) : undefined,
|
|
1583
|
-
reservedRange: Array.isArray(object === null || object === void 0 ? void 0 : object.reservedRange)
|
|
1584
|
-
? object.reservedRange.map((e) => exports.EnumDescriptorProto_EnumReservedRange.fromJSON(e))
|
|
1585
|
-
: [],
|
|
1586
|
-
reservedName: Array.isArray(object === null || object === void 0 ? void 0 : object.reservedName) ? object.reservedName.map((e) => String(e)) : [],
|
|
1587
|
-
};
|
|
1588
|
-
},
|
|
1589
|
-
toJSON(message) {
|
|
1590
|
-
const obj = {};
|
|
1591
|
-
message.name !== undefined && (obj.name = message.name);
|
|
1592
|
-
if (message.value) {
|
|
1593
|
-
obj.value = message.value.map((e) => e ? exports.EnumValueDescriptorProto.toJSON(e) : undefined);
|
|
1594
|
-
}
|
|
1595
|
-
else {
|
|
1596
|
-
obj.value = [];
|
|
1597
|
-
}
|
|
1598
|
-
message.options !== undefined && (obj.options = message.options ? exports.EnumOptions.toJSON(message.options) : undefined);
|
|
1599
|
-
if (message.reservedRange) {
|
|
1600
|
-
obj.reservedRange = message.reservedRange.map((e) => e ? exports.EnumDescriptorProto_EnumReservedRange.toJSON(e) : undefined);
|
|
1601
|
-
}
|
|
1602
|
-
else {
|
|
1603
|
-
obj.reservedRange = [];
|
|
1604
|
-
}
|
|
1605
|
-
if (message.reservedName) {
|
|
1606
|
-
obj.reservedName = message.reservedName.map((e) => e);
|
|
1607
|
-
}
|
|
1608
|
-
else {
|
|
1609
|
-
obj.reservedName = [];
|
|
1610
|
-
}
|
|
1611
|
-
return obj;
|
|
1612
|
-
},
|
|
1613
|
-
create(base) {
|
|
1614
|
-
return exports.EnumDescriptorProto.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
1615
|
-
},
|
|
1616
|
-
fromPartial(object) {
|
|
1617
|
-
var _a, _b, _c, _d;
|
|
1618
|
-
const message = createBaseEnumDescriptorProto();
|
|
1619
|
-
message.name = (_a = object.name) !== null && _a !== void 0 ? _a : "";
|
|
1620
|
-
message.value = ((_b = object.value) === null || _b === void 0 ? void 0 : _b.map((e) => exports.EnumValueDescriptorProto.fromPartial(e))) || [];
|
|
1621
|
-
message.options = (object.options !== undefined && object.options !== null)
|
|
1622
|
-
? exports.EnumOptions.fromPartial(object.options)
|
|
1623
|
-
: undefined;
|
|
1624
|
-
message.reservedRange = ((_c = object.reservedRange) === null || _c === void 0 ? void 0 : _c.map((e) => exports.EnumDescriptorProto_EnumReservedRange.fromPartial(e))) ||
|
|
1625
|
-
[];
|
|
1626
|
-
message.reservedName = ((_d = object.reservedName) === null || _d === void 0 ? void 0 : _d.map((e) => e)) || [];
|
|
1627
|
-
return message;
|
|
1628
|
-
},
|
|
1629
|
-
};
|
|
1630
|
-
function createBaseEnumDescriptorProto_EnumReservedRange() {
|
|
1631
|
-
return { start: 0, end: 0 };
|
|
1632
|
-
}
|
|
1633
|
-
exports.EnumDescriptorProto_EnumReservedRange = {
|
|
1634
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
1635
|
-
if (message.start !== 0) {
|
|
1636
|
-
writer.uint32(8).int32(message.start);
|
|
1637
|
-
}
|
|
1638
|
-
if (message.end !== 0) {
|
|
1639
|
-
writer.uint32(16).int32(message.end);
|
|
1640
|
-
}
|
|
1641
|
-
return writer;
|
|
1642
|
-
},
|
|
1643
|
-
decode(input, length) {
|
|
1644
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
1645
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
1646
|
-
const message = createBaseEnumDescriptorProto_EnumReservedRange();
|
|
1647
|
-
while (reader.pos < end) {
|
|
1648
|
-
const tag = reader.uint32();
|
|
1649
|
-
switch (tag >>> 3) {
|
|
1650
|
-
case 1:
|
|
1651
|
-
if (tag !== 8) {
|
|
1652
|
-
break;
|
|
1653
|
-
}
|
|
1654
|
-
message.start = reader.int32();
|
|
1655
|
-
continue;
|
|
1656
|
-
case 2:
|
|
1657
|
-
if (tag !== 16) {
|
|
1658
|
-
break;
|
|
1659
|
-
}
|
|
1660
|
-
message.end = reader.int32();
|
|
1661
|
-
continue;
|
|
1662
|
-
}
|
|
1663
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
1664
|
-
break;
|
|
1665
|
-
}
|
|
1666
|
-
reader.skipType(tag & 7);
|
|
1667
|
-
}
|
|
1668
|
-
return message;
|
|
1669
|
-
},
|
|
1670
|
-
fromJSON(object) {
|
|
1671
|
-
return { start: isSet(object.start) ? Number(object.start) : 0, end: isSet(object.end) ? Number(object.end) : 0 };
|
|
1672
|
-
},
|
|
1673
|
-
toJSON(message) {
|
|
1674
|
-
const obj = {};
|
|
1675
|
-
message.start !== undefined && (obj.start = Math.round(message.start));
|
|
1676
|
-
message.end !== undefined && (obj.end = Math.round(message.end));
|
|
1677
|
-
return obj;
|
|
1678
|
-
},
|
|
1679
|
-
create(base) {
|
|
1680
|
-
return exports.EnumDescriptorProto_EnumReservedRange.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
1681
|
-
},
|
|
1682
|
-
fromPartial(object) {
|
|
1683
|
-
var _a, _b;
|
|
1684
|
-
const message = createBaseEnumDescriptorProto_EnumReservedRange();
|
|
1685
|
-
message.start = (_a = object.start) !== null && _a !== void 0 ? _a : 0;
|
|
1686
|
-
message.end = (_b = object.end) !== null && _b !== void 0 ? _b : 0;
|
|
1687
|
-
return message;
|
|
1688
|
-
},
|
|
1689
|
-
};
|
|
1690
|
-
function createBaseEnumValueDescriptorProto() {
|
|
1691
|
-
return { name: "", number: 0, options: undefined };
|
|
1692
|
-
}
|
|
1693
|
-
exports.EnumValueDescriptorProto = {
|
|
1694
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
1695
|
-
if (message.name !== "") {
|
|
1696
|
-
writer.uint32(10).string(message.name);
|
|
1697
|
-
}
|
|
1698
|
-
if (message.number !== 0) {
|
|
1699
|
-
writer.uint32(16).int32(message.number);
|
|
1700
|
-
}
|
|
1701
|
-
if (message.options !== undefined) {
|
|
1702
|
-
exports.EnumValueOptions.encode(message.options, writer.uint32(26).fork()).ldelim();
|
|
1703
|
-
}
|
|
1704
|
-
return writer;
|
|
1705
|
-
},
|
|
1706
|
-
decode(input, length) {
|
|
1707
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
1708
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
1709
|
-
const message = createBaseEnumValueDescriptorProto();
|
|
1710
|
-
while (reader.pos < end) {
|
|
1711
|
-
const tag = reader.uint32();
|
|
1712
|
-
switch (tag >>> 3) {
|
|
1713
|
-
case 1:
|
|
1714
|
-
if (tag !== 10) {
|
|
1715
|
-
break;
|
|
1716
|
-
}
|
|
1717
|
-
message.name = reader.string();
|
|
1718
|
-
continue;
|
|
1719
|
-
case 2:
|
|
1720
|
-
if (tag !== 16) {
|
|
1721
|
-
break;
|
|
1722
|
-
}
|
|
1723
|
-
message.number = reader.int32();
|
|
1724
|
-
continue;
|
|
1725
|
-
case 3:
|
|
1726
|
-
if (tag !== 26) {
|
|
1727
|
-
break;
|
|
1728
|
-
}
|
|
1729
|
-
message.options = exports.EnumValueOptions.decode(reader, reader.uint32());
|
|
1730
|
-
continue;
|
|
1731
|
-
}
|
|
1732
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
1733
|
-
break;
|
|
1734
|
-
}
|
|
1735
|
-
reader.skipType(tag & 7);
|
|
1736
|
-
}
|
|
1737
|
-
return message;
|
|
1738
|
-
},
|
|
1739
|
-
fromJSON(object) {
|
|
1740
|
-
return {
|
|
1741
|
-
name: isSet(object.name) ? String(object.name) : "",
|
|
1742
|
-
number: isSet(object.number) ? Number(object.number) : 0,
|
|
1743
|
-
options: isSet(object.options) ? exports.EnumValueOptions.fromJSON(object.options) : undefined,
|
|
1744
|
-
};
|
|
1745
|
-
},
|
|
1746
|
-
toJSON(message) {
|
|
1747
|
-
const obj = {};
|
|
1748
|
-
message.name !== undefined && (obj.name = message.name);
|
|
1749
|
-
message.number !== undefined && (obj.number = Math.round(message.number));
|
|
1750
|
-
message.options !== undefined &&
|
|
1751
|
-
(obj.options = message.options ? exports.EnumValueOptions.toJSON(message.options) : undefined);
|
|
1752
|
-
return obj;
|
|
1753
|
-
},
|
|
1754
|
-
create(base) {
|
|
1755
|
-
return exports.EnumValueDescriptorProto.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
1756
|
-
},
|
|
1757
|
-
fromPartial(object) {
|
|
1758
|
-
var _a, _b;
|
|
1759
|
-
const message = createBaseEnumValueDescriptorProto();
|
|
1760
|
-
message.name = (_a = object.name) !== null && _a !== void 0 ? _a : "";
|
|
1761
|
-
message.number = (_b = object.number) !== null && _b !== void 0 ? _b : 0;
|
|
1762
|
-
message.options = (object.options !== undefined && object.options !== null)
|
|
1763
|
-
? exports.EnumValueOptions.fromPartial(object.options)
|
|
1764
|
-
: undefined;
|
|
1765
|
-
return message;
|
|
1766
|
-
},
|
|
1767
|
-
};
|
|
1768
|
-
function createBaseServiceDescriptorProto() {
|
|
1769
|
-
return { name: "", method: [], options: undefined };
|
|
1770
|
-
}
|
|
1771
|
-
exports.ServiceDescriptorProto = {
|
|
1772
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
1773
|
-
if (message.name !== "") {
|
|
1774
|
-
writer.uint32(10).string(message.name);
|
|
1775
|
-
}
|
|
1776
|
-
for (const v of message.method) {
|
|
1777
|
-
exports.MethodDescriptorProto.encode(v, writer.uint32(18).fork()).ldelim();
|
|
1778
|
-
}
|
|
1779
|
-
if (message.options !== undefined) {
|
|
1780
|
-
exports.ServiceOptions.encode(message.options, writer.uint32(26).fork()).ldelim();
|
|
1781
|
-
}
|
|
1782
|
-
return writer;
|
|
1783
|
-
},
|
|
1784
|
-
decode(input, length) {
|
|
1785
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
1786
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
1787
|
-
const message = createBaseServiceDescriptorProto();
|
|
1788
|
-
while (reader.pos < end) {
|
|
1789
|
-
const tag = reader.uint32();
|
|
1790
|
-
switch (tag >>> 3) {
|
|
1791
|
-
case 1:
|
|
1792
|
-
if (tag !== 10) {
|
|
1793
|
-
break;
|
|
1794
|
-
}
|
|
1795
|
-
message.name = reader.string();
|
|
1796
|
-
continue;
|
|
1797
|
-
case 2:
|
|
1798
|
-
if (tag !== 18) {
|
|
1799
|
-
break;
|
|
1800
|
-
}
|
|
1801
|
-
message.method.push(exports.MethodDescriptorProto.decode(reader, reader.uint32()));
|
|
1802
|
-
continue;
|
|
1803
|
-
case 3:
|
|
1804
|
-
if (tag !== 26) {
|
|
1805
|
-
break;
|
|
1806
|
-
}
|
|
1807
|
-
message.options = exports.ServiceOptions.decode(reader, reader.uint32());
|
|
1808
|
-
continue;
|
|
1809
|
-
}
|
|
1810
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
1811
|
-
break;
|
|
1812
|
-
}
|
|
1813
|
-
reader.skipType(tag & 7);
|
|
1814
|
-
}
|
|
1815
|
-
return message;
|
|
1816
|
-
},
|
|
1817
|
-
fromJSON(object) {
|
|
1818
|
-
return {
|
|
1819
|
-
name: isSet(object.name) ? String(object.name) : "",
|
|
1820
|
-
method: Array.isArray(object === null || object === void 0 ? void 0 : object.method) ? object.method.map((e) => exports.MethodDescriptorProto.fromJSON(e)) : [],
|
|
1821
|
-
options: isSet(object.options) ? exports.ServiceOptions.fromJSON(object.options) : undefined,
|
|
1822
|
-
};
|
|
1823
|
-
},
|
|
1824
|
-
toJSON(message) {
|
|
1825
|
-
const obj = {};
|
|
1826
|
-
message.name !== undefined && (obj.name = message.name);
|
|
1827
|
-
if (message.method) {
|
|
1828
|
-
obj.method = message.method.map((e) => e ? exports.MethodDescriptorProto.toJSON(e) : undefined);
|
|
1829
|
-
}
|
|
1830
|
-
else {
|
|
1831
|
-
obj.method = [];
|
|
1832
|
-
}
|
|
1833
|
-
message.options !== undefined &&
|
|
1834
|
-
(obj.options = message.options ? exports.ServiceOptions.toJSON(message.options) : undefined);
|
|
1835
|
-
return obj;
|
|
1836
|
-
},
|
|
1837
|
-
create(base) {
|
|
1838
|
-
return exports.ServiceDescriptorProto.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
1839
|
-
},
|
|
1840
|
-
fromPartial(object) {
|
|
1841
|
-
var _a, _b;
|
|
1842
|
-
const message = createBaseServiceDescriptorProto();
|
|
1843
|
-
message.name = (_a = object.name) !== null && _a !== void 0 ? _a : "";
|
|
1844
|
-
message.method = ((_b = object.method) === null || _b === void 0 ? void 0 : _b.map((e) => exports.MethodDescriptorProto.fromPartial(e))) || [];
|
|
1845
|
-
message.options = (object.options !== undefined && object.options !== null)
|
|
1846
|
-
? exports.ServiceOptions.fromPartial(object.options)
|
|
1847
|
-
: undefined;
|
|
1848
|
-
return message;
|
|
1849
|
-
},
|
|
1850
|
-
};
|
|
1851
|
-
function createBaseMethodDescriptorProto() {
|
|
1852
|
-
return {
|
|
1853
|
-
name: "",
|
|
1854
|
-
inputType: "",
|
|
1855
|
-
outputType: "",
|
|
1856
|
-
options: undefined,
|
|
1857
|
-
clientStreaming: false,
|
|
1858
|
-
serverStreaming: false,
|
|
1859
|
-
};
|
|
1860
|
-
}
|
|
1861
|
-
exports.MethodDescriptorProto = {
|
|
1862
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
1863
|
-
if (message.name !== "") {
|
|
1864
|
-
writer.uint32(10).string(message.name);
|
|
1865
|
-
}
|
|
1866
|
-
if (message.inputType !== "") {
|
|
1867
|
-
writer.uint32(18).string(message.inputType);
|
|
1868
|
-
}
|
|
1869
|
-
if (message.outputType !== "") {
|
|
1870
|
-
writer.uint32(26).string(message.outputType);
|
|
1871
|
-
}
|
|
1872
|
-
if (message.options !== undefined) {
|
|
1873
|
-
exports.MethodOptions.encode(message.options, writer.uint32(34).fork()).ldelim();
|
|
1874
|
-
}
|
|
1875
|
-
if (message.clientStreaming === true) {
|
|
1876
|
-
writer.uint32(40).bool(message.clientStreaming);
|
|
1877
|
-
}
|
|
1878
|
-
if (message.serverStreaming === true) {
|
|
1879
|
-
writer.uint32(48).bool(message.serverStreaming);
|
|
1880
|
-
}
|
|
1881
|
-
return writer;
|
|
1882
|
-
},
|
|
1883
|
-
decode(input, length) {
|
|
1884
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
1885
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
1886
|
-
const message = createBaseMethodDescriptorProto();
|
|
1887
|
-
while (reader.pos < end) {
|
|
1888
|
-
const tag = reader.uint32();
|
|
1889
|
-
switch (tag >>> 3) {
|
|
1890
|
-
case 1:
|
|
1891
|
-
if (tag !== 10) {
|
|
1892
|
-
break;
|
|
1893
|
-
}
|
|
1894
|
-
message.name = reader.string();
|
|
1895
|
-
continue;
|
|
1896
|
-
case 2:
|
|
1897
|
-
if (tag !== 18) {
|
|
1898
|
-
break;
|
|
1899
|
-
}
|
|
1900
|
-
message.inputType = reader.string();
|
|
1901
|
-
continue;
|
|
1902
|
-
case 3:
|
|
1903
|
-
if (tag !== 26) {
|
|
1904
|
-
break;
|
|
1905
|
-
}
|
|
1906
|
-
message.outputType = reader.string();
|
|
1907
|
-
continue;
|
|
1908
|
-
case 4:
|
|
1909
|
-
if (tag !== 34) {
|
|
1910
|
-
break;
|
|
1911
|
-
}
|
|
1912
|
-
message.options = exports.MethodOptions.decode(reader, reader.uint32());
|
|
1913
|
-
continue;
|
|
1914
|
-
case 5:
|
|
1915
|
-
if (tag !== 40) {
|
|
1916
|
-
break;
|
|
1917
|
-
}
|
|
1918
|
-
message.clientStreaming = reader.bool();
|
|
1919
|
-
continue;
|
|
1920
|
-
case 6:
|
|
1921
|
-
if (tag !== 48) {
|
|
1922
|
-
break;
|
|
1923
|
-
}
|
|
1924
|
-
message.serverStreaming = reader.bool();
|
|
1925
|
-
continue;
|
|
1926
|
-
}
|
|
1927
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
1928
|
-
break;
|
|
1929
|
-
}
|
|
1930
|
-
reader.skipType(tag & 7);
|
|
1931
|
-
}
|
|
1932
|
-
return message;
|
|
1933
|
-
},
|
|
1934
|
-
fromJSON(object) {
|
|
1935
|
-
return {
|
|
1936
|
-
name: isSet(object.name) ? String(object.name) : "",
|
|
1937
|
-
inputType: isSet(object.inputType) ? String(object.inputType) : "",
|
|
1938
|
-
outputType: isSet(object.outputType) ? String(object.outputType) : "",
|
|
1939
|
-
options: isSet(object.options) ? exports.MethodOptions.fromJSON(object.options) : undefined,
|
|
1940
|
-
clientStreaming: isSet(object.clientStreaming) ? Boolean(object.clientStreaming) : false,
|
|
1941
|
-
serverStreaming: isSet(object.serverStreaming) ? Boolean(object.serverStreaming) : false,
|
|
1942
|
-
};
|
|
1943
|
-
},
|
|
1944
|
-
toJSON(message) {
|
|
1945
|
-
const obj = {};
|
|
1946
|
-
message.name !== undefined && (obj.name = message.name);
|
|
1947
|
-
message.inputType !== undefined && (obj.inputType = message.inputType);
|
|
1948
|
-
message.outputType !== undefined && (obj.outputType = message.outputType);
|
|
1949
|
-
message.options !== undefined &&
|
|
1950
|
-
(obj.options = message.options ? exports.MethodOptions.toJSON(message.options) : undefined);
|
|
1951
|
-
message.clientStreaming !== undefined && (obj.clientStreaming = message.clientStreaming);
|
|
1952
|
-
message.serverStreaming !== undefined && (obj.serverStreaming = message.serverStreaming);
|
|
1953
|
-
return obj;
|
|
1954
|
-
},
|
|
1955
|
-
create(base) {
|
|
1956
|
-
return exports.MethodDescriptorProto.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
1957
|
-
},
|
|
1958
|
-
fromPartial(object) {
|
|
1959
|
-
var _a, _b, _c, _d, _e;
|
|
1960
|
-
const message = createBaseMethodDescriptorProto();
|
|
1961
|
-
message.name = (_a = object.name) !== null && _a !== void 0 ? _a : "";
|
|
1962
|
-
message.inputType = (_b = object.inputType) !== null && _b !== void 0 ? _b : "";
|
|
1963
|
-
message.outputType = (_c = object.outputType) !== null && _c !== void 0 ? _c : "";
|
|
1964
|
-
message.options = (object.options !== undefined && object.options !== null)
|
|
1965
|
-
? exports.MethodOptions.fromPartial(object.options)
|
|
1966
|
-
: undefined;
|
|
1967
|
-
message.clientStreaming = (_d = object.clientStreaming) !== null && _d !== void 0 ? _d : false;
|
|
1968
|
-
message.serverStreaming = (_e = object.serverStreaming) !== null && _e !== void 0 ? _e : false;
|
|
1969
|
-
return message;
|
|
1970
|
-
},
|
|
1971
|
-
};
|
|
1972
|
-
function createBaseFileOptions() {
|
|
1973
|
-
return {
|
|
1974
|
-
javaPackage: "",
|
|
1975
|
-
javaOuterClassname: "",
|
|
1976
|
-
javaMultipleFiles: false,
|
|
1977
|
-
javaGenerateEqualsAndHash: false,
|
|
1978
|
-
javaStringCheckUtf8: false,
|
|
1979
|
-
optimizeFor: 1,
|
|
1980
|
-
goPackage: "",
|
|
1981
|
-
ccGenericServices: false,
|
|
1982
|
-
javaGenericServices: false,
|
|
1983
|
-
pyGenericServices: false,
|
|
1984
|
-
phpGenericServices: false,
|
|
1985
|
-
deprecated: false,
|
|
1986
|
-
ccEnableArenas: false,
|
|
1987
|
-
objcClassPrefix: "",
|
|
1988
|
-
csharpNamespace: "",
|
|
1989
|
-
swiftPrefix: "",
|
|
1990
|
-
phpClassPrefix: "",
|
|
1991
|
-
phpNamespace: "",
|
|
1992
|
-
phpMetadataNamespace: "",
|
|
1993
|
-
rubyPackage: "",
|
|
1994
|
-
uninterpretedOption: [],
|
|
1995
|
-
};
|
|
1996
|
-
}
|
|
1997
|
-
exports.FileOptions = {
|
|
1998
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
1999
|
-
if (message.javaPackage !== "") {
|
|
2000
|
-
writer.uint32(10).string(message.javaPackage);
|
|
2001
|
-
}
|
|
2002
|
-
if (message.javaOuterClassname !== "") {
|
|
2003
|
-
writer.uint32(66).string(message.javaOuterClassname);
|
|
2004
|
-
}
|
|
2005
|
-
if (message.javaMultipleFiles === true) {
|
|
2006
|
-
writer.uint32(80).bool(message.javaMultipleFiles);
|
|
2007
|
-
}
|
|
2008
|
-
if (message.javaGenerateEqualsAndHash === true) {
|
|
2009
|
-
writer.uint32(160).bool(message.javaGenerateEqualsAndHash);
|
|
2010
|
-
}
|
|
2011
|
-
if (message.javaStringCheckUtf8 === true) {
|
|
2012
|
-
writer.uint32(216).bool(message.javaStringCheckUtf8);
|
|
2013
|
-
}
|
|
2014
|
-
if (message.optimizeFor !== 1) {
|
|
2015
|
-
writer.uint32(72).int32(message.optimizeFor);
|
|
2016
|
-
}
|
|
2017
|
-
if (message.goPackage !== "") {
|
|
2018
|
-
writer.uint32(90).string(message.goPackage);
|
|
2019
|
-
}
|
|
2020
|
-
if (message.ccGenericServices === true) {
|
|
2021
|
-
writer.uint32(128).bool(message.ccGenericServices);
|
|
2022
|
-
}
|
|
2023
|
-
if (message.javaGenericServices === true) {
|
|
2024
|
-
writer.uint32(136).bool(message.javaGenericServices);
|
|
2025
|
-
}
|
|
2026
|
-
if (message.pyGenericServices === true) {
|
|
2027
|
-
writer.uint32(144).bool(message.pyGenericServices);
|
|
2028
|
-
}
|
|
2029
|
-
if (message.phpGenericServices === true) {
|
|
2030
|
-
writer.uint32(336).bool(message.phpGenericServices);
|
|
2031
|
-
}
|
|
2032
|
-
if (message.deprecated === true) {
|
|
2033
|
-
writer.uint32(184).bool(message.deprecated);
|
|
2034
|
-
}
|
|
2035
|
-
if (message.ccEnableArenas === true) {
|
|
2036
|
-
writer.uint32(248).bool(message.ccEnableArenas);
|
|
2037
|
-
}
|
|
2038
|
-
if (message.objcClassPrefix !== "") {
|
|
2039
|
-
writer.uint32(290).string(message.objcClassPrefix);
|
|
2040
|
-
}
|
|
2041
|
-
if (message.csharpNamespace !== "") {
|
|
2042
|
-
writer.uint32(298).string(message.csharpNamespace);
|
|
2043
|
-
}
|
|
2044
|
-
if (message.swiftPrefix !== "") {
|
|
2045
|
-
writer.uint32(314).string(message.swiftPrefix);
|
|
2046
|
-
}
|
|
2047
|
-
if (message.phpClassPrefix !== "") {
|
|
2048
|
-
writer.uint32(322).string(message.phpClassPrefix);
|
|
2049
|
-
}
|
|
2050
|
-
if (message.phpNamespace !== "") {
|
|
2051
|
-
writer.uint32(330).string(message.phpNamespace);
|
|
2052
|
-
}
|
|
2053
|
-
if (message.phpMetadataNamespace !== "") {
|
|
2054
|
-
writer.uint32(354).string(message.phpMetadataNamespace);
|
|
2055
|
-
}
|
|
2056
|
-
if (message.rubyPackage !== "") {
|
|
2057
|
-
writer.uint32(362).string(message.rubyPackage);
|
|
2058
|
-
}
|
|
2059
|
-
for (const v of message.uninterpretedOption) {
|
|
2060
|
-
exports.UninterpretedOption.encode(v, writer.uint32(7994).fork()).ldelim();
|
|
2061
|
-
}
|
|
2062
|
-
return writer;
|
|
2063
|
-
},
|
|
2064
|
-
decode(input, length) {
|
|
2065
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
2066
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
2067
|
-
const message = createBaseFileOptions();
|
|
2068
|
-
while (reader.pos < end) {
|
|
2069
|
-
const tag = reader.uint32();
|
|
2070
|
-
switch (tag >>> 3) {
|
|
2071
|
-
case 1:
|
|
2072
|
-
if (tag !== 10) {
|
|
2073
|
-
break;
|
|
2074
|
-
}
|
|
2075
|
-
message.javaPackage = reader.string();
|
|
2076
|
-
continue;
|
|
2077
|
-
case 8:
|
|
2078
|
-
if (tag !== 66) {
|
|
2079
|
-
break;
|
|
2080
|
-
}
|
|
2081
|
-
message.javaOuterClassname = reader.string();
|
|
2082
|
-
continue;
|
|
2083
|
-
case 10:
|
|
2084
|
-
if (tag !== 80) {
|
|
2085
|
-
break;
|
|
2086
|
-
}
|
|
2087
|
-
message.javaMultipleFiles = reader.bool();
|
|
2088
|
-
continue;
|
|
2089
|
-
case 20:
|
|
2090
|
-
if (tag !== 160) {
|
|
2091
|
-
break;
|
|
2092
|
-
}
|
|
2093
|
-
message.javaGenerateEqualsAndHash = reader.bool();
|
|
2094
|
-
continue;
|
|
2095
|
-
case 27:
|
|
2096
|
-
if (tag !== 216) {
|
|
2097
|
-
break;
|
|
2098
|
-
}
|
|
2099
|
-
message.javaStringCheckUtf8 = reader.bool();
|
|
2100
|
-
continue;
|
|
2101
|
-
case 9:
|
|
2102
|
-
if (tag !== 72) {
|
|
2103
|
-
break;
|
|
2104
|
-
}
|
|
2105
|
-
message.optimizeFor = reader.int32();
|
|
2106
|
-
continue;
|
|
2107
|
-
case 11:
|
|
2108
|
-
if (tag !== 90) {
|
|
2109
|
-
break;
|
|
2110
|
-
}
|
|
2111
|
-
message.goPackage = reader.string();
|
|
2112
|
-
continue;
|
|
2113
|
-
case 16:
|
|
2114
|
-
if (tag !== 128) {
|
|
2115
|
-
break;
|
|
2116
|
-
}
|
|
2117
|
-
message.ccGenericServices = reader.bool();
|
|
2118
|
-
continue;
|
|
2119
|
-
case 17:
|
|
2120
|
-
if (tag !== 136) {
|
|
2121
|
-
break;
|
|
2122
|
-
}
|
|
2123
|
-
message.javaGenericServices = reader.bool();
|
|
2124
|
-
continue;
|
|
2125
|
-
case 18:
|
|
2126
|
-
if (tag !== 144) {
|
|
2127
|
-
break;
|
|
2128
|
-
}
|
|
2129
|
-
message.pyGenericServices = reader.bool();
|
|
2130
|
-
continue;
|
|
2131
|
-
case 42:
|
|
2132
|
-
if (tag !== 336) {
|
|
2133
|
-
break;
|
|
2134
|
-
}
|
|
2135
|
-
message.phpGenericServices = reader.bool();
|
|
2136
|
-
continue;
|
|
2137
|
-
case 23:
|
|
2138
|
-
if (tag !== 184) {
|
|
2139
|
-
break;
|
|
2140
|
-
}
|
|
2141
|
-
message.deprecated = reader.bool();
|
|
2142
|
-
continue;
|
|
2143
|
-
case 31:
|
|
2144
|
-
if (tag !== 248) {
|
|
2145
|
-
break;
|
|
2146
|
-
}
|
|
2147
|
-
message.ccEnableArenas = reader.bool();
|
|
2148
|
-
continue;
|
|
2149
|
-
case 36:
|
|
2150
|
-
if (tag !== 290) {
|
|
2151
|
-
break;
|
|
2152
|
-
}
|
|
2153
|
-
message.objcClassPrefix = reader.string();
|
|
2154
|
-
continue;
|
|
2155
|
-
case 37:
|
|
2156
|
-
if (tag !== 298) {
|
|
2157
|
-
break;
|
|
2158
|
-
}
|
|
2159
|
-
message.csharpNamespace = reader.string();
|
|
2160
|
-
continue;
|
|
2161
|
-
case 39:
|
|
2162
|
-
if (tag !== 314) {
|
|
2163
|
-
break;
|
|
2164
|
-
}
|
|
2165
|
-
message.swiftPrefix = reader.string();
|
|
2166
|
-
continue;
|
|
2167
|
-
case 40:
|
|
2168
|
-
if (tag !== 322) {
|
|
2169
|
-
break;
|
|
2170
|
-
}
|
|
2171
|
-
message.phpClassPrefix = reader.string();
|
|
2172
|
-
continue;
|
|
2173
|
-
case 41:
|
|
2174
|
-
if (tag !== 330) {
|
|
2175
|
-
break;
|
|
2176
|
-
}
|
|
2177
|
-
message.phpNamespace = reader.string();
|
|
2178
|
-
continue;
|
|
2179
|
-
case 44:
|
|
2180
|
-
if (tag !== 354) {
|
|
2181
|
-
break;
|
|
2182
|
-
}
|
|
2183
|
-
message.phpMetadataNamespace = reader.string();
|
|
2184
|
-
continue;
|
|
2185
|
-
case 45:
|
|
2186
|
-
if (tag !== 362) {
|
|
2187
|
-
break;
|
|
2188
|
-
}
|
|
2189
|
-
message.rubyPackage = reader.string();
|
|
2190
|
-
continue;
|
|
2191
|
-
case 999:
|
|
2192
|
-
if (tag !== 7994) {
|
|
2193
|
-
break;
|
|
2194
|
-
}
|
|
2195
|
-
message.uninterpretedOption.push(exports.UninterpretedOption.decode(reader, reader.uint32()));
|
|
2196
|
-
continue;
|
|
2197
|
-
}
|
|
2198
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
2199
|
-
break;
|
|
2200
|
-
}
|
|
2201
|
-
reader.skipType(tag & 7);
|
|
2202
|
-
}
|
|
2203
|
-
return message;
|
|
2204
|
-
},
|
|
2205
|
-
fromJSON(object) {
|
|
2206
|
-
return {
|
|
2207
|
-
javaPackage: isSet(object.javaPackage) ? String(object.javaPackage) : "",
|
|
2208
|
-
javaOuterClassname: isSet(object.javaOuterClassname) ? String(object.javaOuterClassname) : "",
|
|
2209
|
-
javaMultipleFiles: isSet(object.javaMultipleFiles) ? Boolean(object.javaMultipleFiles) : false,
|
|
2210
|
-
javaGenerateEqualsAndHash: isSet(object.javaGenerateEqualsAndHash)
|
|
2211
|
-
? Boolean(object.javaGenerateEqualsAndHash)
|
|
2212
|
-
: false,
|
|
2213
|
-
javaStringCheckUtf8: isSet(object.javaStringCheckUtf8) ? Boolean(object.javaStringCheckUtf8) : false,
|
|
2214
|
-
optimizeFor: isSet(object.optimizeFor) ? fileOptions_OptimizeModeFromJSON(object.optimizeFor) : 1,
|
|
2215
|
-
goPackage: isSet(object.goPackage) ? String(object.goPackage) : "",
|
|
2216
|
-
ccGenericServices: isSet(object.ccGenericServices) ? Boolean(object.ccGenericServices) : false,
|
|
2217
|
-
javaGenericServices: isSet(object.javaGenericServices) ? Boolean(object.javaGenericServices) : false,
|
|
2218
|
-
pyGenericServices: isSet(object.pyGenericServices) ? Boolean(object.pyGenericServices) : false,
|
|
2219
|
-
phpGenericServices: isSet(object.phpGenericServices) ? Boolean(object.phpGenericServices) : false,
|
|
2220
|
-
deprecated: isSet(object.deprecated) ? Boolean(object.deprecated) : false,
|
|
2221
|
-
ccEnableArenas: isSet(object.ccEnableArenas) ? Boolean(object.ccEnableArenas) : false,
|
|
2222
|
-
objcClassPrefix: isSet(object.objcClassPrefix) ? String(object.objcClassPrefix) : "",
|
|
2223
|
-
csharpNamespace: isSet(object.csharpNamespace) ? String(object.csharpNamespace) : "",
|
|
2224
|
-
swiftPrefix: isSet(object.swiftPrefix) ? String(object.swiftPrefix) : "",
|
|
2225
|
-
phpClassPrefix: isSet(object.phpClassPrefix) ? String(object.phpClassPrefix) : "",
|
|
2226
|
-
phpNamespace: isSet(object.phpNamespace) ? String(object.phpNamespace) : "",
|
|
2227
|
-
phpMetadataNamespace: isSet(object.phpMetadataNamespace) ? String(object.phpMetadataNamespace) : "",
|
|
2228
|
-
rubyPackage: isSet(object.rubyPackage) ? String(object.rubyPackage) : "",
|
|
2229
|
-
uninterpretedOption: Array.isArray(object === null || object === void 0 ? void 0 : object.uninterpretedOption)
|
|
2230
|
-
? object.uninterpretedOption.map((e) => exports.UninterpretedOption.fromJSON(e))
|
|
2231
|
-
: [],
|
|
2232
|
-
};
|
|
2233
|
-
},
|
|
2234
|
-
toJSON(message) {
|
|
2235
|
-
const obj = {};
|
|
2236
|
-
message.javaPackage !== undefined && (obj.javaPackage = message.javaPackage);
|
|
2237
|
-
message.javaOuterClassname !== undefined && (obj.javaOuterClassname = message.javaOuterClassname);
|
|
2238
|
-
message.javaMultipleFiles !== undefined && (obj.javaMultipleFiles = message.javaMultipleFiles);
|
|
2239
|
-
message.javaGenerateEqualsAndHash !== undefined &&
|
|
2240
|
-
(obj.javaGenerateEqualsAndHash = message.javaGenerateEqualsAndHash);
|
|
2241
|
-
message.javaStringCheckUtf8 !== undefined && (obj.javaStringCheckUtf8 = message.javaStringCheckUtf8);
|
|
2242
|
-
message.optimizeFor !== undefined && (obj.optimizeFor = fileOptions_OptimizeModeToJSON(message.optimizeFor));
|
|
2243
|
-
message.goPackage !== undefined && (obj.goPackage = message.goPackage);
|
|
2244
|
-
message.ccGenericServices !== undefined && (obj.ccGenericServices = message.ccGenericServices);
|
|
2245
|
-
message.javaGenericServices !== undefined && (obj.javaGenericServices = message.javaGenericServices);
|
|
2246
|
-
message.pyGenericServices !== undefined && (obj.pyGenericServices = message.pyGenericServices);
|
|
2247
|
-
message.phpGenericServices !== undefined && (obj.phpGenericServices = message.phpGenericServices);
|
|
2248
|
-
message.deprecated !== undefined && (obj.deprecated = message.deprecated);
|
|
2249
|
-
message.ccEnableArenas !== undefined && (obj.ccEnableArenas = message.ccEnableArenas);
|
|
2250
|
-
message.objcClassPrefix !== undefined && (obj.objcClassPrefix = message.objcClassPrefix);
|
|
2251
|
-
message.csharpNamespace !== undefined && (obj.csharpNamespace = message.csharpNamespace);
|
|
2252
|
-
message.swiftPrefix !== undefined && (obj.swiftPrefix = message.swiftPrefix);
|
|
2253
|
-
message.phpClassPrefix !== undefined && (obj.phpClassPrefix = message.phpClassPrefix);
|
|
2254
|
-
message.phpNamespace !== undefined && (obj.phpNamespace = message.phpNamespace);
|
|
2255
|
-
message.phpMetadataNamespace !== undefined && (obj.phpMetadataNamespace = message.phpMetadataNamespace);
|
|
2256
|
-
message.rubyPackage !== undefined && (obj.rubyPackage = message.rubyPackage);
|
|
2257
|
-
if (message.uninterpretedOption) {
|
|
2258
|
-
obj.uninterpretedOption = message.uninterpretedOption.map((e) => e ? exports.UninterpretedOption.toJSON(e) : undefined);
|
|
2259
|
-
}
|
|
2260
|
-
else {
|
|
2261
|
-
obj.uninterpretedOption = [];
|
|
2262
|
-
}
|
|
2263
|
-
return obj;
|
|
2264
|
-
},
|
|
2265
|
-
create(base) {
|
|
2266
|
-
return exports.FileOptions.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
2267
|
-
},
|
|
2268
|
-
fromPartial(object) {
|
|
2269
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w;
|
|
2270
|
-
const message = createBaseFileOptions();
|
|
2271
|
-
message.javaPackage = (_a = object.javaPackage) !== null && _a !== void 0 ? _a : "";
|
|
2272
|
-
message.javaOuterClassname = (_b = object.javaOuterClassname) !== null && _b !== void 0 ? _b : "";
|
|
2273
|
-
message.javaMultipleFiles = (_c = object.javaMultipleFiles) !== null && _c !== void 0 ? _c : false;
|
|
2274
|
-
message.javaGenerateEqualsAndHash = (_d = object.javaGenerateEqualsAndHash) !== null && _d !== void 0 ? _d : false;
|
|
2275
|
-
message.javaStringCheckUtf8 = (_e = object.javaStringCheckUtf8) !== null && _e !== void 0 ? _e : false;
|
|
2276
|
-
message.optimizeFor = (_f = object.optimizeFor) !== null && _f !== void 0 ? _f : 1;
|
|
2277
|
-
message.goPackage = (_g = object.goPackage) !== null && _g !== void 0 ? _g : "";
|
|
2278
|
-
message.ccGenericServices = (_h = object.ccGenericServices) !== null && _h !== void 0 ? _h : false;
|
|
2279
|
-
message.javaGenericServices = (_j = object.javaGenericServices) !== null && _j !== void 0 ? _j : false;
|
|
2280
|
-
message.pyGenericServices = (_k = object.pyGenericServices) !== null && _k !== void 0 ? _k : false;
|
|
2281
|
-
message.phpGenericServices = (_l = object.phpGenericServices) !== null && _l !== void 0 ? _l : false;
|
|
2282
|
-
message.deprecated = (_m = object.deprecated) !== null && _m !== void 0 ? _m : false;
|
|
2283
|
-
message.ccEnableArenas = (_o = object.ccEnableArenas) !== null && _o !== void 0 ? _o : false;
|
|
2284
|
-
message.objcClassPrefix = (_p = object.objcClassPrefix) !== null && _p !== void 0 ? _p : "";
|
|
2285
|
-
message.csharpNamespace = (_q = object.csharpNamespace) !== null && _q !== void 0 ? _q : "";
|
|
2286
|
-
message.swiftPrefix = (_r = object.swiftPrefix) !== null && _r !== void 0 ? _r : "";
|
|
2287
|
-
message.phpClassPrefix = (_s = object.phpClassPrefix) !== null && _s !== void 0 ? _s : "";
|
|
2288
|
-
message.phpNamespace = (_t = object.phpNamespace) !== null && _t !== void 0 ? _t : "";
|
|
2289
|
-
message.phpMetadataNamespace = (_u = object.phpMetadataNamespace) !== null && _u !== void 0 ? _u : "";
|
|
2290
|
-
message.rubyPackage = (_v = object.rubyPackage) !== null && _v !== void 0 ? _v : "";
|
|
2291
|
-
message.uninterpretedOption = ((_w = object.uninterpretedOption) === null || _w === void 0 ? void 0 : _w.map((e) => exports.UninterpretedOption.fromPartial(e))) || [];
|
|
2292
|
-
return message;
|
|
2293
|
-
},
|
|
2294
|
-
};
|
|
2295
|
-
function createBaseMessageOptions() {
|
|
2296
|
-
return {
|
|
2297
|
-
messageSetWireFormat: false,
|
|
2298
|
-
noStandardDescriptorAccessor: false,
|
|
2299
|
-
deprecated: false,
|
|
2300
|
-
mapEntry: false,
|
|
2301
|
-
deprecatedLegacyJsonFieldConflicts: false,
|
|
2302
|
-
uninterpretedOption: [],
|
|
2303
|
-
};
|
|
2304
|
-
}
|
|
2305
|
-
exports.MessageOptions = {
|
|
2306
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
2307
|
-
if (message.messageSetWireFormat === true) {
|
|
2308
|
-
writer.uint32(8).bool(message.messageSetWireFormat);
|
|
2309
|
-
}
|
|
2310
|
-
if (message.noStandardDescriptorAccessor === true) {
|
|
2311
|
-
writer.uint32(16).bool(message.noStandardDescriptorAccessor);
|
|
2312
|
-
}
|
|
2313
|
-
if (message.deprecated === true) {
|
|
2314
|
-
writer.uint32(24).bool(message.deprecated);
|
|
2315
|
-
}
|
|
2316
|
-
if (message.mapEntry === true) {
|
|
2317
|
-
writer.uint32(56).bool(message.mapEntry);
|
|
2318
|
-
}
|
|
2319
|
-
if (message.deprecatedLegacyJsonFieldConflicts === true) {
|
|
2320
|
-
writer.uint32(88).bool(message.deprecatedLegacyJsonFieldConflicts);
|
|
2321
|
-
}
|
|
2322
|
-
for (const v of message.uninterpretedOption) {
|
|
2323
|
-
exports.UninterpretedOption.encode(v, writer.uint32(7994).fork()).ldelim();
|
|
2324
|
-
}
|
|
2325
|
-
return writer;
|
|
2326
|
-
},
|
|
2327
|
-
decode(input, length) {
|
|
2328
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
2329
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
2330
|
-
const message = createBaseMessageOptions();
|
|
2331
|
-
while (reader.pos < end) {
|
|
2332
|
-
const tag = reader.uint32();
|
|
2333
|
-
switch (tag >>> 3) {
|
|
2334
|
-
case 1:
|
|
2335
|
-
if (tag !== 8) {
|
|
2336
|
-
break;
|
|
2337
|
-
}
|
|
2338
|
-
message.messageSetWireFormat = reader.bool();
|
|
2339
|
-
continue;
|
|
2340
|
-
case 2:
|
|
2341
|
-
if (tag !== 16) {
|
|
2342
|
-
break;
|
|
2343
|
-
}
|
|
2344
|
-
message.noStandardDescriptorAccessor = reader.bool();
|
|
2345
|
-
continue;
|
|
2346
|
-
case 3:
|
|
2347
|
-
if (tag !== 24) {
|
|
2348
|
-
break;
|
|
2349
|
-
}
|
|
2350
|
-
message.deprecated = reader.bool();
|
|
2351
|
-
continue;
|
|
2352
|
-
case 7:
|
|
2353
|
-
if (tag !== 56) {
|
|
2354
|
-
break;
|
|
2355
|
-
}
|
|
2356
|
-
message.mapEntry = reader.bool();
|
|
2357
|
-
continue;
|
|
2358
|
-
case 11:
|
|
2359
|
-
if (tag !== 88) {
|
|
2360
|
-
break;
|
|
2361
|
-
}
|
|
2362
|
-
message.deprecatedLegacyJsonFieldConflicts = reader.bool();
|
|
2363
|
-
continue;
|
|
2364
|
-
case 999:
|
|
2365
|
-
if (tag !== 7994) {
|
|
2366
|
-
break;
|
|
2367
|
-
}
|
|
2368
|
-
message.uninterpretedOption.push(exports.UninterpretedOption.decode(reader, reader.uint32()));
|
|
2369
|
-
continue;
|
|
2370
|
-
}
|
|
2371
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
2372
|
-
break;
|
|
2373
|
-
}
|
|
2374
|
-
reader.skipType(tag & 7);
|
|
2375
|
-
}
|
|
2376
|
-
return message;
|
|
2377
|
-
},
|
|
2378
|
-
fromJSON(object) {
|
|
2379
|
-
return {
|
|
2380
|
-
messageSetWireFormat: isSet(object.messageSetWireFormat) ? Boolean(object.messageSetWireFormat) : false,
|
|
2381
|
-
noStandardDescriptorAccessor: isSet(object.noStandardDescriptorAccessor)
|
|
2382
|
-
? Boolean(object.noStandardDescriptorAccessor)
|
|
2383
|
-
: false,
|
|
2384
|
-
deprecated: isSet(object.deprecated) ? Boolean(object.deprecated) : false,
|
|
2385
|
-
mapEntry: isSet(object.mapEntry) ? Boolean(object.mapEntry) : false,
|
|
2386
|
-
deprecatedLegacyJsonFieldConflicts: isSet(object.deprecatedLegacyJsonFieldConflicts)
|
|
2387
|
-
? Boolean(object.deprecatedLegacyJsonFieldConflicts)
|
|
2388
|
-
: false,
|
|
2389
|
-
uninterpretedOption: Array.isArray(object === null || object === void 0 ? void 0 : object.uninterpretedOption)
|
|
2390
|
-
? object.uninterpretedOption.map((e) => exports.UninterpretedOption.fromJSON(e))
|
|
2391
|
-
: [],
|
|
2392
|
-
};
|
|
2393
|
-
},
|
|
2394
|
-
toJSON(message) {
|
|
2395
|
-
const obj = {};
|
|
2396
|
-
message.messageSetWireFormat !== undefined && (obj.messageSetWireFormat = message.messageSetWireFormat);
|
|
2397
|
-
message.noStandardDescriptorAccessor !== undefined &&
|
|
2398
|
-
(obj.noStandardDescriptorAccessor = message.noStandardDescriptorAccessor);
|
|
2399
|
-
message.deprecated !== undefined && (obj.deprecated = message.deprecated);
|
|
2400
|
-
message.mapEntry !== undefined && (obj.mapEntry = message.mapEntry);
|
|
2401
|
-
message.deprecatedLegacyJsonFieldConflicts !== undefined &&
|
|
2402
|
-
(obj.deprecatedLegacyJsonFieldConflicts = message.deprecatedLegacyJsonFieldConflicts);
|
|
2403
|
-
if (message.uninterpretedOption) {
|
|
2404
|
-
obj.uninterpretedOption = message.uninterpretedOption.map((e) => e ? exports.UninterpretedOption.toJSON(e) : undefined);
|
|
2405
|
-
}
|
|
2406
|
-
else {
|
|
2407
|
-
obj.uninterpretedOption = [];
|
|
2408
|
-
}
|
|
2409
|
-
return obj;
|
|
2410
|
-
},
|
|
2411
|
-
create(base) {
|
|
2412
|
-
return exports.MessageOptions.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
2413
|
-
},
|
|
2414
|
-
fromPartial(object) {
|
|
2415
|
-
var _a, _b, _c, _d, _e, _f;
|
|
2416
|
-
const message = createBaseMessageOptions();
|
|
2417
|
-
message.messageSetWireFormat = (_a = object.messageSetWireFormat) !== null && _a !== void 0 ? _a : false;
|
|
2418
|
-
message.noStandardDescriptorAccessor = (_b = object.noStandardDescriptorAccessor) !== null && _b !== void 0 ? _b : false;
|
|
2419
|
-
message.deprecated = (_c = object.deprecated) !== null && _c !== void 0 ? _c : false;
|
|
2420
|
-
message.mapEntry = (_d = object.mapEntry) !== null && _d !== void 0 ? _d : false;
|
|
2421
|
-
message.deprecatedLegacyJsonFieldConflicts = (_e = object.deprecatedLegacyJsonFieldConflicts) !== null && _e !== void 0 ? _e : false;
|
|
2422
|
-
message.uninterpretedOption = ((_f = object.uninterpretedOption) === null || _f === void 0 ? void 0 : _f.map((e) => exports.UninterpretedOption.fromPartial(e))) || [];
|
|
2423
|
-
return message;
|
|
2424
|
-
},
|
|
2425
|
-
};
|
|
2426
|
-
function createBaseFieldOptions() {
|
|
2427
|
-
return {
|
|
2428
|
-
ctype: 0,
|
|
2429
|
-
packed: false,
|
|
2430
|
-
jstype: 0,
|
|
2431
|
-
lazy: false,
|
|
2432
|
-
unverifiedLazy: false,
|
|
2433
|
-
deprecated: false,
|
|
2434
|
-
weak: false,
|
|
2435
|
-
debugRedact: false,
|
|
2436
|
-
retention: 0,
|
|
2437
|
-
target: 0,
|
|
2438
|
-
uninterpretedOption: [],
|
|
2439
|
-
};
|
|
2440
|
-
}
|
|
2441
|
-
exports.FieldOptions = {
|
|
2442
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
2443
|
-
if (message.ctype !== 0) {
|
|
2444
|
-
writer.uint32(8).int32(message.ctype);
|
|
2445
|
-
}
|
|
2446
|
-
if (message.packed === true) {
|
|
2447
|
-
writer.uint32(16).bool(message.packed);
|
|
2448
|
-
}
|
|
2449
|
-
if (message.jstype !== 0) {
|
|
2450
|
-
writer.uint32(48).int32(message.jstype);
|
|
2451
|
-
}
|
|
2452
|
-
if (message.lazy === true) {
|
|
2453
|
-
writer.uint32(40).bool(message.lazy);
|
|
2454
|
-
}
|
|
2455
|
-
if (message.unverifiedLazy === true) {
|
|
2456
|
-
writer.uint32(120).bool(message.unverifiedLazy);
|
|
2457
|
-
}
|
|
2458
|
-
if (message.deprecated === true) {
|
|
2459
|
-
writer.uint32(24).bool(message.deprecated);
|
|
2460
|
-
}
|
|
2461
|
-
if (message.weak === true) {
|
|
2462
|
-
writer.uint32(80).bool(message.weak);
|
|
2463
|
-
}
|
|
2464
|
-
if (message.debugRedact === true) {
|
|
2465
|
-
writer.uint32(128).bool(message.debugRedact);
|
|
2466
|
-
}
|
|
2467
|
-
if (message.retention !== 0) {
|
|
2468
|
-
writer.uint32(136).int32(message.retention);
|
|
2469
|
-
}
|
|
2470
|
-
if (message.target !== 0) {
|
|
2471
|
-
writer.uint32(144).int32(message.target);
|
|
2472
|
-
}
|
|
2473
|
-
for (const v of message.uninterpretedOption) {
|
|
2474
|
-
exports.UninterpretedOption.encode(v, writer.uint32(7994).fork()).ldelim();
|
|
2475
|
-
}
|
|
2476
|
-
return writer;
|
|
2477
|
-
},
|
|
2478
|
-
decode(input, length) {
|
|
2479
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
2480
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
2481
|
-
const message = createBaseFieldOptions();
|
|
2482
|
-
while (reader.pos < end) {
|
|
2483
|
-
const tag = reader.uint32();
|
|
2484
|
-
switch (tag >>> 3) {
|
|
2485
|
-
case 1:
|
|
2486
|
-
if (tag !== 8) {
|
|
2487
|
-
break;
|
|
2488
|
-
}
|
|
2489
|
-
message.ctype = reader.int32();
|
|
2490
|
-
continue;
|
|
2491
|
-
case 2:
|
|
2492
|
-
if (tag !== 16) {
|
|
2493
|
-
break;
|
|
2494
|
-
}
|
|
2495
|
-
message.packed = reader.bool();
|
|
2496
|
-
continue;
|
|
2497
|
-
case 6:
|
|
2498
|
-
if (tag !== 48) {
|
|
2499
|
-
break;
|
|
2500
|
-
}
|
|
2501
|
-
message.jstype = reader.int32();
|
|
2502
|
-
continue;
|
|
2503
|
-
case 5:
|
|
2504
|
-
if (tag !== 40) {
|
|
2505
|
-
break;
|
|
2506
|
-
}
|
|
2507
|
-
message.lazy = reader.bool();
|
|
2508
|
-
continue;
|
|
2509
|
-
case 15:
|
|
2510
|
-
if (tag !== 120) {
|
|
2511
|
-
break;
|
|
2512
|
-
}
|
|
2513
|
-
message.unverifiedLazy = reader.bool();
|
|
2514
|
-
continue;
|
|
2515
|
-
case 3:
|
|
2516
|
-
if (tag !== 24) {
|
|
2517
|
-
break;
|
|
2518
|
-
}
|
|
2519
|
-
message.deprecated = reader.bool();
|
|
2520
|
-
continue;
|
|
2521
|
-
case 10:
|
|
2522
|
-
if (tag !== 80) {
|
|
2523
|
-
break;
|
|
2524
|
-
}
|
|
2525
|
-
message.weak = reader.bool();
|
|
2526
|
-
continue;
|
|
2527
|
-
case 16:
|
|
2528
|
-
if (tag !== 128) {
|
|
2529
|
-
break;
|
|
2530
|
-
}
|
|
2531
|
-
message.debugRedact = reader.bool();
|
|
2532
|
-
continue;
|
|
2533
|
-
case 17:
|
|
2534
|
-
if (tag !== 136) {
|
|
2535
|
-
break;
|
|
2536
|
-
}
|
|
2537
|
-
message.retention = reader.int32();
|
|
2538
|
-
continue;
|
|
2539
|
-
case 18:
|
|
2540
|
-
if (tag !== 144) {
|
|
2541
|
-
break;
|
|
2542
|
-
}
|
|
2543
|
-
message.target = reader.int32();
|
|
2544
|
-
continue;
|
|
2545
|
-
case 999:
|
|
2546
|
-
if (tag !== 7994) {
|
|
2547
|
-
break;
|
|
2548
|
-
}
|
|
2549
|
-
message.uninterpretedOption.push(exports.UninterpretedOption.decode(reader, reader.uint32()));
|
|
2550
|
-
continue;
|
|
2551
|
-
}
|
|
2552
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
2553
|
-
break;
|
|
2554
|
-
}
|
|
2555
|
-
reader.skipType(tag & 7);
|
|
2556
|
-
}
|
|
2557
|
-
return message;
|
|
2558
|
-
},
|
|
2559
|
-
fromJSON(object) {
|
|
2560
|
-
return {
|
|
2561
|
-
ctype: isSet(object.ctype) ? fieldOptions_CTypeFromJSON(object.ctype) : 0,
|
|
2562
|
-
packed: isSet(object.packed) ? Boolean(object.packed) : false,
|
|
2563
|
-
jstype: isSet(object.jstype) ? fieldOptions_JSTypeFromJSON(object.jstype) : 0,
|
|
2564
|
-
lazy: isSet(object.lazy) ? Boolean(object.lazy) : false,
|
|
2565
|
-
unverifiedLazy: isSet(object.unverifiedLazy) ? Boolean(object.unverifiedLazy) : false,
|
|
2566
|
-
deprecated: isSet(object.deprecated) ? Boolean(object.deprecated) : false,
|
|
2567
|
-
weak: isSet(object.weak) ? Boolean(object.weak) : false,
|
|
2568
|
-
debugRedact: isSet(object.debugRedact) ? Boolean(object.debugRedact) : false,
|
|
2569
|
-
retention: isSet(object.retention) ? fieldOptions_OptionRetentionFromJSON(object.retention) : 0,
|
|
2570
|
-
target: isSet(object.target) ? fieldOptions_OptionTargetTypeFromJSON(object.target) : 0,
|
|
2571
|
-
uninterpretedOption: Array.isArray(object === null || object === void 0 ? void 0 : object.uninterpretedOption)
|
|
2572
|
-
? object.uninterpretedOption.map((e) => exports.UninterpretedOption.fromJSON(e))
|
|
2573
|
-
: [],
|
|
2574
|
-
};
|
|
2575
|
-
},
|
|
2576
|
-
toJSON(message) {
|
|
2577
|
-
const obj = {};
|
|
2578
|
-
message.ctype !== undefined && (obj.ctype = fieldOptions_CTypeToJSON(message.ctype));
|
|
2579
|
-
message.packed !== undefined && (obj.packed = message.packed);
|
|
2580
|
-
message.jstype !== undefined && (obj.jstype = fieldOptions_JSTypeToJSON(message.jstype));
|
|
2581
|
-
message.lazy !== undefined && (obj.lazy = message.lazy);
|
|
2582
|
-
message.unverifiedLazy !== undefined && (obj.unverifiedLazy = message.unverifiedLazy);
|
|
2583
|
-
message.deprecated !== undefined && (obj.deprecated = message.deprecated);
|
|
2584
|
-
message.weak !== undefined && (obj.weak = message.weak);
|
|
2585
|
-
message.debugRedact !== undefined && (obj.debugRedact = message.debugRedact);
|
|
2586
|
-
message.retention !== undefined && (obj.retention = fieldOptions_OptionRetentionToJSON(message.retention));
|
|
2587
|
-
message.target !== undefined && (obj.target = fieldOptions_OptionTargetTypeToJSON(message.target));
|
|
2588
|
-
if (message.uninterpretedOption) {
|
|
2589
|
-
obj.uninterpretedOption = message.uninterpretedOption.map((e) => e ? exports.UninterpretedOption.toJSON(e) : undefined);
|
|
2590
|
-
}
|
|
2591
|
-
else {
|
|
2592
|
-
obj.uninterpretedOption = [];
|
|
2593
|
-
}
|
|
2594
|
-
return obj;
|
|
2595
|
-
},
|
|
2596
|
-
create(base) {
|
|
2597
|
-
return exports.FieldOptions.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
2598
|
-
},
|
|
2599
|
-
fromPartial(object) {
|
|
2600
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
2601
|
-
const message = createBaseFieldOptions();
|
|
2602
|
-
message.ctype = (_a = object.ctype) !== null && _a !== void 0 ? _a : 0;
|
|
2603
|
-
message.packed = (_b = object.packed) !== null && _b !== void 0 ? _b : false;
|
|
2604
|
-
message.jstype = (_c = object.jstype) !== null && _c !== void 0 ? _c : 0;
|
|
2605
|
-
message.lazy = (_d = object.lazy) !== null && _d !== void 0 ? _d : false;
|
|
2606
|
-
message.unverifiedLazy = (_e = object.unverifiedLazy) !== null && _e !== void 0 ? _e : false;
|
|
2607
|
-
message.deprecated = (_f = object.deprecated) !== null && _f !== void 0 ? _f : false;
|
|
2608
|
-
message.weak = (_g = object.weak) !== null && _g !== void 0 ? _g : false;
|
|
2609
|
-
message.debugRedact = (_h = object.debugRedact) !== null && _h !== void 0 ? _h : false;
|
|
2610
|
-
message.retention = (_j = object.retention) !== null && _j !== void 0 ? _j : 0;
|
|
2611
|
-
message.target = (_k = object.target) !== null && _k !== void 0 ? _k : 0;
|
|
2612
|
-
message.uninterpretedOption = ((_l = object.uninterpretedOption) === null || _l === void 0 ? void 0 : _l.map((e) => exports.UninterpretedOption.fromPartial(e))) || [];
|
|
2613
|
-
return message;
|
|
2614
|
-
},
|
|
2615
|
-
};
|
|
2616
|
-
function createBaseOneofOptions() {
|
|
2617
|
-
return { uninterpretedOption: [] };
|
|
2618
|
-
}
|
|
2619
|
-
exports.OneofOptions = {
|
|
2620
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
2621
|
-
for (const v of message.uninterpretedOption) {
|
|
2622
|
-
exports.UninterpretedOption.encode(v, writer.uint32(7994).fork()).ldelim();
|
|
2623
|
-
}
|
|
2624
|
-
return writer;
|
|
2625
|
-
},
|
|
2626
|
-
decode(input, length) {
|
|
2627
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
2628
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
2629
|
-
const message = createBaseOneofOptions();
|
|
2630
|
-
while (reader.pos < end) {
|
|
2631
|
-
const tag = reader.uint32();
|
|
2632
|
-
switch (tag >>> 3) {
|
|
2633
|
-
case 999:
|
|
2634
|
-
if (tag !== 7994) {
|
|
2635
|
-
break;
|
|
2636
|
-
}
|
|
2637
|
-
message.uninterpretedOption.push(exports.UninterpretedOption.decode(reader, reader.uint32()));
|
|
2638
|
-
continue;
|
|
2639
|
-
}
|
|
2640
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
2641
|
-
break;
|
|
2642
|
-
}
|
|
2643
|
-
reader.skipType(tag & 7);
|
|
2644
|
-
}
|
|
2645
|
-
return message;
|
|
2646
|
-
},
|
|
2647
|
-
fromJSON(object) {
|
|
2648
|
-
return {
|
|
2649
|
-
uninterpretedOption: Array.isArray(object === null || object === void 0 ? void 0 : object.uninterpretedOption)
|
|
2650
|
-
? object.uninterpretedOption.map((e) => exports.UninterpretedOption.fromJSON(e))
|
|
2651
|
-
: [],
|
|
2652
|
-
};
|
|
2653
|
-
},
|
|
2654
|
-
toJSON(message) {
|
|
2655
|
-
const obj = {};
|
|
2656
|
-
if (message.uninterpretedOption) {
|
|
2657
|
-
obj.uninterpretedOption = message.uninterpretedOption.map((e) => e ? exports.UninterpretedOption.toJSON(e) : undefined);
|
|
2658
|
-
}
|
|
2659
|
-
else {
|
|
2660
|
-
obj.uninterpretedOption = [];
|
|
2661
|
-
}
|
|
2662
|
-
return obj;
|
|
2663
|
-
},
|
|
2664
|
-
create(base) {
|
|
2665
|
-
return exports.OneofOptions.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
2666
|
-
},
|
|
2667
|
-
fromPartial(object) {
|
|
2668
|
-
var _a;
|
|
2669
|
-
const message = createBaseOneofOptions();
|
|
2670
|
-
message.uninterpretedOption = ((_a = object.uninterpretedOption) === null || _a === void 0 ? void 0 : _a.map((e) => exports.UninterpretedOption.fromPartial(e))) || [];
|
|
2671
|
-
return message;
|
|
2672
|
-
},
|
|
2673
|
-
};
|
|
2674
|
-
function createBaseEnumOptions() {
|
|
2675
|
-
return { allowAlias: false, deprecated: false, deprecatedLegacyJsonFieldConflicts: false, uninterpretedOption: [] };
|
|
2676
|
-
}
|
|
2677
|
-
exports.EnumOptions = {
|
|
2678
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
2679
|
-
if (message.allowAlias === true) {
|
|
2680
|
-
writer.uint32(16).bool(message.allowAlias);
|
|
2681
|
-
}
|
|
2682
|
-
if (message.deprecated === true) {
|
|
2683
|
-
writer.uint32(24).bool(message.deprecated);
|
|
2684
|
-
}
|
|
2685
|
-
if (message.deprecatedLegacyJsonFieldConflicts === true) {
|
|
2686
|
-
writer.uint32(48).bool(message.deprecatedLegacyJsonFieldConflicts);
|
|
2687
|
-
}
|
|
2688
|
-
for (const v of message.uninterpretedOption) {
|
|
2689
|
-
exports.UninterpretedOption.encode(v, writer.uint32(7994).fork()).ldelim();
|
|
2690
|
-
}
|
|
2691
|
-
return writer;
|
|
2692
|
-
},
|
|
2693
|
-
decode(input, length) {
|
|
2694
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
2695
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
2696
|
-
const message = createBaseEnumOptions();
|
|
2697
|
-
while (reader.pos < end) {
|
|
2698
|
-
const tag = reader.uint32();
|
|
2699
|
-
switch (tag >>> 3) {
|
|
2700
|
-
case 2:
|
|
2701
|
-
if (tag !== 16) {
|
|
2702
|
-
break;
|
|
2703
|
-
}
|
|
2704
|
-
message.allowAlias = reader.bool();
|
|
2705
|
-
continue;
|
|
2706
|
-
case 3:
|
|
2707
|
-
if (tag !== 24) {
|
|
2708
|
-
break;
|
|
2709
|
-
}
|
|
2710
|
-
message.deprecated = reader.bool();
|
|
2711
|
-
continue;
|
|
2712
|
-
case 6:
|
|
2713
|
-
if (tag !== 48) {
|
|
2714
|
-
break;
|
|
2715
|
-
}
|
|
2716
|
-
message.deprecatedLegacyJsonFieldConflicts = reader.bool();
|
|
2717
|
-
continue;
|
|
2718
|
-
case 999:
|
|
2719
|
-
if (tag !== 7994) {
|
|
2720
|
-
break;
|
|
2721
|
-
}
|
|
2722
|
-
message.uninterpretedOption.push(exports.UninterpretedOption.decode(reader, reader.uint32()));
|
|
2723
|
-
continue;
|
|
2724
|
-
}
|
|
2725
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
2726
|
-
break;
|
|
2727
|
-
}
|
|
2728
|
-
reader.skipType(tag & 7);
|
|
2729
|
-
}
|
|
2730
|
-
return message;
|
|
2731
|
-
},
|
|
2732
|
-
fromJSON(object) {
|
|
2733
|
-
return {
|
|
2734
|
-
allowAlias: isSet(object.allowAlias) ? Boolean(object.allowAlias) : false,
|
|
2735
|
-
deprecated: isSet(object.deprecated) ? Boolean(object.deprecated) : false,
|
|
2736
|
-
deprecatedLegacyJsonFieldConflicts: isSet(object.deprecatedLegacyJsonFieldConflicts)
|
|
2737
|
-
? Boolean(object.deprecatedLegacyJsonFieldConflicts)
|
|
2738
|
-
: false,
|
|
2739
|
-
uninterpretedOption: Array.isArray(object === null || object === void 0 ? void 0 : object.uninterpretedOption)
|
|
2740
|
-
? object.uninterpretedOption.map((e) => exports.UninterpretedOption.fromJSON(e))
|
|
2741
|
-
: [],
|
|
2742
|
-
};
|
|
2743
|
-
},
|
|
2744
|
-
toJSON(message) {
|
|
2745
|
-
const obj = {};
|
|
2746
|
-
message.allowAlias !== undefined && (obj.allowAlias = message.allowAlias);
|
|
2747
|
-
message.deprecated !== undefined && (obj.deprecated = message.deprecated);
|
|
2748
|
-
message.deprecatedLegacyJsonFieldConflicts !== undefined &&
|
|
2749
|
-
(obj.deprecatedLegacyJsonFieldConflicts = message.deprecatedLegacyJsonFieldConflicts);
|
|
2750
|
-
if (message.uninterpretedOption) {
|
|
2751
|
-
obj.uninterpretedOption = message.uninterpretedOption.map((e) => e ? exports.UninterpretedOption.toJSON(e) : undefined);
|
|
2752
|
-
}
|
|
2753
|
-
else {
|
|
2754
|
-
obj.uninterpretedOption = [];
|
|
2755
|
-
}
|
|
2756
|
-
return obj;
|
|
2757
|
-
},
|
|
2758
|
-
create(base) {
|
|
2759
|
-
return exports.EnumOptions.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
2760
|
-
},
|
|
2761
|
-
fromPartial(object) {
|
|
2762
|
-
var _a, _b, _c, _d;
|
|
2763
|
-
const message = createBaseEnumOptions();
|
|
2764
|
-
message.allowAlias = (_a = object.allowAlias) !== null && _a !== void 0 ? _a : false;
|
|
2765
|
-
message.deprecated = (_b = object.deprecated) !== null && _b !== void 0 ? _b : false;
|
|
2766
|
-
message.deprecatedLegacyJsonFieldConflicts = (_c = object.deprecatedLegacyJsonFieldConflicts) !== null && _c !== void 0 ? _c : false;
|
|
2767
|
-
message.uninterpretedOption = ((_d = object.uninterpretedOption) === null || _d === void 0 ? void 0 : _d.map((e) => exports.UninterpretedOption.fromPartial(e))) || [];
|
|
2768
|
-
return message;
|
|
2769
|
-
},
|
|
2770
|
-
};
|
|
2771
|
-
function createBaseEnumValueOptions() {
|
|
2772
|
-
return { deprecated: false, uninterpretedOption: [] };
|
|
2773
|
-
}
|
|
2774
|
-
exports.EnumValueOptions = {
|
|
2775
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
2776
|
-
if (message.deprecated === true) {
|
|
2777
|
-
writer.uint32(8).bool(message.deprecated);
|
|
2778
|
-
}
|
|
2779
|
-
for (const v of message.uninterpretedOption) {
|
|
2780
|
-
exports.UninterpretedOption.encode(v, writer.uint32(7994).fork()).ldelim();
|
|
2781
|
-
}
|
|
2782
|
-
return writer;
|
|
2783
|
-
},
|
|
2784
|
-
decode(input, length) {
|
|
2785
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
2786
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
2787
|
-
const message = createBaseEnumValueOptions();
|
|
2788
|
-
while (reader.pos < end) {
|
|
2789
|
-
const tag = reader.uint32();
|
|
2790
|
-
switch (tag >>> 3) {
|
|
2791
|
-
case 1:
|
|
2792
|
-
if (tag !== 8) {
|
|
2793
|
-
break;
|
|
2794
|
-
}
|
|
2795
|
-
message.deprecated = reader.bool();
|
|
2796
|
-
continue;
|
|
2797
|
-
case 999:
|
|
2798
|
-
if (tag !== 7994) {
|
|
2799
|
-
break;
|
|
2800
|
-
}
|
|
2801
|
-
message.uninterpretedOption.push(exports.UninterpretedOption.decode(reader, reader.uint32()));
|
|
2802
|
-
continue;
|
|
2803
|
-
}
|
|
2804
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
2805
|
-
break;
|
|
2806
|
-
}
|
|
2807
|
-
reader.skipType(tag & 7);
|
|
2808
|
-
}
|
|
2809
|
-
return message;
|
|
2810
|
-
},
|
|
2811
|
-
fromJSON(object) {
|
|
2812
|
-
return {
|
|
2813
|
-
deprecated: isSet(object.deprecated) ? Boolean(object.deprecated) : false,
|
|
2814
|
-
uninterpretedOption: Array.isArray(object === null || object === void 0 ? void 0 : object.uninterpretedOption)
|
|
2815
|
-
? object.uninterpretedOption.map((e) => exports.UninterpretedOption.fromJSON(e))
|
|
2816
|
-
: [],
|
|
2817
|
-
};
|
|
2818
|
-
},
|
|
2819
|
-
toJSON(message) {
|
|
2820
|
-
const obj = {};
|
|
2821
|
-
message.deprecated !== undefined && (obj.deprecated = message.deprecated);
|
|
2822
|
-
if (message.uninterpretedOption) {
|
|
2823
|
-
obj.uninterpretedOption = message.uninterpretedOption.map((e) => e ? exports.UninterpretedOption.toJSON(e) : undefined);
|
|
2824
|
-
}
|
|
2825
|
-
else {
|
|
2826
|
-
obj.uninterpretedOption = [];
|
|
2827
|
-
}
|
|
2828
|
-
return obj;
|
|
2829
|
-
},
|
|
2830
|
-
create(base) {
|
|
2831
|
-
return exports.EnumValueOptions.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
2832
|
-
},
|
|
2833
|
-
fromPartial(object) {
|
|
2834
|
-
var _a, _b;
|
|
2835
|
-
const message = createBaseEnumValueOptions();
|
|
2836
|
-
message.deprecated = (_a = object.deprecated) !== null && _a !== void 0 ? _a : false;
|
|
2837
|
-
message.uninterpretedOption = ((_b = object.uninterpretedOption) === null || _b === void 0 ? void 0 : _b.map((e) => exports.UninterpretedOption.fromPartial(e))) || [];
|
|
2838
|
-
return message;
|
|
2839
|
-
},
|
|
2840
|
-
};
|
|
2841
|
-
function createBaseServiceOptions() {
|
|
2842
|
-
return { deprecated: false, uninterpretedOption: [] };
|
|
2843
|
-
}
|
|
2844
|
-
exports.ServiceOptions = {
|
|
2845
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
2846
|
-
if (message.deprecated === true) {
|
|
2847
|
-
writer.uint32(264).bool(message.deprecated);
|
|
2848
|
-
}
|
|
2849
|
-
for (const v of message.uninterpretedOption) {
|
|
2850
|
-
exports.UninterpretedOption.encode(v, writer.uint32(7994).fork()).ldelim();
|
|
2851
|
-
}
|
|
2852
|
-
return writer;
|
|
2853
|
-
},
|
|
2854
|
-
decode(input, length) {
|
|
2855
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
2856
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
2857
|
-
const message = createBaseServiceOptions();
|
|
2858
|
-
while (reader.pos < end) {
|
|
2859
|
-
const tag = reader.uint32();
|
|
2860
|
-
switch (tag >>> 3) {
|
|
2861
|
-
case 33:
|
|
2862
|
-
if (tag !== 264) {
|
|
2863
|
-
break;
|
|
2864
|
-
}
|
|
2865
|
-
message.deprecated = reader.bool();
|
|
2866
|
-
continue;
|
|
2867
|
-
case 999:
|
|
2868
|
-
if (tag !== 7994) {
|
|
2869
|
-
break;
|
|
2870
|
-
}
|
|
2871
|
-
message.uninterpretedOption.push(exports.UninterpretedOption.decode(reader, reader.uint32()));
|
|
2872
|
-
continue;
|
|
2873
|
-
}
|
|
2874
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
2875
|
-
break;
|
|
2876
|
-
}
|
|
2877
|
-
reader.skipType(tag & 7);
|
|
2878
|
-
}
|
|
2879
|
-
return message;
|
|
2880
|
-
},
|
|
2881
|
-
fromJSON(object) {
|
|
2882
|
-
return {
|
|
2883
|
-
deprecated: isSet(object.deprecated) ? Boolean(object.deprecated) : false,
|
|
2884
|
-
uninterpretedOption: Array.isArray(object === null || object === void 0 ? void 0 : object.uninterpretedOption)
|
|
2885
|
-
? object.uninterpretedOption.map((e) => exports.UninterpretedOption.fromJSON(e))
|
|
2886
|
-
: [],
|
|
2887
|
-
};
|
|
2888
|
-
},
|
|
2889
|
-
toJSON(message) {
|
|
2890
|
-
const obj = {};
|
|
2891
|
-
message.deprecated !== undefined && (obj.deprecated = message.deprecated);
|
|
2892
|
-
if (message.uninterpretedOption) {
|
|
2893
|
-
obj.uninterpretedOption = message.uninterpretedOption.map((e) => e ? exports.UninterpretedOption.toJSON(e) : undefined);
|
|
2894
|
-
}
|
|
2895
|
-
else {
|
|
2896
|
-
obj.uninterpretedOption = [];
|
|
2897
|
-
}
|
|
2898
|
-
return obj;
|
|
2899
|
-
},
|
|
2900
|
-
create(base) {
|
|
2901
|
-
return exports.ServiceOptions.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
2902
|
-
},
|
|
2903
|
-
fromPartial(object) {
|
|
2904
|
-
var _a, _b;
|
|
2905
|
-
const message = createBaseServiceOptions();
|
|
2906
|
-
message.deprecated = (_a = object.deprecated) !== null && _a !== void 0 ? _a : false;
|
|
2907
|
-
message.uninterpretedOption = ((_b = object.uninterpretedOption) === null || _b === void 0 ? void 0 : _b.map((e) => exports.UninterpretedOption.fromPartial(e))) || [];
|
|
2908
|
-
return message;
|
|
2909
|
-
},
|
|
2910
|
-
};
|
|
2911
|
-
function createBaseMethodOptions() {
|
|
2912
|
-
return { deprecated: false, idempotencyLevel: 0, uninterpretedOption: [] };
|
|
2913
|
-
}
|
|
2914
|
-
exports.MethodOptions = {
|
|
2915
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
2916
|
-
if (message.deprecated === true) {
|
|
2917
|
-
writer.uint32(264).bool(message.deprecated);
|
|
2918
|
-
}
|
|
2919
|
-
if (message.idempotencyLevel !== 0) {
|
|
2920
|
-
writer.uint32(272).int32(message.idempotencyLevel);
|
|
2921
|
-
}
|
|
2922
|
-
for (const v of message.uninterpretedOption) {
|
|
2923
|
-
exports.UninterpretedOption.encode(v, writer.uint32(7994).fork()).ldelim();
|
|
2924
|
-
}
|
|
2925
|
-
return writer;
|
|
2926
|
-
},
|
|
2927
|
-
decode(input, length) {
|
|
2928
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
2929
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
2930
|
-
const message = createBaseMethodOptions();
|
|
2931
|
-
while (reader.pos < end) {
|
|
2932
|
-
const tag = reader.uint32();
|
|
2933
|
-
switch (tag >>> 3) {
|
|
2934
|
-
case 33:
|
|
2935
|
-
if (tag !== 264) {
|
|
2936
|
-
break;
|
|
2937
|
-
}
|
|
2938
|
-
message.deprecated = reader.bool();
|
|
2939
|
-
continue;
|
|
2940
|
-
case 34:
|
|
2941
|
-
if (tag !== 272) {
|
|
2942
|
-
break;
|
|
2943
|
-
}
|
|
2944
|
-
message.idempotencyLevel = reader.int32();
|
|
2945
|
-
continue;
|
|
2946
|
-
case 999:
|
|
2947
|
-
if (tag !== 7994) {
|
|
2948
|
-
break;
|
|
2949
|
-
}
|
|
2950
|
-
message.uninterpretedOption.push(exports.UninterpretedOption.decode(reader, reader.uint32()));
|
|
2951
|
-
continue;
|
|
2952
|
-
}
|
|
2953
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
2954
|
-
break;
|
|
2955
|
-
}
|
|
2956
|
-
reader.skipType(tag & 7);
|
|
2957
|
-
}
|
|
2958
|
-
return message;
|
|
2959
|
-
},
|
|
2960
|
-
fromJSON(object) {
|
|
2961
|
-
return {
|
|
2962
|
-
deprecated: isSet(object.deprecated) ? Boolean(object.deprecated) : false,
|
|
2963
|
-
idempotencyLevel: isSet(object.idempotencyLevel)
|
|
2964
|
-
? methodOptions_IdempotencyLevelFromJSON(object.idempotencyLevel)
|
|
2965
|
-
: 0,
|
|
2966
|
-
uninterpretedOption: Array.isArray(object === null || object === void 0 ? void 0 : object.uninterpretedOption)
|
|
2967
|
-
? object.uninterpretedOption.map((e) => exports.UninterpretedOption.fromJSON(e))
|
|
2968
|
-
: [],
|
|
2969
|
-
};
|
|
2970
|
-
},
|
|
2971
|
-
toJSON(message) {
|
|
2972
|
-
const obj = {};
|
|
2973
|
-
message.deprecated !== undefined && (obj.deprecated = message.deprecated);
|
|
2974
|
-
message.idempotencyLevel !== undefined &&
|
|
2975
|
-
(obj.idempotencyLevel = methodOptions_IdempotencyLevelToJSON(message.idempotencyLevel));
|
|
2976
|
-
if (message.uninterpretedOption) {
|
|
2977
|
-
obj.uninterpretedOption = message.uninterpretedOption.map((e) => e ? exports.UninterpretedOption.toJSON(e) : undefined);
|
|
2978
|
-
}
|
|
2979
|
-
else {
|
|
2980
|
-
obj.uninterpretedOption = [];
|
|
2981
|
-
}
|
|
2982
|
-
return obj;
|
|
2983
|
-
},
|
|
2984
|
-
create(base) {
|
|
2985
|
-
return exports.MethodOptions.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
2986
|
-
},
|
|
2987
|
-
fromPartial(object) {
|
|
2988
|
-
var _a, _b, _c;
|
|
2989
|
-
const message = createBaseMethodOptions();
|
|
2990
|
-
message.deprecated = (_a = object.deprecated) !== null && _a !== void 0 ? _a : false;
|
|
2991
|
-
message.idempotencyLevel = (_b = object.idempotencyLevel) !== null && _b !== void 0 ? _b : 0;
|
|
2992
|
-
message.uninterpretedOption = ((_c = object.uninterpretedOption) === null || _c === void 0 ? void 0 : _c.map((e) => exports.UninterpretedOption.fromPartial(e))) || [];
|
|
2993
|
-
return message;
|
|
2994
|
-
},
|
|
2995
|
-
};
|
|
2996
|
-
function createBaseUninterpretedOption() {
|
|
2997
|
-
return {
|
|
2998
|
-
name: [],
|
|
2999
|
-
identifierValue: "",
|
|
3000
|
-
positiveIntValue: 0,
|
|
3001
|
-
negativeIntValue: 0,
|
|
3002
|
-
doubleValue: 0,
|
|
3003
|
-
stringValue: new Uint8Array(),
|
|
3004
|
-
aggregateValue: "",
|
|
3005
|
-
};
|
|
3006
|
-
}
|
|
3007
|
-
exports.UninterpretedOption = {
|
|
3008
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
3009
|
-
for (const v of message.name) {
|
|
3010
|
-
exports.UninterpretedOption_NamePart.encode(v, writer.uint32(18).fork()).ldelim();
|
|
3011
|
-
}
|
|
3012
|
-
if (message.identifierValue !== "") {
|
|
3013
|
-
writer.uint32(26).string(message.identifierValue);
|
|
3014
|
-
}
|
|
3015
|
-
if (message.positiveIntValue !== 0) {
|
|
3016
|
-
writer.uint32(32).uint64(message.positiveIntValue);
|
|
3017
|
-
}
|
|
3018
|
-
if (message.negativeIntValue !== 0) {
|
|
3019
|
-
writer.uint32(40).int64(message.negativeIntValue);
|
|
3020
|
-
}
|
|
3021
|
-
if (message.doubleValue !== 0) {
|
|
3022
|
-
writer.uint32(49).double(message.doubleValue);
|
|
3023
|
-
}
|
|
3024
|
-
if (message.stringValue.length !== 0) {
|
|
3025
|
-
writer.uint32(58).bytes(message.stringValue);
|
|
3026
|
-
}
|
|
3027
|
-
if (message.aggregateValue !== "") {
|
|
3028
|
-
writer.uint32(66).string(message.aggregateValue);
|
|
3029
|
-
}
|
|
3030
|
-
return writer;
|
|
3031
|
-
},
|
|
3032
|
-
decode(input, length) {
|
|
3033
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
3034
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
3035
|
-
const message = createBaseUninterpretedOption();
|
|
3036
|
-
while (reader.pos < end) {
|
|
3037
|
-
const tag = reader.uint32();
|
|
3038
|
-
switch (tag >>> 3) {
|
|
3039
|
-
case 2:
|
|
3040
|
-
if (tag !== 18) {
|
|
3041
|
-
break;
|
|
3042
|
-
}
|
|
3043
|
-
message.name.push(exports.UninterpretedOption_NamePart.decode(reader, reader.uint32()));
|
|
3044
|
-
continue;
|
|
3045
|
-
case 3:
|
|
3046
|
-
if (tag !== 26) {
|
|
3047
|
-
break;
|
|
3048
|
-
}
|
|
3049
|
-
message.identifierValue = reader.string();
|
|
3050
|
-
continue;
|
|
3051
|
-
case 4:
|
|
3052
|
-
if (tag !== 32) {
|
|
3053
|
-
break;
|
|
3054
|
-
}
|
|
3055
|
-
message.positiveIntValue = longToNumber(reader.uint64());
|
|
3056
|
-
continue;
|
|
3057
|
-
case 5:
|
|
3058
|
-
if (tag !== 40) {
|
|
3059
|
-
break;
|
|
3060
|
-
}
|
|
3061
|
-
message.negativeIntValue = longToNumber(reader.int64());
|
|
3062
|
-
continue;
|
|
3063
|
-
case 6:
|
|
3064
|
-
if (tag !== 49) {
|
|
3065
|
-
break;
|
|
3066
|
-
}
|
|
3067
|
-
message.doubleValue = reader.double();
|
|
3068
|
-
continue;
|
|
3069
|
-
case 7:
|
|
3070
|
-
if (tag !== 58) {
|
|
3071
|
-
break;
|
|
3072
|
-
}
|
|
3073
|
-
message.stringValue = reader.bytes();
|
|
3074
|
-
continue;
|
|
3075
|
-
case 8:
|
|
3076
|
-
if (tag !== 66) {
|
|
3077
|
-
break;
|
|
3078
|
-
}
|
|
3079
|
-
message.aggregateValue = reader.string();
|
|
3080
|
-
continue;
|
|
3081
|
-
}
|
|
3082
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
3083
|
-
break;
|
|
3084
|
-
}
|
|
3085
|
-
reader.skipType(tag & 7);
|
|
3086
|
-
}
|
|
3087
|
-
return message;
|
|
3088
|
-
},
|
|
3089
|
-
fromJSON(object) {
|
|
3090
|
-
return {
|
|
3091
|
-
name: Array.isArray(object === null || object === void 0 ? void 0 : object.name) ? object.name.map((e) => exports.UninterpretedOption_NamePart.fromJSON(e)) : [],
|
|
3092
|
-
identifierValue: isSet(object.identifierValue) ? String(object.identifierValue) : "",
|
|
3093
|
-
positiveIntValue: isSet(object.positiveIntValue) ? Number(object.positiveIntValue) : 0,
|
|
3094
|
-
negativeIntValue: isSet(object.negativeIntValue) ? Number(object.negativeIntValue) : 0,
|
|
3095
|
-
doubleValue: isSet(object.doubleValue) ? Number(object.doubleValue) : 0,
|
|
3096
|
-
stringValue: isSet(object.stringValue) ? bytesFromBase64(object.stringValue) : new Uint8Array(),
|
|
3097
|
-
aggregateValue: isSet(object.aggregateValue) ? String(object.aggregateValue) : "",
|
|
3098
|
-
};
|
|
3099
|
-
},
|
|
3100
|
-
toJSON(message) {
|
|
3101
|
-
const obj = {};
|
|
3102
|
-
if (message.name) {
|
|
3103
|
-
obj.name = message.name.map((e) => e ? exports.UninterpretedOption_NamePart.toJSON(e) : undefined);
|
|
3104
|
-
}
|
|
3105
|
-
else {
|
|
3106
|
-
obj.name = [];
|
|
3107
|
-
}
|
|
3108
|
-
message.identifierValue !== undefined && (obj.identifierValue = message.identifierValue);
|
|
3109
|
-
message.positiveIntValue !== undefined && (obj.positiveIntValue = Math.round(message.positiveIntValue));
|
|
3110
|
-
message.negativeIntValue !== undefined && (obj.negativeIntValue = Math.round(message.negativeIntValue));
|
|
3111
|
-
message.doubleValue !== undefined && (obj.doubleValue = message.doubleValue);
|
|
3112
|
-
message.stringValue !== undefined &&
|
|
3113
|
-
(obj.stringValue = base64FromBytes(message.stringValue !== undefined ? message.stringValue : new Uint8Array()));
|
|
3114
|
-
message.aggregateValue !== undefined && (obj.aggregateValue = message.aggregateValue);
|
|
3115
|
-
return obj;
|
|
3116
|
-
},
|
|
3117
|
-
create(base) {
|
|
3118
|
-
return exports.UninterpretedOption.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
3119
|
-
},
|
|
3120
|
-
fromPartial(object) {
|
|
3121
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
3122
|
-
const message = createBaseUninterpretedOption();
|
|
3123
|
-
message.name = ((_a = object.name) === null || _a === void 0 ? void 0 : _a.map((e) => exports.UninterpretedOption_NamePart.fromPartial(e))) || [];
|
|
3124
|
-
message.identifierValue = (_b = object.identifierValue) !== null && _b !== void 0 ? _b : "";
|
|
3125
|
-
message.positiveIntValue = (_c = object.positiveIntValue) !== null && _c !== void 0 ? _c : 0;
|
|
3126
|
-
message.negativeIntValue = (_d = object.negativeIntValue) !== null && _d !== void 0 ? _d : 0;
|
|
3127
|
-
message.doubleValue = (_e = object.doubleValue) !== null && _e !== void 0 ? _e : 0;
|
|
3128
|
-
message.stringValue = (_f = object.stringValue) !== null && _f !== void 0 ? _f : new Uint8Array();
|
|
3129
|
-
message.aggregateValue = (_g = object.aggregateValue) !== null && _g !== void 0 ? _g : "";
|
|
3130
|
-
return message;
|
|
3131
|
-
},
|
|
3132
|
-
};
|
|
3133
|
-
function createBaseUninterpretedOption_NamePart() {
|
|
3134
|
-
return { namePart: "", isExtension: false };
|
|
3135
|
-
}
|
|
3136
|
-
exports.UninterpretedOption_NamePart = {
|
|
3137
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
3138
|
-
if (message.namePart !== "") {
|
|
3139
|
-
writer.uint32(10).string(message.namePart);
|
|
3140
|
-
}
|
|
3141
|
-
if (message.isExtension === true) {
|
|
3142
|
-
writer.uint32(16).bool(message.isExtension);
|
|
3143
|
-
}
|
|
3144
|
-
return writer;
|
|
3145
|
-
},
|
|
3146
|
-
decode(input, length) {
|
|
3147
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
3148
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
3149
|
-
const message = createBaseUninterpretedOption_NamePart();
|
|
3150
|
-
while (reader.pos < end) {
|
|
3151
|
-
const tag = reader.uint32();
|
|
3152
|
-
switch (tag >>> 3) {
|
|
3153
|
-
case 1:
|
|
3154
|
-
if (tag !== 10) {
|
|
3155
|
-
break;
|
|
3156
|
-
}
|
|
3157
|
-
message.namePart = reader.string();
|
|
3158
|
-
continue;
|
|
3159
|
-
case 2:
|
|
3160
|
-
if (tag !== 16) {
|
|
3161
|
-
break;
|
|
3162
|
-
}
|
|
3163
|
-
message.isExtension = reader.bool();
|
|
3164
|
-
continue;
|
|
3165
|
-
}
|
|
3166
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
3167
|
-
break;
|
|
3168
|
-
}
|
|
3169
|
-
reader.skipType(tag & 7);
|
|
3170
|
-
}
|
|
3171
|
-
return message;
|
|
3172
|
-
},
|
|
3173
|
-
fromJSON(object) {
|
|
3174
|
-
return {
|
|
3175
|
-
namePart: isSet(object.namePart) ? String(object.namePart) : "",
|
|
3176
|
-
isExtension: isSet(object.isExtension) ? Boolean(object.isExtension) : false,
|
|
3177
|
-
};
|
|
3178
|
-
},
|
|
3179
|
-
toJSON(message) {
|
|
3180
|
-
const obj = {};
|
|
3181
|
-
message.namePart !== undefined && (obj.namePart = message.namePart);
|
|
3182
|
-
message.isExtension !== undefined && (obj.isExtension = message.isExtension);
|
|
3183
|
-
return obj;
|
|
3184
|
-
},
|
|
3185
|
-
create(base) {
|
|
3186
|
-
return exports.UninterpretedOption_NamePart.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
3187
|
-
},
|
|
3188
|
-
fromPartial(object) {
|
|
3189
|
-
var _a, _b;
|
|
3190
|
-
const message = createBaseUninterpretedOption_NamePart();
|
|
3191
|
-
message.namePart = (_a = object.namePart) !== null && _a !== void 0 ? _a : "";
|
|
3192
|
-
message.isExtension = (_b = object.isExtension) !== null && _b !== void 0 ? _b : false;
|
|
3193
|
-
return message;
|
|
3194
|
-
},
|
|
3195
|
-
};
|
|
3196
|
-
function createBaseSourceCodeInfo() {
|
|
3197
|
-
return { location: [] };
|
|
3198
|
-
}
|
|
3199
|
-
exports.SourceCodeInfo = {
|
|
3200
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
3201
|
-
for (const v of message.location) {
|
|
3202
|
-
exports.SourceCodeInfo_Location.encode(v, writer.uint32(10).fork()).ldelim();
|
|
3203
|
-
}
|
|
3204
|
-
return writer;
|
|
3205
|
-
},
|
|
3206
|
-
decode(input, length) {
|
|
3207
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
3208
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
3209
|
-
const message = createBaseSourceCodeInfo();
|
|
3210
|
-
while (reader.pos < end) {
|
|
3211
|
-
const tag = reader.uint32();
|
|
3212
|
-
switch (tag >>> 3) {
|
|
3213
|
-
case 1:
|
|
3214
|
-
if (tag !== 10) {
|
|
3215
|
-
break;
|
|
3216
|
-
}
|
|
3217
|
-
message.location.push(exports.SourceCodeInfo_Location.decode(reader, reader.uint32()));
|
|
3218
|
-
continue;
|
|
3219
|
-
}
|
|
3220
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
3221
|
-
break;
|
|
3222
|
-
}
|
|
3223
|
-
reader.skipType(tag & 7);
|
|
3224
|
-
}
|
|
3225
|
-
return message;
|
|
3226
|
-
},
|
|
3227
|
-
fromJSON(object) {
|
|
3228
|
-
return {
|
|
3229
|
-
location: Array.isArray(object === null || object === void 0 ? void 0 : object.location)
|
|
3230
|
-
? object.location.map((e) => exports.SourceCodeInfo_Location.fromJSON(e))
|
|
3231
|
-
: [],
|
|
3232
|
-
};
|
|
3233
|
-
},
|
|
3234
|
-
toJSON(message) {
|
|
3235
|
-
const obj = {};
|
|
3236
|
-
if (message.location) {
|
|
3237
|
-
obj.location = message.location.map((e) => e ? exports.SourceCodeInfo_Location.toJSON(e) : undefined);
|
|
3238
|
-
}
|
|
3239
|
-
else {
|
|
3240
|
-
obj.location = [];
|
|
3241
|
-
}
|
|
3242
|
-
return obj;
|
|
3243
|
-
},
|
|
3244
|
-
create(base) {
|
|
3245
|
-
return exports.SourceCodeInfo.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
3246
|
-
},
|
|
3247
|
-
fromPartial(object) {
|
|
3248
|
-
var _a;
|
|
3249
|
-
const message = createBaseSourceCodeInfo();
|
|
3250
|
-
message.location = ((_a = object.location) === null || _a === void 0 ? void 0 : _a.map((e) => exports.SourceCodeInfo_Location.fromPartial(e))) || [];
|
|
3251
|
-
return message;
|
|
3252
|
-
},
|
|
3253
|
-
};
|
|
3254
|
-
function createBaseSourceCodeInfo_Location() {
|
|
3255
|
-
return { path: [], span: [], leadingComments: "", trailingComments: "", leadingDetachedComments: [] };
|
|
3256
|
-
}
|
|
3257
|
-
exports.SourceCodeInfo_Location = {
|
|
3258
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
3259
|
-
writer.uint32(10).fork();
|
|
3260
|
-
for (const v of message.path) {
|
|
3261
|
-
writer.int32(v);
|
|
3262
|
-
}
|
|
3263
|
-
writer.ldelim();
|
|
3264
|
-
writer.uint32(18).fork();
|
|
3265
|
-
for (const v of message.span) {
|
|
3266
|
-
writer.int32(v);
|
|
3267
|
-
}
|
|
3268
|
-
writer.ldelim();
|
|
3269
|
-
if (message.leadingComments !== "") {
|
|
3270
|
-
writer.uint32(26).string(message.leadingComments);
|
|
3271
|
-
}
|
|
3272
|
-
if (message.trailingComments !== "") {
|
|
3273
|
-
writer.uint32(34).string(message.trailingComments);
|
|
3274
|
-
}
|
|
3275
|
-
for (const v of message.leadingDetachedComments) {
|
|
3276
|
-
writer.uint32(50).string(v);
|
|
3277
|
-
}
|
|
3278
|
-
return writer;
|
|
3279
|
-
},
|
|
3280
|
-
decode(input, length) {
|
|
3281
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
3282
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
3283
|
-
const message = createBaseSourceCodeInfo_Location();
|
|
3284
|
-
while (reader.pos < end) {
|
|
3285
|
-
const tag = reader.uint32();
|
|
3286
|
-
switch (tag >>> 3) {
|
|
3287
|
-
case 1:
|
|
3288
|
-
if (tag === 8) {
|
|
3289
|
-
message.path.push(reader.int32());
|
|
3290
|
-
continue;
|
|
3291
|
-
}
|
|
3292
|
-
if (tag === 10) {
|
|
3293
|
-
const end2 = reader.uint32() + reader.pos;
|
|
3294
|
-
while (reader.pos < end2) {
|
|
3295
|
-
message.path.push(reader.int32());
|
|
3296
|
-
}
|
|
3297
|
-
continue;
|
|
3298
|
-
}
|
|
3299
|
-
break;
|
|
3300
|
-
case 2:
|
|
3301
|
-
if (tag === 16) {
|
|
3302
|
-
message.span.push(reader.int32());
|
|
3303
|
-
continue;
|
|
3304
|
-
}
|
|
3305
|
-
if (tag === 18) {
|
|
3306
|
-
const end2 = reader.uint32() + reader.pos;
|
|
3307
|
-
while (reader.pos < end2) {
|
|
3308
|
-
message.span.push(reader.int32());
|
|
3309
|
-
}
|
|
3310
|
-
continue;
|
|
3311
|
-
}
|
|
3312
|
-
break;
|
|
3313
|
-
case 3:
|
|
3314
|
-
if (tag !== 26) {
|
|
3315
|
-
break;
|
|
3316
|
-
}
|
|
3317
|
-
message.leadingComments = reader.string();
|
|
3318
|
-
continue;
|
|
3319
|
-
case 4:
|
|
3320
|
-
if (tag !== 34) {
|
|
3321
|
-
break;
|
|
3322
|
-
}
|
|
3323
|
-
message.trailingComments = reader.string();
|
|
3324
|
-
continue;
|
|
3325
|
-
case 6:
|
|
3326
|
-
if (tag !== 50) {
|
|
3327
|
-
break;
|
|
3328
|
-
}
|
|
3329
|
-
message.leadingDetachedComments.push(reader.string());
|
|
3330
|
-
continue;
|
|
3331
|
-
}
|
|
3332
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
3333
|
-
break;
|
|
3334
|
-
}
|
|
3335
|
-
reader.skipType(tag & 7);
|
|
3336
|
-
}
|
|
3337
|
-
return message;
|
|
3338
|
-
},
|
|
3339
|
-
fromJSON(object) {
|
|
3340
|
-
return {
|
|
3341
|
-
path: Array.isArray(object === null || object === void 0 ? void 0 : object.path) ? object.path.map((e) => Number(e)) : [],
|
|
3342
|
-
span: Array.isArray(object === null || object === void 0 ? void 0 : object.span) ? object.span.map((e) => Number(e)) : [],
|
|
3343
|
-
leadingComments: isSet(object.leadingComments) ? String(object.leadingComments) : "",
|
|
3344
|
-
trailingComments: isSet(object.trailingComments) ? String(object.trailingComments) : "",
|
|
3345
|
-
leadingDetachedComments: Array.isArray(object === null || object === void 0 ? void 0 : object.leadingDetachedComments)
|
|
3346
|
-
? object.leadingDetachedComments.map((e) => String(e))
|
|
3347
|
-
: [],
|
|
3348
|
-
};
|
|
3349
|
-
},
|
|
3350
|
-
toJSON(message) {
|
|
3351
|
-
const obj = {};
|
|
3352
|
-
if (message.path) {
|
|
3353
|
-
obj.path = message.path.map((e) => Math.round(e));
|
|
3354
|
-
}
|
|
3355
|
-
else {
|
|
3356
|
-
obj.path = [];
|
|
3357
|
-
}
|
|
3358
|
-
if (message.span) {
|
|
3359
|
-
obj.span = message.span.map((e) => Math.round(e));
|
|
3360
|
-
}
|
|
3361
|
-
else {
|
|
3362
|
-
obj.span = [];
|
|
3363
|
-
}
|
|
3364
|
-
message.leadingComments !== undefined && (obj.leadingComments = message.leadingComments);
|
|
3365
|
-
message.trailingComments !== undefined && (obj.trailingComments = message.trailingComments);
|
|
3366
|
-
if (message.leadingDetachedComments) {
|
|
3367
|
-
obj.leadingDetachedComments = message.leadingDetachedComments.map((e) => e);
|
|
3368
|
-
}
|
|
3369
|
-
else {
|
|
3370
|
-
obj.leadingDetachedComments = [];
|
|
3371
|
-
}
|
|
3372
|
-
return obj;
|
|
3373
|
-
},
|
|
3374
|
-
create(base) {
|
|
3375
|
-
return exports.SourceCodeInfo_Location.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
3376
|
-
},
|
|
3377
|
-
fromPartial(object) {
|
|
3378
|
-
var _a, _b, _c, _d, _e;
|
|
3379
|
-
const message = createBaseSourceCodeInfo_Location();
|
|
3380
|
-
message.path = ((_a = object.path) === null || _a === void 0 ? void 0 : _a.map((e) => e)) || [];
|
|
3381
|
-
message.span = ((_b = object.span) === null || _b === void 0 ? void 0 : _b.map((e) => e)) || [];
|
|
3382
|
-
message.leadingComments = (_c = object.leadingComments) !== null && _c !== void 0 ? _c : "";
|
|
3383
|
-
message.trailingComments = (_d = object.trailingComments) !== null && _d !== void 0 ? _d : "";
|
|
3384
|
-
message.leadingDetachedComments = ((_e = object.leadingDetachedComments) === null || _e === void 0 ? void 0 : _e.map((e) => e)) || [];
|
|
3385
|
-
return message;
|
|
3386
|
-
},
|
|
3387
|
-
};
|
|
3388
|
-
function createBaseGeneratedCodeInfo() {
|
|
3389
|
-
return { annotation: [] };
|
|
3390
|
-
}
|
|
3391
|
-
exports.GeneratedCodeInfo = {
|
|
3392
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
3393
|
-
for (const v of message.annotation) {
|
|
3394
|
-
exports.GeneratedCodeInfo_Annotation.encode(v, writer.uint32(10).fork()).ldelim();
|
|
3395
|
-
}
|
|
3396
|
-
return writer;
|
|
3397
|
-
},
|
|
3398
|
-
decode(input, length) {
|
|
3399
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
3400
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
3401
|
-
const message = createBaseGeneratedCodeInfo();
|
|
3402
|
-
while (reader.pos < end) {
|
|
3403
|
-
const tag = reader.uint32();
|
|
3404
|
-
switch (tag >>> 3) {
|
|
3405
|
-
case 1:
|
|
3406
|
-
if (tag !== 10) {
|
|
3407
|
-
break;
|
|
3408
|
-
}
|
|
3409
|
-
message.annotation.push(exports.GeneratedCodeInfo_Annotation.decode(reader, reader.uint32()));
|
|
3410
|
-
continue;
|
|
3411
|
-
}
|
|
3412
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
3413
|
-
break;
|
|
3414
|
-
}
|
|
3415
|
-
reader.skipType(tag & 7);
|
|
3416
|
-
}
|
|
3417
|
-
return message;
|
|
3418
|
-
},
|
|
3419
|
-
fromJSON(object) {
|
|
3420
|
-
return {
|
|
3421
|
-
annotation: Array.isArray(object === null || object === void 0 ? void 0 : object.annotation)
|
|
3422
|
-
? object.annotation.map((e) => exports.GeneratedCodeInfo_Annotation.fromJSON(e))
|
|
3423
|
-
: [],
|
|
3424
|
-
};
|
|
3425
|
-
},
|
|
3426
|
-
toJSON(message) {
|
|
3427
|
-
const obj = {};
|
|
3428
|
-
if (message.annotation) {
|
|
3429
|
-
obj.annotation = message.annotation.map((e) => e ? exports.GeneratedCodeInfo_Annotation.toJSON(e) : undefined);
|
|
3430
|
-
}
|
|
3431
|
-
else {
|
|
3432
|
-
obj.annotation = [];
|
|
3433
|
-
}
|
|
3434
|
-
return obj;
|
|
3435
|
-
},
|
|
3436
|
-
create(base) {
|
|
3437
|
-
return exports.GeneratedCodeInfo.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
3438
|
-
},
|
|
3439
|
-
fromPartial(object) {
|
|
3440
|
-
var _a;
|
|
3441
|
-
const message = createBaseGeneratedCodeInfo();
|
|
3442
|
-
message.annotation = ((_a = object.annotation) === null || _a === void 0 ? void 0 : _a.map((e) => exports.GeneratedCodeInfo_Annotation.fromPartial(e))) || [];
|
|
3443
|
-
return message;
|
|
3444
|
-
},
|
|
3445
|
-
};
|
|
3446
|
-
function createBaseGeneratedCodeInfo_Annotation() {
|
|
3447
|
-
return { path: [], sourceFile: "", begin: 0, end: 0, semantic: 0 };
|
|
3448
|
-
}
|
|
3449
|
-
exports.GeneratedCodeInfo_Annotation = {
|
|
3450
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
3451
|
-
writer.uint32(10).fork();
|
|
3452
|
-
for (const v of message.path) {
|
|
3453
|
-
writer.int32(v);
|
|
3454
|
-
}
|
|
3455
|
-
writer.ldelim();
|
|
3456
|
-
if (message.sourceFile !== "") {
|
|
3457
|
-
writer.uint32(18).string(message.sourceFile);
|
|
3458
|
-
}
|
|
3459
|
-
if (message.begin !== 0) {
|
|
3460
|
-
writer.uint32(24).int32(message.begin);
|
|
3461
|
-
}
|
|
3462
|
-
if (message.end !== 0) {
|
|
3463
|
-
writer.uint32(32).int32(message.end);
|
|
3464
|
-
}
|
|
3465
|
-
if (message.semantic !== 0) {
|
|
3466
|
-
writer.uint32(40).int32(message.semantic);
|
|
3467
|
-
}
|
|
3468
|
-
return writer;
|
|
3469
|
-
},
|
|
3470
|
-
decode(input, length) {
|
|
3471
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
3472
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
3473
|
-
const message = createBaseGeneratedCodeInfo_Annotation();
|
|
3474
|
-
while (reader.pos < end) {
|
|
3475
|
-
const tag = reader.uint32();
|
|
3476
|
-
switch (tag >>> 3) {
|
|
3477
|
-
case 1:
|
|
3478
|
-
if (tag === 8) {
|
|
3479
|
-
message.path.push(reader.int32());
|
|
3480
|
-
continue;
|
|
3481
|
-
}
|
|
3482
|
-
if (tag === 10) {
|
|
3483
|
-
const end2 = reader.uint32() + reader.pos;
|
|
3484
|
-
while (reader.pos < end2) {
|
|
3485
|
-
message.path.push(reader.int32());
|
|
3486
|
-
}
|
|
3487
|
-
continue;
|
|
3488
|
-
}
|
|
3489
|
-
break;
|
|
3490
|
-
case 2:
|
|
3491
|
-
if (tag !== 18) {
|
|
3492
|
-
break;
|
|
3493
|
-
}
|
|
3494
|
-
message.sourceFile = reader.string();
|
|
3495
|
-
continue;
|
|
3496
|
-
case 3:
|
|
3497
|
-
if (tag !== 24) {
|
|
3498
|
-
break;
|
|
3499
|
-
}
|
|
3500
|
-
message.begin = reader.int32();
|
|
3501
|
-
continue;
|
|
3502
|
-
case 4:
|
|
3503
|
-
if (tag !== 32) {
|
|
3504
|
-
break;
|
|
3505
|
-
}
|
|
3506
|
-
message.end = reader.int32();
|
|
3507
|
-
continue;
|
|
3508
|
-
case 5:
|
|
3509
|
-
if (tag !== 40) {
|
|
3510
|
-
break;
|
|
3511
|
-
}
|
|
3512
|
-
message.semantic = reader.int32();
|
|
3513
|
-
continue;
|
|
3514
|
-
}
|
|
3515
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
3516
|
-
break;
|
|
3517
|
-
}
|
|
3518
|
-
reader.skipType(tag & 7);
|
|
3519
|
-
}
|
|
3520
|
-
return message;
|
|
3521
|
-
},
|
|
3522
|
-
fromJSON(object) {
|
|
3523
|
-
return {
|
|
3524
|
-
path: Array.isArray(object === null || object === void 0 ? void 0 : object.path) ? object.path.map((e) => Number(e)) : [],
|
|
3525
|
-
sourceFile: isSet(object.sourceFile) ? String(object.sourceFile) : "",
|
|
3526
|
-
begin: isSet(object.begin) ? Number(object.begin) : 0,
|
|
3527
|
-
end: isSet(object.end) ? Number(object.end) : 0,
|
|
3528
|
-
semantic: isSet(object.semantic) ? generatedCodeInfo_Annotation_SemanticFromJSON(object.semantic) : 0,
|
|
3529
|
-
};
|
|
3530
|
-
},
|
|
3531
|
-
toJSON(message) {
|
|
3532
|
-
const obj = {};
|
|
3533
|
-
if (message.path) {
|
|
3534
|
-
obj.path = message.path.map((e) => Math.round(e));
|
|
3535
|
-
}
|
|
3536
|
-
else {
|
|
3537
|
-
obj.path = [];
|
|
3538
|
-
}
|
|
3539
|
-
message.sourceFile !== undefined && (obj.sourceFile = message.sourceFile);
|
|
3540
|
-
message.begin !== undefined && (obj.begin = Math.round(message.begin));
|
|
3541
|
-
message.end !== undefined && (obj.end = Math.round(message.end));
|
|
3542
|
-
message.semantic !== undefined && (obj.semantic = generatedCodeInfo_Annotation_SemanticToJSON(message.semantic));
|
|
3543
|
-
return obj;
|
|
3544
|
-
},
|
|
3545
|
-
create(base) {
|
|
3546
|
-
return exports.GeneratedCodeInfo_Annotation.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
3547
|
-
},
|
|
3548
|
-
fromPartial(object) {
|
|
3549
|
-
var _a, _b, _c, _d, _e;
|
|
3550
|
-
const message = createBaseGeneratedCodeInfo_Annotation();
|
|
3551
|
-
message.path = ((_a = object.path) === null || _a === void 0 ? void 0 : _a.map((e) => e)) || [];
|
|
3552
|
-
message.sourceFile = (_b = object.sourceFile) !== null && _b !== void 0 ? _b : "";
|
|
3553
|
-
message.begin = (_c = object.begin) !== null && _c !== void 0 ? _c : 0;
|
|
3554
|
-
message.end = (_d = object.end) !== null && _d !== void 0 ? _d : 0;
|
|
3555
|
-
message.semantic = (_e = object.semantic) !== null && _e !== void 0 ? _e : 0;
|
|
3556
|
-
return message;
|
|
3557
|
-
},
|
|
3558
|
-
};
|
|
3559
|
-
var tsProtoGlobalThis = (() => {
|
|
3560
|
-
if (typeof globalThis !== "undefined") {
|
|
3561
|
-
return globalThis;
|
|
3562
|
-
}
|
|
3563
|
-
if (typeof self !== "undefined") {
|
|
3564
|
-
return self;
|
|
3565
|
-
}
|
|
3566
|
-
if (typeof window !== "undefined") {
|
|
3567
|
-
return window;
|
|
3568
|
-
}
|
|
3569
|
-
if (typeof global !== "undefined") {
|
|
3570
|
-
return global;
|
|
3571
|
-
}
|
|
3572
|
-
throw "Unable to locate global object";
|
|
3573
|
-
})();
|
|
3574
|
-
function bytesFromBase64(b64) {
|
|
3575
|
-
if (tsProtoGlobalThis.Buffer) {
|
|
3576
|
-
return Uint8Array.from(tsProtoGlobalThis.Buffer.from(b64, "base64"));
|
|
3577
|
-
}
|
|
3578
|
-
else {
|
|
3579
|
-
const bin = tsProtoGlobalThis.atob(b64);
|
|
3580
|
-
const arr = new Uint8Array(bin.length);
|
|
3581
|
-
for (let i = 0; i < bin.length; ++i) {
|
|
3582
|
-
arr[i] = bin.charCodeAt(i);
|
|
3583
|
-
}
|
|
3584
|
-
return arr;
|
|
3585
|
-
}
|
|
3586
|
-
}
|
|
3587
|
-
function base64FromBytes(arr) {
|
|
3588
|
-
if (tsProtoGlobalThis.Buffer) {
|
|
3589
|
-
return tsProtoGlobalThis.Buffer.from(arr).toString("base64");
|
|
3590
|
-
}
|
|
3591
|
-
else {
|
|
3592
|
-
const bin = [];
|
|
3593
|
-
arr.forEach((byte) => {
|
|
3594
|
-
bin.push(String.fromCharCode(byte));
|
|
3595
|
-
});
|
|
3596
|
-
return tsProtoGlobalThis.btoa(bin.join(""));
|
|
3597
|
-
}
|
|
3598
|
-
}
|
|
3599
|
-
function longToNumber(long) {
|
|
3600
|
-
if (long.gt(Number.MAX_SAFE_INTEGER)) {
|
|
3601
|
-
throw new tsProtoGlobalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
|
|
3602
|
-
}
|
|
3603
|
-
return long.toNumber();
|
|
3604
|
-
}
|
|
3605
|
-
if (minimal_1.default.util.Long !== long_1.default) {
|
|
3606
|
-
minimal_1.default.util.Long = long_1.default;
|
|
3607
|
-
minimal_1.default.configure();
|
|
3608
|
-
}
|
|
3609
|
-
function isSet(value) {
|
|
3610
|
-
return value !== null && value !== undefined;
|
|
3611
|
-
}
|
|
3612
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcHJvdG8tbW9kZWxzL2dvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxvQkFBb0I7QUFDcEIsZ0RBQXdCO0FBQ3hCLGlFQUFxQztBQUV4QixRQUFBLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQztBQXVLakQsSUFBWSx5QkF5Q1g7QUF6Q0QsV0FBWSx5QkFBeUI7SUFDbkM7OztPQUdHO0lBQ0gsdUZBQWUsQ0FBQTtJQUNmLHFGQUFjLENBQUE7SUFDZDs7O09BR0c7SUFDSCxxRkFBYyxDQUFBO0lBQ2QsdUZBQWUsQ0FBQTtJQUNmOzs7T0FHRztJQUNILHFGQUFjLENBQUE7SUFDZCx5RkFBZ0IsQ0FBQTtJQUNoQix5RkFBZ0IsQ0FBQTtJQUNoQixtRkFBYSxDQUFBO0lBQ2IsdUZBQWUsQ0FBQTtJQUNmOzs7OztPQUtHO0lBQ0gsc0ZBQWUsQ0FBQTtJQUNmLGlEQUFpRDtJQUNqRCwwRkFBaUIsQ0FBQTtJQUNqQixxQ0FBcUM7SUFDckMsc0ZBQWUsQ0FBQTtJQUNmLHdGQUFnQixDQUFBO0lBQ2hCLG9GQUFjLENBQUE7SUFDZCw0RkFBa0IsQ0FBQTtJQUNsQiw0RkFBa0IsQ0FBQTtJQUNsQiwwQ0FBMEM7SUFDMUMsd0ZBQWdCLENBQUE7SUFDaEIsMENBQTBDO0lBQzFDLHdGQUFnQixDQUFBO0FBQ2xCLENBQUMsRUF6Q1cseUJBQXlCLEdBQXpCLGlDQUF5QixLQUF6QixpQ0FBeUIsUUF5Q3BDO0FBRUQsU0FBZ0IsaUNBQWlDLENBQUMsTUFBVztJQUMzRCxRQUFRLE1BQU0sRUFBRTtRQUNkLEtBQUssQ0FBQyxDQUFDO1FBQ1AsS0FBSyxhQUFhO1lBQ2hCLE9BQU8seUJBQXlCLENBQUMsV0FBVyxDQUFDO1FBQy9DLEtBQUssQ0FBQyxDQUFDO1FBQ1AsS0FBSyxZQUFZO1lBQ2YsT0FBTyx5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QUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hDO1FBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN4QixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDekM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN4QztRQUNELElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDdEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLEVBQUUsRUFBRTtZQUMzQixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDNUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssRUFBRSxFQUFFO1lBQzNCLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM1QztRQUNELElBQUksT0FBTyxDQUFDLFlBQVksS0FBSyxFQUFFLEVBQUU7WUFDL0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLENBQUMsRUFBRTtZQUM1QixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENB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QU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RCxLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsa0NBQWtDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pGLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQ0FBaUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0UsUUFBUSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDL0QsUUFBUSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDL0QsWUFBWSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDM0UsVUFBVSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEUsUUFBUSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDL0QsT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFZLENBQUMsUUFBUSxDQUFD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SUFBSSxLQUFLLEtBQUssU0FBUyxDQUFDO0FBQy9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IExvbmcgZnJvbSBcImxvbmdcIjtcbmltcG9ydCBfbTAgZnJvbSBcInByb3RvYnVmanMvbWluaW1hbFwiO1xuXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gXCJnb29nbGUucHJvdG9idWZcIjtcblxuLyoqXG4gKiBUaGUgcHJvdG9jb2wgY29tcGlsZXIgY2FuIG91dHB1dCBhIEZpbGVEZXNjcmlwdG9yU2V0IGNvbnRhaW5pbmcgdGhlIC5wcm90b1xuICogZmlsZXMgaXQgcGFyc2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVEZXNjcmlwdG9yU2V0IHtcbiAgZmlsZTogRmlsZURlc2NyaXB0b3JQcm90b1tdO1xufVxuXG4vKiogRGVzY3JpYmVzIGEgY29tcGxldGUgLnByb3RvIGZpbGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVEZXNjcmlwdG9yUHJvdG8ge1xuICAvKiogZmlsZSBuYW1lLCByZWxhdGl2ZSB0byByb290IG9mIHNvdXJjZSB0cmVlICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIGUuZy4gXCJmb29cIiwgXCJmb28uYmFyXCIsIGV0Yy4gKi9cbiAgcGFja2FnZTogc3RyaW5nO1xuICAvKiogTmFtZXMgb2YgZmlsZXMgaW1wb3J0ZWQgYnkgdGhpcyBmaWxlLiAqL1xuICBkZXBlbmRlbmN5OiBzdHJpbmdbXTtcbiAgLyoqIEluZGV4ZXMgb2YgdGhlIHB1YmxpYyBpbXBvcnRlZCBmaWxlcyBpbiB0aGUgZGVwZW5kZW5jeSBsaXN0IGFib3ZlLiAqL1xuICBwdWJsaWNEZXBlbmRlbmN5OiBudW1iZXJbXTtcbiAgLyoqXG4gICAqIEluZGV4ZXMgb2YgdGhlIHdlYWsgaW1wb3J0ZWQgZmlsZXMgaW4gdGhlIGRlcGVuZGVuY3kgbGlzdC5cbiAgICogRm9yIEdvb2dsZS1pbnRlcm5hbCBtaWdyYXRpb24gb25seS4gRG8gbm90IHVzZS5cbiAgICovXG4gIHdlYWtEZXBlbmRlbmN5OiBudW1iZXJbXTtcbiAgLyoqIEFsbCB0b3AtbGV2ZWwgZGVmaW5pdGlvbnMgaW4gdGhpcyBmaWxlLiAqL1xuICBtZXNzYWdlVHlwZTogRGVzY3JpcHRvclByb3RvW107XG4gIGVudW1UeXBlOiBFbnVtRGVzY3JpcHRvclByb3RvW107XG4gIHNlcnZpY2U6IFNlcnZpY2VEZXNjcmlwdG9yUHJvdG9bXTtcbiAgZXh0ZW5zaW9uOiBGaWVsZERlc2NyaXB0b3JQcm90b1tdO1xuICBvcHRpb25zOlxuICAgIHwgRmlsZU9wdGlvbnNcbiAgICB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFRoaXMgZmllbGQgY29udGFpbnMgb3B0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlLlxuICAgKiBZb3UgbWF5IHNhZmVseSByZW1vdmUgdGhpcyBlbnRpcmUgZmllbGQgd2l0aG91dCBoYXJtaW5nIHJ1bnRpbWVcbiAgICogZnVuY3Rpb25hbGl0eSBvZiB0aGUgZGVzY3JpcHRvcnMgLS0gdGhlIGluZm9ybWF0aW9uIGlzIG5lZWRlZCBvbmx5IGJ5XG4gICAqIGRldmVsb3BtZW50IHRvb2xzLlxuICAgKi9cbiAgc291cmNlQ29kZUluZm86XG4gICAgfCBTb3VyY2VDb2RlSW5mb1xuICAgIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogVGhlIHN5bnRheCBvZiB0aGUgcHJvdG8gZmlsZS5cbiAgICogVGhlIHN1cHBvcnRlZCB2YWx1ZXMgYXJlIFwicHJvdG8yXCIsIFwicHJvdG8zXCIsIGFuZCBcImVkaXRpb25zXCIuXG4gICAqXG4gICAqIElmIGBlZGl0aW9uYCBpcyBwcmVzZW50LCB0aGlzIHZhbHVlIG11c3QgYmUgXCJlZGl0aW9uc1wiLlxuICAgKi9cbiAgc3ludGF4OiBzdHJpbmc7XG4gIC8qKiBUaGUgZWRpdGlvbiBvZiB0aGUgcHJvdG8gZmlsZSwgd2hpY2ggaXMgYW4gb3BhcXVlIHN0cmluZy4gKi9cbiAgZWRpdGlvbjogc3RyaW5nO1xufVxuXG4vKiogRGVzY3JpYmVzIGEgbWVzc2FnZSB0eXBlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXNjcmlwdG9yUHJvdG8ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGZpZWxkOiBGaWVsZERlc2NyaXB0b3JQcm90b1tdO1xuICBleHRlbnNpb246IEZpZWxkRGVzY3JpcHRvclByb3RvW107XG4gIG5lc3RlZFR5cGU6IERlc2NyaXB0b3JQcm90b1tdO1xuICBlbnVtVHlwZTogRW51bURlc2NyaXB0b3JQcm90b1tdO1xuICBleHRlbnNpb25SYW5nZTogRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlW107XG4gIG9uZW9mRGVjbDogT25lb2ZEZXNjcmlwdG9yUHJvdG9bXTtcbiAgb3B0aW9uczogTWVzc2FnZU9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gIHJlc2VydmVkUmFuZ2U6IERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlW107XG4gIC8qKlxuICAgKiBSZXNlcnZlZCBmaWVsZCBuYW1lcywgd2hpY2ggbWF5IG5vdCBiZSB1c2VkIGJ5IGZpZWxkcyBpbiB0aGUgc2FtZSBtZXNzYWdlLlxuICAgKiBBIGdpdmVuIG5hbWUgbWF5IG9ubHkgYmUgcmVzZXJ2ZWQgb25jZS5cbiAgICovXG4gIHJlc2VydmVkTmFtZTogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlIHtcbiAgLyoqIEluY2x1c2l2ZS4gKi9cbiAgc3RhcnQ6IG51bWJlcjtcbiAgLyoqIEV4Y2x1c2l2ZS4gKi9cbiAgZW5kOiBudW1iZXI7XG4gIG9wdGlvbnM6IEV4dGVuc2lvblJhbmdlT3B0aW9ucyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSYW5nZSBvZiByZXNlcnZlZCB0YWcgbnVtYmVycy4gUmVzZXJ2ZWQgdGFnIG51bWJlcnMgbWF5IG5vdCBiZSB1c2VkIGJ5XG4gKiBmaWVsZHMgb3IgZXh0ZW5zaW9uIHJhbmdlcyBpbiB0aGUgc2FtZSBtZXNzYWdlLiBSZXNlcnZlZCByYW5nZXMgbWF5XG4gKiBub3Qgb3ZlcmxhcC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZSB7XG4gIC8qKiBJbmNsdXNpdmUuICovXG4gIHN0YXJ0OiBudW1iZXI7XG4gIC8qKiBFeGNsdXNpdmUuICovXG4gIGVuZDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuc2lvblJhbmdlT3B0aW9ucyB7XG4gIC8qKiBUaGUgcGFyc2VyIHN0b3JlcyBvcHRpb25zIGl0IGRvZXNuJ3QgcmVjb2duaXplIGhlcmUuIFNlZSBhYm92ZS4gKi9cbiAgdW5pbnRlcnByZXRlZE9wdGlvbjogVW5pbnRlcnByZXRlZE9wdGlvbltdO1xufVxuXG4vKiogRGVzY3JpYmVzIGEgZmllbGQgd2l0aGluIGEgbWVzc2FnZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmllbGREZXNjcmlwdG9yUHJvdG8ge1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bWJlcjogbnVtYmVyO1xuICBsYWJlbDogRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWw7XG4gIC8qKlxuICAgKiBJZiB0eXBlX25hbWUgaXMgc2V0LCB0aGlzIG5lZWQgbm90IGJlIHNldC4gIElmIGJvdGggdGhpcyBhbmQgdHlwZV9uYW1lXG4gICAqIGFyZSBzZXQsIHRoaXMgbXVzdCBiZSBvbmUgb2YgVFlQRV9FTlVNLCBUWVBFX01FU1NBR0Ugb3IgVFlQRV9HUk9VUC5cbiAgICovXG4gIHR5cGU6IEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGU7XG4gIC8qKlxuICAgKiBGb3IgbWVzc2FnZSBhbmQgZW51bSB0eXBlcywgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgdHlwZS4gIElmIHRoZSBuYW1lXG4gICAqIHN0YXJ0cyB3aXRoIGEgJy4nLCBpdCBpcyBmdWxseS1xdWFsaWZpZWQuICBPdGhlcndpc2UsIEMrKy1saWtlIHNjb3BpbmdcbiAgICogcnVsZXMgYXJlIHVzZWQgdG8gZmluZCB0aGUgdHlwZSAoaS5lLiBmaXJzdCB0aGUgbmVzdGVkIHR5cGVzIHdpdGhpbiB0aGlzXG4gICAqIG1lc3NhZ2UgYXJlIHNlYXJjaGVkLCB0aGVuIHdpdGhpbiB0aGUgcGFyZW50LCBvbiB1cCB0byB0aGUgcm9vdFxuICAgKiBuYW1lc3BhY2UpLlxuICAgKi9cbiAgdHlwZU5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIEZvciBleHRlbnNpb25zLCB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSB0eXBlIGJlaW5nIGV4dGVuZGVkLiAgSXQgaXNcbiAgICogcmVzb2x2ZWQgaW4gdGhlIHNhbWUgbWFubmVyIGFzIHR5cGVfbmFtZS5cbiAgICovXG4gIGV4dGVuZGVlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGb3IgbnVtZXJpYyB0eXBlcywgY29udGFpbnMgdGhlIG9yaWdpbmFsIHRleHQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlLlxuICAgKiBGb3IgYm9vbGVhbnMsIFwidHJ1ZVwiIG9yIFwiZmFsc2VcIi5cbiAgICogRm9yIHN0cmluZ3MsIGNvbnRhaW5zIHRoZSBkZWZhdWx0IHRleHQgY29udGVudHMgKG5vdCBlc2NhcGVkIGluIGFueSB3YXkpLlxuICAgKiBGb3IgYnl0ZXMsIGNvbnRhaW5zIHRoZSBDIGVzY2FwZWQgdmFsdWUuICBBbGwgYnl0ZXMgPj0gMTI4IGFyZSBlc2NhcGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJZiBzZXQsIGdpdmVzIHRoZSBpbmRleCBvZiBhIG9uZW9mIGluIHRoZSBjb250YWluaW5nIHR5cGUncyBvbmVvZl9kZWNsXG4gICAqIGxpc3QuICBUaGlzIGZpZWxkIGlzIGEgbWVtYmVyIG9mIHRoYXQgb25lb2YuXG4gICAqL1xuICBvbmVvZkluZGV4OiBudW1iZXI7XG4gIC8qKlxuICAgKiBKU09OIG5hbWUgb2YgdGhpcyBmaWVsZC4gVGhlIHZhbHVlIGlzIHNldCBieSBwcm90b2NvbCBjb21waWxlci4gSWYgdGhlXG4gICAqIHVzZXIgaGFzIHNldCBhIFwianNvbl9uYW1lXCIgb3B0aW9uIG9uIHRoaXMgZmllbGQsIHRoYXQgb3B0aW9uJ3MgdmFsdWVcbiAgICogd2lsbCBiZSB1c2VkLiBPdGhlcndpc2UsIGl0J3MgZGVkdWNlZCBmcm9tIHRoZSBmaWVsZCdzIG5hbWUgYnkgY29udmVydGluZ1xuICAgKiBpdCB0byBjYW1lbENhc2UuXG4gICAqL1xuICBqc29uTmFtZTogc3RyaW5nO1xuICBvcHRpb25zOlxuICAgIHwgRmllbGRPcHRpb25zXG4gICAgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBJZiB0cnVlLCB0aGlzIGlzIGEgcHJvdG8zIFwib3B0aW9uYWxcIi4gV2hlbiBhIHByb3RvMyBmaWVsZCBpcyBvcHRpb25hbCwgaXRcbiAgICogdHJhY2tzIHByZXNlbmNlIHJlZ2FyZGxlc3Mgb2YgZmllbGQgdHlwZS5cbiAgICpcbiAgICogV2hlbiBwcm90bzNfb3B0aW9uYWwgaXMgdHJ1ZSwgdGhpcyBmaWVsZCBtdXN0IGJlIGJlbG9uZyB0byBhIG9uZW9mIHRvXG4gICAqIHNpZ25hbCB0byBvbGQgcHJvdG8zIGNsaWVudHMgdGhhdCBwcmVzZW5jZSBpcyB0cmFja2VkIGZvciB0aGlzIGZpZWxkLiBUaGlzXG4gICAqIG9uZW9mIGlzIGtub3duIGFzIGEgXCJzeW50aGV0aWNcIiBvbmVvZiwgYW5kIHRoaXMgZmllbGQgbXVzdCBiZSBpdHMgc29sZVxuICAgKiBtZW1iZXIgKGVhY2ggcHJvdG8zIG9wdGlvbmFsIGZpZWxkIGdldHMgaXRzIG93biBzeW50aGV0aWMgb25lb2YpLiBTeW50aGV0aWNcbiAgICogb25lb2ZzIGV4aXN0IGluIHRoZSBkZXNjcmlwdG9yIG9ubHksIGFuZCBkbyBub3QgZ2VuZXJhdGUgYW55IEFQSS4gU3ludGhldGljXG4gICAqIG9uZW9mcyBtdXN0IGJlIG9yZGVyZWQgYWZ0ZXIgYWxsIFwicmVhbFwiIG9uZW9mcy5cbiAgICpcbiAgICogRm9yIG1lc3NhZ2UgZmllbGRzLCBwcm90bzNfb3B0aW9uYWwgZG9lc24ndCBjcmVhdGUgYW55IHNlbWFudGljIGNoYW5nZSxcbiAgICogc2luY2Ugbm9uLXJlcGVhdGVkIG1lc3NhZ2UgZmllbGRzIGFsd2F5cyB0cmFjayBwcmVzZW5jZS4gSG93ZXZlciBpdCBzdGlsbFxuICAgKiBpbmRpY2F0ZXMgdGhlIHNlbWFudGljIGRldGFpbCBvZiB3aGV0aGVyIHRoZSB1c2VyIHdyb3RlIFwib3B0aW9uYWxcIiBvciBub3QuXG4gICAqIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3Igcm91bmQtdHJpcHBpbmcgdGhlIC5wcm90byBmaWxlLiBGb3IgY29uc2lzdGVuY3kgd2VcbiAgICogZ2l2ZSBtZXNzYWdlIGZpZWxkcyBhIHN5bnRoZXRpYyBvbmVvZiBhbHNvLCBldmVuIHRob3VnaCBpdCBpcyBub3QgcmVxdWlyZWRcbiAgICogdG8gdHJhY2sgcHJlc2VuY2UuIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgYmVjYXVzZSB0aGUgcGFyc2VyIGNhbid0XG4gICAqIHRlbGwgaWYgYSBmaWVsZCBpcyBhIG1lc3NhZ2Ugb3IgYW4gZW51bSwgc28gaXQgbXVzdCBhbHdheXMgY3JlYXRlIGFcbiAgICogc3ludGhldGljIG9uZW9mLlxuICAgKlxuICAgKiBQcm90bzIgb3B0aW9uYWwgZmllbGRzIGRvIG5vdCBzZXQgdGhpcyBmbGFnLCBiZWNhdXNlIHRoZXkgYWxyZWFkeSBpbmRpY2F0ZVxuICAgKiBvcHRpb25hbCB3aXRoIGBMQUJFTF9PUFRJT05BTGAuXG4gICAqL1xuICBwcm90bzNPcHRpb25hbDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGVudW0gRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZSB7XG4gIC8qKlxuICAgKiBUWVBFX0RPVUJMRSAtIDAgaXMgcmVzZXJ2ZWQgZm9yIGVycm9ycy5cbiAgICogT3JkZXIgaXMgd2VpcmQgZm9yIGhpc3RvcmljYWwgcmVhc29ucy5cbiAgICovXG4gIFRZUEVfRE9VQkxFID0gMSxcbiAgVFlQRV9GTE9BVCA9IDIsXG4gIC8qKlxuICAgKiBUWVBFX0lOVDY0IC0gTm90IFppZ1phZyBlbmNvZGVkLiAgTmVnYXRpdmUgbnVtYmVycyB0YWtlIDEwIGJ5dGVzLiAgVXNlIFRZUEVfU0lOVDY0IGlmXG4gICAqIG5lZ2F0aXZlIHZhbHVlcyBhcmUgbGlrZWx5LlxuICAgKi9cbiAgVFlQRV9JTlQ2NCA9IDMsXG4gIFRZUEVfVUlOVDY0ID0gNCxcbiAgLyoqXG4gICAqIFRZUEVfSU5UMzIgLSBOb3QgWmlnWmFnIGVuY29kZWQuICBOZWdhdGl2ZSBudW1iZXJzIHRha2UgMTAgYnl0ZXMuICBVc2UgVFlQRV9TSU5UMzIgaWZcbiAgICogbmVnYXRpdmUgdmFsdWVzIGFyZSBsaWtlbHkuXG4gICAqL1xuICBUWVBFX0lOVDMyID0gNSxcbiAgVFlQRV9GSVhFRDY0ID0gNixcbiAgVFlQRV9GSVhFRDMyID0gNyxcbiAgVFlQRV9CT09MID0gOCxcbiAgVFlQRV9TVFJJTkcgPSA5LFxuICAvKipcbiAgICogVFlQRV9HUk9VUCAtIFRhZy1kZWxpbWl0ZWQgYWdncmVnYXRlLlxuICAgKiBHcm91cCB0eXBlIGlzIGRlcHJlY2F0ZWQgYW5kIG5vdCBzdXBwb3J0ZWQgaW4gcHJvdG8zLiBIb3dldmVyLCBQcm90bzNcbiAgICogaW1wbGVtZW50YXRpb25zIHNob3VsZCBzdGlsbCBiZSBhYmxlIHRvIHBhcnNlIHRoZSBncm91cCB3aXJlIGZvcm1hdCBhbmRcbiAgICogdHJlYXQgZ3JvdXAgZmllbGRzIGFzIHVua25vd24gZmllbGRzLlxuICAgKi9cbiAgVFlQRV9HUk9VUCA9IDEwLFxuICAvKiogVFlQRV9NRVNTQUdFIC0gTGVuZ3RoLWRlbGltaXRlZCBhZ2dyZWdhdGUuICovXG4gIFRZUEVfTUVTU0FHRSA9IDExLFxuICAvKiogVFlQRV9CWVRFUyAtIE5ldyBpbiB2ZXJzaW9uIDIuICovXG4gIFRZUEVfQllURVMgPSAxMixcbiAgVFlQRV9VSU5UMzIgPSAxMyxcbiAgVFlQRV9FTlVNID0gMTQsXG4gIFRZUEVfU0ZJWEVEMzIgPSAxNSxcbiAgVFlQRV9TRklYRUQ2NCA9IDE2LFxuICAvKiogVFlQRV9TSU5UMzIgLSBVc2VzIFppZ1phZyBlbmNvZGluZy4gKi9cbiAgVFlQRV9TSU5UMzIgPSAxNyxcbiAgLyoqIFRZUEVfU0lOVDY0IC0gVXNlcyBaaWdaYWcgZW5jb2RpbmcuICovXG4gIFRZUEVfU0lOVDY0ID0gMTgsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZERlc2NyaXB0b3JQcm90b19UeXBlRnJvbUpTT04ob2JqZWN0OiBhbnkpOiBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlIHtcbiAgc3dpdGNoIChvYmplY3QpIHtcbiAgICBjYXNlIDE6XG4gICAgY2FzZSBcIlRZUEVfRE9VQkxFXCI6XG4gICAgICByZXR1cm4gRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX0RPVUJMRTtcbiAgICBjYXNlIDI6XG4gICAgY2FzZSBcIlRZUEVfRkxPQVRcIjpcbiAgICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfRkxPQVQ7XG4gICAgY2FzZSAzOlxuICAgIGNhc2UgXCJUWVBFX0lOVDY0XCI6XG4gICAgICByZXR1cm4gRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX0lOVDY0O1xuICAgIGNhc2UgNDpcbiAgICBjYXNlIFwiVFlQRV9VSU5UNjRcIjpcbiAgICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfVUlOVDY0O1xuICAgIGNhc2UgNTpcbiAgICBjYXNlIFwiVFlQRV9JTlQzMlwiOlxuICAgICAgcmV0dXJuIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9JTlQzMjtcbiAgICBjYXNlIDY6XG4gICAgY2FzZSBcIlRZUEVfRklYRUQ2NFwiOlxuICAgICAgcmV0dXJuIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9GSVhFRDY0O1xuICAgIGNhc2UgNzpcbiAgICBjYXNlIFwiVFlQRV9GSVhFRDMyXCI6XG4gICAgICByZXR1cm4gRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX0ZJWEVEMzI7XG4gICAgY2FzZSA4OlxuICAgIGNhc2UgXCJUWVBFX0JPT0xcIjpcbiAgICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfQk9PTDtcbiAgICBjYXNlIDk6XG4gICAgY2FzZSBcIlRZUEVfU1RSSU5HXCI6XG4gICAgICByZXR1cm4gRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX1NUUklORztcbiAgICBjYXNlIDEwOlxuICAgIGNhc2UgXCJUWVBFX0dST1VQXCI6XG4gICAgICByZXR1cm4gRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX0dST1VQO1xuICAgIGNhc2UgMTE6XG4gICAgY2FzZSBcIlRZUEVfTUVTU0FHRVwiOlxuICAgICAgcmV0dXJuIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9NRVNTQUdFO1xuICAgIGNhc2UgMTI6XG4gICAgY2FzZSBcIlRZUEVfQllURVNcIjpcbiAgICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfQllURVM7XG4gICAgY2FzZSAxMzpcbiAgICBjYXNlIFwiVFlQRV9VSU5UMzJcIjpcbiAgICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfVUlOVDMyO1xuICAgIGNhc2UgMTQ6XG4gICAgY2FzZSBcIlRZUEVfRU5VTVwiOlxuICAgICAgcmV0dXJuIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9FTlVNO1xuICAgIGNhc2UgMTU6XG4gICAgY2FzZSBcIlRZUEVfU0ZJWEVEMzJcIjpcbiAgICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfU0ZJWEVEMzI7XG4gICAgY2FzZSAxNjpcbiAgICBjYXNlIFwiVFlQRV9TRklYRUQ2NFwiOlxuICAgICAgcmV0dXJuIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9TRklYRUQ2NDtcbiAgICBjYXNlIDE3OlxuICAgIGNhc2UgXCJUWVBFX1NJTlQzMlwiOlxuICAgICAgcmV0dXJuIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9TSU5UMzI7XG4gICAgY2FzZSAxODpcbiAgICBjYXNlIFwiVFlQRV9TSU5UNjRcIjpcbiAgICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfU0lOVDY0O1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgdHNQcm90b0dsb2JhbFRoaXMuRXJyb3IoXCJVbnJlY29nbml6ZWQgZW51bSB2YWx1ZSBcIiArIG9iamVjdCArIFwiIGZvciBlbnVtIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGVcIik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGVUb0pTT04ob2JqZWN0OiBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlKTogc3RyaW5nIHtcbiAgc3dpdGNoIChvYmplY3QpIHtcbiAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9ET1VCTEU6XG4gICAgICByZXR1cm4gXCJUWVBFX0RPVUJMRVwiO1xuICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX0ZMT0FUOlxuICAgICAgcmV0dXJuIFwiVFlQRV9GTE9BVFwiO1xuICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX0lOVDY0OlxuICAgICAgcmV0dXJuIFwiVFlQRV9JTlQ2NFwiO1xuICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX1VJTlQ2NDpcbiAgICAgIHJldHVybiBcIlRZUEVfVUlOVDY0XCI7XG4gICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfSU5UMzI6XG4gICAgICByZXR1cm4gXCJUWVBFX0lOVDMyXCI7XG4gICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfRklYRUQ2NDpcbiAgICAgIHJldHVybiBcIlRZUEVfRklYRUQ2NFwiO1xuICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX0ZJWEVEMzI6XG4gICAgICByZXR1cm4gXCJUWVBFX0ZJWEVEMzJcIjtcbiAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9CT09MOlxuICAgICAgcmV0dXJuIFwiVFlQRV9CT09MXCI7XG4gICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfU1RSSU5HOlxuICAgICAgcmV0dXJuIFwiVFlQRV9TVFJJTkdcIjtcbiAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9HUk9VUDpcbiAgICAgIHJldHVybiBcIlRZUEVfR1JPVVBcIjtcbiAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9NRVNTQUdFOlxuICAgICAgcmV0dXJuIFwiVFlQRV9NRVNTQUdFXCI7XG4gICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfQllURVM6XG4gICAgICByZXR1cm4gXCJUWVBFX0JZVEVTXCI7XG4gICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfVUlOVDMyOlxuICAgICAgcmV0dXJuIFwiVFlQRV9VSU5UMzJcIjtcbiAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9FTlVNOlxuICAgICAgcmV0dXJuIFwiVFlQRV9FTlVNXCI7XG4gICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfU0ZJWEVEMzI6XG4gICAgICByZXR1cm4gXCJUWVBFX1NGSVhFRDMyXCI7XG4gICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfU0ZJWEVENjQ6XG4gICAgICByZXR1cm4gXCJUWVBFX1NGSVhFRDY0XCI7XG4gICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfU0lOVDMyOlxuICAgICAgcmV0dXJuIFwiVFlQRV9TSU5UMzJcIjtcbiAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9TSU5UNjQ6XG4gICAgICByZXR1cm4gXCJUWVBFX1NJTlQ2NFwiO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgdHNQcm90b0dsb2JhbFRoaXMuRXJyb3IoXCJVbnJlY29nbml6ZWQgZW51bSB2YWx1ZSBcIiArIG9iamVjdCArIFwiIGZvciBlbnVtIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGVcIik7XG4gIH1cbn1cblxuZXhwb3J0IGVudW0gRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWwge1xuICAvKiogTEFCRUxfT1BUSU9OQUwgLSAwIGlzIHJlc2VydmVkIGZvciBlcnJvcnMgKi9cbiAgTEFCRUxfT1BUSU9OQUwgPSAxLFxuICBMQUJFTF9SRVFVSVJFRCA9IDIsXG4gIExBQkVMX1JFUEVBVEVEID0gMyxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsRnJvbUpTT04ob2JqZWN0OiBhbnkpOiBGaWVsZERlc2NyaXB0b3JQcm90b19MYWJlbCB7XG4gIHN3aXRjaCAob2JqZWN0KSB7XG4gICAgY2FzZSAxOlxuICAgIGNhc2UgXCJMQUJFTF9PUFRJT05BTFwiOlxuICAgICAgcmV0dXJuIEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsLkxBQkVMX09QVElPTkFMO1xuICAgIGNhc2UgMjpcbiAgICBjYXNlIFwiTEFCRUxfUkVRVUlSRURcIjpcbiAgICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90b19MYWJlbC5MQUJFTF9SRVFVSVJFRDtcbiAgICBjYXNlIDM6XG4gICAgY2FzZSBcIkxBQkVMX1JFUEVBVEVEXCI6XG4gICAgICByZXR1cm4gRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWwuTEFCRUxfUkVQRUFURUQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyB0c1Byb3RvR2xvYmFsVGhpcy5FcnJvcihcIlVucmVjb2duaXplZCBlbnVtIHZhbHVlIFwiICsgb2JqZWN0ICsgXCIgZm9yIGVudW0gRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWxcIik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsVG9KU09OKG9iamVjdDogRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWwpOiBzdHJpbmcge1xuICBzd2l0Y2ggKG9iamVjdCkge1xuICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWwuTEFCRUxfT1BUSU9OQUw6XG4gICAgICByZXR1cm4gXCJMQUJFTF9PUFRJT05BTFwiO1xuICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWwuTEFCRUxfUkVRVUlSRUQ6XG4gICAgICByZXR1cm4gXCJMQUJFTF9SRVFVSVJFRFwiO1xuICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWwuTEFCRUxfUkVQRUFURUQ6XG4gICAgICByZXR1cm4gXCJMQUJFTF9SRVBFQVRFRFwiO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgdHNQcm90b0dsb2JhbFRoaXMuRXJyb3IoXCJVbnJlY29nbml6ZWQgZW51bSB2YWx1ZSBcIiArIG9iamVjdCArIFwiIGZvciBlbnVtIEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsXCIpO1xuICB9XG59XG5cbi8qKiBEZXNjcmliZXMgYSBvbmVvZi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT25lb2ZEZXNjcmlwdG9yUHJvdG8ge1xuICBuYW1lOiBzdHJpbmc7XG4gIG9wdGlvbnM6IE9uZW9mT3B0aW9ucyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqIERlc2NyaWJlcyBhbiBlbnVtIHR5cGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudW1EZXNjcmlwdG9yUHJvdG8ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHZhbHVlOiBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG9bXTtcbiAgb3B0aW9uczpcbiAgICB8IEVudW1PcHRpb25zXG4gICAgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBSYW5nZSBvZiByZXNlcnZlZCBudW1lcmljIHZhbHVlcy4gUmVzZXJ2ZWQgbnVtZXJpYyB2YWx1ZXMgbWF5IG5vdCBiZSB1c2VkXG4gICAqIGJ5IGVudW0gdmFsdWVzIGluIHRoZSBzYW1lIGVudW0gZGVjbGFyYXRpb24uIFJlc2VydmVkIHJhbmdlcyBtYXkgbm90XG4gICAqIG92ZXJsYXAuXG4gICAqL1xuICByZXNlcnZlZFJhbmdlOiBFbnVtRGVzY3JpcHRvclByb3RvX0VudW1SZXNlcnZlZFJhbmdlW107XG4gIC8qKlxuICAgKiBSZXNlcnZlZCBlbnVtIHZhbHVlIG5hbWVzLCB3aGljaCBtYXkgbm90IGJlIHJldXNlZC4gQSBnaXZlbiBuYW1lIG1heSBvbmx5XG4gICAqIGJlIHJlc2VydmVkIG9uY2UuXG4gICAqL1xuICByZXNlcnZlZE5hbWU6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFJhbmdlIG9mIHJlc2VydmVkIG51bWVyaWMgdmFsdWVzLiBSZXNlcnZlZCB2YWx1ZXMgbWF5IG5vdCBiZSB1c2VkIGJ5XG4gKiBlbnRyaWVzIGluIHRoZSBzYW1lIGVudW0uIFJlc2VydmVkIHJhbmdlcyBtYXkgbm90IG92ZXJsYXAuXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgaXMgZGlzdGluY3QgZnJvbSBEZXNjcmlwdG9yUHJvdG8uUmVzZXJ2ZWRSYW5nZSBpbiB0aGF0IGl0XG4gKiBpcyBpbmNsdXNpdmUgc3VjaCB0aGF0IGl0IGNhbiBhcHByb3ByaWF0ZWx5IHJlcHJlc2VudCB0aGUgZW50aXJlIGludDMyXG4gKiBkb21haW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZSB7XG4gIC8qKiBJbmNsdXNpdmUuICovXG4gIHN0YXJ0OiBudW1iZXI7XG4gIC8qKiBJbmNsdXNpdmUuICovXG4gIGVuZDogbnVtYmVyO1xufVxuXG4vKiogRGVzY3JpYmVzIGEgdmFsdWUgd2l0aGluIGFuIGVudW0uICovXG5leHBvcnQgaW50ZXJmYWNlIEVudW1WYWx1ZURlc2NyaXB0b3JQcm90byB7XG4gIG5hbWU6IHN0cmluZztcbiAgbnVtYmVyOiBudW1iZXI7XG4gIG9wdGlvbnM6IEVudW1WYWx1ZU9wdGlvbnMgfCB1bmRlZmluZWQ7XG59XG5cbi8qKiBEZXNjcmliZXMgYSBzZXJ2aWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlRGVzY3JpcHRvclByb3RvIHtcbiAgbmFtZTogc3RyaW5nO1xuICBtZXRob2Q6IE1ldGhvZERlc2NyaXB0b3JQcm90b1tdO1xuICBvcHRpb25zOiBTZXJ2aWNlT3B0aW9ucyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqIERlc2NyaWJlcyBhIG1ldGhvZCBvZiBhIHNlcnZpY2UuICovXG5leHBvcnQgaW50ZXJmYWNlIE1ldGhvZERlc2NyaXB0b3JQcm90byB7XG4gIG5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIElucHV0IGFuZCBvdXRwdXQgdHlwZSBuYW1lcy4gIFRoZXNlIGFyZSByZXNvbHZlZCBpbiB0aGUgc2FtZSB3YXkgYXNcbiAgICogRmllbGREZXNjcmlwdG9yUHJvdG8udHlwZV9uYW1lLCBidXQgbXVzdCByZWZlciB0byBhIG1lc3NhZ2UgdHlwZS5cbiAgICovXG4gIGlucHV0VHlwZTogc3RyaW5nO1xuICBvdXRwdXRUeXBlOiBzdHJpbmc7XG4gIG9wdGlvbnM6XG4gICAgfCBNZXRob2RPcHRpb25zXG4gICAgfCB1bmRlZmluZWQ7XG4gIC8qKiBJZGVudGlmaWVzIGlmIGNsaWVudCBzdHJlYW1zIG11bHRpcGxlIGNsaWVudCBtZXNzYWdlcyAqL1xuICBjbGllbnRTdHJlYW1pbmc6IGJvb2xlYW47XG4gIC8qKiBJZGVudGlmaWVzIGlmIHNlcnZlciBzdHJlYW1zIG11bHRpcGxlIHNlcnZlciBtZXNzYWdlcyAqL1xuICBzZXJ2ZXJTdHJlYW1pbmc6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZU9wdGlvbnMge1xuICAvKipcbiAgICogU2V0cyB0aGUgSmF2YSBwYWNrYWdlIHdoZXJlIGNsYXNzZXMgZ2VuZXJhdGVkIGZyb20gdGhpcyAucHJvdG8gd2lsbCBiZVxuICAgKiBwbGFjZWQuICBCeSBkZWZhdWx0LCB0aGUgcHJvdG8gcGFja2FnZSBpcyB1c2VkLCBidXQgdGhpcyBpcyBvZnRlblxuICAgKiBpbmFwcHJvcHJpYXRlIGJlY2F1c2UgcHJvdG8gcGFja2FnZXMgZG8gbm90IG5vcm1hbGx5IHN0YXJ0IHdpdGggYmFja3dhcmRzXG4gICAqIGRvbWFpbiBuYW1lcy5cbiAgICovXG4gIGphdmFQYWNrYWdlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDb250cm9scyB0aGUgbmFtZSBvZiB0aGUgd3JhcHBlciBKYXZhIGNsYXNzIGdlbmVyYXRlZCBmb3IgdGhlIC5wcm90byBmaWxlLlxuICAgKiBUaGF0IGNsYXNzIHdpbGwgYWx3YXlzIGNvbnRhaW4gdGhlIC5wcm90byBmaWxlJ3MgZ2V0RGVzY3JpcHRvcigpIG1ldGhvZCBhc1xuICAgKiB3ZWxsIGFzIGFueSB0b3AtbGV2ZWwgZXh0ZW5zaW9ucyBkZWZpbmVkIGluIHRoZSAucHJvdG8gZmlsZS5cbiAgICogSWYgamF2YV9tdWx0aXBsZV9maWxlcyBpcyBkaXNhYmxlZCwgdGhlbiBhbGwgdGhlIG90aGVyIGNsYXNzZXMgZnJvbSB0aGVcbiAgICogLnByb3RvIGZpbGUgd2lsbCBiZSBuZXN0ZWQgaW5zaWRlIHRoZSBzaW5nbGUgd3JhcHBlciBvdXRlciBjbGFzcy5cbiAgICovXG4gIGphdmFPdXRlckNsYXNzbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogSWYgZW5hYmxlZCwgdGhlbiB0aGUgSmF2YSBjb2RlIGdlbmVyYXRvciB3aWxsIGdlbmVyYXRlIGEgc2VwYXJhdGUgLmphdmFcbiAgICogZmlsZSBmb3IgZWFjaCB0b3AtbGV2ZWwgbWVzc2FnZSwgZW51bSwgYW5kIHNlcnZpY2UgZGVmaW5lZCBpbiB0aGUgLnByb3RvXG4gICAqIGZpbGUuICBUaHVzLCB0aGVzZSB0eXBlcyB3aWxsICpub3QqIGJlIG5lc3RlZCBpbnNpZGUgdGhlIHdyYXBwZXIgY2xhc3NcbiAgICogbmFtZWQgYnkgamF2YV9vdXRlcl9jbGFzc25hbWUuICBIb3dldmVyLCB0aGUgd3JhcHBlciBjbGFzcyB3aWxsIHN0aWxsIGJlXG4gICAqIGdlbmVyYXRlZCB0byBjb250YWluIHRoZSBmaWxlJ3MgZ2V0RGVzY3JpcHRvcigpIG1ldGhvZCBhcyB3ZWxsIGFzIGFueVxuICAgKiB0b3AtbGV2ZWwgZXh0ZW5zaW9ucyBkZWZpbmVkIGluIHRoZSBmaWxlLlxuICAgKi9cbiAgamF2YU11bHRpcGxlRmlsZXM6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGlzIG9wdGlvbiBkb2VzIG5vdGhpbmcuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBqYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoOiBib29sZWFuO1xuICAvKipcbiAgICogSWYgc2V0IHRydWUsIHRoZW4gdGhlIEphdmEyIGNvZGUgZ2VuZXJhdG9yIHdpbGwgZ2VuZXJhdGUgY29kZSB0aGF0XG4gICAqIHRocm93cyBhbiBleGNlcHRpb24gd2hlbmV2ZXIgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGFzc2lnbiBhIG5vbi1VVEYtOFxuICAgKiBieXRlIHNlcXVlbmNlIHRvIGEgc3RyaW5nIGZpZWxkLlxuICAgKiBNZXNzYWdlIHJlZmxlY3Rpb24gd2lsbCBkbyB0aGUgc2FtZS5cbiAgICogSG93ZXZlciwgYW4gZXh0ZW5zaW9uIGZpZWxkIHN0aWxsIGFjY2VwdHMgbm9uLVVURi04IGJ5dGUgc2VxdWVuY2VzLlxuICAgKiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHdoZW4gdXNlZCB3aXRoIHRoZSBsaXRlIHJ1bnRpbWUuXG4gICAqL1xuICBqYXZhU3RyaW5nQ2hlY2tVdGY4OiBib29sZWFuO1xuICBvcHRpbWl6ZUZvcjogRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlO1xuICAvKipcbiAgICogU2V0cyB0aGUgR28gcGFja2FnZSB3aGVyZSBzdHJ1Y3RzIGdlbmVyYXRlZCBmcm9tIHRoaXMgLnByb3RvIHdpbGwgYmVcbiAgICogcGxhY2VkLiBJZiBvbWl0dGVkLCB0aGUgR28gcGFja2FnZSB3aWxsIGJlIGRlcml2ZWQgZnJvbSB0aGUgZm9sbG93aW5nOlxuICAgKiAgIC0gVGhlIGJhc2VuYW1lIG9mIHRoZSBwYWNrYWdlIGltcG9ydCBwYXRoLCBpZiBwcm92aWRlZC5cbiAgICogICAtIE90aGVyd2lzZSwgdGhlIHBhY2thZ2Ugc3RhdGVtZW50IGluIHRoZSAucHJvdG8gZmlsZSwgaWYgcHJlc2VudC5cbiAgICogICAtIE90aGVyd2lzZSwgdGhlIGJhc2VuYW1lIG9mIHRoZSAucHJvdG8gZmlsZSwgd2l0aG91dCBleHRlbnNpb24uXG4gICAqL1xuICBnb1BhY2thZ2U6IHN0cmluZztcbiAgLyoqXG4gICAqIFNob3VsZCBnZW5lcmljIHNlcnZpY2VzIGJlIGdlbmVyYXRlZCBpbiBlYWNoIGxhbmd1YWdlPyAgXCJHZW5lcmljXCIgc2VydmljZXNcbiAgICogYXJlIG5vdCBzcGVjaWZpYyB0byBhbnkgcGFydGljdWxhciBSUEMgc3lzdGVtLiAgVGhleSBhcmUgZ2VuZXJhdGVkIGJ5IHRoZVxuICAgKiBtYWluIGNvZGUgZ2VuZXJhdG9ycyBpbiBlYWNoIGxhbmd1YWdlICh3aXRob3V0IGFkZGl0aW9uYWwgcGx1Z2lucykuXG4gICAqIEdlbmVyaWMgc2VydmljZXMgd2VyZSB0aGUgb25seSBraW5kIG9mIHNlcnZpY2UgZ2VuZXJhdGlvbiBzdXBwb3J0ZWQgYnlcbiAgICogZWFybHkgdmVyc2lvbnMgb2YgZ29vZ2xlLnByb3RvYnVmLlxuICAgKlxuICAgKiBHZW5lcmljIHNlcnZpY2VzIGFyZSBub3cgY29uc2lkZXJlZCBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHVzaW5nIHBsdWdpbnNcbiAgICogdGhhdCBnZW5lcmF0ZSBjb2RlIHNwZWNpZmljIHRvIHlvdXIgcGFydGljdWxhciBSUEMgc3lzdGVtLiAgVGhlcmVmb3JlLFxuICAgKiB0aGVzZSBkZWZhdWx0IHRvIGZhbHNlLiAgT2xkIGNvZGUgd2hpY2ggZGVwZW5kcyBvbiBnZW5lcmljIHNlcnZpY2VzIHNob3VsZFxuICAgKiBleHBsaWNpdGx5IHNldCB0aGVtIHRvIHRydWUuXG4gICAqL1xuICBjY0dlbmVyaWNTZXJ2aWNlczogYm9vbGVhbjtcbiAgamF2YUdlbmVyaWNTZXJ2aWNlczogYm9vbGVhbjtcbiAgcHlHZW5lcmljU2VydmljZXM6IGJvb2xlYW47XG4gIHBocEdlbmVyaWNTZXJ2aWNlczogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElzIHRoaXMgZmlsZSBkZXByZWNhdGVkP1xuICAgKiBEZXBlbmRpbmcgb24gdGhlIHRhcmdldCBwbGF0Zm9ybSwgdGhpcyBjYW4gZW1pdCBEZXByZWNhdGVkIGFubm90YXRpb25zXG4gICAqIGZvciBldmVyeXRoaW5nIGluIHRoZSBmaWxlLCBvciBpdCB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZDsgaW4gdGhlIHZlcnlcbiAgICogbGVhc3QsIHRoaXMgaXMgYSBmb3JtYWxpemF0aW9uIGZvciBkZXByZWNhdGluZyBmaWxlcy5cbiAgICovXG4gIGRlcHJlY2F0ZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBFbmFibGVzIHRoZSB1c2Ugb2YgYXJlbmFzIGZvciB0aGUgcHJvdG8gbWVzc2FnZXMgaW4gdGhpcyBmaWxlLiBUaGlzIGFwcGxpZXNcbiAgICogb25seSB0byBnZW5lcmF0ZWQgY2xhc3NlcyBmb3IgQysrLlxuICAgKi9cbiAgY2NFbmFibGVBcmVuYXM6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBvYmplY3RpdmUgYyBjbGFzcyBwcmVmaXggd2hpY2ggaXMgcHJlcGVuZGVkIHRvIGFsbCBvYmplY3RpdmUgY1xuICAgKiBnZW5lcmF0ZWQgY2xhc3NlcyBmcm9tIHRoaXMgLnByb3RvLiBUaGVyZSBpcyBubyBkZWZhdWx0LlxuICAgKi9cbiAgb2JqY0NsYXNzUHJlZml4OiBzdHJpbmc7XG4gIC8qKiBOYW1lc3BhY2UgZm9yIGdlbmVyYXRlZCBjbGFzc2VzOyBkZWZhdWx0cyB0byB0aGUgcGFja2FnZS4gKi9cbiAgY3NoYXJwTmFtZXNwYWNlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IFN3aWZ0IGdlbmVyYXRvcnMgd2lsbCB0YWtlIHRoZSBwcm90byBwYWNrYWdlIGFuZCBDYW1lbENhc2UgaXRcbiAgICogcmVwbGFjaW5nICcuJyB3aXRoIHVuZGVyc2NvcmUgYW5kIHVzZSB0aGF0IHRvIHByZWZpeCB0aGUgdHlwZXMvc3ltYm9sc1xuICAgKiBkZWZpbmVkLiBXaGVuIHRoaXMgb3B0aW9ucyBpcyBwcm92aWRlZCwgdGhleSB3aWxsIHVzZSB0aGlzIHZhbHVlIGluc3RlYWRcbiAgICogdG8gcHJlZml4IHRoZSB0eXBlcy9zeW1ib2xzIGRlZmluZWQuXG4gICAqL1xuICBzd2lmdFByZWZpeDogc3RyaW5nO1xuICAvKipcbiAgICogU2V0cyB0aGUgcGhwIGNsYXNzIHByZWZpeCB3aGljaCBpcyBwcmVwZW5kZWQgdG8gYWxsIHBocCBnZW5lcmF0ZWQgY2xhc3Nlc1xuICAgKiBmcm9tIHRoaXMgLnByb3RvLiBEZWZhdWx0IGlzIGVtcHR5LlxuICAgKi9cbiAgcGhwQ2xhc3NQcmVmaXg6IHN0cmluZztcbiAgLyoqXG4gICAqIFVzZSB0aGlzIG9wdGlvbiB0byBjaGFuZ2UgdGhlIG5hbWVzcGFjZSBvZiBwaHAgZ2VuZXJhdGVkIGNsYXNzZXMuIERlZmF1bHRcbiAgICogaXMgZW1wdHkuIFdoZW4gdGhpcyBvcHRpb24gaXMgZW1wdHksIHRoZSBwYWNrYWdlIG5hbWUgd2lsbCBiZSB1c2VkIGZvclxuICAgKiBkZXRlcm1pbmluZyB0aGUgbmFtZXNwYWNlLlxuICAgKi9cbiAgcGhwTmFtZXNwYWNlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBvcHRpb24gdG8gY2hhbmdlIHRoZSBuYW1lc3BhY2Ugb2YgcGhwIGdlbmVyYXRlZCBtZXRhZGF0YSBjbGFzc2VzLlxuICAgKiBEZWZhdWx0IGlzIGVtcHR5LiBXaGVuIHRoaXMgb3B0aW9uIGlzIGVtcHR5LCB0aGUgcHJvdG8gZmlsZSBuYW1lIHdpbGwgYmVcbiAgICogdXNlZCBmb3IgZGV0ZXJtaW5pbmcgdGhlIG5hbWVzcGFjZS5cbiAgICovXG4gIHBocE1ldGFkYXRhTmFtZXNwYWNlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBvcHRpb24gdG8gY2hhbmdlIHRoZSBwYWNrYWdlIG9mIHJ1YnkgZ2VuZXJhdGVkIGNsYXNzZXMuIERlZmF1bHRcbiAgICogaXMgZW1wdHkuIFdoZW4gdGhpcyBvcHRpb24gaXMgbm90IHNldCwgdGhlIHBhY2thZ2UgbmFtZSB3aWxsIGJlIHVzZWQgZm9yXG4gICAqIGRldGVybWluaW5nIHRoZSBydWJ5IHBhY2thZ2UuXG4gICAqL1xuICBydWJ5UGFja2FnZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBpdCBkb2Vzbid0IHJlY29nbml6ZSBoZXJlLlxuICAgKiBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBcIk9wdGlvbnNcIiBzZWN0aW9uIGFib3ZlLlxuICAgKi9cbiAgdW5pbnRlcnByZXRlZE9wdGlvbjogVW5pbnRlcnByZXRlZE9wdGlvbltdO1xufVxuXG4vKiogR2VuZXJhdGVkIGNsYXNzZXMgY2FuIGJlIG9wdGltaXplZCBmb3Igc3BlZWQgb3IgY29kZSBzaXplLiAqL1xuZXhwb3J0IGVudW0gRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlIHtcbiAgLyoqIFNQRUVEIC0gR2VuZXJhdGUgY29tcGxldGUgY29kZSBmb3IgcGFyc2luZywgc2VyaWFsaXphdGlvbiwgKi9cbiAgU1BFRUQgPSAxLFxuICAvKiogQ09ERV9TSVpFIC0gZXRjLiAqL1xuICBDT0RFX1NJWkUgPSAyLFxuICAvKiogTElURV9SVU5USU1FIC0gR2VuZXJhdGUgY29kZSB1c2luZyBNZXNzYWdlTGl0ZSBhbmQgdGhlIGxpdGUgcnVudGltZS4gKi9cbiAgTElURV9SVU5USU1FID0gMyxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbGVPcHRpb25zX09wdGltaXplTW9kZUZyb21KU09OKG9iamVjdDogYW55KTogRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlIHtcbiAgc3dpdGNoIChvYmplY3QpIHtcbiAgICBjYXNlIDE6XG4gICAgY2FzZSBcIlNQRUVEXCI6XG4gICAgICByZXR1cm4gRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlLlNQRUVEO1xuICAgIGNhc2UgMjpcbiAgICBjYXNlIFwiQ09ERV9TSVpFXCI6XG4gICAgICByZXR1cm4gRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlLkNPREVfU0laRTtcbiAgICBjYXNlIDM6XG4gICAgY2FzZSBcIkxJVEVfUlVOVElNRVwiOlxuICAgICAgcmV0dXJuIEZpbGVPcHRpb25zX09wdGltaXplTW9kZS5MSVRFX1JVTlRJTUU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyB0c1Byb3RvR2xvYmFsVGhpcy5FcnJvcihcIlVucmVjb2duaXplZCBlbnVtIHZhbHVlIFwiICsgb2JqZWN0ICsgXCIgZm9yIGVudW0gRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlXCIpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGVUb0pTT04ob2JqZWN0OiBGaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKG9iamVjdCkge1xuICAgIGNhc2UgRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlLlNQRUVEOlxuICAgICAgcmV0dXJuIFwiU1BFRURcIjtcbiAgICBjYXNlIEZpbGVPcHRpb25zX09wdGltaXplTW9kZS5DT0RFX1NJWkU6XG4gICAgICByZXR1cm4gXCJDT0RFX1NJWkVcIjtcbiAgICBjYXNlIEZpbGVPcHRpb25zX09wdGltaXplTW9kZS5MSVRFX1JVTlRJTUU6XG4gICAgICByZXR1cm4gXCJMSVRFX1JVTlRJTUVcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IHRzUHJvdG9HbG9iYWxUaGlzLkVycm9yKFwiVW5yZWNvZ25pemVkIGVudW0gdmFsdWUgXCIgKyBvYmplY3QgKyBcIiBmb3IgZW51bSBGaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGVcIik7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTZXQgdHJ1ZSB0byB1c2UgdGhlIG9sZCBwcm90bzEgTWVzc2FnZVNldCB3aXJlIGZvcm1hdCBmb3IgZXh0ZW5zaW9ucy5cbiAgICogVGhpcyBpcyBwcm92aWRlZCBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgd2l0aCB0aGUgTWVzc2FnZVNldCB3aXJlXG4gICAqIGZvcm1hdC4gIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGZvciBhbnkgb3RoZXIgcmVhc29uOiAgSXQncyBsZXNzXG4gICAqIGVmZmljaWVudCwgaGFzIGZld2VyIGZlYXR1cmVzLCBhbmQgaXMgbW9yZSBjb21wbGljYXRlZC5cbiAgICpcbiAgICogVGhlIG1lc3NhZ2UgbXVzdCBiZSBkZWZpbmVkIGV4YWN0bHkgYXMgZm9sbG93czpcbiAgICogICBtZXNzYWdlIEZvbyB7XG4gICAqICAgICBvcHRpb24gbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQgPSB0cnVlO1xuICAgKiAgICAgZXh0ZW5zaW9ucyA0IHRvIG1heDtcbiAgICogICB9XG4gICAqIE5vdGUgdGhhdCB0aGUgbWVzc2FnZSBjYW5ub3QgaGF2ZSBhbnkgZGVmaW5lZCBmaWVsZHM7IE1lc3NhZ2VTZXRzIG9ubHlcbiAgICogaGF2ZSBleHRlbnNpb25zLlxuICAgKlxuICAgKiBBbGwgZXh0ZW5zaW9ucyBvZiB5b3VyIHR5cGUgbXVzdCBiZSBzaW5ndWxhciBtZXNzYWdlczsgZS5nLiB0aGV5IGNhbm5vdFxuICAgKiBiZSBpbnQzMnMsIGVudW1zLCBvciByZXBlYXRlZCBtZXNzYWdlcy5cbiAgICpcbiAgICogQmVjYXVzZSB0aGlzIGlzIGFuIG9wdGlvbiwgdGhlIGFib3ZlIHR3byByZXN0cmljdGlvbnMgYXJlIG5vdCBlbmZvcmNlZCBieVxuICAgKiB0aGUgcHJvdG9jb2wgY29tcGlsZXIuXG4gICAqL1xuICBtZXNzYWdlU2V0V2lyZUZvcm1hdDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIERpc2FibGVzIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBzdGFuZGFyZCBcImRlc2NyaXB0b3IoKVwiIGFjY2Vzc29yLCB3aGljaCBjYW5cbiAgICogY29uZmxpY3Qgd2l0aCBhIGZpZWxkIG9mIHRoZSBzYW1lIG5hbWUuICBUaGlzIGlzIG1lYW50IHRvIG1ha2UgbWlncmF0aW9uXG4gICAqIGZyb20gcHJvdG8xIGVhc2llcjsgbmV3IGNvZGUgc2hvdWxkIGF2b2lkIGZpZWxkcyBuYW1lZCBcImRlc2NyaXB0b3JcIi5cbiAgICovXG4gIG5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3I6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJcyB0aGlzIG1lc3NhZ2UgZGVwcmVjYXRlZD9cbiAgICogRGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0sIHRoaXMgY2FuIGVtaXQgRGVwcmVjYXRlZCBhbm5vdGF0aW9uc1xuICAgKiBmb3IgdGhlIG1lc3NhZ2UsIG9yIGl0IHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkOyBpbiB0aGUgdmVyeSBsZWFzdCxcbiAgICogdGhpcyBpcyBhIGZvcm1hbGl6YXRpb24gZm9yIGRlcHJlY2F0aW5nIG1lc3NhZ2VzLlxuICAgKi9cbiAgZGVwcmVjYXRlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE5PVEU6IERvIG5vdCBzZXQgdGhlIG9wdGlvbiBpbiAucHJvdG8gZmlsZXMuIEFsd2F5cyB1c2UgdGhlIG1hcHMgc3ludGF4XG4gICAqIGluc3RlYWQuIFRoZSBvcHRpb24gc2hvdWxkIG9ubHkgYmUgaW1wbGljaXRseSBzZXQgYnkgdGhlIHByb3RvIGNvbXBpbGVyXG4gICAqIHBhcnNlci5cbiAgICpcbiAgICogV2hldGhlciB0aGUgbWVzc2FnZSBpcyBhbiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYXAgZW50cnkgdHlwZSBmb3IgdGhlXG4gICAqIG1hcHMgZmllbGQuXG4gICAqXG4gICAqIEZvciBtYXBzIGZpZWxkczpcbiAgICogICAgIG1hcDxLZXlUeXBlLCBWYWx1ZVR5cGU+IG1hcF9maWVsZCA9IDE7XG4gICAqIFRoZSBwYXJzZWQgZGVzY3JpcHRvciBsb29rcyBsaWtlOlxuICAgKiAgICAgbWVzc2FnZSBNYXBGaWVsZEVudHJ5IHtcbiAgICogICAgICAgICBvcHRpb24gbWFwX2VudHJ5ID0gdHJ1ZTtcbiAgICogICAgICAgICBvcHRpb25hbCBLZXlUeXBlIGtleSA9IDE7XG4gICAqICAgICAgICAgb3B0aW9uYWwgVmFsdWVUeXBlIHZhbHVlID0gMjtcbiAgICogICAgIH1cbiAgICogICAgIHJlcGVhdGVkIE1hcEZpZWxkRW50cnkgbWFwX2ZpZWxkID0gMTtcbiAgICpcbiAgICogSW1wbGVtZW50YXRpb25zIG1heSBjaG9vc2Ugbm90IHRvIGdlbmVyYXRlIHRoZSBtYXBfZW50cnk9dHJ1ZSBtZXNzYWdlLCBidXRcbiAgICogdXNlIGEgbmF0aXZlIG1hcCBpbiB0aGUgdGFyZ2V0IGxhbmd1YWdlIHRvIGhvbGQgdGhlIGtleXMgYW5kIHZhbHVlcy5cbiAgICogVGhlIHJlZmxlY3Rpb24gQVBJcyBpbiBzdWNoIGltcGxlbWVudGF0aW9ucyBzdGlsbCBuZWVkIHRvIHdvcmsgYXNcbiAgICogaWYgdGhlIGZpZWxkIGlzIGEgcmVwZWF0ZWQgbWVzc2FnZSBmaWVsZC5cbiAgICovXG4gIG1hcEVudHJ5OiBib29sZWFuO1xuICAvKipcbiAgICogRW5hYmxlIHRoZSBsZWdhY3kgaGFuZGxpbmcgb2YgSlNPTiBmaWVsZCBuYW1lIGNvbmZsaWN0cy4gIFRoaXMgbG93ZXJjYXNlc1xuICAgKiBhbmQgc3RyaXBzIHVuZGVyc2NvcmVkIGZyb20gdGhlIGZpZWxkcyBiZWZvcmUgY29tcGFyaXNvbiBpbiBwcm90bzMgb25seS5cbiAgICogVGhlIG5ldyBiZWhhdmlvciB0YWtlcyBganNvbl9uYW1lYCBpbnRvIGFjY291bnQgYW5kIGFwcGxpZXMgdG8gcHJvdG8yIGFzXG4gICAqIHdlbGwuXG4gICAqXG4gICAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBhcyBhIHRlbXBvcmFyeSBtZWFzdXJlIGFnYWluc3QgYnJva2VuIGJ1aWxkcyBkdWVcbiAgICogdG8gdGhlIGNoYW5nZSBpbiBiZWhhdmlvciBmb3IgSlNPTiBmaWVsZCBuYW1lIGNvbmZsaWN0cy5cbiAgICpcbiAgICogVE9ETyhiLzI2MTc1MDE5MCkgVGhpcyBpcyBsZWdhY3kgYmVoYXZpb3Igd2UgcGxhbiB0byByZW1vdmUgb25jZSBkb3duc3RyZWFtXG4gICAqIHRlYW1zIGhhdmUgaGFkIHRpbWUgdG8gbWlncmF0ZS5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIGRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHM6IGJvb2xlYW47XG4gIC8qKiBUaGUgcGFyc2VyIHN0b3JlcyBvcHRpb25zIGl0IGRvZXNuJ3QgcmVjb2duaXplIGhlcmUuIFNlZSBhYm92ZS4gKi9cbiAgdW5pbnRlcnByZXRlZE9wdGlvbjogVW5pbnRlcnByZXRlZE9wdGlvbltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgY3R5cGUgb3B0aW9uIGluc3RydWN0cyB0aGUgQysrIGNvZGUgZ2VuZXJhdG9yIHRvIHVzZSBhIGRpZmZlcmVudFxuICAgKiByZXByZXNlbnRhdGlvbiBvZiB0aGUgZmllbGQgdGhhbiBpdCBub3JtYWxseSB3b3VsZC4gIFNlZSB0aGUgc3BlY2lmaWNcbiAgICogb3B0aW9ucyBiZWxvdy4gIFRoaXMgb3B0aW9uIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gdGhlIG9wZW4gc291cmNlXG4gICAqIHJlbGVhc2UgLS0gc29ycnksIHdlJ2xsIHRyeSB0byBpbmNsdWRlIGl0IGluIGEgZnV0dXJlIHZlcnNpb24hXG4gICAqL1xuICBjdHlwZTogRmllbGRPcHRpb25zX0NUeXBlO1xuICAvKipcbiAgICogVGhlIHBhY2tlZCBvcHRpb24gY2FuIGJlIGVuYWJsZWQgZm9yIHJlcGVhdGVkIHByaW1pdGl2ZSBmaWVsZHMgdG8gZW5hYmxlXG4gICAqIGEgbW9yZSBlZmZpY2llbnQgcmVwcmVzZW50YXRpb24gb24gdGhlIHdpcmUuIFJhdGhlciB0aGFuIHJlcGVhdGVkbHlcbiAgICogd3JpdGluZyB0aGUgdGFnIGFuZCB0eXBlIGZvciBlYWNoIGVsZW1lbnQsIHRoZSBlbnRpcmUgYXJyYXkgaXMgZW5jb2RlZCBhc1xuICAgKiBhIHNpbmdsZSBsZW5ndGgtZGVsaW1pdGVkIGJsb2IuIEluIHByb3RvMywgb25seSBleHBsaWNpdCBzZXR0aW5nIGl0IHRvXG4gICAqIGZhbHNlIHdpbGwgYXZvaWQgdXNpbmcgcGFja2VkIGVuY29kaW5nLlxuICAgKi9cbiAgcGFja2VkOiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIGpzdHlwZSBvcHRpb24gZGV0ZXJtaW5lcyB0aGUgSmF2YVNjcmlwdCB0eXBlIHVzZWQgZm9yIHZhbHVlcyBvZiB0aGVcbiAgICogZmllbGQuICBUaGUgb3B0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGZvciA2NCBiaXQgaW50ZWdyYWwgYW5kIGZpeGVkIHR5cGVzXG4gICAqIChpbnQ2NCwgdWludDY0LCBzaW50NjQsIGZpeGVkNjQsIHNmaXhlZDY0KS4gIEEgZmllbGQgd2l0aCBqc3R5cGUgSlNfU1RSSU5HXG4gICAqIGlzIHJlcHJlc2VudGVkIGFzIEphdmFTY3JpcHQgc3RyaW5nLCB3aGljaCBhdm9pZHMgbG9zcyBvZiBwcmVjaXNpb24gdGhhdFxuICAgKiBjYW4gaGFwcGVuIHdoZW4gYSBsYXJnZSB2YWx1ZSBpcyBjb252ZXJ0ZWQgdG8gYSBmbG9hdGluZyBwb2ludCBKYXZhU2NyaXB0LlxuICAgKiBTcGVjaWZ5aW5nIEpTX05VTUJFUiBmb3IgdGhlIGpzdHlwZSBjYXVzZXMgdGhlIGdlbmVyYXRlZCBKYXZhU2NyaXB0IGNvZGUgdG9cbiAgICogdXNlIHRoZSBKYXZhU2NyaXB0IFwibnVtYmVyXCIgdHlwZS4gIFRoZSBiZWhhdmlvciBvZiB0aGUgZGVmYXVsdCBvcHRpb25cbiAgICogSlNfTk9STUFMIGlzIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC5cbiAgICpcbiAgICogVGhpcyBvcHRpb24gaXMgYW4gZW51bSB0byBwZXJtaXQgYWRkaXRpb25hbCB0eXBlcyB0byBiZSBhZGRlZCwgZS5nLlxuICAgKiBnb29nLm1hdGguSW50ZWdlci5cbiAgICovXG4gIGpzdHlwZTogRmllbGRPcHRpb25zX0pTVHlwZTtcbiAgLyoqXG4gICAqIFNob3VsZCB0aGlzIGZpZWxkIGJlIHBhcnNlZCBsYXppbHk/ICBMYXp5IGFwcGxpZXMgb25seSB0byBtZXNzYWdlLXR5cGVcbiAgICogZmllbGRzLiAgSXQgbWVhbnMgdGhhdCB3aGVuIHRoZSBvdXRlciBtZXNzYWdlIGlzIGluaXRpYWxseSBwYXJzZWQsIHRoZVxuICAgKiBpbm5lciBtZXNzYWdlJ3MgY29udGVudHMgd2lsbCBub3QgYmUgcGFyc2VkIGJ1dCBpbnN0ZWFkIHN0b3JlZCBpbiBlbmNvZGVkXG4gICAqIGZvcm0uICBUaGUgaW5uZXIgbWVzc2FnZSB3aWxsIGFjdHVhbGx5IGJlIHBhcnNlZCB3aGVuIGl0IGlzIGZpcnN0IGFjY2Vzc2VkLlxuICAgKlxuICAgKiBUaGlzIGlzIG9ubHkgYSBoaW50LiAgSW1wbGVtZW50YXRpb25zIGFyZSBmcmVlIHRvIGNob29zZSB3aGV0aGVyIHRvIHVzZVxuICAgKiBlYWdlciBvciBsYXp5IHBhcnNpbmcgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgdGhpcyBvcHRpb24uICBIb3dldmVyLFxuICAgKiBzZXR0aW5nIHRoaXMgb3B0aW9uIHRydWUgc3VnZ2VzdHMgdGhhdCB0aGUgcHJvdG9jb2wgYXV0aG9yIGJlbGlldmVzIHRoYXRcbiAgICogdXNpbmcgbGF6eSBwYXJzaW5nIG9uIHRoaXMgZmllbGQgaXMgd29ydGggdGhlIGFkZGl0aW9uYWwgYm9va2tlZXBpbmdcbiAgICogb3ZlcmhlYWQgdHlwaWNhbGx5IG5lZWRlZCB0byBpbXBsZW1lbnQgaXQuXG4gICAqXG4gICAqIFRoaXMgb3B0aW9uIGRvZXMgbm90IGFmZmVjdCB0aGUgcHVibGljIGludGVyZmFjZSBvZiBhbnkgZ2VuZXJhdGVkIGNvZGU7XG4gICAqIGFsbCBtZXRob2Qgc2lnbmF0dXJlcyByZW1haW4gdGhlIHNhbWUuICBGdXJ0aGVybW9yZSwgdGhyZWFkLXNhZmV0eSBvZiB0aGVcbiAgICogaW50ZXJmYWNlIGlzIG5vdCBhZmZlY3RlZCBieSB0aGlzIG9wdGlvbjsgY29uc3QgbWV0aG9kcyByZW1haW4gc2FmZSB0b1xuICAgKiBjYWxsIGZyb20gbXVsdGlwbGUgdGhyZWFkcyBjb25jdXJyZW50bHksIHdoaWxlIG5vbi1jb25zdCBtZXRob2RzIGNvbnRpbnVlXG4gICAqIHRvIHJlcXVpcmUgZXhjbHVzaXZlIGFjY2Vzcy5cbiAgICpcbiAgICogTm90ZSB0aGF0IGltcGxlbWVudGF0aW9ucyBtYXkgY2hvb3NlIG5vdCB0byBjaGVjayByZXF1aXJlZCBmaWVsZHMgd2l0aGluXG4gICAqIGEgbGF6eSBzdWItbWVzc2FnZS4gIFRoYXQgaXMsIGNhbGxpbmcgSXNJbml0aWFsaXplZCgpIG9uIHRoZSBvdXRlciBtZXNzYWdlXG4gICAqIG1heSByZXR1cm4gdHJ1ZSBldmVuIGlmIHRoZSBpbm5lciBtZXNzYWdlIGhhcyBtaXNzaW5nIHJlcXVpcmVkIGZpZWxkcy5cbiAgICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvdGhlcndpc2UgdGhlIGlubmVyIG1lc3NhZ2Ugd291bGQgaGF2ZSB0byBiZVxuICAgKiBwYXJzZWQgaW4gb3JkZXIgdG8gcGVyZm9ybSB0aGUgY2hlY2ssIGRlZmVhdGluZyB0aGUgcHVycG9zZSBvZiBsYXp5XG4gICAqIHBhcnNpbmcuICBBbiBpbXBsZW1lbnRhdGlvbiB3aGljaCBjaG9vc2VzIG5vdCB0byBjaGVjayByZXF1aXJlZCBmaWVsZHNcbiAgICogbXVzdCBiZSBjb25zaXN0ZW50IGFib3V0IGl0LiAgVGhhdCBpcywgZm9yIGFueSBwYXJ0aWN1bGFyIHN1Yi1tZXNzYWdlLCB0aGVcbiAgICogaW1wbGVtZW50YXRpb24gbXVzdCBlaXRoZXIgKmFsd2F5cyogY2hlY2sgaXRzIHJlcXVpcmVkIGZpZWxkcywgb3IgKm5ldmVyKlxuICAgKiBjaGVjayBpdHMgcmVxdWlyZWQgZmllbGRzLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IHRoZSBtZXNzYWdlIGhhc1xuICAgKiBiZWVuIHBhcnNlZC5cbiAgICpcbiAgICogQXMgb2YgTWF5IDIwMjIsIGxhenkgdmVyaWZpZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBieXRlIHN0cmVhbSBkdXJpbmdcbiAgICogcGFyc2luZy4gIEFuIGludmFsaWQgYnl0ZSBzdHJlYW0gd2lsbCBjYXVzZSB0aGUgb3ZlcmFsbCBwYXJzaW5nIHRvIGZhaWwuXG4gICAqL1xuICBsYXp5OiBib29sZWFuO1xuICAvKipcbiAgICogdW52ZXJpZmllZF9sYXp5IGRvZXMgbm8gY29ycmVjdG5lc3MgY2hlY2tzIG9uIHRoZSBieXRlIHN0cmVhbS4gVGhpcyBzaG91bGRcbiAgICogb25seSBiZSB1c2VkIHdoZXJlIGxhenkgd2l0aCB2ZXJpZmljYXRpb24gaXMgcHJvaGliaXRpdmUgZm9yIHBlcmZvcm1hbmNlXG4gICAqIHJlYXNvbnMuXG4gICAqL1xuICB1bnZlcmlmaWVkTGF6eTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElzIHRoaXMgZmllbGQgZGVwcmVjYXRlZD9cbiAgICogRGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0sIHRoaXMgY2FuIGVtaXQgRGVwcmVjYXRlZCBhbm5vdGF0aW9uc1xuICAgKiBmb3IgYWNjZXNzb3JzLCBvciBpdCB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZDsgaW4gdGhlIHZlcnkgbGVhc3QsIHRoaXNcbiAgICogaXMgYSBmb3JtYWxpemF0aW9uIGZvciBkZXByZWNhdGluZyBmaWVsZHMuXG4gICAqL1xuICBkZXByZWNhdGVkOiBib29sZWFuO1xuICAvKiogRm9yIEdvb2dsZS1pbnRlcm5hbCBtaWdyYXRpb24gb25seS4gRG8gbm90IHVzZS4gKi9cbiAgd2VhazogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlIHRoYXQgdGhlIGZpZWxkIHZhbHVlIHNob3VsZCBub3QgYmUgcHJpbnRlZCBvdXQgd2hlbiB1c2luZyBkZWJ1Z1xuICAgKiBmb3JtYXRzLCBlLmcuIHdoZW4gdGhlIGZpZWxkIGNvbnRhaW5zIHNlbnNpdGl2ZSBjcmVkZW50aWFscy5cbiAgICovXG4gIGRlYnVnUmVkYWN0OiBib29sZWFuO1xuICByZXRlbnRpb246IEZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb247XG4gIHRhcmdldDogRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGU7XG4gIC8qKiBUaGUgcGFyc2VyIHN0b3JlcyBvcHRpb25zIGl0IGRvZXNuJ3QgcmVjb2duaXplIGhlcmUuIFNlZSBhYm92ZS4gKi9cbiAgdW5pbnRlcnByZXRlZE9wdGlvbjogVW5pbnRlcnByZXRlZE9wdGlvbltdO1xufVxuXG5leHBvcnQgZW51bSBGaWVsZE9wdGlvbnNfQ1R5cGUge1xuICAvKiogU1RSSU5HIC0gRGVmYXVsdCBtb2RlLiAqL1xuICBTVFJJTkcgPSAwLFxuICBDT1JEID0gMSxcbiAgU1RSSU5HX1BJRUNFID0gMixcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZWxkT3B0aW9uc19DVHlwZUZyb21KU09OKG9iamVjdDogYW55KTogRmllbGRPcHRpb25zX0NUeXBlIHtcbiAgc3dpdGNoIChvYmplY3QpIHtcbiAgICBjYXNlIDA6XG4gICAgY2FzZSBcIlNUUklOR1wiOlxuICAgICAgcmV0dXJuIEZpZWxkT3B0aW9uc19DVHlwZS5TVFJJTkc7XG4gICAgY2FzZSAxOlxuICAgIGNhc2UgXCJDT1JEXCI6XG4gICAgICByZXR1cm4gRmllbGRPcHRpb25zX0NUeXBlLkNPUkQ7XG4gICAgY2FzZSAyOlxuICAgIGNhc2UgXCJTVFJJTkdfUElFQ0VcIjpcbiAgICAgIHJldHVybiBGaWVsZE9wdGlvbnNfQ1R5cGUuU1RSSU5HX1BJRUNFO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgdHNQcm90b0dsb2JhbFRoaXMuRXJyb3IoXCJVbnJlY29nbml6ZWQgZW51bSB2YWx1ZSBcIiArIG9iamVjdCArIFwiIGZvciBlbnVtIEZpZWxkT3B0aW9uc19DVHlwZVwiKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmllbGRPcHRpb25zX0NUeXBlVG9KU09OKG9iamVjdDogRmllbGRPcHRpb25zX0NUeXBlKTogc3RyaW5nIHtcbiAgc3dpdGNoIChvYmplY3QpIHtcbiAgICBjYXNlIEZpZWxkT3B0aW9uc19DVHlwZS5TVFJJTkc6XG4gICAgICByZXR1cm4gXCJTVFJJTkdcIjtcbiAgICBjYXNlIEZpZWxkT3B0aW9uc19DVHlwZS5DT1JEOlxuICAgICAgcmV0dXJuIFwiQ09SRFwiO1xuICAgIGNhc2UgRmllbGRPcHRpb25zX0NUeXBlLlNUUklOR19QSUVDRTpcbiAgICAgIHJldHVybiBcIlNUUklOR19QSUVDRVwiO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgdHNQcm90b0dsb2JhbFRoaXMuRXJyb3IoXCJVbnJlY29nbml6ZWQgZW51bSB2YWx1ZSBcIiArIG9iamVjdCArIFwiIGZvciBlbnVtIEZpZWxkT3B0aW9uc19DVHlwZVwiKTtcbiAgfVxufVxuXG5leHBvcnQgZW51bSBGaWVsZE9wdGlvbnNfSlNUeXBlIHtcbiAgLyoqIEpTX05PUk1BTCAtIFVzZSB0aGUgZGVmYXVsdCB0eXBlLiAqL1xuICBKU19OT1JNQUwgPSAwLFxuICAvKiogSlNfU1RSSU5HIC0gVXNlIEphdmFTY3JpcHQgc3RyaW5ncy4gKi9cbiAgSlNfU1RSSU5HID0gMSxcbiAgLyoqIEpTX05VTUJFUiAtIFVzZSBKYXZhU2NyaXB0IG51bWJlcnMuICovXG4gIEpTX05VTUJFUiA9IDIsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZE9wdGlvbnNfSlNUeXBlRnJvbUpTT04ob2JqZWN0OiBhbnkpOiBGaWVsZE9wdGlvbnNfSlNUeXBlIHtcbiAgc3dpdGNoIChvYmplY3QpIHtcbiAgICBjYXNlIDA6XG4gICAgY2FzZSBcIkpTX05PUk1BTFwiOlxuICAgICAgcmV0dXJuIEZpZWxkT3B0aW9uc19KU1R5cGUuSlNfTk9STUFMO1xuICAgIGNhc2UgMTpcbiAgICBjYXNlIFwiSlNfU1RSSU5HXCI6XG4gICAgICByZXR1cm4gRmllbGRPcHRpb25zX0pTVHlwZS5KU19TVFJJTkc7XG4gICAgY2FzZSAyOlxuICAgIGNhc2UgXCJKU19OVU1CRVJcIjpcbiAgICAgIHJldHVybiBGaWVsZE9wdGlvbnNfSlNUeXBlLkpTX05VTUJFUjtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IHRzUHJvdG9HbG9iYWxUaGlzLkVycm9yKFwiVW5yZWNvZ25pemVkIGVudW0gdmFsdWUgXCIgKyBvYmplY3QgKyBcIiBmb3IgZW51bSBGaWVsZE9wdGlvbnNfSlNUeXBlXCIpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZE9wdGlvbnNfSlNUeXBlVG9KU09OKG9iamVjdDogRmllbGRPcHRpb25zX0pTVHlwZSk6IHN0cmluZyB7XG4gIHN3aXRjaCAob2JqZWN0KSB7XG4gICAgY2FzZSBGaWVsZE9wdGlvbnNfSlNUeXBlLkpTX05PUk1BTDpcbiAgICAgIHJldHVybiBcIkpTX05PUk1BTFwiO1xuICAgIGNhc2UgRmllbGRPcHRpb25zX0pTVHlwZS5KU19TVFJJTkc6XG4gICAgICByZXR1cm4gXCJKU19TVFJJTkdcIjtcbiAgICBjYXNlIEZpZWxkT3B0aW9uc19KU1R5cGUuSlNfTlVNQkVSOlxuICAgICAgcmV0dXJuIFwiSlNfTlVNQkVSXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyB0c1Byb3RvR2xvYmFsVGhpcy5FcnJvcihcIlVucmVjb2duaXplZCBlbnVtIHZhbHVlIFwiICsgb2JqZWN0ICsgXCIgZm9yIGVudW0gRmllbGRPcHRpb25zX0pTVHlwZVwiKTtcbiAgfVxufVxuXG4vKipcbiAqIElmIHNldCB0byBSRVRFTlRJT05fU09VUkNFLCB0aGUgb3B0aW9uIHdpbGwgYmUgb21pdHRlZCBmcm9tIHRoZSBiaW5hcnkuXG4gKiBOb3RlOiBhcyBvZiBKYW51YXJ5IDIwMjMsIHN1cHBvcnQgZm9yIHRoaXMgaXMgaW4gcHJvZ3Jlc3MgYW5kIGRvZXMgbm90IHlldFxuICogaGF2ZSBhbiBlZmZlY3QgKGIvMjY0NTkzNDg5KS5cbiAqL1xuZXhwb3J0IGVudW0gRmllbGRPcHRpb25zX09wdGlvblJldGVudGlvbiB7XG4gIFJFVEVOVElPTl9VTktOT1dOID0gMCxcbiAgUkVURU5USU9OX1JVTlRJTUUgPSAxLFxuICBSRVRFTlRJT05fU09VUkNFID0gMixcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb25Gcm9tSlNPTihvYmplY3Q6IGFueSk6IEZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb24ge1xuICBzd2l0Y2ggKG9iamVjdCkge1xuICAgIGNhc2UgMDpcbiAgICBjYXNlIFwiUkVURU5USU9OX1VOS05PV05cIjpcbiAgICAgIHJldHVybiBGaWVsZE9wdGlvbnNfT3B0aW9uUmV0ZW50aW9uLlJFVEVOVElPTl9VTktOT1dOO1xuICAgIGNhc2UgMTpcbiAgICBjYXNlIFwiUkVURU5USU9OX1JVTlRJTUVcIjpcbiAgICAgIHJldHVybiBGaWVsZE9wdGlvbnNfT3B0aW9uUmV0ZW50aW9uLlJFVEVOVElPTl9SVU5USU1FO1xuICAgIGNhc2UgMjpcbiAgICBjYXNlIFwiUkVURU5USU9OX1NPVVJDRVwiOlxuICAgICAgcmV0dXJuIEZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb24uUkVURU5USU9OX1NPVVJDRTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IHRzUHJvdG9HbG9iYWxUaGlzLkVycm9yKFwiVW5yZWNvZ25pemVkIGVudW0gdmFsdWUgXCIgKyBvYmplY3QgKyBcIiBmb3IgZW51bSBGaWVsZE9wdGlvbnNfT3B0aW9uUmV0ZW50aW9uXCIpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZE9wdGlvbnNfT3B0aW9uUmV0ZW50aW9uVG9KU09OKG9iamVjdDogRmllbGRPcHRpb25zX09wdGlvblJldGVudGlvbik6IHN0cmluZyB7XG4gIHN3aXRjaCAob2JqZWN0KSB7XG4gICAgY2FzZSBGaWVsZE9wdGlvbnNfT3B0aW9uUmV0ZW50aW9uLlJFVEVOVElPTl9VTktOT1dOOlxuICAgICAgcmV0dXJuIFwiUkVURU5USU9OX1VOS05PV05cIjtcbiAgICBjYXNlIEZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb24uUkVURU5USU9OX1JVTlRJTUU6XG4gICAgICByZXR1cm4gXCJSRVRFTlRJT05fUlVOVElNRVwiO1xuICAgIGNhc2UgRmllbGRPcHRpb25zX09wdGlvblJldGVudGlvbi5SRVRFTlRJT05fU09VUkNFOlxuICAgICAgcmV0dXJuIFwiUkVURU5USU9OX1NPVVJDRVwiO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgdHNQcm90b0dsb2JhbFRoaXMuRXJyb3IoXCJVbnJlY29nbml6ZWQgZW51bSB2YWx1ZSBcIiArIG9iamVjdCArIFwiIGZvciBlbnVtIEZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb25cIik7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGluZGljYXRlcyB0aGUgdHlwZXMgb2YgZW50aXRpZXMgdGhhdCB0aGUgZmllbGQgbWF5IGFwcGx5IHRvIHdoZW4gdXNlZFxuICogYXMgYW4gb3B0aW9uLiBJZiBpdCBpcyB1bnNldCwgdGhlbiB0aGUgZmllbGQgbWF5IGJlIGZyZWVseSB1c2VkIGFzIGFuXG4gKiBvcHRpb24gb24gYW55IGtpbmQgb2YgZW50aXR5LiBOb3RlOiBhcyBvZiBKYW51YXJ5IDIwMjMsIHN1cHBvcnQgZm9yIHRoaXMgaXNcbiAqIGluIHByb2dyZXNzIGFuZCBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBlZmZlY3QgKGIvMjY0NTkzNDg5KS5cbiAqL1xuZXhwb3J0IGVudW0gRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUge1xuICBUQVJHRVRfVFlQRV9VTktOT1dOID0gMCxcbiAgVEFSR0VUX1RZUEVfRklMRSA9IDEsXG4gIFRBUkdFVF9UWVBFX0VYVEVOU0lPTl9SQU5HRSA9IDIsXG4gIFRBUkdFVF9UWVBFX01FU1NBR0UgPSAzLFxuICBUQVJHRVRfVFlQRV9GSUVMRCA9IDQsXG4gIFRBUkdFVF9UWVBFX09ORU9GID0gNSxcbiAgVEFSR0VUX1RZUEVfRU5VTSA9IDYsXG4gIFRBUkdFVF9UWVBFX0VOVU1fRU5UUlkgPSA3LFxuICBUQVJHRVRfVFlQRV9TRVJWSUNFID0gOCxcbiAgVEFSR0VUX1RZUEVfTUVUSE9EID0gOSxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlRnJvbUpTT04ob2JqZWN0OiBhbnkpOiBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZSB7XG4gIHN3aXRjaCAob2JqZWN0KSB7XG4gICAgY2FzZSAwOlxuICAgIGNhc2UgXCJUQVJHRVRfVFlQRV9VTktOT1dOXCI6XG4gICAgICByZXR1cm4gRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUuVEFSR0VUX1RZUEVfVU5LTk9XTjtcbiAgICBjYXNlIDE6XG4gICAgY2FzZSBcIlRBUkdFVF9UWVBFX0ZJTEVcIjpcbiAgICAgIHJldHVybiBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZS5UQVJHRVRfVFlQRV9GSUxFO1xuICAgIGNhc2UgMjpcbiAgICBjYXNlIFwiVEFSR0VUX1RZUEVfRVhURU5TSU9OX1JBTkdFXCI6XG4gICAgICByZXR1cm4gRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUuVEFSR0VUX1RZUEVfRVhURU5TSU9OX1JBTkdFO1xuICAgIGNhc2UgMzpcbiAgICBjYXNlIFwiVEFSR0VUX1RZUEVfTUVTU0FHRVwiOlxuICAgICAgcmV0dXJuIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlLlRBUkdFVF9UWVBFX01FU1NBR0U7XG4gICAgY2FzZSA0OlxuICAgIGNhc2UgXCJUQVJHRVRfVFlQRV9GSUVMRFwiOlxuICAgICAgcmV0dXJuIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlLlRBUkdFVF9UWVBFX0ZJRUxEO1xuICAgIGNhc2UgNTpcbiAgICBjYXNlIFwiVEFSR0VUX1RZUEVfT05FT0ZcIjpcbiAgICAgIHJldHVybiBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZS5UQVJHRVRfVFlQRV9PTkVPRjtcbiAgICBjYXNlIDY6XG4gICAgY2FzZSBcIlRBUkdFVF9UWVBFX0VOVU1cIjpcbiAgICAgIHJldHVybiBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZS5UQVJHRVRfVFlQRV9FTlVNO1xuICAgIGNhc2UgNzpcbiAgICBjYXNlIFwiVEFSR0VUX1RZUEVfRU5VTV9FTlRSWVwiOlxuICAgICAgcmV0dXJuIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlLlRBUkdFVF9UWVBFX0VOVU1fRU5UUlk7XG4gICAgY2FzZSA4OlxuICAgIGNhc2UgXCJUQVJHRVRfVFlQRV9TRVJWSUNFXCI6XG4gICAgICByZXR1cm4gRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUuVEFSR0VUX1RZUEVfU0VSVklDRTtcbiAgICBjYXNlIDk6XG4gICAgY2FzZSBcIlRBUkdFVF9UWVBFX01FVEhPRFwiOlxuICAgICAgcmV0dXJuIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlLlRBUkdFVF9UWVBFX01FVEhPRDtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IHRzUHJvdG9HbG9iYWxUaGlzLkVycm9yKFxuICAgICAgICBcIlVucmVjb2duaXplZCBlbnVtIHZhbHVlIFwiICsgb2JqZWN0ICsgXCIgZm9yIGVudW0gRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGVcIixcbiAgICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlVG9KU09OKG9iamVjdDogRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKG9iamVjdCkge1xuICAgIGNhc2UgRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUuVEFSR0VUX1RZUEVfVU5LTk9XTjpcbiAgICAgIHJldHVybiBcIlRBUkdFVF9UWVBFX1VOS05PV05cIjtcbiAgICBjYXNlIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlLlRBUkdFVF9UWVBFX0ZJTEU6XG4gICAgICByZXR1cm4gXCJUQVJHRVRfVFlQRV9GSUxFXCI7XG4gICAgY2FzZSBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZS5UQVJHRVRfVFlQRV9FWFRFTlNJT05fUkFOR0U6XG4gICAgICByZXR1cm4gXCJUQVJHRVRfVFlQRV9FWFRFTlNJT05fUkFOR0VcIjtcbiAgICBjYXNlIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlLlRBUkdFVF9UWVBFX01FU1NBR0U6XG4gICAgICByZXR1cm4gXCJUQVJHRVRfVFlQRV9NRVNTQUdFXCI7XG4gICAgY2FzZSBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZS5UQVJHRVRfVFlQRV9GSUVMRDpcbiAgICAgIHJldHVybiBcIlRBUkdFVF9UWVBFX0ZJRUxEXCI7XG4gICAgY2FzZSBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZS5UQVJHRVRfVFlQRV9PTkVPRjpcbiAgICAgIHJldHVybiBcIlRBUkdFVF9UWVBFX09ORU9GXCI7XG4gICAgY2FzZSBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZS5UQVJHRVRfVFlQRV9FTlVNOlxuICAgICAgcmV0dXJuIFwiVEFSR0VUX1RZUEVfRU5VTVwiO1xuICAgIGNhc2UgRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUuVEFSR0VUX1RZUEVfRU5VTV9FTlRSWTpcbiAgICAgIHJldHVybiBcIlRBUkdFVF9UWVBFX0VOVU1fRU5UUllcIjtcbiAgICBjYXNlIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlLlRBUkdFVF9UWVBFX1NFUlZJQ0U6XG4gICAgICByZXR1cm4gXCJUQVJHRVRfVFlQRV9TRVJWSUNFXCI7XG4gICAgY2FzZSBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZS5UQVJHRVRfVFlQRV9NRVRIT0Q6XG4gICAgICByZXR1cm4gXCJUQVJHRVRfVFlQRV9NRVRIT0RcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IHRzUHJvdG9HbG9iYWxUaGlzLkVycm9yKFxuICAgICAgICBcIlVucmVjb2duaXplZCBlbnVtIHZhbHVlIFwiICsgb2JqZWN0ICsgXCIgZm9yIGVudW0gRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGVcIixcbiAgICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBPbmVvZk9wdGlvbnMge1xuICAvKiogVGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBpdCBkb2Vzbid0IHJlY29nbml6ZSBoZXJlLiBTZWUgYWJvdmUuICovXG4gIHVuaW50ZXJwcmV0ZWRPcHRpb246IFVuaW50ZXJwcmV0ZWRPcHRpb25bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnVtT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBvcHRpb24gdG8gdHJ1ZSB0byBhbGxvdyBtYXBwaW5nIGRpZmZlcmVudCB0YWcgbmFtZXMgdG8gdGhlIHNhbWVcbiAgICogdmFsdWUuXG4gICAqL1xuICBhbGxvd0FsaWFzOiBib29sZWFuO1xuICAvKipcbiAgICogSXMgdGhpcyBlbnVtIGRlcHJlY2F0ZWQ/XG4gICAqIERlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLCB0aGlzIGNhbiBlbWl0IERlcHJlY2F0ZWQgYW5ub3RhdGlvbnNcbiAgICogZm9yIHRoZSBlbnVtLCBvciBpdCB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZDsgaW4gdGhlIHZlcnkgbGVhc3QsIHRoaXNcbiAgICogaXMgYSBmb3JtYWxpemF0aW9uIGZvciBkZXByZWNhdGluZyBlbnVtcy5cbiAgICovXG4gIGRlcHJlY2F0ZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBFbmFibGUgdGhlIGxlZ2FjeSBoYW5kbGluZyBvZiBKU09OIGZpZWxkIG5hbWUgY29uZmxpY3RzLiAgVGhpcyBsb3dlcmNhc2VzXG4gICAqIGFuZCBzdHJpcHMgdW5kZXJzY29yZWQgZnJvbSB0aGUgZmllbGRzIGJlZm9yZSBjb21wYXJpc29uIGluIHByb3RvMyBvbmx5LlxuICAgKiBUaGUgbmV3IGJlaGF2aW9yIHRha2VzIGBqc29uX25hbWVgIGludG8gYWNjb3VudCBhbmQgYXBwbGllcyB0byBwcm90bzIgYXNcbiAgICogd2VsbC5cbiAgICogVE9ETyhiLzI2MTc1MDE5MCkgUmVtb3ZlIHRoaXMgbGVnYWN5IGJlaGF2aW9yIG9uY2UgZG93bnN0cmVhbSB0ZWFtcyBoYXZlXG4gICAqIGhhZCB0aW1lIHRvIG1pZ3JhdGUuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBkZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzOiBib29sZWFuO1xuICAvKiogVGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBpdCBkb2Vzbid0IHJlY29nbml6ZSBoZXJlLiBTZWUgYWJvdmUuICovXG4gIHVuaW50ZXJwcmV0ZWRPcHRpb246IFVuaW50ZXJwcmV0ZWRPcHRpb25bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnVtVmFsdWVPcHRpb25zIHtcbiAgLyoqXG4gICAqIElzIHRoaXMgZW51bSB2YWx1ZSBkZXByZWNhdGVkP1xuICAgKiBEZXBlbmRpbmcgb24gdGhlIHRhcmdldCBwbGF0Zm9ybSwgdGhpcyBjYW4gZW1pdCBEZXByZWNhdGVkIGFubm90YXRpb25zXG4gICAqIGZvciB0aGUgZW51bSB2YWx1ZSwgb3IgaXQgd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQ7IGluIHRoZSB2ZXJ5IGxlYXN0LFxuICAgKiB0aGlzIGlzIGEgZm9ybWFsaXphdGlvbiBmb3IgZGVwcmVjYXRpbmcgZW51bSB2YWx1ZXMuXG4gICAqL1xuICBkZXByZWNhdGVkOiBib29sZWFuO1xuICAvKiogVGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBpdCBkb2Vzbid0IHJlY29nbml6ZSBoZXJlLiBTZWUgYWJvdmUuICovXG4gIHVuaW50ZXJwcmV0ZWRPcHRpb246IFVuaW50ZXJwcmV0ZWRPcHRpb25bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJcyB0aGlzIHNlcnZpY2UgZGVwcmVjYXRlZD9cbiAgICogRGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0sIHRoaXMgY2FuIGVtaXQgRGVwcmVjYXRlZCBhbm5vdGF0aW9uc1xuICAgKiBmb3IgdGhlIHNlcnZpY2UsIG9yIGl0IHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkOyBpbiB0aGUgdmVyeSBsZWFzdCxcbiAgICogdGhpcyBpcyBhIGZvcm1hbGl6YXRpb24gZm9yIGRlcHJlY2F0aW5nIHNlcnZpY2VzLlxuICAgKi9cbiAgZGVwcmVjYXRlZDogYm9vbGVhbjtcbiAgLyoqIFRoZSBwYXJzZXIgc3RvcmVzIG9wdGlvbnMgaXQgZG9lc24ndCByZWNvZ25pemUgaGVyZS4gU2VlIGFib3ZlLiAqL1xuICB1bmludGVycHJldGVkT3B0aW9uOiBVbmludGVycHJldGVkT3B0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWV0aG9kT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJcyB0aGlzIG1ldGhvZCBkZXByZWNhdGVkP1xuICAgKiBEZXBlbmRpbmcgb24gdGhlIHRhcmdldCBwbGF0Zm9ybSwgdGhpcyBjYW4gZW1pdCBEZXByZWNhdGVkIGFubm90YXRpb25zXG4gICAqIGZvciB0aGUgbWV0aG9kLCBvciBpdCB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZDsgaW4gdGhlIHZlcnkgbGVhc3QsXG4gICAqIHRoaXMgaXMgYSBmb3JtYWxpemF0aW9uIGZvciBkZXByZWNhdGluZyBtZXRob2RzLlxuICAgKi9cbiAgZGVwcmVjYXRlZDogYm9vbGVhbjtcbiAgaWRlbXBvdGVuY3lMZXZlbDogTWV0aG9kT3B0aW9uc19JZGVtcG90ZW5jeUxldmVsO1xuICAvKiogVGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBpdCBkb2Vzbid0IHJlY29nbml6ZSBoZXJlLiBTZWUgYWJvdmUuICovXG4gIHVuaW50ZXJwcmV0ZWRPcHRpb246IFVuaW50ZXJwcmV0ZWRPcHRpb25bXTtcbn1cblxuLyoqXG4gKiBJcyB0aGlzIG1ldGhvZCBzaWRlLWVmZmVjdC1mcmVlIChvciBzYWZlIGluIEhUVFAgcGFybGFuY2UpLCBvciBpZGVtcG90ZW50LFxuICogb3IgbmVpdGhlcj8gSFRUUCBiYXNlZCBSUEMgaW1wbGVtZW50YXRpb24gbWF5IGNob29zZSBHRVQgdmVyYiBmb3Igc2FmZVxuICogbWV0aG9kcywgYW5kIFBVVCB2ZXJiIGZvciBpZGVtcG90ZW50IG1ldGhvZHMgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBQT1NULlxuICovXG5leHBvcnQgZW51bSBNZXRob2RPcHRpb25zX0lkZW1wb3RlbmN5TGV2ZWwge1xuICBJREVNUE9URU5DWV9VTktOT1dOID0gMCxcbiAgLyoqIE5PX1NJREVfRUZGRUNUUyAtIGltcGxpZXMgaWRlbXBvdGVudCAqL1xuICBOT19TSURFX0VGRkVDVFMgPSAxLFxuICAvKiogSURFTVBPVEVOVCAtIGlkZW1wb3RlbnQsIGJ1dCBtYXkgaGF2ZSBzaWRlIGVmZmVjdHMgKi9cbiAgSURFTVBPVEVOVCA9IDIsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRob2RPcHRpb25zX0lkZW1wb3RlbmN5TGV2ZWxGcm9tSlNPTihvYmplY3Q6IGFueSk6IE1ldGhvZE9wdGlvbnNfSWRlbXBvdGVuY3lMZXZlbCB7XG4gIHN3aXRjaCAob2JqZWN0KSB7XG4gICAgY2FzZSAwOlxuICAgIGNhc2UgXCJJREVNUE9URU5DWV9VTktOT1dOXCI6XG4gICAgICByZXR1cm4gTWV0aG9kT3B0aW9uc19JZGVtcG90ZW5jeUxldmVsLklERU1QT1RFTkNZX1VOS05PV047XG4gICAgY2FzZSAxOlxuICAgIGNhc2UgXCJOT19TSURFX0VGRkVDVFNcIjpcbiAgICAgIHJldHVybiBNZXRob2RPcHRpb25zX0lkZW1wb3RlbmN5TGV2ZWwuTk9fU0lERV9FRkZFQ1RTO1xuICAgIGNhc2UgMjpcbiAgICBjYXNlIFwiSURFTVBPVEVOVFwiOlxuICAgICAgcmV0dXJuIE1ldGhvZE9wdGlvbnNfSWRlbXBvdGVuY3lMZXZlbC5JREVNUE9URU5UO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgdHNQcm90b0dsb2JhbFRoaXMuRXJyb3IoXG4gICAgICAgIFwiVW5yZWNvZ25pemVkIGVudW0gdmFsdWUgXCIgKyBvYmplY3QgKyBcIiBmb3IgZW51bSBNZXRob2RPcHRpb25zX0lkZW1wb3RlbmN5TGV2ZWxcIixcbiAgICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGhvZE9wdGlvbnNfSWRlbXBvdGVuY3lMZXZlbFRvSlNPTihvYmplY3Q6IE1ldGhvZE9wdGlvbnNfSWRlbXBvdGVuY3lMZXZlbCk6IHN0cmluZyB7XG4gIHN3aXRjaCAob2JqZWN0KSB7XG4gICAgY2FzZSBNZXRob2RPcHRpb25zX0lkZW1wb3RlbmN5TGV2ZWwuSURFTVBPVEVOQ1lfVU5LTk9XTjpcbiAgICAgIHJldHVybiBcIklERU1QT1RFTkNZX1VOS05PV05cIjtcbiAgICBjYXNlIE1ldGhvZE9wdGlvbnNfSWRlbXBvdGVuY3lMZXZlbC5OT19TSURFX0VGRkVDVFM6XG4gICAgICByZXR1cm4gXCJOT19TSURFX0VGRkVDVFNcIjtcbiAgICBjYXNlIE1ldGhvZE9wdGlvbnNfSWRlbXBvdGVuY3lMZXZlbC5JREVNUE9URU5UOlxuICAgICAgcmV0dXJuIFwiSURFTVBPVEVOVFwiO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgdHNQcm90b0dsb2JhbFRoaXMuRXJyb3IoXG4gICAgICAgIFwiVW5yZWNvZ25pemVkIGVudW0gdmFsdWUgXCIgKyBvYmplY3QgKyBcIiBmb3IgZW51bSBNZXRob2RPcHRpb25zX0lkZW1wb3RlbmN5TGV2ZWxcIixcbiAgICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIG1lc3NhZ2UgcmVwcmVzZW50aW5nIGEgb3B0aW9uIHRoZSBwYXJzZXIgZG9lcyBub3QgcmVjb2duaXplLiBUaGlzIG9ubHlcbiAqIGFwcGVhcnMgaW4gb3B0aW9ucyBwcm90b3MgY3JlYXRlZCBieSB0aGUgY29tcGlsZXI6OlBhcnNlciBjbGFzcy5cbiAqIERlc2NyaXB0b3JQb29sIHJlc29sdmVzIHRoZXNlIHdoZW4gYnVpbGRpbmcgRGVzY3JpcHRvciBvYmplY3RzLiBUaGVyZWZvcmUsXG4gKiBvcHRpb25zIHByb3RvcyBpbiBkZXNjcmlwdG9yIG9iamVjdHMgKGUuZy4gcmV0dXJuZWQgYnkgRGVzY3JpcHRvcjo6b3B0aW9ucygpLFxuICogb3IgcHJvZHVjZWQgYnkgRGVzY3JpcHRvcjo6Q29weVRvKCkpIHdpbGwgbmV2ZXIgaGF2ZSBVbmludGVycHJldGVkT3B0aW9uc1xuICogaW4gdGhlbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbmludGVycHJldGVkT3B0aW9uIHtcbiAgbmFtZTogVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydFtdO1xuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSB1bmludGVycHJldGVkIG9wdGlvbiwgaW4gd2hhdGV2ZXIgdHlwZSB0aGUgdG9rZW5pemVyXG4gICAqIGlkZW50aWZpZWQgaXQgYXMgZHVyaW5nIHBhcnNpbmcuIEV4YWN0bHkgb25lIG9mIHRoZXNlIHNob3VsZCBiZSBzZXQuXG4gICAqL1xuICBpZGVudGlmaWVyVmFsdWU6IHN0cmluZztcbiAgcG9zaXRpdmVJbnRWYWx1ZTogbnVtYmVyO1xuICBuZWdhdGl2ZUludFZhbHVlOiBudW1iZXI7XG4gIGRvdWJsZVZhbHVlOiBudW1iZXI7XG4gIHN0cmluZ1ZhbHVlOiBVaW50OEFycmF5O1xuICBhZ2dyZWdhdGVWYWx1ZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSB1bmludGVycHJldGVkIG9wdGlvbi4gIEVhY2ggc3RyaW5nIHJlcHJlc2VudHMgYSBzZWdtZW50IGluXG4gKiBhIGRvdC1zZXBhcmF0ZWQgbmFtZS4gIGlzX2V4dGVuc2lvbiBpcyB0cnVlIGlmZiBhIHNlZ21lbnQgcmVwcmVzZW50cyBhblxuICogZXh0ZW5zaW9uIChkZW5vdGVkIHdpdGggcGFyZW50aGVzZXMgaW4gb3B0aW9ucyBzcGVjcyBpbiAucHJvdG8gZmlsZXMpLlxuICogRS5nLix7IFtcImZvb1wiLCBmYWxzZV0sIFtcImJhci5iYXpcIiwgdHJ1ZV0sIFtcIm1vb1wiLCBmYWxzZV0gfSByZXByZXNlbnRzXG4gKiBcImZvby4oYmFyLmJheikubW9vXCIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydCB7XG4gIG5hbWVQYXJ0OiBzdHJpbmc7XG4gIGlzRXh0ZW5zaW9uOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEVuY2Fwc3VsYXRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUgZnJvbSB3aGljaCBhXG4gKiBGaWxlRGVzY3JpcHRvclByb3RvIHdhcyBnZW5lcmF0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU291cmNlQ29kZUluZm8ge1xuICAvKipcbiAgICogQSBMb2NhdGlvbiBpZGVudGlmaWVzIGEgcGllY2Ugb2Ygc291cmNlIGNvZGUgaW4gYSAucHJvdG8gZmlsZSB3aGljaFxuICAgKiBjb3JyZXNwb25kcyB0byBhIHBhcnRpY3VsYXIgZGVmaW5pdGlvbi4gIFRoaXMgaW5mb3JtYXRpb24gaXMgaW50ZW5kZWRcbiAgICogdG8gYmUgdXNlZnVsIHRvIElERXMsIGNvZGUgaW5kZXhlcnMsIGRvY3VtZW50YXRpb24gZ2VuZXJhdG9ycywgYW5kIHNpbWlsYXJcbiAgICogdG9vbHMuXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCBzYXkgd2UgaGF2ZSBhIGZpbGUgbGlrZTpcbiAgICogICBtZXNzYWdlIEZvbyB7XG4gICAqICAgICBvcHRpb25hbCBzdHJpbmcgZm9vID0gMTtcbiAgICogICB9XG4gICAqIExldCdzIGxvb2sgYXQganVzdCB0aGUgZmllbGQgZGVmaW5pdGlvbjpcbiAgICogICBvcHRpb25hbCBzdHJpbmcgZm9vID0gMTtcbiAgICogICBeICAgICAgIF5eICAgICBeXiAgXiAgXl5eXG4gICAqICAgYSAgICAgICBiYyAgICAgZGUgIGYgIGdoaVxuICAgKiBXZSBoYXZlIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuICAgKiAgIHNwYW4gICBwYXRoICAgICAgICAgICAgICAgcmVwcmVzZW50c1xuICAgKiAgIFthLGkpICBbIDQsIDAsIDIsIDAgXSAgICAgVGhlIHdob2xlIGZpZWxkIGRlZmluaXRpb24uXG4gICAqICAgW2EsYikgIFsgNCwgMCwgMiwgMCwgNCBdICBUaGUgbGFiZWwgKG9wdGlvbmFsKS5cbiAgICogICBbYyxkKSAgWyA0LCAwLCAyLCAwLCA1IF0gIFRoZSB0eXBlIChzdHJpbmcpLlxuICAgKiAgIFtlLGYpICBbIDQsIDAsIDIsIDAsIDEgXSAgVGhlIG5hbWUgKGZvbykuXG4gICAqICAgW2csaCkgIFsgNCwgMCwgMiwgMCwgMyBdICBUaGUgbnVtYmVyICgxKS5cbiAgICpcbiAgICogTm90ZXM6XG4gICAqIC0gQSBsb2NhdGlvbiBtYXkgcmVmZXIgdG8gYSByZXBlYXRlZCBmaWVsZCBpdHNlbGYgKGkuZS4gbm90IHRvIGFueVxuICAgKiAgIHBhcnRpY3VsYXIgaW5kZXggd2l0aGluIGl0KS4gIFRoaXMgaXMgdXNlZCB3aGVuZXZlciBhIHNldCBvZiBlbGVtZW50cyBhcmVcbiAgICogICBsb2dpY2FsbHkgZW5jbG9zZWQgaW4gYSBzaW5nbGUgY29kZSBzZWdtZW50LiAgRm9yIGV4YW1wbGUsIGFuIGVudGlyZVxuICAgKiAgIGV4dGVuZCBibG9jayAocG9zc2libHkgY29udGFpbmluZyBtdWx0aXBsZSBleHRlbnNpb24gZGVmaW5pdGlvbnMpIHdpbGxcbiAgICogICBoYXZlIGFuIG91dGVyIGxvY2F0aW9uIHdob3NlIHBhdGggcmVmZXJzIHRvIHRoZSBcImV4dGVuc2lvbnNcIiByZXBlYXRlZFxuICAgKiAgIGZpZWxkIHdpdGhvdXQgYW4gaW5kZXguXG4gICAqIC0gTXVsdGlwbGUgbG9jYXRpb25zIG1heSBoYXZlIHRoZSBzYW1lIHBhdGguICBUaGlzIGhhcHBlbnMgd2hlbiBhIHNpbmdsZVxuICAgKiAgIGxvZ2ljYWwgZGVjbGFyYXRpb24gaXMgc3ByZWFkIG91dCBhY3Jvc3MgbXVsdGlwbGUgcGxhY2VzLiAgVGhlIG1vc3RcbiAgICogICBvYnZpb3VzIGV4YW1wbGUgaXMgdGhlIFwiZXh0ZW5kXCIgYmxvY2sgYWdhaW4gLS0gdGhlcmUgbWF5IGJlIG11bHRpcGxlXG4gICAqICAgZXh0ZW5kIGJsb2NrcyBpbiB0aGUgc2FtZSBzY29wZSwgZWFjaCBvZiB3aGljaCB3aWxsIGhhdmUgdGhlIHNhbWUgcGF0aC5cbiAgICogLSBBIGxvY2F0aW9uJ3Mgc3BhbiBpcyBub3QgYWx3YXlzIGEgc3Vic2V0IG9mIGl0cyBwYXJlbnQncyBzcGFuLiAgRm9yXG4gICAqICAgZXhhbXBsZSwgdGhlIFwiZXh0ZW5kZWVcIiBvZiBhbiBleHRlbnNpb24gZGVjbGFyYXRpb24gYXBwZWFycyBhdCB0aGVcbiAgICogICBiZWdpbm5pbmcgb2YgdGhlIFwiZXh0ZW5kXCIgYmxvY2sgYW5kIGlzIHNoYXJlZCBieSBhbGwgZXh0ZW5zaW9ucyB3aXRoaW5cbiAgICogICB0aGUgYmxvY2suXG4gICAqIC0gSnVzdCBiZWNhdXNlIGEgbG9jYXRpb24ncyBzcGFuIGlzIGEgc3Vic2V0IG9mIHNvbWUgb3RoZXIgbG9jYXRpb24ncyBzcGFuXG4gICAqICAgZG9lcyBub3QgbWVhbiB0aGF0IGl0IGlzIGEgZGVzY2VuZGFudC4gIEZvciBleGFtcGxlLCBhIFwiZ3JvdXBcIiBkZWZpbmVzXG4gICAqICAgYm90aCBhIHR5cGUgYW5kIGEgZmllbGQgaW4gYSBzaW5nbGUgZGVjbGFyYXRpb24uICBUaHVzLCB0aGUgbG9jYXRpb25zXG4gICAqICAgY29ycmVzcG9uZGluZyB0byB0aGUgdHlwZSBhbmQgZmllbGQgYW5kIHRoZWlyIGNvbXBvbmVudHMgd2lsbCBvdmVybGFwLlxuICAgKiAtIENvZGUgd2hpY2ggdHJpZXMgdG8gaW50ZXJwcmV0IGxvY2F0aW9ucyBzaG91bGQgcHJvYmFibHkgYmUgZGVzaWduZWQgdG9cbiAgICogICBpZ25vcmUgdGhvc2UgdGhhdCBpdCBkb2Vzbid0IHVuZGVyc3RhbmQsIGFzIG1vcmUgdHlwZXMgb2YgbG9jYXRpb25zIGNvdWxkXG4gICAqICAgYmUgcmVjb3JkZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICovXG4gIGxvY2F0aW9uOiBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uIHtcbiAgLyoqXG4gICAqIElkZW50aWZpZXMgd2hpY2ggcGFydCBvZiB0aGUgRmlsZURlc2NyaXB0b3JQcm90byB3YXMgZGVmaW5lZCBhdCB0aGlzXG4gICAqIGxvY2F0aW9uLlxuICAgKlxuICAgKiBFYWNoIGVsZW1lbnQgaXMgYSBmaWVsZCBudW1iZXIgb3IgYW4gaW5kZXguICBUaGV5IGZvcm0gYSBwYXRoIGZyb21cbiAgICogdGhlIHJvb3QgRmlsZURlc2NyaXB0b3JQcm90byB0byB0aGUgcGxhY2Ugd2hlcmUgdGhlIGRlZmluaXRpb24gb2NjdXJzLlxuICAgKiBGb3IgZXhhbXBsZSwgdGhpcyBwYXRoOlxuICAgKiAgIFsgNCwgMywgMiwgNywgMSBdXG4gICAqIHJlZmVycyB0bzpcbiAgICogICBmaWxlLm1lc3NhZ2VfdHlwZSgzKSAgLy8gNCwgM1xuICAgKiAgICAgICAuZmllbGQoNykgICAgICAgICAvLyAyLCA3XG4gICAqICAgICAgIC5uYW1lKCkgICAgICAgICAgIC8vIDFcbiAgICogVGhpcyBpcyBiZWNhdXNlIEZpbGVEZXNjcmlwdG9yUHJvdG8ubWVzc2FnZV90eXBlIGhhcyBmaWVsZCBudW1iZXIgNDpcbiAgICogICByZXBlYXRlZCBEZXNjcmlwdG9yUHJvdG8gbWVzc2FnZV90eXBlID0gNDtcbiAgICogYW5kIERlc2NyaXB0b3JQcm90by5maWVsZCBoYXMgZmllbGQgbnVtYmVyIDI6XG4gICAqICAgcmVwZWF0ZWQgRmllbGREZXNjcmlwdG9yUHJvdG8gZmllbGQgPSAyO1xuICAgKiBhbmQgRmllbGREZXNjcmlwdG9yUHJvdG8ubmFtZSBoYXMgZmllbGQgbnVtYmVyIDE6XG4gICAqICAgb3B0aW9uYWwgc3RyaW5nIG5hbWUgPSAxO1xuICAgKlxuICAgKiBUaHVzLCB0aGUgYWJvdmUgcGF0aCBnaXZlcyB0aGUgbG9jYXRpb24gb2YgYSBmaWVsZCBuYW1lLiAgSWYgd2UgcmVtb3ZlZFxuICAgKiB0aGUgbGFzdCBlbGVtZW50OlxuICAgKiAgIFsgNCwgMywgMiwgNyBdXG4gICAqIHRoaXMgcGF0aCByZWZlcnMgdG8gdGhlIHdob2xlIGZpZWxkIGRlY2xhcmF0aW9uIChmcm9tIHRoZSBiZWdpbm5pbmdcbiAgICogb2YgdGhlIGxhYmVsIHRvIHRoZSB0ZXJtaW5hdGluZyBzZW1pY29sb24pLlxuICAgKi9cbiAgcGF0aDogbnVtYmVyW107XG4gIC8qKlxuICAgKiBBbHdheXMgaGFzIGV4YWN0bHkgdGhyZWUgb3IgZm91ciBlbGVtZW50czogc3RhcnQgbGluZSwgc3RhcnQgY29sdW1uLFxuICAgKiBlbmQgbGluZSAob3B0aW9uYWwsIG90aGVyd2lzZSBhc3N1bWVkIHNhbWUgYXMgc3RhcnQgbGluZSksIGVuZCBjb2x1bW4uXG4gICAqIFRoZXNlIGFyZSBwYWNrZWQgaW50byBhIHNpbmdsZSBmaWVsZCBmb3IgZWZmaWNpZW5jeS4gIE5vdGUgdGhhdCBsaW5lXG4gICAqIGFuZCBjb2x1bW4gbnVtYmVycyBhcmUgemVyby1iYXNlZCAtLSB0eXBpY2FsbHkgeW91IHdpbGwgd2FudCB0byBhZGRcbiAgICogMSB0byBlYWNoIGJlZm9yZSBkaXNwbGF5aW5nIHRvIGEgdXNlci5cbiAgICovXG4gIHNwYW46IG51bWJlcltdO1xuICAvKipcbiAgICogSWYgdGhpcyBTb3VyY2VDb2RlSW5mbyByZXByZXNlbnRzIGEgY29tcGxldGUgZGVjbGFyYXRpb24sIHRoZXNlIGFyZSBhbnlcbiAgICogY29tbWVudHMgYXBwZWFyaW5nIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGRlY2xhcmF0aW9uIHdoaWNoIGFwcGVhciB0byBiZVxuICAgKiBhdHRhY2hlZCB0byB0aGUgZGVjbGFyYXRpb24uXG4gICAqXG4gICAqIEEgc2VyaWVzIG9mIGxpbmUgY29tbWVudHMgYXBwZWFyaW5nIG9uIGNvbnNlY3V0aXZlIGxpbmVzLCB3aXRoIG5vIG90aGVyXG4gICAqIHRva2VucyBhcHBlYXJpbmcgb24gdGhvc2UgbGluZXMsIHdpbGwgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZSBjb21tZW50LlxuICAgKlxuICAgKiBsZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzIHdpbGwga2VlcCBwYXJhZ3JhcGhzIG9mIGNvbW1lbnRzIHRoYXQgYXBwZWFyXG4gICAqIGJlZm9yZSAoYnV0IG5vdCBjb25uZWN0ZWQgdG8pIHRoZSBjdXJyZW50IGVsZW1lbnQuIEVhY2ggcGFyYWdyYXBoLFxuICAgKiBzZXBhcmF0ZWQgYnkgZW1wdHkgbGluZXMsIHdpbGwgYmUgb25lIGNvbW1lbnQgZWxlbWVudCBpbiB0aGUgcmVwZWF0ZWRcbiAgICogZmllbGQuXG4gICAqXG4gICAqIE9ubHkgdGhlIGNvbW1lbnQgY29udGVudCBpcyBwcm92aWRlZDsgY29tbWVudCBtYXJrZXJzIChlLmcuIC8vKSBhcmVcbiAgICogc3RyaXBwZWQgb3V0LiAgRm9yIGJsb2NrIGNvbW1lbnRzLCBsZWFkaW5nIHdoaXRlc3BhY2UgYW5kIGFuIGFzdGVyaXNrXG4gICAqIHdpbGwgYmUgc3RyaXBwZWQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggbGluZSBvdGhlciB0aGFuIHRoZSBmaXJzdC5cbiAgICogTmV3bGluZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQuXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgIG9wdGlvbmFsIGludDMyIGZvbyA9IDE7ICAvLyBDb21tZW50IGF0dGFjaGVkIHRvIGZvby5cbiAgICogICAvLyBDb21tZW50IGF0dGFjaGVkIHRvIGJhci5cbiAgICogICBvcHRpb25hbCBpbnQzMiBiYXIgPSAyO1xuICAgKlxuICAgKiAgIG9wdGlvbmFsIHN0cmluZyBiYXogPSAzO1xuICAgKiAgIC8vIENvbW1lbnQgYXR0YWNoZWQgdG8gYmF6LlxuICAgKiAgIC8vIEFub3RoZXIgbGluZSBhdHRhY2hlZCB0byBiYXouXG4gICAqXG4gICAqICAgLy8gQ29tbWVudCBhdHRhY2hlZCB0byBtb28uXG4gICAqICAgLy9cbiAgICogICAvLyBBbm90aGVyIGxpbmUgYXR0YWNoZWQgdG8gbW9vLlxuICAgKiAgIG9wdGlvbmFsIGRvdWJsZSBtb28gPSA0O1xuICAgKlxuICAgKiAgIC8vIERldGFjaGVkIGNvbW1lbnQgZm9yIGNvcmdlLiBUaGlzIGlzIG5vdCBsZWFkaW5nIG9yIHRyYWlsaW5nIGNvbW1lbnRzXG4gICAqICAgLy8gdG8gbW9vIG9yIGNvcmdlIGJlY2F1c2UgdGhlcmUgYXJlIGJsYW5rIGxpbmVzIHNlcGFyYXRpbmcgaXQgZnJvbVxuICAgKiAgIC8vIGJvdGguXG4gICAqXG4gICAqICAgLy8gRGV0YWNoZWQgY29tbWVudCBmb3IgY29yZ2UgcGFyYWdyYXBoIDIuXG4gICAqXG4gICAqICAgb3B0aW9uYWwgc3RyaW5nIGNvcmdlID0gNTtcbiAgICogICAvKiBCbG9jayBjb21tZW50IGF0dGFjaGVkXG4gICAqICAgICogdG8gY29yZ2UuICBMZWFkaW5nIGFzdGVyaXNrc1xuICAgKiAgICAqIHdpbGwgYmUgcmVtb3ZlZC4gKiAvXG4gICAqICAgLyogQmxvY2sgY29tbWVudCBhdHRhY2hlZCB0b1xuICAgKiAgICAqIGdyYXVsdC4gKiAvXG4gICAqICAgb3B0aW9uYWwgaW50MzIgZ3JhdWx0ID0gNjtcbiAgICpcbiAgICogICAvLyBpZ25vcmVkIGRldGFjaGVkIGNvbW1lbnRzLlxuICAgKi9cbiAgbGVhZGluZ0NvbW1lbnRzOiBzdHJpbmc7XG4gIHRyYWlsaW5nQ29tbWVudHM6IHN0cmluZztcbiAgbGVhZGluZ0RldGFjaGVkQ29tbWVudHM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIERlc2NyaWJlcyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gZ2VuZXJhdGVkIGNvZGUgYW5kIGl0cyBvcmlnaW5hbCBzb3VyY2VcbiAqIGZpbGUuIEEgR2VuZXJhdGVkQ29kZUluZm8gbWVzc2FnZSBpcyBhc3NvY2lhdGVkIHdpdGggb25seSBvbmUgZ2VuZXJhdGVkXG4gKiBzb3VyY2UgZmlsZSwgYnV0IG1heSBjb250YWluIHJlZmVyZW5jZXMgdG8gZGlmZmVyZW50IHNvdXJjZSAucHJvdG8gZmlsZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVkQ29kZUluZm8ge1xuICAvKipcbiAgICogQW4gQW5ub3RhdGlvbiBjb25uZWN0cyBzb21lIHNwYW4gb2YgdGV4dCBpbiBnZW5lcmF0ZWQgY29kZSB0byBhbiBlbGVtZW50XG4gICAqIG9mIGl0cyBnZW5lcmF0aW5nIC5wcm90byBmaWxlLlxuICAgKi9cbiAgYW5ub3RhdGlvbjogR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24ge1xuICAvKipcbiAgICogSWRlbnRpZmllcyB0aGUgZWxlbWVudCBpbiB0aGUgb3JpZ2luYWwgc291cmNlIC5wcm90byBmaWxlLiBUaGlzIGZpZWxkXG4gICAqIGlzIGZvcm1hdHRlZCB0aGUgc2FtZSBhcyBTb3VyY2VDb2RlSW5mby5Mb2NhdGlvbi5wYXRoLlxuICAgKi9cbiAgcGF0aDogbnVtYmVyW107XG4gIC8qKiBJZGVudGlmaWVzIHRoZSBmaWxlc3lzdGVtIHBhdGggdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSAucHJvdG8uICovXG4gIHNvdXJjZUZpbGU6IHN0cmluZztcbiAgLyoqXG4gICAqIElkZW50aWZpZXMgdGhlIHN0YXJ0aW5nIG9mZnNldCBpbiBieXRlcyBpbiB0aGUgZ2VuZXJhdGVkIGNvZGVcbiAgICogdGhhdCByZWxhdGVzIHRvIHRoZSBpZGVudGlmaWVkIG9iamVjdC5cbiAgICovXG4gIGJlZ2luOiBudW1iZXI7XG4gIC8qKlxuICAgKiBJZGVudGlmaWVzIHRoZSBlbmRpbmcgb2Zmc2V0IGluIGJ5dGVzIGluIHRoZSBnZW5lcmF0ZWQgY29kZSB0aGF0XG4gICAqIHJlbGF0ZXMgdG8gdGhlIGlkZW50aWZpZWQgb2JqZWN0LiBUaGUgZW5kIG9mZnNldCBzaG91bGQgYmUgb25lIHBhc3RcbiAgICogdGhlIGxhc3QgcmVsZXZhbnQgYnl0ZSAoc28gdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCA9IGVuZCAtIGJlZ2luKS5cbiAgICovXG4gIGVuZDogbnVtYmVyO1xuICBzZW1hbnRpYzogR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpYztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBpZGVudGlmaWVkIG9iamVjdCdzIGVmZmVjdCBvbiB0aGUgZWxlbWVudCBpbiB0aGUgb3JpZ2luYWxcbiAqIC5wcm90byBmaWxlLlxuICovXG5leHBvcnQgZW51bSBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljIHtcbiAgLyoqIE5PTkUgLSBUaGVyZSBpcyBubyBlZmZlY3Qgb3IgdGhlIGVmZmVjdCBpcyBpbmRlc2NyaWJhYmxlLiAqL1xuICBOT05FID0gMCxcbiAgLyoqIFNFVCAtIFRoZSBlbGVtZW50IGlzIHNldCBvciBvdGhlcndpc2UgbXV0YXRlZC4gKi9cbiAgU0VUID0gMSxcbiAgLyoqIEFMSUFTIC0gQW4gYWxpYXMgdG8gdGhlIGVsZW1lbnQgaXMgcmV0dXJuZWQuICovXG4gIEFMSUFTID0gMixcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fU2VtYW50aWNGcm9tSlNPTihvYmplY3Q6IGFueSk6IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fU2VtYW50aWMge1xuICBzd2l0Y2ggKG9iamVjdCkge1xuICAgIGNhc2UgMDpcbiAgICBjYXNlIFwiTk9ORVwiOlxuICAgICAgcmV0dXJuIEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fU2VtYW50aWMuTk9ORTtcbiAgICBjYXNlIDE6XG4gICAgY2FzZSBcIlNFVFwiOlxuICAgICAgcmV0dXJuIEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fU2VtYW50aWMuU0VUO1xuICAgIGNhc2UgMjpcbiAgICBjYXNlIFwiQUxJQVNcIjpcbiAgICAgIHJldHVybiBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljLkFMSUFTO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgdHNQcm90b0dsb2JhbFRoaXMuRXJyb3IoXG4gICAgICAgIFwiVW5yZWNvZ25pemVkIGVudW0gdmFsdWUgXCIgKyBvYmplY3QgKyBcIiBmb3IgZW51bSBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljXCIsXG4gICAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljVG9KU09OKG9iamVjdDogR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpYyk6IHN0cmluZyB7XG4gIHN3aXRjaCAob2JqZWN0KSB7XG4gICAgY2FzZSBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljLk5PTkU6XG4gICAgICByZXR1cm4gXCJOT05FXCI7XG4gICAgY2FzZSBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljLlNFVDpcbiAgICAgIHJldHVybiBcIlNFVFwiO1xuICAgIGNhc2UgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpYy5BTElBUzpcbiAgICAgIHJldHVybiBcIkFMSUFTXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyB0c1Byb3RvR2xvYmFsVGhpcy5FcnJvcihcbiAgICAgICAgXCJVbnJlY29nbml6ZWQgZW51bSB2YWx1ZSBcIiArIG9iamVjdCArIFwiIGZvciBlbnVtIEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fU2VtYW50aWNcIixcbiAgICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZUZpbGVEZXNjcmlwdG9yU2V0KCk6IEZpbGVEZXNjcmlwdG9yU2V0IHtcbiAgcmV0dXJuIHsgZmlsZTogW10gfTtcbn1cblxuZXhwb3J0IGNvbnN0IEZpbGVEZXNjcmlwdG9yU2V0ID0ge1xuICBlbmNvZGUobWVzc2FnZTogRmlsZURlc2NyaXB0b3JTZXQsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5maWxlKSB7XG4gICAgICBGaWxlRGVzY3JpcHRvclByb3RvLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBGaWxlRGVzY3JpcHRvclNldCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VGaWxlRGVzY3JpcHRvclNldCgpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZmlsZS5wdXNoKEZpbGVEZXNjcmlwdG9yUHJvdG8uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBGaWxlRGVzY3JpcHRvclNldCB7XG4gICAgcmV0dXJuIHsgZmlsZTogQXJyYXkuaXNBcnJheShvYmplY3Q/LmZpbGUpID8gb2JqZWN0LmZpbGUubWFwKChlOiBhbnkpID0+IEZpbGVEZXNjcmlwdG9yUHJvdG8uZnJvbUpTT04oZSkpIDogW10gfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogRmlsZURlc2NyaXB0b3JTZXQpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLmZpbGUpIHtcbiAgICAgIG9iai5maWxlID0gbWVzc2FnZS5maWxlLm1hcCgoZSkgPT4gZSA/IEZpbGVEZXNjcmlwdG9yUHJvdG8udG9KU09OKGUpIDogdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLmZpbGUgPSBbXTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPEZpbGVEZXNjcmlwdG9yU2V0Pik6IEZpbGVEZXNjcmlwdG9yU2V0IHtcbiAgICByZXR1cm4gRmlsZURlc2NyaXB0b3JTZXQuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG5cbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxGaWxlRGVzY3JpcHRvclNldD4pOiBGaWxlRGVzY3JpcHRvclNldCB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VGaWxlRGVzY3JpcHRvclNldCgpO1xuICAgIG1lc3NhZ2UuZmlsZSA9IG9iamVjdC5maWxlPy5tYXAoKGUpID0+IEZpbGVEZXNjcmlwdG9yUHJvdG8uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZUZpbGVEZXNjcmlwdG9yUHJvdG8oKTogRmlsZURlc2NyaXB0b3JQcm90byB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJcIixcbiAgICBwYWNrYWdlOiBcIlwiLFxuICAgIGRlcGVuZGVuY3k6IFtdLFxuICAgIHB1YmxpY0RlcGVuZGVuY3k6IFtdLFxuICAgIHdlYWtEZXBlbmRlbmN5OiBbXSxcbiAgICBtZXNzYWdlVHlwZTogW10sXG4gICAgZW51bVR5cGU6IFtdLFxuICAgIHNlcnZpY2U6IFtdLFxuICAgIGV4dGVuc2lvbjogW10sXG4gICAgb3B0aW9uczogdW5kZWZpbmVkLFxuICAgIHNvdXJjZUNvZGVJbmZvOiB1bmRlZmluZWQsXG4gICAgc3ludGF4OiBcIlwiLFxuICAgIGVkaXRpb246IFwiXCIsXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBGaWxlRGVzY3JpcHRvclByb3RvID0ge1xuICBlbmNvZGUobWVzc2FnZTogRmlsZURlc2NyaXB0b3JQcm90bywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLm5hbWUgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLm5hbWUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWNrYWdlICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE4KS5zdHJpbmcobWVzc2FnZS5wYWNrYWdlKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UuZGVwZW5kZW5jeSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNikuc3RyaW5nKHYhKTtcbiAgICB9XG4gICAgd3JpdGVyLnVpbnQzMig4MikuZm9yaygpO1xuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnB1YmxpY0RlcGVuZGVuY3kpIHtcbiAgICAgIHdyaXRlci5pbnQzMih2KTtcbiAgICB9XG4gICAgd3JpdGVyLmxkZWxpbSgpO1xuICAgIHdyaXRlci51aW50MzIoOTApLmZvcmsoKTtcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS53ZWFrRGVwZW5kZW5jeSkge1xuICAgICAgd3JpdGVyLmludDMyKHYpO1xuICAgIH1cbiAgICB3cml0ZXIubGRlbGltKCk7XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UubWVzc2FnZVR5cGUpIHtcbiAgICAgIERlc2NyaXB0b3JQcm90by5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLmVudW1UeXBlKSB7XG4gICAgICBFbnVtRGVzY3JpcHRvclByb3RvLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2Uuc2VydmljZSkge1xuICAgICAgU2VydmljZURlc2NyaXB0b3JQcm90by5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLmV4dGVuc2lvbikge1xuICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG8uZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIEZpbGVPcHRpb25zLmVuY29kZShtZXNzYWdlLm9wdGlvbnMsIHdyaXRlci51aW50MzIoNjYpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNvdXJjZUNvZGVJbmZvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFNvdXJjZUNvZGVJbmZvLmVuY29kZShtZXNzYWdlLnNvdXJjZUNvZGVJbmZvLCB3cml0ZXIudWludDMyKDc0KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zeW50YXggIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOTgpLnN0cmluZyhtZXNzYWdlLnN5bnRheCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmVkaXRpb24gIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTA2KS5zdHJpbmcobWVzc2FnZS5lZGl0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBGaWxlRGVzY3JpcHRvclByb3RvIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUZpbGVEZXNjcmlwdG9yUHJvdG8oKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5wYWNrYWdlID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZGVwZW5kZW5jeS5wdXNoKHJlYWRlci5zdHJpbmcoKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgaWYgKHRhZyA9PT0gODApIHtcbiAgICAgICAgICAgIG1lc3NhZ2UucHVibGljRGVwZW5kZW5jeS5wdXNoKHJlYWRlci5pbnQzMigpKTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRhZyA9PT0gODIpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZDIgPSByZWFkZXIudWludDMyKCkgKyByZWFkZXIucG9zO1xuICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQyKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UucHVibGljRGVwZW5kZW5jeS5wdXNoKHJlYWRlci5pbnQzMigpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgaWYgKHRhZyA9PT0gODgpIHtcbiAgICAgICAgICAgIG1lc3NhZ2Uud2Vha0RlcGVuZGVuY3kucHVzaChyZWFkZXIuaW50MzIoKSk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0YWcgPT09IDkwKSB7XG4gICAgICAgICAgICBjb25zdCBlbmQyID0gcmVhZGVyLnVpbnQzMigpICsgcmVhZGVyLnBvcztcbiAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kMikge1xuICAgICAgICAgICAgICBtZXNzYWdlLndlYWtEZXBlbmRlbmN5LnB1c2gocmVhZGVyLmludDMyKCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGlmICh0YWcgIT09IDM0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm1lc3NhZ2VUeXBlLnB1c2goRGVzY3JpcHRvclByb3RvLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNDIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZW51bVR5cGUucHVzaChFbnVtRGVzY3JpcHRvclByb3RvLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uuc2VydmljZS5wdXNoKFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBpZiAodGFnICE9PSA1OCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5leHRlbnNpb24ucHVzaChGaWVsZERlc2NyaXB0b3JQcm90by5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIGlmICh0YWcgIT09IDY2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm9wdGlvbnMgPSBGaWxlT3B0aW9ucy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNzQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uuc291cmNlQ29kZUluZm8gPSBTb3VyY2VDb2RlSW5mby5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIGlmICh0YWcgIT09IDk4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnN5bnRheCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMDYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZWRpdGlvbiA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IEZpbGVEZXNjcmlwdG9yUHJvdG8ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBpc1NldChvYmplY3QubmFtZSkgPyBTdHJpbmcob2JqZWN0Lm5hbWUpIDogXCJcIixcbiAgICAgIHBhY2thZ2U6IGlzU2V0KG9iamVjdC5wYWNrYWdlKSA/IFN0cmluZyhvYmplY3QucGFja2FnZSkgOiBcIlwiLFxuICAgICAgZGVwZW5kZW5jeTogQXJyYXkuaXNBcnJheShvYmplY3Q/LmRlcGVuZGVuY3kpID8gb2JqZWN0LmRlcGVuZGVuY3kubWFwKChlOiBhbnkpID0+IFN0cmluZyhlKSkgOiBbXSxcbiAgICAgIHB1YmxpY0RlcGVuZGVuY3k6IEFycmF5LmlzQXJyYXkob2JqZWN0Py5wdWJsaWNEZXBlbmRlbmN5KVxuICAgICAgICA/IG9iamVjdC5wdWJsaWNEZXBlbmRlbmN5Lm1hcCgoZTogYW55KSA9PiBOdW1iZXIoZSkpXG4gICAgICAgIDogW10sXG4gICAgICB3ZWFrRGVwZW5kZW5jeTogQXJyYXkuaXNBcnJheShvYmplY3Q/LndlYWtEZXBlbmRlbmN5KSA/IG9iamVjdC53ZWFrRGVwZW5kZW5jeS5tYXAoKGU6IGFueSkgPT4gTnVtYmVyKGUpKSA6IFtdLFxuICAgICAgbWVzc2FnZVR5cGU6IEFycmF5LmlzQXJyYXkob2JqZWN0Py5tZXNzYWdlVHlwZSlcbiAgICAgICAgPyBvYmplY3QubWVzc2FnZVR5cGUubWFwKChlOiBhbnkpID0+IERlc2NyaXB0b3JQcm90by5mcm9tSlNPTihlKSlcbiAgICAgICAgOiBbXSxcbiAgICAgIGVudW1UeXBlOiBBcnJheS5pc0FycmF5KG9iamVjdD8uZW51bVR5cGUpID8gb2JqZWN0LmVudW1UeXBlLm1hcCgoZTogYW55KSA9PiBFbnVtRGVzY3JpcHRvclByb3RvLmZyb21KU09OKGUpKSA6IFtdLFxuICAgICAgc2VydmljZTogQXJyYXkuaXNBcnJheShvYmplY3Q/LnNlcnZpY2UpID8gb2JqZWN0LnNlcnZpY2UubWFwKChlOiBhbnkpID0+IFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8uZnJvbUpTT04oZSkpIDogW10sXG4gICAgICBleHRlbnNpb246IEFycmF5LmlzQXJyYXkob2JqZWN0Py5leHRlbnNpb24pXG4gICAgICAgID8gb2JqZWN0LmV4dGVuc2lvbi5tYXAoKGU6IGFueSkgPT4gRmllbGREZXNjcmlwdG9yUHJvdG8uZnJvbUpTT04oZSkpXG4gICAgICAgIDogW10sXG4gICAgICBvcHRpb25zOiBpc1NldChvYmplY3Qub3B0aW9ucykgPyBGaWxlT3B0aW9ucy5mcm9tSlNPTihvYmplY3Qub3B0aW9ucykgOiB1bmRlZmluZWQsXG4gICAgICBzb3VyY2VDb2RlSW5mbzogaXNTZXQob2JqZWN0LnNvdXJjZUNvZGVJbmZvKSA/IFNvdXJjZUNvZGVJbmZvLmZyb21KU09OKG9iamVjdC5zb3VyY2VDb2RlSW5mbykgOiB1bmRlZmluZWQsXG4gICAgICBzeW50YXg6IGlzU2V0KG9iamVjdC5zeW50YXgpID8gU3RyaW5nKG9iamVjdC5zeW50YXgpIDogXCJcIixcbiAgICAgIGVkaXRpb246IGlzU2V0KG9iamVjdC5lZGl0aW9uKSA/IFN0cmluZyhvYmplY3QuZWRpdGlvbikgOiBcIlwiLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IEZpbGVEZXNjcmlwdG9yUHJvdG8pOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIG1lc3NhZ2UubmFtZSAhPT0gdW5kZWZpbmVkICYmIChvYmoubmFtZSA9IG1lc3NhZ2UubmFtZSk7XG4gICAgbWVzc2FnZS5wYWNrYWdlICE9PSB1bmRlZmluZWQgJiYgKG9iai5wYWNrYWdlID0gbWVzc2FnZS5wYWNrYWdlKTtcbiAgICBpZiAobWVzc2FnZS5kZXBlbmRlbmN5KSB7XG4gICAgICBvYmouZGVwZW5kZW5jeSA9IG1lc3NhZ2UuZGVwZW5kZW5jeS5tYXAoKGUpID0+IGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmouZGVwZW5kZW5jeSA9IFtdO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wdWJsaWNEZXBlbmRlbmN5KSB7XG4gICAgICBvYmoucHVibGljRGVwZW5kZW5jeSA9IG1lc3NhZ2UucHVibGljRGVwZW5kZW5jeS5tYXAoKGUpID0+IE1hdGgucm91bmQoZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmoucHVibGljRGVwZW5kZW5jeSA9IFtdO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS53ZWFrRGVwZW5kZW5jeSkge1xuICAgICAgb2JqLndlYWtEZXBlbmRlbmN5ID0gbWVzc2FnZS53ZWFrRGVwZW5kZW5jeS5tYXAoKGUpID0+IE1hdGgucm91bmQoZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmoud2Vha0RlcGVuZGVuY3kgPSBbXTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWVzc2FnZVR5cGUpIHtcbiAgICAgIG9iai5tZXNzYWdlVHlwZSA9IG1lc3NhZ2UubWVzc2FnZVR5cGUubWFwKChlKSA9PiBlID8gRGVzY3JpcHRvclByb3RvLnRvSlNPTihlKSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5tZXNzYWdlVHlwZSA9IFtdO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5lbnVtVHlwZSkge1xuICAgICAgb2JqLmVudW1UeXBlID0gbWVzc2FnZS5lbnVtVHlwZS5tYXAoKGUpID0+IGUgPyBFbnVtRGVzY3JpcHRvclByb3RvLnRvSlNPTihlKSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5lbnVtVHlwZSA9IFtdO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zZXJ2aWNlKSB7XG4gICAgICBvYmouc2VydmljZSA9IG1lc3NhZ2Uuc2VydmljZS5tYXAoKGUpID0+IGUgPyBTZXJ2aWNlRGVzY3JpcHRvclByb3RvLnRvSlNPTihlKSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5zZXJ2aWNlID0gW107XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmV4dGVuc2lvbikge1xuICAgICAgb2JqLmV4dGVuc2lvbiA9IG1lc3NhZ2UuZXh0ZW5zaW9uLm1hcCgoZSkgPT4gZSA/IEZpZWxkRGVzY3JpcHRvclByb3RvLnRvSlNPTihlKSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5leHRlbnNpb24gPSBbXTtcbiAgICB9XG4gICAgbWVzc2FnZS5vcHRpb25zICE9PSB1bmRlZmluZWQgJiYgKG9iai5vcHRpb25zID0gbWVzc2FnZS5vcHRpb25zID8gRmlsZU9wdGlvbnMudG9KU09OKG1lc3NhZ2Uub3B0aW9ucykgOiB1bmRlZmluZWQpO1xuICAgIG1lc3NhZ2Uuc291cmNlQ29kZUluZm8gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgKG9iai5zb3VyY2VDb2RlSW5mbyA9IG1lc3NhZ2Uuc291cmNlQ29kZUluZm8gPyBTb3VyY2VDb2RlSW5mby50b0pTT04obWVzc2FnZS5zb3VyY2VDb2RlSW5mbykgOiB1bmRlZmluZWQpO1xuICAgIG1lc3NhZ2Uuc3ludGF4ICE9PSB1bmRlZmluZWQgJiYgKG9iai5zeW50YXggPSBtZXNzYWdlLnN5bnRheCk7XG4gICAgbWVzc2FnZS5lZGl0aW9uICE9PSB1bmRlZmluZWQgJiYgKG9iai5lZGl0aW9uID0gbWVzc2FnZS5lZGl0aW9uKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8RmlsZURlc2NyaXB0b3JQcm90bz4pOiBGaWxlRGVzY3JpcHRvclByb3RvIHtcbiAgICByZXR1cm4gRmlsZURlc2NyaXB0b3JQcm90by5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPEZpbGVEZXNjcmlwdG9yUHJvdG8+KTogRmlsZURlc2NyaXB0b3JQcm90byB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VGaWxlRGVzY3JpcHRvclByb3RvKCk7XG4gICAgbWVzc2FnZS5uYW1lID0gb2JqZWN0Lm5hbWUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLnBhY2thZ2UgPSBvYmplY3QucGFja2FnZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2UuZGVwZW5kZW5jeSA9IG9iamVjdC5kZXBlbmRlbmN5Py5tYXAoKGUpID0+IGUpIHx8IFtdO1xuICAgIG1lc3NhZ2UucHVibGljRGVwZW5kZW5jeSA9IG9iamVjdC5wdWJsaWNEZXBlbmRlbmN5Py5tYXAoKGUpID0+IGUpIHx8IFtdO1xuICAgIG1lc3NhZ2Uud2Vha0RlcGVuZGVuY3kgPSBvYmplY3Qud2Vha0RlcGVuZGVuY3k/Lm1hcCgoZSkgPT4gZSkgfHwgW107XG4gICAgbWVzc2FnZS5tZXNzYWdlVHlwZSA9IG9iamVjdC5tZXNzYWdlVHlwZT8ubWFwKChlKSA9PiBEZXNjcmlwdG9yUHJvdG8uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIG1lc3NhZ2UuZW51bVR5cGUgPSBvYmplY3QuZW51bVR5cGU/Lm1hcCgoZSkgPT4gRW51bURlc2NyaXB0b3JQcm90by5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgbWVzc2FnZS5zZXJ2aWNlID0gb2JqZWN0LnNlcnZpY2U/Lm1hcCgoZSkgPT4gU2VydmljZURlc2NyaXB0b3JQcm90by5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgbWVzc2FnZS5leHRlbnNpb24gPSBvYmplY3QuZXh0ZW5zaW9uPy5tYXAoKGUpID0+IEZpZWxkRGVzY3JpcHRvclByb3RvLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICBtZXNzYWdlLm9wdGlvbnMgPSAob2JqZWN0Lm9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvYmplY3Qub3B0aW9ucyAhPT0gbnVsbClcbiAgICAgID8gRmlsZU9wdGlvbnMuZnJvbVBhcnRpYWwob2JqZWN0Lm9wdGlvbnMpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBtZXNzYWdlLnNvdXJjZUNvZGVJbmZvID0gKG9iamVjdC5zb3VyY2VDb2RlSW5mbyAhPT0gdW5kZWZpbmVkICYmIG9iamVjdC5zb3VyY2VDb2RlSW5mbyAhPT0gbnVsbClcbiAgICAgID8gU291cmNlQ29kZUluZm8uZnJvbVBhcnRpYWwob2JqZWN0LnNvdXJjZUNvZGVJbmZvKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgbWVzc2FnZS5zeW50YXggPSBvYmplY3Quc3ludGF4ID8/IFwiXCI7XG4gICAgbWVzc2FnZS5lZGl0aW9uID0gb2JqZWN0LmVkaXRpb24gPz8gXCJcIjtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VEZXNjcmlwdG9yUHJvdG8oKTogRGVzY3JpcHRvclByb3RvIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBcIlwiLFxuICAgIGZpZWxkOiBbXSxcbiAgICBleHRlbnNpb246IFtdLFxuICAgIG5lc3RlZFR5cGU6IFtdLFxuICAgIGVudW1UeXBlOiBbXSxcbiAgICBleHRlbnNpb25SYW5nZTogW10sXG4gICAgb25lb2ZEZWNsOiBbXSxcbiAgICBvcHRpb25zOiB1bmRlZmluZWQsXG4gICAgcmVzZXJ2ZWRSYW5nZTogW10sXG4gICAgcmVzZXJ2ZWROYW1lOiBbXSxcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IERlc2NyaXB0b3JQcm90byA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IERlc2NyaXB0b3JQcm90bywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLm5hbWUgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLm5hbWUpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5maWVsZCkge1xuICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG8uZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5leHRlbnNpb24pIHtcbiAgICAgIEZpZWxkRGVzY3JpcHRvclByb3RvLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UubmVzdGVkVHlwZSkge1xuICAgICAgRGVzY3JpcHRvclByb3RvLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UuZW51bVR5cGUpIHtcbiAgICAgIEVudW1EZXNjcmlwdG9yUHJvdG8uZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5leHRlbnNpb25SYW5nZSkge1xuICAgICAgRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2Uub25lb2ZEZWNsKSB7XG4gICAgICBPbmVvZkRlc2NyaXB0b3JQcm90by5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoNjYpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgTWVzc2FnZU9wdGlvbnMuZW5jb2RlKG1lc3NhZ2Uub3B0aW9ucywgd3JpdGVyLnVpbnQzMig1OCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UucmVzZXJ2ZWRSYW5nZSkge1xuICAgICAgRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2UuZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDc0KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5yZXNlcnZlZE5hbWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoODIpLnN0cmluZyh2ISk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogRGVzY3JpcHRvclByb3RvIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZURlc2NyaXB0b3JQcm90bygpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmICh0YWcgIT09IDE4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmZpZWxkLnB1c2goRmllbGREZXNjcmlwdG9yUHJvdG8uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBpZiAodGFnICE9PSA1MCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5leHRlbnNpb24ucHVzaChGaWVsZERlc2NyaXB0b3JQcm90by5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGlmICh0YWcgIT09IDI2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm5lc3RlZFR5cGUucHVzaChEZXNjcmlwdG9yUHJvdG8uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBpZiAodGFnICE9PSAzNCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5lbnVtVHlwZS5wdXNoKEVudW1EZXNjcmlwdG9yUHJvdG8uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBpZiAodGFnICE9PSA0Mikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5leHRlbnNpb25SYW5nZS5wdXNoKERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIGlmICh0YWcgIT09IDY2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm9uZW9mRGVjbC5wdXNoKE9uZW9mRGVzY3JpcHRvclByb3RvLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNTgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uub3B0aW9ucyA9IE1lc3NhZ2VPcHRpb25zLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBpZiAodGFnICE9PSA3NCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5yZXNlcnZlZFJhbmdlLnB1c2goRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2UuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gODIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UucmVzZXJ2ZWROYW1lLnB1c2gocmVhZGVyLnN0cmluZygpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IERlc2NyaXB0b3JQcm90byB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IGlzU2V0KG9iamVjdC5uYW1lKSA/IFN0cmluZyhvYmplY3QubmFtZSkgOiBcIlwiLFxuICAgICAgZmllbGQ6IEFycmF5LmlzQXJyYXkob2JqZWN0Py5maWVsZCkgPyBvYmplY3QuZmllbGQubWFwKChlOiBhbnkpID0+IEZpZWxkRGVzY3JpcHRvclByb3RvLmZyb21KU09OKGUpKSA6IFtdLFxuICAgICAgZXh0ZW5zaW9uOiBBcnJheS5pc0FycmF5KG9iamVjdD8uZXh0ZW5zaW9uKVxuICAgICAgICA/IG9iamVjdC5leHRlbnNpb24ubWFwKChlOiBhbnkpID0+IEZpZWxkRGVzY3JpcHRvclByb3RvLmZyb21KU09OKGUpKVxuICAgICAgICA6IFtdLFxuICAgICAgbmVzdGVkVHlwZTogQXJyYXkuaXNBcnJheShvYmplY3Q/Lm5lc3RlZFR5cGUpXG4gICAgICAgID8gb2JqZWN0Lm5lc3RlZFR5cGUubWFwKChlOiBhbnkpID0+IERlc2NyaXB0b3JQcm90by5mcm9tSlNPTihlKSlcbiAgICAgICAgOiBbXSxcbiAgICAgIGVudW1UeXBlOiBBcnJheS5pc0FycmF5KG9iamVjdD8uZW51bVR5cGUpID8gb2JqZWN0LmVudW1UeXBlLm1hcCgoZTogYW55KSA9PiBFbnVtRGVzY3JpcHRvclByb3RvLmZyb21KU09OKGUpKSA6IFtdLFxuICAgICAgZXh0ZW5zaW9uUmFuZ2U6IEFycmF5LmlzQXJyYXkob2JqZWN0Py5leHRlbnNpb25SYW5nZSlcbiAgICAgICAgPyBvYmplY3QuZXh0ZW5zaW9uUmFuZ2UubWFwKChlOiBhbnkpID0+IERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZS5mcm9tSlNPTihlKSlcbiAgICAgICAgOiBbXSxcbiAgICAgIG9uZW9mRGVjbDogQXJyYXkuaXNBcnJheShvYmplY3Q/Lm9uZW9mRGVjbClcbiAgICAgICAgPyBvYmplY3Qub25lb2ZEZWNsLm1hcCgoZTogYW55KSA9PiBPbmVvZkRlc2NyaXB0b3JQcm90by5mcm9tSlNPTihlKSlcbiAgICAgICAgOiBbXSxcbiAgICAgIG9wdGlvbnM6IGlzU2V0KG9iamVjdC5vcHRpb25zKSA/IE1lc3NhZ2VPcHRpb25zLmZyb21KU09OKG9iamVjdC5vcHRpb25zKSA6IHVuZGVmaW5lZCxcbiAgICAgIHJlc2VydmVkUmFuZ2U6IEFycmF5LmlzQXJyYXkob2JqZWN0Py5yZXNlcnZlZFJhbmdlKVxuICAgICAgICA/IG9iamVjdC5yZXNlcnZlZFJhbmdlLm1hcCgoZTogYW55KSA9PiBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZS5mcm9tSlNPTihlKSlcbiAgICAgICAgOiBbXSxcbiAgICAgIHJlc2VydmVkTmFtZTogQXJyYXkuaXNBcnJheShvYmplY3Q/LnJlc2VydmVkTmFtZSkgPyBvYmplY3QucmVzZXJ2ZWROYW1lLm1hcCgoZTogYW55KSA9PiBTdHJpbmcoZSkpIDogW10sXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogRGVzY3JpcHRvclByb3RvKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBtZXNzYWdlLm5hbWUgIT09IHVuZGVmaW5lZCAmJiAob2JqLm5hbWUgPSBtZXNzYWdlLm5hbWUpO1xuICAgIGlmIChtZXNzYWdlLmZpZWxkKSB7XG4gICAgICBvYmouZmllbGQgPSBtZXNzYWdlLmZpZWxkLm1hcCgoZSkgPT4gZSA/IEZpZWxkRGVzY3JpcHRvclByb3RvLnRvSlNPTihlKSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5maWVsZCA9IFtdO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5leHRlbnNpb24pIHtcbiAgICAgIG9iai5leHRlbnNpb24gPSBtZXNzYWdlLmV4dGVuc2lvbi5tYXAoKGUpID0+IGUgPyBGaWVsZERlc2NyaXB0b3JQcm90by50b0pTT04oZSkgOiB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmouZXh0ZW5zaW9uID0gW107XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm5lc3RlZFR5cGUpIHtcbiAgICAgIG9iai5uZXN0ZWRUeXBlID0gbWVzc2FnZS5uZXN0ZWRUeXBlLm1hcCgoZSkgPT4gZSA/IERlc2NyaXB0b3JQcm90by50b0pTT04oZSkgOiB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmoubmVzdGVkVHlwZSA9IFtdO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5lbnVtVHlwZSkge1xuICAgICAgb2JqLmVudW1UeXBlID0gbWVzc2FnZS5lbnVtVHlwZS5tYXAoKGUpID0+IGUgPyBFbnVtRGVzY3JpcHRvclByb3RvLnRvSlNPTihlKSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5lbnVtVHlwZSA9IFtdO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5leHRlbnNpb25SYW5nZSkge1xuICAgICAgb2JqLmV4dGVuc2lvblJhbmdlID0gbWVzc2FnZS5leHRlbnNpb25SYW5nZS5tYXAoKGUpID0+IGUgPyBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2UudG9KU09OKGUpIDogdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLmV4dGVuc2lvblJhbmdlID0gW107XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9uZW9mRGVjbCkge1xuICAgICAgb2JqLm9uZW9mRGVjbCA9IG1lc3NhZ2Uub25lb2ZEZWNsLm1hcCgoZSkgPT4gZSA/IE9uZW9mRGVzY3JpcHRvclByb3RvLnRvSlNPTihlKSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5vbmVvZkRlY2wgPSBbXTtcbiAgICB9XG4gICAgbWVzc2FnZS5vcHRpb25zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIChvYmoub3B0aW9ucyA9IG1lc3NhZ2Uub3B0aW9ucyA/IE1lc3NhZ2VPcHRpb25zLnRvSlNPTihtZXNzYWdlLm9wdGlvbnMpIDogdW5kZWZpbmVkKTtcbiAgICBpZiAobWVzc2FnZS5yZXNlcnZlZFJhbmdlKSB7XG4gICAgICBvYmoucmVzZXJ2ZWRSYW5nZSA9IG1lc3NhZ2UucmVzZXJ2ZWRSYW5nZS5tYXAoKGUpID0+IGUgPyBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZS50b0pTT04oZSkgOiB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmoucmVzZXJ2ZWRSYW5nZSA9IFtdO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5yZXNlcnZlZE5hbWUpIHtcbiAgICAgIG9iai5yZXNlcnZlZE5hbWUgPSBtZXNzYWdlLnJlc2VydmVkTmFtZS5tYXAoKGUpID0+IGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmoucmVzZXJ2ZWROYW1lID0gW107XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxEZXNjcmlwdG9yUHJvdG8+KTogRGVzY3JpcHRvclByb3RvIHtcbiAgICByZXR1cm4gRGVzY3JpcHRvclByb3RvLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8RGVzY3JpcHRvclByb3RvPik6IERlc2NyaXB0b3JQcm90byB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VEZXNjcmlwdG9yUHJvdG8oKTtcbiAgICBtZXNzYWdlLm5hbWUgPSBvYmplY3QubmFtZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2UuZmllbGQgPSBvYmplY3QuZmllbGQ/Lm1hcCgoZSkgPT4gRmllbGREZXNjcmlwdG9yUHJvdG8uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIG1lc3NhZ2UuZXh0ZW5zaW9uID0gb2JqZWN0LmV4dGVuc2lvbj8ubWFwKChlKSA9PiBGaWVsZERlc2NyaXB0b3JQcm90by5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgbWVzc2FnZS5uZXN0ZWRUeXBlID0gb2JqZWN0Lm5lc3RlZFR5cGU/Lm1hcCgoZSkgPT4gRGVzY3JpcHRvclByb3RvLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICBtZXNzYWdlLmVudW1UeXBlID0gb2JqZWN0LmVudW1UeXBlPy5tYXAoKGUpID0+IEVudW1EZXNjcmlwdG9yUHJvdG8uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIG1lc3NhZ2UuZXh0ZW5zaW9uUmFuZ2UgPSBvYmplY3QuZXh0ZW5zaW9uUmFuZ2U/Lm1hcCgoZSkgPT4gRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICBtZXNzYWdlLm9uZW9mRGVjbCA9IG9iamVjdC5vbmVvZkRlY2w/Lm1hcCgoZSkgPT4gT25lb2ZEZXNjcmlwdG9yUHJvdG8uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIG1lc3NhZ2Uub3B0aW9ucyA9IChvYmplY3Qub3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIG9iamVjdC5vcHRpb25zICE9PSBudWxsKVxuICAgICAgPyBNZXNzYWdlT3B0aW9ucy5mcm9tUGFydGlhbChvYmplY3Qub3B0aW9ucylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIG1lc3NhZ2UucmVzZXJ2ZWRSYW5nZSA9IG9iamVjdC5yZXNlcnZlZFJhbmdlPy5tYXAoKGUpID0+IERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICBtZXNzYWdlLnJlc2VydmVkTmFtZSA9IG9iamVjdC5yZXNlcnZlZE5hbWU/Lm1hcCgoZSkgPT4gZSkgfHwgW107XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlKCk6IERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSB7XG4gIHJldHVybiB7IHN0YXJ0OiAwLCBlbmQ6IDAsIG9wdGlvbnM6IHVuZGVmaW5lZCB9O1xufVxuXG5leHBvcnQgY29uc3QgRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlID0ge1xuICBlbmNvZGUobWVzc2FnZTogRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uuc3RhcnQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuaW50MzIobWVzc2FnZS5zdGFydCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmVuZCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuaW50MzIobWVzc2FnZS5lbmQpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIEV4dGVuc2lvblJhbmdlT3B0aW9ucy5lbmNvZGUobWVzc2FnZS5vcHRpb25zLCB3cml0ZXIudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2UoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uuc3RhcnQgPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmICh0YWcgIT09IDE2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmVuZCA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uub3B0aW9ucyA9IEV4dGVuc2lvblJhbmdlT3B0aW9ucy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IGlzU2V0KG9iamVjdC5zdGFydCkgPyBOdW1iZXIob2JqZWN0LnN0YXJ0KSA6IDAsXG4gICAgICBlbmQ6IGlzU2V0KG9iamVjdC5lbmQpID8gTnVtYmVyKG9iamVjdC5lbmQpIDogMCxcbiAgICAgIG9wdGlvbnM6IGlzU2V0KG9iamVjdC5vcHRpb25zKSA/IEV4dGVuc2lvblJhbmdlT3B0aW9ucy5mcm9tSlNPTihvYmplY3Qub3B0aW9ucykgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBtZXNzYWdlLnN0YXJ0ICE9PSB1bmRlZmluZWQgJiYgKG9iai5zdGFydCA9IE1hdGgucm91bmQobWVzc2FnZS5zdGFydCkpO1xuICAgIG1lc3NhZ2UuZW5kICE9PSB1bmRlZmluZWQgJiYgKG9iai5lbmQgPSBNYXRoLnJvdW5kKG1lc3NhZ2UuZW5kKSk7XG4gICAgbWVzc2FnZS5vcHRpb25zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIChvYmoub3B0aW9ucyA9IG1lc3NhZ2Uub3B0aW9ucyA/IEV4dGVuc2lvblJhbmdlT3B0aW9ucy50b0pTT04obWVzc2FnZS5vcHRpb25zKSA6IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZT4pOiBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2Uge1xuICAgIHJldHVybiBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2UuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG5cbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2U+KTogRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZURlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSgpO1xuICAgIG1lc3NhZ2Uuc3RhcnQgPSBvYmplY3Quc3RhcnQgPz8gMDtcbiAgICBtZXNzYWdlLmVuZCA9IG9iamVjdC5lbmQgPz8gMDtcbiAgICBtZXNzYWdlLm9wdGlvbnMgPSAob2JqZWN0Lm9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvYmplY3Qub3B0aW9ucyAhPT0gbnVsbClcbiAgICAgID8gRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLmZyb21QYXJ0aWFsKG9iamVjdC5vcHRpb25zKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2UoKTogRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2Uge1xuICByZXR1cm4geyBzdGFydDogMCwgZW5kOiAwIH07XG59XG5cbmV4cG9ydCBjb25zdCBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uuc3RhcnQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuaW50MzIobWVzc2FnZS5zdGFydCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmVuZCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuaW50MzIobWVzc2FnZS5lbmQpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZURlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSA4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnN0YXJ0ID0gcmVhZGVyLmludDMyKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5lbmQgPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlIHtcbiAgICByZXR1cm4geyBzdGFydDogaXNTZXQob2JqZWN0LnN0YXJ0KSA/IE51bWJlcihvYmplY3Quc3RhcnQpIDogMCwgZW5kOiBpc1NldChvYmplY3QuZW5kKSA/IE51bWJlcihvYmplY3QuZW5kKSA6IDAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2UpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIG1lc3NhZ2Uuc3RhcnQgIT09IHVuZGVmaW5lZCAmJiAob2JqLnN0YXJ0ID0gTWF0aC5yb3VuZChtZXNzYWdlLnN0YXJ0KSk7XG4gICAgbWVzc2FnZS5lbmQgIT09IHVuZGVmaW5lZCAmJiAob2JqLmVuZCA9IE1hdGgucm91bmQobWVzc2FnZS5lbmQpKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8RGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2U+KTogRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2Uge1xuICAgIHJldHVybiBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZS5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlPik6IERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZURlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlKCk7XG4gICAgbWVzc2FnZS5zdGFydCA9IG9iamVjdC5zdGFydCA/PyAwO1xuICAgIG1lc3NhZ2UuZW5kID0gb2JqZWN0LmVuZCA/PyAwO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZUV4dGVuc2lvblJhbmdlT3B0aW9ucygpOiBFeHRlbnNpb25SYW5nZU9wdGlvbnMge1xuICByZXR1cm4geyB1bmludGVycHJldGVkT3B0aW9uOiBbXSB9O1xufVxuXG5leHBvcnQgY29uc3QgRXh0ZW5zaW9uUmFuZ2VPcHRpb25zID0ge1xuICBlbmNvZGUobWVzc2FnZTogRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbikge1xuICAgICAgVW5pbnRlcnByZXRlZE9wdGlvbi5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoNzk5NCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBFeHRlbnNpb25SYW5nZU9wdGlvbnMge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRXh0ZW5zaW9uUmFuZ2VPcHRpb25zKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgOTk5OlxuICAgICAgICAgIGlmICh0YWcgIT09IDc5OTQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbi5wdXNoKFVuaW50ZXJwcmV0ZWRPcHRpb24uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBFeHRlbnNpb25SYW5nZU9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICB1bmludGVycHJldGVkT3B0aW9uOiBBcnJheS5pc0FycmF5KG9iamVjdD8udW5pbnRlcnByZXRlZE9wdGlvbilcbiAgICAgICAgPyBvYmplY3QudW5pbnRlcnByZXRlZE9wdGlvbi5tYXAoKGU6IGFueSkgPT4gVW5pbnRlcnByZXRlZE9wdGlvbi5mcm9tSlNPTihlKSlcbiAgICAgICAgOiBbXSxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBFeHRlbnNpb25SYW5nZU9wdGlvbnMpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24pIHtcbiAgICAgIG9iai51bmludGVycHJldGVkT3B0aW9uID0gbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uLm1hcCgoZSkgPT4gZSA/IFVuaW50ZXJwcmV0ZWRPcHRpb24udG9KU09OKGUpIDogdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLnVuaW50ZXJwcmV0ZWRPcHRpb24gPSBbXTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPEV4dGVuc2lvblJhbmdlT3B0aW9ucz4pOiBFeHRlbnNpb25SYW5nZU9wdGlvbnMge1xuICAgIHJldHVybiBFeHRlbnNpb25SYW5nZU9wdGlvbnMuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG5cbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxFeHRlbnNpb25SYW5nZU9wdGlvbnM+KTogRXh0ZW5zaW9uUmFuZ2VPcHRpb25zIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUV4dGVuc2lvblJhbmdlT3B0aW9ucygpO1xuICAgIG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbiA9IG9iamVjdC51bmludGVycHJldGVkT3B0aW9uPy5tYXAoKGUpID0+IFVuaW50ZXJwcmV0ZWRPcHRpb24uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZUZpZWxkRGVzY3JpcHRvclByb3RvKCk6IEZpZWxkRGVzY3JpcHRvclByb3RvIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBcIlwiLFxuICAgIG51bWJlcjogMCxcbiAgICBsYWJlbDogMSxcbiAgICB0eXBlOiAxLFxuICAgIHR5cGVOYW1lOiBcIlwiLFxuICAgIGV4dGVuZGVlOiBcIlwiLFxuICAgIGRlZmF1bHRWYWx1ZTogXCJcIixcbiAgICBvbmVvZkluZGV4OiAwLFxuICAgIGpzb25OYW1lOiBcIlwiLFxuICAgIG9wdGlvbnM6IHVuZGVmaW5lZCxcbiAgICBwcm90bzNPcHRpb25hbDogZmFsc2UsXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBGaWVsZERlc2NyaXB0b3JQcm90byA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IEZpZWxkRGVzY3JpcHRvclByb3RvLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UubmFtZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm51bWJlciAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuaW50MzIobWVzc2FnZS5udW1iZXIpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5sYWJlbCAhPT0gMSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzMikuaW50MzIobWVzc2FnZS5sYWJlbCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnR5cGUgIT09IDEpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDApLmludDMyKG1lc3NhZ2UudHlwZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnR5cGVOYW1lICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDUwKS5zdHJpbmcobWVzc2FnZS50eXBlTmFtZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmV4dGVuZGVlICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE4KS5zdHJpbmcobWVzc2FnZS5leHRlbmRlZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRlZmF1bHRWYWx1ZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMig1OCkuc3RyaW5nKG1lc3NhZ2UuZGVmYXVsdFZhbHVlKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub25lb2ZJbmRleCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig3MikuaW50MzIobWVzc2FnZS5vbmVvZkluZGV4KTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuanNvbk5hbWUgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoODIpLnN0cmluZyhtZXNzYWdlLmpzb25OYW1lKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBGaWVsZE9wdGlvbnMuZW5jb2RlKG1lc3NhZ2Uub3B0aW9ucywgd3JpdGVyLnVpbnQzMig2NikuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucHJvdG8zT3B0aW9uYWwgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTM2KS5ib29sKG1lc3NhZ2UucHJvdG8zT3B0aW9uYWwpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IEZpZWxkRGVzY3JpcHRvclByb3RvIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUZpZWxkRGVzY3JpcHRvclByb3RvKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubnVtYmVyID0gcmVhZGVyLmludDMyKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBpZiAodGFnICE9PSAzMikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5sYWJlbCA9IHJlYWRlci5pbnQzMigpIGFzIGFueTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGlmICh0YWcgIT09IDQwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnR5cGUgPSByZWFkZXIuaW50MzIoKSBhcyBhbnk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBpZiAodGFnICE9PSA1MCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS50eXBlTmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmICh0YWcgIT09IDE4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmV4dGVuZGVlID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNTgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZGVmYXVsdFZhbHVlID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNzIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uub25lb2ZJbmRleCA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIGlmICh0YWcgIT09IDgyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmpzb25OYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNjYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uub3B0aW9ucyA9IEZpZWxkT3B0aW9ucy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgIGlmICh0YWcgIT09IDEzNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5wcm90bzNPcHRpb25hbCA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBGaWVsZERlc2NyaXB0b3JQcm90byB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IGlzU2V0KG9iamVjdC5uYW1lKSA/IFN0cmluZyhvYmplY3QubmFtZSkgOiBcIlwiLFxuICAgICAgbnVtYmVyOiBpc1NldChvYmplY3QubnVtYmVyKSA/IE51bWJlcihvYmplY3QubnVtYmVyKSA6IDAsXG4gICAgICBsYWJlbDogaXNTZXQob2JqZWN0LmxhYmVsKSA/IGZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsRnJvbUpTT04ob2JqZWN0LmxhYmVsKSA6IDEsXG4gICAgICB0eXBlOiBpc1NldChvYmplY3QudHlwZSkgPyBmaWVsZERlc2NyaXB0b3JQcm90b19UeXBlRnJvbUpTT04ob2JqZWN0LnR5cGUpIDogMSxcbiAgICAgIHR5cGVOYW1lOiBpc1NldChvYmplY3QudHlwZU5hbWUpID8gU3RyaW5nKG9iamVjdC50eXBlTmFtZSkgOiBcIlwiLFxuICAgICAgZXh0ZW5kZWU6IGlzU2V0KG9iamVjdC5leHRlbmRlZSkgPyBTdHJpbmcob2JqZWN0LmV4dGVuZGVlKSA6IFwiXCIsXG4gICAgICBkZWZhdWx0VmFsdWU6IGlzU2V0KG9iamVjdC5kZWZhdWx0VmFsdWUpID8gU3RyaW5nKG9iamVjdC5kZWZhdWx0VmFsdWUpIDogXCJcIixcbiAgICAgIG9uZW9mSW5kZXg6IGlzU2V0KG9iamVjdC5vbmVvZkluZGV4KSA/IE51bWJlcihvYmplY3Qub25lb2ZJbmRleCkgOiAwLFxuICAgICAganNvbk5hbWU6IGlzU2V0KG9iamVjdC5qc29uTmFtZSkgPyBTdHJpbmcob2JqZWN0Lmpzb25OYW1lKSA6IFwiXCIsXG4gICAgICBvcHRpb25zOiBpc1NldChvYmplY3Qub3B0aW9ucykgPyBGaWVsZE9wdGlvbnMuZnJvbUpTT04ob2JqZWN0Lm9wdGlvbnMpIDogdW5kZWZpbmVkLFxuICAgICAgcHJvdG8zT3B0aW9uYWw6IGlzU2V0KG9iamVjdC5wcm90bzNPcHRpb25hbCkgPyBCb29sZWFuKG9iamVjdC5wcm90bzNPcHRpb25hbCkgOiBmYWxzZSxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBGaWVsZERlc2NyaXB0b3JQcm90byk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgbWVzc2FnZS5uYW1lICE9PSB1bmRlZmluZWQgJiYgKG9iai5uYW1lID0gbWVzc2FnZS5uYW1lKTtcbiAgICBtZXNzYWdlLm51bWJlciAhPT0gdW5kZWZpbmVkICYmIChvYmoubnVtYmVyID0gTWF0aC5yb3VuZChtZXNzYWdlLm51bWJlcikpO1xuICAgIG1lc3NhZ2UubGFiZWwgIT09IHVuZGVmaW5lZCAmJiAob2JqLmxhYmVsID0gZmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWxUb0pTT04obWVzc2FnZS5sYWJlbCkpO1xuICAgIG1lc3NhZ2UudHlwZSAhPT0gdW5kZWZpbmVkICYmIChvYmoudHlwZSA9IGZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGVUb0pTT04obWVzc2FnZS50eXBlKSk7XG4gICAgbWVzc2FnZS50eXBlTmFtZSAhPT0gdW5kZWZpbmVkICYmIChvYmoudHlwZU5hbWUgPSBtZXNzYWdlLnR5cGVOYW1lKTtcbiAgICBtZXNzYWdlLmV4dGVuZGVlICE9PSB1bmRlZmluZWQgJiYgKG9iai5leHRlbmRlZSA9IG1lc3NhZ2UuZXh0ZW5kZWUpO1xuICAgIG1lc3NhZ2UuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgKG9iai5kZWZhdWx0VmFsdWUgPSBtZXNzYWdlLmRlZmF1bHRWYWx1ZSk7XG4gICAgbWVzc2FnZS5vbmVvZkluZGV4ICE9PSB1bmRlZmluZWQgJiYgKG9iai5vbmVvZkluZGV4ID0gTWF0aC5yb3VuZChtZXNzYWdlLm9uZW9mSW5kZXgpKTtcbiAgICBtZXNzYWdlLmpzb25OYW1lICE9PSB1bmRlZmluZWQgJiYgKG9iai5qc29uTmFtZSA9IG1lc3NhZ2UuanNvbk5hbWUpO1xuICAgIG1lc3NhZ2Uub3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIChvYmoub3B0aW9ucyA9IG1lc3NhZ2Uub3B0aW9ucyA/IEZpZWxkT3B0aW9ucy50b0pTT04obWVzc2FnZS5vcHRpb25zKSA6IHVuZGVmaW5lZCk7XG4gICAgbWVzc2FnZS5wcm90bzNPcHRpb25hbCAhPT0gdW5kZWZpbmVkICYmIChvYmoucHJvdG8zT3B0aW9uYWwgPSBtZXNzYWdlLnByb3RvM09wdGlvbmFsKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8RmllbGREZXNjcmlwdG9yUHJvdG8+KTogRmllbGREZXNjcmlwdG9yUHJvdG8ge1xuICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90by5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPEZpZWxkRGVzY3JpcHRvclByb3RvPik6IEZpZWxkRGVzY3JpcHRvclByb3RvIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUZpZWxkRGVzY3JpcHRvclByb3RvKCk7XG4gICAgbWVzc2FnZS5uYW1lID0gb2JqZWN0Lm5hbWUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLm51bWJlciA9IG9iamVjdC5udW1iZXIgPz8gMDtcbiAgICBtZXNzYWdlLmxhYmVsID0gb2JqZWN0LmxhYmVsID8/IDE7XG4gICAgbWVzc2FnZS50eXBlID0gb2JqZWN0LnR5cGUgPz8gMTtcbiAgICBtZXNzYWdlLnR5cGVOYW1lID0gb2JqZWN0LnR5cGVOYW1lID8/IFwiXCI7XG4gICAgbWVzc2FnZS5leHRlbmRlZSA9IG9iamVjdC5leHRlbmRlZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2UuZGVmYXVsdFZhbHVlID0gb2JqZWN0LmRlZmF1bHRWYWx1ZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2Uub25lb2ZJbmRleCA9IG9iamVjdC5vbmVvZkluZGV4ID8/IDA7XG4gICAgbWVzc2FnZS5qc29uTmFtZSA9IG9iamVjdC5qc29uTmFtZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2Uub3B0aW9ucyA9IChvYmplY3Qub3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIG9iamVjdC5vcHRpb25zICE9PSBudWxsKVxuICAgICAgPyBGaWVsZE9wdGlvbnMuZnJvbVBhcnRpYWwob2JqZWN0Lm9wdGlvbnMpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBtZXNzYWdlLnByb3RvM09wdGlvbmFsID0gb2JqZWN0LnByb3RvM09wdGlvbmFsID8/IGZhbHNlO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZU9uZW9mRGVzY3JpcHRvclByb3RvKCk6IE9uZW9mRGVzY3JpcHRvclByb3RvIHtcbiAgcmV0dXJuIHsgbmFtZTogXCJcIiwgb3B0aW9uczogdW5kZWZpbmVkIH07XG59XG5cbmV4cG9ydCBjb25zdCBPbmVvZkRlc2NyaXB0b3JQcm90byA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IE9uZW9mRGVzY3JpcHRvclByb3RvLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UubmFtZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgT25lb2ZPcHRpb25zLmVuY29kZShtZXNzYWdlLm9wdGlvbnMsIHdyaXRlci51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogT25lb2ZEZXNjcmlwdG9yUHJvdG8ge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlT25lb2ZEZXNjcmlwdG9yUHJvdG8oKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5vcHRpb25zID0gT25lb2ZPcHRpb25zLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBPbmVvZkRlc2NyaXB0b3JQcm90byB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IGlzU2V0KG9iamVjdC5uYW1lKSA/IFN0cmluZyhvYmplY3QubmFtZSkgOiBcIlwiLFxuICAgICAgb3B0aW9uczogaXNTZXQob2JqZWN0Lm9wdGlvbnMpID8gT25lb2ZPcHRpb25zLmZyb21KU09OKG9iamVjdC5vcHRpb25zKSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBPbmVvZkRlc2NyaXB0b3JQcm90byk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgbWVzc2FnZS5uYW1lICE9PSB1bmRlZmluZWQgJiYgKG9iai5uYW1lID0gbWVzc2FnZS5uYW1lKTtcbiAgICBtZXNzYWdlLm9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiAob2JqLm9wdGlvbnMgPSBtZXNzYWdlLm9wdGlvbnMgPyBPbmVvZk9wdGlvbnMudG9KU09OKG1lc3NhZ2Uub3B0aW9ucykgOiB1bmRlZmluZWQpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxPbmVvZkRlc2NyaXB0b3JQcm90bz4pOiBPbmVvZkRlc2NyaXB0b3JQcm90byB7XG4gICAgcmV0dXJuIE9uZW9mRGVzY3JpcHRvclByb3RvLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8T25lb2ZEZXNjcmlwdG9yUHJvdG8+KTogT25lb2ZEZXNjcmlwdG9yUHJvdG8ge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlT25lb2ZEZXNjcmlwdG9yUHJvdG8oKTtcbiAgICBtZXNzYWdlLm5hbWUgPSBvYmplY3QubmFtZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2Uub3B0aW9ucyA9IChvYmplY3Qub3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIG9iamVjdC5vcHRpb25zICE9PSBudWxsKVxuICAgICAgPyBPbmVvZk9wdGlvbnMuZnJvbVBhcnRpYWwob2JqZWN0Lm9wdGlvbnMpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VFbnVtRGVzY3JpcHRvclByb3RvKCk6IEVudW1EZXNjcmlwdG9yUHJvdG8ge1xuICByZXR1cm4geyBuYW1lOiBcIlwiLCB2YWx1ZTogW10sIG9wdGlvbnM6IHVuZGVmaW5lZCwgcmVzZXJ2ZWRSYW5nZTogW10sIHJlc2VydmVkTmFtZTogW10gfTtcbn1cblxuZXhwb3J0IGNvbnN0IEVudW1EZXNjcmlwdG9yUHJvdG8gPSB7XG4gIGVuY29kZShtZXNzYWdlOiBFbnVtRGVzY3JpcHRvclByb3RvLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UubmFtZSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnZhbHVlKSB7XG4gICAgICBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8uZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIEVudW1PcHRpb25zLmVuY29kZShtZXNzYWdlLm9wdGlvbnMsIHdyaXRlci51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnJlc2VydmVkUmFuZ2UpIHtcbiAgICAgIEVudW1EZXNjcmlwdG9yUHJvdG9fRW51bVJlc2VydmVkUmFuZ2UuZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5yZXNlcnZlZE5hbWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDIpLnN0cmluZyh2ISk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogRW51bURlc2NyaXB0b3JQcm90byB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VFbnVtRGVzY3JpcHRvclByb3RvKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UudmFsdWUucHVzaChFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5vcHRpb25zID0gRW51bU9wdGlvbnMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGlmICh0YWcgIT09IDM0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnJlc2VydmVkUmFuZ2UucHVzaChFbnVtRGVzY3JpcHRvclByb3RvX0VudW1SZXNlcnZlZFJhbmdlLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNDIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UucmVzZXJ2ZWROYW1lLnB1c2gocmVhZGVyLnN0cmluZygpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IEVudW1EZXNjcmlwdG9yUHJvdG8ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBpc1NldChvYmplY3QubmFtZSkgPyBTdHJpbmcob2JqZWN0Lm5hbWUpIDogXCJcIixcbiAgICAgIHZhbHVlOiBBcnJheS5pc0FycmF5KG9iamVjdD8udmFsdWUpID8gb2JqZWN0LnZhbHVlLm1hcCgoZTogYW55KSA9PiBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8uZnJvbUpTT04oZSkpIDogW10sXG4gICAgICBvcHRpb25zOiBpc1NldChvYmplY3Qub3B0aW9ucykgPyBFbnVtT3B0aW9ucy5mcm9tSlNPTihvYmplY3Qub3B0aW9ucykgOiB1bmRlZmluZWQsXG4gICAgICByZXNlcnZlZFJhbmdlOiBBcnJheS5pc0FycmF5KG9iamVjdD8ucmVzZXJ2ZWRSYW5nZSlcbiAgICAgICAgPyBvYmplY3QucmVzZXJ2ZWRSYW5nZS5tYXAoKGU6IGFueSkgPT4gRW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZS5mcm9tSlNPTihlKSlcbiAgICAgICAgOiBbXSxcbiAgICAgIHJlc2VydmVkTmFtZTogQXJyYXkuaXNBcnJheShvYmplY3Q/LnJlc2VydmVkTmFtZSkgPyBvYmplY3QucmVzZXJ2ZWROYW1lLm1hcCgoZTogYW55KSA9PiBTdHJpbmcoZSkpIDogW10sXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogRW51bURlc2NyaXB0b3JQcm90byk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgbWVzc2FnZS5uYW1lICE9PSB1bmRlZmluZWQgJiYgKG9iai5uYW1lID0gbWVzc2FnZS5uYW1lKTtcbiAgICBpZiAobWVzc2FnZS52YWx1ZSkge1xuICAgICAgb2JqLnZhbHVlID0gbWVzc2FnZS52YWx1ZS5tYXAoKGUpID0+IGUgPyBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8udG9KU09OKGUpIDogdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLnZhbHVlID0gW107XG4gICAgfVxuICAgIG1lc3NhZ2Uub3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIChvYmoub3B0aW9ucyA9IG1lc3NhZ2Uub3B0aW9ucyA/IEVudW1PcHRpb25zLnRvSlNPTihtZXNzYWdlLm9wdGlvbnMpIDogdW5kZWZpbmVkKTtcbiAgICBpZiAobWVzc2FnZS5yZXNlcnZlZFJhbmdlKSB7XG4gICAgICBvYmoucmVzZXJ2ZWRSYW5nZSA9IG1lc3NhZ2UucmVzZXJ2ZWRSYW5nZS5tYXAoKGUpID0+XG4gICAgICAgIGUgPyBFbnVtRGVzY3JpcHRvclByb3RvX0VudW1SZXNlcnZlZFJhbmdlLnRvSlNPTihlKSA6IHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLnJlc2VydmVkUmFuZ2UgPSBbXTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucmVzZXJ2ZWROYW1lKSB7XG4gICAgICBvYmoucmVzZXJ2ZWROYW1lID0gbWVzc2FnZS5yZXNlcnZlZE5hbWUubWFwKChlKSA9PiBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLnJlc2VydmVkTmFtZSA9IFtdO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8RW51bURlc2NyaXB0b3JQcm90bz4pOiBFbnVtRGVzY3JpcHRvclByb3RvIHtcbiAgICByZXR1cm4gRW51bURlc2NyaXB0b3JQcm90by5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPEVudW1EZXNjcmlwdG9yUHJvdG8+KTogRW51bURlc2NyaXB0b3JQcm90byB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VFbnVtRGVzY3JpcHRvclByb3RvKCk7XG4gICAgbWVzc2FnZS5uYW1lID0gb2JqZWN0Lm5hbWUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLnZhbHVlID0gb2JqZWN0LnZhbHVlPy5tYXAoKGUpID0+IEVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgbWVzc2FnZS5vcHRpb25zID0gKG9iamVjdC5vcHRpb25zICE9PSB1bmRlZmluZWQgJiYgb2JqZWN0Lm9wdGlvbnMgIT09IG51bGwpXG4gICAgICA/IEVudW1PcHRpb25zLmZyb21QYXJ0aWFsKG9iamVjdC5vcHRpb25zKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgbWVzc2FnZS5yZXNlcnZlZFJhbmdlID0gb2JqZWN0LnJlc2VydmVkUmFuZ2U/Lm1hcCgoZSkgPT4gRW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZS5mcm9tUGFydGlhbChlKSkgfHxcbiAgICAgIFtdO1xuICAgIG1lc3NhZ2UucmVzZXJ2ZWROYW1lID0gb2JqZWN0LnJlc2VydmVkTmFtZT8ubWFwKChlKSA9PiBlKSB8fCBbXTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VFbnVtRGVzY3JpcHRvclByb3RvX0VudW1SZXNlcnZlZFJhbmdlKCk6IEVudW1EZXNjcmlwdG9yUHJvdG9fRW51bVJlc2VydmVkUmFuZ2Uge1xuICByZXR1cm4geyBzdGFydDogMCwgZW5kOiAwIH07XG59XG5cbmV4cG9ydCBjb25zdCBFbnVtRGVzY3JpcHRvclByb3RvX0VudW1SZXNlcnZlZFJhbmdlID0ge1xuICBlbmNvZGUobWVzc2FnZTogRW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnN0YXJ0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmludDMyKG1lc3NhZ2Uuc3RhcnQpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5lbmQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmludDMyKG1lc3NhZ2UuZW5kKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBFbnVtRGVzY3JpcHRvclByb3RvX0VudW1SZXNlcnZlZFJhbmdlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUVudW1EZXNjcmlwdG9yUHJvdG9fRW51bVJlc2VydmVkUmFuZ2UoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uuc3RhcnQgPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmICh0YWcgIT09IDE2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmVuZCA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogRW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZSB7XG4gICAgcmV0dXJuIHsgc3RhcnQ6IGlzU2V0KG9iamVjdC5zdGFydCkgPyBOdW1iZXIob2JqZWN0LnN0YXJ0KSA6IDAsIGVuZDogaXNTZXQob2JqZWN0LmVuZCkgPyBOdW1iZXIob2JqZWN0LmVuZCkgOiAwIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IEVudW1EZXNjcmlwdG9yUHJvdG9fRW51bVJlc2VydmVkUmFuZ2UpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIG1lc3NhZ2Uuc3RhcnQgIT09IHVuZGVmaW5lZCAmJiAob2JqLnN0YXJ0ID0gTWF0aC5yb3VuZChtZXNzYWdlLnN0YXJ0KSk7XG4gICAgbWVzc2FnZS5lbmQgIT09IHVuZGVmaW5lZCAmJiAob2JqLmVuZCA9IE1hdGgucm91bmQobWVzc2FnZS5lbmQpKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8RW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZT4pOiBFbnVtRGVzY3JpcHRvclByb3RvX0VudW1SZXNlcnZlZFJhbmdlIHtcbiAgICByZXR1cm4gRW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZS5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPEVudW1EZXNjcmlwdG9yUHJvdG9fRW51bVJlc2VydmVkUmFuZ2U+KTogRW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VFbnVtRGVzY3JpcHRvclByb3RvX0VudW1SZXNlcnZlZFJhbmdlKCk7XG4gICAgbWVzc2FnZS5zdGFydCA9IG9iamVjdC5zdGFydCA/PyAwO1xuICAgIG1lc3NhZ2UuZW5kID0gb2JqZWN0LmVuZCA/PyAwO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZUVudW1WYWx1ZURlc2NyaXB0b3JQcm90bygpOiBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ge1xuICByZXR1cm4geyBuYW1lOiBcIlwiLCBudW1iZXI6IDAsIG9wdGlvbnM6IHVuZGVmaW5lZCB9O1xufVxuXG5leHBvcnQgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvID0ge1xuICBlbmNvZGUobWVzc2FnZTogRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UubmFtZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm51bWJlciAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuaW50MzIobWVzc2FnZS5udW1iZXIpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIEVudW1WYWx1ZU9wdGlvbnMuZW5jb2RlKG1lc3NhZ2Uub3B0aW9ucywgd3JpdGVyLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRW51bVZhbHVlRGVzY3JpcHRvclByb3RvKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubnVtYmVyID0gcmVhZGVyLmludDMyKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5vcHRpb25zID0gRW51bVZhbHVlT3B0aW9ucy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogRW51bVZhbHVlRGVzY3JpcHRvclByb3RvIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogaXNTZXQob2JqZWN0Lm5hbWUpID8gU3RyaW5nKG9iamVjdC5uYW1lKSA6IFwiXCIsXG4gICAgICBudW1iZXI6IGlzU2V0KG9iamVjdC5udW1iZXIpID8gTnVtYmVyKG9iamVjdC5udW1iZXIpIDogMCxcbiAgICAgIG9wdGlvbnM6IGlzU2V0KG9iamVjdC5vcHRpb25zKSA/IEVudW1WYWx1ZU9wdGlvbnMuZnJvbUpTT04ob2JqZWN0Lm9wdGlvbnMpIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IEVudW1WYWx1ZURlc2NyaXB0b3JQcm90byk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgbWVzc2FnZS5uYW1lICE9PSB1bmRlZmluZWQgJiYgKG9iai5uYW1lID0gbWVzc2FnZS5uYW1lKTtcbiAgICBtZXNzYWdlLm51bWJlciAhPT0gdW5kZWZpbmVkICYmIChvYmoubnVtYmVyID0gTWF0aC5yb3VuZChtZXNzYWdlLm51bWJlcikpO1xuICAgIG1lc3NhZ2Uub3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAob2JqLm9wdGlvbnMgPSBtZXNzYWdlLm9wdGlvbnMgPyBFbnVtVmFsdWVPcHRpb25zLnRvSlNPTihtZXNzYWdlLm9wdGlvbnMpIDogdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8RW51bVZhbHVlRGVzY3JpcHRvclByb3RvPik6IEVudW1WYWx1ZURlc2NyaXB0b3JQcm90byB7XG4gICAgcmV0dXJuIEVudW1WYWx1ZURlc2NyaXB0b3JQcm90by5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPEVudW1WYWx1ZURlc2NyaXB0b3JQcm90bz4pOiBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRW51bVZhbHVlRGVzY3JpcHRvclByb3RvKCk7XG4gICAgbWVzc2FnZS5uYW1lID0gb2JqZWN0Lm5hbWUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLm51bWJlciA9IG9iamVjdC5udW1iZXIgPz8gMDtcbiAgICBtZXNzYWdlLm9wdGlvbnMgPSAob2JqZWN0Lm9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvYmplY3Qub3B0aW9ucyAhPT0gbnVsbClcbiAgICAgID8gRW51bVZhbHVlT3B0aW9ucy5mcm9tUGFydGlhbChvYmplY3Qub3B0aW9ucylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZVNlcnZpY2VEZXNjcmlwdG9yUHJvdG8oKTogU2VydmljZURlc2NyaXB0b3JQcm90byB7XG4gIHJldHVybiB7IG5hbWU6IFwiXCIsIG1ldGhvZDogW10sIG9wdGlvbnM6IHVuZGVmaW5lZCB9O1xufVxuXG5leHBvcnQgY29uc3QgU2VydmljZURlc2NyaXB0b3JQcm90byA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8sIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5uYW1lICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS5uYW1lKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UubWV0aG9kKSB7XG4gICAgICBNZXRob2REZXNjcmlwdG9yUHJvdG8uZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFNlcnZpY2VPcHRpb25zLmVuY29kZShtZXNzYWdlLm9wdGlvbnMsIHdyaXRlci51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogU2VydmljZURlc2NyaXB0b3JQcm90byB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VTZXJ2aWNlRGVzY3JpcHRvclByb3RvKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubWV0aG9kLnB1c2goTWV0aG9kRGVzY3JpcHRvclByb3RvLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uub3B0aW9ucyA9IFNlcnZpY2VPcHRpb25zLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBTZXJ2aWNlRGVzY3JpcHRvclByb3RvIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogaXNTZXQob2JqZWN0Lm5hbWUpID8gU3RyaW5nKG9iamVjdC5uYW1lKSA6IFwiXCIsXG4gICAgICBtZXRob2Q6IEFycmF5LmlzQXJyYXkob2JqZWN0Py5tZXRob2QpID8gb2JqZWN0Lm1ldGhvZC5tYXAoKGU6IGFueSkgPT4gTWV0aG9kRGVzY3JpcHRvclByb3RvLmZyb21KU09OKGUpKSA6IFtdLFxuICAgICAgb3B0aW9uczogaXNTZXQob2JqZWN0Lm9wdGlvbnMpID8gU2VydmljZU9wdGlvbnMuZnJvbUpTT04ob2JqZWN0Lm9wdGlvbnMpIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8pOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIG1lc3NhZ2UubmFtZSAhPT0gdW5kZWZpbmVkICYmIChvYmoubmFtZSA9IG1lc3NhZ2UubmFtZSk7XG4gICAgaWYgKG1lc3NhZ2UubWV0aG9kKSB7XG4gICAgICBvYmoubWV0aG9kID0gbWVzc2FnZS5tZXRob2QubWFwKChlKSA9PiBlID8gTWV0aG9kRGVzY3JpcHRvclByb3RvLnRvSlNPTihlKSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5tZXRob2QgPSBbXTtcbiAgICB9XG4gICAgbWVzc2FnZS5vcHRpb25zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIChvYmoub3B0aW9ucyA9IG1lc3NhZ2Uub3B0aW9ucyA/IFNlcnZpY2VPcHRpb25zLnRvSlNPTihtZXNzYWdlLm9wdGlvbnMpIDogdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8U2VydmljZURlc2NyaXB0b3JQcm90bz4pOiBTZXJ2aWNlRGVzY3JpcHRvclByb3RvIHtcbiAgICByZXR1cm4gU2VydmljZURlc2NyaXB0b3JQcm90by5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8+KTogU2VydmljZURlc2NyaXB0b3JQcm90byB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VTZXJ2aWNlRGVzY3JpcHRvclByb3RvKCk7XG4gICAgbWVzc2FnZS5uYW1lID0gb2JqZWN0Lm5hbWUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLm1ldGhvZCA9IG9iamVjdC5tZXRob2Q/Lm1hcCgoZSkgPT4gTWV0aG9kRGVzY3JpcHRvclByb3RvLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICBtZXNzYWdlLm9wdGlvbnMgPSAob2JqZWN0Lm9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvYmplY3Qub3B0aW9ucyAhPT0gbnVsbClcbiAgICAgID8gU2VydmljZU9wdGlvbnMuZnJvbVBhcnRpYWwob2JqZWN0Lm9wdGlvbnMpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VNZXRob2REZXNjcmlwdG9yUHJvdG8oKTogTWV0aG9kRGVzY3JpcHRvclByb3RvIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBcIlwiLFxuICAgIGlucHV0VHlwZTogXCJcIixcbiAgICBvdXRwdXRUeXBlOiBcIlwiLFxuICAgIG9wdGlvbnM6IHVuZGVmaW5lZCxcbiAgICBjbGllbnRTdHJlYW1pbmc6IGZhbHNlLFxuICAgIHNlcnZlclN0cmVhbWluZzogZmFsc2UsXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBNZXRob2REZXNjcmlwdG9yUHJvdG8gPSB7XG4gIGVuY29kZShtZXNzYWdlOiBNZXRob2REZXNjcmlwdG9yUHJvdG8sIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5uYW1lICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS5uYW1lKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaW5wdXRUeXBlICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE4KS5zdHJpbmcobWVzc2FnZS5pbnB1dFR5cGUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vdXRwdXRUeXBlICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI2KS5zdHJpbmcobWVzc2FnZS5vdXRwdXRUeXBlKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBNZXRob2RPcHRpb25zLmVuY29kZShtZXNzYWdlLm9wdGlvbnMsIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmNsaWVudFN0cmVhbWluZyA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0MCkuYm9vbChtZXNzYWdlLmNsaWVudFN0cmVhbWluZyk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNlcnZlclN0cmVhbWluZyA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0OCkuYm9vbChtZXNzYWdlLnNlcnZlclN0cmVhbWluZyk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogTWV0aG9kRGVzY3JpcHRvclByb3RvIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZU1ldGhvZERlc2NyaXB0b3JQcm90bygpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmICh0YWcgIT09IDE4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmlucHV0VHlwZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGlmICh0YWcgIT09IDI2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm91dHB1dFR5cGUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBpZiAodGFnICE9PSAzNCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5vcHRpb25zID0gTWV0aG9kT3B0aW9ucy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNDApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuY2xpZW50U3RyZWFtaW5nID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIGlmICh0YWcgIT09IDQ4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnNlcnZlclN0cmVhbWluZyA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBNZXRob2REZXNjcmlwdG9yUHJvdG8ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBpc1NldChvYmplY3QubmFtZSkgPyBTdHJpbmcob2JqZWN0Lm5hbWUpIDogXCJcIixcbiAgICAgIGlucHV0VHlwZTogaXNTZXQob2JqZWN0LmlucHV0VHlwZSkgPyBTdHJpbmcob2JqZWN0LmlucHV0VHlwZSkgOiBcIlwiLFxuICAgICAgb3V0cHV0VHlwZTogaXNTZXQob2JqZWN0Lm91dHB1dFR5cGUpID8gU3RyaW5nKG9iamVjdC5vdXRwdXRUeXBlKSA6IFwiXCIsXG4gICAgICBvcHRpb25zOiBpc1NldChvYmplY3Qub3B0aW9ucykgPyBNZXRob2RPcHRpb25zLmZyb21KU09OKG9iamVjdC5vcHRpb25zKSA6IHVuZGVmaW5lZCxcbiAgICAgIGNsaWVudFN0cmVhbWluZzogaXNTZXQob2JqZWN0LmNsaWVudFN0cmVhbWluZykgPyBCb29sZWFuKG9iamVjdC5jbGllbnRTdHJlYW1pbmcpIDogZmFsc2UsXG4gICAgICBzZXJ2ZXJTdHJlYW1pbmc6IGlzU2V0KG9iamVjdC5zZXJ2ZXJTdHJlYW1pbmcpID8gQm9vbGVhbihvYmplY3Quc2VydmVyU3RyZWFtaW5nKSA6IGZhbHNlLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IE1ldGhvZERlc2NyaXB0b3JQcm90byk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgbWVzc2FnZS5uYW1lICE9PSB1bmRlZmluZWQgJiYgKG9iai5uYW1lID0gbWVzc2FnZS5uYW1lKTtcbiAgICBtZXNzYWdlLmlucHV0VHlwZSAhPT0gdW5kZWZpbmVkICYmIChvYmouaW5wdXRUeXBlID0gbWVzc2FnZS5pbnB1dFR5cGUpO1xuICAgIG1lc3NhZ2Uub3V0cHV0VHlwZSAhPT0gdW5kZWZpbmVkICYmIChvYmoub3V0cHV0VHlwZSA9IG1lc3NhZ2Uub3V0cHV0VHlwZSk7XG4gICAgbWVzc2FnZS5vcHRpb25zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIChvYmoub3B0aW9ucyA9IG1lc3NhZ2Uub3B0aW9ucyA/IE1ldGhvZE9wdGlvbnMudG9KU09OKG1lc3NhZ2Uub3B0aW9ucykgOiB1bmRlZmluZWQpO1xuICAgIG1lc3NhZ2UuY2xpZW50U3RyZWFtaW5nICE9PSB1bmRlZmluZWQgJiYgKG9iai5jbGllbnRTdHJlYW1pbmcgPSBtZXNzYWdlLmNsaWVudFN0cmVhbWluZyk7XG4gICAgbWVzc2FnZS5zZXJ2ZXJTdHJlYW1pbmcgIT09IHVuZGVmaW5lZCAmJiAob2JqLnNlcnZlclN0cmVhbWluZyA9IG1lc3NhZ2Uuc2VydmVyU3RyZWFtaW5nKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8TWV0aG9kRGVzY3JpcHRvclByb3RvPik6IE1ldGhvZERlc2NyaXB0b3JQcm90byB7XG4gICAgcmV0dXJuIE1ldGhvZERlc2NyaXB0b3JQcm90by5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPE1ldGhvZERlc2NyaXB0b3JQcm90bz4pOiBNZXRob2REZXNjcmlwdG9yUHJvdG8ge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlTWV0aG9kRGVzY3JpcHRvclByb3RvKCk7XG4gICAgbWVzc2FnZS5uYW1lID0gb2JqZWN0Lm5hbWUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLmlucHV0VHlwZSA9IG9iamVjdC5pbnB1dFR5cGUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLm91dHB1dFR5cGUgPSBvYmplY3Qub3V0cHV0VHlwZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2Uub3B0aW9ucyA9IChvYmplY3Qub3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIG9iamVjdC5vcHRpb25zICE9PSBudWxsKVxuICAgICAgPyBNZXRob2RPcHRpb25zLmZyb21QYXJ0aWFsKG9iamVjdC5vcHRpb25zKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgbWVzc2FnZS5jbGllbnRTdHJlYW1pbmcgPSBvYmplY3QuY2xpZW50U3RyZWFtaW5nID8/IGZhbHNlO1xuICAgIG1lc3NhZ2Uuc2VydmVyU3RyZWFtaW5nID0gb2JqZWN0LnNlcnZlclN0cmVhbWluZyA/PyBmYWxzZTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VGaWxlT3B0aW9ucygpOiBGaWxlT3B0aW9ucyB7XG4gIHJldHVybiB7XG4gICAgamF2YVBhY2thZ2U6IFwiXCIsXG4gICAgamF2YU91dGVyQ2xhc3NuYW1lOiBcIlwiLFxuICAgIGphdmFNdWx0aXBsZUZpbGVzOiBmYWxzZSxcbiAgICBqYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoOiBmYWxzZSxcbiAgICBqYXZhU3RyaW5nQ2hlY2tVdGY4OiBmYWxzZSxcbiAgICBvcHRpbWl6ZUZvcjogMSxcbiAgICBnb1BhY2thZ2U6IFwiXCIsXG4gICAgY2NHZW5lcmljU2VydmljZXM6IGZhbHNlLFxuICAgIGphdmFHZW5lcmljU2VydmljZXM6IGZhbHNlLFxuICAgIHB5R2VuZXJpY1NlcnZpY2VzOiBmYWxzZSxcbiAgICBwaHBHZW5lcmljU2VydmljZXM6IGZhbHNlLFxuICAgIGRlcHJlY2F0ZWQ6IGZhbHNlLFxuICAgIGNjRW5hYmxlQXJlbmFzOiBmYWxzZSxcbiAgICBvYmpjQ2xhc3NQcmVmaXg6IFwiXCIsXG4gICAgY3NoYXJwTmFtZXNwYWNlOiBcIlwiLFxuICAgIHN3aWZ0UHJlZml4OiBcIlwiLFxuICAgIHBocENsYXNzUHJlZml4OiBcIlwiLFxuICAgIHBocE5hbWVzcGFjZTogXCJcIixcbiAgICBwaHBNZXRhZGF0YU5hbWVzcGFjZTogXCJcIixcbiAgICBydWJ5UGFja2FnZTogXCJcIixcbiAgICB1bmludGVycHJldGVkT3B0aW9uOiBbXSxcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IEZpbGVPcHRpb25zID0ge1xuICBlbmNvZGUobWVzc2FnZTogRmlsZU9wdGlvbnMsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5qYXZhUGFja2FnZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UuamF2YVBhY2thZ2UpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5qYXZhT3V0ZXJDbGFzc25hbWUgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNjYpLnN0cmluZyhtZXNzYWdlLmphdmFPdXRlckNsYXNzbmFtZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmphdmFNdWx0aXBsZUZpbGVzID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgwKS5ib29sKG1lc3NhZ2UuamF2YU11bHRpcGxlRmlsZXMpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5qYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2MCkuYm9vbChtZXNzYWdlLmphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2gpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5qYXZhU3RyaW5nQ2hlY2tVdGY4ID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDIxNikuYm9vbChtZXNzYWdlLmphdmFTdHJpbmdDaGVja1V0ZjgpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcHRpbWl6ZUZvciAhPT0gMSkge1xuICAgICAgd3JpdGVyLnVpbnQzMig3MikuaW50MzIobWVzc2FnZS5vcHRpbWl6ZUZvcik7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmdvUGFja2FnZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMig5MCkuc3RyaW5nKG1lc3NhZ2UuZ29QYWNrYWdlKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuY2NHZW5lcmljU2VydmljZXMgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTI4KS5ib29sKG1lc3NhZ2UuY2NHZW5lcmljU2VydmljZXMpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5qYXZhR2VuZXJpY1NlcnZpY2VzID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEzNikuYm9vbChtZXNzYWdlLmphdmFHZW5lcmljU2VydmljZXMpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5weUdlbmVyaWNTZXJ2aWNlcyA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNDQpLmJvb2wobWVzc2FnZS5weUdlbmVyaWNTZXJ2aWNlcyk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBocEdlbmVyaWNTZXJ2aWNlcyA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzMzYpLmJvb2wobWVzc2FnZS5waHBHZW5lcmljU2VydmljZXMpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kZXByZWNhdGVkID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE4NCkuYm9vbChtZXNzYWdlLmRlcHJlY2F0ZWQpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jY0VuYWJsZUFyZW5hcyA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNDgpLmJvb2wobWVzc2FnZS5jY0VuYWJsZUFyZW5hcyk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9iamNDbGFzc1ByZWZpeCAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigyOTApLnN0cmluZyhtZXNzYWdlLm9iamNDbGFzc1ByZWZpeCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmNzaGFycE5hbWVzcGFjZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigyOTgpLnN0cmluZyhtZXNzYWdlLmNzaGFycE5hbWVzcGFjZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnN3aWZ0UHJlZml4ICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDMxNCkuc3RyaW5nKG1lc3NhZ2Uuc3dpZnRQcmVmaXgpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5waHBDbGFzc1ByZWZpeCAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigzMjIpLnN0cmluZyhtZXNzYWdlLnBocENsYXNzUHJlZml4KTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGhwTmFtZXNwYWNlICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDMzMCkuc3RyaW5nKG1lc3NhZ2UucGhwTmFtZXNwYWNlKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGhwTWV0YWRhdGFOYW1lc3BhY2UgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzU0KS5zdHJpbmcobWVzc2FnZS5waHBNZXRhZGF0YU5hbWVzcGFjZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnJ1YnlQYWNrYWdlICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM2Mikuc3RyaW5nKG1lc3NhZ2UucnVieVBhY2thZ2UpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uKSB7XG4gICAgICBVbmludGVycHJldGVkT3B0aW9uLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMig3OTk0KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IEZpbGVPcHRpb25zIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUZpbGVPcHRpb25zKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5qYXZhUGFja2FnZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIGlmICh0YWcgIT09IDY2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmphdmFPdXRlckNsYXNzbmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBpZiAodGFnICE9PSA4MCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5qYXZhTXVsdGlwbGVGaWxlcyA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTYwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2ggPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIGlmICh0YWcgIT09IDIxNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5qYXZhU3RyaW5nQ2hlY2tVdGY4ID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGlmICh0YWcgIT09IDcyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm9wdGltaXplRm9yID0gcmVhZGVyLmludDMyKCkgYXMgYW55O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIGlmICh0YWcgIT09IDkwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmdvUGFja2FnZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMjgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuY2NHZW5lcmljU2VydmljZXMgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgIGlmICh0YWcgIT09IDEzNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5qYXZhR2VuZXJpY1NlcnZpY2VzID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICBpZiAodGFnICE9PSAxNDQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UucHlHZW5lcmljU2VydmljZXMgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgIGlmICh0YWcgIT09IDMzNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5waHBHZW5lcmljU2VydmljZXMgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgIGlmICh0YWcgIT09IDE4NCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5kZXByZWNhdGVkID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNDgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuY2NFbmFibGVBcmVuYXMgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM2OlxuICAgICAgICAgIGlmICh0YWcgIT09IDI5MCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5vYmpjQ2xhc3NQcmVmaXggPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjk4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmNzaGFycE5hbWVzcGFjZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICBpZiAodGFnICE9PSAzMTQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uuc3dpZnRQcmVmaXggPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMzIyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnBocENsYXNzUHJlZml4ID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDMzMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5waHBOYW1lc3BhY2UgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMzU0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnBocE1ldGFkYXRhTmFtZXNwYWNlID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgIGlmICh0YWcgIT09IDM2Mikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5ydWJ5UGFja2FnZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA5OTk6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNzk5NCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uLnB1c2goVW5pbnRlcnByZXRlZE9wdGlvbi5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IEZpbGVPcHRpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgamF2YVBhY2thZ2U6IGlzU2V0KG9iamVjdC5qYXZhUGFja2FnZSkgPyBTdHJpbmcob2JqZWN0LmphdmFQYWNrYWdlKSA6IFwiXCIsXG4gICAgICBqYXZhT3V0ZXJDbGFzc25hbWU6IGlzU2V0KG9iamVjdC5qYXZhT3V0ZXJDbGFzc25hbWUpID8gU3RyaW5nKG9iamVjdC5qYXZhT3V0ZXJDbGFzc25hbWUpIDogXCJcIixcbiAgICAgIGphdmFNdWx0aXBsZUZpbGVzOiBpc1NldChvYmplY3QuamF2YU11bHRpcGxlRmlsZXMpID8gQm9vbGVhbihvYmplY3QuamF2YU11bHRpcGxlRmlsZXMpIDogZmFsc2UsXG4gICAgICBqYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoOiBpc1NldChvYmplY3QuamF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaClcbiAgICAgICAgPyBCb29sZWFuKG9iamVjdC5qYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoKVxuICAgICAgICA6IGZhbHNlLFxuICAgICAgamF2YVN0cmluZ0NoZWNrVXRmODogaXNTZXQob2JqZWN0LmphdmFTdHJpbmdDaGVja1V0ZjgpID8gQm9vbGVhbihvYmplY3QuamF2YVN0cmluZ0NoZWNrVXRmOCkgOiBmYWxzZSxcbiAgICAgIG9wdGltaXplRm9yOiBpc1NldChvYmplY3Qub3B0aW1pemVGb3IpID8gZmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlRnJvbUpTT04ob2JqZWN0Lm9wdGltaXplRm9yKSA6IDEsXG4gICAgICBnb1BhY2thZ2U6IGlzU2V0KG9iamVjdC5nb1BhY2thZ2UpID8gU3RyaW5nKG9iamVjdC5nb1BhY2thZ2UpIDogXCJcIixcbiAgICAgIGNjR2VuZXJpY1NlcnZpY2VzOiBpc1NldChvYmplY3QuY2NHZW5lcmljU2VydmljZXMpID8gQm9vbGVhbihvYmplY3QuY2NHZW5lcmljU2VydmljZXMpIDogZmFsc2UsXG4gICAgICBqYXZhR2VuZXJpY1NlcnZpY2VzOiBpc1NldChvYmplY3QuamF2YUdlbmVyaWNTZXJ2aWNlcykgPyBCb29sZWFuKG9iamVjdC5qYXZhR2VuZXJpY1NlcnZpY2VzKSA6IGZhbHNlLFxuICAgICAgcHlHZW5lcmljU2VydmljZXM6IGlzU2V0KG9iamVjdC5weUdlbmVyaWNTZXJ2aWNlcykgPyBCb29sZWFuKG9iamVjdC5weUdlbmVyaWNTZXJ2aWNlcykgOiBmYWxzZSxcbiAgICAgIHBocEdlbmVyaWNTZXJ2aWNlczogaXNTZXQob2JqZWN0LnBocEdlbmVyaWNTZXJ2aWNlcykgPyBCb29sZWFuKG9iamVjdC5waHBHZW5lcmljU2VydmljZXMpIDogZmFsc2UsXG4gICAgICBkZXByZWNhdGVkOiBpc1NldChvYmplY3QuZGVwcmVjYXRlZCkgPyBCb29sZWFuKG9iamVjdC5kZXByZWNhdGVkKSA6IGZhbHNlLFxuICAgICAgY2NFbmFibGVBcmVuYXM6IGlzU2V0KG9iamVjdC5jY0VuYWJsZUFyZW5hcykgPyBCb29sZWFuKG9iamVjdC5jY0VuYWJsZUFyZW5hcykgOiBmYWxzZSxcbiAgICAgIG9iamNDbGFzc1ByZWZpeDogaXNTZXQob2JqZWN0Lm9iamNDbGFzc1ByZWZpeCkgPyBTdHJpbmcob2JqZWN0Lm9iamNDbGFzc1ByZWZpeCkgOiBcIlwiLFxuICAgICAgY3NoYXJwTmFtZXNwYWNlOiBpc1NldChvYmplY3QuY3NoYXJwTmFtZXNwYWNlKSA/IFN0cmluZyhvYmplY3QuY3NoYXJwTmFtZXNwYWNlKSA6IFwiXCIsXG4gICAgICBzd2lmdFByZWZpeDogaXNTZXQob2JqZWN0LnN3aWZ0UHJlZml4KSA/IFN0cmluZyhvYmplY3Quc3dpZnRQcmVmaXgpIDogXCJcIixcbiAgICAgIHBocENsYXNzUHJlZml4OiBpc1NldChvYmplY3QucGhwQ2xhc3NQcmVmaXgpID8gU3RyaW5nKG9iamVjdC5waHBDbGFzc1ByZWZpeCkgOiBcIlwiLFxuICAgICAgcGhwTmFtZXNwYWNlOiBpc1NldChvYmplY3QucGhwTmFtZXNwYWNlKSA/IFN0cmluZyhvYmplY3QucGhwTmFtZXNwYWNlKSA6IFwiXCIsXG4gICAgICBwaHBNZXRhZGF0YU5hbWVzcGFjZTogaXNTZXQob2JqZWN0LnBocE1ldGFkYXRhTmFtZXNwYWNlKSA/IFN0cmluZyhvYmplY3QucGhwTWV0YWRhdGFOYW1lc3BhY2UpIDogXCJcIixcbiAgICAgIHJ1YnlQYWNrYWdlOiBpc1NldChvYmplY3QucnVieVBhY2thZ2UpID8gU3RyaW5nKG9iamVjdC5ydWJ5UGFja2FnZSkgOiBcIlwiLFxuICAgICAgdW5pbnRlcnByZXRlZE9wdGlvbjogQXJyYXkuaXNBcnJheShvYmplY3Q/LnVuaW50ZXJwcmV0ZWRPcHRpb24pXG4gICAgICAgID8gb2JqZWN0LnVuaW50ZXJwcmV0ZWRPcHRpb24ubWFwKChlOiBhbnkpID0+IFVuaW50ZXJwcmV0ZWRPcHRpb24uZnJvbUpTT04oZSkpXG4gICAgICAgIDogW10sXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogRmlsZU9wdGlvbnMpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIG1lc3NhZ2UuamF2YVBhY2thZ2UgIT09IHVuZGVmaW5lZCAmJiAob2JqLmphdmFQYWNrYWdlID0gbWVzc2FnZS5qYXZhUGFja2FnZSk7XG4gICAgbWVzc2FnZS5qYXZhT3V0ZXJDbGFzc25hbWUgIT09IHVuZGVmaW5lZCAmJiAob2JqLmphdmFPdXRlckNsYXNzbmFtZSA9IG1lc3NhZ2UuamF2YU91dGVyQ2xhc3NuYW1lKTtcbiAgICBtZXNzYWdlLmphdmFNdWx0aXBsZUZpbGVzICE9PSB1bmRlZmluZWQgJiYgKG9iai5qYXZhTXVsdGlwbGVGaWxlcyA9IG1lc3NhZ2UuamF2YU11bHRpcGxlRmlsZXMpO1xuICAgIG1lc3NhZ2UuamF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAob2JqLmphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2ggPSBtZXNzYWdlLmphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2gpO1xuICAgIG1lc3NhZ2UuamF2YVN0cmluZ0NoZWNrVXRmOCAhPT0gdW5kZWZpbmVkICYmIChvYmouamF2YVN0cmluZ0NoZWNrVXRmOCA9IG1lc3NhZ2UuamF2YVN0cmluZ0NoZWNrVXRmOCk7XG4gICAgbWVzc2FnZS5vcHRpbWl6ZUZvciAhPT0gdW5kZWZpbmVkICYmIChvYmoub3B0aW1pemVGb3IgPSBmaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGVUb0pTT04obWVzc2FnZS5vcHRpbWl6ZUZvcikpO1xuICAgIG1lc3NhZ2UuZ29QYWNrYWdlICE9PSB1bmRlZmluZWQgJiYgKG9iai5nb1BhY2thZ2UgPSBtZXNzYWdlLmdvUGFja2FnZSk7XG4gICAgbWVzc2FnZS5jY0dlbmVyaWNTZXJ2aWNlcyAhPT0gdW5kZWZpbmVkICYmIChvYmouY2NHZW5lcmljU2VydmljZXMgPSBtZXNzYWdlLmNjR2VuZXJpY1NlcnZpY2VzKTtcbiAgICBtZXNzYWdlLmphdmFHZW5lcmljU2VydmljZXMgIT09IHVuZGVmaW5lZCAmJiAob2JqLmphdmFHZW5lcmljU2VydmljZXMgPSBtZXNzYWdlLmphdmFHZW5lcmljU2VydmljZXMpO1xuICAgIG1lc3NhZ2UucHlHZW5lcmljU2VydmljZXMgIT09IHVuZGVmaW5lZCAmJiAob2JqLnB5R2VuZXJpY1NlcnZpY2VzID0gbWVzc2FnZS5weUdlbmVyaWNTZXJ2aWNlcyk7XG4gICAgbWVzc2FnZS5waHBHZW5lcmljU2VydmljZXMgIT09IHVuZGVmaW5lZCAmJiAob2JqLnBocEdlbmVyaWNTZXJ2aWNlcyA9IG1lc3NhZ2UucGhwR2VuZXJpY1NlcnZpY2VzKTtcbiAgICBtZXNzYWdlLmRlcHJlY2F0ZWQgIT09IHVuZGVmaW5lZCAmJiAob2JqLmRlcHJlY2F0ZWQgPSBtZXNzYWdlLmRlcHJlY2F0ZWQpO1xuICAgIG1lc3NhZ2UuY2NFbmFibGVBcmVuYXMgIT09IHVuZGVmaW5lZCAmJiAob2JqLmNjRW5hYmxlQXJlbmFzID0gbWVzc2FnZS5jY0VuYWJsZUFyZW5hcyk7XG4gICAgbWVzc2FnZS5vYmpjQ2xhc3NQcmVmaXggIT09IHVuZGVmaW5lZCAmJiAob2JqLm9iamNDbGFzc1ByZWZpeCA9IG1lc3NhZ2Uub2JqY0NsYXNzUHJlZml4KTtcbiAgICBtZXNzYWdlLmNzaGFycE5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkICYmIChvYmouY3NoYXJwTmFtZXNwYWNlID0gbWVzc2FnZS5jc2hhcnBOYW1lc3BhY2UpO1xuICAgIG1lc3NhZ2Uuc3dpZnRQcmVmaXggIT09IHVuZGVmaW5lZCAmJiAob2JqLnN3aWZ0UHJlZml4ID0gbWVzc2FnZS5zd2lmdFByZWZpeCk7XG4gICAgbWVzc2FnZS5waHBDbGFzc1ByZWZpeCAhPT0gdW5kZWZpbmVkICYmIChvYmoucGhwQ2xhc3NQcmVmaXggPSBtZXNzYWdlLnBocENsYXNzUHJlZml4KTtcbiAgICBtZXNzYWdlLnBocE5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkICYmIChvYmoucGhwTmFtZXNwYWNlID0gbWVzc2FnZS5waHBOYW1lc3BhY2UpO1xuICAgIG1lc3NhZ2UucGhwTWV0YWRhdGFOYW1lc3BhY2UgIT09IHVuZGVmaW5lZCAmJiAob2JqLnBocE1ldGFkYXRhTmFtZXNwYWNlID0gbWVzc2FnZS5waHBNZXRhZGF0YU5hbWVzcGFjZSk7XG4gICAgbWVzc2FnZS5ydWJ5UGFja2FnZSAhPT0gdW5kZWZpbmVkICYmIChvYmoucnVieVBhY2thZ2UgPSBtZXNzYWdlLnJ1YnlQYWNrYWdlKTtcbiAgICBpZiAobWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uKSB7XG4gICAgICBvYmoudW5pbnRlcnByZXRlZE9wdGlvbiA9IG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbi5tYXAoKGUpID0+IGUgPyBVbmludGVycHJldGVkT3B0aW9uLnRvSlNPTihlKSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai51bmludGVycHJldGVkT3B0aW9uID0gW107XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxGaWxlT3B0aW9ucz4pOiBGaWxlT3B0aW9ucyB7XG4gICAgcmV0dXJuIEZpbGVPcHRpb25zLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8RmlsZU9wdGlvbnM+KTogRmlsZU9wdGlvbnMge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRmlsZU9wdGlvbnMoKTtcbiAgICBtZXNzYWdlLmphdmFQYWNrYWdlID0gb2JqZWN0LmphdmFQYWNrYWdlID8/IFwiXCI7XG4gICAgbWVzc2FnZS5qYXZhT3V0ZXJDbGFzc25hbWUgPSBvYmplY3QuamF2YU91dGVyQ2xhc3NuYW1lID8/IFwiXCI7XG4gICAgbWVzc2FnZS5qYXZhTXVsdGlwbGVGaWxlcyA9IG9iamVjdC5qYXZhTXVsdGlwbGVGaWxlcyA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLmphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2ggPSBvYmplY3QuamF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaCA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLmphdmFTdHJpbmdDaGVja1V0ZjggPSBvYmplY3QuamF2YVN0cmluZ0NoZWNrVXRmOCA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLm9wdGltaXplRm9yID0gb2JqZWN0Lm9wdGltaXplRm9yID8/IDE7XG4gICAgbWVzc2FnZS5nb1BhY2thZ2UgPSBvYmplY3QuZ29QYWNrYWdlID8/IFwiXCI7XG4gICAgbWVzc2FnZS5jY0dlbmVyaWNTZXJ2aWNlcyA9IG9iamVjdC5jY0dlbmVyaWNTZXJ2aWNlcyA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLmphdmFHZW5lcmljU2VydmljZXMgPSBvYmplY3QuamF2YUdlbmVyaWNTZXJ2aWNlcyA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLnB5R2VuZXJpY1NlcnZpY2VzID0gb2JqZWN0LnB5R2VuZXJpY1NlcnZpY2VzID8/IGZhbHNlO1xuICAgIG1lc3NhZ2UucGhwR2VuZXJpY1NlcnZpY2VzID0gb2JqZWN0LnBocEdlbmVyaWNTZXJ2aWNlcyA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLmRlcHJlY2F0ZWQgPSBvYmplY3QuZGVwcmVjYXRlZCA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLmNjRW5hYmxlQXJlbmFzID0gb2JqZWN0LmNjRW5hYmxlQXJlbmFzID8/IGZhbHNlO1xuICAgIG1lc3NhZ2Uub2JqY0NsYXNzUHJlZml4ID0gb2JqZWN0Lm9iamNDbGFzc1ByZWZpeCA/PyBcIlwiO1xuICAgIG1lc3NhZ2UuY3NoYXJwTmFtZXNwYWNlID0gb2JqZWN0LmNzaGFycE5hbWVzcGFjZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2Uuc3dpZnRQcmVmaXggPSBvYmplY3Quc3dpZnRQcmVmaXggPz8gXCJcIjtcbiAgICBtZXNzYWdlLnBocENsYXNzUHJlZml4ID0gb2JqZWN0LnBocENsYXNzUHJlZml4ID8/IFwiXCI7XG4gICAgbWVzc2FnZS5waHBOYW1lc3BhY2UgPSBvYmplY3QucGhwTmFtZXNwYWNlID8/IFwiXCI7XG4gICAgbWVzc2FnZS5waHBNZXRhZGF0YU5hbWVzcGFjZSA9IG9iamVjdC5waHBNZXRhZGF0YU5hbWVzcGFjZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2UucnVieVBhY2thZ2UgPSBvYmplY3QucnVieVBhY2thZ2UgPz8gXCJcIjtcbiAgICBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24gPSBvYmplY3QudW5pbnRlcnByZXRlZE9wdGlvbj8ubWFwKChlKSA9PiBVbmludGVycHJldGVkT3B0aW9uLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VNZXNzYWdlT3B0aW9ucygpOiBNZXNzYWdlT3B0aW9ucyB7XG4gIHJldHVybiB7XG4gICAgbWVzc2FnZVNldFdpcmVGb3JtYXQ6IGZhbHNlLFxuICAgIG5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3I6IGZhbHNlLFxuICAgIGRlcHJlY2F0ZWQ6IGZhbHNlLFxuICAgIG1hcEVudHJ5OiBmYWxzZSxcbiAgICBkZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzOiBmYWxzZSxcbiAgICB1bmludGVycHJldGVkT3B0aW9uOiBbXSxcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IE1lc3NhZ2VPcHRpb25zID0ge1xuICBlbmNvZGUobWVzc2FnZTogTWVzc2FnZU9wdGlvbnMsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5tZXNzYWdlU2V0V2lyZUZvcm1hdCA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5ib29sKG1lc3NhZ2UubWVzc2FnZVNldFdpcmVGb3JtYXQpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5ub1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5ib29sKG1lc3NhZ2Uubm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3Nvcik7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRlcHJlY2F0ZWQgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS5kZXByZWNhdGVkKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWFwRW50cnkgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTYpLmJvb2wobWVzc2FnZS5tYXBFbnRyeSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoODgpLmJvb2wobWVzc2FnZS5kZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbikge1xuICAgICAgVW5pbnRlcnByZXRlZE9wdGlvbi5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoNzk5NCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBNZXNzYWdlT3B0aW9ucyB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VNZXNzYWdlT3B0aW9ucygpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5tZXNzYWdlU2V0V2lyZUZvcm1hdCA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5ub1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGlmICh0YWcgIT09IDI0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmRlcHJlY2F0ZWQgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNTYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubWFwRW50cnkgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIGlmICh0YWcgIT09IDg4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDk5OTpcbiAgICAgICAgICBpZiAodGFnICE9PSA3OTk0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24ucHVzaChVbmludGVycHJldGVkT3B0aW9uLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogTWVzc2FnZU9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlU2V0V2lyZUZvcm1hdDogaXNTZXQob2JqZWN0Lm1lc3NhZ2VTZXRXaXJlRm9ybWF0KSA/IEJvb2xlYW4ob2JqZWN0Lm1lc3NhZ2VTZXRXaXJlRm9ybWF0KSA6IGZhbHNlLFxuICAgICAgbm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3NvcjogaXNTZXQob2JqZWN0Lm5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3IpXG4gICAgICAgID8gQm9vbGVhbihvYmplY3Qubm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3NvcilcbiAgICAgICAgOiBmYWxzZSxcbiAgICAgIGRlcHJlY2F0ZWQ6IGlzU2V0KG9iamVjdC5kZXByZWNhdGVkKSA/IEJvb2xlYW4ob2JqZWN0LmRlcHJlY2F0ZWQpIDogZmFsc2UsXG4gICAgICBtYXBFbnRyeTogaXNTZXQob2JqZWN0Lm1hcEVudHJ5KSA/IEJvb2xlYW4ob2JqZWN0Lm1hcEVudHJ5KSA6IGZhbHNlLFxuICAgICAgZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0czogaXNTZXQob2JqZWN0LmRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMpXG4gICAgICAgID8gQm9vbGVhbihvYmplY3QuZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cylcbiAgICAgICAgOiBmYWxzZSxcbiAgICAgIHVuaW50ZXJwcmV0ZWRPcHRpb246IEFycmF5LmlzQXJyYXkob2JqZWN0Py51bmludGVycHJldGVkT3B0aW9uKVxuICAgICAgICA/IG9iamVjdC51bmludGVycHJldGVkT3B0aW9uLm1hcCgoZTogYW55KSA9PiBVbmludGVycHJldGVkT3B0aW9uLmZyb21KU09OKGUpKVxuICAgICAgICA6IFtdLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IE1lc3NhZ2VPcHRpb25zKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBtZXNzYWdlLm1lc3NhZ2VTZXRXaXJlRm9ybWF0ICE9PSB1bmRlZmluZWQgJiYgKG9iai5tZXNzYWdlU2V0V2lyZUZvcm1hdCA9IG1lc3NhZ2UubWVzc2FnZVNldFdpcmVGb3JtYXQpO1xuICAgIG1lc3NhZ2Uubm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3NvciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAob2JqLm5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3IgPSBtZXNzYWdlLm5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3IpO1xuICAgIG1lc3NhZ2UuZGVwcmVjYXRlZCAhPT0gdW5kZWZpbmVkICYmIChvYmouZGVwcmVjYXRlZCA9IG1lc3NhZ2UuZGVwcmVjYXRlZCk7XG4gICAgbWVzc2FnZS5tYXBFbnRyeSAhPT0gdW5kZWZpbmVkICYmIChvYmoubWFwRW50cnkgPSBtZXNzYWdlLm1hcEVudHJ5KTtcbiAgICBtZXNzYWdlLmRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgKG9iai5kZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzID0gbWVzc2FnZS5kZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzKTtcbiAgICBpZiAobWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uKSB7XG4gICAgICBvYmoudW5pbnRlcnByZXRlZE9wdGlvbiA9IG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbi5tYXAoKGUpID0+IGUgPyBVbmludGVycHJldGVkT3B0aW9uLnRvSlNPTihlKSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai51bmludGVycHJldGVkT3B0aW9uID0gW107XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxNZXNzYWdlT3B0aW9ucz4pOiBNZXNzYWdlT3B0aW9ucyB7XG4gICAgcmV0dXJuIE1lc3NhZ2VPcHRpb25zLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8TWVzc2FnZU9wdGlvbnM+KTogTWVzc2FnZU9wdGlvbnMge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlTWVzc2FnZU9wdGlvbnMoKTtcbiAgICBtZXNzYWdlLm1lc3NhZ2VTZXRXaXJlRm9ybWF0ID0gb2JqZWN0Lm1lc3NhZ2VTZXRXaXJlRm9ybWF0ID8/IGZhbHNlO1xuICAgIG1lc3NhZ2Uubm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3NvciA9IG9iamVjdC5ub1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yID8/IGZhbHNlO1xuICAgIG1lc3NhZ2UuZGVwcmVjYXRlZCA9IG9iamVjdC5kZXByZWNhdGVkID8/IGZhbHNlO1xuICAgIG1lc3NhZ2UubWFwRW50cnkgPSBvYmplY3QubWFwRW50cnkgPz8gZmFsc2U7XG4gICAgbWVzc2FnZS5kZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzID0gb2JqZWN0LmRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMgPz8gZmFsc2U7XG4gICAgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uID0gb2JqZWN0LnVuaW50ZXJwcmV0ZWRPcHRpb24/Lm1hcCgoZSkgPT4gVW5pbnRlcnByZXRlZE9wdGlvbi5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlRmllbGRPcHRpb25zKCk6IEZpZWxkT3B0aW9ucyB7XG4gIHJldHVybiB7XG4gICAgY3R5cGU6IDAsXG4gICAgcGFja2VkOiBmYWxzZSxcbiAgICBqc3R5cGU6IDAsXG4gICAgbGF6eTogZmFsc2UsXG4gICAgdW52ZXJpZmllZExhenk6IGZhbHNlLFxuICAgIGRlcHJlY2F0ZWQ6IGZhbHNlLFxuICAgIHdlYWs6IGZhbHNlLFxuICAgIGRlYnVnUmVkYWN0OiBmYWxzZSxcbiAgICByZXRlbnRpb246IDAsXG4gICAgdGFyZ2V0OiAwLFxuICAgIHVuaW50ZXJwcmV0ZWRPcHRpb246IFtdLFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgRmllbGRPcHRpb25zID0ge1xuICBlbmNvZGUobWVzc2FnZTogRmllbGRPcHRpb25zLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuY3R5cGUgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuaW50MzIobWVzc2FnZS5jdHlwZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBhY2tlZCA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuYm9vbChtZXNzYWdlLnBhY2tlZCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmpzdHlwZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0OCkuaW50MzIobWVzc2FnZS5qc3R5cGUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5sYXp5ID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQwKS5ib29sKG1lc3NhZ2UubGF6eSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnVudmVyaWZpZWRMYXp5ID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEyMCkuYm9vbChtZXNzYWdlLnVudmVyaWZpZWRMYXp5KTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGVwcmVjYXRlZCA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuYm9vbChtZXNzYWdlLmRlcHJlY2F0ZWQpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS53ZWFrID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgwKS5ib29sKG1lc3NhZ2Uud2Vhayk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRlYnVnUmVkYWN0ID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEyOCkuYm9vbChtZXNzYWdlLmRlYnVnUmVkYWN0KTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucmV0ZW50aW9uICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEzNikuaW50MzIobWVzc2FnZS5yZXRlbnRpb24pO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS50YXJnZXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTQ0KS5pbnQzMihtZXNzYWdlLnRhcmdldCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24pIHtcbiAgICAgIFVuaW50ZXJwcmV0ZWRPcHRpb24uZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDc5OTQpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogRmllbGRPcHRpb25zIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUZpZWxkT3B0aW9ucygpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5jdHlwZSA9IHJlYWRlci5pbnQzMigpIGFzIGFueTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmICh0YWcgIT09IDE2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnBhY2tlZCA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBpZiAodGFnICE9PSA0OCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5qc3R5cGUgPSByZWFkZXIuaW50MzIoKSBhcyBhbnk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBpZiAodGFnICE9PSA0MCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5sYXp5ID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMjApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UudW52ZXJpZmllZExhenkgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZGVwcmVjYXRlZCA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gODApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uud2VhayA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTI4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmRlYnVnUmVkYWN0ID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMzYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UucmV0ZW50aW9uID0gcmVhZGVyLmludDMyKCkgYXMgYW55O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgIGlmICh0YWcgIT09IDE0NCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS50YXJnZXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgOTk5OlxuICAgICAgICAgIGlmICh0YWcgIT09IDc5OTQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbi5wdXNoKFVuaW50ZXJwcmV0ZWRPcHRpb24uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBGaWVsZE9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBjdHlwZTogaXNTZXQob2JqZWN0LmN0eXBlKSA/IGZpZWxkT3B0aW9uc19DVHlwZUZyb21KU09OKG9iamVjdC5jdHlwZSkgOiAwLFxuICAgICAgcGFja2VkOiBpc1NldChvYmplY3QucGFja2VkKSA/IEJvb2xlYW4ob2JqZWN0LnBhY2tlZCkgOiBmYWxzZSxcbiAgICAgIGpzdHlwZTogaXNTZXQob2JqZWN0LmpzdHlwZSkgPyBmaWVsZE9wdGlvbnNfSlNUeXBlRnJvbUpTT04ob2JqZWN0LmpzdHlwZSkgOiAwLFxuICAgICAgbGF6eTogaXNTZXQob2JqZWN0LmxhenkpID8gQm9vbGVhbihvYmplY3QubGF6eSkgOiBmYWxzZSxcbiAgICAgIHVudmVyaWZpZWRMYXp5OiBpc1NldChvYmplY3QudW52ZXJpZmllZExhenkpID8gQm9vbGVhbihvYmplY3QudW52ZXJpZmllZExhenkpIDogZmFsc2UsXG4gICAgICBkZXByZWNhdGVkOiBpc1NldChvYmplY3QuZGVwcmVjYXRlZCkgPyBCb29sZWFuKG9iamVjdC5kZXByZWNhdGVkKSA6IGZhbHNlLFxuICAgICAgd2VhazogaXNTZXQob2JqZWN0LndlYWspID8gQm9vbGVhbihvYmplY3Qud2VhaykgOiBmYWxzZSxcbiAgICAgIGRlYnVnUmVkYWN0OiBpc1NldChvYmplY3QuZGVidWdSZWRhY3QpID8gQm9vbGVhbihvYmplY3QuZGVidWdSZWRhY3QpIDogZmFsc2UsXG4gICAgICByZXRlbnRpb246IGlzU2V0KG9iamVjdC5yZXRlbnRpb24pID8gZmllbGRPcHRpb25zX09wdGlvblJldGVudGlvbkZyb21KU09OKG9iamVjdC5yZXRlbnRpb24pIDogMCxcbiAgICAgIHRhcmdldDogaXNTZXQob2JqZWN0LnRhcmdldCkgPyBmaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZUZyb21KU09OKG9iamVjdC50YXJnZXQpIDogMCxcbiAgICAgIHVuaW50ZXJwcmV0ZWRPcHRpb246IEFycmF5LmlzQXJyYXkob2JqZWN0Py51bmludGVycHJldGVkT3B0aW9uKVxuICAgICAgICA/IG9iamVjdC51bmludGVycHJldGVkT3B0aW9uLm1hcCgoZTogYW55KSA9PiBVbmludGVycHJldGVkT3B0aW9uLmZyb21KU09OKGUpKVxuICAgICAgICA6IFtdLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IEZpZWxkT3B0aW9ucyk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgbWVzc2FnZS5jdHlwZSAhPT0gdW5kZWZpbmVkICYmIChvYmouY3R5cGUgPSBmaWVsZE9wdGlvbnNfQ1R5cGVUb0pTT04obWVzc2FnZS5jdHlwZSkpO1xuICAgIG1lc3NhZ2UucGFja2VkICE9PSB1bmRlZmluZWQgJiYgKG9iai5wYWNrZWQgPSBtZXNzYWdlLnBhY2tlZCk7XG4gICAgbWVzc2FnZS5qc3R5cGUgIT09IHVuZGVmaW5lZCAmJiAob2JqLmpzdHlwZSA9IGZpZWxkT3B0aW9uc19KU1R5cGVUb0pTT04obWVzc2FnZS5qc3R5cGUpKTtcbiAgICBtZXNzYWdlLmxhenkgIT09IHVuZGVmaW5lZCAmJiAob2JqLmxhenkgPSBtZXNzYWdlLmxhenkpO1xuICAgIG1lc3NhZ2UudW52ZXJpZmllZExhenkgIT09IHVuZGVmaW5lZCAmJiAob2JqLnVudmVyaWZpZWRMYXp5ID0gbWVzc2FnZS51bnZlcmlmaWVkTGF6eSk7XG4gICAgbWVzc2FnZS5kZXByZWNhdGVkICE9PSB1bmRlZmluZWQgJiYgKG9iai5kZXByZWNhdGVkID0gbWVzc2FnZS5kZXByZWNhdGVkKTtcbiAgICBtZXNzYWdlLndlYWsgIT09IHVuZGVmaW5lZCAmJiAob2JqLndlYWsgPSBtZXNzYWdlLndlYWspO1xuICAgIG1lc3NhZ2UuZGVidWdSZWRhY3QgIT09IHVuZGVmaW5lZCAmJiAob2JqLmRlYnVnUmVkYWN0ID0gbWVzc2FnZS5kZWJ1Z1JlZGFjdCk7XG4gICAgbWVzc2FnZS5yZXRlbnRpb24gIT09IHVuZGVmaW5lZCAmJiAob2JqLnJldGVudGlvbiA9IGZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb25Ub0pTT04obWVzc2FnZS5yZXRlbnRpb24pKTtcbiAgICBtZXNzYWdlLnRhcmdldCAhPT0gdW5kZWZpbmVkICYmIChvYmoudGFyZ2V0ID0gZmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGVUb0pTT04obWVzc2FnZS50YXJnZXQpKTtcbiAgICBpZiAobWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uKSB7XG4gICAgICBvYmoudW5pbnRlcnByZXRlZE9wdGlvbiA9IG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbi5tYXAoKGUpID0+IGUgPyBVbmludGVycHJldGVkT3B0aW9uLnRvSlNPTihlKSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai51bmludGVycHJldGVkT3B0aW9uID0gW107XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxGaWVsZE9wdGlvbnM+KTogRmllbGRPcHRpb25zIHtcbiAgICByZXR1cm4gRmllbGRPcHRpb25zLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8RmllbGRPcHRpb25zPik6IEZpZWxkT3B0aW9ucyB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VGaWVsZE9wdGlvbnMoKTtcbiAgICBtZXNzYWdlLmN0eXBlID0gb2JqZWN0LmN0eXBlID8/IDA7XG4gICAgbWVzc2FnZS5wYWNrZWQgPSBvYmplY3QucGFja2VkID8/IGZhbHNlO1xuICAgIG1lc3NhZ2UuanN0eXBlID0gb2JqZWN0LmpzdHlwZSA/PyAwO1xuICAgIG1lc3NhZ2UubGF6eSA9IG9iamVjdC5sYXp5ID8/IGZhbHNlO1xuICAgIG1lc3NhZ2UudW52ZXJpZmllZExhenkgPSBvYmplY3QudW52ZXJpZmllZExhenkgPz8gZmFsc2U7XG4gICAgbWVzc2FnZS5kZXByZWNhdGVkID0gb2JqZWN0LmRlcHJlY2F0ZWQgPz8gZmFsc2U7XG4gICAgbWVzc2FnZS53ZWFrID0gb2JqZWN0LndlYWsgPz8gZmFsc2U7XG4gICAgbWVzc2FnZS5kZWJ1Z1JlZGFjdCA9IG9iamVjdC5kZWJ1Z1JlZGFjdCA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLnJldGVudGlvbiA9IG9iamVjdC5yZXRlbnRpb24gPz8gMDtcbiAgICBtZXNzYWdlLnRhcmdldCA9IG9iamVjdC50YXJnZXQgPz8gMDtcbiAgICBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24gPSBvYmplY3QudW5pbnRlcnByZXRlZE9wdGlvbj8ubWFwKChlKSA9PiBVbmludGVycHJldGVkT3B0aW9uLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VPbmVvZk9wdGlvbnMoKTogT25lb2ZPcHRpb25zIHtcbiAgcmV0dXJuIHsgdW5pbnRlcnByZXRlZE9wdGlvbjogW10gfTtcbn1cblxuZXhwb3J0IGNvbnN0IE9uZW9mT3B0aW9ucyA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IE9uZW9mT3B0aW9ucywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24pIHtcbiAgICAgIFVuaW50ZXJwcmV0ZWRPcHRpb24uZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDc5OTQpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogT25lb2ZPcHRpb25zIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZU9uZW9mT3B0aW9ucygpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDk5OTpcbiAgICAgICAgICBpZiAodGFnICE9PSA3OTk0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24ucHVzaChVbmludGVycHJldGVkT3B0aW9uLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogT25lb2ZPcHRpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgdW5pbnRlcnByZXRlZE9wdGlvbjogQXJyYXkuaXNBcnJheShvYmplY3Q/LnVuaW50ZXJwcmV0ZWRPcHRpb24pXG4gICAgICAgID8gb2JqZWN0LnVuaW50ZXJwcmV0ZWRPcHRpb24ubWFwKChlOiBhbnkpID0+IFVuaW50ZXJwcmV0ZWRPcHRpb24uZnJvbUpTT04oZSkpXG4gICAgICAgIDogW10sXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogT25lb2ZPcHRpb25zKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uKSB7XG4gICAgICBvYmoudW5pbnRlcnByZXRlZE9wdGlvbiA9IG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbi5tYXAoKGUpID0+IGUgPyBVbmludGVycHJldGVkT3B0aW9uLnRvSlNPTihlKSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai51bmludGVycHJldGVkT3B0aW9uID0gW107XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxPbmVvZk9wdGlvbnM+KTogT25lb2ZPcHRpb25zIHtcbiAgICByZXR1cm4gT25lb2ZPcHRpb25zLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8T25lb2ZPcHRpb25zPik6IE9uZW9mT3B0aW9ucyB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VPbmVvZk9wdGlvbnMoKTtcbiAgICBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24gPSBvYmplY3QudW5pbnRlcnByZXRlZE9wdGlvbj8ubWFwKChlKSA9PiBVbmludGVycHJldGVkT3B0aW9uLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VFbnVtT3B0aW9ucygpOiBFbnVtT3B0aW9ucyB7XG4gIHJldHVybiB7IGFsbG93QWxpYXM6IGZhbHNlLCBkZXByZWNhdGVkOiBmYWxzZSwgZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0czogZmFsc2UsIHVuaW50ZXJwcmV0ZWRPcHRpb246IFtdIH07XG59XG5cbmV4cG9ydCBjb25zdCBFbnVtT3B0aW9ucyA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IEVudW1PcHRpb25zLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuYWxsb3dBbGlhcyA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuYm9vbChtZXNzYWdlLmFsbG93QWxpYXMpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kZXByZWNhdGVkID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UuZGVwcmVjYXRlZCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDgpLmJvb2wobWVzc2FnZS5kZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbikge1xuICAgICAgVW5pbnRlcnByZXRlZE9wdGlvbi5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoNzk5NCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBFbnVtT3B0aW9ucyB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VFbnVtT3B0aW9ucygpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuYWxsb3dBbGlhcyA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5kZXByZWNhdGVkID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIGlmICh0YWcgIT09IDQ4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDk5OTpcbiAgICAgICAgICBpZiAodGFnICE9PSA3OTk0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24ucHVzaChVbmludGVycHJldGVkT3B0aW9uLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogRW51bU9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBhbGxvd0FsaWFzOiBpc1NldChvYmplY3QuYWxsb3dBbGlhcykgPyBCb29sZWFuKG9iamVjdC5hbGxvd0FsaWFzKSA6IGZhbHNlLFxuICAgICAgZGVwcmVjYXRlZDogaXNTZXQob2JqZWN0LmRlcHJlY2F0ZWQpID8gQm9vbGVhbihvYmplY3QuZGVwcmVjYXRlZCkgOiBmYWxzZSxcbiAgICAgIGRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHM6IGlzU2V0KG9iamVjdC5kZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzKVxuICAgICAgICA/IEJvb2xlYW4ob2JqZWN0LmRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMpXG4gICAgICAgIDogZmFsc2UsXG4gICAgICB1bmludGVycHJldGVkT3B0aW9uOiBBcnJheS5pc0FycmF5KG9iamVjdD8udW5pbnRlcnByZXRlZE9wdGlvbilcbiAgICAgICAgPyBvYmplY3QudW5pbnRlcnByZXRlZE9wdGlvbi5tYXAoKGU6IGFueSkgPT4gVW5pbnRlcnByZXRlZE9wdGlvbi5mcm9tSlNPTihlKSlcbiAgICAgICAgOiBbXSxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBFbnVtT3B0aW9ucyk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgbWVzc2FnZS5hbGxvd0FsaWFzICE9PSB1bmRlZmluZWQgJiYgKG9iai5hbGxvd0FsaWFzID0gbWVzc2FnZS5hbGxvd0FsaWFzKTtcbiAgICBtZXNzYWdlLmRlcHJlY2F0ZWQgIT09IHVuZGVmaW5lZCAmJiAob2JqLmRlcHJlY2F0ZWQgPSBtZXNzYWdlLmRlcHJlY2F0ZWQpO1xuICAgIG1lc3NhZ2UuZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAob2JqLmRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMgPSBtZXNzYWdlLmRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMpO1xuICAgIGlmIChtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24pIHtcbiAgICAgIG9iai51bmludGVycHJldGVkT3B0aW9uID0gbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uLm1hcCgoZSkgPT4gZSA/IFVuaW50ZXJwcmV0ZWRPcHRpb24udG9KU09OKGUpIDogdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLnVuaW50ZXJwcmV0ZWRPcHRpb24gPSBbXTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPEVudW1PcHRpb25zPik6IEVudW1PcHRpb25zIHtcbiAgICByZXR1cm4gRW51bU9wdGlvbnMuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG5cbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxFbnVtT3B0aW9ucz4pOiBFbnVtT3B0aW9ucyB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VFbnVtT3B0aW9ucygpO1xuICAgIG1lc3NhZ2UuYWxsb3dBbGlhcyA9IG9iamVjdC5hbGxvd0FsaWFzID8/IGZhbHNlO1xuICAgIG1lc3NhZ2UuZGVwcmVjYXRlZCA9IG9iamVjdC5kZXByZWNhdGVkID8/IGZhbHNlO1xuICAgIG1lc3NhZ2UuZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cyA9IG9iamVjdC5kZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzID8/IGZhbHNlO1xuICAgIG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbiA9IG9iamVjdC51bmludGVycHJldGVkT3B0aW9uPy5tYXAoKGUpID0+IFVuaW50ZXJwcmV0ZWRPcHRpb24uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZUVudW1WYWx1ZU9wdGlvbnMoKTogRW51bVZhbHVlT3B0aW9ucyB7XG4gIHJldHVybiB7IGRlcHJlY2F0ZWQ6IGZhbHNlLCB1bmludGVycHJldGVkT3B0aW9uOiBbXSB9O1xufVxuXG5leHBvcnQgY29uc3QgRW51bVZhbHVlT3B0aW9ucyA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IEVudW1WYWx1ZU9wdGlvbnMsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5kZXByZWNhdGVkID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS5kZXByZWNhdGVkKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbikge1xuICAgICAgVW5pbnRlcnByZXRlZE9wdGlvbi5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoNzk5NCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBFbnVtVmFsdWVPcHRpb25zIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUVudW1WYWx1ZU9wdGlvbnMoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZGVwcmVjYXRlZCA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgOTk5OlxuICAgICAgICAgIGlmICh0YWcgIT09IDc5OTQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbi5wdXNoKFVuaW50ZXJwcmV0ZWRPcHRpb24uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBFbnVtVmFsdWVPcHRpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGVwcmVjYXRlZDogaXNTZXQob2JqZWN0LmRlcHJlY2F0ZWQpID8gQm9vbGVhbihvYmplY3QuZGVwcmVjYXRlZCkgOiBmYWxzZSxcbiAgICAgIHVuaW50ZXJwcmV0ZWRPcHRpb246IEFycmF5LmlzQXJyYXkob2JqZWN0Py51bmludGVycHJldGVkT3B0aW9uKVxuICAgICAgICA/IG9iamVjdC51bmludGVycHJldGVkT3B0aW9uLm1hcCgoZTogYW55KSA9PiBVbmludGVycHJldGVkT3B0aW9uLmZyb21KU09OKGUpKVxuICAgICAgICA6IFtdLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IEVudW1WYWx1ZU9wdGlvbnMpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIG1lc3NhZ2UuZGVwcmVjYXRlZCAhPT0gdW5kZWZpbmVkICYmIChvYmouZGVwcmVjYXRlZCA9IG1lc3NhZ2UuZGVwcmVjYXRlZCk7XG4gICAgaWYgKG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbikge1xuICAgICAgb2JqLnVuaW50ZXJwcmV0ZWRPcHRpb24gPSBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24ubWFwKChlKSA9PiBlID8gVW5pbnRlcnByZXRlZE9wdGlvbi50b0pTT04oZSkgOiB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmoudW5pbnRlcnByZXRlZE9wdGlvbiA9IFtdO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8RW51bVZhbHVlT3B0aW9ucz4pOiBFbnVtVmFsdWVPcHRpb25zIHtcbiAgICByZXR1cm4gRW51bVZhbHVlT3B0aW9ucy5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPEVudW1WYWx1ZU9wdGlvbnM+KTogRW51bVZhbHVlT3B0aW9ucyB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VFbnVtVmFsdWVPcHRpb25zKCk7XG4gICAgbWVzc2FnZS5kZXByZWNhdGVkID0gb2JqZWN0LmRlcHJlY2F0ZWQgPz8gZmFsc2U7XG4gICAgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uID0gb2JqZWN0LnVuaW50ZXJwcmV0ZWRPcHRpb24/Lm1hcCgoZSkgPT4gVW5pbnRlcnByZXRlZE9wdGlvbi5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlU2VydmljZU9wdGlvbnMoKTogU2VydmljZU9wdGlvbnMge1xuICByZXR1cm4geyBkZXByZWNhdGVkOiBmYWxzZSwgdW5pbnRlcnByZXRlZE9wdGlvbjogW10gfTtcbn1cblxuZXhwb3J0IGNvbnN0IFNlcnZpY2VPcHRpb25zID0ge1xuICBlbmNvZGUobWVzc2FnZTogU2VydmljZU9wdGlvbnMsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5kZXByZWNhdGVkID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI2NCkuYm9vbChtZXNzYWdlLmRlcHJlY2F0ZWQpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uKSB7XG4gICAgICBVbmludGVycHJldGVkT3B0aW9uLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMig3OTk0KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFNlcnZpY2VPcHRpb25zIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVNlcnZpY2VPcHRpb25zKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjY0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmRlcHJlY2F0ZWQgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDk5OTpcbiAgICAgICAgICBpZiAodGFnICE9PSA3OTk0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24ucHVzaChVbmludGVycHJldGVkT3B0aW9uLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogU2VydmljZU9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBkZXByZWNhdGVkOiBpc1NldChvYmplY3QuZGVwcmVjYXRlZCkgPyBCb29sZWFuKG9iamVjdC5kZXByZWNhdGVkKSA6IGZhbHNlLFxuICAgICAgdW5pbnRlcnByZXRlZE9wdGlvbjogQXJyYXkuaXNBcnJheShvYmplY3Q/LnVuaW50ZXJwcmV0ZWRPcHRpb24pXG4gICAgICAgID8gb2JqZWN0LnVuaW50ZXJwcmV0ZWRPcHRpb24ubWFwKChlOiBhbnkpID0+IFVuaW50ZXJwcmV0ZWRPcHRpb24uZnJvbUpTT04oZSkpXG4gICAgICAgIDogW10sXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogU2VydmljZU9wdGlvbnMpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIG1lc3NhZ2UuZGVwcmVjYXRlZCAhPT0gdW5kZWZpbmVkICYmIChvYmouZGVwcmVjYXRlZCA9IG1lc3NhZ2UuZGVwcmVjYXRlZCk7XG4gICAgaWYgKG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbikge1xuICAgICAgb2JqLnVuaW50ZXJwcmV0ZWRPcHRpb24gPSBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24ubWFwKChlKSA9PiBlID8gVW5pbnRlcnByZXRlZE9wdGlvbi50b0pTT04oZSkgOiB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmoudW5pbnRlcnByZXRlZE9wdGlvbiA9IFtdO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8U2VydmljZU9wdGlvbnM+KTogU2VydmljZU9wdGlvbnMge1xuICAgIHJldHVybiBTZXJ2aWNlT3B0aW9ucy5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPFNlcnZpY2VPcHRpb25zPik6IFNlcnZpY2VPcHRpb25zIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVNlcnZpY2VPcHRpb25zKCk7XG4gICAgbWVzc2FnZS5kZXByZWNhdGVkID0gb2JqZWN0LmRlcHJlY2F0ZWQgPz8gZmFsc2U7XG4gICAgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uID0gb2JqZWN0LnVuaW50ZXJwcmV0ZWRPcHRpb24/Lm1hcCgoZSkgPT4gVW5pbnRlcnByZXRlZE9wdGlvbi5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlTWV0aG9kT3B0aW9ucygpOiBNZXRob2RPcHRpb25zIHtcbiAgcmV0dXJuIHsgZGVwcmVjYXRlZDogZmFsc2UsIGlkZW1wb3RlbmN5TGV2ZWw6IDAsIHVuaW50ZXJwcmV0ZWRPcHRpb246IFtdIH07XG59XG5cbmV4cG9ydCBjb25zdCBNZXRob2RPcHRpb25zID0ge1xuICBlbmNvZGUobWVzc2FnZTogTWV0aG9kT3B0aW9ucywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmRlcHJlY2F0ZWQgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjY0KS5ib29sKG1lc3NhZ2UuZGVwcmVjYXRlZCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmlkZW1wb3RlbmN5TGV2ZWwgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjcyKS5pbnQzMihtZXNzYWdlLmlkZW1wb3RlbmN5TGV2ZWwpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uKSB7XG4gICAgICBVbmludGVycHJldGVkT3B0aW9uLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMig3OTk0KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IE1ldGhvZE9wdGlvbnMge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlTWV0aG9kT3B0aW9ucygpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDMzOlxuICAgICAgICAgIGlmICh0YWcgIT09IDI2NCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5kZXByZWNhdGVkID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNzIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuaWRlbXBvdGVuY3lMZXZlbCA9IHJlYWRlci5pbnQzMigpIGFzIGFueTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA5OTk6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNzk5NCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uLnB1c2goVW5pbnRlcnByZXRlZE9wdGlvbi5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IE1ldGhvZE9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBkZXByZWNhdGVkOiBpc1NldChvYmplY3QuZGVwcmVjYXRlZCkgPyBCb29sZWFuKG9iamVjdC5kZXByZWNhdGVkKSA6IGZhbHNlLFxuICAgICAgaWRlbXBvdGVuY3lMZXZlbDogaXNTZXQob2JqZWN0LmlkZW1wb3RlbmN5TGV2ZWwpXG4gICAgICAgID8gbWV0aG9kT3B0aW9uc19JZGVtcG90ZW5jeUxldmVsRnJvbUpTT04ob2JqZWN0LmlkZW1wb3RlbmN5TGV2ZWwpXG4gICAgICAgIDogMCxcbiAgICAgIHVuaW50ZXJwcmV0ZWRPcHRpb246IEFycmF5LmlzQXJyYXkob2JqZWN0Py51bmludGVycHJldGVkT3B0aW9uKVxuICAgICAgICA/IG9iamVjdC51bmludGVycHJldGVkT3B0aW9uLm1hcCgoZTogYW55KSA9PiBVbmludGVycHJldGVkT3B0aW9uLmZyb21KU09OKGUpKVxuICAgICAgICA6IFtdLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IE1ldGhvZE9wdGlvbnMpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIG1lc3NhZ2UuZGVwcmVjYXRlZCAhPT0gdW5kZWZpbmVkICYmIChvYmouZGVwcmVjYXRlZCA9IG1lc3NhZ2UuZGVwcmVjYXRlZCk7XG4gICAgbWVzc2FnZS5pZGVtcG90ZW5jeUxldmVsICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIChvYmouaWRlbXBvdGVuY3lMZXZlbCA9IG1ldGhvZE9wdGlvbnNfSWRlbXBvdGVuY3lMZXZlbFRvSlNPTihtZXNzYWdlLmlkZW1wb3RlbmN5TGV2ZWwpKTtcbiAgICBpZiAobWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uKSB7XG4gICAgICBvYmoudW5pbnRlcnByZXRlZE9wdGlvbiA9IG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbi5tYXAoKGUpID0+IGUgPyBVbmludGVycHJldGVkT3B0aW9uLnRvSlNPTihlKSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai51bmludGVycHJldGVkT3B0aW9uID0gW107XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxNZXRob2RPcHRpb25zPik6IE1ldGhvZE9wdGlvbnMge1xuICAgIHJldHVybiBNZXRob2RPcHRpb25zLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8TWV0aG9kT3B0aW9ucz4pOiBNZXRob2RPcHRpb25zIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZU1ldGhvZE9wdGlvbnMoKTtcbiAgICBtZXNzYWdlLmRlcHJlY2F0ZWQgPSBvYmplY3QuZGVwcmVjYXRlZCA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLmlkZW1wb3RlbmN5TGV2ZWwgPSBvYmplY3QuaWRlbXBvdGVuY3lMZXZlbCA/PyAwO1xuICAgIG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbiA9IG9iamVjdC51bmludGVycHJldGVkT3B0aW9uPy5tYXAoKGUpID0+IFVuaW50ZXJwcmV0ZWRPcHRpb24uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZVVuaW50ZXJwcmV0ZWRPcHRpb24oKTogVW5pbnRlcnByZXRlZE9wdGlvbiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogW10sXG4gICAgaWRlbnRpZmllclZhbHVlOiBcIlwiLFxuICAgIHBvc2l0aXZlSW50VmFsdWU6IDAsXG4gICAgbmVnYXRpdmVJbnRWYWx1ZTogMCxcbiAgICBkb3VibGVWYWx1ZTogMCxcbiAgICBzdHJpbmdWYWx1ZTogbmV3IFVpbnQ4QXJyYXkoKSxcbiAgICBhZ2dyZWdhdGVWYWx1ZTogXCJcIixcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IFVuaW50ZXJwcmV0ZWRPcHRpb24gPSB7XG4gIGVuY29kZShtZXNzYWdlOiBVbmludGVycHJldGVkT3B0aW9uLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UubmFtZSkge1xuICAgICAgVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydC5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmlkZW50aWZpZXJWYWx1ZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNikuc3RyaW5nKG1lc3NhZ2UuaWRlbnRpZmllclZhbHVlKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucG9zaXRpdmVJbnRWYWx1ZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzMikudWludDY0KG1lc3NhZ2UucG9zaXRpdmVJbnRWYWx1ZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm5lZ2F0aXZlSW50VmFsdWUgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDApLmludDY0KG1lc3NhZ2UubmVnYXRpdmVJbnRWYWx1ZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRvdWJsZVZhbHVlICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ5KS5kb3VibGUobWVzc2FnZS5kb3VibGVWYWx1ZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnN0cmluZ1ZhbHVlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig1OCkuYnl0ZXMobWVzc2FnZS5zdHJpbmdWYWx1ZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmFnZ3JlZ2F0ZVZhbHVlICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDY2KS5zdHJpbmcobWVzc2FnZS5hZ2dyZWdhdGVWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogVW5pbnRlcnByZXRlZE9wdGlvbiB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VVbmludGVycHJldGVkT3B0aW9uKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5uYW1lLnB1c2goVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydC5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGlmICh0YWcgIT09IDI2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmlkZW50aWZpZXJWYWx1ZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGlmICh0YWcgIT09IDMyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnBvc2l0aXZlSW50VmFsdWUgPSBsb25nVG9OdW1iZXIocmVhZGVyLnVpbnQ2NCgpIGFzIExvbmcpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNDApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubmVnYXRpdmVJbnRWYWx1ZSA9IGxvbmdUb051bWJlcihyZWFkZXIuaW50NjQoKSBhcyBMb25nKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIGlmICh0YWcgIT09IDQ5KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmRvdWJsZVZhbHVlID0gcmVhZGVyLmRvdWJsZSgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNTgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uuc3RyaW5nVmFsdWUgPSByZWFkZXIuYnl0ZXMoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIGlmICh0YWcgIT09IDY2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmFnZ3JlZ2F0ZVZhbHVlID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogVW5pbnRlcnByZXRlZE9wdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IEFycmF5LmlzQXJyYXkob2JqZWN0Py5uYW1lKSA/IG9iamVjdC5uYW1lLm1hcCgoZTogYW55KSA9PiBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0LmZyb21KU09OKGUpKSA6IFtdLFxuICAgICAgaWRlbnRpZmllclZhbHVlOiBpc1NldChvYmplY3QuaWRlbnRpZmllclZhbHVlKSA/IFN0cmluZyhvYmplY3QuaWRlbnRpZmllclZhbHVlKSA6IFwiXCIsXG4gICAgICBwb3NpdGl2ZUludFZhbHVlOiBpc1NldChvYmplY3QucG9zaXRpdmVJbnRWYWx1ZSkgPyBOdW1iZXIob2JqZWN0LnBvc2l0aXZlSW50VmFsdWUpIDogMCxcbiAgICAgIG5lZ2F0aXZlSW50VmFsdWU6IGlzU2V0KG9iamVjdC5uZWdhdGl2ZUludFZhbHVlKSA/IE51bWJlcihvYmplY3QubmVnYXRpdmVJbnRWYWx1ZSkgOiAwLFxuICAgICAgZG91YmxlVmFsdWU6IGlzU2V0KG9iamVjdC5kb3VibGVWYWx1ZSkgPyBOdW1iZXIob2JqZWN0LmRvdWJsZVZhbHVlKSA6IDAsXG4gICAgICBzdHJpbmdWYWx1ZTogaXNTZXQob2JqZWN0LnN0cmluZ1ZhbHVlKSA/IGJ5dGVzRnJvbUJhc2U2NChvYmplY3Quc3RyaW5nVmFsdWUpIDogbmV3IFVpbnQ4QXJyYXkoKSxcbiAgICAgIGFnZ3JlZ2F0ZVZhbHVlOiBpc1NldChvYmplY3QuYWdncmVnYXRlVmFsdWUpID8gU3RyaW5nKG9iamVjdC5hZ2dyZWdhdGVWYWx1ZSkgOiBcIlwiLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IFVuaW50ZXJwcmV0ZWRPcHRpb24pOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLm5hbWUpIHtcbiAgICAgIG9iai5uYW1lID0gbWVzc2FnZS5uYW1lLm1hcCgoZSkgPT4gZSA/IFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQudG9KU09OKGUpIDogdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLm5hbWUgPSBbXTtcbiAgICB9XG4gICAgbWVzc2FnZS5pZGVudGlmaWVyVmFsdWUgIT09IHVuZGVmaW5lZCAmJiAob2JqLmlkZW50aWZpZXJWYWx1ZSA9IG1lc3NhZ2UuaWRlbnRpZmllclZhbHVlKTtcbiAgICBtZXNzYWdlLnBvc2l0aXZlSW50VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAob2JqLnBvc2l0aXZlSW50VmFsdWUgPSBNYXRoLnJvdW5kKG1lc3NhZ2UucG9zaXRpdmVJbnRWYWx1ZSkpO1xuICAgIG1lc3NhZ2UubmVnYXRpdmVJbnRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIChvYmoubmVnYXRpdmVJbnRWYWx1ZSA9IE1hdGgucm91bmQobWVzc2FnZS5uZWdhdGl2ZUludFZhbHVlKSk7XG4gICAgbWVzc2FnZS5kb3VibGVWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIChvYmouZG91YmxlVmFsdWUgPSBtZXNzYWdlLmRvdWJsZVZhbHVlKTtcbiAgICBtZXNzYWdlLnN0cmluZ1ZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIChvYmouc3RyaW5nVmFsdWUgPSBiYXNlNjRGcm9tQnl0ZXMobWVzc2FnZS5zdHJpbmdWYWx1ZSAhPT0gdW5kZWZpbmVkID8gbWVzc2FnZS5zdHJpbmdWYWx1ZSA6IG5ldyBVaW50OEFycmF5KCkpKTtcbiAgICBtZXNzYWdlLmFnZ3JlZ2F0ZVZhbHVlICE9PSB1bmRlZmluZWQgJiYgKG9iai5hZ2dyZWdhdGVWYWx1ZSA9IG1lc3NhZ2UuYWdncmVnYXRlVmFsdWUpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxVbmludGVycHJldGVkT3B0aW9uPik6IFVuaW50ZXJwcmV0ZWRPcHRpb24ge1xuICAgIHJldHVybiBVbmludGVycHJldGVkT3B0aW9uLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8VW5pbnRlcnByZXRlZE9wdGlvbj4pOiBVbmludGVycHJldGVkT3B0aW9uIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVVuaW50ZXJwcmV0ZWRPcHRpb24oKTtcbiAgICBtZXNzYWdlLm5hbWUgPSBvYmplY3QubmFtZT8ubWFwKChlKSA9PiBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0LmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICBtZXNzYWdlLmlkZW50aWZpZXJWYWx1ZSA9IG9iamVjdC5pZGVudGlmaWVyVmFsdWUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLnBvc2l0aXZlSW50VmFsdWUgPSBvYmplY3QucG9zaXRpdmVJbnRWYWx1ZSA/PyAwO1xuICAgIG1lc3NhZ2UubmVnYXRpdmVJbnRWYWx1ZSA9IG9iamVjdC5uZWdhdGl2ZUludFZhbHVlID8/IDA7XG4gICAgbWVzc2FnZS5kb3VibGVWYWx1ZSA9IG9iamVjdC5kb3VibGVWYWx1ZSA/PyAwO1xuICAgIG1lc3NhZ2Uuc3RyaW5nVmFsdWUgPSBvYmplY3Quc3RyaW5nVmFsdWUgPz8gbmV3IFVpbnQ4QXJyYXkoKTtcbiAgICBtZXNzYWdlLmFnZ3JlZ2F0ZVZhbHVlID0gb2JqZWN0LmFnZ3JlZ2F0ZVZhbHVlID8/IFwiXCI7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydCgpOiBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0IHtcbiAgcmV0dXJuIHsgbmFtZVBhcnQ6IFwiXCIsIGlzRXh0ZW5zaW9uOiBmYWxzZSB9O1xufVxuXG5leHBvcnQgY29uc3QgVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5uYW1lUGFydCAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UubmFtZVBhcnQpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pc0V4dGVuc2lvbiA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuYm9vbChtZXNzYWdlLmlzRXh0ZW5zaW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0IHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm5hbWVQYXJ0ID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuaXNFeHRlbnNpb24gPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWVQYXJ0OiBpc1NldChvYmplY3QubmFtZVBhcnQpID8gU3RyaW5nKG9iamVjdC5uYW1lUGFydCkgOiBcIlwiLFxuICAgICAgaXNFeHRlbnNpb246IGlzU2V0KG9iamVjdC5pc0V4dGVuc2lvbikgPyBCb29sZWFuKG9iamVjdC5pc0V4dGVuc2lvbikgOiBmYWxzZSxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0KTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBtZXNzYWdlLm5hbWVQYXJ0ICE9PSB1bmRlZmluZWQgJiYgKG9iai5uYW1lUGFydCA9IG1lc3NhZ2UubmFtZVBhcnQpO1xuICAgIG1lc3NhZ2UuaXNFeHRlbnNpb24gIT09IHVuZGVmaW5lZCAmJiAob2JqLmlzRXh0ZW5zaW9uID0gbWVzc2FnZS5pc0V4dGVuc2lvbik7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQ+KTogVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydCB7XG4gICAgcmV0dXJuIFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG5cbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0Pik6IFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydCgpO1xuICAgIG1lc3NhZ2UubmFtZVBhcnQgPSBvYmplY3QubmFtZVBhcnQgPz8gXCJcIjtcbiAgICBtZXNzYWdlLmlzRXh0ZW5zaW9uID0gb2JqZWN0LmlzRXh0ZW5zaW9uID8/IGZhbHNlO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZVNvdXJjZUNvZGVJbmZvKCk6IFNvdXJjZUNvZGVJbmZvIHtcbiAgcmV0dXJuIHsgbG9jYXRpb246IFtdIH07XG59XG5cbmV4cG9ydCBjb25zdCBTb3VyY2VDb2RlSW5mbyA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFNvdXJjZUNvZGVJbmZvLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UubG9jYXRpb24pIHtcbiAgICAgIFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBTb3VyY2VDb2RlSW5mbyB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VTb3VyY2VDb2RlSW5mbygpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubG9jYXRpb24ucHVzaChTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbi5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IFNvdXJjZUNvZGVJbmZvIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9jYXRpb246IEFycmF5LmlzQXJyYXkob2JqZWN0Py5sb2NhdGlvbilcbiAgICAgICAgPyBvYmplY3QubG9jYXRpb24ubWFwKChlOiBhbnkpID0+IFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uLmZyb21KU09OKGUpKVxuICAgICAgICA6IFtdLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IFNvdXJjZUNvZGVJbmZvKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS5sb2NhdGlvbikge1xuICAgICAgb2JqLmxvY2F0aW9uID0gbWVzc2FnZS5sb2NhdGlvbi5tYXAoKGUpID0+IGUgPyBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbi50b0pTT04oZSkgOiB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmoubG9jYXRpb24gPSBbXTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPFNvdXJjZUNvZGVJbmZvPik6IFNvdXJjZUNvZGVJbmZvIHtcbiAgICByZXR1cm4gU291cmNlQ29kZUluZm8uZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG5cbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxTb3VyY2VDb2RlSW5mbz4pOiBTb3VyY2VDb2RlSW5mbyB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VTb3VyY2VDb2RlSW5mbygpO1xuICAgIG1lc3NhZ2UubG9jYXRpb24gPSBvYmplY3QubG9jYXRpb24/Lm1hcCgoZSkgPT4gU291cmNlQ29kZUluZm9fTG9jYXRpb24uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZVNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uKCk6IFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uIHtcbiAgcmV0dXJuIHsgcGF0aDogW10sIHNwYW46IFtdLCBsZWFkaW5nQ29tbWVudHM6IFwiXCIsIHRyYWlsaW5nQ29tbWVudHM6IFwiXCIsIGxlYWRpbmdEZXRhY2hlZENvbW1lbnRzOiBbXSB9O1xufVxuXG5leHBvcnQgY29uc3QgU291cmNlQ29kZUluZm9fTG9jYXRpb24gPSB7XG4gIGVuY29kZShtZXNzYWdlOiBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbiwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIHdyaXRlci51aW50MzIoMTApLmZvcmsoKTtcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5wYXRoKSB7XG4gICAgICB3cml0ZXIuaW50MzIodik7XG4gICAgfVxuICAgIHdyaXRlci5sZGVsaW0oKTtcbiAgICB3cml0ZXIudWludDMyKDE4KS5mb3JrKCk7XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2Uuc3Bhbikge1xuICAgICAgd3JpdGVyLmludDMyKHYpO1xuICAgIH1cbiAgICB3cml0ZXIubGRlbGltKCk7XG4gICAgaWYgKG1lc3NhZ2UubGVhZGluZ0NvbW1lbnRzICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI2KS5zdHJpbmcobWVzc2FnZS5sZWFkaW5nQ29tbWVudHMpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS50cmFpbGluZ0NvbW1lbnRzICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM0KS5zdHJpbmcobWVzc2FnZS50cmFpbGluZ0NvbW1lbnRzKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UubGVhZGluZ0RldGFjaGVkQ29tbWVudHMpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTApLnN0cmluZyh2ISk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogU291cmNlQ29kZUluZm9fTG9jYXRpb24ge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlU291cmNlQ29kZUluZm9fTG9jYXRpb24oKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgPT09IDgpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UucGF0aC5wdXNoKHJlYWRlci5pbnQzMigpKTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRhZyA9PT0gMTApIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZDIgPSByZWFkZXIudWludDMyKCkgKyByZWFkZXIucG9zO1xuICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQyKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UucGF0aC5wdXNoKHJlYWRlci5pbnQzMigpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnID09PSAxNikge1xuICAgICAgICAgICAgbWVzc2FnZS5zcGFuLnB1c2gocmVhZGVyLmludDMyKCkpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGFnID09PSAxOCkge1xuICAgICAgICAgICAgY29uc3QgZW5kMiA9IHJlYWRlci51aW50MzIoKSArIHJlYWRlci5wb3M7XG4gICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZDIpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZS5zcGFuLnB1c2gocmVhZGVyLmludDMyKCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGlmICh0YWcgIT09IDI2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmxlYWRpbmdDb21tZW50cyA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGlmICh0YWcgIT09IDM0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnRyYWlsaW5nQ29tbWVudHMgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBpZiAodGFnICE9PSA1MCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5sZWFkaW5nRGV0YWNoZWRDb21tZW50cy5wdXNoKHJlYWRlci5zdHJpbmcoKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGg6IEFycmF5LmlzQXJyYXkob2JqZWN0Py5wYXRoKSA/IG9iamVjdC5wYXRoLm1hcCgoZTogYW55KSA9PiBOdW1iZXIoZSkpIDogW10sXG4gICAgICBzcGFuOiBBcnJheS5pc0FycmF5KG9iamVjdD8uc3BhbikgPyBvYmplY3Quc3Bhbi5tYXAoKGU6IGFueSkgPT4gTnVtYmVyKGUpKSA6IFtdLFxuICAgICAgbGVhZGluZ0NvbW1lbnRzOiBpc1NldChvYmplY3QubGVhZGluZ0NvbW1lbnRzKSA/IFN0cmluZyhvYmplY3QubGVhZGluZ0NvbW1lbnRzKSA6IFwiXCIsXG4gICAgICB0cmFpbGluZ0NvbW1lbnRzOiBpc1NldChvYmplY3QudHJhaWxpbmdDb21tZW50cykgPyBTdHJpbmcob2JqZWN0LnRyYWlsaW5nQ29tbWVudHMpIDogXCJcIixcbiAgICAgIGxlYWRpbmdEZXRhY2hlZENvbW1lbnRzOiBBcnJheS5pc0FycmF5KG9iamVjdD8ubGVhZGluZ0RldGFjaGVkQ29tbWVudHMpXG4gICAgICAgID8gb2JqZWN0LmxlYWRpbmdEZXRhY2hlZENvbW1lbnRzLm1hcCgoZTogYW55KSA9PiBTdHJpbmcoZSkpXG4gICAgICAgIDogW10sXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogU291cmNlQ29kZUluZm9fTG9jYXRpb24pOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLnBhdGgpIHtcbiAgICAgIG9iai5wYXRoID0gbWVzc2FnZS5wYXRoLm1hcCgoZSkgPT4gTWF0aC5yb3VuZChlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5wYXRoID0gW107XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNwYW4pIHtcbiAgICAgIG9iai5zcGFuID0gbWVzc2FnZS5zcGFuLm1hcCgoZSkgPT4gTWF0aC5yb3VuZChlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5zcGFuID0gW107XG4gICAgfVxuICAgIG1lc3NhZ2UubGVhZGluZ0NvbW1lbnRzICE9PSB1bmRlZmluZWQgJiYgKG9iai5sZWFkaW5nQ29tbWVudHMgPSBtZXNzYWdlLmxlYWRpbmdDb21tZW50cyk7XG4gICAgbWVzc2FnZS50cmFpbGluZ0NvbW1lbnRzICE9PSB1bmRlZmluZWQgJiYgKG9iai50cmFpbGluZ0NvbW1lbnRzID0gbWVzc2FnZS50cmFpbGluZ0NvbW1lbnRzKTtcbiAgICBpZiAobWVzc2FnZS5sZWFkaW5nRGV0YWNoZWRDb21tZW50cykge1xuICAgICAgb2JqLmxlYWRpbmdEZXRhY2hlZENvbW1lbnRzID0gbWVzc2FnZS5sZWFkaW5nRGV0YWNoZWRDb21tZW50cy5tYXAoKGUpID0+IGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmoubGVhZGluZ0RldGFjaGVkQ29tbWVudHMgPSBbXTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uPik6IFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uIHtcbiAgICByZXR1cm4gU291cmNlQ29kZUluZm9fTG9jYXRpb24uZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG5cbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbj4pOiBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbiB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbigpO1xuICAgIG1lc3NhZ2UucGF0aCA9IG9iamVjdC5wYXRoPy5tYXAoKGUpID0+IGUpIHx8IFtdO1xuICAgIG1lc3NhZ2Uuc3BhbiA9IG9iamVjdC5zcGFuPy5tYXAoKGUpID0+IGUpIHx8IFtdO1xuICAgIG1lc3NhZ2UubGVhZGluZ0NvbW1lbnRzID0gb2JqZWN0LmxlYWRpbmdDb21tZW50cyA/PyBcIlwiO1xuICAgIG1lc3NhZ2UudHJhaWxpbmdDb21tZW50cyA9IG9iamVjdC50cmFpbGluZ0NvbW1lbnRzID8/IFwiXCI7XG4gICAgbWVzc2FnZS5sZWFkaW5nRGV0YWNoZWRDb21tZW50cyA9IG9iamVjdC5sZWFkaW5nRGV0YWNoZWRDb21tZW50cz8ubWFwKChlKSA9PiBlKSB8fCBbXTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VHZW5lcmF0ZWRDb2RlSW5mbygpOiBHZW5lcmF0ZWRDb2RlSW5mbyB7XG4gIHJldHVybiB7IGFubm90YXRpb246IFtdIH07XG59XG5cbmV4cG9ydCBjb25zdCBHZW5lcmF0ZWRDb2RlSW5mbyA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IEdlbmVyYXRlZENvZGVJbmZvLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UuYW5ub3RhdGlvbikge1xuICAgICAgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbi5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogR2VuZXJhdGVkQ29kZUluZm8ge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlR2VuZXJhdGVkQ29kZUluZm8oKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmFubm90YXRpb24ucHVzaChHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogR2VuZXJhdGVkQ29kZUluZm8ge1xuICAgIHJldHVybiB7XG4gICAgICBhbm5vdGF0aW9uOiBBcnJheS5pc0FycmF5KG9iamVjdD8uYW5ub3RhdGlvbilcbiAgICAgICAgPyBvYmplY3QuYW5ub3RhdGlvbi5tYXAoKGU6IGFueSkgPT4gR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbi5mcm9tSlNPTihlKSlcbiAgICAgICAgOiBbXSxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBHZW5lcmF0ZWRDb2RlSW5mbyk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UuYW5ub3RhdGlvbikge1xuICAgICAgb2JqLmFubm90YXRpb24gPSBtZXNzYWdlLmFubm90YXRpb24ubWFwKChlKSA9PiBlID8gR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbi50b0pTT04oZSkgOiB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmouYW5ub3RhdGlvbiA9IFtdO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8R2VuZXJhdGVkQ29kZUluZm8+KTogR2VuZXJhdGVkQ29kZUluZm8ge1xuICAgIHJldHVybiBHZW5lcmF0ZWRDb2RlSW5mby5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPEdlbmVyYXRlZENvZGVJbmZvPik6IEdlbmVyYXRlZENvZGVJbmZvIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUdlbmVyYXRlZENvZGVJbmZvKCk7XG4gICAgbWVzc2FnZS5hbm5vdGF0aW9uID0gb2JqZWN0LmFubm90YXRpb24/Lm1hcCgoZSkgPT4gR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbi5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbigpOiBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uIHtcbiAgcmV0dXJuIHsgcGF0aDogW10sIHNvdXJjZUZpbGU6IFwiXCIsIGJlZ2luOiAwLCBlbmQ6IDAsIHNlbWFudGljOiAwIH07XG59XG5cbmV4cG9ydCBjb25zdCBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uID0ge1xuICBlbmNvZGUobWVzc2FnZTogR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbiwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIHdyaXRlci51aW50MzIoMTApLmZvcmsoKTtcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5wYXRoKSB7XG4gICAgICB3cml0ZXIuaW50MzIodik7XG4gICAgfVxuICAgIHdyaXRlci5sZGVsaW0oKTtcbiAgICBpZiAobWVzc2FnZS5zb3VyY2VGaWxlICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE4KS5zdHJpbmcobWVzc2FnZS5zb3VyY2VGaWxlKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYmVnaW4gIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmludDMyKG1lc3NhZ2UuYmVnaW4pO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5lbmQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzIpLmludDMyKG1lc3NhZ2UuZW5kKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2VtYW50aWMgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDApLmludDMyKG1lc3NhZ2Uuc2VtYW50aWMpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24ge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbigpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyA9PT0gOCkge1xuICAgICAgICAgICAgbWVzc2FnZS5wYXRoLnB1c2gocmVhZGVyLmludDMyKCkpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGFnID09PSAxMCkge1xuICAgICAgICAgICAgY29uc3QgZW5kMiA9IHJlYWRlci51aW50MzIoKSArIHJlYWRlci5wb3M7XG4gICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZDIpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZS5wYXRoLnB1c2gocmVhZGVyLmludDMyKCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmICh0YWcgIT09IDE4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnNvdXJjZUZpbGUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5iZWdpbiA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMzIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZW5kID0gcmVhZGVyLmludDMyKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBpZiAodGFnICE9PSA0MCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5zZW1hbnRpYyA9IHJlYWRlci5pbnQzMigpIGFzIGFueTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24ge1xuICAgIHJldHVybiB7XG4gICAgICBwYXRoOiBBcnJheS5pc0FycmF5KG9iamVjdD8ucGF0aCkgPyBvYmplY3QucGF0aC5tYXAoKGU6IGFueSkgPT4gTnVtYmVyKGUpKSA6IFtdLFxuICAgICAgc291cmNlRmlsZTogaXNTZXQob2JqZWN0LnNvdXJjZUZpbGUpID8gU3RyaW5nKG9iamVjdC5zb3VyY2VGaWxlKSA6IFwiXCIsXG4gICAgICBiZWdpbjogaXNTZXQob2JqZWN0LmJlZ2luKSA/IE51bWJlcihvYmplY3QuYmVnaW4pIDogMCxcbiAgICAgIGVuZDogaXNTZXQob2JqZWN0LmVuZCkgPyBOdW1iZXIob2JqZWN0LmVuZCkgOiAwLFxuICAgICAgc2VtYW50aWM6IGlzU2V0KG9iamVjdC5zZW1hbnRpYykgPyBnZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljRnJvbUpTT04ob2JqZWN0LnNlbWFudGljKSA6IDAsXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbik6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UucGF0aCkge1xuICAgICAgb2JqLnBhdGggPSBtZXNzYWdlLnBhdGgubWFwKChlKSA9PiBNYXRoLnJvdW5kKGUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLnBhdGggPSBbXTtcbiAgICB9XG4gICAgbWVzc2FnZS5zb3VyY2VGaWxlICE9PSB1bmRlZmluZWQgJiYgKG9iai5zb3VyY2VGaWxlID0gbWVzc2FnZS5zb3VyY2VGaWxlKTtcbiAgICBtZXNzYWdlLmJlZ2luICE9PSB1bmRlZmluZWQgJiYgKG9iai5iZWdpbiA9IE1hdGgucm91bmQobWVzc2FnZS5iZWdpbikpO1xuICAgIG1lc3NhZ2UuZW5kICE9PSB1bmRlZmluZWQgJiYgKG9iai5lbmQgPSBNYXRoLnJvdW5kKG1lc3NhZ2UuZW5kKSk7XG4gICAgbWVzc2FnZS5zZW1hbnRpYyAhPT0gdW5kZWZpbmVkICYmIChvYmouc2VtYW50aWMgPSBnZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljVG9KU09OKG1lc3NhZ2Uuc2VtYW50aWMpKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8R2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbj4pOiBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uIHtcbiAgICByZXR1cm4gR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbi5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24+KTogR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbiB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uKCk7XG4gICAgbWVzc2FnZS5wYXRoID0gb2JqZWN0LnBhdGg/Lm1hcCgoZSkgPT4gZSkgfHwgW107XG4gICAgbWVzc2FnZS5zb3VyY2VGaWxlID0gb2JqZWN0LnNvdXJjZUZpbGUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLmJlZ2luID0gb2JqZWN0LmJlZ2luID8/IDA7XG4gICAgbWVzc2FnZS5lbmQgPSBvYmplY3QuZW5kID8/IDA7XG4gICAgbWVzc2FnZS5zZW1hbnRpYyA9IG9iamVjdC5zZW1hbnRpYyA/PyAwO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZGVjbGFyZSB2YXIgc2VsZjogYW55IHwgdW5kZWZpbmVkO1xuZGVjbGFyZSB2YXIgd2luZG93OiBhbnkgfCB1bmRlZmluZWQ7XG5kZWNsYXJlIHZhciBnbG9iYWw6IGFueSB8IHVuZGVmaW5lZDtcbnZhciB0c1Byb3RvR2xvYmFsVGhpczogYW55ID0gKCgpID0+IHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXM7XG4gIH1cbiAgaWYgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHNlbGY7XG4gIH1cbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gd2luZG93O1xuICB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIGdsb2JhbDtcbiAgfVxuICB0aHJvdyBcIlVuYWJsZSB0byBsb2NhdGUgZ2xvYmFsIG9iamVjdFwiO1xufSkoKTtcblxuZnVuY3Rpb24gYnl0ZXNGcm9tQmFzZTY0KGI2NDogc3RyaW5nKTogVWludDhBcnJheSB7XG4gIGlmICh0c1Byb3RvR2xvYmFsVGhpcy5CdWZmZXIpIHtcbiAgICByZXR1cm4gVWludDhBcnJheS5mcm9tKHRzUHJvdG9HbG9iYWxUaGlzLkJ1ZmZlci5mcm9tKGI2NCwgXCJiYXNlNjRcIikpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJpbiA9IHRzUHJvdG9HbG9iYWxUaGlzLmF0b2IoYjY0KTtcbiAgICBjb25zdCBhcnIgPSBuZXcgVWludDhBcnJheShiaW4ubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJpbi5sZW5ndGg7ICsraSkge1xuICAgICAgYXJyW2ldID0gYmluLmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuICAgIHJldHVybiBhcnI7XG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0RnJvbUJ5dGVzKGFycjogVWludDhBcnJheSk6IHN0cmluZyB7XG4gIGlmICh0c1Byb3RvR2xvYmFsVGhpcy5CdWZmZXIpIHtcbiAgICByZXR1cm4gdHNQcm90b0dsb2JhbFRoaXMuQnVmZmVyLmZyb20oYXJyKS50b1N0cmluZyhcImJhc2U2NFwiKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBiaW46IHN0cmluZ1tdID0gW107XG4gICAgYXJyLmZvckVhY2goKGJ5dGUpID0+IHtcbiAgICAgIGJpbi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZSkpO1xuICAgIH0pO1xuICAgIHJldHVybiB0c1Byb3RvR2xvYmFsVGhpcy5idG9hKGJpbi5qb2luKFwiXCIpKTtcbiAgfVxufVxuXG50eXBlIEJ1aWx0aW4gPSBEYXRlIHwgRnVuY3Rpb24gfCBVaW50OEFycmF5IHwgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgRGVlcFBhcnRpYWw8VD4gPSBUIGV4dGVuZHMgQnVpbHRpbiA/IFRcbiAgOiBUIGV4dGVuZHMgQXJyYXk8aW5mZXIgVT4gPyBBcnJheTxEZWVwUGFydGlhbDxVPj4gOiBUIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxpbmZlciBVPiA/IFJlYWRvbmx5QXJyYXk8RGVlcFBhcnRpYWw8VT4+XG4gIDogVCBleHRlbmRzIHsgJGNhc2U6IHN0cmluZyB9ID8geyBbSyBpbiBrZXlvZiBPbWl0PFQsIFwiJGNhc2VcIj5dPzogRGVlcFBhcnRpYWw8VFtLXT4gfSAmIHsgJGNhc2U6IFRbXCIkY2FzZVwiXSB9XG4gIDogVCBleHRlbmRzIHt9ID8geyBbSyBpbiBrZXlvZiBUXT86IERlZXBQYXJ0aWFsPFRbS10+IH1cbiAgOiBQYXJ0aWFsPFQ+O1xuXG5mdW5jdGlvbiBsb25nVG9OdW1iZXIobG9uZzogTG9uZyk6IG51bWJlciB7XG4gIGlmIChsb25nLmd0KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSkge1xuICAgIHRocm93IG5ldyB0c1Byb3RvR2xvYmFsVGhpcy5FcnJvcihcIlZhbHVlIGlzIGxhcmdlciB0aGFuIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXCIpO1xuICB9XG4gIHJldHVybiBsb25nLnRvTnVtYmVyKCk7XG59XG5cbmlmIChfbTAudXRpbC5Mb25nICE9PSBMb25nKSB7XG4gIF9tMC51dGlsLkxvbmcgPSBMb25nIGFzIGFueTtcbiAgX20wLmNvbmZpZ3VyZSgpO1xufVxuXG5mdW5jdGlvbiBpc1NldCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkO1xufVxuIl19
|