@appium/support 2.55.3 → 2.56.1
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/build/lib/env.js +102 -0
- package/build/lib/fs.js +74 -56
- package/build/lib/image-util.js +4 -339
- package/build/lib/index.js +18 -6
- package/build/lib/log-internal.js +2 -4
- package/build/lib/logger.js +2 -4
- package/build/lib/logging.js +2 -4
- package/build/lib/mjpeg.js +2 -4
- package/build/lib/mkdirp.js +7 -11
- package/build/lib/net.js +2 -4
- package/build/lib/node.js +99 -2
- package/build/lib/npm.js +240 -0
- package/build/lib/plist.js +2 -4
- package/build/lib/process.js +2 -4
- package/build/lib/system.js +2 -4
- package/build/lib/tempdir.js +2 -4
- package/build/lib/timing.js +2 -4
- package/build/lib/util.js +6 -8
- package/build/lib/zip.js +4 -8
- package/lib/env.js +162 -0
- package/lib/fs.js +193 -69
- package/lib/image-util.js +3 -578
- package/lib/index.js +8 -2
- package/lib/log-internal.js +2 -2
- package/lib/logging.js +1 -1
- package/lib/mkdirp.js +3 -6
- package/lib/net.js +4 -4
- package/lib/node.js +104 -1
- package/lib/npm.js +335 -0
- package/lib/tempdir.js +6 -6
- package/lib/util.js +28 -24
- package/lib/zip.js +7 -8
- package/package.json +21 -9
- package/build/test/assets/sample_binary.plist +0 -0
- package/build/test/assets/sample_text.plist +0 -28
- package/build/test/fs-specs.js +0 -264
- package/build/test/helpers.js +0 -35
- package/build/test/image-util-e2e-specs.js +0 -227
- package/build/test/index-specs.js +0 -49
- package/build/test/log-internals-specs.js +0 -97
- package/build/test/logger/helpers.js +0 -71
- package/build/test/logger/logger-force-specs.js +0 -41
- package/build/test/logger/logger-normal-specs.js +0 -113
- package/build/test/logger/logger-test-specs.js +0 -40
- package/build/test/mjpeg-e2e-specs.js +0 -96
- package/build/test/net-e2e-specs.js +0 -32
- package/build/test/node-e2e-specs.js +0 -22
- package/build/test/plist-specs.js +0 -54
- package/build/test/process-specs.js +0 -104
- package/build/test/system-specs.js +0 -136
- package/build/test/tempdir-specs.js +0 -86
- package/build/test/timing-specs.js +0 -125
- package/build/test/util-e2e-specs.js +0 -136
- package/build/test/util-specs.js +0 -537
- package/build/test/zip-e2e-specs.js +0 -233
package/build/lib/image-util.js
CHANGED
|
@@ -9,9 +9,6 @@ exports.MIME_PNG = exports.MIME_JPEG = exports.MIME_BMP = void 0;
|
|
|
9
9
|
exports.base64ToImage = base64ToImage;
|
|
10
10
|
exports.cropBase64Image = cropBase64Image;
|
|
11
11
|
exports.cropImage = cropImage;
|
|
12
|
-
exports.getImageOccurrence = getImageOccurrence;
|
|
13
|
-
exports.getImagesMatches = getImagesMatches;
|
|
14
|
-
exports.getImagesSimilarity = getImagesSimilarity;
|
|
15
12
|
exports.getJimpImage = getJimpImage;
|
|
16
13
|
exports.imageToBase64 = imageToBase64;
|
|
17
14
|
|
|
@@ -27,14 +24,8 @@ var _pngjs = require("pngjs");
|
|
|
27
24
|
|
|
28
25
|
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
29
26
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
var _logger = _interopRequireDefault(require("./logger"));
|
|
33
|
-
|
|
34
|
-
var _node = require("./node");
|
|
35
|
-
|
|
36
|
-
const OCV_OLD = 'opencv4nodejs';
|
|
37
|
-
const OCV_NEW = '@u4/opencv4nodejs';
|
|
27
|
+
const BYTES_IN_PIXEL_BLOCK = 4;
|
|
28
|
+
const SCANLINE_FILTER_METHOD = 4;
|
|
38
29
|
const {
|
|
39
30
|
MIME_JPEG,
|
|
40
31
|
MIME_PNG,
|
|
@@ -43,23 +34,6 @@ const {
|
|
|
43
34
|
exports.MIME_BMP = MIME_BMP;
|
|
44
35
|
exports.MIME_PNG = MIME_PNG;
|
|
45
36
|
exports.MIME_JPEG = MIME_JPEG;
|
|
46
|
-
let cv = null;
|
|
47
|
-
const BYTES_IN_PIXEL_BLOCK = 4;
|
|
48
|
-
const SCANLINE_FILTER_METHOD = 4;
|
|
49
|
-
const DEFAULT_MATCH_THRESHOLD = 0.5;
|
|
50
|
-
const MATCH_NEIGHBOUR_THRESHOLD = 10;
|
|
51
|
-
const AVAILABLE_DETECTORS = ['AKAZE', 'AGAST', 'BRISK', 'FAST', 'GFTT', 'KAZE', 'MSER', 'SIFT', 'ORB'];
|
|
52
|
-
const AVAILABLE_MATCHING_FUNCTIONS = ['FlannBased', 'BruteForce', 'BruteForceL1', 'BruteForceHamming', 'BruteForceHammingLut', 'BruteForceSL2'];
|
|
53
|
-
const MATCHING_METHODS = ['TM_CCOEFF', 'TM_CCOEFF_NORMED', 'TM_CCORR', 'TM_CCORR_NORMED', 'TM_SQDIFF', 'TM_SQDIFF_NORMED'];
|
|
54
|
-
const DEFAULT_MATCHING_METHOD = 'TM_CCOEFF_NORMED';
|
|
55
|
-
|
|
56
|
-
function toMatchingMethod(name) {
|
|
57
|
-
if (!MATCHING_METHODS.includes(name)) {
|
|
58
|
-
throw new Error(`The matching method '${name}' is unknown. ` + `Only the following matching methods are supported: ${MATCHING_METHODS}`);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
return cv[name];
|
|
62
|
-
}
|
|
63
37
|
|
|
64
38
|
async function getJimpImage(data) {
|
|
65
39
|
return await new _bluebird.default((resolve, reject) => {
|
|
@@ -89,313 +63,6 @@ async function getJimpImage(data) {
|
|
|
89
63
|
});
|
|
90
64
|
}
|
|
91
65
|
|
|
92
|
-
async function initOpenCV() {
|
|
93
|
-
if (cv) {
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
_logger.default.debug(`Initializing opencv`);
|
|
98
|
-
|
|
99
|
-
for (const ocvPackage of [OCV_OLD, OCV_NEW]) {
|
|
100
|
-
try {
|
|
101
|
-
_logger.default.debug(`Attempting to load '${ocvPackage}'`);
|
|
102
|
-
|
|
103
|
-
cv = await (0, _node.requirePackage)(ocvPackage);
|
|
104
|
-
break;
|
|
105
|
-
} catch (err) {
|
|
106
|
-
_logger.default.warn(`Unable to load '${ocvPackage}': ${err.message}`);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
if (!cv) {
|
|
111
|
-
throw new Error(`An opencv node module is required to use OpenCV features. ` + `Please install one first (e.g., 'npm i -g ${OCV_NEW}') and restart Appium. ` + 'Read https://github.com/UrielCh/opencv4nodejs#how-to-install for more details on this topic.');
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
async function detectAndCompute(img, detector) {
|
|
116
|
-
const keyPoints = await detector.detectAsync(img);
|
|
117
|
-
const descriptor = await detector.computeAsync(img, keyPoints);
|
|
118
|
-
return {
|
|
119
|
-
keyPoints,
|
|
120
|
-
descriptor
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
function calculateMatchedRect(matchedPoints) {
|
|
125
|
-
if (matchedPoints.length < 2) {
|
|
126
|
-
return {
|
|
127
|
-
x: 0,
|
|
128
|
-
y: 0,
|
|
129
|
-
width: 0,
|
|
130
|
-
height: 0
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
const pointsSortedByDistance = matchedPoints.map(point => [Math.sqrt(point.x * point.x + point.y * point.y), point]).sort((pair1, pair2) => pair1[0] >= pair2[0]).map(pair => pair[1]);
|
|
135
|
-
|
|
136
|
-
const firstPoint = _lodash.default.head(pointsSortedByDistance);
|
|
137
|
-
|
|
138
|
-
const lastPoint = _lodash.default.last(pointsSortedByDistance);
|
|
139
|
-
|
|
140
|
-
const topLeftPoint = {
|
|
141
|
-
x: firstPoint.x <= lastPoint.x ? firstPoint.x : lastPoint.x,
|
|
142
|
-
y: firstPoint.y <= lastPoint.y ? firstPoint.y : lastPoint.y
|
|
143
|
-
};
|
|
144
|
-
const bottomRightPoint = {
|
|
145
|
-
x: firstPoint.x >= lastPoint.x ? firstPoint.x : lastPoint.x,
|
|
146
|
-
y: firstPoint.y >= lastPoint.y ? firstPoint.y : lastPoint.y
|
|
147
|
-
};
|
|
148
|
-
return {
|
|
149
|
-
x: topLeftPoint.x,
|
|
150
|
-
y: topLeftPoint.y,
|
|
151
|
-
width: bottomRightPoint.x - topLeftPoint.x,
|
|
152
|
-
height: bottomRightPoint.y - topLeftPoint.y
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
function highlightRegion(mat, region) {
|
|
157
|
-
if (region.width <= 0 || region.height <= 0) {
|
|
158
|
-
return;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
const color = new cv.Vec(0, 0, 255);
|
|
162
|
-
const thickness = 2;
|
|
163
|
-
mat.drawRectangle(new cv.Rect(region.x, region.y, region.width, region.height), color, thickness, cv.LINE_8);
|
|
164
|
-
return mat;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
async function getImagesMatches(img1Data, img2Data, options = {}) {
|
|
168
|
-
await initOpenCV();
|
|
169
|
-
const {
|
|
170
|
-
detectorName = 'ORB',
|
|
171
|
-
visualize = false,
|
|
172
|
-
goodMatchesFactor,
|
|
173
|
-
matchFunc = 'BruteForce'
|
|
174
|
-
} = options;
|
|
175
|
-
|
|
176
|
-
if (!_lodash.default.includes(AVAILABLE_DETECTORS, detectorName)) {
|
|
177
|
-
throw new Error(`'${detectorName}' detector is unknown. ` + `Only ${JSON.stringify(AVAILABLE_DETECTORS)} detectors are supported.`);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
if (!_lodash.default.includes(AVAILABLE_MATCHING_FUNCTIONS, matchFunc)) {
|
|
181
|
-
throw new Error(`'${matchFunc}' matching function is unknown. ` + `Only ${JSON.stringify(AVAILABLE_MATCHING_FUNCTIONS)} matching functions are supported.`);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
const detector = new cv[`${detectorName}Detector`]();
|
|
185
|
-
const [img1, img2] = await _bluebird.default.all([cv.imdecodeAsync(img1Data), cv.imdecodeAsync(img2Data)]);
|
|
186
|
-
const [result1, result2] = await _bluebird.default.all([detectAndCompute(img1, detector), detectAndCompute(img2, detector)]);
|
|
187
|
-
let matches = [];
|
|
188
|
-
|
|
189
|
-
try {
|
|
190
|
-
matches = await cv[`match${matchFunc}Async`](result1.descriptor, result2.descriptor);
|
|
191
|
-
} catch (e) {
|
|
192
|
-
throw new Error(`Cannot find any matches between the given images. Try another detection algorithm. ` + ` Original error: ${e}`);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
const totalCount = matches.length;
|
|
196
|
-
|
|
197
|
-
if ((0, _util.hasValue)(goodMatchesFactor)) {
|
|
198
|
-
if (_lodash.default.isFunction(goodMatchesFactor)) {
|
|
199
|
-
const distances = matches.map(match => match.distance);
|
|
200
|
-
|
|
201
|
-
const minDistance = _lodash.default.min(distances);
|
|
202
|
-
|
|
203
|
-
const maxDistance = _lodash.default.max(distances);
|
|
204
|
-
|
|
205
|
-
matches = matches.filter(match => goodMatchesFactor(match.distance, minDistance, maxDistance));
|
|
206
|
-
} else {
|
|
207
|
-
if (matches.length > goodMatchesFactor) {
|
|
208
|
-
matches = matches.sort((match1, match2) => match1.distance - match2.distance).slice(0, goodMatchesFactor);
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
const extractPoint = (keyPoints, indexPropertyName) => match => {
|
|
214
|
-
const {
|
|
215
|
-
pt,
|
|
216
|
-
point
|
|
217
|
-
} = keyPoints[match[indexPropertyName]];
|
|
218
|
-
return pt || point;
|
|
219
|
-
};
|
|
220
|
-
|
|
221
|
-
const points1 = matches.map(extractPoint(result1.keyPoints, 'queryIdx'));
|
|
222
|
-
const rect1 = calculateMatchedRect(points1);
|
|
223
|
-
const points2 = matches.map(extractPoint(result2.keyPoints, 'trainIdx'));
|
|
224
|
-
const rect2 = calculateMatchedRect(points2);
|
|
225
|
-
const result = {
|
|
226
|
-
points1,
|
|
227
|
-
rect1,
|
|
228
|
-
points2,
|
|
229
|
-
rect2,
|
|
230
|
-
totalCount,
|
|
231
|
-
count: matches.length
|
|
232
|
-
};
|
|
233
|
-
|
|
234
|
-
if (visualize) {
|
|
235
|
-
const visualization = cv.drawMatches(img1, img2, result1.keyPoints, result2.keyPoints, matches);
|
|
236
|
-
highlightRegion(visualization, rect1);
|
|
237
|
-
highlightRegion(visualization, {
|
|
238
|
-
x: img1.cols + rect2.x,
|
|
239
|
-
y: rect2.y,
|
|
240
|
-
width: rect2.width,
|
|
241
|
-
height: rect2.height
|
|
242
|
-
});
|
|
243
|
-
result.visualization = await cv.imencodeAsync('.png', visualization);
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
return result;
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
async function getImagesSimilarity(img1Data, img2Data, options = {}) {
|
|
250
|
-
await initOpenCV();
|
|
251
|
-
const {
|
|
252
|
-
method = DEFAULT_MATCHING_METHOD,
|
|
253
|
-
visualize = false
|
|
254
|
-
} = options;
|
|
255
|
-
let [template, reference] = await _bluebird.default.all([cv.imdecodeAsync(img1Data), cv.imdecodeAsync(img2Data)]);
|
|
256
|
-
|
|
257
|
-
if (template.rows !== reference.rows || template.cols !== reference.cols) {
|
|
258
|
-
throw new Error('Both images are expected to have the same size in order to ' + 'calculate the similarity score.');
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
[template, reference] = await _bluebird.default.all([template.convertToAsync(cv.CV_8UC3), reference.convertToAsync(cv.CV_8UC3)]);
|
|
262
|
-
let matched;
|
|
263
|
-
|
|
264
|
-
try {
|
|
265
|
-
matched = await reference.matchTemplateAsync(template, toMatchingMethod(method));
|
|
266
|
-
} catch (e) {
|
|
267
|
-
throw new Error(`The reference image did not match to the template one. Original error: ${e.message}`);
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
const minMax = await matched.minMaxLocAsync();
|
|
271
|
-
const result = {
|
|
272
|
-
score: minMax.maxVal
|
|
273
|
-
};
|
|
274
|
-
|
|
275
|
-
if (visualize) {
|
|
276
|
-
const resultMat = new cv.Mat(template.rows, template.cols * 2, cv.CV_8UC3);
|
|
277
|
-
await _bluebird.default.all([reference.copyToAsync(resultMat.getRegion(new cv.Rect(0, 0, reference.cols, reference.rows))), template.copyToAsync(resultMat.getRegion(new cv.Rect(reference.cols, 0, template.cols, template.rows)))]);
|
|
278
|
-
let mask = reference.absdiff(template);
|
|
279
|
-
mask = await mask.cvtColorAsync(cv.COLOR_BGR2GRAY);
|
|
280
|
-
let contours = [];
|
|
281
|
-
|
|
282
|
-
try {
|
|
283
|
-
mask = await mask.thresholdAsync(128, 255, cv.THRESH_BINARY | cv.THRESH_OTSU);
|
|
284
|
-
contours = await mask.findContoursAsync(cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE);
|
|
285
|
-
} catch (ign) {}
|
|
286
|
-
|
|
287
|
-
for (const contour of contours) {
|
|
288
|
-
const boundingRect = contour.boundingRect();
|
|
289
|
-
highlightRegion(resultMat, boundingRect);
|
|
290
|
-
highlightRegion(resultMat, {
|
|
291
|
-
x: reference.cols + boundingRect.x,
|
|
292
|
-
y: boundingRect.y,
|
|
293
|
-
width: boundingRect.width,
|
|
294
|
-
height: boundingRect.height
|
|
295
|
-
});
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
result.visualization = await cv.imencodeAsync('.png', resultMat);
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
return result;
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
async function getImageOccurrence(fullImgData, partialImgData, options = {}) {
|
|
305
|
-
await initOpenCV();
|
|
306
|
-
const {
|
|
307
|
-
visualize = false,
|
|
308
|
-
threshold = DEFAULT_MATCH_THRESHOLD,
|
|
309
|
-
multiple = false,
|
|
310
|
-
matchNeighbourThreshold = MATCH_NEIGHBOUR_THRESHOLD,
|
|
311
|
-
method = DEFAULT_MATCHING_METHOD
|
|
312
|
-
} = options;
|
|
313
|
-
const [fullImg, partialImg] = await _bluebird.default.all([cv.imdecodeAsync(fullImgData), cv.imdecodeAsync(partialImgData)]);
|
|
314
|
-
const results = [];
|
|
315
|
-
let visualization = null;
|
|
316
|
-
|
|
317
|
-
try {
|
|
318
|
-
const matched = await fullImg.matchTemplateAsync(partialImg, toMatchingMethod(method));
|
|
319
|
-
const minMax = await matched.minMaxLocAsync();
|
|
320
|
-
|
|
321
|
-
if (multiple) {
|
|
322
|
-
const nonZeroMatchResults = matched.threshold(threshold, 1, cv.THRESH_BINARY).convertTo(cv.CV_8U).findNonZero();
|
|
323
|
-
const matches = filterNearMatches(nonZeroMatchResults, matchNeighbourThreshold);
|
|
324
|
-
|
|
325
|
-
for (const {
|
|
326
|
-
x,
|
|
327
|
-
y
|
|
328
|
-
} of matches) {
|
|
329
|
-
results.push({
|
|
330
|
-
score: matched.at(y, x),
|
|
331
|
-
rect: {
|
|
332
|
-
x,
|
|
333
|
-
y,
|
|
334
|
-
width: partialImg.cols,
|
|
335
|
-
height: partialImg.rows
|
|
336
|
-
}
|
|
337
|
-
});
|
|
338
|
-
}
|
|
339
|
-
} else if (minMax.maxVal >= threshold) {
|
|
340
|
-
const {
|
|
341
|
-
x,
|
|
342
|
-
y
|
|
343
|
-
} = method.includes('SQDIFF') ? minMax.minLoc : minMax.maxLoc;
|
|
344
|
-
results.push({
|
|
345
|
-
score: minMax.maxVal,
|
|
346
|
-
rect: {
|
|
347
|
-
x,
|
|
348
|
-
y,
|
|
349
|
-
width: partialImg.cols,
|
|
350
|
-
height: partialImg.rows
|
|
351
|
-
}
|
|
352
|
-
});
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
if (_lodash.default.isEmpty(results)) {
|
|
356
|
-
throw new Error(`Match threshold: ${threshold}. Highest match value ` + `found was ${minMax.maxVal}`);
|
|
357
|
-
}
|
|
358
|
-
} catch (e) {
|
|
359
|
-
throw new Error(`Cannot find any occurrences of the partial image in the full image. ` + `Original error: ${e.message}`);
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
if (visualize) {
|
|
363
|
-
const fullHighlightedImage = fullImg.copy();
|
|
364
|
-
|
|
365
|
-
for (const result of results) {
|
|
366
|
-
const singleHighlightedImage = fullImg.copy();
|
|
367
|
-
highlightRegion(singleHighlightedImage, result.rect);
|
|
368
|
-
highlightRegion(fullHighlightedImage, result.rect);
|
|
369
|
-
result.visualization = await cv.imencodeAsync('.png', singleHighlightedImage);
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
visualization = await cv.imencodeAsync('.png', fullHighlightedImage);
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
return {
|
|
376
|
-
rect: results[0].rect,
|
|
377
|
-
score: results[0].score,
|
|
378
|
-
visualization,
|
|
379
|
-
multiple: results
|
|
380
|
-
};
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
function filterNearMatches(nonZeroMatchResults, matchNeighbourThreshold) {
|
|
384
|
-
return nonZeroMatchResults.reduce((acc, element) => {
|
|
385
|
-
if (!acc.some(match => distance(match, element) <= matchNeighbourThreshold)) {
|
|
386
|
-
acc.push(element);
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
return acc;
|
|
390
|
-
}, []);
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
function distance(point1, point2) {
|
|
394
|
-
const a2 = Math.pow(point1.x - point2.x, 2);
|
|
395
|
-
const b2 = Math.pow(point1.y - point2.y, 2);
|
|
396
|
-
return Math.sqrt(a2 + b2);
|
|
397
|
-
}
|
|
398
|
-
|
|
399
66
|
async function cropBase64Image(base64Image, rect) {
|
|
400
67
|
const image = await base64ToImage(base64Image);
|
|
401
68
|
cropImage(image, rect);
|
|
@@ -474,7 +141,5 @@ function getRectIntersection(rect, imageSize) {
|
|
|
474
141
|
width,
|
|
475
142
|
height
|
|
476
143
|
};
|
|
477
|
-
}
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9pbWFnZS11dGlsLmpzIl0sIm5hbWVzIjpbIk9DVl9PTEQiLCJPQ1ZfTkVXIiwiTUlNRV9KUEVHIiwiTUlNRV9QTkciLCJNSU1FX0JNUCIsIkppbXAiLCJjdiIsIkJZVEVTX0lOX1BJWEVMX0JMT0NLIiwiU0NBTkxJTkVfRklMVEVSX01FVEhPRCIsIkRFRkFVTFRfTUFUQ0hfVEhSRVNIT0xEIiwiTUFUQ0hfTkVJR0hCT1VSX1RIUkVTSE9MRCIsIkFWQUlMQUJMRV9ERVRFQ1RPUlMiLCJBVkFJTEFCTEVfTUFUQ0hJTkdfRlVOQ1RJT05TIiwiTUFUQ0hJTkdfTUVUSE9EUyIsIkRFRkFVTFRfTUFUQ0hJTkdfTUVUSE9EIiwidG9NYXRjaGluZ01ldGhvZCIsIm5hbWUiLCJpbmNsdWRlcyIsIkVycm9yIiwiZ2V0SmltcEltYWdlIiwiZGF0YSIsIkIiLCJyZXNvbHZlIiwicmVqZWN0IiwiXyIsImlzU3RyaW5nIiwiaXNCdWZmZXIiLCJCdWZmZXIiLCJmcm9tIiwiZXJyIiwiaW1nT2JqIiwiX2dldEJ1ZmZlciIsImdldEJ1ZmZlciIsImJpbmQiLCJwcm9taXNpZnkiLCJjb250ZXh0IiwiaW5pdE9wZW5DViIsImxvZyIsImRlYnVnIiwib2N2UGFja2FnZSIsIndhcm4iLCJtZXNzYWdlIiwiZGV0ZWN0QW5kQ29tcHV0ZSIsImltZyIsImRldGVjdG9yIiwia2V5UG9pbnRzIiwiZGV0ZWN0QXN5bmMiLCJkZXNjcmlwdG9yIiwiY29tcHV0ZUFzeW5jIiwiY2FsY3VsYXRlTWF0Y2hlZFJlY3QiLCJtYXRjaGVkUG9pbnRzIiwibGVuZ3RoIiwieCIsInkiLCJ3aWR0aCIsImhlaWdodCIsInBvaW50c1NvcnRlZEJ5RGlzdGFuY2UiLCJtYXAiLCJwb2ludCIsIk1hdGgiLCJzcXJ0Iiwic29ydCIsInBhaXIxIiwicGFpcjIiLCJwYWlyIiwiZmlyc3RQb2ludCIsImhlYWQiLCJsYXN0UG9pbnQiLCJsYXN0IiwidG9wTGVmdFBvaW50IiwiYm90dG9tUmlnaHRQb2ludCIsImhpZ2hsaWdodFJlZ2lvbiIsIm1hdCIsInJlZ2lvbiIsImNvbG9yIiwiVmVjIiwidGhpY2tuZXNzIiwiZHJhd1JlY3RhbmdsZSIsIlJlY3QiLCJMSU5FXzgiLCJnZXRJbWFnZXNNYXRjaGVzIiwiaW1nMURhdGEiLCJpbWcyRGF0YSIsIm9wdGlvbnMiLCJkZXRlY3Rvck5hbWUiLCJ2aXN1YWxpemUiLCJnb29kTWF0Y2hlc0ZhY3RvciIsIm1hdGNoRnVuYyIsIkpTT04iLCJzdHJpbmdpZnkiLCJpbWcxIiwiaW1nMiIsImFsbCIsImltZGVjb2RlQXN5bmMiLCJyZXN1bHQxIiwicmVzdWx0MiIsIm1hdGNoZXMiLCJlIiwidG90YWxDb3VudCIsImlzRnVuY3Rpb24iLCJkaXN0YW5jZXMiLCJtYXRjaCIsImRpc3RhbmNlIiwibWluRGlzdGFuY2UiLCJtaW4iLCJtYXhEaXN0YW5jZSIsIm1heCIsImZpbHRlciIsIm1hdGNoMSIsIm1hdGNoMiIsInNsaWNlIiwiZXh0cmFjdFBvaW50IiwiaW5kZXhQcm9wZXJ0eU5hbWUiLCJwdCIsInBvaW50czEiLCJyZWN0MSIsInBvaW50czIiLCJyZWN0MiIsInJlc3VsdCIsImNvdW50IiwidmlzdWFsaXphdGlvbiIsImRyYXdNYXRjaGVzIiwiY29scyIsImltZW5jb2RlQXN5bmMiLCJnZXRJbWFnZXNTaW1pbGFyaXR5IiwibWV0aG9kIiwidGVtcGxhdGUiLCJyZWZlcmVuY2UiLCJyb3dzIiwiY29udmVydFRvQXN5bmMiLCJDVl84VUMzIiwibWF0Y2hlZCIsIm1hdGNoVGVtcGxhdGVBc3luYyIsIm1pbk1heCIsIm1pbk1heExvY0FzeW5jIiwic2NvcmUiLCJtYXhWYWwiLCJyZXN1bHRNYXQiLCJNYXQiLCJjb3B5VG9Bc3luYyIsImdldFJlZ2lvbiIsIm1hc2siLCJhYnNkaWZmIiwiY3Z0Q29sb3JBc3luYyIsIkNPTE9SX0JHUjJHUkFZIiwiY29udG91cnMiLCJ0aHJlc2hvbGRBc3luYyIsIlRIUkVTSF9CSU5BUlkiLCJUSFJFU0hfT1RTVSIsImZpbmRDb250b3Vyc0FzeW5jIiwiUkVUUl9FWFRFUk5BTCIsIkNIQUlOX0FQUFJPWF9TSU1QTEUiLCJpZ24iLCJjb250b3VyIiwiYm91bmRpbmdSZWN0IiwiZ2V0SW1hZ2VPY2N1cnJlbmNlIiwiZnVsbEltZ0RhdGEiLCJwYXJ0aWFsSW1nRGF0YSIsInRocmVzaG9sZCIsIm11bHRpcGxlIiwibWF0Y2hOZWlnaGJvdXJUaHJlc2hvbGQiLCJmdWxsSW1nIiwicGFydGlhbEltZyIsInJlc3VsdHMiLCJub25aZXJvTWF0Y2hSZXN1bHRzIiwiY29udmVydFRvIiwiQ1ZfOFUiLCJmaW5kTm9uWmVybyIsImZpbHRlck5lYXJNYXRjaGVzIiwicHVzaCIsImF0IiwicmVjdCIsIm1pbkxvYyIsIm1heExvYyIsImlzRW1wdHkiLCJmdWxsSGlnaGxpZ2h0ZWRJbWFnZSIsImNvcHkiLCJzaW5nbGVIaWdobGlnaHRlZEltYWdlIiwicmVkdWNlIiwiYWNjIiwiZWxlbWVudCIsInNvbWUiLCJwb2ludDEiLCJwb2ludDIiLCJhMiIsInBvdyIsImIyIiwiY3JvcEJhc2U2NEltYWdlIiwiYmFzZTY0SW1hZ2UiLCJpbWFnZSIsImJhc2U2NFRvSW1hZ2UiLCJjcm9wSW1hZ2UiLCJpbWFnZVRvQmFzZTY0IiwiaW1hZ2VCdWZmZXIiLCJQTkciLCJmaWx0ZXJUeXBlIiwicGFyc2UiLCJjaHVua3MiLCJwYWNrIiwib24iLCJjaHVuayIsImNvbmNhdCIsInRvU3RyaW5nIiwiaW1hZ2VSZWN0IiwiaW50ZXJSZWN0IiwiZ2V0UmVjdEludGVyc2VjdGlvbiIsImZpcnN0VmVydGljYWxQaXhlbCIsInRvcCIsImxhc3RWZXJ0aWNhbFBpeGVsIiwiZmlyc3RIb3Jpem9udGFsUGl4ZWwiLCJsZWZ0IiwibGFzdEhvcml6b250YWxQaXhlbCIsImNyb3BwZWRBcnJheSIsImZpcnN0Qnl0ZUlkeEluUGl4ZWxCbG9jayIsImJ5dGVJZHgiLCJpbWFnZVNpemUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFD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O0FBQW1CQyxJQUFBQTtBQUFuQixHQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEppbXAgZnJvbSAnamltcCc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0IHsgUE5HIH0gZnJvbSAncG5nanMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgaGFzVmFsdWUgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyByZXF1aXJlUGFja2FnZSB9IGZyb20gJy4vbm9kZSc7XG5cblxuY29uc3QgT0NWX09MRCA9ICdvcGVuY3Y0bm9kZWpzJztcbmNvbnN0IE9DVl9ORVcgPSAnQHU0L29wZW5jdjRub2RlanMnO1xuXG5cbmNvbnN0IHsgTUlNRV9KUEVHLCBNSU1FX1BORywgTUlNRV9CTVAgfSA9IEppbXA7XG5sZXQgY3YgPSBudWxsO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFJlZ2lvblxuICogQHByb3BlcnR5IHtudW1iZXJ9IGxlZnQgLSBUaGUgb2Zmc2V0IGZyb20gdGhlIGxlZnQgc2lkZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvcCAtIFRoZSBvZmZzZXQgZnJvbSB0aGUgdG9wXG4gKiBAcHJvcGVydHkge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGhcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQb2ludFxuICogQHByb3BlcnR5IHtudW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkge251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFJlY3RcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB4IC0gVGhlIHRvcCBsZWZ0IGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB5IC0gVGhlIGJvdHRvbSByaWdodCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkge251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGhcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0XG4gKi9cblxuY29uc3QgQllURVNfSU5fUElYRUxfQkxPQ0sgPSA0O1xuY29uc3QgU0NBTkxJTkVfRklMVEVSX01FVEhPRCA9IDQ7XG5jb25zdCBERUZBVUxUX01BVENIX1RIUkVTSE9MRCA9IDAuNTtcbmNvbnN0IE1BVENIX05FSUdIQk9VUl9USFJFU0hPTEQgPSAxMDtcblxuY29uc3QgQVZBSUxBQkxFX0RFVEVDVE9SUyA9IFtcbiAgJ0FLQVpFJyxcbiAgJ0FHQVNUJyxcbiAgJ0JSSVNLJyxcbiAgJ0ZBU1QnLFxuICAnR0ZUVCcsXG4gICdLQVpFJyxcbiAgJ01TRVInLFxuICAnU0lGVCcsXG4gICdPUkInLFxuXTtcblxuY29uc3QgQVZBSUxBQkxFX01BVENISU5HX0ZVTkNUSU9OUyA9IFtcbiAgJ0ZsYW5uQmFzZWQnLFxuICAnQnJ1dGVGb3JjZScsXG4gICdCcnV0ZUZvcmNlTDEnLFxuICAnQnJ1dGVGb3JjZUhhbW1pbmcnLFxuICAnQnJ1dGVGb3JjZUhhbW1pbmdMdXQnLFxuICAnQnJ1dGVGb3JjZVNMMicsXG5dO1xuXG5jb25zdCBNQVRDSElOR19NRVRIT0RTID0gW1xuICAnVE1fQ0NPRUZGJyxcbiAgJ1RNX0NDT0VGRl9OT1JNRUQnLFxuICAnVE1fQ0NPUlInLFxuICAnVE1fQ0NPUlJfTk9STUVEJyxcbiAgJ1RNX1NRRElGRicsXG4gICdUTV9TUURJRkZfTk9STUVEJyxcbl07XG5jb25zdCBERUZBVUxUX01BVENISU5HX01FVEhPRCA9ICdUTV9DQ09FRkZfTk9STUVEJztcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIG1hdGNoaW5nIG1ldGhvZCBuYW1lIHRvIHRoZSBhY3R1YWxcbiAqIGNvbnN0YW50IHZhbHVlIGZyb20gT3BlbkNWIGxpYnJhcnlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBPbmUgb2Ygc3VwcG9ydGVkIG1ldGhvZCBuYW1lc1xuICogKHNlZSBNQVRDSElOR19NRVRIT0RTIGFycmF5IGFib3ZlKVxuICogQHJldHVybnMge251bWJlcn0gVGhlIG1ldGhvZCB2YWx1ZVxuICogQHRocm93cyB7RXJyb3J9IGlmIGFuIHVuc3VwcG9ydGVkIG1ldGhvZCBuYW1lIGlzIGdpdmVuXG4gKi9cbmZ1bmN0aW9uIHRvTWF0Y2hpbmdNZXRob2QgKG5hbWUpIHtcbiAgaWYgKCFNQVRDSElOR19NRVRIT0RTLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgbWF0Y2hpbmcgbWV0aG9kICcke25hbWV9JyBpcyB1bmtub3duLiBgICtcbiAgICAgIGBPbmx5IHRoZSBmb2xsb3dpbmcgbWF0Y2hpbmcgbWV0aG9kcyBhcmUgc3VwcG9ydGVkOiAke01BVENISU5HX01FVEhPRFN9YCk7XG4gIH1cbiAgcmV0dXJuIGN2W25hbWVdO1xufVxuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gZ2V0IGEgSmltcCBpbWFnZSBvYmplY3QgZnJvbSBidWZmZXIgb3IgYmFzZTY0IGRhdGEuIEppbXBcbiAqIGlzIGEgZ3JlYXQgbGlicmFyeSBob3dldmVyIGl0IGRvZXMgSU8gaW4gdGhlIGNvbnN0cnVjdG9yIHNvIGl0J3Mgbm90XG4gKiBjb252ZW5pZW50IGZvciBvdXIgYXN5bmMvYXdhaXQgbW9kZWwuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ8c3RyaW5nfSBkYXRhIC0gYmluYXJ5IGltYWdlIGJ1ZmZlciBvciBiYXNlNjQtZW5jb2RlZCBpbWFnZVxuICogc3RyaW5nXG4gKiBAcmV0dXJucyB7SmltcH0gLSB0aGUgamltcCBpbWFnZSBvYmplY3RcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0SmltcEltYWdlIChkYXRhKSB7XG4gIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKGRhdGEpICYmICFfLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignTXVzdCBpbml0aWFsaXplIGppbXAgb2JqZWN0IHdpdGggc3RyaW5nIG9yIGJ1ZmZlcicpKTtcbiAgICB9XG4gICAgLy8gaWYgZGF0YSBpcyBhIHN0cmluZywgYXNzdW1lIGl0IGlzIGEgYmFzZTY0LWVuY29kZWQgaW1hZ2VcbiAgICBpZiAoXy5pc1N0cmluZyhkYXRhKSkge1xuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsICdiYXNlNjQnKTtcbiAgICB9XG4gICAgbmV3IEppbXAoZGF0YSwgKGVyciwgaW1nT2JqKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICAgIGlmICghaW1nT2JqKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKCdDb3VsZCBub3QgY3JlYXRlIGppbXAgaW1hZ2UgZnJvbSB0aGF0IGRhdGEnKSk7XG4gICAgICB9XG4gICAgICBpbWdPYmouX2dldEJ1ZmZlciA9IGltZ09iai5nZXRCdWZmZXIuYmluZChpbWdPYmopO1xuICAgICAgaW1nT2JqLmdldEJ1ZmZlciA9IEIucHJvbWlzaWZ5KGltZ09iai5fZ2V0QnVmZmVyLCB7Y29udGV4dDogaW1nT2JqfSk7XG4gICAgICByZXNvbHZlKGltZ09iaik7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBvcGVuY3Y0bm9kZWpzIG1vZHVsZSBpcyBub3QgaW5zdGFsbGVkIG9yIGNhbm5vdCBiZSBsb2FkZWRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5pdE9wZW5DViAoKSB7XG4gIGlmIChjdikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZy5kZWJ1ZyhgSW5pdGlhbGl6aW5nIG9wZW5jdmApO1xuICBmb3IgKGNvbnN0IG9jdlBhY2thZ2Ugb2YgW09DVl9PTEQsIE9DVl9ORVddKSB7XG4gICAgdHJ5IHtcbiAgICAgIGxvZy5kZWJ1ZyhgQXR0ZW1wdGluZyB0byBsb2FkICcke29jdlBhY2thZ2V9J2ApO1xuICAgICAgY3YgPSBhd2FpdCByZXF1aXJlUGFja2FnZShvY3ZQYWNrYWdlKTtcbiAgICAgIGJyZWFrO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oYFVuYWJsZSB0byBsb2FkICcke29jdlBhY2thZ2V9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWN2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBbiBvcGVuY3Ygbm9kZSBtb2R1bGUgaXMgcmVxdWlyZWQgdG8gdXNlIE9wZW5DViBmZWF0dXJlcy4gYCArXG4gICAgICAgICAgICAgICAgICAgIGBQbGVhc2UgaW5zdGFsbCBvbmUgZmlyc3QgKGUuZy4sICducG0gaSAtZyAke09DVl9ORVd9JykgYW5kIHJlc3RhcnQgQXBwaXVtLiBgICtcbiAgICAgICAgICAgICAgICAgICAgJ1JlYWQgaHR0cHM6Ly9naXRodWIuY29tL1VyaWVsQ2gvb3BlbmN2NG5vZGVqcyNob3ctdG8taW5zdGFsbCBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoaXMgdG9waWMuJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNYXRjaENvbXB1dGF0aW9uUmVzdWx0XG4gKiBAcHJvcGVydHkge2N2LkRlc2NyaXB0b3JNYXRjaH0gZGVzY2lwdG9yIC0gT3BlbkNWIG1hdGNoIGRlc2NyaXB0b3JcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8Y3YuS2V5UG9pbnQ+fSBrZXlQb2ludHMgLSBUaGUgYXJyYXkgb2Yga2V5IHBvaW50c1xuICovXG5cbi8qKlxuICogQ2FsY3VsYXRlcyBhbiBPcGVuQ1YgbWF0Y2ggZGVzY3JpcHRvciBvZiBhbiBpbWFnZSwgd2hpY2ggY2FuIGJlIHVzZWRcbiAqIGZvciBicnV0ZS1mb3JjZSBtYXRjaGluZy5cbiAqIFJlYWQgaHR0cHM6Ly9kb2NzLm9wZW5jdi5vcmcvMy4wLWJldGEvZG9jL3B5X3R1dG9yaWFscy9weV9mZWF0dXJlMmQvcHlfbWF0Y2hlci9weV9tYXRjaGVyLmh0bWxcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHBhcmFtIHtjdi5NYXR9IGltZyBJbWFnZSBkYXRhXG4gKiBAcGFyYW0ge2N2LkZlYXR1cmVEZXRlY3Rvcn0gZGV0ZWN0b3IgT3BlbkNWIGZlYXR1cmUgZGV0ZWN0b3IgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJucyB7TWF0Y2hDb21wdXRhdGlvblJlc3VsdH1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0QW5kQ29tcHV0ZSAoaW1nLCBkZXRlY3Rvcikge1xuICBjb25zdCBrZXlQb2ludHMgPSBhd2FpdCBkZXRlY3Rvci5kZXRlY3RBc3luYyhpbWcpO1xuICBjb25zdCBkZXNjcmlwdG9yID0gYXdhaXQgZGV0ZWN0b3IuY29tcHV0ZUFzeW5jKGltZywga2V5UG9pbnRzKTtcbiAgcmV0dXJuIHtcbiAgICBrZXlQb2ludHMsXG4gICAgZGVzY3JpcHRvclxuICB9O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZWQgdGhlIGJvdW5kaW5nIHJlY3QgY29vcmRpbmF0ZXMgZm9yIHRoZSBhcnJheSBvZiBtYXRjaGluZyBwb2ludHNcbiAqXG4gKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gbWF0Y2hlZFBvaW50cyBBcnJheSBvZiBtYXRjaGluZyBwb2ludHNcbiAqIEByZXR1cm5zIHtSZWN0fSBUaGUgbWF0Y2hpbmcgYm91bmRpbmcgcmVjdCBvciBhIHplcm8gcmVjdCBpZiBubyBtYXRjaFxuICogY2FuIGJlIGZvdW5kLlxuICovXG5mdW5jdGlvbiBjYWxjdWxhdGVNYXRjaGVkUmVjdCAobWF0Y2hlZFBvaW50cykge1xuICBpZiAobWF0Y2hlZFBvaW50cy5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwLFxuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcG9pbnRzU29ydGVkQnlEaXN0YW5jZSA9IG1hdGNoZWRQb2ludHNcbiAgICAubWFwKChwb2ludCkgPT4gW01hdGguc3FydChwb2ludC54ICogcG9pbnQueCArIHBvaW50LnkgKiBwb2ludC55KSwgcG9pbnRdKVxuICAgIC5zb3J0KChwYWlyMSwgcGFpcjIpID0+IHBhaXIxWzBdID49IHBhaXIyWzBdKVxuICAgIC5tYXAoKHBhaXIpID0+IHBhaXJbMV0pO1xuICBjb25zdCBmaXJzdFBvaW50ID0gXy5oZWFkKHBvaW50c1NvcnRlZEJ5RGlzdGFuY2UpO1xuICBjb25zdCBsYXN0UG9pbnQgPSBfLmxhc3QocG9pbnRzU29ydGVkQnlEaXN0YW5jZSk7XG4gIGNvbnN0IHRvcExlZnRQb2ludCA9IHtcbiAgICB4OiBmaXJzdFBvaW50LnggPD0gbGFzdFBvaW50LnggPyBmaXJzdFBvaW50LnggOiBsYXN0UG9pbnQueCxcbiAgICB5OiBmaXJzdFBvaW50LnkgPD0gbGFzdFBvaW50LnkgPyBmaXJzdFBvaW50LnkgOiBsYXN0UG9pbnQueSxcbiAgfTtcbiAgY29uc3QgYm90dG9tUmlnaHRQb2ludCA9IHtcbiAgICB4OiBmaXJzdFBvaW50LnggPj0gbGFzdFBvaW50LnggPyBmaXJzdFBvaW50LnggOiBsYXN0UG9pbnQueCxcbiAgICB5OiBmaXJzdFBvaW50LnkgPj0gbGFzdFBvaW50LnkgPyBmaXJzdFBvaW50LnkgOiBsYXN0UG9pbnQueSxcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICB4OiB0b3BMZWZ0UG9pbnQueCxcbiAgICB5OiB0b3BMZWZ0UG9pbnQueSxcbiAgICB3aWR0aDogYm90dG9tUmlnaHRQb2ludC54IC0gdG9wTGVmdFBvaW50LngsXG4gICAgaGVpZ2h0OiBib3R0b21SaWdodFBvaW50LnkgLSB0b3BMZWZ0UG9pbnQueVxuICB9O1xufVxuXG4vKipcbiAqIERyYXdzIGEgcmVjdGFubmdsZSBvbiB0aGUgZ2l2ZW4gaW1hZ2UgbWF0cml4XG4gKlxuICogQHBhcmFtIHtjdi5NYXR9IG1hdCBUaGUgc291cmNlIGltYWdlXG4gKiBAcGFyYW0ge1JlY3R9IHJlZ2lvbiBUaGUgcmVnaW9uIHRvIGhpZ2hsaWdodFxuICpcbiAqIEByZXR1cm5zIHtjdi5NYXR9IFRoZSBzYW1lIGltYWdlIHdpdGggdGhlIHJlY3RhbmdsZSBvbiBpdFxuICovXG5mdW5jdGlvbiBoaWdobGlnaHRSZWdpb24gKG1hdCwgcmVnaW9uKSB7XG4gIGlmIChyZWdpb24ud2lkdGggPD0gMCB8fCByZWdpb24uaGVpZ2h0IDw9IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBoaWdobGlnaHQgaW4gcmVkXG4gIGNvbnN0IGNvbG9yID0gbmV3IGN2LlZlYygwLCAwLCAyNTUpO1xuICBjb25zdCB0aGlja25lc3MgPSAyO1xuICBtYXQuZHJhd1JlY3RhbmdsZShuZXcgY3YuUmVjdChyZWdpb24ueCwgcmVnaW9uLnksIHJlZ2lvbi53aWR0aCwgcmVnaW9uLmhlaWdodCksIGNvbG9yLCB0aGlja25lc3MsIGN2LkxJTkVfOCk7XG4gIHJldHVybiBtYXQ7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTWF0Y2hpbmdPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGRldGVjdG9yTmFtZSBbJ09SQiddIE9uZSBvZiBwb3NzaWJsZSBPcGVuQ1YgZmVhdHVyZSBkZXRlY3RvciBuYW1lc1xuICogZnJvbSBgQVZBSUxBQkxFX0RFVEVDVE9SU2AgYXJyYXkuXG4gKiBTb21lIG9mIHRoZXNlIG1ldGhvZHMgKEZBU1QsIEFHQVNULCBHRlRULCBGQVNULCBTSUZUIGFuZCBNU0VSKSBhcmUgbm90IGF2YWlsYWJsZVxuICogaW4gdGhlIGRlZmF1bHQgT3BlbkNWIGluc3RhbGxhdGlvbiBhbmQgaGF2ZSB0byBiZSBlbmFibGVkIG1hbnVhbGx5IGJlZm9yZVxuICogbGlicmFyeSBjb21waWxhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gbWF0Y2hGdW5jIFsnQnJ1dGVGb3JjZSddIFRoZSBuYW1lIG9mIHRoZSBtYXRjaGluZyBmdW5jdGlvbi5cbiAqIFNob3VsZCBiZSBvbmUgb2YgYEFWQUlMQUJMRV9NQVRDSElOR19GVU5DVElPTlNgIGFycmF5LlxuICogQHByb3BlcnR5IHs/bnVtYmVyfEZ1bmN0aW9ufSBnb29kTWF0Y2hlc0ZhY3RvciBUaGUgbWF4aW11bSBjb3VudCBvZiBcImdvb2RcIiBtYXRjaGVzXG4gKiAoZS4gZy4gd2l0aCBtaW5pbWFsIGRpc3RhbmNlcykgb3IgYSBmdW5jdGlvbiwgd2hpY2ggYWNjZXB0cyAzIGFyZ3VtZW50czogdGhlIGN1cnJlbnQgZGlzdGFuY2UsXG4gKiBtaW5pbWFsIGRpc3RhbmNlLCBtYXhpbXVtIGRpc3RhbmNlIGFuZCByZXR1cm5zIHRydWUgb3IgZmFsc2UgdG8gaW5jbHVkZSBvciBleGNsdWRlIHRoZSBtYXRjaC5cbiAqIEBwcm9wZXJ0eSB7P2Jvb2xlYW59IHZpc3VhbGl6ZSBbZmFsc2VdIFdoZXRoZXIgdG8gcmV0dXJuIHRoZSByZXN1bHRpbmcgdmlzYWxpemF0aW9uXG4gKiBhcyBhbiBpbWFnZSAodXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMpXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNYXRjaGluZ1Jlc3VsdFxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvdW50IFRoZSBjb3VudCBvZiBtYXRjaGVkIGVkZ2VzIG9uIGJvdGggaW1hZ2VzLlxuICogVGhlIG1vcmUgbWF0Y2hpbmcgZWRnZXMgdGhlcmUgYXJlIG5vIGJvdGggaW1hZ2VzIHRoZSBtb3JlIHNpbWlsYXIgdGhleSBhcmUuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdG90YWxDb3VudCBUaGUgdG90YWwgY291bnQgb2YgbWF0Y2hlZCBlZGdlcyBvbiBib3RoIGltYWdlcy5cbiAqIEl0IGlzIGVxdWFsIHRvIGBjb3VudGAgaWYgYGdvb2RNYXRjaGVzRmFjdG9yYCBkb2VzIG5vdCBsaW1pdCB0aGUgbWF0Y2hlcyxcbiAqIG90aGVyd2lzZSBpdCBjb250YWlucyB0aGUgdG90YWwgY291bnQgb2YgbWF0Y2hlcyBiZWZvcmUgYGdvb2RNYXRjaGVzRmFjdG9yYCBpc1xuICogYXBwbGllZC5cbiAqIEBwcm9wZXJ0eSB7P0J1ZmZlcn0gdmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiBvZiB0aGUgbWF0Y2hpbmcgcmVzdWx0XG4gKiByZXByZXNlbnRlZCBhcyBQTkcgaW1hZ2UgYnVmZmVyLiBUaGlzIHZpc3VhbGl6YXRpb24gbG9va3MgbGlrZVxuICogaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMzExMjU1MjEvMjk3MDI3MzEtYzc5ZTMxNDItODk3Mi0xMWU3LTk0N2UtZGIxMDlkNDE1NDY5LmpwZ1xuICogQHByb3BlcnR5IHtBcnJheTxQb2ludD59IHBvaW50czEgVGhlIGFycmF5IG9mIG1hdGNoaW5nIHBvaW50cyBvbiB0aGUgZmlyc3QgaW1hZ2VcbiAqIEBwcm9wZXJ0eSB7UmVjdH0gcmVjdDEgVGhlIGJvdW5kaW5nIHJlY3QgZm9yIHRoZSBgbWF0Y2hlZFBvaW50czFgIHNldCBvciBhIHplcm8gcmVjdFxuICogaWYgbm90IGVub3VnaCBtYXRjaGluZyBwb2ludHMgYXJlIGZvdW5kXG4gKiBAcHJvcGVydHkge0FycmF5PFBvaW50Pn0gcG9pbnRzMiBUaGUgYXJyYXkgb2YgbWF0Y2hpbmcgcG9pbnRzIG9uIHRoZSBzZWNvbmQgaW1hZ2VcbiAqIEBwcm9wZXJ0eSB7UmVjdH0gcmVjdDIgVGhlIGJvdW5kaW5nIHJlY3QgZm9yIHRoZSBgbWF0Y2hlZFBvaW50czJgIHNldCBvciBhIHplcm8gcmVjdFxuICogaWYgbm90IGVub3VnaCBtYXRjaGluZyBwb2ludHMgYXJlIGZvdW5kXG4gKi9cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBjb3VudCBvZiBjb21tb24gZWRnZXMgYmV0d2VlbiB0d28gaW1hZ2VzLlxuICogVGhlIGltYWdlcyBtaWdodCBiZSByb3RhdGVkIG9yIHJlc2l6ZWQgcmVsYXRpdmVseSB0byBlYWNoIG90aGVyLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBpbWcxRGF0YSBUaGUgZGF0YSBvZiB0aGUgZmlyc3QgaW1hZ2UgcGFja2VkIGludG8gYSBOb2RlSlMgYnVmZmVyXG4gKiBAcGFyYW0ge0J1ZmZlcn0gaW1nMkRhdGEgVGhlIGRhdGEgb2YgdGhlIHNlY29uZCBpbWFnZSBwYWNrZWQgaW50byBhIE5vZGVKUyBidWZmZXJcbiAqIEBwYXJhbSB7P01hdGNoaW5nT3B0aW9uc30gb3B0aW9ucyBbe31dIFNldCBvZiBtYXRjaGluZyBvcHRpb25zXG4gKlxuICogQHJldHVybnMge01hdGNoaW5nUmVzdWx0fSBNYWNoaW5nIHJlc3VsdFxuICogQHRocm93cyB7RXJyb3J9IElmIGBkZXRlY3Rvck5hbWVgIHZhbHVlIGlzIHVua25vd24uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEltYWdlc01hdGNoZXMgKGltZzFEYXRhLCBpbWcyRGF0YSwgb3B0aW9ucyA9IHt9KSB7XG4gIGF3YWl0IGluaXRPcGVuQ1YoKTtcblxuICBjb25zdCB7ZGV0ZWN0b3JOYW1lID0gJ09SQicsIHZpc3VhbGl6ZSA9IGZhbHNlLFxuICAgICAgICAgZ29vZE1hdGNoZXNGYWN0b3IsIG1hdGNoRnVuYyA9ICdCcnV0ZUZvcmNlJ30gPSBvcHRpb25zO1xuICBpZiAoIV8uaW5jbHVkZXMoQVZBSUxBQkxFX0RFVEVDVE9SUywgZGV0ZWN0b3JOYW1lKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJyR7ZGV0ZWN0b3JOYW1lfScgZGV0ZWN0b3IgaXMgdW5rbm93bi4gYCArXG4gICAgICAgICAgICAgICAgICAgIGBPbmx5ICR7SlNPTi5zdHJpbmdpZnkoQVZBSUxBQkxFX0RFVEVDVE9SUyl9IGRldGVjdG9ycyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIGlmICghXy5pbmNsdWRlcyhBVkFJTEFCTEVfTUFUQ0hJTkdfRlVOQ1RJT05TLCBtYXRjaEZ1bmMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAnJHttYXRjaEZ1bmN9JyBtYXRjaGluZyBmdW5jdGlvbiBpcyB1bmtub3duLiBgICtcbiAgICAgICAgICAgICAgICAgICAgYE9ubHkgJHtKU09OLnN0cmluZ2lmeShBVkFJTEFCTEVfTUFUQ0hJTkdfRlVOQ1RJT05TKX0gbWF0Y2hpbmcgZnVuY3Rpb25zIGFyZSBzdXBwb3J0ZWQuYCk7XG4gIH1cblxuICBjb25zdCBkZXRlY3RvciA9IG5ldyBjdltgJHtkZXRlY3Rvck5hbWV9RGV0ZWN0b3JgXSgpO1xuICBjb25zdCBbaW1nMSwgaW1nMl0gPSBhd2FpdCBCLmFsbChbXG4gICAgY3YuaW1kZWNvZGVBc3luYyhpbWcxRGF0YSksXG4gICAgY3YuaW1kZWNvZGVBc3luYyhpbWcyRGF0YSlcbiAgXSk7XG4gIGNvbnN0IFtyZXN1bHQxLCByZXN1bHQyXSA9IGF3YWl0IEIuYWxsKFtcbiAgICBkZXRlY3RBbmRDb21wdXRlKGltZzEsIGRldGVjdG9yKSxcbiAgICBkZXRlY3RBbmRDb21wdXRlKGltZzIsIGRldGVjdG9yKVxuICBdKTtcbiAgbGV0IG1hdGNoZXMgPSBbXTtcbiAgdHJ5IHtcbiAgICBtYXRjaGVzID0gYXdhaXQgY3ZbYG1hdGNoJHttYXRjaEZ1bmN9QXN5bmNgXShyZXN1bHQxLmRlc2NyaXB0b3IsIHJlc3VsdDIuZGVzY3JpcHRvcik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIGFueSBtYXRjaGVzIGJldHdlZW4gdGhlIGdpdmVuIGltYWdlcy4gVHJ5IGFub3RoZXIgZGV0ZWN0aW9uIGFsZ29yaXRobS4gYCArXG4gICAgICAgICAgICAgICAgICAgIGAgT3JpZ2luYWwgZXJyb3I6ICR7ZX1gKTtcbiAgfVxuICBjb25zdCB0b3RhbENvdW50ID0gbWF0Y2hlcy5sZW5ndGg7XG4gIGlmIChoYXNWYWx1ZShnb29kTWF0Y2hlc0ZhY3RvcikpIHtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKGdvb2RNYXRjaGVzRmFjdG9yKSkge1xuICAgICAgY29uc3QgZGlzdGFuY2VzID0gbWF0Y2hlcy5tYXAoKG1hdGNoKSA9PiBtYXRjaC5kaXN0YW5jZSk7XG4gICAgICBjb25zdCBtaW5EaXN0YW5jZSA9IF8ubWluKGRpc3RhbmNlcyk7XG4gICAgICBjb25zdCBtYXhEaXN0YW5jZSA9IF8ubWF4KGRpc3RhbmNlcyk7XG4gICAgICBtYXRjaGVzID0gbWF0Y2hlc1xuICAgICAgICAuZmlsdGVyKChtYXRjaCkgPT4gZ29vZE1hdGNoZXNGYWN0b3IobWF0Y2guZGlzdGFuY2UsIG1pbkRpc3RhbmNlLCBtYXhEaXN0YW5jZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiBnb29kTWF0Y2hlc0ZhY3Rvcikge1xuICAgICAgICBtYXRjaGVzID0gbWF0Y2hlc1xuICAgICAgICAgIC5zb3J0KChtYXRjaDEsIG1hdGNoMikgPT4gbWF0Y2gxLmRpc3RhbmNlIC0gbWF0Y2gyLmRpc3RhbmNlKVxuICAgICAgICAgIC5zbGljZSgwLCBnb29kTWF0Y2hlc0ZhY3Rvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZXh0cmFjdFBvaW50ID0gKGtleVBvaW50cywgaW5kZXhQcm9wZXJ0eU5hbWUpID0+IChtYXRjaCkgPT4ge1xuICAgIGNvbnN0IHtwdCwgcG9pbnR9ID0ga2V5UG9pbnRzW21hdGNoW2luZGV4UHJvcGVydHlOYW1lXV07XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2p1c3RhZHVkZXdob2hhY2tzL29wZW5jdjRub2RlanMvaXNzdWVzLzU4NFxuICAgIHJldHVybiAocHQgfHwgcG9pbnQpO1xuICB9O1xuICBjb25zdCBwb2ludHMxID0gbWF0Y2hlcy5tYXAoZXh0cmFjdFBvaW50KHJlc3VsdDEua2V5UG9pbnRzLCAncXVlcnlJZHgnKSk7XG4gIGNvbnN0IHJlY3QxID0gY2FsY3VsYXRlTWF0Y2hlZFJlY3QocG9pbnRzMSk7XG4gIGNvbnN0IHBvaW50czIgPSBtYXRjaGVzLm1hcChleHRyYWN0UG9pbnQocmVzdWx0Mi5rZXlQb2ludHMsICd0cmFpbklkeCcpKTtcbiAgY29uc3QgcmVjdDIgPSBjYWxjdWxhdGVNYXRjaGVkUmVjdChwb2ludHMyKTtcblxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgcG9pbnRzMSxcbiAgICByZWN0MSxcbiAgICBwb2ludHMyLFxuICAgIHJlY3QyLFxuICAgIHRvdGFsQ291bnQsXG4gICAgY291bnQ6IG1hdGNoZXMubGVuZ3RoLFxuICB9O1xuICBpZiAodmlzdWFsaXplKSB7XG4gICAgY29uc3QgdmlzdWFsaXphdGlvbiA9IGN2LmRyYXdNYXRjaGVzKGltZzEsIGltZzIsIHJlc3VsdDEua2V5UG9pbnRzLCByZXN1bHQyLmtleVBvaW50cywgbWF0Y2hlcyk7XG4gICAgaGlnaGxpZ2h0UmVnaW9uKHZpc3VhbGl6YXRpb24sIHJlY3QxKTtcbiAgICBoaWdobGlnaHRSZWdpb24odmlzdWFsaXphdGlvbiwge1xuICAgICAgeDogaW1nMS5jb2xzICsgcmVjdDIueCxcbiAgICAgIHk6IHJlY3QyLnksXG4gICAgICB3aWR0aDogcmVjdDIud2lkdGgsXG4gICAgICBoZWlnaHQ6IHJlY3QyLmhlaWdodFxuICAgIH0pO1xuICAgIHJlc3VsdC52aXN1YWxpemF0aW9uID0gYXdhaXQgY3YuaW1lbmNvZGVBc3luYygnLnBuZycsIHZpc3VhbGl6YXRpb24pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2ltaWxhcml0eU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P2Jvb2xlYW59IHZpc3VhbGl6ZSBbZmFsc2VdIFdoZXRoZXIgdG8gcmV0dXJuIHRoZSByZXN1bHRpbmcgdmlzYWxpemF0aW9uXG4gKiBhcyBhbiBpbWFnZSAodXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMpXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWV0aG9kIFtUTV9DQ09FRkZfTk9STUVEXSBUaGUgbmFtZSBvZiB0aGUgdGVtcGxhdGUgbWF0Y2hpbmcgbWV0aG9kLlxuICogQWNjZXB0YWJsZSB2YWx1ZXMgYXJlOlxuICogLSBUTV9DQ09FRkZcbiAqIC0gVE1fQ0NPRUZGX05PUk1FRCAoZGVmYXVsdClcbiAqIC0gVE1fQ0NPUlJcbiAqIC0gVE1fQ0NPUlJfTk9STUVEXG4gKiAtIFRNX1NRRElGRlxuICogLSBUTV9TUURJRkZfTk9STUVEXG4gKiBSZWFkIGh0dHBzOi8vZG9jcy5vcGVuY3Yub3JnLzMuMC1iZXRhL2RvYy9weV90dXRvcmlhbHMvcHlfaW1ncHJvYy9weV90ZW1wbGF0ZV9tYXRjaGluZy9weV90ZW1wbGF0ZV9tYXRjaGluZy5odG1sXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2ltaWxhcml0eVJlc3VsdFxuICogQHByb3BlcnR5IHtudW1iZXJ9IHNjb3JlIFRoZSBzaW1pbGFyaXR5IHNjb3JlIGFzIGEgZmxvYXQgbnVtYmVyIGluIHJhbmdlIFswLjAsIDEuMF0uXG4gKiAxLjAgaXMgdGhlIGhpZ2hlc3Qgc2NvcmUgKG1lYW5zIGJvdGggaW1hZ2VzIGFyZSB0b3RhbGx5IGVxdWFsKS5cbiAqIEBwcm9wZXJ0eSB7P0J1ZmZlcn0gdmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiBvZiB0aGUgbWF0Y2hpbmcgcmVzdWx0XG4gKiByZXByZXNlbnRlZCBhcyBQTkcgaW1hZ2UgYnVmZmVyLiBUaGlzIGltYWdlIGluY2x1ZGVzIGJvdGggaW5wdXQgcGljdHVyZXMgd2hlcmVcbiAqIGRpZmZlcmVuY2UgcmVnaW9ucyBhcmUgaGlnaGxpZ2h0ZWQgd2l0aCByZWN0YW5nbGVzLlxuICovXG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgc2ltaWxhcml0eSBzY29yZSBiZXR3ZWVuIHR3byBpbWFnZXMuXG4gKiBJdCBpcyBleHBlY3RlZCwgdGhhdCBib3RoIGltYWdlcyBoYXZlIHRoZSBzYW1lIHJlc29sdXRpb24uXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IGltZzFEYXRhIFRoZSBkYXRhIG9mIHRoZSBmaXJzdCBpbWFnZSBwYWNrZWQgaW50byBhIE5vZGVKUyBidWZmZXJcbiAqIEBwYXJhbSB7QnVmZmVyfSBpbWcyRGF0YSBUaGUgZGF0YSBvZiB0aGUgc2Vjb25kIGltYWdlIHBhY2tlZCBpbnRvIGEgTm9kZUpTIGJ1ZmZlclxuICogQHBhcmFtIHs/U2ltaWxhcml0eU9wdGlvbnN9IG9wdGlvbnMgW3t9XSBTZXQgb2Ygc2ltaWxhcml0eSBjYWxjdWxhdGlvbiBvcHRpb25zXG4gKlxuICogQHJldHVybnMge1NpbWlsYXJpdHlSZXN1bHR9IFRoZSBjYWxjdWxhdGlvbiByZXN1bHRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgZ2l2ZW4gaW1hZ2VzIGhhdmUgZGlmZmVyZW50IHJlc29sdXRpb24uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEltYWdlc1NpbWlsYXJpdHkgKGltZzFEYXRhLCBpbWcyRGF0YSwgb3B0aW9ucyA9IHt9KSB7XG4gIGF3YWl0IGluaXRPcGVuQ1YoKTtcblxuICBjb25zdCB7XG4gICAgbWV0aG9kID0gREVGQVVMVF9NQVRDSElOR19NRVRIT0QsXG4gICAgdmlzdWFsaXplID0gZmFsc2UsXG4gIH0gPSBvcHRpb25zO1xuICBsZXQgW3RlbXBsYXRlLCByZWZlcmVuY2VdID0gYXdhaXQgQi5hbGwoW1xuICAgIGN2LmltZGVjb2RlQXN5bmMoaW1nMURhdGEpLFxuICAgIGN2LmltZGVjb2RlQXN5bmMoaW1nMkRhdGEpXG4gIF0pO1xuICBpZiAodGVtcGxhdGUucm93cyAhPT0gcmVmZXJlbmNlLnJvd3MgfHwgdGVtcGxhdGUuY29scyAhPT0gcmVmZXJlbmNlLmNvbHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggaW1hZ2VzIGFyZSBleHBlY3RlZCB0byBoYXZlIHRoZSBzYW1lIHNpemUgaW4gb3JkZXIgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgICdjYWxjdWxhdGUgdGhlIHNpbWlsYXJpdHkgc2NvcmUuJyk7XG4gIH1cbiAgW3RlbXBsYXRlLCByZWZlcmVuY2VdID0gYXdhaXQgQi5hbGwoW1xuICAgIHRlbXBsYXRlLmNvbnZlcnRUb0FzeW5jKGN2LkNWXzhVQzMpLFxuICAgIHJlZmVyZW5jZS5jb252ZXJ0VG9Bc3luYyhjdi5DVl84VUMzKVxuICBdKTtcblxuICBsZXQgbWF0Y2hlZDtcbiAgdHJ5IHtcbiAgICBtYXRjaGVkID0gYXdhaXQgcmVmZXJlbmNlLm1hdGNoVGVtcGxhdGVBc3luYyh0ZW1wbGF0ZSwgdG9NYXRjaGluZ01ldGhvZChtZXRob2QpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHJlZmVyZW5jZSBpbWFnZSBkaWQgbm90IG1hdGNoIHRvIHRoZSB0ZW1wbGF0ZSBvbmUuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgfVxuICBjb25zdCBtaW5NYXggPSBhd2FpdCBtYXRjaGVkLm1pbk1heExvY0FzeW5jKCk7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBzY29yZTogbWluTWF4Lm1heFZhbFxuICB9O1xuICBpZiAodmlzdWFsaXplKSB7XG4gICAgY29uc3QgcmVzdWx0TWF0ID0gbmV3IGN2Lk1hdCh0ZW1wbGF0ZS5yb3dzLCB0ZW1wbGF0ZS5jb2xzICogMiwgY3YuQ1ZfOFVDMyk7XG4gICAgYXdhaXQgQi5hbGwoW1xuICAgICAgcmVmZXJlbmNlLmNvcHlUb0FzeW5jKFxuICAgICAgICByZXN1bHRNYXQuZ2V0UmVnaW9uKG5ldyBjdi5SZWN0KDAsIDAsIHJlZmVyZW5jZS5jb2xzLCByZWZlcmVuY2Uucm93cykpKSxcbiAgICAgIHRlbXBsYXRlLmNvcHlUb0FzeW5jKFxuICAgICAgICByZXN1bHRNYXQuZ2V0UmVnaW9uKG5ldyBjdi5SZWN0KHJlZmVyZW5jZS5jb2xzLCAwLCB0ZW1wbGF0ZS5jb2xzLCB0ZW1wbGF0ZS5yb3dzKSkpXG4gICAgXSk7XG4gICAgbGV0IG1hc2sgPSByZWZlcmVuY2UuYWJzZGlmZih0ZW1wbGF0ZSk7XG4gICAgbWFzayA9IGF3YWl0IG1hc2suY3Z0Q29sb3JBc3luYyhjdi5DT0xPUl9CR1IyR1JBWSk7XG4gICAgbGV0IGNvbnRvdXJzID0gW107XG4gICAgdHJ5IHtcbiAgICAgIG1hc2sgPSBhd2FpdCBtYXNrLnRocmVzaG9sZEFzeW5jKDEyOCwgMjU1LCBjdi5USFJFU0hfQklOQVJZIHwgY3YuVEhSRVNIX09UU1UpO1xuICAgICAgY29udG91cnMgPSBhd2FpdCBtYXNrLmZpbmRDb250b3Vyc0FzeW5jKGN2LlJFVFJfRVhURVJOQUwsIGN2LkNIQUlOX0FQUFJPWF9TSU1QTEUpO1xuICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgLy8gTm8gY29udG91cnMgY2FuIGJlIGZvdW5kLCB3aGljaCBtZWFucywgbW9zdCBsaWtlbHksIHRoYXQgaW1hZ2VzIGFyZSBlcXVhbFxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGNvbnRvdXIgb2YgY29udG91cnMpIHtcbiAgICAgIGNvbnN0IGJvdW5kaW5nUmVjdCA9IGNvbnRvdXIuYm91bmRpbmdSZWN0KCk7XG4gICAgICBoaWdobGlnaHRSZWdpb24ocmVzdWx0TWF0LCBib3VuZGluZ1JlY3QpO1xuICAgICAgaGlnaGxpZ2h0UmVnaW9uKHJlc3VsdE1hdCwge1xuICAgICAgICB4OiByZWZlcmVuY2UuY29scyArIGJvdW5kaW5nUmVjdC54LFxuICAgICAgICB5OiBib3VuZGluZ1JlY3QueSxcbiAgICAgICAgd2lkdGg6IGJvdW5kaW5nUmVjdC53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBib3VuZGluZ1JlY3QuaGVpZ2h0XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmVzdWx0LnZpc3VhbGl6YXRpb24gPSBhd2FpdCBjdi5pbWVuY29kZUFzeW5jKCcucG5nJywgcmVzdWx0TWF0KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE9jY3VycmVuY2VPcHRpb25zXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSB2aXN1YWxpemUgW2ZhbHNlXSBXaGV0aGVyIHRvIHJldHVybiB0aGUgcmVzdWx0aW5nIHZpc2FsaXphdGlvblxuICogYXMgYW4gaW1hZ2UgKHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzKVxuICogQHByb3BlcnR5IHs/ZmxvYXR9IHRocmVzaG9sZCBbMC41XSBBdCB3aGF0IG5vcm1hbGl6ZWQgdGhyZXNob2xkIHRvIHJlamVjdFxuICogYSBtYXRjaFxuICogQHByb3BlcnR5IHs/ZmxvYXR9IG11bHRpcGxlIFtmYWxzZV0gZmluZCBtdWx0aXBsZSBtYXRjaGVzIGluIHRoZSBpbWFnZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBtYXRjaE5laWdoYm91clRocmVzaG9sZCBbMTBdIFRoZSBwaXhlbCBkaXN0YW5jZSBiZXR3ZWVuIG1hdGNoZXMgd2UgY29uc2lkZXJcbiAqIHRvIGJlIHBhcnQgb2YgdGhlIHNhbWUgdGVtcGxhdGUgbWF0Y2hcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE9jY3VycmVuY2VSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7UmVjdH0gcmVjdCBUaGUgcmVnaW9uIG9mIHRoZSBwYXJ0aWFsIGltYWdlIG9jY3VyZW5jZVxuICogb24gdGhlIGZ1bGwgaW1hZ2VcbiAqIEBwcm9wZXJ0eSB7P0J1ZmZlcn0gdmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiBvZiB0aGUgbWF0Y2hpbmcgcmVzdWx0XG4gKiByZXByZXNlbnRlZCBhcyBQTkcgaW1hZ2UgYnVmZmVyLiBPbiB0aGlzIGltYWdlIHRoZSBtYXRjaGluZ1xuICogcmVnaW9uIGlzIGhpZ2hsaWdodGVkIHdpdGggYSByZWN0YW5nbGUuIElmIHRoZSBtdWx0aXBsZSBvcHRpb24gaXMgcGFzc2VkLFxuICogYWxsIHJlc3VsdHMgYXJlIGhpZ2hsaWdodGVkIGhlcmUuXG4gKiBAcHJvcGVydHkge251bWJlcn0gc2NvcmUgVGhlIHNpbWlsYXJpdHkgc2NvcmUgYXMgYSBmbG9hdCBudW1iZXIgaW4gcmFuZ2UgWzAuMCwgMS4wXS5cbiAqIDEuMCBpcyB0aGUgaGlnaGVzdCBzY29yZSAobWVhbnMgYm90aCBpbWFnZXMgYXJlIHRvdGFsbHkgZXF1YWwpLlxuICogQHByb3BlcnR5IHtBcnJheTxPY2N1cnJlbmNlUmVzdWx0Pn0gbXVsdGlwbGUgVGhlIGFycmF5IG9mIG1hdGNoaW5nIE9jY3VyZW5jZVJlc3VsdHNcbiAqIC0gb25seSB3aGVuIG11bHRpcGxlIG9wdGlvbiBpcyBwYXNzZWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZXRob2QgW1RNX0NDT0VGRl9OT1JNRURdIFRoZSBuYW1lIG9mIHRoZSB0ZW1wbGF0ZSBtYXRjaGluZyBtZXRob2QuXG4gKiBBY2NlcHRhYmxlIHZhbHVlcyBhcmU6XG4gKiAtIFRNX0NDT0VGRlxuICogLSBUTV9DQ09FRkZfTk9STUVEIChkZWZhdWx0KVxuICogLSBUTV9DQ09SUlxuICogLSBUTV9DQ09SUl9OT1JNRURcbiAqIC0gVE1fU1FESUZGXG4gKiAtIFRNX1NRRElGRl9OT1JNRURcbiAqIFJlYWQgaHR0cHM6Ly9kb2NzLm9wZW5jdi5vcmcvMy4wLWJldGEvZG9jL3B5X3R1dG9yaWFscy9weV9pbWdwcm9jL3B5X3RlbXBsYXRlX21hdGNoaW5nL3B5X3RlbXBsYXRlX21hdGNoaW5nLmh0bWxcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKi9cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBvY2N1cnJlbmNlIHBvc2l0aW9uIG9mIGEgcGFydGlhbCBpbWFnZSBpbiB0aGUgZnVsbFxuICogaW1hZ2UuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IGZ1bGxJbWdEYXRhIFRoZSBkYXRhIG9mIHRoZSBmdWxsIGltYWdlIHBhY2tlZCBpbnRvIGEgTm9kZUpTIGJ1ZmZlclxuICogQHBhcmFtIHtCdWZmZXJ9IHBhcnRpYWxJbWdEYXRhIFRoZSBkYXRhIG9mIHRoZSBwYXJ0aWFsIGltYWdlIHBhY2tlZCBpbnRvIGEgTm9kZUpTIGJ1ZmZlclxuICogQHBhcmFtIHs/T2NjdXJyZW5jZU9wdGlvbnN9IG9wdGlvbnMgW3t9XSBTZXQgb2Ygb2NjdXJyZW5jZSBjYWxjdWxhdGlvbiBvcHRpb25zXG4gKlxuICogQHJldHVybnMge09jY3VycmVuY2VSZXN1bHR9XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgbm8gb2NjdXJyZW5jZXMgb2YgdGhlIHBhcnRpYWwgaW1hZ2UgY2FuIGJlIGZvdW5kIGluIHRoZSBmdWxsIGltYWdlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEltYWdlT2NjdXJyZW5jZSAoZnVsbEltZ0RhdGEsIHBhcnRpYWxJbWdEYXRhLCBvcHRpb25zID0ge30pIHtcbiAgYXdhaXQgaW5pdE9wZW5DVigpO1xuXG4gIGNvbnN0IHtcbiAgICB2aXN1YWxpemUgPSBmYWxzZSxcbiAgICB0aHJlc2hvbGQgPSBERUZBVUxUX01BVENIX1RIUkVTSE9MRCxcbiAgICBtdWx0aXBsZSA9IGZhbHNlLFxuICAgIG1hdGNoTmVpZ2hib3VyVGhyZXNob2xkID0gTUFUQ0hfTkVJR0hCT1VSX1RIUkVTSE9MRCxcbiAgICBtZXRob2QgPSBERUZBVUxUX01BVENISU5HX01FVEhPRCxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgW2Z1bGxJbWcsIHBhcnRpYWxJbWddID0gYXdhaXQgQi5hbGwoW1xuICAgIGN2LmltZGVjb2RlQXN5bmMoZnVsbEltZ0RhdGEpLFxuICAgIGN2LmltZGVjb2RlQXN5bmMocGFydGlhbEltZ0RhdGEpXG4gIF0pO1xuICBjb25zdCByZXN1bHRzID0gW107XG4gIGxldCB2aXN1YWxpemF0aW9uID0gbnVsbDtcblxuICB0cnkge1xuICAgIGNvbnN0IG1hdGNoZWQgPSBhd2FpdCBmdWxsSW1nLm1hdGNoVGVtcGxhdGVBc3luYyhwYXJ0aWFsSW1nLCB0b01hdGNoaW5nTWV0aG9kKG1ldGhvZCkpO1xuICAgIGNvbnN0IG1pbk1heCA9IGF3YWl0IG1hdGNoZWQubWluTWF4TG9jQXN5bmMoKTtcblxuICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgY29uc3Qgbm9uWmVyb01hdGNoUmVzdWx0cyA9IG1hdGNoZWQudGhyZXNob2xkKHRocmVzaG9sZCwgMSwgY3YuVEhSRVNIX0JJTkFSWSlcbiAgICAgICAgLmNvbnZlcnRUbyhjdi5DVl84VSlcbiAgICAgICAgLmZpbmROb25aZXJvKCk7XG4gICAgICBjb25zdCBtYXRjaGVzID0gZmlsdGVyTmVhck1hdGNoZXMobm9uWmVyb01hdGNoUmVzdWx0cywgbWF0Y2hOZWlnaGJvdXJUaHJlc2hvbGQpO1xuXG4gICAgICBmb3IgKGNvbnN0IHt4LCB5fSBvZiBtYXRjaGVzKSB7XG4gICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgc2NvcmU6IG1hdGNoZWQuYXQoeSwgeCksXG4gICAgICAgICAgcmVjdDoge1xuICAgICAgICAgICAgeCwgeSxcbiAgICAgICAgICAgIHdpZHRoOiBwYXJ0aWFsSW1nLmNvbHMsXG4gICAgICAgICAgICBoZWlnaHQ6IHBhcnRpYWxJbWcucm93c1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChtaW5NYXgubWF4VmFsID49IHRocmVzaG9sZCkge1xuICAgICAgY29uc3Qge3gsIHl9ID0gbWV0aG9kLmluY2x1ZGVzKCdTUURJRkYnKSA/IG1pbk1heC5taW5Mb2MgOiBtaW5NYXgubWF4TG9jO1xuICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgc2NvcmU6IG1pbk1heC5tYXhWYWwsXG4gICAgICAgIHJlY3Q6IHtcbiAgICAgICAgICB4LCB5LFxuICAgICAgICAgIHdpZHRoOiBwYXJ0aWFsSW1nLmNvbHMsXG4gICAgICAgICAgaGVpZ2h0OiBwYXJ0aWFsSW1nLnJvd3NcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNFbXB0eShyZXN1bHRzKSkge1xuICAgICAgLy8gQmVsb3cgZXJyb3IgbWVzc2FnZSwgYENhbm5vdCBmaW5kIGFueSBvY2N1cnJlbmNlc2AgaXMgcmVmZXJlbmNlZCBpbiBmaW5kIGJ5IGltYWdlXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1hdGNoIHRocmVzaG9sZDogJHt0aHJlc2hvbGR9LiBIaWdoZXN0IG1hdGNoIHZhbHVlIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGBmb3VuZCB3YXMgJHttaW5NYXgubWF4VmFsfWApO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIEJlbG93IGVycm9yIG1lc3NhZ2UsIGBDYW5ub3QgZmluZCBhbnkgb2NjdXJyZW5jZXNgIGlzIHJlZmVyZW5jZWQgaW4gZmluZCBieSBpbWFnZVxuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgYW55IG9jY3VycmVuY2VzIG9mIHRoZSBwYXJ0aWFsIGltYWdlIGluIHRoZSBmdWxsIGltYWdlLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBpZiAodmlzdWFsaXplKSB7XG4gICAgY29uc3QgZnVsbEhpZ2hsaWdodGVkSW1hZ2UgPSBmdWxsSW1nLmNvcHkoKTtcblxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgIGNvbnN0IHNpbmdsZUhpZ2hsaWdodGVkSW1hZ2UgPSBmdWxsSW1nLmNvcHkoKTtcblxuICAgICAgaGlnaGxpZ2h0UmVnaW9uKHNpbmdsZUhpZ2hsaWdodGVkSW1hZ2UsIHJlc3VsdC5yZWN0KTtcbiAgICAgIGhpZ2hsaWdodFJlZ2lvbihmdWxsSGlnaGxpZ2h0ZWRJbWFnZSwgcmVzdWx0LnJlY3QpO1xuICAgICAgcmVzdWx0LnZpc3VhbGl6YXRpb24gPSBhd2FpdCBjdi5pbWVuY29kZUFzeW5jKCcucG5nJywgc2luZ2xlSGlnaGxpZ2h0ZWRJbWFnZSk7XG4gICAgfVxuICAgIHZpc3VhbGl6YXRpb24gPSBhd2FpdCBjdi5pbWVuY29kZUFzeW5jKCcucG5nJywgZnVsbEhpZ2hsaWdodGVkSW1hZ2UpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICByZWN0OiByZXN1bHRzWzBdLnJlY3QsXG4gICAgc2NvcmU6IHJlc3VsdHNbMF0uc2NvcmUsXG4gICAgdmlzdWFsaXphdGlvbixcbiAgICBtdWx0aXBsZTogcmVzdWx0c1xuICB9O1xufVxuXG4vKipcbiAqIEZpbHRlciBvdXQgbWF0Y2ggcmVzdWx0cyB3aGljaCBoYXZlIGEgbWF0Y2hlZCBuZWlnaGJvdXJcbiAqXG4gKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gbm9uWmVyb01hdGNoUmVzdWx0cyBtYXRyaXggb2YgaW1hZ2UgbWF0Y2ggcmVzdWx0c1xuICogQHBhcmFtIHtudW1iZXJ9IG1hdGNoTmVpZ2hib3VyVGhyZXNob2xkIFRoZSBwaXhlbCBkaXN0YW5jZSB3aXRoaW4gd2hpY2ggd2VcbiAqIGNvbnNpZGVyIGFuIGVsZW1lbnQgYmVpbmcgYSBuZWlnaGJvdXIgb2YgYW4gZXhpc3RpbmcgbWF0Y2hcbiAqIEByZXR1cm4ge0FycmF5PFBvaW50Pn0gdGhlIGZpbHRlcmVkIGFycmF5IG9mIG1hdGNoZWQgcG9pbnRzXG4gKi9cbmZ1bmN0aW9uIGZpbHRlck5lYXJNYXRjaGVzIChub25aZXJvTWF0Y2hSZXN1bHRzLCBtYXRjaE5laWdoYm91clRocmVzaG9sZCkge1xuICByZXR1cm4gbm9uWmVyb01hdGNoUmVzdWx0cy5yZWR1Y2UoKGFjYywgZWxlbWVudCkgPT4ge1xuICAgIGlmICghYWNjLnNvbWUoKG1hdGNoKSA9PiBkaXN0YW5jZShtYXRjaCwgZWxlbWVudCkgPD0gbWF0Y2hOZWlnaGJvdXJUaHJlc2hvbGQpKSB7XG4gICAgICBhY2MucHVzaChlbGVtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIGRpc3RhbmNlIGJldHdlZW4gdHdvIHBvaW50c1xuICpcbiAqIEBwYXJhbSB7UG9pbnR9IHBvaW50MSBUaGUgZmlyc3QgcG9pbnRcbiAqIEBwYXJhbSB7UG9pbnR9IHBvaW50MiBUaGUgc2Vjb25kIHBvaW50XG4gKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBkaXN0YW5jZVxuICovXG5mdW5jdGlvbiBkaXN0YW5jZSAocG9pbnQxLCBwb2ludDIpIHtcbiAgY29uc3QgYTIgPSBNYXRoLnBvdygocG9pbnQxLnggLSBwb2ludDIueCksIDIpO1xuICBjb25zdCBiMiA9IE1hdGgucG93KChwb2ludDEueSAtIHBvaW50Mi55KSwgMik7XG4gIHJldHVybiBNYXRoLnNxcnQoYTIgKyBiMik7XG59XG5cbi8qKlxuICogQ3JvcCB0aGUgaW1hZ2UgYnkgZ2l2ZW4gcmVjdGFuZ2xlICh1c2UgYmFzZTY0IHN0cmluZyBhcyBpbnB1dCBhbmQgb3V0cHV0KVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlNjRJbWFnZSBUaGUgc3RyaW5nIHdpdGggYmFzZTY0IGVuY29kZWQgaW1hZ2VcbiAqIEBwYXJhbSB7UmVnaW9ufSByZWN0IFRoZSBzZWxlY3RlZCByZWdpb24gb2YgaW1hZ2VcbiAqIEByZXR1cm4ge3N0cmluZ30gYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIGNyb3BwZWQgaW1hZ2VcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JvcEJhc2U2NEltYWdlIChiYXNlNjRJbWFnZSwgcmVjdCkge1xuICBjb25zdCBpbWFnZSA9IGF3YWl0IGJhc2U2NFRvSW1hZ2UoYmFzZTY0SW1hZ2UpO1xuICBjcm9wSW1hZ2UoaW1hZ2UsIHJlY3QpO1xuICByZXR1cm4gYXdhaXQgaW1hZ2VUb0Jhc2U2NChpbWFnZSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgcG5nanMgaW1hZ2UgZnJvbSBnaXZlbiBiYXNlNjQgaW1hZ2VcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZTY0SW1hZ2UgVGhlIHN0cmluZyB3aXRoIGJhc2U2NCBlbmNvZGVkIGltYWdlXG4gKiBAcmV0dXJuIHtQTkd9IFRoZSBpbWFnZSBvYmplY3RcbiAqL1xuYXN5bmMgZnVuY3Rpb24gYmFzZTY0VG9JbWFnZSAoYmFzZTY0SW1hZ2UpIHtcbiAgY29uc3QgaW1hZ2VCdWZmZXIgPSBCdWZmZXIuZnJvbShiYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpO1xuICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGltYWdlID0gbmV3IFBORyh7ZmlsdGVyVHlwZTogU0NBTkxJTkVfRklMVEVSX01FVEhPRH0pO1xuICAgIGltYWdlLnBhcnNlKGltYWdlQnVmZmVyLCAoZXJyLCBpbWFnZSkgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLWNhbGxiYWNrc1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgICByZXNvbHZlKGltYWdlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgYmFzZTY0IHN0cmluZyBmb3IgZ2l2ZW4gaW1hZ2Ugb2JqZWN0XG4gKlxuICogQHBhcmFtIHtQTkd9IGltYWdlIFRoZSBpbWFnZSBvYmplY3RcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHN0cmluZyB3aXRoIGJhc2U2NCBlbmNvZGVkIGltYWdlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGltYWdlVG9CYXNlNjQgKGltYWdlKSB7XG4gIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgaW1hZ2UucGFjaygpXG4gICAgLm9uKCdkYXRhJywgKGNodW5rKSA9PiBjaHVua3MucHVzaChjaHVuaykpLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICByZXNvbHZlKEJ1ZmZlci5jb25jYXQoY2h1bmtzKS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgIH0pXG4gICAgLm9uKCdlcnJvcicsIChlcnIpID0+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by1jYWxsYmFja3NcbiAgICAgIHJlamVjdChlcnIpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDcm9wIHRoZSBpbWFnZSBieSBnaXZlbiByZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0ge1BOR30gaW1hZ2UgVGhlIGltYWdlIHRvIG11dGF0ZSBieSBjcm9wcGluZ1xuICogQHBhcmFtIHtSZWdpb259IHJlY3QgVGhlIHNlbGVjdGVkIHJlZ2lvbiBvZiBpbWFnZVxuICovXG5mdW5jdGlvbiBjcm9wSW1hZ2UgKGltYWdlLCByZWN0KSB7XG4gIGNvbnN0IGltYWdlUmVjdCA9IHt3aWR0aDogaW1hZ2Uud2lkdGgsIGhlaWdodDogaW1hZ2UuaGVpZ2h0fTtcbiAgY29uc3QgaW50ZXJSZWN0ID0gZ2V0UmVjdEludGVyc2VjdGlvbihyZWN0LCBpbWFnZVJlY3QpO1xuICBpZiAoaW50ZXJSZWN0LndpZHRoIDwgcmVjdC53aWR0aCB8fCBpbnRlclJlY3QuaGVpZ2h0IDwgcmVjdC5oZWlnaHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjcm9wICR7SlNPTi5zdHJpbmdpZnkocmVjdCl9IGZyb20gJHtKU09OLnN0cmluZ2lmeShpbWFnZVJlY3QpfSBiZWNhdXNlIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGVtIHdhcyBub3QgdGhlIHNpemUgb2YgdGhlIHJlY3RgKTtcbiAgfVxuXG4gIGNvbnN0IGZpcnN0VmVydGljYWxQaXhlbCA9IGludGVyUmVjdC50b3A7XG4gIGNvbnN0IGxhc3RWZXJ0aWNhbFBpeGVsID0gaW50ZXJSZWN0LnRvcCArIGludGVyUmVjdC5oZWlnaHQ7XG5cbiAgY29uc3QgZmlyc3RIb3Jpem9udGFsUGl4ZWwgPSBpbnRlclJlY3QubGVmdDtcbiAgY29uc3QgbGFzdEhvcml6b250YWxQaXhlbCA9IGludGVyUmVjdC5sZWZ0ICsgaW50ZXJSZWN0LndpZHRoO1xuXG4gIGNvbnN0IGNyb3BwZWRBcnJheSA9IFtdO1xuICBmb3IgKGxldCB5ID0gZmlyc3RWZXJ0aWNhbFBpeGVsOyB5IDwgbGFzdFZlcnRpY2FsUGl4ZWw7IHkrKykge1xuICAgIGZvciAobGV0IHggPSBmaXJzdEhvcml6b250YWxQaXhlbDsgeCA8IGxhc3RIb3Jpem9udGFsUGl4ZWw7IHgrKykge1xuICAgICAgY29uc3QgZmlyc3RCeXRlSWR4SW5QaXhlbEJsb2NrID0gKGltYWdlUmVjdC53aWR0aCAqIHkgKyB4KSA8PCAyO1xuICAgICAgZm9yIChsZXQgYnl0ZUlkeCA9IDA7IGJ5dGVJZHggPCBCWVRFU19JTl9QSVhFTF9CTE9DSzsgYnl0ZUlkeCsrKSB7XG4gICAgICAgIGNyb3BwZWRBcnJheS5wdXNoKGltYWdlLmRhdGFbZmlyc3RCeXRlSWR4SW5QaXhlbEJsb2NrICsgYnl0ZUlkeF0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGltYWdlLmRhdGEgPSBCdWZmZXIuZnJvbShjcm9wcGVkQXJyYXkpO1xuICBpbWFnZS53aWR0aCA9IGludGVyUmVjdC53aWR0aDtcbiAgaW1hZ2UuaGVpZ2h0ID0gaW50ZXJSZWN0LmhlaWdodDtcbiAgcmV0dXJuIGltYWdlO1xufVxuXG5mdW5jdGlvbiBnZXRSZWN0SW50ZXJzZWN0aW9uIChyZWN0LCBpbWFnZVNpemUpIHtcbiAgY29uc3QgbGVmdCA9IHJlY3QubGVmdCA+PSBpbWFnZVNpemUud2lkdGggPyBpbWFnZVNpemUud2lkdGggOiByZWN0LmxlZnQ7XG4gIGNvbnN0IHRvcCA9IHJlY3QudG9wID49IGltYWdlU2l6ZS5oZWlnaHQgPyBpbWFnZVNpemUuaGVpZ2h0IDogcmVjdC50b3A7XG4gIGNvbnN0IHdpZHRoID0gaW1hZ2VTaXplLndpZHRoID49IChsZWZ0ICsgcmVjdC53aWR0aCkgPyByZWN0LndpZHRoIDogKGltYWdlU2l6ZS53aWR0aCAtIGxlZnQpO1xuICBjb25zdCBoZWlnaHQgPSBpbWFnZVNpemUuaGVpZ2h0ID49ICh0b3AgKyByZWN0LmhlaWdodCkgPyByZWN0LmhlaWdodCA6IChpbWFnZVNpemUuaGVpZ2h0IC0gdG9wKTtcbiAgcmV0dXJuIHtsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHR9O1xufVxuXG5leHBvcnQge1xuICBjcm9wQmFzZTY0SW1hZ2UsIGJhc2U2NFRvSW1hZ2UsIGltYWdlVG9CYXNlNjQsIGNyb3BJbWFnZSwgZ2V0SW1hZ2VzTWF0Y2hlcyxcbiAgZ2V0SW1hZ2VzU2ltaWxhcml0eSwgZ2V0SW1hZ2VPY2N1cnJlbmNlLCBnZXRKaW1wSW1hZ2UsIE1JTUVfSlBFRywgTUlNRV9QTkcsXG4gIE1JTUVfQk1QLFxufTtcbiJdLCJmaWxlIjoibGliL2ltYWdlLXV0aWwuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9pbWFnZS11dGlsLmpzIl0sIm5hbWVzIjpbIkJZVEVTX0lOX1BJWEVMX0JMT0NLIiwiU0NBTkxJTkVfRklMVEVSX01FVEhPRCIsIk1JTUVfSlBFRyIsIk1JTUVfUE5HIiwiTUlNRV9CTVAiLCJKaW1wIiwiZ2V0SmltcEltYWdlIiwiZGF0YSIsIkIiLCJyZXNvbHZlIiwicmVqZWN0IiwiXyIsImlzU3RyaW5nIiwiaXNCdWZmZXIiLCJFcnJvciIsIkJ1ZmZlciIsImZyb20iLCJlcnIiLCJpbWdPYmoiLCJfZ2V0QnVmZmVyIiwiZ2V0QnVmZmVyIiwiYmluZCIsInByb21pc2lmeSIsImNvbnRleHQiLCJjcm9wQmFzZTY0SW1hZ2UiLCJiYXNlNjRJbWFnZSIsInJlY3QiLCJpbWFnZSIsImJhc2U2NFRvSW1hZ2UiLCJjcm9wSW1hZ2UiLCJpbWFnZVRvQmFzZTY0IiwiaW1hZ2VCdWZmZXIiLCJQTkciLCJmaWx0ZXJUeXBlIiwicGFyc2UiLCJjaHVua3MiLCJwYWNrIiwib24iLCJjaHVuayIsInB1c2giLCJjb25jYXQiLCJ0b1N0cmluZyIsImltYWdlUmVjdCIsIndpZHRoIiwiaGVpZ2h0IiwiaW50ZXJSZWN0IiwiZ2V0UmVjdEludGVyc2VjdGlvbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJmaXJzdFZlcnRpY2FsUGl4ZWwiLCJ0b3AiLCJsYXN0VmVydGljYWxQaXhlbCIsImZpcnN0SG9yaXpvbnRhbFBpeGVsIiwibGVmdCIsImxhc3RIb3Jpem9udGFsUGl4ZWwiLCJjcm9wcGVkQXJyYXkiLCJ5IiwieCIsImZpcnN0Qnl0ZUlkeEluUGl4ZWxCbG9jayIsImJ5dGVJZHgiLCJpbWFnZVNpemUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxvQkFBb0IsR0FBRyxDQUE3QjtBQUNBLE1BQU1DLHNCQUFzQixHQUFHLENBQS9CO0FBQ0EsTUFBTTtBQUFFQyxFQUFBQSxTQUFGO0FB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LEtBQVYsSUFBb0JVLElBQUksR0FBRzNCLElBQUksQ0FBQ2lCLEtBQWhDLEdBQXlDakIsSUFBSSxDQUFDaUIsS0FBOUMsR0FBdURpQixTQUFTLENBQUNqQixLQUFWLEdBQWtCVSxJQUF2RjtBQUNBLFFBQU1ULE1BQU0sR0FBR2dCLFNBQVMsQ0FBQ2hCLE1BQVYsSUFBcUJNLEdBQUcsR0FBR3hCLElBQUksQ0FBQ2tCLE1BQWhDLEdBQTBDbEIsSUFBSSxDQUFDa0IsTUFBL0MsR0FBeURnQixTQUFTLENBQUNoQixNQUFWLEdBQW1CTSxHQUEzRjtBQUNBLFNBQU87QUFBQ0csSUFBQUEsSUFBRDtBQUFPSCxJQUFBQSxHQUFQO0FBQVlQLElBQUFBLEtBQVo7QUFBbUJDLElBQUFBO0FBQW5CLEdBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgSmltcCBmcm9tICdqaW1wJztcbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7XG5pbXBvcnQgeyBQTkcgfSBmcm9tICdwbmdqcyc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5cbmNvbnN0IEJZVEVTX0lOX1BJWEVMX0JMT0NLID0gNDtcbmNvbnN0IFNDQU5MSU5FX0ZJTFRFUl9NRVRIT0QgPSA0O1xuY29uc3QgeyBNSU1FX0pQRUcsIE1JTUVfUE5HLCBNSU1FX0JNUCB9ID0gSmltcDtcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGdldCBhIEppbXAgaW1hZ2Ugb2JqZWN0IGZyb20gYnVmZmVyIG9yIGJhc2U2NCBkYXRhLiBKaW1wXG4gKiBpcyBhIGdyZWF0IGxpYnJhcnkgaG93ZXZlciBpdCBkb2VzIElPIGluIHRoZSBjb25zdHJ1Y3RvciBzbyBpdCdzIG5vdFxuICogY29udmVuaWVudCBmb3Igb3VyIGFzeW5jL2F3YWl0IG1vZGVsLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfHN0cmluZ30gZGF0YSAtIGJpbmFyeSBpbWFnZSBidWZmZXIgb3IgYmFzZTY0LWVuY29kZWQgaW1hZ2VcbiAqIHN0cmluZ1xuICogQHJldHVybnMge0ppbXB9IC0gdGhlIGppbXAgaW1hZ2Ugb2JqZWN0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEppbXBJbWFnZSAoZGF0YSkge1xuICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGlmICghXy5pc1N0cmluZyhkYXRhKSAmJiAhXy5pc0J1ZmZlcihkYXRhKSkge1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ011c3QgaW5pdGlhbGl6ZSBqaW1wIG9iamVjdCB3aXRoIHN0cmluZyBvciBidWZmZXInKSk7XG4gICAgfVxuICAgIC8vIGlmIGRhdGEgaXMgYSBzdHJpbmcsIGFzc3VtZSBpdCBpcyBhIGJhc2U2NC1lbmNvZGVkIGltYWdlXG4gICAgaWYgKF8uaXNTdHJpbmcoZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCAnYmFzZTY0Jyk7XG4gICAgfVxuICAgIG5ldyBKaW1wKGRhdGEsIChlcnIsIGltZ09iaikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgICBpZiAoIWltZ09iaikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignQ291bGQgbm90IGNyZWF0ZSBqaW1wIGltYWdlIGZyb20gdGhhdCBkYXRhJykpO1xuICAgICAgfVxuICAgICAgaW1nT2JqLl9nZXRCdWZmZXIgPSBpbWdPYmouZ2V0QnVmZmVyLmJpbmQoaW1nT2JqKTtcbiAgICAgIGltZ09iai5nZXRCdWZmZXIgPSBCLnByb21pc2lmeShpbWdPYmouX2dldEJ1ZmZlciwge2NvbnRleHQ6IGltZ09ian0pO1xuICAgICAgcmVzb2x2ZShpbWdPYmopO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDcm9wIHRoZSBpbWFnZSBieSBnaXZlbiByZWN0YW5nbGUgKHVzZSBiYXNlNjQgc3RyaW5nIGFzIGlucHV0IGFuZCBvdXRwdXQpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NEltYWdlIFRoZSBzdHJpbmcgd2l0aCBiYXNlNjQgZW5jb2RlZCBpbWFnZVxuICogQHBhcmFtIHtSZWdpb259IHJlY3QgVGhlIHNlbGVjdGVkIHJlZ2lvbiBvZiBpbWFnZVxuICogQHJldHVybiB7c3RyaW5nfSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgY3JvcHBlZCBpbWFnZVxuICovXG5hc3luYyBmdW5jdGlvbiBjcm9wQmFzZTY0SW1hZ2UgKGJhc2U2NEltYWdlLCByZWN0KSB7XG4gIGNvbnN0IGltYWdlID0gYXdhaXQgYmFzZTY0VG9JbWFnZShiYXNlNjRJbWFnZSk7XG4gIGNyb3BJbWFnZShpbWFnZSwgcmVjdCk7XG4gIHJldHVybiBhd2FpdCBpbWFnZVRvQmFzZTY0KGltYWdlKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwbmdqcyBpbWFnZSBmcm9tIGdpdmVuIGJhc2U2NCBpbWFnZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlNjRJbWFnZSBUaGUgc3RyaW5nIHdpdGggYmFzZTY0IGVuY29kZWQgaW1hZ2VcbiAqIEByZXR1cm4ge1BOR30gVGhlIGltYWdlIG9iamVjdFxuICovXG5hc3luYyBmdW5jdGlvbiBiYXNlNjRUb0ltYWdlIChiYXNlNjRJbWFnZSkge1xuICBjb25zdCBpbWFnZUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGJhc2U2NEltYWdlLCAnYmFzZTY0Jyk7XG4gIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgaW1hZ2UgPSBuZXcgUE5HKHtmaWx0ZXJUeXBlOiBTQ0FOTElORV9GSUxURVJfTUVUSE9EfSk7XG4gICAgaW1hZ2UucGFyc2UoaW1hZ2VCdWZmZXIsIChlcnIsIGltYWdlKSA9PiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tY2FsbGJhY2tzXG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoaW1hZ2UpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBiYXNlNjQgc3RyaW5nIGZvciBnaXZlbiBpbWFnZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge1BOR30gaW1hZ2UgVGhlIGltYWdlIG9iamVjdFxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5nIHdpdGggYmFzZTY0IGVuY29kZWQgaW1hZ2VcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW1hZ2VUb0Jhc2U2NCAoaW1hZ2UpIHtcbiAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICBpbWFnZS5wYWNrKClcbiAgICAub24oJ2RhdGEnLCAoY2h1bmspID0+IGNodW5rcy5wdXNoKGNodW5rKSkub24oJ2VuZCcsICgpID0+IHtcbiAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChjaHVua3MpLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgfSlcbiAgICAub24oJ2Vycm9yJywgKGVycikgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLWNhbGxiYWNrc1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENyb3AgdGhlIGltYWdlIGJ5IGdpdmVuIHJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB7UE5HfSBpbWFnZSBUaGUgaW1hZ2UgdG8gbXV0YXRlIGJ5IGNyb3BwaW5nXG4gKiBAcGFyYW0ge1JlZ2lvbn0gcmVjdCBUaGUgc2VsZWN0ZWQgcmVnaW9uIG9mIGltYWdlXG4gKi9cbmZ1bmN0aW9uIGNyb3BJbWFnZSAoaW1hZ2UsIHJlY3QpIHtcbiAgY29uc3QgaW1hZ2VSZWN0ID0ge3dpZHRoOiBpbWFnZS53aWR0aCwgaGVpZ2h0OiBpbWFnZS5oZWlnaHR9O1xuICBjb25zdCBpbnRlclJlY3QgPSBnZXRSZWN0SW50ZXJzZWN0aW9uKHJlY3QsIGltYWdlUmVjdCk7XG4gIGlmIChpbnRlclJlY3Qud2lkdGggPCByZWN0LndpZHRoIHx8IGludGVyUmVjdC5oZWlnaHQgPCByZWN0LmhlaWdodCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNyb3AgJHtKU09OLnN0cmluZ2lmeShyZWN0KX0gZnJvbSAke0pTT04uc3RyaW5naWZ5KGltYWdlUmVjdCl9IGJlY2F1c2UgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZW0gd2FzIG5vdCB0aGUgc2l6ZSBvZiB0aGUgcmVjdGApO1xuICB9XG5cbiAgY29uc3QgZmlyc3RWZXJ0aWNhbFBpeGVsID0gaW50ZXJSZWN0LnRvcDtcbiAgY29uc3QgbGFzdFZlcnRpY2FsUGl4ZWwgPSBpbnRlclJlY3QudG9wICsgaW50ZXJSZWN0LmhlaWdodDtcblxuICBjb25zdCBmaXJzdEhvcml6b250YWxQaXhlbCA9IGludGVyUmVjdC5sZWZ0O1xuICBjb25zdCBsYXN0SG9yaXpvbnRhbFBpeGVsID0gaW50ZXJSZWN0LmxlZnQgKyBpbnRlclJlY3Qud2lkdGg7XG5cbiAgY29uc3QgY3JvcHBlZEFycmF5ID0gW107XG4gIGZvciAobGV0IHkgPSBmaXJzdFZlcnRpY2FsUGl4ZWw7IHkgPCBsYXN0VmVydGljYWxQaXhlbDsgeSsrKSB7XG4gICAgZm9yIChsZXQgeCA9IGZpcnN0SG9yaXpvbnRhbFBpeGVsOyB4IDwgbGFzdEhvcml6b250YWxQaXhlbDsgeCsrKSB7XG4gICAgICBjb25zdCBmaXJzdEJ5dGVJZHhJblBpeGVsQmxvY2sgPSAoaW1hZ2VSZWN0LndpZHRoICogeSArIHgpIDw8IDI7XG4gICAgICBmb3IgKGxldCBieXRlSWR4ID0gMDsgYnl0ZUlkeCA8IEJZVEVTX0lOX1BJWEVMX0JMT0NLOyBieXRlSWR4KyspIHtcbiAgICAgICAgY3JvcHBlZEFycmF5LnB1c2goaW1hZ2UuZGF0YVtmaXJzdEJ5dGVJZHhJblBpeGVsQmxvY2sgKyBieXRlSWR4XSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaW1hZ2UuZGF0YSA9IEJ1ZmZlci5mcm9tKGNyb3BwZWRBcnJheSk7XG4gIGltYWdlLndpZHRoID0gaW50ZXJSZWN0LndpZHRoO1xuICBpbWFnZS5oZWlnaHQgPSBpbnRlclJlY3QuaGVpZ2h0O1xuICByZXR1cm4gaW1hZ2U7XG59XG5cbmZ1bmN0aW9uIGdldFJlY3RJbnRlcnNlY3Rpb24gKHJlY3QsIGltYWdlU2l6ZSkge1xuICBjb25zdCBsZWZ0ID0gcmVjdC5sZWZ0ID49IGltYWdlU2l6ZS53aWR0aCA/IGltYWdlU2l6ZS53aWR0aCA6IHJlY3QubGVmdDtcbiAgY29uc3QgdG9wID0gcmVjdC50b3AgPj0gaW1hZ2VTaXplLmhlaWdodCA/IGltYWdlU2l6ZS5oZWlnaHQgOiByZWN0LnRvcDtcbiAgY29uc3Qgd2lkdGggPSBpbWFnZVNpemUud2lkdGggPj0gKGxlZnQgKyByZWN0LndpZHRoKSA/IHJlY3Qud2lkdGggOiAoaW1hZ2VTaXplLndpZHRoIC0gbGVmdCk7XG4gIGNvbnN0IGhlaWdodCA9IGltYWdlU2l6ZS5oZWlnaHQgPj0gKHRvcCArIHJlY3QuaGVpZ2h0KSA/IHJlY3QuaGVpZ2h0IDogKGltYWdlU2l6ZS5oZWlnaHQgLSB0b3ApO1xuICByZXR1cm4ge2xlZnQsIHRvcCwgd2lkdGgsIGhlaWdodH07XG59XG5cbmV4cG9ydCB7XG4gIGNyb3BCYXNlNjRJbWFnZSwgYmFzZTY0VG9JbWFnZSwgaW1hZ2VUb0Jhc2U2NCwgY3JvcEltYWdlLFxuICBnZXRKaW1wSW1hZ2UsIE1JTUVfSlBFRywgTUlNRV9QTkcsIE1JTUVfQk1QXG59O1xuIl19
|
package/build/lib/index.js
CHANGED
|
@@ -3,7 +3,14 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.node = exports.net = exports.mkdirp = exports.mjpeg = exports.logger = exports.imageUtil = exports.fs = exports.env = exports.default = exports.cancellableDelay = void 0;
|
|
7
|
+
Object.defineProperty(exports, "npm", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: function () {
|
|
10
|
+
return _npm.npm;
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
exports.zip = exports.util = exports.timing = exports.tempDir = exports.system = exports.process = exports.plist = void 0;
|
|
7
14
|
|
|
8
15
|
require("source-map-support/register");
|
|
9
16
|
|
|
@@ -59,6 +66,12 @@ var timing = _interopRequireWildcard(require("./timing"));
|
|
|
59
66
|
|
|
60
67
|
exports.timing = timing;
|
|
61
68
|
|
|
69
|
+
var env = _interopRequireWildcard(require("./env"));
|
|
70
|
+
|
|
71
|
+
exports.env = env;
|
|
72
|
+
|
|
73
|
+
var _npm = require("./npm");
|
|
74
|
+
|
|
62
75
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
63
76
|
|
|
64
77
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
@@ -90,9 +103,8 @@ var _default = {
|
|
|
90
103
|
net,
|
|
91
104
|
mjpeg,
|
|
92
105
|
node,
|
|
93
|
-
timing
|
|
106
|
+
timing,
|
|
107
|
+
env
|
|
94
108
|
};
|
|
95
|
-
exports.default = _default;
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9pbmRleC5qcyJdLCJuYW1lcyI6WyJmcyIsImZzSW5kZXgiLCJjYW5jZWxsYWJsZURlbGF5IiwidXRpbCIsIm1rZGlycCIsIm1rZGlycEluZGV4IiwidGVtcERpciIsInN5c3RlbSIsInBsaXN0IiwibG9nZ2VyIiwicHJvY2VzcyIsInppcCIsImltYWdlVXRpbCIsIm5ldCIsIm1qcGVnIiwibm9kZSIsInRpbWluZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7OztBQUdBLE1BQU07QUFBRUEsRUFBQUE7QUFBRixJQUFTQyxPQUFmOztBQUNBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUF1QkMsSUFBN0I7O0FBQ0EsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQWFDLFdBQW5COztlQU1lO0FBQ2JDLEVBQUFBLE9BRGE7QUFDSkMsRUFBQUEsTUFESTtBQUNJSixFQUFBQSxJQURKO0FBQ1VILEVBQUFBLEVBRFY7QUFDY0UsRUFBQUEsZ0JBRGQ7QUFDZ0NNLEVBQUFBLEtBRGhDO0FBQ3VDSixFQUFBQSxNQUR2QztBQUMrQ0ssRUFBQUEsTUFEL0M7QUFDdURDLEVBQUFBLE9BRHZEO0FBRWJDLEVBQUFBLEdBRmE7QUFFUkMsRUFBQUEsU0FGUTtBQUVHQyxFQUFBQSxHQUZIO0FBRVFDLEVBQUFBLEtBRlI7QUFFZUMsRUFBQUEsSUFGZjtBQUVxQkMsRUFBQUE7QUFGckIsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHRlbXBEaXIgZnJvbSAnLi90ZW1wZGlyJztcbmltcG9ydCAqIGFzIHN5c3RlbSBmcm9tICcuL3N5c3RlbSc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgKiBhcyBmc0luZGV4IGZyb20gJy4vZnMnO1xuaW1wb3J0ICogYXMgbmV0IGZyb20gJy4vbmV0JztcbmltcG9ydCAqIGFzIHBsaXN0IGZyb20gJy4vcGxpc3QnO1xuaW1wb3J0ICogYXMgbWtkaXJwSW5kZXggZnJvbSAnLi9ta2RpcnAnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4vbG9nZ2luZyc7XG5pbXBvcnQgKiBhcyBwcm9jZXNzIGZyb20gJy4vcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyB6aXAgZnJvbSAnLi96aXAnO1xuaW1wb3J0ICogYXMgaW1hZ2VVdGlsIGZyb20gJy4vaW1hZ2UtdXRpbCc7XG5pbXBvcnQgKiBhcyBtanBlZyBmcm9tICcuL21qcGVnJztcbmltcG9ydCAqIGFzIG5vZGUgZnJvbSAnLi9ub2RlJztcbmltcG9ydCAqIGFzIHRpbWluZyBmcm9tICcuL3RpbWluZyc7XG5cblxuY29uc3QgeyBmcyB9ID0gZnNJbmRleDtcbmNvbnN0IHsgY2FuY2VsbGFibGVEZWxheSB9ID0gdXRpbDtcbmNvbnN0IHsgbWtkaXJwIH0gPSBta2RpcnBJbmRleDtcblxuZXhwb3J0IHtcbiAgdGVtcERpciwgc3lzdGVtLCB1dGlsLCBmcywgY2FuY2VsbGFibGVEZWxheSwgcGxpc3QsIG1rZGlycCwgbG9nZ2VyLCBwcm9jZXNzLFxuICB6aXAsIGltYWdlVXRpbCwgbmV0LCBtanBlZywgbm9kZSwgdGltaW5nLFxufTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgdGVtcERpciwgc3lzdGVtLCB1dGlsLCBmcywgY2FuY2VsbGFibGVEZWxheSwgcGxpc3QsIG1rZGlycCwgbG9nZ2VyLCBwcm9jZXNzLFxuICB6aXAsIGltYWdlVXRpbCwgbmV0LCBtanBlZywgbm9kZSwgdGltaW5nLFxufTtcbiJdLCJmaWxlIjoibGliL2luZGV4LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
109
|
+
exports.default = _default;
|
|
110
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9pbmRleC5qcyJdLCJuYW1lcyI6WyJmcyIsImZzSW5kZXgiLCJjYW5jZWxsYWJsZURlbGF5IiwidXRpbCIsIm1rZGlycCIsIm1rZGlycEluZGV4IiwidGVtcERpciIsInN5c3RlbSIsInBsaXN0IiwibG9nZ2VyIiwicHJvY2VzcyIsInppcCIsImltYWdlVXRpbCIsIm5ldCIsIm1qcGVnIiwibm9kZSIsInRpbWluZyIsImVudiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBRUE7Ozs7OztBQUVBLE1BQU07QUFBRUEsRUFBQUE7QUFBRixJQUFTQyxPQUFmOztBQUNBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUF1QkMsSUFBN0I7O0FBS0EsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQWFDLFdBQW5COztlQU1lO0FBQ2JDLEVBQUFBLE9BRGE7QUFDSkMsRUFBQUEsTUFESTtBQUNJSixFQUFBQSxJQURKO0FBQ1VILEVBQUFBLEVBRFY7QUFDY0UsRUFBQUEsZ0JBRGQ7QUFDZ0NNLEVBQUFBLEtBRGhDO0FBQ3VDSixFQUFBQSxNQUR2QztBQUMrQ0ssRUFBQUEsTUFEL0M7QUFDdURDLEVBQUFBLE9BRHZEO0FBRWJDLEVBQUFBLEdBRmE7QUFFUkMsRUFBQUEsU0FGUTtBQUVHQyxFQUFBQSxHQUZIO0FBRVFDLEVBQUFBLEtBRlI7QUFFZUMsRUFBQUEsSUFGZjtBQUVxQkMsRUFBQUEsTUFGckI7QUFFNkJDLEVBQUFBO0FBRjdCLEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB0ZW1wRGlyIGZyb20gJy4vdGVtcGRpcic7XG5pbXBvcnQgKiBhcyBzeXN0ZW0gZnJvbSAnLi9zeXN0ZW0nO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuL3V0aWwnO1xuaW1wb3J0ICogYXMgZnNJbmRleCBmcm9tICcuL2ZzJztcbmltcG9ydCAqIGFzIG5ldCBmcm9tICcuL25ldCc7XG5pbXBvcnQgKiBhcyBwbGlzdCBmcm9tICcuL3BsaXN0JztcbmltcG9ydCAqIGFzIG1rZGlycEluZGV4IGZyb20gJy4vbWtkaXJwJztcbmltcG9ydCAqIGFzIGxvZ2dlciBmcm9tICcuL2xvZ2dpbmcnO1xuaW1wb3J0ICogYXMgcHJvY2VzcyBmcm9tICcuL3Byb2Nlc3MnO1xuaW1wb3J0ICogYXMgemlwIGZyb20gJy4vemlwJztcbmltcG9ydCAqIGFzIGltYWdlVXRpbCBmcm9tICcuL2ltYWdlLXV0aWwnO1xuaW1wb3J0ICogYXMgbWpwZWcgZnJvbSAnLi9tanBlZyc7XG5pbXBvcnQgKiBhcyBub2RlIGZyb20gJy4vbm9kZSc7XG5pbXBvcnQgKiBhcyB0aW1pbmcgZnJvbSAnLi90aW1pbmcnO1xuaW1wb3J0ICogYXMgZW52IGZyb20gJy4vZW52JztcblxuZXhwb3J0IHsgbnBtIH0gZnJvbSAnLi9ucG0nO1xuXG5jb25zdCB7IGZzIH0gPSBmc0luZGV4O1xuY29uc3QgeyBjYW5jZWxsYWJsZURlbGF5IH0gPSB1dGlsO1xuLyoqXG4gKiBBbGlhcyBmb3IgYGZzLm1rZGlyKGRpciwge3JlY3Vyc2l2ZTogdHJ1ZX1gKS4gVXNlIGBmcy5ta2RpcnBgIGluc3RlYWQuXG4gKiBAZGVwcmVjYXRlZFxuICovXG5jb25zdCB7IG1rZGlycCB9ID0gbWtkaXJwSW5kZXg7XG5cbmV4cG9ydCB7XG4gIHRlbXBEaXIsIHN5c3RlbSwgdXRpbCwgZnMsIGNhbmNlbGxhYmxlRGVsYXksIHBsaXN0LCBta2RpcnAsIGxvZ2dlciwgcHJvY2VzcyxcbiAgemlwLCBpbWFnZVV0aWwsIG5ldCwgbWpwZWcsIG5vZGUsIHRpbWluZywgZW52XG59O1xuZXhwb3J0IGRlZmF1bHQge1xuICB0ZW1wRGlyLCBzeXN0ZW0sIHV0aWwsIGZzLCBjYW5jZWxsYWJsZURlbGF5LCBwbGlzdCwgbWtkaXJwLCBsb2dnZXIsIHByb2Nlc3MsXG4gIHppcCwgaW1hZ2VVdGlsLCBuZXQsIG1qcGVnLCBub2RlLCB0aW1pbmcsIGVudlxufTtcbiJdfQ==
|
|
@@ -140,7 +140,5 @@ exports.SecureValuesPreprocessor = SecureValuesPreprocessor;
|
|
|
140
140
|
const SECURE_VALUES_PREPROCESSOR = new SecureValuesPreprocessor();
|
|
141
141
|
exports.SECURE_VALUES_PREPROCESSOR = SECURE_VALUES_PREPROCESSOR;
|
|
142
142
|
var _default = SECURE_VALUES_PREPROCESSOR;
|
|
143
|
-
exports.default = _default;
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9sb2ctaW50ZXJuYWwuanMiXSwibmFtZXMiOlsiREVGQVVMVF9SRVBMQUNFUiIsIlNlY3VyZVZhbHVlc1ByZXByb2Nlc3NvciIsImNvbnN0cnVjdG9yIiwiX3J1bGVzIiwicnVsZXMiLCJwYXJzZVJ1bGUiLCJydWxlIiwicmFpc2VFcnJvciIsIm1zZyIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsInBhdHRlcm4iLCJyZXBsYWNlciIsImZsYWdzIiwiXyIsImlzU3RyaW5nIiwibGVuZ3RoIiwiZXNjYXBlUmVnRXhwIiwiaXNQbGFpbk9iamVjdCIsImhhcyIsInRleHQiLCJmbGFnIiwiaW5jbHVkZXMiLCJwdXNoIiwidW5pcSIsIlJlZ0V4cCIsImpvaW4iLCJlIiwibWVzc2FnZSIsImxvYWRSdWxlcyIsInNvdXJjZSIsImlzQXJyYXkiLCJmcyIsImV4aXN0cyIsInBhcnNlIiwicmVhZEZpbGUiLCJpc3N1ZXMiLCJwcmVwcm9jZXNzIiwic3RyIiwicmVzdWx0IiwicmVwbGFjZSIsIlNFQ1VSRV9WQUxVRVNfUFJFUFJPQ0VTU09SIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUVBLE1BQU1BLGdCQUFnQixHQUFHLFlBQXpCOztBQVNBLE1BQU1DLHdCQUFOLENBQStCO0FBQzdCQyxFQUFBQSxXQUFXLEdBQUk7QUFDYixTQUFLQyxNQUFMLEdBQWMsRUFBZDtBQUNEOztBQU1RLE1BQUxDLEtBQUssR0FBSTtBQUNYLFdBQU8sS0FBS0QsTUFBWjtBQUNEOztBQXVCREUsRUFBQUEsU0FBUyxDQUFFQyxJQUFGLEVBQVE7QUFDZixVQUFNQyxVQUFVLEdBQUlDLEdBQUQsSUFBUztBQUMxQixZQUFNLElBQUlDLEtBQUosQ0FBVyxHQUFFQyxJQUFJLENBQUNDLFNBQUwsQ0FBZUwsSUFBZixDQUFxQixPQUFNRSxHQUFJLEVBQTVDLENBQU47QUFDRCxLQUZEOztBQUlBLFFBQUlJLE9BQUo7QUFDQSxRQUFJQyxRQUFRLEdBQUdiLGdCQUFmO0FB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LEVBQWdDO0FBQzlCcUMsTUFBQUEsTUFBTSxHQUFHQSxNQUFNLENBQUNDLE9BQVAsQ0FBZW5DLElBQUksQ0FBQ00sT0FBcEIsRUFBNkJOLElBQUksQ0FBQ08sUUFBbEMsQ0FBVDtBQUNEOztBQUNELFdBQU8yQixNQUFQO0FBQ0Q7O0FBcEo0Qjs7O0FBdUovQixNQUFNRSwwQkFBMEIsR0FBRyxJQUFJekMsd0JBQUosRUFBbkM7O2VBR2V5QywwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICcuL2ZzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmNvbnN0IERFRkFVTFRfUkVQTEFDRVIgPSAnKipTRUNVUkUqKic7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2VjdXJlVmFsdWVQcmVwcm9jZXNzaW5nUnVsZVxuICogQHByb3BlcnR5IHtSZWdFeHB9IHBhdHRlcm4gVGhlIHBhcnNlZCBwYXR0ZXJuIHdoaWNoIGlzIGdvaW5nIHRvIGJlIHVzZWQgZm9yIHJlcGxhY2VtZW50XG4gKiBAcHJvcGVydHkge3N0cmluZ30gcmVwbGFjZXIgW0RFRkFVTFRfU0VDVVJFX1JFUExBQ0VSXSBUaGUgcmVwbGFjZXIgdmFsdWUgdG8gdXNlLiBCeSBkZWZhdWx0XG4gKiBlcXVhbHMgdG8gYERFRkFVTFRfU0VDVVJFX1JFUExBQ0VSYFxuICovXG5cbmNsYXNzIFNlY3VyZVZhbHVlc1ByZXByb2Nlc3NvciB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLl9ydWxlcyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtBcnJheTxTZWN1cmVWYWx1ZVByZXByb2Nlc3NpbmdSdWxlPn0gVGhlIGxpc3Qgb2Ygc3VjY2Vzc2Z1bGx5XG4gICAqIHBhcnNlZCBwcmVwcm9jZXNzaW5nIHJ1bGVzXG4gICAqL1xuICBnZXQgcnVsZXMgKCkge1xuICAgIHJldHVybiB0aGlzLl9ydWxlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBSdWxlXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXR0ZXJuIEEgdmFsaWQgUmVnRXhwIHBhdHRlcm4gdG8gYmUgcmVwbGFjZWRcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHRleHQgQSB0ZXh0IG1hdGNoIHRvIHJlcGxhY2UuIEVpdGhlciB0aGlzIHByb3BlcnR5IG9yIHRoZVxuICAgKiBhYm92ZSBvbmUgbXVzdCBiZSBwcm92aWRlZC4gYHBhdHRlcm5gIGhhcyBwcmlvcml0eSBvdmVyIGB0ZXh0YCBpZiBib3RoIGFyZSBwcm92aWRlZC5cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGZsYWdzIFsnZyddIFJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFncyBmb3IgdGhlIGdpdmVuIHBhdHRlcm4uXG4gICAqIFN1cHBvcnRlZCBmbGFnIGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlIHN0YW5kYXJkIEphdmFTY3JpcHQgUmVnRXhwIGNvbnN0cnVjdG9yOlxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L0d1aWRlL1JlZ3VsYXJfRXhwcmVzc2lvbnMjQWR2YW5jZWRfc2VhcmNoaW5nX3dpdGhfZmxhZ3NfMlxuICAgKiBUaGUgJ2cnIChnbG9iYWwgbWF0Y2hpbmcpIGlzIGFsd2F5cyBlbmFibGVkIHRob3VnaC5cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHJlcGxhY2VyIFtERUZBVUxUX1NFQ1VSRV9SRVBMQUNFUl0gVGhlIHJlcGxhY2VyIHZhbHVlIHRvIHVzZS4gQnkgZGVmYXVsdFxuICAgKiBlcXVhbHMgdG8gYERFRkFVTFRfU0VDVVJFX1JFUExBQ0VSYFxuICAgKi9cblxuICAvKipcbiAgICogUGFyc2VzIHNpbmdsZSBydWxlIGZyb20gdGhlIGdpdmVuIEpTT04gZmlsZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xSdWxlfSBydWxlIFRoZSBydWxlIG1pZ2h0IGVpdGhlciBiZSByZXByZXNlbnRlZCBhcyBhIHNpbmdsZSBzdHJpbmdcbiAgICogb3IgYSBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHBhcnNpbmcgdGhlIHJ1bGVcbiAgICogQHJldHVybnMge1NlY3VyZVZhbHVlUHJlcHJvY2Vzc2luZ1J1bGV9IFRoZSBwYXJzZWQgcnVsZVxuICAgKi9cbiAgcGFyc2VSdWxlIChydWxlKSB7XG4gICAgY29uc3QgcmFpc2VFcnJvciA9IChtc2cpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtKU09OLnN0cmluZ2lmeShydWxlKX0gLT4gJHttc2d9YCk7XG4gICAgfTtcblxuICAgIGxldCBwYXR0ZXJuO1xuICAgIGxldCByZXBsYWNlciA9IERFRkFVTFRfUkVQTEFDRVI7XG4gICAgbGV0IGZsYWdzID0gWydnJ107XG4gICAgaWYgKF8uaXNTdHJpbmcocnVsZSkpIHtcbiAgICAgIGlmIChydWxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByYWlzZUVycm9yKCdUaGUgdmFsdWUgbXVzdCBub3QgYmUgZW1wdHknKTtcbiAgICAgIH1cbiAgICAgIHBhdHRlcm4gPSBgXFxcXGIke18uZXNjYXBlUmVnRXhwKHJ1bGUpfVxcXFxiYDtcbiAgICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChydWxlKSkge1xuICAgICAgaWYgKF8uaGFzKHJ1bGUsICdwYXR0ZXJuJykpIHtcbiAgICAgICAgaWYgKCFfLmlzU3RyaW5nKHJ1bGUucGF0dGVybikgfHwgcnVsZS5wYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJhaXNlRXJyb3IoYFRoZSB2YWx1ZSBvZiAncGF0dGVybicgbXVzdCBiZSBhIHZhbGlkIG5vbi1lbXB0eSBzdHJpbmdgKTtcbiAgICAgICAgfVxuICAgICAgICBwYXR0ZXJuID0gcnVsZS5wYXR0ZXJuO1xuICAgICAgfSBlbHNlIGlmIChfLmhhcyhydWxlLCAndGV4dCcpKSB7XG4gICAgICAgIGlmICghXy5pc1N0cmluZyhydWxlLnRleHQpIHx8IHJ1bGUudGV4dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByYWlzZUVycm9yKGBUaGUgdmFsdWUgb2YgJ3RleHQnIG11c3QgYmUgYSB2YWxpZCBub24tZW1wdHkgc3RyaW5nYCk7XG4gICAgICAgIH1cbiAgICAgICAgcGF0dGVybiA9IGBcXFxcYiR7Xy5lc2NhcGVSZWdFeHAocnVsZS50ZXh0KX1cXFxcYmA7XG4gICAgICB9XG4gICAgICBpZiAoIXBhdHRlcm4pIHtcbiAgICAgICAgcmFpc2VFcnJvcihgTXVzdCBlaXRoZXIgaGF2ZSBhIGZpZWxkIG5hbWVkICdwYXR0ZXJuJyBvciAndGV4dCdgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF8uaGFzKHJ1bGUsICdmbGFncycpKSB7XG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvR3VpZGUvUmVndWxhcl9FeHByZXNzaW9ucyNBZHZhbmNlZF9zZWFyY2hpbmdfd2l0aF9mbGFnc18yXG4gICAgICAgIGZvciAoY29uc3QgZmxhZyBvZiBbJ2knLCAnZycsICdtJywgJ3MnLCAndScsICd5J10pIHtcbiAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhydWxlLmZsYWdzLCBmbGFnKSkge1xuICAgICAgICAgICAgZmxhZ3MucHVzaChmbGFnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmxhZ3MgPSBfLnVuaXEoZmxhZ3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXy5pc1N0cmluZyhydWxlLnJlcGxhY2VyKSkge1xuICAgICAgICByZXBsYWNlciA9IHJ1bGUucmVwbGFjZXI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhaXNlRXJyb3IoJ011c3QgZWl0aGVyIGJlIGEgc3RyaW5nIG9yIGFuIG9iamVjdCcpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXR0ZXJuOiBuZXcgUmVnRXhwKHBhdHRlcm4sIGZsYWdzLmpvaW4oJycpKSxcbiAgICAgICAgcmVwbGFjZXIsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJhaXNlRXJyb3IoZS5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgcnVsZXMgZnJvbSB0aGUgZ2l2ZW4gSlNPTiBmaWxlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfFJ1bGVbXT59IHNvdXJjZSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBKU09OIGZpbGUgY29udGFpbmluZyBzZWN1cmVcbiAgICogdmFsdWVzIHJlcGxhY2VtZW50IHJ1bGVzIG9yIHRoZSBydWxlcyB0aGVtc2VsdmVzIHJlcHJlc2VudGVkIGFzIGFuIGFycmF5XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgZm9ybWF0IG9mIHRoZSBzb3VyY2UgZmlsZSBpcyBpbnZhbGlkIG9yXG4gICAqIGl0IGRvZXMgbm90IGV4aXN0XG4gICAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fSBUaGUgbGlzdCBvZiBpc3N1ZXMgZm91bmQgd2hpbGUgcGFyc2luZyBlYWNoIHJ1bGUuXG4gICAqIEFuIGVtcHR5IGxpc3QgaXMgcmV0dXJuZWQgaWYgbm8gcnVsZSBwYXJzaW5nIGlzc3VlcyB3ZXJlIGZvdW5kXG4gICAqL1xuICBhc3luYyBsb2FkUnVsZXMgKHNvdXJjZSkge1xuICAgIGxldCBydWxlcztcbiAgICBpZiAoXy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJ1bGVzID0gc291cmNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzb3VyY2UpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7c291cmNlfScgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGFjY2Vzc2libGVgKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIHJ1bGVzID0gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShzb3VyY2UsICd1dGY4JykpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke3NvdXJjZX0nIG11c3QgYmUgYSB2YWxpZCBKU09OIGZpbGUuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIGlmICghXy5pc0FycmF5KHJ1bGVzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke3NvdXJjZX0nIG11c3QgY29udGFpbiBhIHZhbGlkIEpTT04gYXJyYXlgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpc3N1ZXMgPSBbXTtcbiAgICB0aGlzLl9ydWxlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgcnVsZSBvZiBydWxlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5fcnVsZXMucHVzaCh0aGlzLnBhcnNlUnVsZShydWxlKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlzc3Vlcy5wdXNoKGUubWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpc3N1ZXM7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybXMgc2VjdXJlIHZhbHVlcyByZXBsYWNlbWVudCBpbnNpZGUgdGhlIGdpdmVuIHN0cmluZ1xuICAgKiBhY2NvcmRpbmcgdG8gdGhlIHByZXZpb3VzbHkgbG9hZGVkIHJ1bGVzLiBObyByZXBsYWNlbWVudCBpcyBtYWRlXG4gICAqIGlmIHRoZXJlIGFyZSBubyBydWxlcyBvciB0aGUgZ2l2ZW4gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgVGhlIHN0cmluZyB0byBtYWtlIHJlcGxhY2VtZW50cyBpblxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc3RyaW5nIHdpdGggcmVwbGFjZW1lbnRzIG1hZGVcbiAgICovXG4gIHByZXByb2Nlc3MgKHN0cikge1xuICAgIGlmICh0aGlzLl9ydWxlcy5sZW5ndGggPT09IDAgfHwgIV8uaXNTdHJpbmcoc3RyKSkge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gc3RyO1xuICAgIGZvciAoY29uc3QgcnVsZSBvZiB0aGlzLl9ydWxlcykge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UocnVsZS5wYXR0ZXJuLCBydWxlLnJlcGxhY2VyKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5jb25zdCBTRUNVUkVfVkFMVUVTX1BSRVBST0NFU1NPUiA9IG5ldyBTZWN1cmVWYWx1ZXNQcmVwcm9jZXNzb3IoKTtcblxuZXhwb3J0IHsgU0VDVVJFX1ZBTFVFU19QUkVQUk9DRVNTT1IsIFNlY3VyZVZhbHVlc1ByZXByb2Nlc3NvciB9O1xuZXhwb3J0IGRlZmF1bHQgU0VDVVJFX1ZBTFVFU19QUkVQUk9DRVNTT1I7XG4iXSwiZmlsZSI6ImxpYi9sb2ctaW50ZXJuYWwuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|
|
143
|
+
exports.default = _default;
|
|
144
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9sb2ctaW50ZXJuYWwuanMiXSwibmFtZXMiOlsiREVGQVVMVF9SRVBMQUNFUiIsIlNlY3VyZVZhbHVlc1ByZXByb2Nlc3NvciIsImNvbnN0cnVjdG9yIiwiX3J1bGVzIiwicnVsZXMiLCJwYXJzZVJ1bGUiLCJydWxlIiwicmFpc2VFcnJvciIsIm1zZyIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsInBhdHRlcm4iLCJyZXBsYWNlciIsImZsYWdzIiwiXyIsImlzU3RyaW5nIiwibGVuZ3RoIiwiZXNjYXBlUmVnRXhwIiwiaXNQbGFpbk9iamVjdCIsImhhcyIsInRleHQiLCJmbGFnIiwiaW5jbHVkZXMiLCJwdXNoIiwidW5pcSIsIlJlZ0V4cCIsImpvaW4iLCJlIiwibWVzc2FnZSIsImxvYWRSdWxlcyIsInNvdXJjZSIsImlzQXJyYXkiLCJmcyIsImV4aXN0cyIsInBhcnNlIiwicmVhZEZpbGUiLCJpc3N1ZXMiLCJwcmVwcm9jZXNzIiwic3RyIiwicmVzdWx0IiwicmVwbGFjZSIsIlNFQ1VSRV9WQUxVRVNfUFJFUFJPQ0VTU09SIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUVBLE1BQU1BLGdCQUFnQixHQUFHLFlBQXpCOztBQVNBLE1BQU1DLHdCQUFOLENBQStCO0FBQzdCQyxFQUFBQSxXQUFXLEdBQUk7QUFDYixTQUFLQyxNQUFMLEdBQWMsRUFBZDtBQUNEOztBQU1RLE1BQUxDLEtBQUssR0FBSTtBQUNYLFdBQU8sS0FBS0QsTUFBWjtBQUNEOztBQXVCREUsRUFBQUEsU0FBUyxDQUFFQyxJQUFGLEVBQVE7QUFDZixVQUFNQyxVQUFVLEdBQUlDLEdBQUQsSUFBUztBQUMxQixZQUFNLElBQUlDLEtBQUosQ0FBVyxHQUFFQyxJQUFJLENBQUNDLFNBQUwsQ0FBZUwsSUFBZixDQUFxQixPQUFNRSxHQUFJLEVBQTVDLENBQU47QUFDRCxLQUZEOztBQUlBLFFBQUlJLE9BQUo7QUFDQSxRQUFJQyxRQUFRLEdBQUdiLGdC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LE1BQXhCLEVBQWdDO0FBQzlCcUMsTUFBQUEsTUFBTSxHQUFHQSxNQUFNLENBQUNDLE9BQVAsQ0FBZW5DLElBQUksQ0FBQ00sT0FBcEIsRUFBNkJOLElBQUksQ0FBQ08sUUFBbEMsQ0FBVDtBQUNEOztBQUNELFdBQU8yQixNQUFQO0FBQ0Q7O0FBcEo0Qjs7O0FBdUovQixNQUFNRSwwQkFBMEIsR0FBRyxJQUFJekMsd0JBQUosRUFBbkM7O2VBR2V5QywwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICcuL2ZzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmNvbnN0IERFRkFVTFRfUkVQTEFDRVIgPSAnKipTRUNVUkUqKic7XG5cbi8qKlxuICogQHR5cGVkZWYgU2VjdXJlVmFsdWVQcmVwcm9jZXNzaW5nUnVsZVxuICogQHByb3BlcnR5IHtSZWdFeHB9IHBhdHRlcm4gVGhlIHBhcnNlZCBwYXR0ZXJuIHdoaWNoIGlzIGdvaW5nIHRvIGJlIHVzZWQgZm9yIHJlcGxhY2VtZW50XG4gKiBAcHJvcGVydHkge3N0cmluZ30gcmVwbGFjZXIgW0RFRkFVTFRfU0VDVVJFX1JFUExBQ0VSXSBUaGUgcmVwbGFjZXIgdmFsdWUgdG8gdXNlLiBCeSBkZWZhdWx0XG4gKiBlcXVhbHMgdG8gYERFRkFVTFRfU0VDVVJFX1JFUExBQ0VSYFxuICovXG5cbmNsYXNzIFNlY3VyZVZhbHVlc1ByZXByb2Nlc3NvciB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLl9ydWxlcyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtBcnJheTxTZWN1cmVWYWx1ZVByZXByb2Nlc3NpbmdSdWxlPn0gVGhlIGxpc3Qgb2Ygc3VjY2Vzc2Z1bGx5XG4gICAqIHBhcnNlZCBwcmVwcm9jZXNzaW5nIHJ1bGVzXG4gICAqL1xuICBnZXQgcnVsZXMgKCkge1xuICAgIHJldHVybiB0aGlzLl9ydWxlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiBSdWxlXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXR0ZXJuIEEgdmFsaWQgUmVnRXhwIHBhdHRlcm4gdG8gYmUgcmVwbGFjZWRcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHRleHQgQSB0ZXh0IG1hdGNoIHRvIHJlcGxhY2UuIEVpdGhlciB0aGlzIHByb3BlcnR5IG9yIHRoZVxuICAgKiBhYm92ZSBvbmUgbXVzdCBiZSBwcm92aWRlZC4gYHBhdHRlcm5gIGhhcyBwcmlvcml0eSBvdmVyIGB0ZXh0YCBpZiBib3RoIGFyZSBwcm92aWRlZC5cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGZsYWdzIFsnZyddIFJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFncyBmb3IgdGhlIGdpdmVuIHBhdHRlcm4uXG4gICAqIFN1cHBvcnRlZCBmbGFnIGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlIHN0YW5kYXJkIEphdmFTY3JpcHQgUmVnRXhwIGNvbnN0cnVjdG9yOlxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L0d1aWRlL1JlZ3VsYXJfRXhwcmVzc2lvbnMjQWR2YW5jZWRfc2VhcmNoaW5nX3dpdGhfZmxhZ3NfMlxuICAgKiBUaGUgJ2cnIChnbG9iYWwgbWF0Y2hpbmcpIGlzIGFsd2F5cyBlbmFibGVkIHRob3VnaC5cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHJlcGxhY2VyIFtERUZBVUxUX1NFQ1VSRV9SRVBMQUNFUl0gVGhlIHJlcGxhY2VyIHZhbHVlIHRvIHVzZS4gQnkgZGVmYXVsdFxuICAgKiBlcXVhbHMgdG8gYERFRkFVTFRfU0VDVVJFX1JFUExBQ0VSYFxuICAgKi9cblxuICAvKipcbiAgICogUGFyc2VzIHNpbmdsZSBydWxlIGZyb20gdGhlIGdpdmVuIEpTT04gZmlsZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xSdWxlfSBydWxlIFRoZSBydWxlIG1pZ2h0IGVpdGhlciBiZSByZXByZXNlbnRlZCBhcyBhIHNpbmdsZSBzdHJpbmdcbiAgICogb3IgYSBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHBhcnNpbmcgdGhlIHJ1bGVcbiAgICogQHJldHVybnMge1NlY3VyZVZhbHVlUHJlcHJvY2Vzc2luZ1J1bGV9IFRoZSBwYXJzZWQgcnVsZVxuICAgKi9cbiAgcGFyc2VSdWxlIChydWxlKSB7XG4gICAgY29uc3QgcmFpc2VFcnJvciA9IChtc2cpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtKU09OLnN0cmluZ2lmeShydWxlKX0gLT4gJHttc2d9YCk7XG4gICAgfTtcblxuICAgIGxldCBwYXR0ZXJuO1xuICAgIGxldCByZXBsYWNlciA9IERFRkFVTFRfUkVQTEFDRVI7XG4gICAgbGV0IGZsYWdzID0gWydnJ107XG4gICAgaWYgKF8uaXNTdHJpbmcocnVsZSkpIHtcbiAgICAgIGlmIChydWxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByYWlzZUVycm9yKCdUaGUgdmFsdWUgbXVzdCBub3QgYmUgZW1wdHknKTtcbiAgICAgIH1cbiAgICAgIHBhdHRlcm4gPSBgXFxcXGIke18uZXNjYXBlUmVnRXhwKHJ1bGUpfVxcXFxiYDtcbiAgICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChydWxlKSkge1xuICAgICAgaWYgKF8uaGFzKHJ1bGUsICdwYXR0ZXJuJykpIHtcbiAgICAgICAgaWYgKCFfLmlzU3RyaW5nKHJ1bGUucGF0dGVybikgfHwgcnVsZS5wYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJhaXNlRXJyb3IoYFRoZSB2YWx1ZSBvZiAncGF0dGVybicgbXVzdCBiZSBhIHZhbGlkIG5vbi1lbXB0eSBzdHJpbmdgKTtcbiAgICAgICAgfVxuICAgICAgICBwYXR0ZXJuID0gcnVsZS5wYXR0ZXJuO1xuICAgICAgfSBlbHNlIGlmIChfLmhhcyhydWxlLCAndGV4dCcpKSB7XG4gICAgICAgIGlmICghXy5pc1N0cmluZyhydWxlLnRleHQpIHx8IHJ1bGUudGV4dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByYWlzZUVycm9yKGBUaGUgdmFsdWUgb2YgJ3RleHQnIG11c3QgYmUgYSB2YWxpZCBub24tZW1wdHkgc3RyaW5nYCk7XG4gICAgICAgIH1cbiAgICAgICAgcGF0dGVybiA9IGBcXFxcYiR7Xy5lc2NhcGVSZWdFeHAocnVsZS50ZXh0KX1cXFxcYmA7XG4gICAgICB9XG4gICAgICBpZiAoIXBhdHRlcm4pIHtcbiAgICAgICAgcmFpc2VFcnJvcihgTXVzdCBlaXRoZXIgaGF2ZSBhIGZpZWxkIG5hbWVkICdwYXR0ZXJuJyBvciAndGV4dCdgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF8uaGFzKHJ1bGUsICdmbGFncycpKSB7XG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvR3VpZGUvUmVndWxhcl9FeHByZXNzaW9ucyNBZHZhbmNlZF9zZWFyY2hpbmdfd2l0aF9mbGFnc18yXG4gICAgICAgIGZvciAoY29uc3QgZmxhZyBvZiBbJ2knLCAnZycsICdtJywgJ3MnLCAndScsICd5J10pIHtcbiAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhydWxlLmZsYWdzLCBmbGFnKSkge1xuICAgICAgICAgICAgZmxhZ3MucHVzaChmbGFnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmxhZ3MgPSBfLnVuaXEoZmxhZ3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXy5pc1N0cmluZyhydWxlLnJlcGxhY2VyKSkge1xuICAgICAgICByZXBsYWNlciA9IHJ1bGUucmVwbGFjZXI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhaXNlRXJyb3IoJ011c3QgZWl0aGVyIGJlIGEgc3RyaW5nIG9yIGFuIG9iamVjdCcpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXR0ZXJuOiBuZXcgUmVnRXhwKHBhdHRlcm4sIGZsYWdzLmpvaW4oJycpKSxcbiAgICAgICAgcmVwbGFjZXIsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJhaXNlRXJyb3IoZS5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgcnVsZXMgZnJvbSB0aGUgZ2l2ZW4gSlNPTiBmaWxlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfFJ1bGVbXT59IHNvdXJjZSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBKU09OIGZpbGUgY29udGFpbmluZyBzZWN1cmVcbiAgICogdmFsdWVzIHJlcGxhY2VtZW50IHJ1bGVzIG9yIHRoZSBydWxlcyB0aGVtc2VsdmVzIHJlcHJlc2VudGVkIGFzIGFuIGFycmF5XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgZm9ybWF0IG9mIHRoZSBzb3VyY2UgZmlsZSBpcyBpbnZhbGlkIG9yXG4gICAqIGl0IGRvZXMgbm90IGV4aXN0XG4gICAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fSBUaGUgbGlzdCBvZiBpc3N1ZXMgZm91bmQgd2hpbGUgcGFyc2luZyBlYWNoIHJ1bGUuXG4gICAqIEFuIGVtcHR5IGxpc3QgaXMgcmV0dXJuZWQgaWYgbm8gcnVsZSBwYXJzaW5nIGlzc3VlcyB3ZXJlIGZvdW5kXG4gICAqL1xuICBhc3luYyBsb2FkUnVsZXMgKHNvdXJjZSkge1xuICAgIGxldCBydWxlcztcbiAgICBpZiAoXy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJ1bGVzID0gc291cmNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzb3VyY2UpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7c291cmNlfScgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGFjY2Vzc2libGVgKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIHJ1bGVzID0gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShzb3VyY2UsICd1dGY4JykpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke3NvdXJjZX0nIG11c3QgYmUgYSB2YWxpZCBKU09OIGZpbGUuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIGlmICghXy5pc0FycmF5KHJ1bGVzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke3NvdXJjZX0nIG11c3QgY29udGFpbiBhIHZhbGlkIEpTT04gYXJyYXlgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpc3N1ZXMgPSBbXTtcbiAgICB0aGlzLl9ydWxlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgcnVsZSBvZiBydWxlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5fcnVsZXMucHVzaCh0aGlzLnBhcnNlUnVsZShydWxlKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlzc3Vlcy5wdXNoKGUubWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpc3N1ZXM7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybXMgc2VjdXJlIHZhbHVlcyByZXBsYWNlbWVudCBpbnNpZGUgdGhlIGdpdmVuIHN0cmluZ1xuICAgKiBhY2NvcmRpbmcgdG8gdGhlIHByZXZpb3VzbHkgbG9hZGVkIHJ1bGVzLiBObyByZXBsYWNlbWVudCBpcyBtYWRlXG4gICAqIGlmIHRoZXJlIGFyZSBubyBydWxlcyBvciB0aGUgZ2l2ZW4gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgVGhlIHN0cmluZyB0byBtYWtlIHJlcGxhY2VtZW50cyBpblxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc3RyaW5nIHdpdGggcmVwbGFjZW1lbnRzIG1hZGVcbiAgICovXG4gIHByZXByb2Nlc3MgKHN0cikge1xuICAgIGlmICh0aGlzLl9ydWxlcy5sZW5ndGggPT09IDAgfHwgIV8uaXNTdHJpbmcoc3RyKSkge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gc3RyO1xuICAgIGZvciAoY29uc3QgcnVsZSBvZiB0aGlzLl9ydWxlcykge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UocnVsZS5wYXR0ZXJuLCBydWxlLnJlcGxhY2VyKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5jb25zdCBTRUNVUkVfVkFMVUVTX1BSRVBST0NFU1NPUiA9IG5ldyBTZWN1cmVWYWx1ZXNQcmVwcm9jZXNzb3IoKTtcblxuZXhwb3J0IHsgU0VDVVJFX1ZBTFVFU19QUkVQUk9DRVNTT1IsIFNlY3VyZVZhbHVlc1ByZXByb2Nlc3NvciB9O1xuZXhwb3J0IGRlZmF1bHQgU0VDVVJFX1ZBTFVFU19QUkVQUk9DRVNTT1I7XG4iXX0=
|