@coralogix/rum-cli 1.1.38 → 1.1.43
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 +2 -0
- package/api/base/base.api.ts +48 -56
- package/api/dsym/dsym.api.ts +8 -0
- package/api/proguard/proguard.api.ts +8 -0
- package/api/react-native/react-native.api.ts +8 -0
- package/api/source-maps/source-maps.api.ts +8 -0
- package/cli/commands/dsym/upload-dsym-command.ts +4 -2
- package/cli/commands/proguard/upload-proguard-command.ts +4 -2
- package/cli/commands/react-native/upload-react-native-source-maps-command.ts +4 -2
- package/cli/commands/source-maps/upload-source-maps-command.ts +4 -2
- package/consts/consts.ts +1 -0
- package/dist/api/base/base.api.d.ts +10 -9
- package/dist/api/base/base.api.js +20 -34
- package/dist/api/dsym/dsym.api.d.ts +2 -2
- package/dist/api/dsym/dsym.api.js +7 -3
- package/dist/api/proguard/proguard.api.d.ts +2 -2
- package/dist/api/proguard/proguard.api.js +7 -3
- package/dist/api/react-native/react-native.api.d.ts +2 -2
- package/dist/api/react-native/react-native.api.js +7 -3
- package/dist/api/source-maps/source-maps.api.d.ts +2 -2
- package/dist/api/source-maps/source-maps.api.js +7 -3
- package/dist/cli/commands/dsym/upload-dsym-command.js +5 -3
- package/dist/cli/commands/proguard/upload-proguard-command.js +5 -3
- package/dist/cli/commands/react-native/upload-react-native-source-maps-command.js +5 -3
- package/dist/cli/commands/source-maps/upload-source-maps-command.js +5 -3
- package/dist/consts/consts.js +3 -2
- package/dist/grpc-client/grpc-client-factory.d.ts +158 -0
- package/dist/models/dsym-commands.model.d.ts +2 -0
- package/dist/models/dsym-commands.model.js +1 -1
- package/dist/models/proguard-commands.model.d.ts +2 -0
- package/dist/models/proguard-commands.model.js +1 -1
- package/dist/models/react-native-commands.model.d.ts +2 -0
- package/dist/models/react-native-commands.model.js +1 -1
- package/dist/models/source-maps-commands.model.d.ts +2 -0
- package/dist/models/source-maps-commands.model.js +1 -1
- package/dist/proto-models/com/coralogix/blobset/v2/blobset_query_service.d.ts +150 -0
- package/dist/proto-models/com/coralogix/blobset/v2/blobset_query_service.js +29 -1
- package/dist/proto-models/com/coralogix/blobset/v2/case_file.d.ts +36 -0
- package/dist/proto-models/com/coralogix/blobset/v2/case_file.js +161 -0
- package/dist/proto-models/com/coralogix/blobset/v2/dsym.d.ts +1 -0
- package/dist/proto-models/com/coralogix/blobset/v2/dsym.js +33 -3
- package/dist/proto-models/com/coralogix/blobset/v2/entity_metadata.d.ts +47 -0
- package/dist/proto-models/com/coralogix/blobset/v2/entity_metadata.js +375 -11
- package/dist/proto-models/com/coralogix/blobset/v2/entity_type.d.ts +3 -1
- package/dist/proto-models/com/coralogix/blobset/v2/entity_type.js +13 -1
- package/dist/proto-models/com/coralogix/blobset/v2/investigation_file.d.ts +36 -0
- package/dist/proto-models/com/coralogix/blobset/v2/investigation_file.js +161 -0
- package/dist/proto-models/com/coralogix/blobset/v2/proguard.d.ts +68 -0
- package/dist/proto-models/com/coralogix/blobset/v2/proguard.js +400 -0
- package/dist/proto-models/com/coralogix/rum/v2/ai_assist.d.ts +89 -0
- package/dist/proto-models/com/coralogix/rum/v2/ai_assist.js +290 -0
- package/dist/proto-models/com/coralogix/rum/v2/application_releases.d.ts +38 -0
- package/dist/proto-models/com/coralogix/rum/v2/application_releases.js +180 -0
- package/dist/proto-models/com/coralogix/rum/v2/merge_error.d.ts +38 -0
- package/dist/proto-models/com/coralogix/rum/v2/merge_error.js +171 -0
- package/dist/proto-models/com/coralogix/rum/v2/release_entity_metadata.d.ts +19 -0
- package/dist/proto-models/com/coralogix/rum/v2/release_entity_metadata.js +225 -10
- package/dist/proto-models/com/coralogix/rum/v2/rum_merge_erros_service.d.ts +197 -0
- package/dist/proto-models/com/coralogix/rum/v2/rum_merge_erros_service.js +478 -0
- package/dist/proto-models/com/coralogix/rum/v2/rum_service.d.ts +107 -0
- package/dist/proto-models/com/coralogix/rum/v2/rum_service.js +385 -2
- package/dist/proto-models/com/coralogix/rum/v2/rum_source_map_service.d.ts +94 -1
- package/dist/proto-models/com/coralogix/rum/v2/rum_source_map_service.js +300 -2
- package/dist/proto-models/com/coralogix/rum/v2/saved_filter.d.ts +5 -1
- package/dist/proto-models/com/coralogix/rum/v2/saved_filter.js +25 -1
- package/dist/proto-models/com/coralogix/rum/v2/template.d.ts +2 -0
- package/dist/proto-models/com/coralogix/rum/v2/template.js +31 -3
- package/dist/proto-models/google/protobuf/struct.d.ts +127 -0
- package/dist/proto-models/google/protobuf/struct.js +476 -0
- package/dist/services/base/base.service.d.ts +1 -1
- package/dist/services/base/base.service.js +7 -5
- package/dist/utils/upload-mode.utils.d.ts +12 -0
- package/dist/utils/upload-mode.utils.js +26 -0
- package/dist/utils/version-context.utils.d.ts +20 -0
- package/dist/utils/version-context.utils.js +71 -0
- package/models/dsym-commands.model.ts +2 -0
- package/models/proguard-commands.model.ts +2 -0
- package/models/react-native-commands.model.ts +2 -0
- package/models/source-maps-commands.model.ts +2 -0
- package/package.json +2 -2
- package/protofetch.lock +4 -4
- package/protofetch.toml +2 -2
- package/services/base/base.service.ts +7 -3
- package/utils/upload-mode.utils.ts +30 -0
- package/utils/version-context.utils.ts +95 -0
- package/proto-models/com/coralogix/blobset/v2/audit_log.ts +0 -84
- package/proto-models/com/coralogix/blobset/v2/blobset_query_service.ts +0 -36
- package/proto-models/com/coralogix/blobset/v2/blobset_service.ts +0 -209
- package/proto-models/com/coralogix/blobset/v2/dsym.ts +0 -400
- package/proto-models/com/coralogix/blobset/v2/entity_metadata.ts +0 -540
- package/proto-models/com/coralogix/blobset/v2/entity_type.ts +0 -56
- package/proto-models/com/coralogix/blobset/v2/s3_metadata.ts +0 -154
- package/proto-models/com/coralogix/blobset/v2/source_map.ts +0 -418
- package/proto-models/com/coralogix/rum/v2/analytics.ts +0 -924
- package/proto-models/com/coralogix/rum/v2/audit_log.ts +0 -84
- package/proto-models/com/coralogix/rum/v2/chunk.ts +0 -399
- package/proto-models/com/coralogix/rum/v2/file.ts +0 -159
- package/proto-models/com/coralogix/rum/v2/hide_errors.ts +0 -234
- package/proto-models/com/coralogix/rum/v2/release_entity_metadata.ts +0 -699
- package/proto-models/com/coralogix/rum/v2/release_entity_type.ts +0 -56
- package/proto-models/com/coralogix/rum/v2/rum_hide_errors_service.ts +0 -605
- package/proto-models/com/coralogix/rum/v2/rum_react_native_source_map_service.ts +0 -229
- package/proto-models/com/coralogix/rum/v2/rum_saved_filters_service.ts +0 -1679
- package/proto-models/com/coralogix/rum/v2/rum_sdk_versions.ts +0 -279
- package/proto-models/com/coralogix/rum/v2/rum_service.ts +0 -2158
- package/proto-models/com/coralogix/rum/v2/rum_session_recording_service.ts +0 -16
- package/proto-models/com/coralogix/rum/v2/rum_settings.ts +0 -215
- package/proto-models/com/coralogix/rum/v2/rum_settings_service.ts +0 -283
- package/proto-models/com/coralogix/rum/v2/rum_source_map_service.ts +0 -905
- package/proto-models/com/coralogix/rum/v2/saved_filter.ts +0 -307
- package/proto-models/com/coralogix/rum/v2/source_code_file_mapping.ts +0 -358
- package/proto-models/com/coralogix/rum/v2/source_map_release.ts +0 -301
- package/proto-models/com/coralogix/rum/v2/template.ts +0 -588
- package/proto-models/google/protobuf/descriptor.ts +0 -4921
- package/protos/com/coralogix/blobset/v2/audit_log.proto +0 -13
- package/protos/com/coralogix/blobset/v2/blobset_query_service.proto +0 -12
- package/protos/com/coralogix/blobset/v2/blobset_service.proto +0 -18
- package/protos/com/coralogix/blobset/v2/dsym.proto +0 -19
- package/protos/com/coralogix/blobset/v2/entity_metadata.proto +0 -35
- package/protos/com/coralogix/blobset/v2/entity_type.proto +0 -11
- package/protos/com/coralogix/blobset/v2/s3_metadata.proto +0 -14
- package/protos/com/coralogix/blobset/v2/source_map.proto +0 -30
- package/protos/com/coralogix/rum/v2/analytics.proto +0 -57
- package/protos/com/coralogix/rum/v2/audit_log.proto +0 -13
- package/protos/com/coralogix/rum/v2/chunk.proto +0 -24
- package/protos/com/coralogix/rum/v2/file.proto +0 -8
- package/protos/com/coralogix/rum/v2/hide_errors.proto +0 -19
- package/protos/com/coralogix/rum/v2/release_entity_metadata.proto +0 -44
- package/protos/com/coralogix/rum/v2/release_entity_type.proto +0 -11
- package/protos/com/coralogix/rum/v2/rum_hide_errors_service.proto +0 -42
- package/protos/com/coralogix/rum/v2/rum_react_native_source_map_service.proto +0 -19
- package/protos/com/coralogix/rum/v2/rum_saved_filters_service.proto +0 -117
- package/protos/com/coralogix/rum/v2/rum_sdk_versions.proto +0 -17
- package/protos/com/coralogix/rum/v2/rum_service.proto +0 -144
- package/protos/com/coralogix/rum/v2/rum_session_recording_service.proto +0 -4
- package/protos/com/coralogix/rum/v2/rum_settings.proto +0 -26
- package/protos/com/coralogix/rum/v2/rum_settings_service.proto +0 -23
- package/protos/com/coralogix/rum/v2/rum_source_map_service.proto +0 -58
- package/protos/com/coralogix/rum/v2/saved_filter.proto +0 -28
- package/protos/com/coralogix/rum/v2/source_code_file_mapping.proto +0 -16
- package/protos/com/coralogix/rum/v2/source_map_release.proto +0 -18
- package/protos/com/coralogix/rum/v2/template.proto +0 -40
- package/protoset.bin +0 -0
|
@@ -0,0 +1,478 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
|
3
|
+
// versions:
|
|
4
|
+
// protoc-gen-ts_proto v1.181.1
|
|
5
|
+
// protoc v3.19.1
|
|
6
|
+
// source: com/coralogix/rum/v2/rum_merge_erros_service.proto
|
|
7
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
|
+
};
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.RumMergeErrorsServiceDefinition = exports.GetMergeErrorsResponse = exports.GetMergeErrorsRequest = exports.UpdateMergeErrorsResponse = exports.UpdateMergeErrorsRequest = exports.DeleteMergeErrorsResponse = exports.DeleteMergeErrorsRequest = exports.CreateMergeErrorsResponse = exports.CreateMergeErrorsRequest = exports.protobufPackage = void 0;
|
|
12
|
+
/* eslint-disable */
|
|
13
|
+
const minimal_1 = __importDefault(require("protobufjs/minimal"));
|
|
14
|
+
const merge_error_1 = require("./merge_error");
|
|
15
|
+
exports.protobufPackage = "com.coralogix.rum.v2";
|
|
16
|
+
function createBaseCreateMergeErrorsRequest() {
|
|
17
|
+
return { mergeErrorInfo: undefined };
|
|
18
|
+
}
|
|
19
|
+
exports.CreateMergeErrorsRequest = {
|
|
20
|
+
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
21
|
+
if (message.mergeErrorInfo !== undefined) {
|
|
22
|
+
merge_error_1.MergeErrorInfo.encode(message.mergeErrorInfo, writer.uint32(10).fork()).ldelim();
|
|
23
|
+
}
|
|
24
|
+
return writer;
|
|
25
|
+
},
|
|
26
|
+
decode(input, length) {
|
|
27
|
+
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
28
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
29
|
+
const message = createBaseCreateMergeErrorsRequest();
|
|
30
|
+
while (reader.pos < end) {
|
|
31
|
+
const tag = reader.uint32();
|
|
32
|
+
switch (tag >>> 3) {
|
|
33
|
+
case 1:
|
|
34
|
+
if (tag !== 10) {
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
message.mergeErrorInfo = merge_error_1.MergeErrorInfo.decode(reader, reader.uint32());
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
reader.skipType(tag & 7);
|
|
44
|
+
}
|
|
45
|
+
return message;
|
|
46
|
+
},
|
|
47
|
+
fromJSON(object) {
|
|
48
|
+
return {
|
|
49
|
+
mergeErrorInfo: isSet(object.mergeErrorInfo) ? merge_error_1.MergeErrorInfo.fromJSON(object.mergeErrorInfo) : undefined,
|
|
50
|
+
};
|
|
51
|
+
},
|
|
52
|
+
toJSON(message) {
|
|
53
|
+
const obj = {};
|
|
54
|
+
if (message.mergeErrorInfo !== undefined) {
|
|
55
|
+
obj.mergeErrorInfo = merge_error_1.MergeErrorInfo.toJSON(message.mergeErrorInfo);
|
|
56
|
+
}
|
|
57
|
+
return obj;
|
|
58
|
+
},
|
|
59
|
+
create(base) {
|
|
60
|
+
return exports.CreateMergeErrorsRequest.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
61
|
+
},
|
|
62
|
+
fromPartial(object) {
|
|
63
|
+
const message = createBaseCreateMergeErrorsRequest();
|
|
64
|
+
message.mergeErrorInfo = (object.mergeErrorInfo !== undefined && object.mergeErrorInfo !== null)
|
|
65
|
+
? merge_error_1.MergeErrorInfo.fromPartial(object.mergeErrorInfo)
|
|
66
|
+
: undefined;
|
|
67
|
+
return message;
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
function createBaseCreateMergeErrorsResponse() {
|
|
71
|
+
return { mergeErrors: undefined };
|
|
72
|
+
}
|
|
73
|
+
exports.CreateMergeErrorsResponse = {
|
|
74
|
+
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
75
|
+
if (message.mergeErrors !== undefined) {
|
|
76
|
+
merge_error_1.MergeErrors.encode(message.mergeErrors, writer.uint32(10).fork()).ldelim();
|
|
77
|
+
}
|
|
78
|
+
return writer;
|
|
79
|
+
},
|
|
80
|
+
decode(input, length) {
|
|
81
|
+
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
82
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
83
|
+
const message = createBaseCreateMergeErrorsResponse();
|
|
84
|
+
while (reader.pos < end) {
|
|
85
|
+
const tag = reader.uint32();
|
|
86
|
+
switch (tag >>> 3) {
|
|
87
|
+
case 1:
|
|
88
|
+
if (tag !== 10) {
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
message.mergeErrors = merge_error_1.MergeErrors.decode(reader, reader.uint32());
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
reader.skipType(tag & 7);
|
|
98
|
+
}
|
|
99
|
+
return message;
|
|
100
|
+
},
|
|
101
|
+
fromJSON(object) {
|
|
102
|
+
return { mergeErrors: isSet(object.mergeErrors) ? merge_error_1.MergeErrors.fromJSON(object.mergeErrors) : undefined };
|
|
103
|
+
},
|
|
104
|
+
toJSON(message) {
|
|
105
|
+
const obj = {};
|
|
106
|
+
if (message.mergeErrors !== undefined) {
|
|
107
|
+
obj.mergeErrors = merge_error_1.MergeErrors.toJSON(message.mergeErrors);
|
|
108
|
+
}
|
|
109
|
+
return obj;
|
|
110
|
+
},
|
|
111
|
+
create(base) {
|
|
112
|
+
return exports.CreateMergeErrorsResponse.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
113
|
+
},
|
|
114
|
+
fromPartial(object) {
|
|
115
|
+
const message = createBaseCreateMergeErrorsResponse();
|
|
116
|
+
message.mergeErrors = (object.mergeErrors !== undefined && object.mergeErrors !== null)
|
|
117
|
+
? merge_error_1.MergeErrors.fromPartial(object.mergeErrors)
|
|
118
|
+
: undefined;
|
|
119
|
+
return message;
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
function createBaseDeleteMergeErrorsRequest() {
|
|
123
|
+
return { ids: [] };
|
|
124
|
+
}
|
|
125
|
+
exports.DeleteMergeErrorsRequest = {
|
|
126
|
+
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
127
|
+
for (const v of message.ids) {
|
|
128
|
+
writer.uint32(10).string(v);
|
|
129
|
+
}
|
|
130
|
+
return writer;
|
|
131
|
+
},
|
|
132
|
+
decode(input, length) {
|
|
133
|
+
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
134
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
135
|
+
const message = createBaseDeleteMergeErrorsRequest();
|
|
136
|
+
while (reader.pos < end) {
|
|
137
|
+
const tag = reader.uint32();
|
|
138
|
+
switch (tag >>> 3) {
|
|
139
|
+
case 1:
|
|
140
|
+
if (tag !== 10) {
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
message.ids.push(reader.string());
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
reader.skipType(tag & 7);
|
|
150
|
+
}
|
|
151
|
+
return message;
|
|
152
|
+
},
|
|
153
|
+
fromJSON(object) {
|
|
154
|
+
return { ids: globalThis.Array.isArray(object === null || object === void 0 ? void 0 : object.ids) ? object.ids.map((e) => globalThis.String(e)) : [] };
|
|
155
|
+
},
|
|
156
|
+
toJSON(message) {
|
|
157
|
+
var _a;
|
|
158
|
+
const obj = {};
|
|
159
|
+
if ((_a = message.ids) === null || _a === void 0 ? void 0 : _a.length) {
|
|
160
|
+
obj.ids = message.ids;
|
|
161
|
+
}
|
|
162
|
+
return obj;
|
|
163
|
+
},
|
|
164
|
+
create(base) {
|
|
165
|
+
return exports.DeleteMergeErrorsRequest.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
166
|
+
},
|
|
167
|
+
fromPartial(object) {
|
|
168
|
+
var _a;
|
|
169
|
+
const message = createBaseDeleteMergeErrorsRequest();
|
|
170
|
+
message.ids = ((_a = object.ids) === null || _a === void 0 ? void 0 : _a.map((e) => e)) || [];
|
|
171
|
+
return message;
|
|
172
|
+
},
|
|
173
|
+
};
|
|
174
|
+
function createBaseDeleteMergeErrorsResponse() {
|
|
175
|
+
return { ids: [] };
|
|
176
|
+
}
|
|
177
|
+
exports.DeleteMergeErrorsResponse = {
|
|
178
|
+
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
179
|
+
for (const v of message.ids) {
|
|
180
|
+
writer.uint32(10).string(v);
|
|
181
|
+
}
|
|
182
|
+
return writer;
|
|
183
|
+
},
|
|
184
|
+
decode(input, length) {
|
|
185
|
+
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
186
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
187
|
+
const message = createBaseDeleteMergeErrorsResponse();
|
|
188
|
+
while (reader.pos < end) {
|
|
189
|
+
const tag = reader.uint32();
|
|
190
|
+
switch (tag >>> 3) {
|
|
191
|
+
case 1:
|
|
192
|
+
if (tag !== 10) {
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
message.ids.push(reader.string());
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
reader.skipType(tag & 7);
|
|
202
|
+
}
|
|
203
|
+
return message;
|
|
204
|
+
},
|
|
205
|
+
fromJSON(object) {
|
|
206
|
+
return { ids: globalThis.Array.isArray(object === null || object === void 0 ? void 0 : object.ids) ? object.ids.map((e) => globalThis.String(e)) : [] };
|
|
207
|
+
},
|
|
208
|
+
toJSON(message) {
|
|
209
|
+
var _a;
|
|
210
|
+
const obj = {};
|
|
211
|
+
if ((_a = message.ids) === null || _a === void 0 ? void 0 : _a.length) {
|
|
212
|
+
obj.ids = message.ids;
|
|
213
|
+
}
|
|
214
|
+
return obj;
|
|
215
|
+
},
|
|
216
|
+
create(base) {
|
|
217
|
+
return exports.DeleteMergeErrorsResponse.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
218
|
+
},
|
|
219
|
+
fromPartial(object) {
|
|
220
|
+
var _a;
|
|
221
|
+
const message = createBaseDeleteMergeErrorsResponse();
|
|
222
|
+
message.ids = ((_a = object.ids) === null || _a === void 0 ? void 0 : _a.map((e) => e)) || [];
|
|
223
|
+
return message;
|
|
224
|
+
},
|
|
225
|
+
};
|
|
226
|
+
function createBaseUpdateMergeErrorsRequest() {
|
|
227
|
+
return { mergeErrors: undefined };
|
|
228
|
+
}
|
|
229
|
+
exports.UpdateMergeErrorsRequest = {
|
|
230
|
+
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
231
|
+
if (message.mergeErrors !== undefined) {
|
|
232
|
+
merge_error_1.MergeErrors.encode(message.mergeErrors, writer.uint32(10).fork()).ldelim();
|
|
233
|
+
}
|
|
234
|
+
return writer;
|
|
235
|
+
},
|
|
236
|
+
decode(input, length) {
|
|
237
|
+
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
238
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
239
|
+
const message = createBaseUpdateMergeErrorsRequest();
|
|
240
|
+
while (reader.pos < end) {
|
|
241
|
+
const tag = reader.uint32();
|
|
242
|
+
switch (tag >>> 3) {
|
|
243
|
+
case 1:
|
|
244
|
+
if (tag !== 10) {
|
|
245
|
+
break;
|
|
246
|
+
}
|
|
247
|
+
message.mergeErrors = merge_error_1.MergeErrors.decode(reader, reader.uint32());
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
reader.skipType(tag & 7);
|
|
254
|
+
}
|
|
255
|
+
return message;
|
|
256
|
+
},
|
|
257
|
+
fromJSON(object) {
|
|
258
|
+
return { mergeErrors: isSet(object.mergeErrors) ? merge_error_1.MergeErrors.fromJSON(object.mergeErrors) : undefined };
|
|
259
|
+
},
|
|
260
|
+
toJSON(message) {
|
|
261
|
+
const obj = {};
|
|
262
|
+
if (message.mergeErrors !== undefined) {
|
|
263
|
+
obj.mergeErrors = merge_error_1.MergeErrors.toJSON(message.mergeErrors);
|
|
264
|
+
}
|
|
265
|
+
return obj;
|
|
266
|
+
},
|
|
267
|
+
create(base) {
|
|
268
|
+
return exports.UpdateMergeErrorsRequest.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
269
|
+
},
|
|
270
|
+
fromPartial(object) {
|
|
271
|
+
const message = createBaseUpdateMergeErrorsRequest();
|
|
272
|
+
message.mergeErrors = (object.mergeErrors !== undefined && object.mergeErrors !== null)
|
|
273
|
+
? merge_error_1.MergeErrors.fromPartial(object.mergeErrors)
|
|
274
|
+
: undefined;
|
|
275
|
+
return message;
|
|
276
|
+
},
|
|
277
|
+
};
|
|
278
|
+
function createBaseUpdateMergeErrorsResponse() {
|
|
279
|
+
return { mergeErrors: undefined };
|
|
280
|
+
}
|
|
281
|
+
exports.UpdateMergeErrorsResponse = {
|
|
282
|
+
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
283
|
+
if (message.mergeErrors !== undefined) {
|
|
284
|
+
merge_error_1.MergeErrors.encode(message.mergeErrors, writer.uint32(10).fork()).ldelim();
|
|
285
|
+
}
|
|
286
|
+
return writer;
|
|
287
|
+
},
|
|
288
|
+
decode(input, length) {
|
|
289
|
+
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
290
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
291
|
+
const message = createBaseUpdateMergeErrorsResponse();
|
|
292
|
+
while (reader.pos < end) {
|
|
293
|
+
const tag = reader.uint32();
|
|
294
|
+
switch (tag >>> 3) {
|
|
295
|
+
case 1:
|
|
296
|
+
if (tag !== 10) {
|
|
297
|
+
break;
|
|
298
|
+
}
|
|
299
|
+
message.mergeErrors = merge_error_1.MergeErrors.decode(reader, reader.uint32());
|
|
300
|
+
continue;
|
|
301
|
+
}
|
|
302
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
303
|
+
break;
|
|
304
|
+
}
|
|
305
|
+
reader.skipType(tag & 7);
|
|
306
|
+
}
|
|
307
|
+
return message;
|
|
308
|
+
},
|
|
309
|
+
fromJSON(object) {
|
|
310
|
+
return { mergeErrors: isSet(object.mergeErrors) ? merge_error_1.MergeErrors.fromJSON(object.mergeErrors) : undefined };
|
|
311
|
+
},
|
|
312
|
+
toJSON(message) {
|
|
313
|
+
const obj = {};
|
|
314
|
+
if (message.mergeErrors !== undefined) {
|
|
315
|
+
obj.mergeErrors = merge_error_1.MergeErrors.toJSON(message.mergeErrors);
|
|
316
|
+
}
|
|
317
|
+
return obj;
|
|
318
|
+
},
|
|
319
|
+
create(base) {
|
|
320
|
+
return exports.UpdateMergeErrorsResponse.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
321
|
+
},
|
|
322
|
+
fromPartial(object) {
|
|
323
|
+
const message = createBaseUpdateMergeErrorsResponse();
|
|
324
|
+
message.mergeErrors = (object.mergeErrors !== undefined && object.mergeErrors !== null)
|
|
325
|
+
? merge_error_1.MergeErrors.fromPartial(object.mergeErrors)
|
|
326
|
+
: undefined;
|
|
327
|
+
return message;
|
|
328
|
+
},
|
|
329
|
+
};
|
|
330
|
+
function createBaseGetMergeErrorsRequest() {
|
|
331
|
+
return { id: undefined };
|
|
332
|
+
}
|
|
333
|
+
exports.GetMergeErrorsRequest = {
|
|
334
|
+
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
335
|
+
if (message.id !== undefined) {
|
|
336
|
+
writer.uint32(10).string(message.id);
|
|
337
|
+
}
|
|
338
|
+
return writer;
|
|
339
|
+
},
|
|
340
|
+
decode(input, length) {
|
|
341
|
+
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
342
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
343
|
+
const message = createBaseGetMergeErrorsRequest();
|
|
344
|
+
while (reader.pos < end) {
|
|
345
|
+
const tag = reader.uint32();
|
|
346
|
+
switch (tag >>> 3) {
|
|
347
|
+
case 1:
|
|
348
|
+
if (tag !== 10) {
|
|
349
|
+
break;
|
|
350
|
+
}
|
|
351
|
+
message.id = reader.string();
|
|
352
|
+
continue;
|
|
353
|
+
}
|
|
354
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
355
|
+
break;
|
|
356
|
+
}
|
|
357
|
+
reader.skipType(tag & 7);
|
|
358
|
+
}
|
|
359
|
+
return message;
|
|
360
|
+
},
|
|
361
|
+
fromJSON(object) {
|
|
362
|
+
return { id: isSet(object.id) ? globalThis.String(object.id) : undefined };
|
|
363
|
+
},
|
|
364
|
+
toJSON(message) {
|
|
365
|
+
const obj = {};
|
|
366
|
+
if (message.id !== undefined) {
|
|
367
|
+
obj.id = message.id;
|
|
368
|
+
}
|
|
369
|
+
return obj;
|
|
370
|
+
},
|
|
371
|
+
create(base) {
|
|
372
|
+
return exports.GetMergeErrorsRequest.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
373
|
+
},
|
|
374
|
+
fromPartial(object) {
|
|
375
|
+
var _a;
|
|
376
|
+
const message = createBaseGetMergeErrorsRequest();
|
|
377
|
+
message.id = (_a = object.id) !== null && _a !== void 0 ? _a : undefined;
|
|
378
|
+
return message;
|
|
379
|
+
},
|
|
380
|
+
};
|
|
381
|
+
function createBaseGetMergeErrorsResponse() {
|
|
382
|
+
return { mergeErrors: [] };
|
|
383
|
+
}
|
|
384
|
+
exports.GetMergeErrorsResponse = {
|
|
385
|
+
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
386
|
+
for (const v of message.mergeErrors) {
|
|
387
|
+
merge_error_1.MergeErrors.encode(v, writer.uint32(10).fork()).ldelim();
|
|
388
|
+
}
|
|
389
|
+
return writer;
|
|
390
|
+
},
|
|
391
|
+
decode(input, length) {
|
|
392
|
+
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
393
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
394
|
+
const message = createBaseGetMergeErrorsResponse();
|
|
395
|
+
while (reader.pos < end) {
|
|
396
|
+
const tag = reader.uint32();
|
|
397
|
+
switch (tag >>> 3) {
|
|
398
|
+
case 1:
|
|
399
|
+
if (tag !== 10) {
|
|
400
|
+
break;
|
|
401
|
+
}
|
|
402
|
+
message.mergeErrors.push(merge_error_1.MergeErrors.decode(reader, reader.uint32()));
|
|
403
|
+
continue;
|
|
404
|
+
}
|
|
405
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
406
|
+
break;
|
|
407
|
+
}
|
|
408
|
+
reader.skipType(tag & 7);
|
|
409
|
+
}
|
|
410
|
+
return message;
|
|
411
|
+
},
|
|
412
|
+
fromJSON(object) {
|
|
413
|
+
return {
|
|
414
|
+
mergeErrors: globalThis.Array.isArray(object === null || object === void 0 ? void 0 : object.mergeErrors)
|
|
415
|
+
? object.mergeErrors.map((e) => merge_error_1.MergeErrors.fromJSON(e))
|
|
416
|
+
: [],
|
|
417
|
+
};
|
|
418
|
+
},
|
|
419
|
+
toJSON(message) {
|
|
420
|
+
var _a;
|
|
421
|
+
const obj = {};
|
|
422
|
+
if ((_a = message.mergeErrors) === null || _a === void 0 ? void 0 : _a.length) {
|
|
423
|
+
obj.mergeErrors = message.mergeErrors.map((e) => merge_error_1.MergeErrors.toJSON(e));
|
|
424
|
+
}
|
|
425
|
+
return obj;
|
|
426
|
+
},
|
|
427
|
+
create(base) {
|
|
428
|
+
return exports.GetMergeErrorsResponse.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
429
|
+
},
|
|
430
|
+
fromPartial(object) {
|
|
431
|
+
var _a;
|
|
432
|
+
const message = createBaseGetMergeErrorsResponse();
|
|
433
|
+
message.mergeErrors = ((_a = object.mergeErrors) === null || _a === void 0 ? void 0 : _a.map((e) => merge_error_1.MergeErrors.fromPartial(e))) || [];
|
|
434
|
+
return message;
|
|
435
|
+
},
|
|
436
|
+
};
|
|
437
|
+
exports.RumMergeErrorsServiceDefinition = {
|
|
438
|
+
name: "RumMergeErrorsService",
|
|
439
|
+
fullName: "com.coralogix.rum.v2.RumMergeErrorsService",
|
|
440
|
+
methods: {
|
|
441
|
+
createMergeErrors: {
|
|
442
|
+
name: "CreateMergeErrors",
|
|
443
|
+
requestType: exports.CreateMergeErrorsRequest,
|
|
444
|
+
requestStream: false,
|
|
445
|
+
responseType: exports.CreateMergeErrorsResponse,
|
|
446
|
+
responseStream: false,
|
|
447
|
+
options: {},
|
|
448
|
+
},
|
|
449
|
+
deleteMergeErrors: {
|
|
450
|
+
name: "DeleteMergeErrors",
|
|
451
|
+
requestType: exports.DeleteMergeErrorsRequest,
|
|
452
|
+
requestStream: false,
|
|
453
|
+
responseType: exports.DeleteMergeErrorsResponse,
|
|
454
|
+
responseStream: false,
|
|
455
|
+
options: {},
|
|
456
|
+
},
|
|
457
|
+
updateMergeErrors: {
|
|
458
|
+
name: "UpdateMergeErrors",
|
|
459
|
+
requestType: exports.UpdateMergeErrorsRequest,
|
|
460
|
+
requestStream: false,
|
|
461
|
+
responseType: exports.UpdateMergeErrorsResponse,
|
|
462
|
+
responseStream: false,
|
|
463
|
+
options: {},
|
|
464
|
+
},
|
|
465
|
+
getMergeErrors: {
|
|
466
|
+
name: "GetMergeErrors",
|
|
467
|
+
requestType: exports.GetMergeErrorsRequest,
|
|
468
|
+
requestStream: false,
|
|
469
|
+
responseType: exports.GetMergeErrorsResponse,
|
|
470
|
+
responseStream: false,
|
|
471
|
+
options: {},
|
|
472
|
+
},
|
|
473
|
+
},
|
|
474
|
+
};
|
|
475
|
+
function isSet(value) {
|
|
476
|
+
return value !== null && value !== undefined;
|
|
477
|
+
}
|
|
478
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVtX21lcmdlX2Vycm9zX3NlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm90by1tb2RlbHMvY29tL2NvcmFsb2dpeC9ydW0vdjIvcnVtX21lcmdlX2Vycm9zX3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHNEQUFzRDtBQUN0RCxZQUFZO0FBQ1osa0NBQWtDO0FBQ2xDLGlDQUFpQztBQUNqQyw2REFBNkQ7Ozs7OztBQUU3RCxvQkFBb0I7QUFDcEIsaUVBQXFDO0FBQ3JDLCtDQUE0RDtBQUUvQyxRQUFBLGVBQWUsR0FBRyxzQkFBc0IsQ0FBQztBQWtDdEQsU0FBUyxrQ0FBa0M7SUFDekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUN2QyxDQUFDO0FBRVksUUFBQSx3QkFBd0IsR0FBRztJQUN0QyxNQUFNLENBQUMsT0FBaUMsRUFBRSxTQUFxQixpQkFBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7UUFDaEYsSUFBSSxPQUFPLENBQUMsY0FBYyxLQUFLLFNBQVMsRUFBRTtZQUN4Qyw0QkFBYyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNsRjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBOEIsRUFBRSxNQUFlO1FBQ3BELE1BQU0sTUFBTSxHQUFHLEtBQUssWUFBWSxpQkFBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxpQkFBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUUsSUFBSSxHQUFHLEdBQUcsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FB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O1lBQ3JDLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLFlBQVksRUFBRSxpQ0FBeUI7WUFDdkMsY0FBYyxFQUFFLEtBQUs7WUFDckIsT0FBTyxFQUFFLEVBQUU7U0FDWjtRQUNELGlCQUFpQixFQUFFO1lBQ2pCLElBQUksRUFBRSxtQkFBbUI7WUFDekIsV0FBVyxFQUFFLGdDQUF3QjtZQUNyQyxhQUFhLEVBQUUsS0FBSztZQUNwQixZQUFZLEVBQUUsaUNBQXlCO1lBQ3ZDLGNBQWMsRUFBRSxLQUFLO1lBQ3JCLE9BQU8sRUFBRSxFQUFFO1NBQ1o7UUFDRCxpQkFBaUIsRUFBRTtZQUNqQixJQUFJLEVBQUUsbUJBQW1CO1lBQ3pCLFdBQVcsRUFBRSxnQ0FBd0I7WUFDckMsYUFBYSxFQUFFLEtBQUs7WUFDcEIsWUFBWSxFQUFFLGlDQUF5QjtZQUN2QyxjQUFjLEVBQUUsS0FBSztZQUNyQixPQUFPLEVBQUUsRUFBRTtTQUNaO1FBQ0QsY0FBYyxFQUFFO1lBQ2QsSUFBSSxFQUFFLGdCQUFnQjtZQUN0QixXQUFXLEVBQUUsNkJBQXFCO1lBQ2xDLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLFlBQVksRUFBRSw4QkFBc0I7WUFDcEMsY0FBYyxFQUFFLEtBQUs7WUFDckIsT0FBTyxFQUFFLEVBQUU7U0FDWjtLQUNGO0NBQ08sQ0FBQztBQVdYLFNBQVMsS0FBSyxDQUFDLEtBQVU7SUFDdkIsT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLENBQUM7QUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHByb3RvYy1nZW4tdHNfcHJvdG8uIERPIE5PVCBFRElULlxuLy8gdmVyc2lvbnM6XG4vLyAgIHByb3RvYy1nZW4tdHNfcHJvdG8gIHYxLjE4MS4xXG4vLyAgIHByb3RvYyAgICAgICAgICAgICAgIHYzLjE5LjFcbi8vIHNvdXJjZTogY29tL2NvcmFsb2dpeC9ydW0vdjIvcnVtX21lcmdlX2Vycm9zX3NlcnZpY2UucHJvdG9cblxuLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSBcInByb3RvYnVmanMvbWluaW1hbFwiO1xuaW1wb3J0IHsgTWVyZ2VFcnJvckluZm8sIE1lcmdlRXJyb3JzIH0gZnJvbSBcIi4vbWVyZ2VfZXJyb3JcIjtcblxuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9IFwiY29tLmNvcmFsb2dpeC5ydW0udjJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVNZXJnZUVycm9yc1JlcXVlc3Qge1xuICBtZXJnZUVycm9ySW5mbzogTWVyZ2VFcnJvckluZm8gfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlTWVyZ2VFcnJvcnNSZXNwb25zZSB7XG4gIG1lcmdlRXJyb3JzOiBNZXJnZUVycm9ycyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWxldGVNZXJnZUVycm9yc1JlcXVlc3Qge1xuICBpZHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlbGV0ZU1lcmdlRXJyb3JzUmVzcG9uc2Uge1xuICBpZHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZU1lcmdlRXJyb3JzUmVxdWVzdCB7XG4gIG1lcmdlRXJyb3JzOiBNZXJnZUVycm9ycyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVNZXJnZUVycm9yc1Jlc3BvbnNlIHtcbiAgbWVyZ2VFcnJvcnM6IE1lcmdlRXJyb3JzIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldE1lcmdlRXJyb3JzUmVxdWVzdCB7XG4gIGlkPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldE1lcmdlRXJyb3JzUmVzcG9uc2Uge1xuICBtZXJnZUVycm9yczogTWVyZ2VFcnJvcnNbXTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZUNyZWF0ZU1lcmdlRXJyb3JzUmVxdWVzdCgpOiBDcmVhdGVNZXJnZUVycm9yc1JlcXVlc3Qge1xuICByZXR1cm4geyBtZXJnZUVycm9ySW5mbzogdW5kZWZpbmVkIH07XG59XG5cbmV4cG9ydCBjb25zdCBDcmVhdGVNZXJnZUVycm9yc1JlcXVlc3QgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBDcmVhdGVNZXJnZUVycm9yc1JlcXVlc3QsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5tZXJnZUVycm9ySW5mbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBNZXJnZUVycm9ySW5mby5lbmNvZGUobWVzc2FnZS5tZXJnZUVycm9ySW5mbywgd3JpdGVyLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBDcmVhdGVNZXJnZUVycm9yc1JlcXVlc3Qge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlQ3JlYXRlTWVyZ2VFcnJvcnNSZXF1ZXN0KCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5tZXJnZUVycm9ySW5mbyA9IE1lcmdlRXJyb3JJbmZvLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBDcmVhdGVNZXJnZUVycm9yc1JlcXVlc3Qge1xuICAgIHJldHVybiB7XG4gICAgICBtZXJnZUVycm9ySW5mbzogaXNTZXQob2JqZWN0Lm1lcmdlRXJyb3JJbmZvKSA/IE1lcmdlRXJyb3JJbmZvLmZyb21KU09OKG9iamVjdC5tZXJnZUVycm9ySW5mbykgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogQ3JlYXRlTWVyZ2VFcnJvcnNSZXF1ZXN0KTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS5tZXJnZUVycm9ySW5mbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvYmoubWVyZ2VFcnJvckluZm8gPSBNZXJnZUVycm9ySW5mby50b0pTT04obWVzc2FnZS5tZXJnZUVycm9ySW5mbyk7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxDcmVhdGVNZXJnZUVycm9yc1JlcXVlc3Q+KTogQ3JlYXRlTWVyZ2VFcnJvcnNSZXF1ZXN0IHtcbiAgICByZXR1cm4gQ3JlYXRlTWVyZ2VFcnJvcnNSZXF1ZXN0LmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPENyZWF0ZU1lcmdlRXJyb3JzUmVxdWVzdD4pOiBDcmVhdGVNZXJnZUVycm9yc1JlcXVlc3Qge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlQ3JlYXRlTWVyZ2VFcnJvcnNSZXF1ZXN0KCk7XG4gICAgbWVzc2FnZS5tZXJnZUVycm9ySW5mbyA9IChvYmplY3QubWVyZ2VFcnJvckluZm8gIT09IHVuZGVmaW5lZCAmJiBvYmplY3QubWVyZ2VFcnJvckluZm8gIT09IG51bGwpXG4gICAgICA/IE1lcmdlRXJyb3JJbmZvLmZyb21QYXJ0aWFsKG9iamVjdC5tZXJnZUVycm9ySW5mbylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZUNyZWF0ZU1lcmdlRXJyb3JzUmVzcG9uc2UoKTogQ3JlYXRlTWVyZ2VFcnJvcnNSZXNwb25zZSB7XG4gIHJldHVybiB7IG1lcmdlRXJyb3JzOiB1bmRlZmluZWQgfTtcbn1cblxuZXhwb3J0IGNvbnN0IENyZWF0ZU1lcmdlRXJyb3JzUmVzcG9uc2UgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBDcmVhdGVNZXJnZUVycm9yc1Jlc3BvbnNlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UubWVyZ2VFcnJvcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgTWVyZ2VFcnJvcnMuZW5jb2RlKG1lc3NhZ2UubWVyZ2VFcnJvcnMsIHdyaXRlci51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogQ3JlYXRlTWVyZ2VFcnJvcnNSZXNwb25zZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VDcmVhdGVNZXJnZUVycm9yc1Jlc3BvbnNlKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5tZXJnZUVycm9ycyA9IE1lcmdlRXJyb3JzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBDcmVhdGVNZXJnZUVycm9yc1Jlc3BvbnNlIHtcbiAgICByZXR1cm4geyBtZXJnZUVycm9yczogaXNTZXQob2JqZWN0Lm1lcmdlRXJyb3JzKSA/IE1lcmdlRXJyb3JzLmZyb21KU09OKG9iamVjdC5tZXJnZUVycm9ycykgOiB1bmRlZmluZWQgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogQ3JlYXRlTWVyZ2VFcnJvcnNSZXNwb25zZSk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UubWVyZ2VFcnJvcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb2JqLm1lcmdlRXJyb3JzID0gTWVyZ2VFcnJvcnMudG9KU09OKG1lc3NhZ2UubWVyZ2VFcnJvcnMpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8Q3JlYXRlTWVyZ2VFcnJvcnNSZXNwb25zZT4pOiBDcmVhdGVNZXJnZUVycm9yc1Jlc3BvbnNlIHtcbiAgICByZXR1cm4gQ3JlYXRlTWVyZ2VFcnJvcnNSZXNwb25zZS5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxDcmVhdGVNZXJnZUVycm9yc1Jlc3BvbnNlPik6IENyZWF0ZU1lcmdlRXJyb3JzUmVzcG9uc2Uge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlQ3JlYXRlTWVyZ2VFcnJvcnNSZXNwb25zZSgpO1xuICAgIG1lc3NhZ2UubWVyZ2VFcnJvcnMgPSAob2JqZWN0Lm1lcmdlRXJyb3JzICE9PSB1bmRlZmluZWQgJiYgb2JqZWN0Lm1lcmdlRXJyb3JzICE9PSBudWxsKVxuICAgICAgPyBNZXJnZUVycm9ycy5mcm9tUGFydGlhbChvYmplY3QubWVyZ2VFcnJvcnMpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VEZWxldGVNZXJnZUVycm9yc1JlcXVlc3QoKTogRGVsZXRlTWVyZ2VFcnJvcnNSZXF1ZXN0IHtcbiAgcmV0dXJuIHsgaWRzOiBbXSB9O1xufVxuXG5leHBvcnQgY29uc3QgRGVsZXRlTWVyZ2VFcnJvcnNSZXF1ZXN0ID0ge1xuICBlbmNvZGUobWVzc2FnZTogRGVsZXRlTWVyZ2VFcnJvcnNSZXF1ZXN0LCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UuaWRzKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcodiEpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IERlbGV0ZU1lcmdlRXJyb3JzUmVxdWVzdCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VEZWxldGVNZXJnZUVycm9yc1JlcXVlc3QoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmlkcy5wdXNoKHJlYWRlci5zdHJpbmcoKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBEZWxldGVNZXJnZUVycm9yc1JlcXVlc3Qge1xuICAgIHJldHVybiB7IGlkczogZ2xvYmFsVGhpcy5BcnJheS5pc0FycmF5KG9iamVjdD8uaWRzKSA/IG9iamVjdC5pZHMubWFwKChlOiBhbnkpID0+IGdsb2JhbFRoaXMuU3RyaW5nKGUpKSA6IFtdIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IERlbGV0ZU1lcmdlRXJyb3JzUmVxdWVzdCk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UuaWRzPy5sZW5ndGgpIHtcbiAgICAgIG9iai5pZHMgPSBtZXNzYWdlLmlkcztcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPERlbGV0ZU1lcmdlRXJyb3JzUmVxdWVzdD4pOiBEZWxldGVNZXJnZUVycm9yc1JlcXVlc3Qge1xuICAgIHJldHVybiBEZWxldGVNZXJnZUVycm9yc1JlcXVlc3QuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8RGVsZXRlTWVyZ2VFcnJvcnNSZXF1ZXN0Pik6IERlbGV0ZU1lcmdlRXJyb3JzUmVxdWVzdCB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VEZWxldGVNZXJnZUVycm9yc1JlcXVlc3QoKTtcbiAgICBtZXNzYWdlLmlkcyA9IG9iamVjdC5pZHM/Lm1hcCgoZSkgPT4gZSkgfHwgW107XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlRGVsZXRlTWVyZ2VFcnJvcnNSZXNwb25zZSgpOiBEZWxldGVNZXJnZUVycm9yc1Jlc3BvbnNlIHtcbiAgcmV0dXJuIHsgaWRzOiBbXSB9O1xufVxuXG5leHBvcnQgY29uc3QgRGVsZXRlTWVyZ2VFcnJvcnNSZXNwb25zZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IERlbGV0ZU1lcmdlRXJyb3JzUmVzcG9uc2UsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5pZHMpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyh2ISk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogRGVsZXRlTWVyZ2VFcnJvcnNSZXNwb25zZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VEZWxldGVNZXJnZUVycm9yc1Jlc3BvbnNlKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5pZHMucHVzaChyZWFkZXIuc3RyaW5nKCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogRGVsZXRlTWVyZ2VFcnJvcnNSZXNwb25zZSB7XG4gICAgcmV0dXJuIHsgaWRzOiBnbG9iYWxUaGlzLkFycmF5LmlzQXJyYXkob2JqZWN0Py5pZHMpID8gb2JqZWN0Lmlkcy5tYXAoKGU6IGFueSkgPT4gZ2xvYmFsVGhpcy5TdHJpbmcoZSkpIDogW10gfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogRGVsZXRlTWVyZ2VFcnJvcnNSZXNwb25zZSk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UuaWRzPy5sZW5ndGgpIHtcbiAgICAgIG9iai5pZHMgPSBtZXNzYWdlLmlkcztcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPERlbGV0ZU1lcmdlRXJyb3JzUmVzcG9uc2U+KTogRGVsZXRlTWVyZ2VFcnJvcnNSZXNwb25zZSB7XG4gICAgcmV0dXJuIERlbGV0ZU1lcmdlRXJyb3JzUmVzcG9uc2UuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8RGVsZXRlTWVyZ2VFcnJvcnNSZXNwb25zZT4pOiBEZWxldGVNZXJnZUVycm9yc1Jlc3BvbnNlIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZURlbGV0ZU1lcmdlRXJyb3JzUmVzcG9uc2UoKTtcbiAgICBtZXNzYWdlLmlkcyA9IG9iamVjdC5pZHM/Lm1hcCgoZSkgPT4gZSkgfHwgW107XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlVXBkYXRlTWVyZ2VFcnJvcnNSZXF1ZXN0KCk6IFVwZGF0ZU1lcmdlRXJyb3JzUmVxdWVzdCB7XG4gIHJldHVybiB7IG1lcmdlRXJyb3JzOiB1bmRlZmluZWQgfTtcbn1cblxuZXhwb3J0IGNvbnN0IFVwZGF0ZU1lcmdlRXJyb3JzUmVxdWVzdCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFVwZGF0ZU1lcmdlRXJyb3JzUmVxdWVzdCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLm1lcmdlRXJyb3JzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIE1lcmdlRXJyb3JzLmVuY29kZShtZXNzYWdlLm1lcmdlRXJyb3JzLCB3cml0ZXIudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFVwZGF0ZU1lcmdlRXJyb3JzUmVxdWVzdCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VVcGRhdGVNZXJnZUVycm9yc1JlcXVlc3QoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm1lcmdlRXJyb3JzID0gTWVyZ2VFcnJvcnMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IFVwZGF0ZU1lcmdlRXJyb3JzUmVxdWVzdCB7XG4gICAgcmV0dXJuIHsgbWVyZ2VFcnJvcnM6IGlzU2V0KG9iamVjdC5tZXJnZUVycm9ycykgPyBNZXJnZUVycm9ycy5mcm9tSlNPTihvYmplY3QubWVyZ2VFcnJvcnMpIDogdW5kZWZpbmVkIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IFVwZGF0ZU1lcmdlRXJyb3JzUmVxdWVzdCk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UubWVyZ2VFcnJvcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb2JqLm1lcmdlRXJyb3JzID0gTWVyZ2VFcnJvcnMudG9KU09OKG1lc3NhZ2UubWVyZ2VFcnJvcnMpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8VXBkYXRlTWVyZ2VFcnJvcnNSZXF1ZXN0Pik6IFVwZGF0ZU1lcmdlRXJyb3JzUmVxdWVzdCB7XG4gICAgcmV0dXJuIFVwZGF0ZU1lcmdlRXJyb3JzUmVxdWVzdC5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxVcGRhdGVNZXJnZUVycm9yc1JlcXVlc3Q+KTogVXBkYXRlTWVyZ2VFcnJvcnNSZXF1ZXN0IHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVVwZGF0ZU1lcmdlRXJyb3JzUmVxdWVzdCgpO1xuICAgIG1lc3NhZ2UubWVyZ2VFcnJvcnMgPSAob2JqZWN0Lm1lcmdlRXJyb3JzICE9PSB1bmRlZmluZWQgJiYgb2JqZWN0Lm1lcmdlRXJyb3JzICE9PSBudWxsKVxuICAgICAgPyBNZXJnZUVycm9ycy5mcm9tUGFydGlhbChvYmplY3QubWVyZ2VFcnJvcnMpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VVcGRhdGVNZXJnZUVycm9yc1Jlc3BvbnNlKCk6IFVwZGF0ZU1lcmdlRXJyb3JzUmVzcG9uc2Uge1xuICByZXR1cm4geyBtZXJnZUVycm9yczogdW5kZWZpbmVkIH07XG59XG5cbmV4cG9ydCBjb25zdCBVcGRhdGVNZXJnZUVycm9yc1Jlc3BvbnNlID0ge1xuICBlbmNvZGUobWVzc2FnZTogVXBkYXRlTWVyZ2VFcnJvcnNSZXNwb25zZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLm1lcmdlRXJyb3JzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIE1lcmdlRXJyb3JzLmVuY29kZShtZXNzYWdlLm1lcmdlRXJyb3JzLCB3cml0ZXIudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFVwZGF0ZU1lcmdlRXJyb3JzUmVzcG9uc2Uge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlVXBkYXRlTWVyZ2VFcnJvcnNSZXNwb25zZSgpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubWVyZ2VFcnJvcnMgPSBNZXJnZUVycm9ycy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogVXBkYXRlTWVyZ2VFcnJvcnNSZXNwb25zZSB7XG4gICAgcmV0dXJuIHsgbWVyZ2VFcnJvcnM6IGlzU2V0KG9iamVjdC5tZXJnZUVycm9ycykgPyBNZXJnZUVycm9ycy5mcm9tSlNPTihvYmplY3QubWVyZ2VFcnJvcnMpIDogdW5kZWZpbmVkIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IFVwZGF0ZU1lcmdlRXJyb3JzUmVzcG9uc2UpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLm1lcmdlRXJyb3JzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9iai5tZXJnZUVycm9ycyA9IE1lcmdlRXJyb3JzLnRvSlNPTihtZXNzYWdlLm1lcmdlRXJyb3JzKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPFVwZGF0ZU1lcmdlRXJyb3JzUmVzcG9uc2U+KTogVXBkYXRlTWVyZ2VFcnJvcnNSZXNwb25zZSB7XG4gICAgcmV0dXJuIFVwZGF0ZU1lcmdlRXJyb3JzUmVzcG9uc2UuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8VXBkYXRlTWVyZ2VFcnJvcnNSZXNwb25zZT4pOiBVcGRhdGVNZXJnZUVycm9yc1Jlc3BvbnNlIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVVwZGF0ZU1lcmdlRXJyb3JzUmVzcG9uc2UoKTtcbiAgICBtZXNzYWdlLm1lcmdlRXJyb3JzID0gKG9iamVjdC5tZXJnZUVycm9ycyAhPT0gdW5kZWZpbmVkICYmIG9iamVjdC5tZXJnZUVycm9ycyAhPT0gbnVsbClcbiAgICAgID8gTWVyZ2VFcnJvcnMuZnJvbVBhcnRpYWwob2JqZWN0Lm1lcmdlRXJyb3JzKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlR2V0TWVyZ2VFcnJvcnNSZXF1ZXN0KCk6IEdldE1lcmdlRXJyb3JzUmVxdWVzdCB7XG4gIHJldHVybiB7IGlkOiB1bmRlZmluZWQgfTtcbn1cblxuZXhwb3J0IGNvbnN0IEdldE1lcmdlRXJyb3JzUmVxdWVzdCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IEdldE1lcmdlRXJyb3JzUmVxdWVzdCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLmlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBHZXRNZXJnZUVycm9yc1JlcXVlc3Qge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlR2V0TWVyZ2VFcnJvcnNSZXF1ZXN0KCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5pZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IEdldE1lcmdlRXJyb3JzUmVxdWVzdCB7XG4gICAgcmV0dXJuIHsgaWQ6IGlzU2V0KG9iamVjdC5pZCkgPyBnbG9iYWxUaGlzLlN0cmluZyhvYmplY3QuaWQpIDogdW5kZWZpbmVkIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IEdldE1lcmdlRXJyb3JzUmVxdWVzdCk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UuaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb2JqLmlkID0gbWVzc2FnZS5pZDtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPEdldE1lcmdlRXJyb3JzUmVxdWVzdD4pOiBHZXRNZXJnZUVycm9yc1JlcXVlc3Qge1xuICAgIHJldHVybiBHZXRNZXJnZUVycm9yc1JlcXVlc3QuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8R2V0TWVyZ2VFcnJvcnNSZXF1ZXN0Pik6IEdldE1lcmdlRXJyb3JzUmVxdWVzdCB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VHZXRNZXJnZUVycm9yc1JlcXVlc3QoKTtcbiAgICBtZXNzYWdlLmlkID0gb2JqZWN0LmlkID8/IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VHZXRNZXJnZUVycm9yc1Jlc3BvbnNlKCk6IEdldE1lcmdlRXJyb3JzUmVzcG9uc2Uge1xuICByZXR1cm4geyBtZXJnZUVycm9yczogW10gfTtcbn1cblxuZXhwb3J0IGNvbnN0IEdldE1lcmdlRXJyb3JzUmVzcG9uc2UgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBHZXRNZXJnZUVycm9yc1Jlc3BvbnNlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UubWVyZ2VFcnJvcnMpIHtcbiAgICAgIE1lcmdlRXJyb3JzLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBHZXRNZXJnZUVycm9yc1Jlc3BvbnNlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUdldE1lcmdlRXJyb3JzUmVzcG9uc2UoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm1lcmdlRXJyb3JzLnB1c2goTWVyZ2VFcnJvcnMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBHZXRNZXJnZUVycm9yc1Jlc3BvbnNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVyZ2VFcnJvcnM6IGdsb2JhbFRoaXMuQXJyYXkuaXNBcnJheShvYmplY3Q/Lm1lcmdlRXJyb3JzKVxuICAgICAgICA/IG9iamVjdC5tZXJnZUVycm9ycy5tYXAoKGU6IGFueSkgPT4gTWVyZ2VFcnJvcnMuZnJvbUpTT04oZSkpXG4gICAgICAgIDogW10sXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogR2V0TWVyZ2VFcnJvcnNSZXNwb25zZSk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UubWVyZ2VFcnJvcnM/Lmxlbmd0aCkge1xuICAgICAgb2JqLm1lcmdlRXJyb3JzID0gbWVzc2FnZS5tZXJnZUVycm9ycy5tYXAoKGUpID0+IE1lcmdlRXJyb3JzLnRvSlNPTihlKSk7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxHZXRNZXJnZUVycm9yc1Jlc3BvbnNlPik6IEdldE1lcmdlRXJyb3JzUmVzcG9uc2Uge1xuICAgIHJldHVybiBHZXRNZXJnZUVycm9yc1Jlc3BvbnNlLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPEdldE1lcmdlRXJyb3JzUmVzcG9uc2U+KTogR2V0TWVyZ2VFcnJvcnNSZXNwb25zZSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VHZXRNZXJnZUVycm9yc1Jlc3BvbnNlKCk7XG4gICAgbWVzc2FnZS5tZXJnZUVycm9ycyA9IG9iamVjdC5tZXJnZUVycm9ycz8ubWFwKChlKSA9PiBNZXJnZUVycm9ycy5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5leHBvcnQgdHlwZSBSdW1NZXJnZUVycm9yc1NlcnZpY2VEZWZpbml0aW9uID0gdHlwZW9mIFJ1bU1lcmdlRXJyb3JzU2VydmljZURlZmluaXRpb247XG5leHBvcnQgY29uc3QgUnVtTWVyZ2VFcnJvcnNTZXJ2aWNlRGVmaW5pdGlvbiA9IHtcbiAgbmFtZTogXCJSdW1NZXJnZUVycm9yc1NlcnZpY2VcIixcbiAgZnVsbE5hbWU6IFwiY29tLmNvcmFsb2dpeC5ydW0udjIuUnVtTWVyZ2VFcnJvcnNTZXJ2aWNlXCIsXG4gIG1ldGhvZHM6IHtcbiAgICBjcmVhdGVNZXJnZUVycm9yczoge1xuICAgICAgbmFtZTogXCJDcmVhdGVNZXJnZUVycm9yc1wiLFxuICAgICAgcmVxdWVzdFR5cGU6IENyZWF0ZU1lcmdlRXJyb3JzUmVxdWVzdCxcbiAgICAgIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICAgICAgcmVzcG9uc2VUeXBlOiBDcmVhdGVNZXJnZUVycm9yc1Jlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICAgICAgb3B0aW9uczoge30sXG4gICAgfSxcbiAgICBkZWxldGVNZXJnZUVycm9yczoge1xuICAgICAgbmFtZTogXCJEZWxldGVNZXJnZUVycm9yc1wiLFxuICAgICAgcmVxdWVzdFR5cGU6IERlbGV0ZU1lcmdlRXJyb3JzUmVxdWVzdCxcbiAgICAgIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICAgICAgcmVzcG9uc2VUeXBlOiBEZWxldGVNZXJnZUVycm9yc1Jlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICAgICAgb3B0aW9uczoge30sXG4gICAgfSxcbiAgICB1cGRhdGVNZXJnZUVycm9yczoge1xuICAgICAgbmFtZTogXCJVcGRhdGVNZXJnZUVycm9yc1wiLFxuICAgICAgcmVxdWVzdFR5cGU6IFVwZGF0ZU1lcmdlRXJyb3JzUmVxdWVzdCxcbiAgICAgIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICAgICAgcmVzcG9uc2VUeXBlOiBVcGRhdGVNZXJnZUVycm9yc1Jlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICAgICAgb3B0aW9uczoge30sXG4gICAgfSxcbiAgICBnZXRNZXJnZUVycm9yczoge1xuICAgICAgbmFtZTogXCJHZXRNZXJnZUVycm9yc1wiLFxuICAgICAgcmVxdWVzdFR5cGU6IEdldE1lcmdlRXJyb3JzUmVxdWVzdCxcbiAgICAgIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICAgICAgcmVzcG9uc2VUeXBlOiBHZXRNZXJnZUVycm9yc1Jlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICAgICAgb3B0aW9uczoge30sXG4gICAgfSxcbiAgfSxcbn0gYXMgY29uc3Q7XG5cbnR5cGUgQnVpbHRpbiA9IERhdGUgfCBGdW5jdGlvbiB8IFVpbnQ4QXJyYXkgfCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG5leHBvcnQgdHlwZSBEZWVwUGFydGlhbDxUPiA9IFQgZXh0ZW5kcyBCdWlsdGluID8gVFxuICA6IFQgZXh0ZW5kcyBnbG9iYWxUaGlzLkFycmF5PGluZmVyIFU+ID8gZ2xvYmFsVGhpcy5BcnJheTxEZWVwUGFydGlhbDxVPj5cbiAgOiBUIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxpbmZlciBVPiA/IFJlYWRvbmx5QXJyYXk8RGVlcFBhcnRpYWw8VT4+XG4gIDogVCBleHRlbmRzIHsgJGNhc2U6IHN0cmluZyB9ID8geyBbSyBpbiBrZXlvZiBPbWl0PFQsIFwiJGNhc2VcIj5dPzogRGVlcFBhcnRpYWw8VFtLXT4gfSAmIHsgJGNhc2U6IFRbXCIkY2FzZVwiXSB9XG4gIDogVCBleHRlbmRzIHt9ID8geyBbSyBpbiBrZXlvZiBUXT86IERlZXBQYXJ0aWFsPFRbS10+IH1cbiAgOiBQYXJ0aWFsPFQ+O1xuXG5mdW5jdGlvbiBpc1NldCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkO1xufVxuIl19
|