@igo2/geo 1.13.4 → 1.14.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/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +4 -1
- package/esm2020/lib/catalog/shared/catalog.abstract.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
- package/esm2020/lib/draw/draw/draw-popup.component.mjs +562 -32
- package/esm2020/lib/draw/draw/draw.component.mjs +360 -130
- package/esm2020/lib/draw/draw/draw.module.mjs +12 -4
- package/esm2020/lib/draw/shared/draw-style.service.mjs +2 -2
- package/esm2020/lib/draw/shared/draw.enum.mjs +14 -1
- package/esm2020/lib/draw/shared/draw.interface.mjs +1 -1
- package/esm2020/lib/draw/shared/draw.utils.mjs +19 -1
- package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +43 -16
- package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +21 -8
- package/esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +12 -2
- package/esm2020/lib/geometry/shared/controls/draw.mjs +53 -10
- package/esm2020/lib/import-export/shared/export.service.mjs +2 -2
- package/esm2020/lib/import-export/shared/import.interface.mjs +1 -1
- package/esm2020/lib/import-export/shared/import.service.mjs +26 -6
- package/esm2020/lib/layer/shared/layers/layer.interface.mjs +1 -1
- package/esm2020/lib/map/shared/hover-feature.directive.mjs +2 -2
- package/esm2020/lib/map/shared/map.utils.mjs +4 -1
- package/esm2020/lib/map/shared/mapOffline.directive.mjs +7 -7
- package/esm2020/lib/offline/geoDB/configFileToGeoDB.service.mjs +33 -4
- package/esm2020/lib/offline/geoDB/geoDB.interface.mjs +1 -1
- package/esm2020/lib/offline/geoDB/geoDB.service.mjs +12 -12
- package/esm2020/lib/print/shared/geopdf.mjs +58 -0
- package/esm2020/lib/print/shared/index.mjs +2 -1
- package/esm2020/lib/print/shared/print.interface.mjs +1 -1
- package/esm2020/lib/print/shared/print.service.mjs +118 -64
- package/esm2020/lib/query/shared/query.service.mjs +7 -4
- package/esm2020/lib/search/search-bar/search-bar.component.mjs +30 -28
- package/esm2020/lib/search/search-results/search-results.component.mjs +22 -13
- package/esm2020/lib/search/shared/search.utils.mjs +2 -1
- package/esm2020/lib/search/shared/sources/icherche.mjs +70 -58
- package/esm2020/lib/search/shared/sources/index.mjs +1 -3
- package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +20 -9
- package/fesm2015/igo2-geo.mjs +1505 -529
- package/fesm2015/igo2-geo.mjs.map +1 -1
- package/fesm2020/igo2-geo.mjs +1456 -525
- package/fesm2020/igo2-geo.mjs.map +1 -1
- package/lib/catalog/shared/catalog.abstract.d.ts +1 -0
- package/lib/datasource/shared/datasources/datasource.interface.d.ts +1 -0
- package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +1 -0
- package/lib/draw/draw/draw-popup.component.d.ts +52 -5
- package/lib/draw/draw/draw.component.d.ts +34 -4
- package/lib/draw/draw/draw.module.d.ts +3 -1
- package/lib/draw/shared/draw.enum.d.ts +11 -0
- package/lib/draw/shared/draw.interface.d.ts +4 -0
- package/lib/draw/shared/draw.utils.d.ts +2 -0
- package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +3 -1
- package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +2 -1
- package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +7 -1
- package/lib/geometry/shared/controls/draw.d.ts +18 -0
- package/lib/import-export/shared/import.interface.d.ts +2 -1
- package/lib/import-export/shared/import.service.d.ts +7 -0
- package/lib/layer/shared/layers/layer.interface.d.ts +4 -0
- package/lib/map/shared/map.utils.d.ts +1 -0
- package/lib/offline/geoDB/configFileToGeoDB.service.d.ts +1 -0
- package/lib/offline/geoDB/geoDB.interface.d.ts +1 -0
- package/lib/offline/geoDB/geoDB.service.d.ts +3 -3
- package/lib/print/shared/geopdf.d.ts +1 -0
- package/lib/print/shared/index.d.ts +1 -0
- package/lib/print/shared/print.interface.d.ts +5 -0
- package/lib/print/shared/print.service.d.ts +17 -8
- package/lib/search/search-bar/search-bar.component.d.ts +8 -8
- package/lib/search/search-results/search-results.component.d.ts +4 -1
- package/lib/search/shared/sources/index.d.ts +0 -2
- package/lib/workspace/shared/edition-workspace.service.d.ts +4 -0
- package/package.json +4 -4
- package/esm2020/lib/search/shared/sources/cadastre.mjs +0 -126
- package/esm2020/lib/search/shared/sources/cadastre.providers.mjs +0 -23
- package/lib/search/shared/sources/cadastre.d.ts +0 -33
- package/lib/search/shared/sources/cadastre.providers.d.ts +0 -18
|
@@ -227,7 +227,7 @@ export class QueryService {
|
|
|
227
227
|
features = this.extractGML2Data(res, layer, allowedFieldsAndAlias);
|
|
228
228
|
break;
|
|
229
229
|
}
|
|
230
|
-
if (features.length > 0 && features[0].geometry === null) {
|
|
230
|
+
if (features.length > 0 && (features[0].geometry === null || !features[0].geometry)) {
|
|
231
231
|
const geomToAdd = this.createGeometryFromUrlClick(url);
|
|
232
232
|
for (const feature of features) {
|
|
233
233
|
feature.geometry = geomToAdd;
|
|
@@ -238,7 +238,7 @@ export class QueryService {
|
|
|
238
238
|
new RegExp('FEATURE_COUNT=' + this.featureCount) :
|
|
239
239
|
new RegExp('FEATURE_COUNT=' + this.defaultFeatureCount);
|
|
240
240
|
if (featureCount.test(url) &&
|
|
241
|
-
((wmsDatasource.params?.FEATURE_COUNT && features.length === this.featureCount) ||
|
|
241
|
+
((wmsDatasource.params?.FEATURE_COUNT && this.featureCount > 1 && features.length === this.featureCount) ||
|
|
242
242
|
(!wmsDatasource.params?.FEATURE_COUNT && features.length === this.defaultFeatureCount))) {
|
|
243
243
|
this.languageService.translate.get('igo.geo.query.featureCountMax', { value: layer.title }).subscribe(message => {
|
|
244
244
|
const messageObj = this.messageService.info(message);
|
|
@@ -437,6 +437,7 @@ export class QueryService {
|
|
|
437
437
|
delete properties.SHAPE_P;
|
|
438
438
|
delete properties.the_geom;
|
|
439
439
|
delete properties.geom;
|
|
440
|
+
delete properties.geom32198;
|
|
440
441
|
let geometry;
|
|
441
442
|
if (featureGeometry) {
|
|
442
443
|
geometry = {
|
|
@@ -594,7 +595,9 @@ export class QueryService {
|
|
|
594
595
|
*
|
|
595
596
|
*/
|
|
596
597
|
getCustomQueryUrl(datasource, options, mapExtent) {
|
|
597
|
-
|
|
598
|
+
const extent = olextent.getForViewAndSize(options.coordinates, options.resolution, 0, [101, 101]);
|
|
599
|
+
let url = datasource.options.queryUrl.replace(/\{bbox\}/g, extent.join(','))
|
|
600
|
+
.replace(/\{xmin\}/g, mapExtent[0].toString())
|
|
598
601
|
.replace(/\{ymin\}/g, mapExtent[1].toString())
|
|
599
602
|
.replace(/\{xmax\}/g, mapExtent[2].toString())
|
|
600
603
|
.replace(/\{ymax\}/g, mapExtent[3].toString())
|
|
@@ -613,4 +616,4 @@ QueryService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: QueryServic
|
|
|
613
616
|
providedIn: 'root'
|
|
614
617
|
}]
|
|
615
618
|
}], function () { return [{ type: i1.HttpClient }, { type: i2.MessageService }, { type: i2.LanguageService }]; }, null); })();
|
|
616
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL3F1ZXJ5L3NoYXJlZC9xdWVyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxPQUFPLElBQUksU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRWpELE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sWUFBWSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sWUFBWSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sZ0JBQWdCLE1BQU0sb0JBQW9CLENBQUM7QUFFbEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFHbEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFN0QsT0FBTyxFQUNMLGFBQWEsRUFDYixlQUFlLEVBQ2Ysd0JBQXdCLEVBRXhCLHlCQUF5QixFQUMxQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFDTCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLGVBQWUsRUFDaEIsTUFBTSxlQUFlLENBQUM7Ozs7QUFXdkIsTUFBTSxPQUFPLFlBQVk7SUFPdkIsWUFDVSxJQUFnQixFQUNoQixjQUE4QixFQUM5QixlQUFnQztRQUZoQyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLG1CQUFjLEdBQWQsY0FBYyxDQUFn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T0FLRztJQUVILGlCQUFpQixDQUNmLFVBQStCLEVBQy9CLE9BQXFCLEVBQ3JCLFNBQXFCO1FBRW5CLElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ2xGLE9BQU8sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQzdDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQzdDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQzdDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUNwRCxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDcEQsT0FBTyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDekQsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUU5RCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7O3dFQWh2QlEsWUFBWTtrRUFBWixZQUFZLFdBQVosWUFBWSxtQkFGWCxNQUFNO3VGQUVQLFlBQVk7Y0FIeEIsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIG1lcmdlTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBkZWZhdWx0IGFzIHN0cmlwdGFncyB9IGZyb20gJ3N0cmlwdGFncyc7XG5cbmltcG9ydCAqIGFzIG9sZm9ybWF0IGZyb20gJ29sL2Zvcm1hdCc7XG5pbXBvcnQgKiBhcyBvbGV4dGVudCBmcm9tICdvbC9leHRlbnQnO1xuaW1wb3J0IG9sRm9ybWF0R01MMiBmcm9tICdvbC9mb3JtYXQvR01MMic7XG5pbXBvcnQgb2xGb3JtYXRHTUwzIGZyb20gJ29sL2Zvcm1hdC9HTUwzJztcbmltcG9ydCBvbEZvcm1hdEVzcmlKU09OIGZyb20gJ29sL2Zvcm1hdC9Fc3JpSlNPTic7XG5pbXBvcnQgb2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xuaW1wb3J0ICogYXMgb2xnZW9tIGZyb20gJ29sL2dlb20nO1xuXG5pbXBvcnQgeyBMYW5ndWFnZVNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XG5pbXBvcnQgeyB1dWlkIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xuaW1wb3J0IHsgRmVhdHVyZSwgRmVhdHVyZUdlb21ldHJ5IH0gZnJvbSAnLi4vLi4vZmVhdHVyZS9zaGFyZWQvZmVhdHVyZS5pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZFQVRVUkUgfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9mZWF0dXJlLmVudW1zJztcbmltcG9ydCB7IExheWVyIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy9sYXllcic7XG5pbXBvcnQge1xuICBXTVNEYXRhU291cmNlLFxuICBDYXJ0b0RhdGFTb3VyY2UsXG4gIFRpbGVBcmNHSVNSZXN0RGF0YVNvdXJjZSxcbiAgV01TRGF0YVNvdXJjZU9wdGlvbnMsXG4gIEltYWdlQXJjR0lTUmVzdERhdGFTb3VyY2Vcbn0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZSc7XG5cbmltcG9ydCB7XG4gIFF1ZXJ5Rm9ybWF0LFxuICBRdWVyeUZvcm1hdE1pbWVUeXBlLFxuICBRdWVyeUh0bWxUYXJnZXRcbn0gZnJvbSAnLi9xdWVyeS5lbnVtcyc7XG5pbXBvcnQge1xuICBRdWVyeU9wdGlvbnMsXG4gIFF1ZXJ5YWJsZURhdGFTb3VyY2UsXG4gIFF1ZXJ5YWJsZURhdGFTb3VyY2VPcHRpb25zXG59IGZyb20gJy4vcXVlcnkuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNYXBFeHRlbnQgfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkL21hcC5pbnRlcmZhY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBRdWVyeVNlcnZpY2Uge1xuICBwdWJsaWMgcXVlcnlFbmFibGVkID0gdHJ1ZTtcbiAgcHVibGljIGRlZmF1bHRGZWF0dXJlQ291bnQgPSAyMDsgLy8gZGVmYXVsdCBmZWF0dXJlIGNvdW50XG4gIHB1YmxpYyBmZWF0dXJlQ291bnQgPSAyMDsgLy8gZmVhdHVyZSBjb3VudFxuXG4gIHByaXZhdGUgcHJldmlvdXNNZXNzYWdlSWRzID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UpIHt9XG5cbiAgcXVlcnkobGF5ZXJzOiBMYXllcltdLCBvcHRpb25zOiBRdWVyeU9wdGlvbnMpOiBPYnNlcnZhYmxlPEZlYXR1cmVbXT5bXSB7XG4gICAgaWYgKHRoaXMucHJldmlvdXNNZXNzYWdlSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5wcmV2aW91c01lc3NhZ2VJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UucmVtb3ZlKGlkKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGF5ZXJzXG4gICAgICAuZmlsdGVyKChsYXllcjogTGF5ZXIpID0+IGxheWVyLnZpc2libGUgJiYgbGF5ZXIuaXNJblJlc29sdXRpb25zUmFuZ2UpXG4gICAgICAubWFwKChsYXllcjogTGF5ZXIpID0+IHRoaXMucXVlcnlMYXllcihsYXllciwgb3B0aW9ucykpO1xuICB9XG5cbiAgcXVlcnlMYXllcihsYXllcjogTGF5ZXIsIG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyk6IE9ic2VydmFibGU8RmVhdHVyZVtdPiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5nZXRRdWVyeVVybChsYXllci5kYXRhU291cmNlLCBvcHRpb25zLCBmYWxzZSwgbGF5ZXIubWFwLnZpZXdDb250cm9sbGVyLmdldEV4dGVudCgpKTtcbiAgICBpZiAoIXVybCkge1xuICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAobGF5ZXIuZGF0YVNvdXJjZSBhcyBRdWVyeWFibGVEYXRhU291cmNlKS5vcHRpb25zLnF1ZXJ5Rm9ybWF0ID09PVxuICAgICAgUXVlcnlGb3JtYXQuSFRNTEdNTDJcbiAgICApIHtcbiAgICAgIGNvbnN0IHVybEdtbCA9IHRoaXMuZ2V0UXVlcnlVcmwobGF5ZXIuZGF0YVNvdXJjZSwgb3B0aW9ucywgdHJ1ZSk7XG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmxHbWwsIHsgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSkucGlwZShcbiAgICAgICAgbWVyZ2VNYXAoZ21sUmVzID0+IHtcbiAgICAgICAgICBjb25zdCBtZXJnZWRHTUwgPSB0aGlzLm1lcmdlR01MKGdtbFJlcywgdXJsLCBsYXllcik7XG4gICAgICAgICAgY29uc3QgaW1wb3NlZEdlb20gPSBtZXJnZWRHTUxbMF07XG4gICAgICAgICAgY29uc3QgaW1wb3NlZFByb3BlcnRpZXMgPSBtZXJnZWRHTUxbMV07XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgLmdldCh1cmwsIHsgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICBtYXAocmVzID0+XG4gICAgICAgICAgICAgICAgdGhpcy5leHRyYWN0RGF0YShyZXMsIGxheWVyLCBvcHRpb25zLCB1cmwsIGltcG9zZWRHZW9tLCBpbXBvc2VkUHJvcGVydGllcylcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuaHR0cC5nZXQodXJsLCB7IHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pO1xuICAgIHJldHVybiByZXF1ZXN0LnBpcGUobWFwKHJlcyA9PiB0aGlzLmV4dHJhY3REYXRhKHJlcywgbGF5ZXIsIG9wdGlvbnMsIHVybCkpKTtcbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VHTUwoZ21sUmVzLCB1cmwsIGxheWVyOiBMYXllcik6IFtGZWF0dXJlR2VvbWV0cnksIHsgW2tleTogc3RyaW5nXTogYW55IH1dIHtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgb2xGb3JtYXRHTUwyKCk7XG4gICAgbGV0IGZlYXR1cmVzID0gcGFyc2VyLnJlYWRGZWF0dXJlcyhnbWxSZXMpO1xuICAgIC8vIEhhbmRsZSBub24gc3RhbmRhcmQgR01MIG91dHB1dCAoTWFwU2VydmVyKVxuICAgIGlmIChmZWF0dXJlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IHdtc1BhcnNlciA9IG5ldyBvbGZvcm1hdC5XTVNHZXRGZWF0dXJlSW5mbygpO1xuICAgICAgZmVhdHVyZXMgPSB3bXNQYXJzZXIucmVhZEZlYXR1cmVzKGdtbFJlcyk7XG4gICAgfVxuICAgIGNvbnN0IG9sbWxpbmUgPSBuZXcgb2xnZW9tLk11bHRpTGluZVN0cmluZyhbXSk7XG4gICAgbGV0IHB0cztcbiAgICBjb25zdCBwdHNBcnJheSA9IFtdO1xuICAgIGxldCBvbG1wb2x5ID0gbmV3IG9sZ2VvbS5NdWx0aVBvbHlnb24oW10pO1xuICAgIGxldCBmaXJzdEZlYXR1cmVUeXBlO1xuICAgIGNvbnN0IG5iRmVhdHVyZXMgPSBmZWF0dXJlcy5sZW5ndGg7XG5cbiAgICAvLyBDaGVjayBpZiBnZW9tZXRyeSBpbnRlcnNlY3QgYmJveFxuICAgIC8vIGZvciBnZW9zZXJ2ZXIgZ2V0ZmVhdHVyZWluZm8gcmVzcG9uc2UgaW4gZGF0YSBwcm9qZWN0aW9uLCBub3QgY2FsbCBwcm9qZWN0aW9uXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zOiBhbnkgPSB0aGlzLmdldFF1ZXJ5UGFyYW1zKHVybC50b0xvd2VyQ2FzZSgpKTtcbiAgICBjb25zdCBiYm94UmF3ID0gc2VhcmNoUGFyYW1zLmJib3g7XG4gICAgY29uc3QgYmJveCA9IGJib3hSYXcuc3BsaXQoJywnKTtcbiAgICBjb25zdCBiYm94RXh0ZW50ID0gb2xleHRlbnQuY3JlYXRlRW1wdHkoKTtcbiAgICBvbGV4dGVudC5leHRlbmQoYmJveEV4dGVudCwgYmJveCk7XG4gICAgY29uc3Qgb3V0QmJveEV4dGVudCA9IGZhbHNlO1xuICAgIGxldCB0aXRsZUNvbnRlbnQ7XG4gICAgbGV0IHF1ZXJ5VGlsZUZpZWxkO1xuICAgIGlmIChsYXllci5vcHRpb25zPy5zb3VyY2U/Lm9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGRhdGFTb3VyY2VPcHRpb25zID0gbGF5ZXIub3B0aW9ucy5zb3VyY2VcbiAgICAgICAgLm9wdGlvbnMgYXMgUXVlcnlhYmxlRGF0YVNvdXJjZU9wdGlvbnM7XG4gICAgICBpZiAoZGF0YVNvdXJjZU9wdGlvbnMucXVlcnlUaXRsZSkge1xuICAgICAgICBxdWVyeVRpbGVGaWVsZCA9IGRhdGFTb3VyY2VPcHRpb25zLnF1ZXJ5VGl0bGU7XG4gICAgICB9XG4gICAgfVxuICAgIGZlYXR1cmVzLm1hcChmZWF0dXJlID0+IHtcblxuICAgICAgaWYgKHF1ZXJ5VGlsZUZpZWxkKSB7XG4gICAgICAgIGxldCBxdWVyeVRpdGxlQ29udGVudCA9IGZlYXR1cmUuZ2V0UHJvcGVydGllcygpW3F1ZXJ5VGlsZUZpZWxkXTtcbiAgICAgICAgaWYgKHF1ZXJ5VGl0bGVDb250ZW50KSB7XG4gICAgICAgICAgdGl0bGVDb250ZW50ID0gIXRpdGxlQ29udGVudCA/IHF1ZXJ5VGl0bGVDb250ZW50IDogYCR7dGl0bGVDb250ZW50fSwke3F1ZXJ5VGl0bGVDb250ZW50fWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8qICBpZiAoIWZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5zaW1wbGlmeSgxMDApLmludGVyc2VjdHNFeHRlbnQoYmJveEV4dGVudCkpIHtcbiAgICAgICAgb3V0QmJveEV4dGVudCA9IHRydWU7XG4gICAgICAgIC8vIFRPRE86IENoZWNrIHRvIHByb2plY3QgdGhlIGdlb21ldHJ5P1xuICAgICAgfSovXG4gICAgICBjb25zdCBmZWF0dXJlR2VvbWV0cnlDb29yZGluYXRlcyA9IChmZWF0dXJlLmdldEdlb21ldHJ5KCkgYXMgYW55KS5nZXRDb29yZGluYXRlcygpO1xuICAgICAgY29uc3QgZmVhdHVyZUdlb21ldHJ5VHlwZSA9IGZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRUeXBlKCk7XG5cbiAgICAgIGlmICghZmlyc3RGZWF0dXJlVHlwZSAmJiAhb3V0QmJveEV4dGVudCkge1xuICAgICAgICBmaXJzdEZlYXR1cmVUeXBlID0gZmVhdHVyZUdlb21ldHJ5VHlwZTtcbiAgICAgIH1cbiAgICAgIGlmICghb3V0QmJveEV4dGVudCkge1xuICAgICAgICBzd2l0Y2ggKGZlYXR1cmVHZW9tZXRyeVR5cGUpIHtcbiAgICAgICAgICBjYXNlICdQb2ludCc6XG4gICAgICAgICAgICBpZiAobmJGZWF0dXJlcyA9PT0gMSkge1xuICAgICAgICAgICAgICBwdHMgPSBuZXcgb2xnZW9tLlBvaW50KGZlYXR1cmVHZW9tZXRyeUNvb3JkaW5hdGVzLCAnWFknKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHB0c0FycmF5LnB1c2goZmVhdHVyZUdlb21ldHJ5Q29vcmRpbmF0ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgICAgICAgICBvbG1saW5lLmFwcGVuZExpbmVTdHJpbmcoXG4gICAgICAgICAgICAgIG5ldyBvbGdlb20uTGluZVN0cmluZyhmZWF0dXJlR2VvbWV0cnlDb29yZGluYXRlcywgJ1hZJylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdQb2x5Z29uJzpcbiAgICAgICAgICAgIG9sbXBvbHkuYXBwZW5kUG9seWdvbihcbiAgICAgICAgICAgICAgbmV3IG9sZ2VvbS5Qb2x5Z29uKGZlYXR1cmVHZW9tZXRyeUNvb3JkaW5hdGVzLCAnWFknKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ011bHRpUG9seWdvbic6XG4gICAgICAgICAgICBvbG1wb2x5ID0gbmV3IG9sZ2VvbS5NdWx0aVBvbHlnb24oZmVhdHVyZUdlb21ldHJ5Q29vcmRpbmF0ZXMsICdYWScpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGV0IG9sbXB0cztcbiAgICBpZiAocHRzQXJyYXkubGVuZ3RoID09PSAwICYmIHB0cykge1xuICAgICAgb2xtcHRzID0ge1xuICAgICAgICB0eXBlOiBwdHMuZ2V0VHlwZSgpLFxuICAgICAgICBjb29yZGluYXRlczogcHRzLmdldENvb3JkaW5hdGVzKClcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sbXB0cyA9IHtcbiAgICAgICAgdHlwZTogJ1BvbHlnb24nLFxuICAgICAgICBjb29yZGluYXRlczogW3RoaXMuY29udmV4SHVsbChwdHNBcnJheSldXG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCByZXR1cm5HZW9tZXRyeTtcbiAgICBzd2l0Y2ggKGZpcnN0RmVhdHVyZVR5cGUpIHtcbiAgICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxuICAgICAgICByZXR1cm5HZW9tZXRyeSA9IHtcbiAgICAgICAgICB0eXBlOiBvbG1saW5lLmdldFR5cGUoKSxcbiAgICAgICAgICBjb29yZGluYXRlczogb2xtbGluZS5nZXRDb29yZGluYXRlcygpXG4gICAgICAgIH07XG4gICAgICBjYXNlICdQb2ludCc6XG4gICAgICAgIHJldHVybkdlb21ldHJ5ID0gb2xtcHRzO1xuICAgICAgY2FzZSAnUG9seWdvbic6XG4gICAgICAgIHJldHVybkdlb21ldHJ5ID0ge1xuICAgICAgICAgIHR5cGU6IG9sbXBvbHkuZ2V0VHlwZSgpLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBvbG1wb2x5LmdldENvb3JkaW5hdGVzKClcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ011bHRpUG9seWdvbic6XG4gICAgICAgIHJldHVybkdlb21ldHJ5ID0ge1xuICAgICAgICAgIHR5cGU6IG9sbXBvbHkuZ2V0VHlwZSgpLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBvbG1wb2x5LmdldENvb3JkaW5hdGVzKClcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgaW1wb3NlZFByb3BlcnRpZXMgPSB7fTtcblxuICAgIGlmIChxdWVyeVRpbGVGaWVsZCkge1xuICAgICAgaW1wb3NlZFByb3BlcnRpZXNbcXVlcnlUaWxlRmllbGRdID0gdGl0bGVDb250ZW50O1xuICAgIH1cblxuICAgIHJldHVybiBbIHJldHVybkdlb21ldHJ5LCBpbXBvc2VkUHJvcGVydGllc107XG5cblxuICB9XG5cbiAgY3Jvc3MoYSwgYiwgbykge1xuICAgIHJldHVybiAoYVswXSAtIG9bMF0pICogKGJbMV0gLSBvWzFdKSAtIChhWzFdIC0gb1sxXSkgKiAoYlswXSAtIG9bMF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwb2ludHMgQW4gYXJyYXkgb2YgW1gsIFldIGNvb3JkaW5hdGVzXG4gICAqIFRoaXMgbWV0aG9kIGlzIHVzZSBpbnN0ZWFkIG9mIHR1cmYuanMgY29udmV4SHVsbCBiZWNhdXNlIFR1cmYgbmVlZHMgYXQgbGVhc3QgMyBwb2ludCB0byBtYWtlIGEgaHVsbC5cbiAgICogaHR0cHM6Ly9lbi53aWtpYm9va3Mub3JnL3dpa2kvQWxnb3JpdGhtX0ltcGxlbWVudGF0aW9uL0dlb21ldHJ5L0NvbnZleF9odWxsL01vbm90b25lX2NoYWluI0phdmFTY3JpcHRcbiAgICovXG4gIGNvbnZleEh1bGwocG9pbnRzKSB7XG4gICAgcG9pbnRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIHJldHVybiBhWzBdID09PSBiWzBdID8gYVsxXSAtIGJbMV0gOiBhWzBdIC0gYlswXTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGxvd2VyID0gW107XG4gICAgZm9yIChjb25zdCBwb2ludCBvZiBwb2ludHMpIHtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgbG93ZXIubGVuZ3RoID49IDIgJiZcbiAgICAgICAgdGhpcy5jcm9zcyhsb3dlcltsb3dlci5sZW5ndGggLSAyXSwgbG93ZXJbbG93ZXIubGVuZ3RoIC0gMV0sIHBvaW50KSA8PSAwXG4gICAgICApIHtcbiAgICAgICAgbG93ZXIucG9wKCk7XG4gICAgICB9XG4gICAgICBsb3dlci5wdXNoKHBvaW50KTtcbiAgICB9XG5cbiAgICBjb25zdCB1cHBlciA9IFtdO1xuICAgIGZvciAobGV0IGkgPSBwb2ludHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgdXBwZXIubGVuZ3RoID49IDIgJiZcbiAgICAgICAgdGhpcy5jcm9zcyhcbiAgICAgICAgICB1cHBlclt1cHBlci5sZW5ndGggLSAyXSxcbiAgICAgICAgICB1cHBlclt1cHBlci5sZW5ndGggLSAxXSxcbiAgICAgICAgICBwb2ludHNbaV1cbiAgICAgICAgKSA8PSAwXG4gICAgICApIHtcbiAgICAgICAgdXBwZXIucG9wKCk7XG4gICAgICB9XG4gICAgICB1cHBlci5wdXNoKHBvaW50c1tpXSk7XG4gICAgfVxuXG4gICAgdXBwZXIucG9wKCk7XG4gICAgbG93ZXIucG9wKCk7XG4gICAgcmV0dXJuIGxvd2VyLmNvbmNhdCh1cHBlcik7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3REYXRhKFxuICAgIHJlcyxcbiAgICBsYXllcjogTGF5ZXIsXG4gICAgb3B0aW9uczogUXVlcnlPcHRpb25zLFxuICAgIHVybDogc3RyaW5nLFxuICAgIGltcG9zZWRHZW9tZXRyeT8sXG4gICAgaW1wb3NlZFByb3BlcnRpZXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9XG4gICk6IEZlYXR1cmVbXSB7XG4gICAgY29uc3QgcXVlcnlEYXRhU291cmNlID0gbGF5ZXIuZGF0YVNvdXJjZSBhcyBRdWVyeWFibGVEYXRhU291cmNlO1xuXG4gICAgY29uc3QgYWxsb3dlZEZpZWxkc0FuZEFsaWFzID0gdGhpcy5nZXRBbGxvd2VkRmllbGRzQW5kQWxpYXMobGF5ZXIpO1xuICAgIGxldCBmZWF0dXJlcyA9IFtdO1xuICAgIHN3aXRjaCAocXVlcnlEYXRhU291cmNlLm9wdGlvbnMucXVlcnlGb3JtYXQpIHtcbiAgICAgIGNhc2UgUXVlcnlGb3JtYXQuR01MMzpcbiAgICAgICAgZmVhdHVyZXMgPSB0aGlzLmV4dHJhY3RHTUwzRGF0YShcbiAgICAgICAgICByZXMsXG4gICAgICAgICAgbGF5ZXIuekluZGV4LFxuICAgICAgICAgIGFsbG93ZWRGaWVsZHNBbmRBbGlhc1xuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUXVlcnlGb3JtYXQuSlNPTjpcbiAgICAgIGNhc2UgUXVlcnlGb3JtYXQuR0VPSlNPTjpcbiAgICAgIGNhc2UgUXVlcnlGb3JtYXQuR0VPSlNPTjI6XG4gICAgICAgIGZlYXR1cmVzID0gdGhpcy5leHRyYWN0R2VvSlNPTkRhdGEocmVzLCBsYXllci56SW5kZXgsIGFsbG93ZWRGaWVsZHNBbmRBbGlhcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBRdWVyeUZvcm1hdC5FU1JJSlNPTjpcbiAgICAgICAgZmVhdHVyZXMgPSB0aGlzLmV4dHJhY3RFc3JpSlNPTkRhdGEocmVzLCBsYXllci56SW5kZXgsIGFsbG93ZWRGaWVsZHNBbmRBbGlhcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBRdWVyeUZvcm1hdC5URVhUOlxuICAgICAgICBmZWF0dXJlcyA9IHRoaXMuZXh0cmFjdFRleHREYXRhKHJlcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBRdWVyeUZvcm1hdC5IVE1MOlxuICAgICAgICBmZWF0dXJlcyA9IHRoaXMuZXh0cmFjdEh0bWxEYXRhKFxuICAgICAgICAgIHJlcyxcbiAgICAgICAgICBxdWVyeURhdGFTb3VyY2UucXVlcnlIdG1sVGFyZ2V0LFxuICAgICAgICAgIHVybFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUXVlcnlGb3JtYXQuSFRNTEdNTDI6XG4gICAgICAgIGZlYXR1cmVzID0gdGhpcy5leHRyYWN0SHRtbERhdGEoXG4gICAgICAgICAgcmVzLFxuICAgICAgICAgIHF1ZXJ5RGF0YVNvdXJjZS5xdWVyeUh0bWxUYXJnZXQsXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIGltcG9zZWRHZW9tZXRyeSxcbiAgICAgICAgICBpbXBvc2VkUHJvcGVydGllc1xuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUXVlcnlGb3JtYXQuR01MMjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGZlYXR1cmVzID0gdGhpcy5leHRyYWN0R01MMkRhdGEocmVzLCBsYXllciwgYWxsb3dlZEZpZWxkc0FuZEFsaWFzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGZlYXR1cmVzLmxlbmd0aCA+IDAgJiYgZmVhdHVyZXNbMF0uZ2VvbWV0cnkgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGdlb21Ub0FkZCA9IHRoaXMuY3JlYXRlR2VvbWV0cnlGcm9tVXJsQ2xpY2sodXJsKTtcblxuICAgICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIGZlYXR1cmVzKSB7XG4gICAgICAgIGZlYXR1cmUuZ2VvbWV0cnkgPSBnZW9tVG9BZGQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd21zRGF0YXNvdXJjZSA9IGxheWVyLmRhdGFTb3VyY2UgYXMgV01TRGF0YVNvdXJjZTtcbiAgICBjb25zdCBmZWF0dXJlQ291bnQgPSB3bXNEYXRhc291cmNlLnBhcmFtcz8uRkVBVFVSRV9DT1VOVCA/XG4gICAgICBuZXcgUmVnRXhwKCdGRUFUVVJFX0NPVU5UPScgKyB0aGlzLmZlYXR1cmVDb3VudCkgOlxuICAgICAgbmV3IFJlZ0V4cCgnRkVBVFVSRV9DT1VOVD0nICsgdGhpcy5kZWZhdWx0RmVhdHVyZUNvdW50KTtcblxuICAgIGlmIChcbiAgICAgIGZlYXR1cmVDb3VudC50ZXN0KHVybCkgJiZcbiAgICAgICgod21zRGF0YXNvdXJjZS5wYXJhbXM/LkZFQVRVUkVfQ09VTlQgJiYgZmVhdHVyZXMubGVuZ3RoID09PSB0aGlzLmZlYXR1cmVDb3VudCkgfHxcbiAgICAgICghd21zRGF0YXNvdXJjZS5wYXJhbXM/LkZFQVRVUkVfQ09VTlQgJiYgZmVhdHVyZXMubGVuZ3RoID09PSB0aGlzLmRlZmF1bHRGZWF0dXJlQ291bnQpKSkge1xuICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmdldCgnaWdvLmdlby5xdWVyeS5mZWF0dXJlQ291bnRNYXgnLCB7dmFsdWU6IGxheWVyLnRpdGxlfSkuc3Vic2NyaWJlKG1lc3NhZ2UgPT4ge1xuICAgICAgICBjb25zdCBtZXNzYWdlT2JqID0gdGhpcy5tZXNzYWdlU2VydmljZS5pbmZvKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLnByZXZpb3VzTWVzc2FnZUlkcy5wdXNoKG1lc3NhZ2VPYmoudG9hc3RJZCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmVhdHVyZXMubWFwKChmZWF0dXJlOiBGZWF0dXJlLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBtYXBMYWJlbCA9IGZlYXR1cmUucHJvcGVydGllc1txdWVyeURhdGFTb3VyY2UubWFwTGFiZWxdO1xuXG4gICAgICBsZXQgZXhjbHVkZTtcbiAgICAgIGlmIChsYXllci5vcHRpb25zLnNvdXJjZU9wdGlvbnM/LnR5cGUgPT09ICd3bXMnKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZU9wdGlvbnMgPSBsYXllci5vcHRpb25zXG4gICAgICAgICAgLnNvdXJjZU9wdGlvbnMgYXMgV01TRGF0YVNvdXJjZU9wdGlvbnM7XG4gICAgICAgIGV4Y2x1ZGUgPSBzb3VyY2VPcHRpb25zID8gc291cmNlT3B0aW9ucy5leGNsdWRlQXR0cmlidXRlIDogdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBsZXQgdGl0bGUgPSB0aGlzLmdldFF1ZXJ5VGl0bGUoZmVhdHVyZSwgbGF5ZXIpO1xuICAgICAgaWYgKCF0aXRsZSAmJiBmZWF0dXJlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRpdGxlID0gYCR7bGF5ZXIudGl0bGV9ICgke2luZGV4ICsgMX0pYDtcbiAgICAgIH0gZWxzZSBpZiAoIXRpdGxlKSB7XG4gICAgICAgIHRpdGxlID0gbGF5ZXIudGl0bGU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1ldGEgPSBPYmplY3QuYXNzaWduKHt9LCBmZWF0dXJlLm1ldGEgfHwge30sIHtcbiAgICAgICAgaWQ6IHV1aWQoKSxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIG1hcFRpdGxlOiBtYXBMYWJlbCxcbiAgICAgICAgc291cmNlVGl0bGU6IGxheWVyLnRpdGxlLFxuICAgICAgICBvcmRlcjogMTAwMCAtIGxheWVyLnpJbmRleCxcbiAgICAgICAgZXhjbHVkZUF0dHJpYnV0ZTogZXhjbHVkZVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGZlYXR1cmUsIHtcbiAgICAgICAgbWV0YSxcbiAgICAgICAgcHJvamVjdGlvbjpcbiAgICAgICAgICBxdWVyeURhdGFTb3VyY2Uub3B0aW9ucy50eXBlID09PSAnY2FydG8nXG4gICAgICAgICAgICA/ICdFUFNHOjQzMjYnXG4gICAgICAgICAgICA6IG9wdGlvbnMucHJvamVjdGlvblxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUdlb21ldHJ5RnJvbVVybENsaWNrKHVybCkge1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtczogYW55ID0gdGhpcy5nZXRRdWVyeVBhcmFtcyh1cmwudG9Mb3dlckNhc2UoKSk7XG4gICAgY29uc3QgYmJveFJhdyA9IHNlYXJjaFBhcmFtcy5iYm94O1xuICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQoc2VhcmNoUGFyYW1zLndpZHRoLCAxMCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gcGFyc2VJbnQoc2VhcmNoUGFyYW1zLmhlaWdodCwgMTApO1xuICAgIGNvbnN0IHhQb3NpdGlvbiA9IHBhcnNlSW50KHNlYXJjaFBhcmFtcy5pIHx8IHNlYXJjaFBhcmFtcy54LCAxMCk7XG4gICAgY29uc3QgeVBvc2l0aW9uID0gcGFyc2VJbnQoc2VhcmNoUGFyYW1zLmogfHwgc2VhcmNoUGFyYW1zLnksIDEwKTtcblxuICAgIGNvbnN0IGJib3ggPSBiYm94UmF3LnNwbGl0KCcsJyk7XG4gICAgbGV0IHRocmVzaG9sZCA9XG4gICAgICAoTWF0aC5hYnMocGFyc2VGbG9hdChiYm94WzBdKSkgLSBNYXRoLmFicyhwYXJzZUZsb2F0KGJib3hbMl0pKSkgKiAwLjA1O1xuXG4gICAgLy8gZm9yIGNvbnRleHQgaW4gZGVncmVlIChFUFNHOjQzMjYsNDI2OS4uLilcbiAgICBpZiAoTWF0aC5hYnMocGFyc2VGbG9hdChiYm94WzBdKSkgPCAxODApIHtcbiAgICAgIHRocmVzaG9sZCA9IDAuMDQ1O1xuICAgIH1cbiAgICBjb25zdCBjbGlja3ggPVxuICAgICAgcGFyc2VGbG9hdChiYm94WzBdKSArXG4gICAgICAoTWF0aC5hYnMocGFyc2VGbG9hdChiYm94WzBdKSAtIHBhcnNlRmxvYXQoYmJveFsyXSkpICogeFBvc2l0aW9uKSAvXG4gICAgICAgIHdpZHRoIC1cbiAgICAgIHRocmVzaG9sZDtcbiAgICBjb25zdCBjbGlja3kgPVxuICAgICAgcGFyc2VGbG9hdChiYm94WzFdKSArXG4gICAgICAoTWF0aC5hYnMocGFyc2VGbG9hdChiYm94WzFdKSAtIHBhcnNlRmxvYXQoYmJveFszXSkpICogeVBvc2l0aW9uKSAvXG4gICAgICAgIGhlaWdodCAtXG4gICAgICB0aHJlc2hvbGQ7XG4gICAgY29uc3QgY2xpY2t4MSA9IGNsaWNreCArIHRocmVzaG9sZCAqIDI7XG4gICAgY29uc3QgY2xpY2t5MSA9IGNsaWNreSArIHRocmVzaG9sZCAqIDI7XG5cbiAgICBjb25zdCB3a3RQb2x5ID1cbiAgICAgICdQT0xZR09OKCgnICtcbiAgICAgIGNsaWNreCArXG4gICAgICAnICcgK1xuICAgICAgY2xpY2t5ICtcbiAgICAgICcsICcgK1xuICAgICAgY2xpY2t4ICtcbiAgICAgICcgJyArXG4gICAgICBjbGlja3kxICtcbiAgICAgICcsICcgK1xuICAgICAgY2xpY2t4MSArXG4gICAgICAnICcgK1xuICAgICAgY2xpY2t5MSArXG4gICAgICAnLCAnICtcbiAgICAgIGNsaWNreDEgK1xuICAgICAgJyAnICtcbiAgICAgIGNsaWNreSArXG4gICAgICAnLCAnICtcbiAgICAgIGNsaWNreCArXG4gICAgICAnICcgK1xuICAgICAgY2xpY2t5ICtcbiAgICAgICcpKSc7XG5cbiAgICBjb25zdCBmb3JtYXQgPSBuZXcgb2xmb3JtYXQuV0tUKCk7XG4gICAgY29uc3QgdGVuUGVyY2VudFdpZHRoR2VvbSA9IGZvcm1hdC5yZWFkRmVhdHVyZSh3a3RQb2x5KTtcbiAgICBjb25zdCBmID0gdGVuUGVyY2VudFdpZHRoR2VvbS5nZXRHZW9tZXRyeSgpIGFzIGFueTtcblxuICAgIGNvbnN0IG5ld0dlb20gPSB7XG4gICAgICB0eXBlOiBmLmdldFR5cGUoKSxcbiAgICAgIGNvb3JkaW5hdGVzOiBmLmdldENvb3JkaW5hdGVzKClcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ld0dlb207XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RHTUwyRGF0YShyZXMsIHpJbmRleCwgYWxsb3dlZEZpZWxkc0FuZEFsaWFzPykge1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBvbEZvcm1hdEdNTDIoKTtcbiAgICBsZXQgZmVhdHVyZXMgPSBwYXJzZXIucmVhZEZlYXR1cmVzKHJlcyk7XG4gICAgLy8gSGFuZGxlIG5vbiBzdGFuZGFyZCBHTUwgb3V0cHV0IChNYXBTZXJ2ZXIpXG4gICAgaWYgKGZlYXR1cmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3Qgd21zUGFyc2VyID0gbmV3IG9sZm9ybWF0LldNU0dldEZlYXR1cmVJbmZvKCk7XG4gICAgICB0cnkge1xuICAgICAgICBmZWF0dXJlcyA9IHdtc1BhcnNlci5yZWFkRmVhdHVyZXMocmVzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdxdWVyeS5zZXJ2aWNlOiBNdWx0aXBvbHlnb25zIGFyZSBiYWRseSBtYW5hZ2VkIGluIG1hcHNlcnZlciBpbiBHTUwyLiBVc2UgYW5vdGhlciBmb3JtYXQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmZWF0dXJlcy5tYXAoZmVhdHVyZSA9PlxuICAgICAgdGhpcy5mZWF0dXJlVG9SZXN1bHQoZmVhdHVyZSwgekluZGV4LCBhbGxvd2VkRmllbGRzQW5kQWxpYXMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdEdNTDNEYXRhKHJlcywgekluZGV4LCBhbGxvd2VkRmllbGRzQW5kQWxpYXM/KSB7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IG9sRm9ybWF0R01MMygpO1xuICAgIGxldCBmZWF0dXJlcyA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBmZWF0dXJlcyA9IHBhcnNlci5yZWFkRmVhdHVyZXMocmVzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ3F1ZXJ5LnNlcnZpY2U6IEdNTDMgaXMgbm90IHdlbGwgc3VwcG9ydGVkJyk7XG4gICAgfVxuICAgIHJldHVybiBmZWF0dXJlcy5tYXAoZmVhdHVyZSA9PlxuICAgICAgdGhpcy5mZWF0dXJlVG9SZXN1bHQoZmVhdHVyZSwgekluZGV4LCBhbGxvd2VkRmllbGRzQW5kQWxpYXMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdEdlb0pTT05EYXRhKHJlcywgekluZGV4LCBhbGxvd2VkRmllbGRzQW5kQWxpYXM/KSB7XG4gICAgbGV0IGZlYXR1cmVzID0gW107XG4gICAgdHJ5IHtcbiAgICAgIGZlYXR1cmVzID0gSlNPTi5wYXJzZShyZXMucmVwbGFjZSgvKFxccnxcXG4pL2csICcgJykpLmZlYXR1cmVzO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybigncXVlcnkuc2VydmljZTogVW5hYmxlIHRvIHBhcnNlIGdlb2pzb24nLCAnXFxuJywgcmVzKTtcbiAgICB9XG4gICAgZmVhdHVyZXMubWFwKGZlYXR1cmUgPT4gZmVhdHVyZS5tZXRhID0ge1xuICAgICAgaWQ6IHV1aWQoKSxcbiAgICAgIG9yZGVyOiAxMDAwIC0gekluZGV4LFxuICAgICAgYWxpYXM6IGFsbG93ZWRGaWVsZHNBbmRBbGlhc1xuICAgIH0pO1xuICAgIHJldHVybiBmZWF0dXJlcztcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdEVzcmlKU09ORGF0YShyZXMsIHpJbmRleCwgYWxsb3dlZEZpZWxkc0FuZEFsaWFzKSB7XG4gICAgaWYgKHJlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKEpTT04ucGFyc2UocmVzKS5lcnJvcikge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IG9sRm9ybWF0RXNyaUpTT04oKTtcbiAgICBjb25zdCBmZWF0dXJlcyA9IHBhcnNlci5yZWFkRmVhdHVyZXMocmVzKTtcblxuICAgIHJldHVybiBmZWF0dXJlcy5tYXAoZmVhdHVyZSA9PiB0aGlzLmZlYXR1cmVUb1Jlc3VsdChmZWF0dXJlLCB6SW5kZXgsIGFsbG93ZWRGaWVsZHNBbmRBbGlhcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0VGV4dERhdGEocmVzKSB7XG4gICAgLy8gVE9ET1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdEh0bWxEYXRhKFxuICAgIHJlcyxcbiAgICBodG1sVGFyZ2V0OiBRdWVyeUh0bWxUYXJnZXQsXG4gICAgdXJsLFxuICAgIGltcG9zZWRHZW9tZXRyeT8sXG4gICAgaW1wb3NlZFByb3BlcnRpZXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9XG4gICkge1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtczogYW55ID0gdGhpcy5nZXRRdWVyeVBhcmFtcyh1cmwudG9Mb3dlckNhc2UoKSk7XG4gICAgY29uc3QgcHJvamVjdGlvbiA9IHNlYXJjaFBhcmFtcy5jcnMgfHwgc2VhcmNoUGFyYW1zLnNycyB8fCAnRVBTRzozODU3JztcbiAgICBjb25zdCBnZW9tVG9BZGQgPSB0aGlzLmNyZWF0ZUdlb21ldHJ5RnJvbVVybENsaWNrKHVybCk7XG5cbiAgICBpZiAoXG4gICAgICBodG1sVGFyZ2V0ICE9PSBRdWVyeUh0bWxUYXJnZXQuQkxBTksgJiZcbiAgICAgIGh0bWxUYXJnZXQgIT09IFF1ZXJ5SHRtbFRhcmdldC5JRlJBTUVcbiAgICApIHtcbiAgICAgIGh0bWxUYXJnZXQgPSBRdWVyeUh0bWxUYXJnZXQuSUZSQU1FO1xuICAgIH1cblxuICAgIGNvbnN0IGJvZHlUYWdTdGFydCA9IHJlcy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJzxib2R5PicpO1xuICAgIGNvbnN0IGJvZHlUYWdFbmQgPSByZXMudG9Mb3dlckNhc2UoKS5sYXN0SW5kZXhPZignPC9ib2R5PicpICsgNztcbiAgICAvLyByZXBsYWNlIFxcciBcXG4gIGFuZCAnICcgd2l0aCAnJyB0byB2YWxpZGF0ZSBpZiB0aGUgYm9keSBpcyByZWFsbHkgZW1wdHkuIENsZWFyIGFsbCB0aGUgaHRtbCB0YWdzIGZyb20gYm9keVxuICAgIGNvbnN0IGJvZHkgPSBzdHJpcHRhZ3MocmVzLnNsaWNlKGJvZHlUYWdTdGFydCwgYm9keVRhZ0VuZCkucmVwbGFjZSgvKFxccnxcXG58XFxzKS9nLCAnJykpO1xuICAgIGlmIChib2R5ID09PSAnJyB8fCByZXMgPT09ICcnKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogRkVBVFVSRSxcbiAgICAgICAgcHJvamVjdGlvbixcbiAgICAgICAgcHJvcGVydGllczogT2JqZWN0LmFzc2lnbih7IHRhcmdldDogaHRtbFRhcmdldCwgYm9keTogcmVzLCB1cmwgfSwgaW1wb3NlZFByb3BlcnRpZXMpLFxuICAgICAgICBnZW9tZXRyeTogaW1wb3NlZEdlb21ldHJ5IHx8IGdlb21Ub0FkZFxuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldFF1ZXJ5UGFyYW1zKHVybCkge1xuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdXJsLnNwbGl0KCc/Jyk7XG4gICAgaWYgKCFxdWVyeVN0cmluZ1sxXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwYWlycyA9IHF1ZXJ5U3RyaW5nWzFdLnNwbGl0KCcmJyk7XG5cbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBwYWlycy5mb3JFYWNoKHBhaXIgPT4ge1xuICAgICAgcGFpciA9IHBhaXIuc3BsaXQoJz0nKTtcbiAgICAgIHJlc3VsdFtwYWlyWzBdXSA9IGRlY29kZVVSSUNvbXBvbmVudChwYWlyWzFdIHx8ICcnKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGZlYXR1cmVUb1Jlc3VsdChcbiAgICBmZWF0dXJlT0w6IG9sRmVhdHVyZTxvbGdlb20uR2VvbWV0cnk+LFxuICAgIHpJbmRleDogbnVtYmVyLFxuICAgIGFsbG93ZWRGaWVsZHNBbmRBbGlhcz9cbiAgKTogRmVhdHVyZSB7XG4gICAgY29uc3QgZmVhdHVyZUdlb21ldHJ5ID0gZmVhdHVyZU9MLmdldEdlb21ldHJ5KCkgYXMgYW55O1xuICAgIGNvbnN0IHByb3BlcnRpZXM6IGFueSA9IE9iamVjdC5hc3NpZ24oe30sIGZlYXR1cmVPTC5nZXRQcm9wZXJ0aWVzKCkpO1xuICAgIGRlbGV0ZSBwcm9wZXJ0aWVzLmdlb21ldHJ5O1xuICAgIGRlbGV0ZSBwcm9wZXJ0aWVzLkdFT01FVFJJRTtcbiAgICBkZWxldGUgcHJvcGVydGllcy5ib3VuZGVkQnk7XG4gICAgZGVsZXRlIHByb3BlcnRpZXMuc2hhcGU7XG4gICAgZGVsZXRlIHByb3BlcnRpZXMuU0hBUEU7XG4gICAgZGVsZXRlIHByb3BlcnRpZXMuU0hBUEVfUztcbiAgICBkZWxldGUgcHJvcGVydGllcy5TSEFQRV9MO1xuICAgIGRlbGV0ZSBwcm9wZXJ0aWVzLlNIQVBFX1A7XG4gICAgZGVsZXRlIHByb3BlcnRpZXMudGhlX2dlb207XG4gICAgZGVsZXRlIHByb3BlcnRpZXMuZ2VvbTtcblxuICAgIGxldCBnZW9tZXRyeTtcbiAgICBpZiAoZmVhdHVyZUdlb21ldHJ5KSB7XG4gICAgICBnZW9tZXRyeSA9IHtcbiAgICAgICAgdHlwZTogZmVhdHVyZUdlb21ldHJ5LmdldFR5cGUoKSxcbiAgICAgICAgY29vcmRpbmF0ZXM6IGZlYXR1cmVHZW9tZXRyeS5nZXRDb29yZGluYXRlcygpXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBGRUFUVVJFLFxuICAgICAgcHJvamVjdGlvbjogdW5kZWZpbmVkLFxuICAgICAgcHJvcGVydGllcyxcbiAgICAgIGdlb21ldHJ5LFxuICAgICAgbWV0YToge1xuICAgICAgICBpZDogdXVpZCgpLFxuICAgICAgICBvcmRlcjogMTAwMCAtIHpJbmRleCxcbiAgICAgICAgYWxpYXM6IGFsbG93ZWRGaWVsZHNBbmRBbGlhc1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldFF1ZXJ5VXJsKFxuICAgIGRhdGFzb3VyY2U6IFF1ZXJ5YWJsZURhdGFTb3VyY2UsXG4gICAgb3B0aW9uczogUXVlcnlPcHRpb25zLFxuICAgIGZvcmNlR01MMiA9IGZhbHNlLFxuICAgIG1hcEV4dGVudD86IE1hcEV4dGVudFxuICApOiBzdHJpbmcge1xuICAgIGxldCB1cmw7XG5cbiAgICBpZiAoZGF0YXNvdXJjZS5vcHRpb25zLnF1ZXJ5VXJsKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDdXN0b21RdWVyeVVybChkYXRhc291cmNlLCBvcHRpb25zLCBtYXBFeHRlbnQpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZGF0YXNvdXJjZS5jb25zdHJ1Y3Rvcikge1xuICAgICAgY2FzZSBXTVNEYXRhU291cmNlOlxuICAgICAgICBjb25zdCB3bXNEYXRhc291cmNlID0gZGF0YXNvdXJjZSBhcyBXTVNEYXRhU291cmNlO1xuXG4gICAgICAgIGNvbnN0IFdNU0dldEZlYXR1cmVJbmZvT3B0aW9ucyA9IHtcbiAgICAgICAgICBJTkZPX0ZPUk1BVDpcbiAgICAgICAgICAgIHdtc0RhdGFzb3VyY2UucGFyYW1zLklORk9fRk9STUFUIHx8XG4gICAgICAgICAgICB0aGlzLmdldE1pbWVJbmZvRm9ybWF0KGRhdGFzb3VyY2Uub3B0aW9ucy5xdWVyeUZvcm1hdCksXG4gICAgICAgICAgUVVFUllfTEFZRVJTOiB3bXNEYXRhc291cmNlLnBhcmFtcy5MQVlFUlMsXG4gICAgICAgICAgRkVBVFVSRV9DT1VOVDogd21zRGF0YXNvdXJjZS5wYXJhbXMuRkVBVFVSRV9DT1VOVCB8fCB0aGlzLmRlZmF1bHRGZWF0dXJlQ291bnRcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAod21zRGF0YXNvdXJjZS5wYXJhbXMuRkVBVFVSRV9DT1VOVCkge1xuICAgICAgICAgIHRoaXMuZmVhdHVyZUNvdW50ID0gd21zRGF0YXNvdXJjZS5wYXJhbXMuRkVBVFVSRV9DT1VOVDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3JjZUdNTDIpIHtcbiAgICAgICAgICBXTVNHZXRGZWF0dXJlSW5mb09wdGlvbnMuSU5GT19GT1JNQVQgPSB0aGlzLmdldE1pbWVJbmZvRm9ybWF0KFxuICAgICAgICAgICAgUXVlcnlGb3JtYXQuR01MMlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB1cmwgPSB3bXNEYXRhc291cmNlLm9sLmdldEZlYXR1cmVJbmZvVXJsKFxuICAgICAgICAgIG9wdGlvbnMuY29vcmRpbmF0ZXMsXG4gICAgICAgICAgb3B0aW9ucy5yZXNvbHV0aW9uLFxuICAgICAgICAgIG9wdGlvbnMucHJvamVjdGlvbixcbiAgICAgICAgICBXTVNHZXRGZWF0dXJlSW5mb09wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgICAgLy8gY29uc3Qgd21zVmVyc2lvbiA9XG4gICAgICAgIC8vICAgd21zRGF0YXNvdXJjZS5wYXJhbXMuVkVSU0lPTiB8fFxuICAgICAgICAvLyAgIHdtc0RhdGFzb3VyY2UucGFyYW1zLnZlcnNpb24gfHxcbiAgICAgICAgLy8gICAnMS4zLjAnO1xuICAgICAgICAvLyBpZiAod21zVmVyc2lvbiAhPT0gJzEuMy4wJykge1xuICAgICAgICAvLyAgIHVybCA9IHVybC5yZXBsYWNlKCcmST0nLCAnJlg9Jyk7XG4gICAgICAgIC8vICAgdXJsID0gdXJsLnJlcGxhY2UoJyZKPScsICcmWT0nKTtcbiAgICAgICAgLy8gfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ2FydG9EYXRhU291cmNlOlxuICAgICAgICBjb25zdCBjYXJ0b0RhdGFzb3VyY2UgPSBkYXRhc291cmNlIGFzIENhcnRvRGF0YVNvdXJjZTtcbiAgICAgICAgY29uc3QgYmFzZVVybCA9XG4gICAgICAgICAgJ2h0dHBzOi8vJyArXG4gICAgICAgICAgY2FydG9EYXRhc291cmNlLm9wdGlvbnMuYWNjb3VudCArXG4gICAgICAgICAgJy5jYXJ0by5jb20vYXBpL3YyL3NxbD8nO1xuICAgICAgICBjb25zdCBmb3JtYXQgPSAnZm9ybWF0PUdlb0pTT04nO1xuICAgICAgICBjb25zdCBzcWwgPVxuICAgICAgICAgICcmcT0nICsgY2FydG9EYXRhc291cmNlLm9wdGlvbnMuY29uZmlnLmxheWVyc1swXS5vcHRpb25zLnNxbDtcbiAgICAgICAgY29uc3QgY2xhdXNlID1cbiAgICAgICAgICAnIFdIRVJFIFNUX0ludGVyc2VjdHModGhlX2dlb21fd2VibWVyY2F0b3IsU1RfQlVGRkVSKFNUX1NldFNSSUQoU1RfUE9JTlQoJztcbiAgICAgICAgY29uc3QgbWV0ZXJzID0gY2FydG9EYXRhc291cmNlLm9wdGlvbnMucXVlcnlQcmVjaXNpb25cbiAgICAgICAgICA/IGNhcnRvRGF0YXNvdXJjZS5vcHRpb25zLnF1ZXJ5UHJlY2lzaW9uXG4gICAgICAgICAgOiAnMTAwMCc7XG4gICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID1cbiAgICAgICAgICBvcHRpb25zLmNvb3JkaW5hdGVzWzBdICtcbiAgICAgICAgICAnLCcgK1xuICAgICAgICAgIG9wdGlvbnMuY29vcmRpbmF0ZXNbMV0gK1xuICAgICAgICAgICcpLDM4NTcpLCcgK1xuICAgICAgICAgIG1ldGVycyArXG4gICAgICAgICAgJykpJztcblxuICAgICAgICB1cmwgPSBgJHtiYXNlVXJsfSR7Zm9ybWF0fSR7c3FsfSR7Y2xhdXNlfSR7Y29vcmRpbmF0ZXN9YDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEltYWdlQXJjR0lTUmVzdERhdGFTb3VyY2U6XG4gICAgICBjYXNlIFRpbGVBcmNHSVNSZXN0RGF0YVNvdXJjZTpcbiAgICAgICAgY29uc3QgdGlsZUFyY0dJU1Jlc3REYXRhc291cmNlID0gZGF0YXNvdXJjZSBhcyBUaWxlQXJjR0lTUmVzdERhdGFTb3VyY2U7XG4gICAgICAgIGNvbnN0IGRlbHRhWCA9IE1hdGguYWJzKG1hcEV4dGVudFswXSAtIG1hcEV4dGVudFsyXSk7XG4gICAgICAgIGNvbnN0IGRlbHRhWSA9IE1hdGguYWJzKG1hcEV4dGVudFsxXSAtIG1hcEV4dGVudFszXSk7XG4gICAgICAgIGNvbnN0IG1heERlbHRhID0gZGVsdGFYID4gZGVsdGFZID8gZGVsdGFYIDogZGVsdGFZO1xuICAgICAgICBjb25zdCBjbGlja0J1ZmZlciA9IG1heERlbHRhICogMC4wMDU7XG4gICAgICAgIGNvbnN0IHRocmVzaG9sZCA9IHRpbGVBcmNHSVNSZXN0RGF0YXNvdXJjZS5vcHRpb25zLnF1ZXJ5UHJlY2lzaW9uID8gdGlsZUFyY0dJU1Jlc3REYXRhc291cmNlLm9wdGlvbnMucXVlcnlQcmVjaXNpb24gOiBjbGlja0J1ZmZlcjtcbiAgICAgICAgY29uc3QgZXh0ZW50ID0gb2xleHRlbnQuYnVmZmVyKFxuICAgICAgICAgIG9sZXh0ZW50LmJvdW5kaW5nRXh0ZW50KFtvcHRpb25zLmNvb3JkaW5hdGVzXSksXG4gICAgICAgICAgdGhyZXNob2xkXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VVcmwgPVxuICAgICAgICAgIHRpbGVBcmNHSVNSZXN0RGF0YXNvdXJjZS5vcHRpb25zLnVybCArXG4gICAgICAgICAgJy8nICtcbiAgICAgICAgICB0aWxlQXJjR0lTUmVzdERhdGFzb3VyY2Uub3B0aW9ucy5sYXllciArXG4gICAgICAgICAgJy9xdWVyeS8nO1xuICAgICAgICBjb25zdCBnZW9tZXRyeSA9IGVuY29kZVVSSUNvbXBvbmVudChcbiAgICAgICAgICAne1wieG1pblwiOicgK1xuICAgICAgICAgICAgZXh0ZW50WzBdICtcbiAgICAgICAgICAgICcsXCJ5bWluXCI6JyArXG4gICAgICAgICAgICBleHRlbnRbMV0gK1xuICAgICAgICAgICAgJyxcInhtYXhcIjonICtcbiAgICAgICAgICAgIGV4dGVudFsyXSArXG4gICAgICAgICAgICAnLFwieW1heFwiOicgK1xuICAgICAgICAgICAgZXh0ZW50WzNdICtcbiAgICAgICAgICAgICcsXCJzcGF0aWFsUmVmZXJlbmNlXCI6e1wid2tpZFwiOjEwMjEwMH19J1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBbXG4gICAgICAgICAgJ2Y9anNvbicsXG4gICAgICAgICAgYGdlb21ldHJ5PSR7Z2VvbWV0cnl9YCxcbiAgICAgICAgICAnZ2VvbWV0cnlUeXBlPWVzcmlHZW9tZXRyeUVudmVsb3BlJyxcbiAgICAgICAgICAnaW5TUj0xMDIxMDAnLFxuICAgICAgICAgICdzcGF0aWFsUmVsPWVzcmlTcGF0aWFsUmVsSW50ZXJzZWN0cycsXG4gICAgICAgICAgJ291dEZpZWxkcz0qJyxcbiAgICAgICAgICAncmV0dXJuR2VvbWV0cnk9dHJ1ZScsXG4gICAgICAgICAgJ291dFNSPTEwMjEwMCdcbiAgICAgICAgXTtcbiAgICAgICAgdXJsID0gYCR7c2VydmljZVVybH0/JHtwYXJhbXMuam9pbignJicpfWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWltZUluZm9Gb3JtYXQocXVlcnlGb3JtYXQ6IHN0cmluZykge1xuICAgIGxldCBtaW1lID0gJ2FwcGxpY2F0aW9uL3ZuZC5vZ2MuZ21sJztcbiAgICBjb25zdCBrZXlFbnVtID0gT2JqZWN0LmtleXMoUXVlcnlGb3JtYXQpLmZpbmQoXG4gICAgICBrZXkgPT4gUXVlcnlGb3JtYXRba2V5XSA9PT0gcXVlcnlGb3JtYXRcbiAgICApO1xuICAgIGlmIChrZXlFbnVtKSB7XG4gICAgICBtaW1lID0gUXVlcnlGb3JtYXRNaW1lVHlwZVtrZXlFbnVtXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWltZTtcbiAgfVxuXG4gIGdldEFsbG93ZWRGaWVsZHNBbmRBbGlhcyhsYXllcjogYW55KSB7XG4gICAgbGV0IGFsbG93ZWRGaWVsZHNBbmRBbGlhcztcbiAgICBpZiAoXG4gICAgICBsYXllci5vcHRpb25zPy5zb3VyY2U/Lm9wdGlvbnM/LnNvdXJjZUZpZWxkcyAmJlxuICAgICAgbGF5ZXIub3B0aW9ucy5zb3VyY2Uub3B0aW9ucy5zb3VyY2VGaWVsZHMubGVuZ3RoID49IDFcbiAgICApIHtcbiAgICAgIGFsbG93ZWRGaWVsZHNBbmRBbGlhcyA9IHt9O1xuICAgICAgbGF5ZXIub3B0aW9ucy5zb3VyY2Uub3B0aW9ucy5zb3VyY2VGaWVsZHMuZm9yRWFjaChzb3VyY2VGaWVsZCA9PiB7XG4gICAgICAgIGNvbnN0IGFsaWFzID0gc291cmNlRmllbGQuYWxpYXMgPyBzb3VyY2VGaWVsZC5hbGlhcyA6IHNvdXJjZUZpZWxkLm5hbWU7XG4gICAgICAgIGFsbG93ZWRGaWVsZHNBbmRBbGlhc1tzb3VyY2VGaWVsZC5uYW1lXSA9IGFsaWFzO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhbGxvd2VkRmllbGRzQW5kQWxpYXM7XG4gIH1cblxuICBnZXRRdWVyeVRpdGxlKGZlYXR1cmU6IEZlYXR1cmUsIGxheWVyOiBMYXllcik6IHN0cmluZyB7XG4gICAgbGV0IHRpdGxlO1xuICAgIGlmIChsYXllci5vcHRpb25zPy5zb3VyY2U/Lm9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGRhdGFTb3VyY2VPcHRpb25zID0gbGF5ZXIub3B0aW9ucy5zb3VyY2VcbiAgICAgICAgLm9wdGlvbnMgYXMgUXVlcnlhYmxlRGF0YVNvdXJjZU9wdGlvbnM7XG4gICAgICBpZiAoZGF0YVNvdXJjZU9wdGlvbnMucXVlcnlUaXRsZSkge1xuICAgICAgICB0aXRsZSA9IHRoaXMuZ2V0TGFiZWxNYXRjaChmZWF0dXJlLCBkYXRhU291cmNlT3B0aW9ucy5xdWVyeVRpdGxlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGl0bGU7XG4gIH1cblxuICBnZXRMYWJlbE1hdGNoKGZlYXR1cmU6IEZlYXR1cmUsIGxhYmVsTWF0Y2gpOiBzdHJpbmcge1xuICAgIGxldCBsYWJlbCA9IGxhYmVsTWF0Y2g7XG4gICAgY29uc3QgbGFiZWxUb0dldCA9IEFycmF5LmZyb20obGFiZWxNYXRjaC5tYXRjaEFsbCgvXFwkXFx7KFteXFx7XFx9XSspXFx9L2cpKTtcblxuICAgIGxhYmVsVG9HZXQuZm9yRWFjaCh2ID0+IHtcbiAgICAgIGxhYmVsID0gbGFiZWwucmVwbGFjZSh2WzBdLCBmZWF0dXJlLnByb3BlcnRpZXNbdlsxXV0pO1xuICAgIH0pO1xuXG4gICAgLy8gTm90aGluZyBkb25lPyBjaGVjayBmZWF0dXJlJ3MgYXR0cmlidXRlXG4gICAgaWYgKGxhYmVsVG9HZXQubGVuZ3RoID09PSAwICYmIGxhYmVsID09PSBsYWJlbE1hdGNoKSB7XG4gICAgICBsYWJlbCA9IGZlYXR1cmUucHJvcGVydGllc1tsYWJlbE1hdGNoXSB8fCBsYWJlbE1hdGNoO1xuICAgIH1cblxuICAgIHJldHVybiBsYWJlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gZGF0YXNvdXJjZSBRdWVyeWFibGVEYXRhU291cmNlXG4gICAqIEBwYXJhbSBvcHRpb25zIFF1ZXJ5T3B0aW9uc1xuICAgKiBAbWFwRXh0ZW50IGV4dGVudCBvZiB0aGUgbWFwIHdoZW4gY2xpY2sgZXZlbnRcbiAgICpcbiAgICovXG5cbiAgZ2V0Q3VzdG9tUXVlcnlVcmwoXG4gICAgZGF0YXNvdXJjZTogUXVlcnlhYmxlRGF0YVNvdXJjZSxcbiAgICBvcHRpb25zOiBRdWVyeU9wdGlvbnMsXG4gICAgbWFwRXh0ZW50PzogTWFwRXh0ZW50KTogc3RyaW5nIHtcblxuICAgICAgbGV0IHVybCA9IGRhdGFzb3VyY2Uub3B0aW9ucy5xdWVyeVVybC5yZXBsYWNlKC9cXHt4bWluXFx9L2csIG1hcEV4dGVudFswXS50b1N0cmluZygpKVxuICAgICAgLnJlcGxhY2UoL1xce3ltaW5cXH0vZywgbWFwRXh0ZW50WzFdLnRvU3RyaW5nKCkpXG4gICAgICAucmVwbGFjZSgvXFx7eG1heFxcfS9nLCBtYXBFeHRlbnRbMl0udG9TdHJpbmcoKSlcbiAgICAgIC5yZXBsYWNlKC9cXHt5bWF4XFx9L2csIG1hcEV4dGVudFszXS50b1N0cmluZygpKVxuICAgICAgLnJlcGxhY2UoL1xce3hcXH0vZywgb3B0aW9ucy5jb29yZGluYXRlc1swXS50b1N0cmluZygpKVxuICAgICAgLnJlcGxhY2UoL1xce3lcXH0vZywgb3B0aW9ucy5jb29yZGluYXRlc1sxXS50b1N0cmluZygpKVxuICAgICAgLnJlcGxhY2UoL1xce3Jlc29sdXRpb25cXH0vZywgb3B0aW9ucy5yZXNvbHV0aW9uLnRvU3RyaW5nKCkpXG4gICAgICAucmVwbGFjZSgvXFx7c3JpZFxcfS9nLCBvcHRpb25zLnByb2plY3Rpb24ucmVwbGFjZSgnRVBTRzonLCcnKSk7XG5cbiAgICAgIHJldHVybiB1cmw7XG4gICAgfVxufVxuIl19
|
|
619
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL3F1ZXJ5L3NoYXJlZC9xdWVyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxPQUFPLElBQUksU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRWpELE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sWUFBWSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sWUFBWSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sZ0JBQWdCLE1BQU0sb0JBQW9CLENBQUM7QUFFbEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFHbEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFN0QsT0FBTyxFQUNMLGFBQWEsRUFDYixlQUFlLEVBQ2Ysd0JBQXdCLEVBRXhCLHlCQUF5QixFQUMxQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFDTCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLGVBQWUsRUFDaEIsTUFBTSxlQUFlLENBQUM7Ozs7QUFXdkIsTUFBTSxPQUFPLFlBQVk7SUFPdkIsWUFDVSxJQUFnQixFQUNoQixjQUE4QixFQUM5QixlQUFnQztRQUZoQyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLG1CQUFjLEdBQWQsY0FBYyxDQUFn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QUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTlELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQzs7d0VBeHZCVSxZQUFZO2tFQUFaLFlBQVksV0FBWixZQUFZLG1CQUZYLE1BQU07dUZBRVAsWUFBWTtjQUh4QixVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgbWVyZ2VNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IGRlZmF1bHQgYXMgc3RyaXB0YWdzIH0gZnJvbSAnc3RyaXB0YWdzJztcblxuaW1wb3J0ICogYXMgb2xmb3JtYXQgZnJvbSAnb2wvZm9ybWF0JztcbmltcG9ydCAqIGFzIG9sZXh0ZW50IGZyb20gJ29sL2V4dGVudCc7XG5pbXBvcnQgb2xGb3JtYXRHTUwyIGZyb20gJ29sL2Zvcm1hdC9HTUwyJztcbmltcG9ydCBvbEZvcm1hdEdNTDMgZnJvbSAnb2wvZm9ybWF0L0dNTDMnO1xuaW1wb3J0IG9sRm9ybWF0RXNyaUpTT04gZnJvbSAnb2wvZm9ybWF0L0VzcmlKU09OJztcbmltcG9ydCBvbEZlYXR1cmUgZnJvbSAnb2wvRmVhdHVyZSc7XG5pbXBvcnQgKiBhcyBvbGdlb20gZnJvbSAnb2wvZ2VvbSc7XG5cbmltcG9ydCB7IExhbmd1YWdlU2VydmljZSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlJztcbmltcG9ydCB7IHV1aWQgfSBmcm9tICdAaWdvMi91dGlscyc7XG5pbXBvcnQgeyBGZWF0dXJlLCBGZWF0dXJlR2VvbWV0cnkgfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9mZWF0dXJlLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgRkVBVFVSRSB9IGZyb20gJy4uLy4uL2ZlYXR1cmUvc2hhcmVkL2ZlYXR1cmUuZW51bXMnO1xuaW1wb3J0IHsgTGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXJzL2xheWVyJztcbmltcG9ydCB7XG4gIFdNU0RhdGFTb3VyY2UsXG4gIENhcnRvRGF0YVNvdXJjZSxcbiAgVGlsZUFyY0dJU1Jlc3REYXRhU291cmNlLFxuICBXTVNEYXRhU291cmNlT3B0aW9ucyxcbiAgSW1hZ2VBcmNHSVNSZXN0RGF0YVNvdXJjZVxufSBmcm9tICcuLi8uLi9kYXRhc291cmNlJztcblxuaW1wb3J0IHtcbiAgUXVlcnlGb3JtYXQsXG4gIFF1ZXJ5Rm9ybWF0TWltZVR5cGUsXG4gIFF1ZXJ5SHRtbFRhcmdldFxufSBmcm9tICcuL3F1ZXJ5LmVudW1zJztcbmltcG9ydCB7XG4gIFF1ZXJ5T3B0aW9ucyxcbiAgUXVlcnlhYmxlRGF0YVNvdXJjZSxcbiAgUXVlcnlhYmxlRGF0YVNvdXJjZU9wdGlvbnNcbn0gZnJvbSAnLi9xdWVyeS5pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1hcEV4dGVudCB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQvbWFwLmludGVyZmFjZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFF1ZXJ5U2VydmljZSB7XG4gIHB1YmxpYyBxdWVyeUVuYWJsZWQgPSB0cnVlO1xuICBwdWJsaWMgZGVmYXVsdEZlYXR1cmVDb3VudCA9IDIwOyAvLyBkZWZhdWx0IGZlYXR1cmUgY291bnRcbiAgcHVibGljIGZlYXR1cmVDb3VudCA9IDIwOyAvLyBmZWF0dXJlIGNvdW50XG5cbiAgcHJpdmF0ZSBwcmV2aW91c01lc3NhZ2VJZHMgPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSkge31cblxuICBxdWVyeShsYXllcnM6IExheWVyW10sIG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyk6IE9ic2VydmFibGU8RmVhdHVyZVtdPltdIHtcbiAgICBpZiAodGhpcy5wcmV2aW91c01lc3NhZ2VJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnByZXZpb3VzTWVzc2FnZUlkcy5mb3JFYWNoKGlkID0+IHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5yZW1vdmUoaWQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsYXllcnNcbiAgICAgIC5maWx0ZXIoKGxheWVyOiBMYXllcikgPT4gbGF5ZXIudmlzaWJsZSAmJiBsYXllci5pc0luUmVzb2x1dGlvbnNSYW5nZSlcbiAgICAgIC5tYXAoKGxheWVyOiBMYXllcikgPT4gdGhpcy5xdWVyeUxheWVyKGxheWVyLCBvcHRpb25zKSk7XG4gIH1cblxuICBxdWVyeUxheWVyKGxheWVyOiBMYXllciwgb3B0aW9uczogUXVlcnlPcHRpb25zKTogT2JzZXJ2YWJsZTxGZWF0dXJlW10+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmdldFF1ZXJ5VXJsKGxheWVyLmRhdGFTb3VyY2UsIG9wdGlvbnMsIGZhbHNlLCBsYXllci5tYXAudmlld0NvbnRyb2xsZXIuZ2V0RXh0ZW50KCkpO1xuICAgIGlmICghdXJsKSB7XG4gICAgICByZXR1cm4gb2YoW10pO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIChsYXllci5kYXRhU291cmNlIGFzIFF1ZXJ5YWJsZURhdGFTb3VyY2UpLm9wdGlvbnMucXVlcnlGb3JtYXQgPT09XG4gICAgICBRdWVyeUZvcm1hdC5IVE1MR01MMlxuICAgICkge1xuICAgICAgY29uc3QgdXJsR21sID0gdGhpcy5nZXRRdWVyeVVybChsYXllci5kYXRhU291cmNlLCBvcHRpb25zLCB0cnVlKTtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybEdtbCwgeyByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KS5waXBlKFxuICAgICAgICBtZXJnZU1hcChnbWxSZXMgPT4ge1xuICAgICAgICAgIGNvbnN0IG1lcmdlZEdNTCA9IHRoaXMubWVyZ2VHTUwoZ21sUmVzLCB1cmwsIGxheWVyKTtcbiAgICAgICAgICBjb25zdCBpbXBvc2VkR2VvbSA9IG1lcmdlZEdNTFswXTtcbiAgICAgICAgICBjb25zdCBpbXBvc2VkUHJvcGVydGllcyA9IG1lcmdlZEdNTFsxXTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAuZ2V0KHVybCwgeyByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIG1hcChyZXMgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmV4dHJhY3REYXRhKHJlcywgbGF5ZXIsIG9wdGlvbnMsIHVybCwgaW1wb3NlZEdlb20sIGltcG9zZWRQcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5odHRwLmdldCh1cmwsIHsgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSk7XG4gICAgcmV0dXJuIHJlcXVlc3QucGlwZShtYXAocmVzID0+IHRoaXMuZXh0cmFjdERhdGEocmVzLCBsYXllciwgb3B0aW9ucywgdXJsKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBtZXJnZUdNTChnbWxSZXMsIHVybCwgbGF5ZXI6IExheWVyKTogW0ZlYXR1cmVHZW9tZXRyeSwgeyBba2V5OiBzdHJpbmddOiBhbnkgfV0ge1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBvbEZvcm1hdEdNTDIoKTtcbiAgICBsZXQgZmVhdHVyZXMgPSBwYXJzZXIucmVhZEZlYXR1cmVzKGdtbFJlcyk7XG4gICAgLy8gSGFuZGxlIG5vbiBzdGFuZGFyZCBHTUwgb3V0cHV0IChNYXBTZXJ2ZXIpXG4gICAgaWYgKGZlYXR1cmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3Qgd21zUGFyc2VyID0gbmV3IG9sZm9ybWF0LldNU0dldEZlYXR1cmVJbmZvKCk7XG4gICAgICBmZWF0dXJlcyA9IHdtc1BhcnNlci5yZWFkRmVhdHVyZXMoZ21sUmVzKTtcbiAgICB9XG4gICAgY29uc3Qgb2xtbGluZSA9IG5ldyBvbGdlb20uTXVsdGlMaW5lU3RyaW5nKFtdKTtcbiAgICBsZXQgcHRzO1xuICAgIGNvbnN0IHB0c0FycmF5ID0gW107XG4gICAgbGV0IG9sbXBvbHkgPSBuZXcgb2xnZW9tLk11bHRpUG9seWdvbihbXSk7XG4gICAgbGV0IGZpcnN0RmVhdHVyZVR5cGU7XG4gICAgY29uc3QgbmJGZWF0dXJlcyA9IGZlYXR1cmVzLmxlbmd0aDtcblxuICAgIC8vIENoZWNrIGlmIGdlb21ldHJ5IGludGVyc2VjdCBiYm94XG4gICAgLy8gZm9yIGdlb3NlcnZlciBnZXRmZWF0dXJlaW5mbyByZXNwb25zZSBpbiBkYXRhIHByb2plY3Rpb24sIG5vdCBjYWxsIHByb2plY3Rpb25cbiAgICBjb25zdCBzZWFyY2hQYXJhbXM6IGFueSA9IHRoaXMuZ2V0UXVlcnlQYXJhbXModXJsLnRvTG93ZXJDYXNlKCkpO1xuICAgIGNvbnN0IGJib3hSYXcgPSBzZWFyY2hQYXJhbXMuYmJveDtcbiAgICBjb25zdCBiYm94ID0gYmJveFJhdy5zcGxpdCgnLCcpO1xuICAgIGNvbnN0IGJib3hFeHRlbnQgPSBvbGV4dGVudC5jcmVhdGVFbXB0eSgpO1xuICAgIG9sZXh0ZW50LmV4dGVuZChiYm94RXh0ZW50LCBiYm94KTtcbiAgICBjb25zdCBvdXRCYm94RXh0ZW50ID0gZmFsc2U7XG4gICAgbGV0IHRpdGxlQ29udGVudDtcbiAgICBsZXQgcXVlcnlUaWxlRmllbGQ7XG4gICAgaWYgKGxheWVyLm9wdGlvbnM/LnNvdXJjZT8ub3B0aW9ucykge1xuICAgICAgY29uc3QgZGF0YVNvdXJjZU9wdGlvbnMgPSBsYXllci5vcHRpb25zLnNvdXJjZVxuICAgICAgICAub3B0aW9ucyBhcyBRdWVyeWFibGVEYXRhU291cmNlT3B0aW9ucztcbiAgICAgIGlmIChkYXRhU291cmNlT3B0aW9ucy5xdWVyeVRpdGxlKSB7XG4gICAgICAgIHF1ZXJ5VGlsZUZpZWxkID0gZGF0YVNvdXJjZU9wdGlvbnMucXVlcnlUaXRsZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZmVhdHVyZXMubWFwKGZlYXR1cmUgPT4ge1xuXG4gICAgICBpZiAocXVlcnlUaWxlRmllbGQpIHtcbiAgICAgICAgbGV0IHF1ZXJ5VGl0bGVDb250ZW50ID0gZmVhdHVyZS5nZXRQcm9wZXJ0aWVzKClbcXVlcnlUaWxlRmllbGRdO1xuICAgICAgICBpZiAocXVlcnlUaXRsZUNvbnRlbnQpIHtcbiAgICAgICAgICB0aXRsZUNvbnRlbnQgPSAhdGl0bGVDb250ZW50ID8gcXVlcnlUaXRsZUNvbnRlbnQgOiBgJHt0aXRsZUNvbnRlbnR9LCR7cXVlcnlUaXRsZUNvbnRlbnR9YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLyogIGlmICghZmVhdHVyZS5nZXRHZW9tZXRyeSgpLnNpbXBsaWZ5KDEwMCkuaW50ZXJzZWN0c0V4dGVudChiYm94RXh0ZW50KSkge1xuICAgICAgICBvdXRCYm94RXh0ZW50ID0gdHJ1ZTtcbiAgICAgICAgLy8gVE9ETzogQ2hlY2sgdG8gcHJvamVjdCB0aGUgZ2VvbWV0cnk/XG4gICAgICB9Ki9cbiAgICAgIGNvbnN0IGZlYXR1cmVHZW9tZXRyeUNvb3JkaW5hdGVzID0gKGZlYXR1cmUuZ2V0R2VvbWV0cnkoKSBhcyBhbnkpLmdldENvb3JkaW5hdGVzKCk7XG4gICAgICBjb25zdCBmZWF0dXJlR2VvbWV0cnlUeXBlID0gZmVhdHVyZS5nZXRHZW9tZXRyeSgpLmdldFR5cGUoKTtcblxuICAgICAgaWYgKCFmaXJzdEZlYXR1cmVUeXBlICYmICFvdXRCYm94RXh0ZW50KSB7XG4gICAgICAgIGZpcnN0RmVhdHVyZVR5cGUgPSBmZWF0dXJlR2VvbWV0cnlUeXBlO1xuICAgICAgfVxuICAgICAgaWYgKCFvdXRCYm94RXh0ZW50KSB7XG4gICAgICAgIHN3aXRjaCAoZmVhdHVyZUdlb21ldHJ5VHlwZSkge1xuICAgICAgICAgIGNhc2UgJ1BvaW50JzpcbiAgICAgICAgICAgIGlmIChuYkZlYXR1cmVzID09PSAxKSB7XG4gICAgICAgICAgICAgIHB0cyA9IG5ldyBvbGdlb20uUG9pbnQoZmVhdHVyZUdlb21ldHJ5Q29vcmRpbmF0ZXMsICdYWScpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcHRzQXJyYXkucHVzaChmZWF0dXJlR2VvbWV0cnlDb29yZGluYXRlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdMaW5lU3RyaW5nJzpcbiAgICAgICAgICAgIG9sbWxpbmUuYXBwZW5kTGluZVN0cmluZyhcbiAgICAgICAgICAgICAgbmV3IG9sZ2VvbS5MaW5lU3RyaW5nKGZlYXR1cmVHZW9tZXRyeUNvb3JkaW5hdGVzLCAnWFknKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgICAgICAgICAgb2xtcG9seS5hcHBlbmRQb2x5Z29uKFxuICAgICAgICAgICAgICBuZXcgb2xnZW9tLlBvbHlnb24oZmVhdHVyZUdlb21ldHJ5Q29vcmRpbmF0ZXMsICdYWScpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnTXVsdGlQb2x5Z29uJzpcbiAgICAgICAgICAgIG9sbXBvbHkgPSBuZXcgb2xnZW9tLk11bHRpUG9seWdvbihmZWF0dXJlR2VvbWV0cnlDb29yZGluYXRlcywgJ1hZJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBsZXQgb2xtcHRzO1xuICAgIGlmIChwdHNBcnJheS5sZW5ndGggPT09IDAgJiYgcHRzKSB7XG4gICAgICBvbG1wdHMgPSB7XG4gICAgICAgIHR5cGU6IHB0cy5nZXRUeXBlKCksXG4gICAgICAgIGNvb3JkaW5hdGVzOiBwdHMuZ2V0Q29vcmRpbmF0ZXMoKVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2xtcHRzID0ge1xuICAgICAgICB0eXBlOiAnUG9seWdvbicsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBbdGhpcy5jb252ZXhIdWxsKHB0c0FycmF5KV1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IHJldHVybkdlb21ldHJ5O1xuICAgIHN3aXRjaCAoZmlyc3RGZWF0dXJlVHlwZSkge1xuICAgICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgICAgIHJldHVybkdlb21ldHJ5ID0ge1xuICAgICAgICAgIHR5cGU6IG9sbWxpbmUuZ2V0VHlwZSgpLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBvbG1saW5lLmdldENvb3JkaW5hdGVzKClcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ1BvaW50JzpcbiAgICAgICAgcmV0dXJuR2VvbWV0cnkgPSBvbG1wdHM7XG4gICAgICBjYXNlICdQb2x5Z29uJzpcbiAgICAgICAgcmV0dXJuR2VvbWV0cnkgPSB7XG4gICAgICAgICAgdHlwZTogb2xtcG9seS5nZXRUeXBlKCksXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IG9sbXBvbHkuZ2V0Q29vcmRpbmF0ZXMoKVxuICAgICAgICB9O1xuICAgICAgY2FzZSAnTXVsdGlQb2x5Z29uJzpcbiAgICAgICAgcmV0dXJuR2VvbWV0cnkgPSB7XG4gICAgICAgICAgdHlwZTogb2xtcG9seS5nZXRUeXBlKCksXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IG9sbXBvbHkuZ2V0Q29vcmRpbmF0ZXMoKVxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBpbXBvc2VkUHJvcGVydGllcyA9IHt9O1xuXG4gICAgaWYgKHF1ZXJ5VGlsZUZpZWxkKSB7XG4gICAgICBpbXBvc2VkUHJvcGVydGllc1txdWVyeVRpbGVGaWVsZF0gPSB0aXRsZUNvbnRlbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFsgcmV0dXJuR2VvbWV0cnksIGltcG9zZWRQcm9wZXJ0aWVzXTtcblxuXG4gIH1cblxuICBjcm9zcyhhLCBiLCBvKSB7XG4gICAgcmV0dXJuIChhWzBdIC0gb1swXSkgKiAoYlsxXSAtIG9bMV0pIC0gKGFbMV0gLSBvWzFdKSAqIChiWzBdIC0gb1swXSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHBvaW50cyBBbiBhcnJheSBvZiBbWCwgWV0gY29vcmRpbmF0ZXNcbiAgICogVGhpcyBtZXRob2QgaXMgdXNlIGluc3RlYWQgb2YgdHVyZi5qcyBjb252ZXhIdWxsIGJlY2F1c2UgVHVyZiBuZWVkcyBhdCBsZWFzdCAzIHBvaW50IHRvIG1ha2UgYSBodWxsLlxuICAgKiBodHRwczovL2VuLndpa2lib29rcy5vcmcvd2lraS9BbGdvcml0aG1fSW1wbGVtZW50YXRpb24vR2VvbWV0cnkvQ29udmV4X2h1bGwvTW9ub3RvbmVfY2hhaW4jSmF2YVNjcmlwdFxuICAgKi9cbiAgY29udmV4SHVsbChwb2ludHMpIHtcbiAgICBwb2ludHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgcmV0dXJuIGFbMF0gPT09IGJbMF0gPyBhWzFdIC0gYlsxXSA6IGFbMF0gLSBiWzBdO1xuICAgIH0pO1xuXG4gICAgY29uc3QgbG93ZXIgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHBvaW50cykge1xuICAgICAgd2hpbGUgKFxuICAgICAgICBsb3dlci5sZW5ndGggPj0gMiAmJlxuICAgICAgICB0aGlzLmNyb3NzKGxvd2VyW2xvd2VyLmxlbmd0aCAtIDJdLCBsb3dlcltsb3dlci5sZW5ndGggLSAxXSwgcG9pbnQpIDw9IDBcbiAgICAgICkge1xuICAgICAgICBsb3dlci5wb3AoKTtcbiAgICAgIH1cbiAgICAgIGxvd2VyLnB1c2gocG9pbnQpO1xuICAgIH1cblxuICAgIGNvbnN0IHVwcGVyID0gW107XG4gICAgZm9yIChsZXQgaSA9IHBvaW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgd2hpbGUgKFxuICAgICAgICB1cHBlci5sZW5ndGggPj0gMiAmJlxuICAgICAgICB0aGlzLmNyb3NzKFxuICAgICAgICAgIHVwcGVyW3VwcGVyLmxlbmd0aCAtIDJdLFxuICAgICAgICAgIHVwcGVyW3VwcGVyLmxlbmd0aCAtIDFdLFxuICAgICAgICAgIHBvaW50c1tpXVxuICAgICAgICApIDw9IDBcbiAgICAgICkge1xuICAgICAgICB1cHBlci5wb3AoKTtcbiAgICAgIH1cbiAgICAgIHVwcGVyLnB1c2gocG9pbnRzW2ldKTtcbiAgICB9XG5cbiAgICB1cHBlci5wb3AoKTtcbiAgICBsb3dlci5wb3AoKTtcbiAgICByZXR1cm4gbG93ZXIuY29uY2F0KHVwcGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdERhdGEoXG4gICAgcmVzLFxuICAgIGxheWVyOiBMYXllcixcbiAgICBvcHRpb25zOiBRdWVyeU9wdGlvbnMsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgaW1wb3NlZEdlb21ldHJ5PyxcbiAgICBpbXBvc2VkUHJvcGVydGllcz86IHsgW2tleTogc3RyaW5nXTogYW55IH1cbiAgKTogRmVhdHVyZVtdIHtcbiAgICBjb25zdCBxdWVyeURhdGFTb3VyY2UgPSBsYXllci5kYXRhU291cmNlIGFzIFF1ZXJ5YWJsZURhdGFTb3VyY2U7XG5cbiAgICBjb25zdCBhbGxvd2VkRmllbGRzQW5kQWxpYXMgPSB0aGlzLmdldEFsbG93ZWRGaWVsZHNBbmRBbGlhcyhsYXllcik7XG4gICAgbGV0IGZlYXR1cmVzID0gW107XG4gICAgc3dpdGNoIChxdWVyeURhdGFTb3VyY2Uub3B0aW9ucy5xdWVyeUZvcm1hdCkge1xuICAgICAgY2FzZSBRdWVyeUZvcm1hdC5HTUwzOlxuICAgICAgICBmZWF0dXJlcyA9IHRoaXMuZXh0cmFjdEdNTDNEYXRhKFxuICAgICAgICAgIHJlcyxcbiAgICAgICAgICBsYXllci56SW5kZXgsXG4gICAgICAgICAgYWxsb3dlZEZpZWxkc0FuZEFsaWFzXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBRdWVyeUZvcm1hdC5KU09OOlxuICAgICAgY2FzZSBRdWVyeUZvcm1hdC5HRU9KU09OOlxuICAgICAgY2FzZSBRdWVyeUZvcm1hdC5HRU9KU09OMjpcbiAgICAgICAgZmVhdHVyZXMgPSB0aGlzLmV4dHJhY3RHZW9KU09ORGF0YShyZXMsIGxheWVyLnpJbmRleCwgYWxsb3dlZEZpZWxkc0FuZEFsaWFzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFF1ZXJ5Rm9ybWF0LkVTUklKU09OOlxuICAgICAgICBmZWF0dXJlcyA9IHRoaXMuZXh0cmFjdEVzcmlKU09ORGF0YShyZXMsIGxheWVyLnpJbmRleCwgYWxsb3dlZEZpZWxkc0FuZEFsaWFzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFF1ZXJ5Rm9ybWF0LlRFWFQ6XG4gICAgICAgIGZlYXR1cmVzID0gdGhpcy5leHRyYWN0VGV4dERhdGEocmVzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFF1ZXJ5Rm9ybWF0LkhUTUw6XG4gICAgICAgIGZlYXR1cmVzID0gdGhpcy5leHRyYWN0SHRtbERhdGEoXG4gICAgICAgICAgcmVzLFxuICAgICAgICAgIHF1ZXJ5RGF0YVNvdXJjZS5xdWVyeUh0bWxUYXJnZXQsXG4gICAgICAgICAgdXJsXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBRdWVyeUZvcm1hdC5IVE1MR01MMjpcbiAgICAgICAgZmVhdHVyZXMgPSB0aGlzLmV4dHJhY3RIdG1sRGF0YShcbiAgICAgICAgICByZXMsXG4gICAgICAgICAgcXVlcnlEYXRhU291cmNlLnF1ZXJ5SHRtbFRhcmdldCxcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgaW1wb3NlZEdlb21ldHJ5LFxuICAgICAgICAgIGltcG9zZWRQcm9wZXJ0aWVzXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBRdWVyeUZvcm1hdC5HTUwyOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgZmVhdHVyZXMgPSB0aGlzLmV4dHJhY3RHTUwyRGF0YShyZXMsIGxheWVyLCBhbGxvd2VkRmllbGRzQW5kQWxpYXMpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKGZlYXR1cmVzLmxlbmd0aCA+IDAgJiYgKGZlYXR1cmVzWzBdLmdlb21ldHJ5ID09PSBudWxsIHx8ICFmZWF0dXJlc1swXS5nZW9tZXRyeSkpIHtcbiAgICAgIGNvbnN0IGdlb21Ub0FkZCA9IHRoaXMuY3JlYXRlR2VvbWV0cnlGcm9tVXJsQ2xpY2sodXJsKTtcblxuICAgICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIGZlYXR1cmVzKSB7XG4gICAgICAgIGZlYXR1cmUuZ2VvbWV0cnkgPSBnZW9tVG9BZGQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd21zRGF0YXNvdXJjZSA9IGxheWVyLmRhdGFTb3VyY2UgYXMgV01TRGF0YVNvdXJjZTtcbiAgICBjb25zdCBmZWF0dXJlQ291bnQgPSB3bXNEYXRhc291cmNlLnBhcmFtcz8uRkVBVFVSRV9DT1VOVCA/XG4gICAgICBuZXcgUmVnRXhwKCdGRUFUVVJFX0NPVU5UPScgKyB0aGlzLmZlYXR1cmVDb3VudCkgOlxuICAgICAgbmV3IFJlZ0V4cCgnRkVBVFVSRV9DT1VOVD0nICsgdGhpcy5kZWZhdWx0RmVhdHVyZUNvdW50KTtcblxuICAgIGlmIChcbiAgICAgIGZlYXR1cmVDb3VudC50ZXN0KHVybCkgJiZcbiAgICAgICgod21zRGF0YXNvdXJjZS5wYXJhbXM/LkZFQVRVUkVfQ09VTlQgJiYgdGhpcy5mZWF0dXJlQ291bnQgPiAxICYmIGZlYXR1cmVzLmxlbmd0aCA9PT0gdGhpcy5mZWF0dXJlQ291bnQpIHx8XG4gICAgICAoIXdtc0RhdGFzb3VyY2UucGFyYW1zPy5GRUFUVVJFX0NPVU5UICYmIGZlYXR1cmVzLmxlbmd0aCA9PT0gdGhpcy5kZWZhdWx0RmVhdHVyZUNvdW50KSkpIHtcbiAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5nZXQoJ2lnby5nZW8ucXVlcnkuZmVhdHVyZUNvdW50TWF4Jywge3ZhbHVlOiBsYXllci50aXRsZX0pLnN1YnNjcmliZShtZXNzYWdlID0+IHtcbiAgICAgICAgY29uc3QgbWVzc2FnZU9iaiA9IHRoaXMubWVzc2FnZVNlcnZpY2UuaW5mbyhtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5wcmV2aW91c01lc3NhZ2VJZHMucHVzaChtZXNzYWdlT2JqLnRvYXN0SWQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZlYXR1cmVzLm1hcCgoZmVhdHVyZTogRmVhdHVyZSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgbWFwTGFiZWwgPSBmZWF0dXJlLnByb3BlcnRpZXNbcXVlcnlEYXRhU291cmNlLm1hcExhYmVsXTtcblxuICAgICAgbGV0IGV4Y2x1ZGU7XG4gICAgICBpZiAobGF5ZXIub3B0aW9ucy5zb3VyY2VPcHRpb25zPy50eXBlID09PSAnd21zJykge1xuICAgICAgICBjb25zdCBzb3VyY2VPcHRpb25zID0gbGF5ZXIub3B0aW9uc1xuICAgICAgICAgIC5zb3VyY2VPcHRpb25zIGFzIFdNU0RhdGFTb3VyY2VPcHRpb25zO1xuICAgICAgICBleGNsdWRlID0gc291cmNlT3B0aW9ucyA/IHNvdXJjZU9wdGlvbnMuZXhjbHVkZUF0dHJpYnV0ZSA6IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgbGV0IHRpdGxlID0gdGhpcy5nZXRRdWVyeVRpdGxlKGZlYXR1cmUsIGxheWVyKTtcbiAgICAgIGlmICghdGl0bGUgJiYgZmVhdHVyZXMubGVuZ3RoID4gMSkge1xuICAgICAgICB0aXRsZSA9IGAke2xheWVyLnRpdGxlfSAoJHtpbmRleCArIDF9KWA7XG4gICAgICB9IGVsc2UgaWYgKCF0aXRsZSkge1xuICAgICAgICB0aXRsZSA9IGxheWVyLnRpdGxlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZmVhdHVyZS5tZXRhIHx8IHt9LCB7XG4gICAgICAgIGlkOiB1dWlkKCksXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBtYXBUaXRsZTogbWFwTGFiZWwsXG4gICAgICAgIHNvdXJjZVRpdGxlOiBsYXllci50aXRsZSxcbiAgICAgICAgb3JkZXI6IDEwMDAgLSBsYXllci56SW5kZXgsXG4gICAgICAgIGV4Y2x1ZGVBdHRyaWJ1dGU6IGV4Y2x1ZGVcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihmZWF0dXJlLCB7XG4gICAgICAgIG1ldGEsXG4gICAgICAgIHByb2plY3Rpb246XG4gICAgICAgICAgcXVlcnlEYXRhU291cmNlLm9wdGlvbnMudHlwZSA9PT0gJ2NhcnRvJ1xuICAgICAgICAgICAgPyAnRVBTRzo0MzI2J1xuICAgICAgICAgICAgOiBvcHRpb25zLnByb2plY3Rpb25cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVHZW9tZXRyeUZyb21VcmxDbGljayh1cmwpIHtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXM6IGFueSA9IHRoaXMuZ2V0UXVlcnlQYXJhbXModXJsLnRvTG93ZXJDYXNlKCkpO1xuICAgIGNvbnN0IGJib3hSYXcgPSBzZWFyY2hQYXJhbXMuYmJveDtcbiAgICBjb25zdCB3aWR0aCA9IHBhcnNlSW50KHNlYXJjaFBhcmFtcy53aWR0aCwgMTApO1xuICAgIGNvbnN0IGhlaWdodCA9IHBhcnNlSW50KHNlYXJjaFBhcmFtcy5oZWlnaHQsIDEwKTtcbiAgICBjb25zdCB4UG9zaXRpb24gPSBwYXJzZUludChzZWFyY2hQYXJhbXMuaSB8fCBzZWFyY2hQYXJhbXMueCwgMTApO1xuICAgIGNvbnN0IHlQb3NpdGlvbiA9IHBhcnNlSW50KHNlYXJjaFBhcmFtcy5qIHx8IHNlYXJjaFBhcmFtcy55LCAxMCk7XG5cbiAgICBjb25zdCBiYm94ID0gYmJveFJhdy5zcGxpdCgnLCcpO1xuICAgIGxldCB0aHJlc2hvbGQgPVxuICAgICAgKE1hdGguYWJzKHBhcnNlRmxvYXQoYmJveFswXSkpIC0gTWF0aC5hYnMocGFyc2VGbG9hdChiYm94WzJdKSkpICogMC4wNTtcblxuICAgIC8vIGZvciBjb250ZXh0IGluIGRlZ3JlZSAoRVBTRzo0MzI2LDQyNjkuLi4pXG4gICAgaWYgKE1hdGguYWJzKHBhcnNlRmxvYXQoYmJveFswXSkpIDwgMTgwKSB7XG4gICAgICB0aHJlc2hvbGQgPSAwLjA0NTtcbiAgICB9XG4gICAgY29uc3QgY2xpY2t4ID1cbiAgICAgIHBhcnNlRmxvYXQoYmJveFswXSkgK1xuICAgICAgKE1hdGguYWJzKHBhcnNlRmxvYXQoYmJveFswXSkgLSBwYXJzZUZsb2F0KGJib3hbMl0pKSAqIHhQb3NpdGlvbikgL1xuICAgICAgICB3aWR0aCAtXG4gICAgICB0aHJlc2hvbGQ7XG4gICAgY29uc3QgY2xpY2t5ID1cbiAgICAgIHBhcnNlRmxvYXQoYmJveFsxXSkgK1xuICAgICAgKE1hdGguYWJzKHBhcnNlRmxvYXQoYmJveFsxXSkgLSBwYXJzZUZsb2F0KGJib3hbM10pKSAqIHlQb3NpdGlvbikgL1xuICAgICAgICBoZWlnaHQgLVxuICAgICAgdGhyZXNob2xkO1xuICAgIGNvbnN0IGNsaWNreDEgPSBjbGlja3ggKyB0aHJlc2hvbGQgKiAyO1xuICAgIGNvbnN0IGNsaWNreTEgPSBjbGlja3kgKyB0aHJlc2hvbGQgKiAyO1xuXG4gICAgY29uc3Qgd2t0UG9seSA9XG4gICAgICAnUE9MWUdPTigoJyArXG4gICAgICBjbGlja3ggK1xuICAgICAgJyAnICtcbiAgICAgIGNsaWNreSArXG4gICAgICAnLCAnICtcbiAgICAgIGNsaWNreCArXG4gICAgICAnICcgK1xuICAgICAgY2xpY2t5MSArXG4gICAgICAnLCAnICtcbiAgICAgIGNsaWNreDEgK1xuICAgICAgJyAnICtcbiAgICAgIGNsaWNreTEgK1xuICAgICAgJywgJyArXG4gICAgICBjbGlja3gxICtcbiAgICAgICcgJyArXG4gICAgICBjbGlja3kgK1xuICAgICAgJywgJyArXG4gICAgICBjbGlja3ggK1xuICAgICAgJyAnICtcbiAgICAgIGNsaWNreSArXG4gICAgICAnKSknO1xuXG4gICAgY29uc3QgZm9ybWF0ID0gbmV3IG9sZm9ybWF0LldLVCgpO1xuICAgIGNvbnN0IHRlblBlcmNlbnRXaWR0aEdlb20gPSBmb3JtYXQucmVhZEZlYXR1cmUod2t0UG9seSk7XG4gICAgY29uc3QgZiA9IHRlblBlcmNlbnRXaWR0aEdlb20uZ2V0R2VvbWV0cnkoKSBhcyBhbnk7XG5cbiAgICBjb25zdCBuZXdHZW9tID0ge1xuICAgICAgdHlwZTogZi5nZXRUeXBlKCksXG4gICAgICBjb29yZGluYXRlczogZi5nZXRDb29yZGluYXRlcygpXG4gICAgfTtcblxuICAgIHJldHVybiBuZXdHZW9tO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0R01MMkRhdGEocmVzLCB6SW5kZXgsIGFsbG93ZWRGaWVsZHNBbmRBbGlhcz8pIHtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgb2xGb3JtYXRHTUwyKCk7XG4gICAgbGV0IGZlYXR1cmVzID0gcGFyc2VyLnJlYWRGZWF0dXJlcyhyZXMpO1xuICAgIC8vIEhhbmRsZSBub24gc3RhbmRhcmQgR01MIG91dHB1dCAoTWFwU2VydmVyKVxuICAgIGlmIChmZWF0dXJlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IHdtc1BhcnNlciA9IG5ldyBvbGZvcm1hdC5XTVNHZXRGZWF0dXJlSW5mbygpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZmVhdHVyZXMgPSB3bXNQYXJzZXIucmVhZEZlYXR1cmVzKHJlcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAncXVlcnkuc2VydmljZTogTXVsdGlwb2x5Z29ucyBhcmUgYmFkbHkgbWFuYWdlZCBpbiBtYXBzZXJ2ZXIgaW4gR01MMi4gVXNlIGFub3RoZXIgZm9ybWF0LidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmVhdHVyZXMubWFwKGZlYXR1cmUgPT5cbiAgICAgIHRoaXMuZmVhdHVyZVRvUmVzdWx0KGZlYXR1cmUsIHpJbmRleCwgYWxsb3dlZEZpZWxkc0FuZEFsaWFzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RHTUwzRGF0YShyZXMsIHpJbmRleCwgYWxsb3dlZEZpZWxkc0FuZEFsaWFzPykge1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBvbEZvcm1hdEdNTDMoKTtcbiAgICBsZXQgZmVhdHVyZXMgPSBbXTtcbiAgICB0cnkge1xuICAgICAgZmVhdHVyZXMgPSBwYXJzZXIucmVhZEZlYXR1cmVzKHJlcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKCdxdWVyeS5zZXJ2aWNlOiBHTUwzIGlzIG5vdCB3ZWxsIHN1cHBvcnRlZCcpO1xuICAgIH1cbiAgICByZXR1cm4gZmVhdHVyZXMubWFwKGZlYXR1cmUgPT5cbiAgICAgIHRoaXMuZmVhdHVyZVRvUmVzdWx0KGZlYXR1cmUsIHpJbmRleCwgYWxsb3dlZEZpZWxkc0FuZEFsaWFzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RHZW9KU09ORGF0YShyZXMsIHpJbmRleCwgYWxsb3dlZEZpZWxkc0FuZEFsaWFzPykge1xuICAgIGxldCBmZWF0dXJlcyA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBmZWF0dXJlcyA9IEpTT04ucGFyc2UocmVzLnJlcGxhY2UoLyhcXHJ8XFxuKS9nLCAnICcpKS5mZWF0dXJlcztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ3F1ZXJ5LnNlcnZpY2U6IFVuYWJsZSB0byBwYXJzZSBnZW9qc29uJywgJ1xcbicsIHJlcyk7XG4gICAgfVxuICAgIGZlYXR1cmVzLm1hcChmZWF0dXJlID0+IGZlYXR1cmUubWV0YSA9IHtcbiAgICAgIGlkOiB1dWlkKCksXG4gICAgICBvcmRlcjogMTAwMCAtIHpJbmRleCxcbiAgICAgIGFsaWFzOiBhbGxvd2VkRmllbGRzQW5kQWxpYXNcbiAgICB9KTtcbiAgICByZXR1cm4gZmVhdHVyZXM7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RFc3JpSlNPTkRhdGEocmVzLCB6SW5kZXgsIGFsbG93ZWRGaWVsZHNBbmRBbGlhcykge1xuICAgIGlmIChyZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChKU09OLnBhcnNlKHJlcykuZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBvbEZvcm1hdEVzcmlKU09OKCk7XG4gICAgY29uc3QgZmVhdHVyZXMgPSBwYXJzZXIucmVhZEZlYXR1cmVzKHJlcyk7XG5cbiAgICByZXR1cm4gZmVhdHVyZXMubWFwKGZlYXR1cmUgPT4gdGhpcy5mZWF0dXJlVG9SZXN1bHQoZmVhdHVyZSwgekluZGV4LCBhbGxvd2VkRmllbGRzQW5kQWxpYXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdFRleHREYXRhKHJlcykge1xuICAgIC8vIFRPRE9cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RIdG1sRGF0YShcbiAgICByZXMsXG4gICAgaHRtbFRhcmdldDogUXVlcnlIdG1sVGFyZ2V0LFxuICAgIHVybCxcbiAgICBpbXBvc2VkR2VvbWV0cnk/LFxuICAgIGltcG9zZWRQcm9wZXJ0aWVzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfVxuICApIHtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXM6IGFueSA9IHRoaXMuZ2V0UXVlcnlQYXJhbXModXJsLnRvTG93ZXJDYXNlKCkpO1xuICAgIGNvbnN0IHByb2plY3Rpb24gPSBzZWFyY2hQYXJhbXMuY3JzIHx8IHNlYXJjaFBhcmFtcy5zcnMgfHwgJ0VQU0c6Mzg1Nyc7XG4gICAgY29uc3QgZ2VvbVRvQWRkID0gdGhpcy5jcmVhdGVHZW9tZXRyeUZyb21VcmxDbGljayh1cmwpO1xuXG4gICAgaWYgKFxuICAgICAgaHRtbFRhcmdldCAhPT0gUXVlcnlIdG1sVGFyZ2V0LkJMQU5LICYmXG4gICAgICBodG1sVGFyZ2V0ICE9PSBRdWVyeUh0bWxUYXJnZXQuSUZSQU1FXG4gICAgKSB7XG4gICAgICBodG1sVGFyZ2V0ID0gUXVlcnlIdG1sVGFyZ2V0LklGUkFNRTtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5VGFnU3RhcnQgPSByZXMudG9Mb3dlckNhc2UoKS5pbmRleE9mKCc8Ym9keT4nKTtcbiAgICBjb25zdCBib2R5VGFnRW5kID0gcmVzLnRvTG93ZXJDYXNlKCkubGFzdEluZGV4T2YoJzwvYm9keT4nKSArIDc7XG4gICAgLy8gcmVwbGFjZSBcXHIgXFxuICBhbmQgJyAnIHdpdGggJycgdG8gdmFsaWRhdGUgaWYgdGhlIGJvZHkgaXMgcmVhbGx5IGVtcHR5LiBDbGVhciBhbGwgdGhlIGh0bWwgdGFncyBmcm9tIGJvZHlcbiAgICBjb25zdCBib2R5ID0gc3RyaXB0YWdzKHJlcy5zbGljZShib2R5VGFnU3RhcnQsIGJvZHlUYWdFbmQpLnJlcGxhY2UoLyhcXHJ8XFxufFxccykvZywgJycpKTtcbiAgICBpZiAoYm9keSA9PT0gJycgfHwgcmVzID09PSAnJykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IEZFQVRVUkUsXG4gICAgICAgIHByb2plY3Rpb24sXG4gICAgICAgIHByb3BlcnRpZXM6IE9iamVjdC5hc3NpZ24oeyB0YXJnZXQ6IGh0bWxUYXJnZXQsIGJvZHk6IHJlcywgdXJsIH0sIGltcG9zZWRQcm9wZXJ0aWVzKSxcbiAgICAgICAgZ2VvbWV0cnk6IGltcG9zZWRHZW9tZXRyeSB8fCBnZW9tVG9BZGRcbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRRdWVyeVBhcmFtcyh1cmwpIHtcbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IHVybC5zcGxpdCgnPycpO1xuICAgIGlmICghcXVlcnlTdHJpbmdbMV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGFpcnMgPSBxdWVyeVN0cmluZ1sxXS5zcGxpdCgnJicpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgcGFpcnMuZm9yRWFjaChwYWlyID0+IHtcbiAgICAgIHBhaXIgPSBwYWlyLnNwbGl0KCc9Jyk7XG4gICAgICByZXN1bHRbcGFpclswXV0gPSBkZWNvZGVVUklDb21wb25lbnQocGFpclsxXSB8fCAnJyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBmZWF0dXJlVG9SZXN1bHQoXG4gICAgZmVhdHVyZU9MOiBvbEZlYXR1cmU8b2xnZW9tLkdlb21ldHJ5PixcbiAgICB6SW5kZXg6IG51bWJlcixcbiAgICBhbGxvd2VkRmllbGRzQW5kQWxpYXM/XG4gICk6IEZlYXR1cmUge1xuICAgIGNvbnN0IGZlYXR1cmVHZW9tZXRyeSA9IGZlYXR1cmVPTC5nZXRHZW9tZXRyeSgpIGFzIGFueTtcbiAgICBjb25zdCBwcm9wZXJ0aWVzOiBhbnkgPSBPYmplY3QuYXNzaWduKHt9LCBmZWF0dXJlT0wuZ2V0UHJvcGVydGllcygpKTtcbiAgICBkZWxldGUgcHJvcGVydGllcy5nZW9tZXRyeTtcbiAgICBkZWxldGUgcHJvcGVydGllcy5HRU9NRVRSSUU7XG4gICAgZGVsZXRlIHByb3BlcnRpZXMuYm91bmRlZEJ5O1xuICAgIGRlbGV0ZSBwcm9wZXJ0aWVzLnNoYXBlO1xuICAgIGRlbGV0ZSBwcm9wZXJ0aWVzLlNIQVBFO1xuICAgIGRlbGV0ZSBwcm9wZXJ0aWVzLlNIQVBFX1M7XG4gICAgZGVsZXRlIHByb3BlcnRpZXMuU0hBUEVfTDtcbiAgICBkZWxldGUgcHJvcGVydGllcy5TSEFQRV9QO1xuICAgIGRlbGV0ZSBwcm9wZXJ0aWVzLnRoZV9nZW9tO1xuICAgIGRlbGV0ZSBwcm9wZXJ0aWVzLmdlb207XG4gICAgZGVsZXRlIHByb3BlcnRpZXMuZ2VvbTMyMTk4O1xuXG4gICAgbGV0IGdlb21ldHJ5O1xuICAgIGlmIChmZWF0dXJlR2VvbWV0cnkpIHtcbiAgICAgIGdlb21ldHJ5ID0ge1xuICAgICAgICB0eXBlOiBmZWF0dXJlR2VvbWV0cnkuZ2V0VHlwZSgpLFxuICAgICAgICBjb29yZGluYXRlczogZmVhdHVyZUdlb21ldHJ5LmdldENvb3JkaW5hdGVzKClcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IEZFQVRVUkUsXG4gICAgICBwcm9qZWN0aW9uOiB1bmRlZmluZWQsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgZ2VvbWV0cnksXG4gICAgICBtZXRhOiB7XG4gICAgICAgIGlkOiB1dWlkKCksXG4gICAgICAgIG9yZGVyOiAxMDAwIC0gekluZGV4LFxuICAgICAgICBhbGlhczogYWxsb3dlZEZpZWxkc0FuZEFsaWFzXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UXVlcnlVcmwoXG4gICAgZGF0YXNvdXJjZTogUXVlcnlhYmxlRGF0YVNvdXJjZSxcbiAgICBvcHRpb25zOiBRdWVyeU9wdGlvbnMsXG4gICAgZm9yY2VHTUwyID0gZmFsc2UsXG4gICAgbWFwRXh0ZW50PzogTWFwRXh0ZW50XG4gICk6IHN0cmluZyB7XG4gICAgbGV0IHVybDtcblxuICAgIGlmIChkYXRhc291cmNlLm9wdGlvbnMucXVlcnlVcmwpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEN1c3RvbVF1ZXJ5VXJsKGRhdGFzb3VyY2UsIG9wdGlvbnMsIG1hcEV4dGVudCk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChkYXRhc291cmNlLmNvbnN0cnVjdG9yKSB7XG4gICAgICBjYXNlIFdNU0RhdGFTb3VyY2U6XG4gICAgICAgIGNvbnN0IHdtc0RhdGFzb3VyY2UgPSBkYXRhc291cmNlIGFzIFdNU0RhdGFTb3VyY2U7XG5cbiAgICAgICAgY29uc3QgV01TR2V0RmVhdHVyZUluZm9PcHRpb25zID0ge1xuICAgICAgICAgIElORk9fRk9STUFUOlxuICAgICAgICAgICAgd21zRGF0YXNvdXJjZS5wYXJhbXMuSU5GT19GT1JNQVQgfHxcbiAgICAgICAgICAgIHRoaXMuZ2V0TWltZUluZm9Gb3JtYXQoZGF0YXNvdXJjZS5vcHRpb25zLnF1ZXJ5Rm9ybWF0KSxcbiAgICAgICAgICBRVUVSWV9MQVlFUlM6IHdtc0RhdGFzb3VyY2UucGFyYW1zLkxBWUVSUyxcbiAgICAgICAgICBGRUFUVVJFX0NPVU5UOiB3bXNEYXRhc291cmNlLnBhcmFtcy5GRUFUVVJFX0NPVU5UIHx8IHRoaXMuZGVmYXVsdEZlYXR1cmVDb3VudFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh3bXNEYXRhc291cmNlLnBhcmFtcy5GRUFUVVJFX0NPVU5UKSB7XG4gICAgICAgICAgdGhpcy5mZWF0dXJlQ291bnQgPSB3bXNEYXRhc291cmNlLnBhcmFtcy5GRUFUVVJFX0NPVU5UO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvcmNlR01MMikge1xuICAgICAgICAgIFdNU0dldEZlYXR1cmVJbmZvT3B0aW9ucy5JTkZPX0ZPUk1BVCA9IHRoaXMuZ2V0TWltZUluZm9Gb3JtYXQoXG4gICAgICAgICAgICBRdWVyeUZvcm1hdC5HTUwyXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHVybCA9IHdtc0RhdGFzb3VyY2Uub2wuZ2V0RmVhdHVyZUluZm9VcmwoXG4gICAgICAgICAgb3B0aW9ucy5jb29yZGluYXRlcyxcbiAgICAgICAgICBvcHRpb25zLnJlc29sdXRpb24sXG4gICAgICAgICAgb3B0aW9ucy5wcm9qZWN0aW9uLFxuICAgICAgICAgIFdNU0dldEZlYXR1cmVJbmZvT3B0aW9uc1xuICAgICAgICApO1xuICAgICAgICAvLyBjb25zdCB3bXNWZXJzaW9uID1cbiAgICAgICAgLy8gICB3bXNEYXRhc291cmNlLnBhcmFtcy5WRVJTSU9OIHx8XG4gICAgICAgIC8vICAgd21zRGF0YXNvdXJjZS5wYXJhbXMudmVyc2lvbiB8fFxuICAgICAgICAvLyAgICcxLjMuMCc7XG4gICAgICAgIC8vIGlmICh3bXNWZXJzaW9uICE9PSAnMS4zLjAnKSB7XG4gICAgICAgIC8vICAgdXJsID0gdXJsLnJlcGxhY2UoJyZJPScsICcmWD0nKTtcbiAgICAgICAgLy8gICB1cmwgPSB1cmwucmVwbGFjZSgnJko9JywgJyZZPScpO1xuICAgICAgICAvLyB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDYXJ0b0RhdGFTb3VyY2U6XG4gICAgICAgIGNvbnN0IGNhcnRvRGF0YXNvdXJjZSA9IGRhdGFzb3VyY2UgYXMgQ2FydG9EYXRhU291cmNlO1xuICAgICAgICBjb25zdCBiYXNlVXJsID1cbiAgICAgICAgICAnaHR0cHM6Ly8nICtcbiAgICAgICAgICBjYXJ0b0RhdGFzb3VyY2Uub3B0aW9ucy5hY2NvdW50ICtcbiAgICAgICAgICAnLmNhcnRvLmNvbS9hcGkvdjIvc3FsPyc7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9ICdmb3JtYXQ9R2VvSlNPTic7XG4gICAgICAgIGNvbnN0IHNxbCA9XG4gICAgICAgICAgJyZxPScgKyBjYXJ0b0RhdGFzb3VyY2Uub3B0aW9ucy5jb25maWcubGF5ZXJzWzBdLm9wdGlvbnMuc3FsO1xuICAgICAgICBjb25zdCBjbGF1c2UgPVxuICAgICAgICAgICcgV0hFUkUgU1RfSW50ZXJzZWN0cyh0aGVfZ2VvbV93ZWJtZXJjYXRvcixTVF9CVUZGRVIoU1RfU2V0U1JJRChTVF9QT0lOVCgnO1xuICAgICAgICBjb25zdCBtZXRlcnMgPSBjYXJ0b0RhdGFzb3VyY2Uub3B0aW9ucy5xdWVyeVByZWNpc2lvblxuICAgICAgICAgID8gY2FydG9EYXRhc291cmNlLm9wdGlvbnMucXVlcnlQcmVjaXNpb25cbiAgICAgICAgICA6ICcxMDAwJztcbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPVxuICAgICAgICAgIG9wdGlvbnMuY29vcmRpbmF0ZXNbMF0gK1xuICAgICAgICAgICcsJyArXG4gICAgICAgICAgb3B0aW9ucy5jb29yZGluYXRlc1sxXSArXG4gICAgICAgICAgJyksMzg1NyksJyArXG4gICAgICAgICAgbWV0ZXJzICtcbiAgICAgICAgICAnKSknO1xuXG4gICAgICAgIHVybCA9IGAke2Jhc2VVcmx9JHtmb3JtYXR9JHtzcWx9JHtjbGF1c2V9JHtjb29yZGluYXRlc31gO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSW1hZ2VBcmNHSVNSZXN0RGF0YVNvdXJjZTpcbiAgICAgIGNhc2UgVGlsZUFyY0dJU1Jlc3REYXRhU291cmNlOlxuICAgICAgICBjb25zdCB0aWxlQXJjR0lTUmVzdERhdGFzb3VyY2UgPSBkYXRhc291cmNlIGFzIFRpbGVBcmNHSVNSZXN0RGF0YVNvdXJjZTtcbiAgICAgICAgY29uc3QgZGVsdGFYID0gTWF0aC5hYnMobWFwRXh0ZW50WzBdIC0gbWFwRXh0ZW50WzJdKTtcbiAgICAgICAgY29uc3QgZGVsdGFZID0gTWF0aC5hYnMobWFwRXh0ZW50WzFdIC0gbWFwRXh0ZW50WzNdKTtcbiAgICAgICAgY29uc3QgbWF4RGVsdGEgPSBkZWx0YVggPiBkZWx0YVkgPyBkZWx0YVggOiBkZWx0YVk7XG4gICAgICAgIGNvbnN0IGNsaWNrQnVmZmVyID0gbWF4RGVsdGEgKiAwLjAwNTtcbiAgICAgICAgY29uc3QgdGhyZXNob2xkID0gdGlsZUFyY0dJU1Jlc3REYXRhc291cmNlLm9wdGlvbnMucXVlcnlQcmVjaXNpb24gPyB0aWxlQXJjR0lTUmVzdERhdGFzb3VyY2Uub3B0aW9ucy5xdWVyeVByZWNpc2lvbiA6IGNsaWNrQnVmZmVyO1xuICAgICAgICBjb25zdCBleHRlbnQgPSBvbGV4dGVudC5idWZmZXIoXG4gICAgICAgICAgb2xleHRlbnQuYm91bmRpbmdFeHRlbnQoW29wdGlvbnMuY29vcmRpbmF0ZXNdKSxcbiAgICAgICAgICB0aHJlc2hvbGRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc2VydmljZVVybCA9XG4gICAgICAgICAgdGlsZUFyY0dJU1Jlc3REYXRhc291cmNlLm9wdGlvbnMudXJsICtcbiAgICAgICAgICAnLycgK1xuICAgICAgICAgIHRpbGVBcmNHSVNSZXN0RGF0YXNvdXJjZS5vcHRpb25zLmxheWVyICtcbiAgICAgICAgICAnL3F1ZXJ5Lyc7XG4gICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgICAgICAgICd7XCJ4bWluXCI6JyArXG4gICAgICAgICAgICBleHRlbnRbMF0gK1xuICAgICAgICAgICAgJyxcInltaW5cIjonICtcbiAgICAgICAgICAgIGV4dGVudFsxXSArXG4gICAgICAgICAgICAnLFwieG1heFwiOicgK1xuICAgICAgICAgICAgZXh0ZW50WzJdICtcbiAgICAgICAgICAgICcsXCJ5bWF4XCI6JyArXG4gICAgICAgICAgICBleHRlbnRbM10gK1xuICAgICAgICAgICAgJyxcInNwYXRpYWxSZWZlcmVuY2VcIjp7XCJ3a2lkXCI6MTAyMTAwfX0nXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IFtcbiAgICAgICAgICAnZj1qc29uJyxcbiAgICAgICAgICBgZ2VvbWV0cnk9JHtnZW9tZXRyeX1gLFxuICAgICAgICAgICdnZW9tZXRyeVR5cGU9ZXNyaUdlb21ldHJ5RW52ZWxvcGUnLFxuICAgICAgICAgICdpblNSPTEwMjEwMCcsXG4gICAgICAgICAgJ3NwYXRpYWxSZWw9ZXNyaVNwYXRpYWxSZWxJbnRlcnNlY3RzJyxcbiAgICAgICAgICAnb3V0RmllbGRzPSonLFxuICAgICAgICAgICdyZXR1cm5HZW9tZXRyeT10cnVlJyxcbiAgICAgICAgICAnb3V0U1I9MTAyMTAwJ1xuICAgICAgICBdO1xuICAgICAgICB1cmwgPSBgJHtzZXJ2aWNlVXJsfT8ke3BhcmFtcy5qb2luKCcmJyl9YDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNaW1lSW5mb0Zvcm1hdChxdWVyeUZvcm1hdDogc3RyaW5nKSB7XG4gICAgbGV0IG1pbWUgPSAnYXBwbGljYXRpb24vdm5kLm9nYy5nbWwnO1xuICAgIGNvbnN0IGtleUVudW0gPSBPYmplY3Qua2V5cyhRdWVyeUZvcm1hdCkuZmluZChcbiAgICAgIGtleSA9PiBRdWVyeUZvcm1hdFtrZXldID09PSBxdWVyeUZvcm1hdFxuICAgICk7XG4gICAgaWYgKGtleUVudW0pIHtcbiAgICAgIG1pbWUgPSBRdWVyeUZvcm1hdE1pbWVUeXBlW2tleUVudW1dO1xuICAgIH1cblxuICAgIHJldHVybiBtaW1lO1xuICB9XG5cbiAgZ2V0QWxsb3dlZEZpZWxkc0FuZEFsaWFzKGxheWVyOiBhbnkpIHtcbiAgICBsZXQgYWxsb3dlZEZpZWxkc0FuZEFsaWFzO1xuICAgIGlmIChcbiAgICAgIGxheWVyLm9wdGlvbnM/LnNvdXJjZT8ub3B0aW9ucz8uc291cmNlRmllbGRzICYmXG4gICAgICBsYXllci5vcHRpb25zLnNvdXJjZS5vcHRpb25zLnNvdXJjZUZpZWxkcy5sZW5ndGggPj0gMVxuICAgICkge1xuICAgICAgYWxsb3dlZEZpZWxkc0FuZEFsaWFzID0ge307XG4gICAgICBsYXllci5vcHRpb25zLnNvdXJjZS5vcHRpb25zLnNvdXJjZUZpZWxkcy5mb3JFYWNoKHNvdXJjZUZpZWxkID0+IHtcbiAgICAgICAgY29uc3QgYWxpYXMgPSBzb3VyY2VGaWVsZC5hbGlhcyA/IHNvdXJjZUZpZWxkLmFsaWFzIDogc291cmNlRmllbGQubmFtZTtcbiAgICAgICAgYWxsb3dlZEZpZWxkc0FuZEFsaWFzW3NvdXJjZUZpZWxkLm5hbWVdID0gYWxpYXM7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFsbG93ZWRGaWVsZHNBbmRBbGlhcztcbiAgfVxuXG4gIGdldFF1ZXJ5VGl0bGUoZmVhdHVyZTogRmVhdHVyZSwgbGF5ZXI6IExheWVyKTogc3RyaW5nIHtcbiAgICBsZXQgdGl0bGU7XG4gICAgaWYgKGxheWVyLm9wdGlvbnM/LnNvdXJjZT8ub3B0aW9ucykge1xuICAgICAgY29uc3QgZGF0YVNvdXJjZU9wdGlvbnMgPSBsYXllci5vcHRpb25zLnNvdXJjZVxuICAgICAgICAub3B0aW9ucyBhcyBRdWVyeWFibGVEYXRhU291cmNlT3B0aW9ucztcbiAgICAgIGlmIChkYXRhU291cmNlT3B0aW9ucy5xdWVyeVRpdGxlKSB7XG4gICAgICAgIHRpdGxlID0gdGhpcy5nZXRMYWJlbE1hdGNoKGZlYXR1cmUsIGRhdGFTb3VyY2VPcHRpb25zLnF1ZXJ5VGl0bGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aXRsZTtcbiAgfVxuXG4gIGdldExhYmVsTWF0Y2goZmVhdHVyZTogRmVhdHVyZSwgbGFiZWxNYXRjaCk6IHN0cmluZyB7XG4gICAgbGV0IGxhYmVsID0gbGFiZWxNYXRjaDtcbiAgICBjb25zdCBsYWJlbFRvR2V0ID0gQXJyYXkuZnJvbShsYWJlbE1hdGNoLm1hdGNoQWxsKC9cXCRcXHsoW15cXHtcXH1dKylcXH0vZykpO1xuXG4gICAgbGFiZWxUb0dldC5mb3JFYWNoKHYgPT4ge1xuICAgICAgbGFiZWwgPSBsYWJlbC5yZXBsYWNlKHZbMF0sIGZlYXR1cmUucHJvcGVydGllc1t2WzFdXSk7XG4gICAgfSk7XG5cbiAgICAvLyBOb3RoaW5nIGRvbmU/IGNoZWNrIGZlYXR1cmUncyBhdHRyaWJ1dGVcbiAgICBpZiAobGFiZWxUb0dldC5sZW5ndGggPT09IDAgJiYgbGFiZWwgPT09IGxhYmVsTWF0Y2gpIHtcbiAgICAgIGxhYmVsID0gZmVhdHVyZS5wcm9wZXJ0aWVzW2xhYmVsTWF0Y2hdIHx8IGxhYmVsTWF0Y2g7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhYmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBkYXRhc291cmNlIFF1ZXJ5YWJsZURhdGFTb3VyY2VcbiAgICogQHBhcmFtIG9wdGlvbnMgUXVlcnlPcHRpb25zXG4gICAqIEBtYXBFeHRlbnQgZXh0ZW50IG9mIHRoZSBtYXAgd2hlbiBjbGljayBldmVudFxuICAgKlxuICAgKi9cblxuICBnZXRDdXN0b21RdWVyeVVybChcbiAgICBkYXRhc291cmNlOiBRdWVyeWFibGVEYXRhU291cmNlLFxuICAgIG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyxcbiAgICBtYXBFeHRlbnQ/OiBNYXBFeHRlbnQpOiBzdHJpbmcge1xuXG4gICAgY29uc3QgZXh0ZW50ID0gb2xleHRlbnQuZ2V0Rm9yVmlld0FuZFNpemUoXG4gICAgICBvcHRpb25zLmNvb3JkaW5hdGVzLFxuICAgICAgb3B0aW9ucy5yZXNvbHV0aW9uLFxuICAgICAgMCxcbiAgICAgIFsxMDEsIDEwMV1cbiAgICApO1xuXG4gICAgbGV0IHVybCA9IGRhdGFzb3VyY2Uub3B0aW9ucy5xdWVyeVVybC5yZXBsYWNlKC9cXHtiYm94XFx9L2csIGV4dGVudC5qb2luKCcsJykpXG4gICAgLnJlcGxhY2UoL1xce3htaW5cXH0vZywgbWFwRXh0ZW50WzBdLnRvU3RyaW5nKCkpXG4gICAgLnJlcGxhY2UoL1xce3ltaW5cXH0vZywgbWFwRXh0ZW50WzFdLnRvU3RyaW5nKCkpXG4gICAgLnJlcGxhY2UoL1xce3htYXhcXH0vZywgbWFwRXh0ZW50WzJdLnRvU3RyaW5nKCkpXG4gICAgLnJlcGxhY2UoL1xce3ltYXhcXH0vZywgbWFwRXh0ZW50WzNdLnRvU3RyaW5nKCkpXG4gICAgLnJlcGxhY2UoL1xce3hcXH0vZywgb3B0aW9ucy5jb29yZGluYXRlc1swXS50b1N0cmluZygpKVxuICAgIC5yZXBsYWNlKC9cXHt5XFx9L2csIG9wdGlvbnMuY29vcmRpbmF0ZXNbMV0udG9TdHJpbmcoKSlcbiAgICAucmVwbGFjZSgvXFx7cmVzb2x1dGlvblxcfS9nLCBvcHRpb25zLnJlc29sdXRpb24udG9TdHJpbmcoKSlcbiAgICAucmVwbGFjZSgvXFx7c3JpZFxcfS9nLCBvcHRpb25zLnByb2plY3Rpb24ucmVwbGFjZSgnRVBTRzonLCcnKSk7XG5cbiAgICByZXR1cm4gdXJsO1xuICB9XG59XG4iXX0=
|