UNPKG

angular-cesium

Version:
127 lines 22.6 kB
import { __assign, __decorate, __metadata, __read, __spread } from "tslib"; import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; import { CoordinateConverter } from '../../../angular-cesium/services/coordinate-converter/coordinate-converter.service'; import { EditActions } from '../../models/edit-actions.enum'; import { EditModes } from '../../models/edit-mode.enum'; import { PolylinesEditorService } from '../../services/entity-editors/polyline-editor/polylines-editor.service'; /** * * Range and bearing component that is used to draw range and bearing on the map. * The inputs are used to customize the range and bearing style and behavior. * Create component reference and use the `create()` function to start creating R&B on the map. * The function receives an optional RangeAndBearingOptions object that defines the created range and bearing style and behavior * (on top of the default and global definitions). * * Usage: * * my-component.ts: * * ``` * \@ViewChild('rangeAndBearing', {static: false}) private rangeAndBearing: RangeAndBearingComponent; // Get R&B reference * // ... * this.rangeAndBearing.create({style: { pointProps: { pixelSize: 12 } }, bearingLabelsStyle: { fillColor: Cesium.Color.GREEN } }); * ``` * * my-component.html * ``` * <range-and-bearing #rangeAndBearing></range-and-bearing> // Optional inputs defines global style and behavior. * ``` * */ var RangeAndBearingComponent = /** @class */ (function () { function RangeAndBearingComponent(polylineEditor, coordinateConverter) { this.polylineEditor = polylineEditor; this.coordinateConverter = coordinateConverter; this.lineEditOptions = {}; this.labelsStyle = {}; this.distanceLabelsStyle = {}; this.bearingLabelsStyle = {}; } RangeAndBearingComponent.prototype.create = function (_a) { var _this = this; var _b = _a === void 0 ? { lineEditOptions: {}, labelsStyle: {}, distanceLabelsStyle: {}, bearingLabelsStyle: {} } : _a, _c = _b.lineEditOptions, lineEditOptions = _c === void 0 ? {} : _c, _d = _b.labelsStyle, labelsStyle = _d === void 0 ? {} : _d, _e = _b.distanceLabelsStyle, distanceLabelsStyle = _e === void 0 ? {} : _e, _f = _b.bearingLabelsStyle, bearingLabelsStyle = _f === void 0 ? {} : _f, bearingStringFn = _b.bearingStringFn, distanceStringFn = _b.distanceStringFn, labelsRenderFn = _b.labelsRenderFn; var rnb = this.polylineEditor.create(__assign(__assign({ allowDrag: false, pointProps: { showVirtual: false, pixelSize: 8, }, polylineProps: { width: 2, } }, this.lineEditOptions), lineEditOptions)); if (labelsRenderFn) { rnb.setLabelsRenderFn(labelsRenderFn); } else if (this.labelsRenderFn) { rnb.setLabelsRenderFn(this.labelsRenderFn); } else { rnb.setLabelsRenderFn(function (update) { var positions = update.positions; var totalDistance = 0; if (!positions || positions.length === 0) { return []; } return (update.editMode === EditModes.CREATE && update.editAction !== EditActions.ADD_LAST_POINT ? __spread(positions, [update.updatedPosition]) : positions).reduce(function (labels, position, index, array) { if (index !== 0) { var previousPosition = array[index - 1]; var bearing = _this.coordinateConverter.bearingToCartesian(previousPosition, position); var distance = Cesium.Cartesian3.distance(previousPosition, position) / 1000; labels.push(__assign(__assign(__assign(__assign({ text: (bearingStringFn && bearingStringFn(bearing)) || (_this.bearingStringFn && _this.bearingStringFn(bearing)) || bearing.toFixed(2) + "\u00B0", scale: 0.2, font: '80px Helvetica', pixelOffset: new Cesium.Cartesian2(-20, -8), position: new Cesium.Cartesian3((position.x + previousPosition.x) / 2, (position.y + previousPosition.y) / 2, (position.z + previousPosition.z) / 2), fillColor: Cesium.Color.WHITE, outlineColor: Cesium.Color.WHITE, showBackground: true }, _this.labelsStyle), labelsStyle), _this.bearingLabelsStyle), bearingLabelsStyle), __assign(__assign(__assign(__assign({ text: (distanceStringFn && distanceStringFn(totalDistance + distance)) || (_this.distanceStringFn && _this.distanceStringFn(totalDistance + distance)) || (totalDistance + distance).toFixed(2) + " Km", scale: 0.2, font: '80px Helvetica', pixelOffset: new Cesium.Cartesian2(-35, -8), position: position, fillColor: Cesium.Color.WHITE, outlineColor: Cesium.Color.WHITE, showBackground: true }, _this.labelsStyle), labelsStyle), _this.distanceLabelsStyle), distanceLabelsStyle)); totalDistance += distance; } return labels; }, [ __assign(__assign(__assign(__assign({ text: (distanceStringFn && distanceStringFn(0)) || (_this.distanceStringFn && _this.distanceStringFn(0)) || "0 Km", scale: 0.2, font: '80px Helvetica', pixelOffset: new Cesium.Cartesian2(-20, -8), position: positions[0], fillColor: Cesium.Color.WHITE, outlineColor: Cesium.Color.WHITE, showBackground: true }, _this.labelsStyle), labelsStyle), _this.distanceLabelsStyle), distanceLabelsStyle), ]); }); } return rnb; }; RangeAndBearingComponent.ctorParameters = function () { return [ { type: PolylinesEditorService }, { type: CoordinateConverter } ]; }; __decorate([ Input(), __metadata("design:type", Object) ], RangeAndBearingComponent.prototype, "lineEditOptions", void 0); __decorate([ Input(), __metadata("design:type", Object) ], RangeAndBearingComponent.prototype, "labelsStyle", void 0); __decorate([ Input(), __metadata("design:type", Object) ], RangeAndBearingComponent.prototype, "distanceLabelsStyle", void 0); __decorate([ Input(), __metadata("design:type", Object) ], RangeAndBearingComponent.prototype, "bearingLabelsStyle", void 0); __decorate([ Input(), __metadata("design:type", Function) ], RangeAndBearingComponent.prototype, "bearingStringFn", void 0); __decorate([ Input(), __metadata("design:type", Function) ], RangeAndBearingComponent.prototype, "distanceStringFn", void 0); __decorate([ Input(), __metadata("design:type", Function) ], RangeAndBearingComponent.prototype, "labelsRenderFn", void 0); RangeAndBearingComponent = __decorate([ Component({ selector: 'range-and-bearing', template: "\n <polylines-editor></polylines-editor>\n ", changeDetection: ChangeDetectionStrategy.OnPush, providers: [PolylinesEditorService] }), __metadata("design:paramtypes", [PolylinesEditorService, CoordinateConverter]) ], RangeAndBearingComponent); return RangeAndBearingComponent; }()); export { RangeAndBearingComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UtYW5kLWJlYXJpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1jZXNpdW0vIiwic291cmNlcyI6WyJsaWIvYW5ndWxhci1jZXNpdW0td2lkZ2V0cy9jb21wb25lbnRzL3JhbmdlLWFuZC1iZWFyaW5nL3JhbmdlLWFuZC1iZWFyaW5nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0ZBQW9GLENBQUM7QUFDekgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBSzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQztBQUVoSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFTSDtJQVNFLGtDQUFvQixjQUFzQyxFQUFVLG1CQUF3QztRQUF4RixtQkFBYyxHQUFkLGNBQWMsQ0FBd0I7UUFBVSx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBUm5HLG9CQUFlLEdBQXlCLEVBQUUsQ0FBQztRQUMzQyxnQkFBVyxHQUFnQixFQUFFLENBQUM7UUFDOUIsd0JBQW1CLEdBQWdCLEVBQUUsQ0FBQztRQUN0Qyx1QkFBa0IsR0FBZ0IsRUFBRSxDQUFDO0lBTTlDLENBQUM7SUFFRCx5Q0FBTSxHQUFOLFVBQ0UsRUFRbUg7UUFUckgsaUJBK0dDO1lBOUdDLG1IQVFtSCxFQVBqSCx1QkFBb0IsRUFBcEIseUNBQW9CLEVBQ3BCLG1CQUFnQixFQUFoQixxQ0FBZ0IsRUFDaEIsMkJBQXdCLEVBQXhCLDZDQUF3QixFQUN4QiwwQkFBdUIsRUFBdkIsNENBQXVCLEVBQ3ZCLG9DQUFlLEVBQ2Ysc0NBQWdCLEVBQ2hCLGtDQUFjO1FB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RSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFDaEMsY0FBYyxFQUFFLElBQUksSUFDaEIsS0FBSSxDQUFDLFdBQW1CLEdBQ3hCLFdBQW1CLEdBQ25CLEtBQUksQ0FBQyxtQkFBMkIsR0FDaEMsbUJBQTJCO2lCQUVsQyxDQUNGLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDOztnQkFsSG1DLHNCQUFzQjtnQkFBK0IsbUJBQW1COztJQVJuRztRQUFSLEtBQUssRUFBRTs7cUVBQTRDO0lBQzNDO1FBQVIsS0FBSyxFQUFFOztpRUFBK0I7SUFDOUI7UUFBUixLQUFLLEVBQUU7O3lFQUF1QztJQUN0QztRQUFSLEtBQUssRUFBRTs7d0VBQXNDO0lBQ3JDO1FBQVIsS0FBSyxFQUFFOztxRUFBNkM7SUFDNUM7UUFBUixLQUFLLEVBQUU7O3NFQUE4QztJQUM3QztRQUFSLEtBQUssRUFBRTs7b0VBQXFGO0lBUGxGLHdCQUF3QjtRQVJwQyxTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsbUJBQW1CO1lBQzdCLFFBQVEsRUFBRSxpREFFVDtZQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO1lBQy9DLFNBQVMsRUFBRSxDQUFDLHNCQUFzQixDQUFDO1NBQ3BDLENBQUM7eUNBVW9DLHNCQUFzQixFQUErQixtQkFBbUI7T0FUakcsd0JBQXdCLENBNEhwQztJQUFELCtCQUFDO0NBQUEsQUE1SEQsSUE0SEM7U0E1SFksd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvb3JkaW5hdGVDb252ZXJ0ZXIgfSBmcm9tICcuLi8uLi8uLi9hbmd1bGFyLWNlc2l1bS9zZXJ2aWNlcy9jb29yZGluYXRlLWNvbnZlcnRlci9jb29yZGluYXRlLWNvbnZlcnRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEVkaXRBY3Rpb25zIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2VkaXQtYWN0aW9ucy5lbnVtJztcbmltcG9ydCB7IFBvbHlsaW5lRWRpdG9yT2JzZXJ2YWJsZSB9IGZyb20gJy4uLy4uL21vZGVscy9wb2x5bGluZS1lZGl0b3Itb2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBQb2x5bGluZUVkaXRPcHRpb25zIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3BvbHlsaW5lLWVkaXQtb3B0aW9ucyc7XG5pbXBvcnQgeyBMYWJlbFByb3BzLCBMYWJlbFN0eWxlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2xhYmVsLXByb3BzJztcbmltcG9ydCB7IFBvbHlsaW5lRWRpdFVwZGF0ZSB9IGZyb20gJy4uLy4uL21vZGVscy9wb2x5bGluZS1lZGl0LXVwZGF0ZSc7XG5pbXBvcnQgeyBFZGl0TW9kZXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvZWRpdC1tb2RlLmVudW0nO1xuaW1wb3J0IHsgUG9seWxpbmVzRWRpdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VudGl0eS1lZGl0b3JzL3BvbHlsaW5lLWVkaXRvci9wb2x5bGluZXMtZWRpdG9yLnNlcnZpY2UnO1xuXG4vKipcbiAqXG4gKiBSYW5nZSBhbmQgYmVhcmluZyBjb21wb25lbnQgdGhhdCBpcyB1c2VkIHRvIGRyYXcgcmFuZ2UgYW5kIGJlYXJpbmcgb24gdGhlIG1hcC5cbiAqIFRoZSBpbnB1dHMgYXJlIHVzZWQgdG8gY3VzdG9taXplIHRoZSByYW5nZSBhbmQgYmVhcmluZyBzdHlsZSBhbmQgYmVoYXZpb3IuXG4gKiBDcmVhdGUgY29tcG9uZW50IHJlZmVyZW5jZSBhbmQgdXNlIHRoZSBgY3JlYXRlKClgIGZ1bmN0aW9uIHRvIHN0YXJ0IGNyZWF0aW5nIFImQiBvbiB0aGUgbWFwLlxuICogVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIGFuIG9wdGlvbmFsIFJhbmdlQW5kQmVhcmluZ09wdGlvbnMgb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgY3JlYXRlZCByYW5nZSBhbmQgYmVhcmluZyBzdHlsZSBhbmQgYmVoYXZpb3JcbiAqIChvbiB0b3Agb2YgdGhlIGRlZmF1bHQgYW5kIGdsb2JhbCBkZWZpbml0aW9ucykuXG4gKlxuICogVXNhZ2U6XG4gKlxuICogbXktY29tcG9uZW50LnRzOlxuICpcbiAqIGBgYFxuICogXFxAVmlld0NoaWxkKCdyYW5nZUFuZEJlYXJpbmcnLCB7c3RhdGljOiBmYWxzZX0pIHByaXZhdGUgcmFuZ2VBbmRCZWFyaW5nOiBSYW5nZUFuZEJlYXJpbmdDb21wb25lbnQ7IC8vIEdldCBSJkIgcmVmZXJlbmNlXG4gKiAgLy8gLi4uXG4gKiB0aGlzLnJhbmdlQW5kQmVhcmluZy5jcmVhdGUoe3N0eWxlOiB7IHBvaW50UHJvcHM6IHsgcGl4ZWxTaXplOiAxMiB9IH0sIGJlYXJpbmdMYWJlbHNTdHlsZTogeyBmaWxsQ29sb3I6IENlc2l1bS5Db2xvci5HUkVFTiB9IH0pO1xuICogYGBgXG4gKlxuICogbXktY29tcG9uZW50Lmh0bWxcbiAqIGBgYFxuICogPHJhbmdlLWFuZC1iZWFyaW5nICNyYW5nZUFuZEJlYXJpbmc+PC9yYW5nZS1hbmQtYmVhcmluZz4gLy8gT3B0aW9uYWwgaW5wdXRzIGRlZmluZXMgZ2xvYmFsIHN0eWxlIGFuZCBiZWhhdmlvci5cbiAqIGBgYFxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncmFuZ2UtYW5kLWJlYXJpbmcnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxwb2x5bGluZXMtZWRpdG9yPjwvcG9seWxpbmVzLWVkaXRvcj5cbiAgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1BvbHlsaW5lc0VkaXRvclNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBSYW5nZUFuZEJlYXJpbmdDb21wb25lbnQge1xuICBASW5wdXQoKSBsaW5lRWRpdE9wdGlvbnM/OiBQb2x5bGluZUVkaXRPcHRpb25zID0ge307XG4gIEBJbnB1dCgpIGxhYmVsc1N0eWxlPzogTGFiZWxTdHlsZSA9IHt9O1xuICBASW5wdXQoKSBkaXN0YW5jZUxhYmVsc1N0eWxlPzogTGFiZWxTdHlsZSA9IHt9O1xuICBASW5wdXQoKSBiZWFyaW5nTGFiZWxzU3R5bGU/OiBMYWJlbFN0eWxlID0ge307XG4gIEBJbnB1dCgpIGJlYXJpbmdTdHJpbmdGbj86ICh2YWx1ZTogbnVtYmVyKSA9PiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRpc3RhbmNlU3RyaW5nRm4/OiAodmFsdWU6IG51bWJlcikgPT4gc3RyaW5nO1xuICBASW5wdXQoKSBsYWJlbHNSZW5kZXJGbj86ICh1cGRhdGU6IFBvbHlsaW5lRWRpdFVwZGF0ZSwgbGFiZWxzOiBMYWJlbFByb3BzW10pID0+IExhYmVsUHJvcHNbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBvbHlsaW5lRWRpdG9yOiBQb2x5bGluZXNFZGl0b3JTZXJ2aWNlLCBwcml2YXRlIGNvb3JkaW5hdGVDb252ZXJ0ZXI6IENvb3JkaW5hdGVDb252ZXJ0ZXIpIHtcbiAgfVxuXG4gIGNyZWF0ZShcbiAgICB7XG4gICAgICBsaW5lRWRpdE9wdGlvbnMgPSB7fSxcbiAgICAgIGxhYmVsc1N0eWxlID0ge30sXG4gICAgICBkaXN0YW5jZUxhYmVsc1N0eWxlID0ge30sXG4gICAgICBiZWFyaW5nTGFiZWxzU3R5bGUgPSB7fSxcbiAgICAgIGJlYXJpbmdTdHJpbmdGbixcbiAgICAgIGRpc3RhbmNlU3RyaW5nRm4sXG4gICAgICBsYWJlbHNSZW5kZXJGbixcbiAgICB9OiBSYW5nZUFuZEJlYXJpbmdPcHRpb25zID0ge2xpbmVFZGl0T3B0aW9uczoge30sIGxhYmVsc1N0eWxlOiB7fSwgZGlzdGFuY2VMYWJlbHNTdHlsZToge30sIGJlYXJpbmdMYWJlbHNTdHlsZToge319LFxuICApOiBQb2x5bGluZUVkaXRvck9ic2VydmFibGUge1xuICAgIGNvbnN0IHJuYiA9IHRoaXMucG9seWxpbmVFZGl0b3IuY3JlYXRlKHtcbiAgICAgIGFsbG93RHJhZzogZmFsc2UsXG4gICAgICBwb2ludFByb3BzOiB7XG4gICAgICAgIHNob3dWaXJ0dWFsOiBmYWxzZSxcbiAgICAgICAgcGl4ZWxTaXplOiA4LFxuICAgICAgfSxcbiAgICAgIHBvbHlsaW5lUHJvcHM6IHtcbiAgICAgICAgd2lkdGg6IDIsXG4gICAgICB9LFxuICAgICAgLi4udGhpcy5saW5lRWRpdE9wdGlvbnMsXG4gICAgICAuLi5saW5lRWRpdE9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICBpZiAobGFiZWxzUmVuZGVyRm4pIHtcbiAgICAgIHJuYi5zZXRMYWJlbHNSZW5kZXJGbihsYWJlbHNSZW5kZXJGbik7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxhYmVsc1JlbmRlckZuKSB7XG4gICAgICBybmIuc2V0TGFiZWxzUmVuZGVyRm4odGhpcy5sYWJlbHNSZW5kZXJGbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJuYi5zZXRMYWJlbHNSZW5kZXJGbih1cGRhdGUgPT4ge1xuICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSB1cGRhdGUucG9zaXRpb25zO1xuICAgICAgICBsZXQgdG90YWxEaXN0YW5jZSA9IDA7XG4gICAgICAgIGlmICghcG9zaXRpb25zIHx8IHBvc2l0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh1cGRhdGUuZWRpdE1vZGUgPT09IEVkaXRNb2Rlcy5DUkVBVEUgJiYgdXBkYXRlLmVkaXRBY3Rpb24gIT09IEVkaXRBY3Rpb25zLkFERF9MQVNUX1BPSU5UXG4gICAgICAgICAgICA/IFsuLi5wb3NpdGlvbnMsIHVwZGF0ZS51cGRhdGVkUG9zaXRpb25dXG4gICAgICAgICAgICA6IHBvc2l0aW9uc1xuICAgICAgICApLnJlZHVjZShcbiAgICAgICAgICAobGFiZWxzLCBwb3NpdGlvbiwgaW5kZXgsIGFycmF5KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IDApIHtcbiAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNQb3NpdGlvbiA9IGFycmF5W2luZGV4IC0gMV07XG4gICAgICAgICAgICAgIGNvbnN0IGJlYXJpbmcgPSB0aGlzLmNvb3JkaW5hdGVDb252ZXJ0ZXIuYmVhcmluZ1RvQ2FydGVzaWFuKHByZXZpb3VzUG9zaXRpb24sIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBDZXNpdW0uQ2FydGVzaWFuMy5kaXN0YW5jZShwcmV2aW91c1Bvc2l0aW9uLCBwb3NpdGlvbikgLyAxMDAwO1xuICAgICAgICAgICAgICBsYWJlbHMucHVzaChcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0ZXh0OlxuICAgICAgICAgICAgICAgICAgICAoYmVhcmluZ1N0cmluZ0ZuICYmIGJlYXJpbmdTdHJpbmdGbihiZWFyaW5nKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuYmVhcmluZ1N0cmluZ0ZuICYmIHRoaXMuYmVhcmluZ1N0cmluZ0ZuKGJlYXJpbmcpKSB8fFxuICAgICAgICAgICAgICAgICAgICBgJHtiZWFyaW5nLnRvRml4ZWQoMil9wrBgLFxuICAgICAgICAgICAgICAgICAgc2NhbGU6IDAuMixcbiAgICAgICAgICAgICAgICAgIGZvbnQ6ICc4MHB4IEhlbHZldGljYScsXG4gICAgICAgICAgICAgICAgICBwaXhlbE9mZnNldDogbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKC0yMCwgLTgpLFxuICAgICAgICAgICAgICAgICAgcG9zaXRpb246IG5ldyBDZXNpdW0uQ2FydGVzaWFuMyhcbiAgICAgICAgICAgICAgICAgICAgKHBvc2l0aW9uLnggKyBwcmV2aW91c1Bvc2l0aW9uLngpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgKHBvc2l0aW9uLnkgKyBwcmV2aW91c1Bvc2l0aW9uLnkpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgKHBvc2l0aW9uLnogKyBwcmV2aW91c1Bvc2l0aW9uLnopIC8gMixcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBmaWxsQ29sb3I6IENlc2l1bS5Db2xvci5XSElURSxcbiAgICAgICAgICAgICAgICAgIG91dGxpbmVDb2xvcjogQ2VzaXVtLkNvbG9yLldISVRFLFxuICAgICAgICAgICAgICAgICAgc2hvd0JhY2tncm91bmQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAuLi4odGhpcy5sYWJlbHNTdHlsZSBhcyBhbnkpLFxuICAgICAgICAgICAgICAgICAgLi4uKGxhYmVsc1N0eWxlIGFzIGFueSksXG4gICAgICAgICAgICAgICAgICAuLi4odGhpcy5iZWFyaW5nTGFiZWxzU3R5bGUgYXMgYW55KSxcbiAgICAgICAgICAgICAgICAgIC4uLihiZWFyaW5nTGFiZWxzU3R5bGUgYXMgYW55KSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHRleHQ6XG4gICAgICAgICAgICAgICAgICAgIChkaXN0YW5jZVN0cmluZ0ZuICYmIGRpc3RhbmNlU3RyaW5nRm4odG90YWxEaXN0YW5jZSArIGRpc3RhbmNlKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuZGlzdGFuY2VTdHJpbmdGbiAmJiB0aGlzLmRpc3RhbmNlU3RyaW5nRm4odG90YWxEaXN0YW5jZSArIGRpc3RhbmNlKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgYCR7KHRvdGFsRGlzdGFuY2UgKyBkaXN0YW5jZSkudG9GaXhlZCgyKX0gS21gLFxuICAgICAgICAgICAgICAgICAgc2NhbGU6IDAuMixcbiAgICAgICAgICAgICAgICAgIGZvbnQ6ICc4MHB4IEhlbHZldGljYScsXG4gICAgICAgICAgICAgICAgICBwaXhlbE9mZnNldDogbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKC0zNSwgLTgpLFxuICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgZmlsbENvbG9yOiBDZXNpdW0uQ29sb3IuV0hJVEUsXG4gICAgICAgICAgICAgICAgICBvdXRsaW5lQ29sb3I6IENlc2l1bS5Db2xvci5XSElURSxcbiAgICAgICAgICAgICAgICAgIHNob3dCYWNrZ3JvdW5kOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgLi4uKHRoaXMubGFiZWxzU3R5bGUgYXMgYW55KSxcbiAgICAgICAgICAgICAgICAgIC4uLihsYWJlbHNTdHlsZSBhcyBhbnkpLFxuICAgICAgICAgICAgICAgICAgLi4uKHRoaXMuZGlzdGFuY2VMYWJlbHNTdHlsZSBhcyBhbnkpLFxuICAgICAgICAgICAgICAgICAgLi4uKGRpc3RhbmNlTGFiZWxzU3R5bGUgYXMgYW55KSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHRvdGFsRGlzdGFuY2UgKz0gZGlzdGFuY2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBsYWJlbHM7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRleHQ6IChkaXN0YW5jZVN0cmluZ0ZuICYmIGRpc3RhbmNlU3RyaW5nRm4oMCkpIHx8ICh0aGlzLmRpc3RhbmNlU3RyaW5nRm4gJiYgdGhpcy5kaXN0YW5jZVN0cmluZ0ZuKDApKSB8fCBgMCBLbWAsXG4gICAgICAgICAgICAgIHNjYWxlOiAwLjIsXG4gICAgICAgICAgICAgIGZvbnQ6ICc4MHB4IEhlbHZldGljYScsXG4gICAgICAgICAgICAgIHBpeGVsT2Zmc2V0OiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoLTIwLCAtOCksXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbnNbMF0sXG4gICAgICAgICAgICAgIGZpbGxDb2xvcjogQ2VzaXVtLkNvbG9yLldISVRFLFxuICAgICAgICAgICAgICBvdXRsaW5lQ29sb3I6IENlc2l1bS5Db2xvci5XSElURSxcbiAgICAgICAgICAgICAgc2hvd0JhY2tncm91bmQ6IHRydWUsXG4gICAgICAgICAgICAgIC4uLih0aGlzLmxhYmVsc1N0eWxlIGFzIGFueSksXG4gICAgICAgICAgICAgIC4uLihsYWJlbHNTdHlsZSBhcyBhbnkpLFxuICAgICAgICAgICAgICAuLi4odGhpcy5kaXN0YW5jZUxhYmVsc1N0eWxlIGFzIGFueSksXG4gICAgICAgICAgICAgIC4uLihkaXN0YW5jZUxhYmVsc1N0eWxlIGFzIGFueSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm5iO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmFuZ2VBbmRCZWFyaW5nT3B0aW9ucyB7XG4gIGxpbmVFZGl0T3B0aW9ucz86IFBvbHlsaW5lRWRpdE9wdGlvbnM7XG4gIGxhYmVsc1N0eWxlPzogTGFiZWxTdHlsZTtcbiAgZGlzdGFuY2VMYWJlbHNTdHlsZT86IExhYmVsU3R5bGU7XG4gIGJlYXJpbmdMYWJlbHNTdHlsZT86IExhYmVsU3R5bGU7XG4gIGJlYXJpbmdTdHJpbmdGbj86ICh2YWx1ZTogbnVtYmVyKSA9PiBzdHJpbmc7XG4gIGRpc3RhbmNlU3RyaW5nRm4/OiAodmFsdWU6IG51bWJlcikgPT4gc3RyaW5nO1xuICBsYWJlbHNSZW5kZXJGbj86ICh1cGRhdGU6IFBvbHlsaW5lRWRpdFVwZGF0ZSwgbGFiZWxzOiBMYWJlbFByb3BzW10pID0+IExhYmVsUHJvcHNbXTtcbn1cbiJdfQ==