UNPKG

@formql/core

Version:

FormQL - A framework for building dynamic forms

134 lines 21.3 kB
import { __decorate } from "tslib"; import { Injectable } from '@angular/core'; import { UUID } from 'angular2-uuid'; let DndService = class DndService { synchroniseSectionModel(page, event) { let sourceSection = page.sections.find(s => s.sectionId === event.sourceWrapperId); let sourceComponent = null; if (event.sourceObjectId === 'new') { sourceComponent = this.newComponent(); event.sourceObjectId = sourceComponent.componentId; sourceSection = page.sections.find(s => s.sectionId === event.targetWrapperId); if (sourceSection) sourceSection.components.push(sourceComponent); else return page; // this should never happen } else sourceComponent = sourceSection.components.find(c => c.componentId === event.sourceObjectId); if (!sourceComponent) return; // has the component been moved across position type (header/body)? if (sourceComponent.position.type !== event.positionType) sourceComponent.position.type = event.positionType; // has the component been placed in a differnet CSS grid area? if (sourceComponent.position.id !== event.targetPositionId) sourceComponent.position.id = event.targetPositionId; if (event.sourceWrapperId !== event.targetWrapperId) { let targetSection = this.transferComponent(page, sourceSection, event); targetSection.template.reRender = true; targetSection = this.reorderComponents(targetSection, sourceComponent, event); } else sourceSection = this.reorderComponents(sourceSection, sourceComponent, event); sourceSection.template.reRender = true; return page; } synchronisePageModel(page, event) { let sourceSection = null; if (event.sourceObjectId === 'new') { sourceSection = this.newSection(); page.sections.push(sourceSection); } else sourceSection = page.sections.find(s => s.sectionId === event.sourceObjectId); // can't find the source section, model must be in different page if (sourceSection != null) { if (sourceSection.position.id !== event.targetPositionId) sourceSection.position.id = event.targetPositionId; page.template.reRender = true; page = this.reorderSections(page, sourceSection, event); } return page; } reorderComponents(section, sourceCompoment, event) { let components = section.components.filter(c => c.position.id === sourceCompoment.position.id); const targetComponent = components.find(c => c.componentId === event.targetIndexId); if (targetComponent) { sourceCompoment.position.index = targetComponent.position.index; targetComponent.position.index = targetComponent.position.index + 0.5; } components = components.sort((left, right) => { return left.position.index - right.position.index; }); for (let i = 0; i < components.length; i++) { components[i].position.index = i; } return section; } reorderSections(page, sourceSection, event) { let sections = page.sections.filter(c => c.position.id === sourceSection.position.id); const targetSection = sections.find(c => c.sectionId === event.targetIndexId); if (targetSection) { sourceSection.position.index = targetSection.position.index; targetSection.position.index = targetSection.position.index + 0.5; } sections = sections.sort((left, right) => { return left.position.index - right.position.index; }); for (let i = 0; i < sections.length; i++) sections[i].position.index = i; return page; } transferComponent(page, sourceSection, event) { const targetSection = page.sections.find(s => s.sectionId === event.targetWrapperId); if (!targetSection) return null; const component = sourceSection.components.find(c => c.componentId === event.sourceObjectId); if (!component) return null; const index = sourceSection.components.findIndex(s => s.componentId === event.sourceObjectId); targetSection.components.push(component); sourceSection.components.splice(index, 1); return targetSection; } newSection() { return { sectionId: UUID.UUID(), sectionName: 'New section', components: [], template: { header: { gridTemplateColumns: '1fr', gridTemplateRows: '1fr', gridTemplateAreas: '"ID1_1"' }, body: { gridTemplateColumns: '1fr', gridTemplateRows: '1fr', gridTemplateAreas: '"ID1_1"' } }, position: { id: '-1', index: 0 } }; } newComponent() { return { componentId: UUID.UUID(), label: 'New Component', componentName: 'FormQLLabelComponent', position: { id: '-1', index: 0 } }; } }; DndService = __decorate([ Injectable() ], DndService); export { DndService }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZm9ybXFsL2NvcmUvIiwic291cmNlcyI6WyJzZXJ2aWNlcy9kbmQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkzQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBS3JDLElBQWEsVUFBVSxHQUF2QixNQUFhLFVBQVU7SUFFbkIsdUJBQXVCLENBQUMsSUFBYyxFQUFFLEtBQWU7UUFDbkQsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNuRixJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxLQUFLLENBQUMsY0FBYyxLQUFLLEtBQUssRUFBRTtZQUNoQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RDLEtBQUssQ0FBQyxjQUFjLEdBQUcsZUFBZSxDQUFDLFdBQVcsQ0FBQztZQUNuRCxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUMvRSxJQUFJLGFBQWE7Z0JBQ2IsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7O2dCQUUvQyxPQUFPLElBQUksQ0FBQyxDQUFDLDJCQUEyQjtTQUMvQzs7WUFDRyxlQUFlLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVqRyxJQUFJLENBQUMs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QWdCO2dCQUNwQixNQUFNLEVBQWM7b0JBQ2hCLG1CQUFtQixFQUFFLEtBQUs7b0JBQzFCLGdCQUFnQixFQUFFLEtBQUs7b0JBQ3ZCLGlCQUFpQixFQUFFLFNBQVM7aUJBQy9CO2dCQUNELElBQUksRUFBYTtvQkFDYixtQkFBbUIsRUFBRSxLQUFLO29CQUMxQixnQkFBZ0IsRUFBRSxLQUFLO29CQUN2QixpQkFBaUIsRUFBRSxTQUFTO2lCQUMvQjthQUNKO1lBQ0QsUUFBUSxFQUFpQjtnQkFDckIsRUFBRSxFQUFFLElBQUk7Z0JBQ1IsS0FBSyxFQUFFLENBQUM7YUFDWDtTQUNKLENBQUM7SUFDTixDQUFDO0lBRU8sWUFBWTtRQUNoQixPQUEyQjtZQUN2QixXQUFXLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRTtZQUN4QixLQUFLLEVBQUUsZUFBZTtZQUN0QixhQUFhLEVBQUUsc0JBQXNCO1lBQ3JDLFFBQVEsRUFBaUI7Z0JBQ3JCLEVBQUUsRUFBRSxJQUFJO2dCQUNSLEtBQUssRUFBRSxDQUFDO2FBQ1g7U0FDSixDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUE7QUFySlksVUFBVTtJQUR0QixVQUFVLEVBQUU7R0FDQSxVQUFVLENBcUp0QjtTQXJKWSxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0tY29tcG9uZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybVNlY3Rpb24gfSBmcm9tICcuLi9tb2RlbHMvZm9ybS1zZWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybVBhZ2UgfSBmcm9tICcuLi9tb2RlbHMvZm9ybS1wYWdlLm1vZGVsJztcclxuaW1wb3J0IHsgVVVJRCB9IGZyb20gJ2FuZ3VsYXIyLXV1aWQnO1xyXG5pbXBvcnQgeyBEbmRFdmVudCB9IGZyb20gJy4uL21vZGVscy9kbmQubW9kZWwnO1xyXG5pbXBvcnQgeyBHcmlkU3R5bGUsIEdyaWRUZW1wbGF0ZSwgR3JpZFBvc2l0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL3N0eWxlLm1vZGVsJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIERuZFNlcnZpY2Uge1xyXG5cclxuICAgIHN5bmNocm9uaXNlU2VjdGlvbk1vZGVsKHBhZ2U6IEZvcm1QYWdlLCBldmVudDogRG5kRXZlbnQpIHtcclxuICAgICAgICBsZXQgc291cmNlU2VjdGlvbiA9IHBhZ2Uuc2VjdGlvbnMuZmluZChzID0+IHMuc2VjdGlvbklkID09PSBldmVudC5zb3VyY2VXcmFwcGVySWQpO1xyXG4gICAgICAgIGxldCBzb3VyY2VDb21wb25lbnQgPSBudWxsO1xyXG4gICAgICAgIGlmIChldmVudC5zb3VyY2VPYmplY3RJZCA9PT0gJ25ldycpIHtcclxuICAgICAgICAgICAgc291cmNlQ29tcG9uZW50ID0gdGhpcy5uZXdDb21wb25lbnQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc291cmNlT2JqZWN0SWQgPSBzb3VyY2VDb21wb25lbnQuY29tcG9uZW50SWQ7XHJcbiAgICAgICAgICAgIHNvdXJjZVNlY3Rpb24gPSBwYWdlLnNlY3Rpb25zLmZpbmQocyA9PiBzLnNlY3Rpb25JZCA9PT0gZXZlbnQudGFyZ2V0V3JhcHBlcklkKTtcclxuICAgICAgICAgICAgaWYgKHNvdXJjZVNlY3Rpb24pXHJcbiAgICAgICAgICAgICAgICBzb3VyY2VTZWN0aW9uLmNvbXBvbmVudHMucHVzaChzb3VyY2VDb21wb25lbnQpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFnZTsgLy8gdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuXHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZVNlY3Rpb24uY29tcG9uZW50cy5maW5kKGMgPT4gYy5jb21wb25lbnRJZCA9PT0gZXZlbnQuc291cmNlT2JqZWN0SWQpO1xyXG5cclxuICAgICAgICBpZiAoIXNvdXJjZUNvbXBvbmVudClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAvLyBoYXMgdGhlIGNvbXBvbmVudCBiZWVuIG1vdmVkIGFjcm9zcyBwb3NpdGlvbiB0eXBlIChoZWFkZXIvYm9keSk/XHJcbiAgICAgICAgaWYgKHNvdXJjZUNvbXBvbmVudC5wb3NpdGlvbi50eXBlICE9PSBldmVudC5wb3NpdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHNvdXJjZUNvbXBvbmVudC5wb3NpdGlvbi50eXBlID0gZXZlbnQucG9zaXRpb25UeXBlO1xyXG5cclxuICAgICAgICAvLyBoYXMgdGhlIGNvbXBvbmVudCBiZWVuIHBsYWNlZCBpbiBhIGRpZmZlcm5ldCBDU1MgZ3JpZCBhcmVhP1xyXG4gICAgICAgIGlmIChzb3VyY2VDb21wb25lbnQucG9zaXRpb24uaWQgIT09IGV2ZW50LnRhcmdldFBvc2l0aW9uSWQpXHJcbiAgICAgICAgICAgIHNvdXJjZUNvbXBvbmVudC5wb3NpdGlvbi5pZCA9IGV2ZW50LnRhcmdldFBvc2l0aW9uSWQ7XHJcblxyXG4gICAgICAgIGlmIChldmVudC5zb3VyY2VXcmFwcGVySWQgIT09IGV2ZW50LnRhcmdldFdyYXBwZXJJZCkge1xyXG4gICAgICAgICAgICBsZXQgdGFyZ2V0U2VjdGlvbiA9IHRoaXMudHJhbnNmZXJDb21wb25lbnQocGFnZSwgc291cmNlU2VjdGlvbiwgZXZlbnQpO1xyXG4gICAgICAgICAgICB0YXJnZXRTZWN0aW9uLnRlbXBsYXRlLnJlUmVuZGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGFyZ2V0U2VjdGlvbiA9IHRoaXMucmVvcmRlckNvbXBvbmVudHModGFyZ2V0U2VjdGlvbiwgc291cmNlQ29tcG9uZW50LCBldmVudCk7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgIHNvdXJjZVNlY3Rpb24gPSB0aGlzLnJlb3JkZXJDb21wb25lbnRzKHNvdXJjZVNlY3Rpb24sIHNvdXJjZUNvbXBvbmVudCwgZXZlbnQpO1xyXG5cclxuICAgICAgICBzb3VyY2VTZWN0aW9uLnRlbXBsYXRlLnJlUmVuZGVyID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gcGFnZTtcclxuICAgIH1cclxuXHJcbiAgICBzeW5jaHJvbmlzZVBhZ2VNb2RlbChwYWdlOiBGb3JtUGFnZSwgZXZlbnQ6IERuZEV2ZW50KSB7XHJcbiAgICAgICAgbGV0IHNvdXJjZVNlY3Rpb24gPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAoZXZlbnQuc291cmNlT2JqZWN0SWQgPT09ICduZXcnKSB7XHJcbiAgICAgICAgICAgIHNvdXJjZVNlY3Rpb24gPSB0aGlzLm5ld1NlY3Rpb24oKTtcclxuICAgICAgICAgICAgcGFnZS5zZWN0aW9ucy5wdXNoKHNvdXJjZVNlY3Rpb24pO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICBzb3VyY2VTZWN0aW9uID0gcGFnZS5zZWN0aW9ucy5maW5kKHMgPT4gcy5zZWN0aW9uSWQgPT09IGV2ZW50LnNvdXJjZU9iamVjdElkKTtcclxuXHJcbiAgICAgICAgLy8gY2FuJ3QgZmluZCB0aGUgc291cmNlIHNlY3Rpb24sIG1vZGVsIG11c3QgYmUgaW4gZGlmZmVyZW50IHBhZ2VcclxuICAgICAgICBpZiAoc291cmNlU2VjdGlvbiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChzb3VyY2VTZWN0aW9uLnBvc2l0aW9uLmlkICE9PSBldmVudC50YXJnZXRQb3NpdGlvbklkKVxyXG4gICAgICAgICAgICAgICAgc291cmNlU2VjdGlvbi5wb3NpdGlvbi5pZCA9IGV2ZW50LnRhcmdldFBvc2l0aW9uSWQ7XHJcblxyXG4gICAgICAgICAgICBwYWdlLnRlbXBsYXRlLnJlUmVuZGVyID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHBhZ2UgPSB0aGlzLnJlb3JkZXJTZWN0aW9ucyhwYWdlLCBzb3VyY2VTZWN0aW9uLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVvcmRlckNvbXBvbmVudHMoc2VjdGlvbjogRm9ybVNlY3Rpb24sIHNvdXJjZUNvbXBvbWVudDogRm9ybUNvbXBvbmVudDxhbnk+LCBldmVudDogRG5kRXZlbnQpIHtcclxuICAgICAgICBsZXQgY29tcG9uZW50cyA9IHNlY3Rpb24uY29tcG9uZW50cy5maWx0ZXIoYyA9PiBjLnBvc2l0aW9uLmlkID09PSBzb3VyY2VDb21wb21lbnQucG9zaXRpb24uaWQpO1xyXG5cclxuICAgICAgICBjb25zdCB0YXJnZXRDb21wb25lbnQgPSBjb21wb25lbnRzLmZpbmQoYyA9PiBjLmNvbXBvbmVudElkID09PSBldmVudC50YXJnZXRJbmRleElkKTtcclxuXHJcbiAgICAgICAgaWYgKHRhcmdldENvbXBvbmVudCkge1xyXG4gICAgICAgICAgICBzb3VyY2VDb21wb21lbnQucG9zaXRpb24uaW5kZXggPSB0YXJnZXRDb21wb25lbnQucG9zaXRpb24uaW5kZXg7XHJcbiAgICAgICAgICAgIHRhcmdldENvbXBvbmVudC5wb3NpdGlvbi5pbmRleCA9IHRhcmdldENvbXBvbmVudC5wb3NpdGlvbi5pbmRleCArIDAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbXBvbmVudHMgPSBjb21wb25lbnRzLnNvcnQoKGxlZnQ6IEZvcm1Db21wb25lbnQ8YW55PiwgcmlnaHQ6IEZvcm1Db21wb25lbnQ8YW55PikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbGVmdC5wb3NpdGlvbi5pbmRleCAtIHJpZ2h0LnBvc2l0aW9uLmluZGV4O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcG9uZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb21wb25lbnRzW2ldLnBvc2l0aW9uLmluZGV4ID0gaTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNlY3Rpb247XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZW9yZGVyU2VjdGlvbnMocGFnZTogRm9ybVBhZ2UsIHNvdXJjZVNlY3Rpb246IEZvcm1TZWN0aW9uLCBldmVudDogRG5kRXZlbnQpIHtcclxuICAgICAgICBsZXQgc2VjdGlvbnMgPSBwYWdlLnNlY3Rpb25zLmZpbHRlcihjID0+IGMucG9zaXRpb24uaWQgPT09IHNvdXJjZVNlY3Rpb24ucG9zaXRpb24uaWQpO1xyXG5cclxuICAgICAgICBjb25zdCB0YXJnZXRTZWN0aW9uID0gc2VjdGlvbnMuZmluZChjID0+IGMuc2VjdGlvbklkID09PSBldmVudC50YXJnZXRJbmRleElkKTtcclxuXHJcbiAgICAgICAgaWYgKHRhcmdldFNlY3Rpb24pIHtcclxuICAgICAgICAgICAgc291cmNlU2VjdGlvbi5wb3NpdGlvbi5pbmRleCA9IHRhcmdldFNlY3Rpb24ucG9zaXRpb24uaW5kZXg7XHJcbiAgICAgICAgICAgIHRhcmdldFNlY3Rpb24ucG9zaXRpb24uaW5kZXggPSB0YXJnZXRTZWN0aW9uLnBvc2l0aW9uLmluZGV4ICsgMC41O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2VjdGlvbnMgPSBzZWN0aW9ucy5zb3J0KChsZWZ0OiBGb3JtU2VjdGlvbiwgcmlnaHQ6IEZvcm1TZWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBsZWZ0LnBvc2l0aW9uLmluZGV4IC0gcmlnaHQucG9zaXRpb24uaW5kZXg7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWN0aW9ucy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgc2VjdGlvbnNbaV0ucG9zaXRpb24uaW5kZXggPSBpO1xyXG5cclxuICAgICAgICByZXR1cm4gcGFnZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHRyYW5zZmVyQ29tcG9uZW50KHBhZ2U6IEZvcm1QYWdlLCBzb3VyY2VTZWN0aW9uOiBGb3JtU2VjdGlvbiwgZXZlbnQ6IERuZEV2ZW50KSB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0U2VjdGlvbiA9IHBhZ2Uuc2VjdGlvbnMuZmluZChzID0+IHMuc2VjdGlvbklkID09PSBldmVudC50YXJnZXRXcmFwcGVySWQpO1xyXG4gICAgICAgIGlmICghdGFyZ2V0U2VjdGlvbilcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHNvdXJjZVNlY3Rpb24uY29tcG9uZW50cy5maW5kKGMgPT4gYy5jb21wb25lbnRJZCA9PT0gZXZlbnQuc291cmNlT2JqZWN0SWQpO1xyXG4gICAgICAgIGlmICghY29tcG9uZW50KVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBzb3VyY2VTZWN0aW9uLmNvbXBvbmVudHMuZmluZEluZGV4KHMgPT4gcy5jb21wb25lbnRJZCA9PT0gZXZlbnQuc291cmNlT2JqZWN0SWQpO1xyXG5cclxuICAgICAgICB0YXJnZXRTZWN0aW9uLmNvbXBvbmVudHMucHVzaChjb21wb25lbnQpO1xyXG4gICAgICAgIHNvdXJjZVNlY3Rpb24uY29tcG9uZW50cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGFyZ2V0U2VjdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG5ld1NlY3Rpb24oKTogRm9ybVNlY3Rpb24ge1xyXG4gICAgICAgIHJldHVybiA8Rm9ybVNlY3Rpb24+e1xyXG4gICAgICAgICAgICBzZWN0aW9uSWQ6IFVVSUQuVVVJRCgpLFxyXG4gICAgICAgICAgICBzZWN0aW9uTmFtZTogJ05ldyBzZWN0aW9uJyxcclxuICAgICAgICAgICAgY29tcG9uZW50czogW10sXHJcbiAgICAgICAgICAgIHRlbXBsYXRlOiA8R3JpZFRlbXBsYXRlPntcclxuICAgICAgICAgICAgICAgIGhlYWRlcjogPEdyaWRTdHlsZT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGdyaWRUZW1wbGF0ZUNvbHVtbnM6ICcxZnInLFxyXG4gICAgICAgICAgICAgICAgICAgIGdyaWRUZW1wbGF0ZVJvd3M6ICcxZnInLFxyXG4gICAgICAgICAgICAgICAgICAgIGdyaWRUZW1wbGF0ZUFyZWFzOiAnXCJJRDFfMVwiJ1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGJvZHk6IDxHcmlkU3R5bGU+e1xyXG4gICAgICAgICAgICAgICAgICAgIGdyaWRUZW1wbGF0ZUNvbHVtbnM6ICcxZnInLFxyXG4gICAgICAgICAgICAgICAgICAgIGdyaWRUZW1wbGF0ZVJvd3M6ICcxZnInLFxyXG4gICAgICAgICAgICAgICAgICAgIGdyaWRUZW1wbGF0ZUFyZWFzOiAnXCJJRDFfMVwiJ1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogPEdyaWRQb3NpdGlvbj4ge1xyXG4gICAgICAgICAgICAgICAgaWQ6ICctMScsXHJcbiAgICAgICAgICAgICAgICBpbmRleDogMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG5ld0NvbXBvbmVudCgpOiBGb3JtQ29tcG9uZW50PGFueT4ge1xyXG4gICAgICAgIHJldHVybiA8Rm9ybUNvbXBvbmVudDxhbnk+PntcclxuICAgICAgICAgICAgY29tcG9uZW50SWQ6IFVVSUQuVVVJRCgpLFxyXG4gICAgICAgICAgICBsYWJlbDogJ05ldyBDb21wb25lbnQnLFxyXG4gICAgICAgICAgICBjb21wb25lbnROYW1lOiAnRm9ybVFMTGFiZWxDb21wb25lbnQnLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogPEdyaWRQb3NpdGlvbj4ge1xyXG4gICAgICAgICAgICAgICAgaWQ6ICctMScsXHJcbiAgICAgICAgICAgICAgICBpbmRleDogMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG4iXX0=