@qbs-origin/origin-form 0.6.2 → 0.6.5
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/esm2022/lib/formly/formly-checkboxes/formly-checkboxes.component.mjs +73 -0
- package/esm2022/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.mjs +52 -12
- package/esm2022/lib/formly/formly-field-stepper/formly-field-stepper.component.mjs +15 -3
- package/esm2022/lib/model-population.helper.mjs +45 -1
- package/esm2022/lib/models/forms.model.mjs +4 -2
- package/esm2022/lib/origin-form.component.mjs +61 -13
- package/esm2022/lib/origin-form.module.mjs +6 -1
- package/esm2022/lib/services/proxy.service.mjs +2 -2
- package/esm2022/lib/shared-components/dictionaries-tree.component.mjs +10 -3
- package/esm2022/lib/shared-components/treeview/treeview.component.mjs +19 -3
- package/fesm2022/qbs-origin-origin-form.mjs +268 -31
- package/fesm2022/qbs-origin-origin-form.mjs.map +1 -1
- package/lib/formly/formly-checkboxes/formly-checkboxes.component.d.ts +17 -0
- package/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.d.ts +3 -0
- package/lib/model-population.helper.d.ts +1 -0
- package/lib/models/forms.model.d.ts +7 -1
- package/lib/origin-form.module.d.ts +64 -63
- package/lib/shared-components/treeview/treeview.component.d.ts +1 -0
- package/package.json +2 -2
|
@@ -204,12 +204,28 @@ export class AppTreeviewComponent {
|
|
|
204
204
|
const filterValue = event.target.value;
|
|
205
205
|
return this.filterText(filterValue);
|
|
206
206
|
}
|
|
207
|
+
updateSelectionByIds(ids) {
|
|
208
|
+
if (!this.treeControl.dataNodes)
|
|
209
|
+
return;
|
|
210
|
+
// Clear current selection
|
|
211
|
+
this.checklistSelection.clear();
|
|
212
|
+
// Select nodes that match the IDs
|
|
213
|
+
this.treeControl.dataNodes.forEach((node) => {
|
|
214
|
+
if (node.data && ids.includes(node.data.id)) {
|
|
215
|
+
this.checklistSelection.select(node);
|
|
216
|
+
node.isSelected = true;
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
node.isSelected = false;
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
}
|
|
207
223
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppTreeviewComponent, deps: [{ token: i1.ChecklistDatabase }, { token: i2.TranslatePipe }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
208
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AppTreeviewComponent, selector: "app-treeview", inputs: { allowAddItems: "allowAddItems", autoSelectDescendants: "autoSelectDescendants", allowCheckItems: "allowCheckItems", allowFilter: "allowFilter" }, outputs: { selectionChanged: "selectionChanged" }, providers: [ChecklistDatabase], ngImport: i0, template: "<mat-form-field class=\"full-width p-10\"\n *ngIf=\"allowFilter\"\n appearance=\"outline\">\n <mat-label> {{ commonKeys.actions.filter | translate }}</mat-label>\n <input matInput\n minlength=\"1\"\n (keyup)=\"applyFilter($event)\"\n placeholder=\"{{ commonKeys.actions.filter }}\"\n #input />\n</mat-form-field>\n\n<!--<cdk-virtual-scroll-viewport itemSize=\"30\" class=\"dictionary-viewport\">-->\n<mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n <!-- Leaf Nodes -->\n <mat-tree-node *matTreeNodeDef=\"let node\"\n matTreeNodePadding>\n <button mat-icon-button disabled></button>\n <!-- Node Content -->\n <ng-container>\n <!-- Checkbox for Selectable Nodes when checkboxes are allowed -->\n <ng-container *ngIf=\"node.canSelect && allowCheckItems\">\n <mat-checkbox class=\"checklist-leaf-node\"\n [checked]=\"checklistSelection.isSelected(node)\"\n (change)=\"leafItemSelectionToggle(node)\"\n color=\"primary\">\n {{ node.name }}\n </mat-checkbox>\n </ng-container>\n <!-- Clickable Label for Selectable Nodes when checkboxes are not allowed -->\n <ng-container *ngIf=\"node.canSelect && !allowCheckItems\">\n <mat-label class=\"mdc-label\"\n style=\"cursor: pointer\"\n (click)=\"leafItemSelectionToggle(node)\">\n {{ node.name }}\n </mat-label>\n </ng-container>\n <!-- Non-clickable Label for Non-selectable Nodes -->\n <ng-container *ngIf=\"!node.canSelect\">\n <mat-label class=\"mdc-label\">\n {{ node.name }}\n </mat-label>\n </ng-container>\n </ng-container>\n </mat-tree-node>\n\n <!-- Nodes with Children -->\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\"\n matTreeNodePadding>\n <!-- Expand/Collapse Button -->\n <button mat-icon-button\n matTreeNodeToggle\n [attr.aria-label]=\"'Toggle ' + node.name\"\n *ngIf=\"!node.hideArrow\">\n <mat-icon class=\"mat-icon-rtl-mirror\">\n {{ treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\n </mat-icon>\n </button>\n <!-- Node Content -->\n <ng-container>\n <!-- Checkbox for Selectable Nodes when checkboxes are allowed -->\n <ng-container *ngIf=\"node.canSelect && allowCheckItems\">\n <mat-checkbox [checked]=\"checklistSelection.isSelected(node)\"\n (change)=\"selectionToggle(node)\"\n color=\"primary\">\n {{ node.name }}\n </mat-checkbox>\n </ng-container>\n <!-- Clickable Label for Selectable Nodes when checkboxes are not allowed -->\n <ng-container *ngIf=\"node.canSelect && !allowCheckItems\">\n <mat-label class=\"mdc-label\"\n style=\"cursor: pointer\"\n (click)=\"leafItemSelectionToggle(node)\">\n {{ node.name }}\n </mat-label>\n </ng-container>\n <!-- Non-clickable Label for Non-selectable Nodes -->\n <ng-container *ngIf=\"!node.canSelect\">\n <mat-label class=\"mdc-label\">\n {{ node.name }}\n </mat-label>\n </ng-container>\n </ng-container>\n <!-- Add New Item Button -->\n <button mat-icon-button (click)=\"addNewItem(node)\" *ngIf=\"allowAddItems\">\n <mat-icon>add</mat-icon>\n </button>\n </mat-tree-node>\n</mat-tree>\n<!--</cdk-virtual-scroll-viewport>-->\n", styles: [".dictionary-viewport{height:400px;width:100%}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i7.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i7.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i7.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i7.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i7.MatTreeNode, selector: "mat-tree-node", inputs: ["tabIndex", "disabled"], outputs: ["activation", "expandedChange"], exportAs: ["matTreeNode"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
|
|
224
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AppTreeviewComponent, selector: "app-treeview", inputs: { allowAddItems: "allowAddItems", autoSelectDescendants: "autoSelectDescendants", allowCheckItems: "allowCheckItems", allowFilter: "allowFilter" }, outputs: { selectionChanged: "selectionChanged" }, providers: [ChecklistDatabase], ngImport: i0, template: "<mat-form-field class=\"full-width p-10\"\n *ngIf=\"allowFilter\"\n appearance=\"outline\">\n <mat-label> {{ commonKeys.actions.filter | translate }}</mat-label>\n <input matInput\n minlength=\"1\"\n (keyup)=\"applyFilter($event)\"\n placeholder=\"{{ commonKeys.actions.filter }}\"\n #input />\n</mat-form-field>\n\n<!--<cdk-virtual-scroll-viewport itemSize=\"30\" class=\"dictionary-viewport\">-->\n<mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n <!-- Leaf Nodes -->\n <mat-tree-node *matTreeNodeDef=\"let node\"\n matTreeNodePadding>\n <button mat-icon-button disabled></button>\n <!-- Node Content -->\n <ng-container>\n <!-- Checkbox for Selectable Nodes when checkboxes are allowed -->\n <ng-container *ngIf=\"node.canSelect && allowCheckItems\">\n <mat-checkbox class=\"checklist-leaf-node\"\n [checked]=\"checklistSelection.isSelected(node)\"\n (change)=\"leafItemSelectionToggle(node)\"\n (click)=\"$event.stopPropagation()\"\n color=\"primary\">\n {{ node.name }}\n </mat-checkbox>\n </ng-container>\n <!-- Clickable Label for Selectable Nodes when checkboxes are not allowed -->\n <ng-container *ngIf=\"node.canSelect && !allowCheckItems\">\n <mat-label class=\"mdc-label\"\n style=\"cursor: pointer\"\n (click)=\"leafItemSelectionToggle(node)\">\n {{ node.name }}\n </mat-label>\n </ng-container>\n <!-- Non-clickable Label for Non-selectable Nodes -->\n <ng-container *ngIf=\"!node.canSelect\">\n <mat-label class=\"mdc-label\">\n {{ node.name }}\n </mat-label>\n </ng-container>\n </ng-container>\n </mat-tree-node>\n\n <!-- Nodes with Children -->\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\"\n matTreeNodePadding>\n <!-- Expand/Collapse Button -->\n <button mat-icon-button\n matTreeNodeToggle\n [attr.aria-label]=\"'Toggle ' + node.name\"\n *ngIf=\"!node.hideArrow\">\n <mat-icon class=\"mat-icon-rtl-mirror\">\n {{ treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\n </mat-icon>\n </button>\n <!-- Node Content -->\n <ng-container>\n <!-- Checkbox for Selectable Nodes when checkboxes are allowed -->\n <ng-container *ngIf=\"node.canSelect && allowCheckItems && treeControl.getLevel(node) > 0\">\n <mat-checkbox [checked]=\"checklistSelection.isSelected(node)\"\n (change)=\"selectionToggle(node)\"\n (click)=\"$event.stopPropagation()\"\n color=\"primary\">\n {{ node.name }}\n </mat-checkbox>\n </ng-container>\n <!-- Clickable Label for Selectable Nodes when checkboxes are not allowed -->\n <ng-container *ngIf=\"node.canSelect && !allowCheckItems\">\n <mat-label class=\"mdc-label\"\n style=\"cursor: pointer\"\n (click)=\"leafItemSelectionToggle(node)\">\n {{ node.name }}\n </mat-label>\n </ng-container>\n <!-- Non-clickable Label for Non-selectable Nodes -->\n <ng-container *ngIf=\"!node.canSelect\">\n <mat-label class=\"mdc-label\">\n {{ node.name }}\n </mat-label>\n </ng-container>\n </ng-container>\n <!-- Add New Item Button -->\n <button mat-icon-button (click)=\"addNewItem(node)\" *ngIf=\"allowAddItems\">\n <mat-icon>add</mat-icon>\n </button>\n </mat-tree-node>\n</mat-tree>\n<!--</cdk-virtual-scroll-viewport>-->\n", styles: [".dictionary-viewport{height:400px;width:100%}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i7.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i7.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i7.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i7.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i7.MatTreeNode, selector: "mat-tree-node", inputs: ["tabIndex", "disabled"], outputs: ["activation", "expandedChange"], exportAs: ["matTreeNode"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
|
|
209
225
|
}
|
|
210
226
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppTreeviewComponent, decorators: [{
|
|
211
227
|
type: Component,
|
|
212
|
-
args: [{ selector: 'app-treeview', providers: [ChecklistDatabase], template: "<mat-form-field class=\"full-width p-10\"\n *ngIf=\"allowFilter\"\n appearance=\"outline\">\n <mat-label> {{ commonKeys.actions.filter | translate }}</mat-label>\n <input matInput\n minlength=\"1\"\n (keyup)=\"applyFilter($event)\"\n placeholder=\"{{ commonKeys.actions.filter }}\"\n #input />\n</mat-form-field>\n\n<!--<cdk-virtual-scroll-viewport itemSize=\"30\" class=\"dictionary-viewport\">-->\n<mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n <!-- Leaf Nodes -->\n <mat-tree-node *matTreeNodeDef=\"let node\"\n matTreeNodePadding>\n <button mat-icon-button disabled></button>\n <!-- Node Content -->\n <ng-container>\n <!-- Checkbox for Selectable Nodes when checkboxes are allowed -->\n <ng-container *ngIf=\"node.canSelect && allowCheckItems\">\n <mat-checkbox class=\"checklist-leaf-node\"\n [checked]=\"checklistSelection.isSelected(node)\"\n (change)=\"leafItemSelectionToggle(node)\"\n color=\"primary\">\n {{ node.name }}\n </mat-checkbox>\n </ng-container>\n <!-- Clickable Label for Selectable Nodes when checkboxes are not allowed -->\n <ng-container *ngIf=\"node.canSelect && !allowCheckItems\">\n <mat-label class=\"mdc-label\"\n style=\"cursor: pointer\"\n (click)=\"leafItemSelectionToggle(node)\">\n {{ node.name }}\n </mat-label>\n </ng-container>\n <!-- Non-clickable Label for Non-selectable Nodes -->\n <ng-container *ngIf=\"!node.canSelect\">\n <mat-label class=\"mdc-label\">\n {{ node.name }}\n </mat-label>\n </ng-container>\n </ng-container>\n </mat-tree-node>\n\n <!-- Nodes with Children -->\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\"\n matTreeNodePadding>\n <!-- Expand/Collapse Button -->\n <button mat-icon-button\n matTreeNodeToggle\n [attr.aria-label]=\"'Toggle ' + node.name\"\n *ngIf=\"!node.hideArrow\">\n <mat-icon class=\"mat-icon-rtl-mirror\">\n {{ treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\n </mat-icon>\n </button>\n <!-- Node Content -->\n <ng-container>\n <!-- Checkbox for Selectable Nodes when checkboxes are allowed -->\n <ng-container *ngIf=\"node.canSelect && allowCheckItems\">\n <mat-checkbox [checked]=\"checklistSelection.isSelected(node)\"\n (change)=\"selectionToggle(node)\"\n color=\"primary\">\n {{ node.name }}\n </mat-checkbox>\n </ng-container>\n <!-- Clickable Label for Selectable Nodes when checkboxes are not allowed -->\n <ng-container *ngIf=\"node.canSelect && !allowCheckItems\">\n <mat-label class=\"mdc-label\"\n style=\"cursor: pointer\"\n (click)=\"leafItemSelectionToggle(node)\">\n {{ node.name }}\n </mat-label>\n </ng-container>\n <!-- Non-clickable Label for Non-selectable Nodes -->\n <ng-container *ngIf=\"!node.canSelect\">\n <mat-label class=\"mdc-label\">\n {{ node.name }}\n </mat-label>\n </ng-container>\n </ng-container>\n <!-- Add New Item Button -->\n <button mat-icon-button (click)=\"addNewItem(node)\" *ngIf=\"allowAddItems\">\n <mat-icon>add</mat-icon>\n </button>\n </mat-tree-node>\n</mat-tree>\n<!--</cdk-virtual-scroll-viewport>-->\n", styles: [".dictionary-viewport{height:400px;width:100%}\n"] }]
|
|
228
|
+
args: [{ selector: 'app-treeview', providers: [ChecklistDatabase], template: "<mat-form-field class=\"full-width p-10\"\n *ngIf=\"allowFilter\"\n appearance=\"outline\">\n <mat-label> {{ commonKeys.actions.filter | translate }}</mat-label>\n <input matInput\n minlength=\"1\"\n (keyup)=\"applyFilter($event)\"\n placeholder=\"{{ commonKeys.actions.filter }}\"\n #input />\n</mat-form-field>\n\n<!--<cdk-virtual-scroll-viewport itemSize=\"30\" class=\"dictionary-viewport\">-->\n<mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n <!-- Leaf Nodes -->\n <mat-tree-node *matTreeNodeDef=\"let node\"\n matTreeNodePadding>\n <button mat-icon-button disabled></button>\n <!-- Node Content -->\n <ng-container>\n <!-- Checkbox for Selectable Nodes when checkboxes are allowed -->\n <ng-container *ngIf=\"node.canSelect && allowCheckItems\">\n <mat-checkbox class=\"checklist-leaf-node\"\n [checked]=\"checklistSelection.isSelected(node)\"\n (change)=\"leafItemSelectionToggle(node)\"\n (click)=\"$event.stopPropagation()\"\n color=\"primary\">\n {{ node.name }}\n </mat-checkbox>\n </ng-container>\n <!-- Clickable Label for Selectable Nodes when checkboxes are not allowed -->\n <ng-container *ngIf=\"node.canSelect && !allowCheckItems\">\n <mat-label class=\"mdc-label\"\n style=\"cursor: pointer\"\n (click)=\"leafItemSelectionToggle(node)\">\n {{ node.name }}\n </mat-label>\n </ng-container>\n <!-- Non-clickable Label for Non-selectable Nodes -->\n <ng-container *ngIf=\"!node.canSelect\">\n <mat-label class=\"mdc-label\">\n {{ node.name }}\n </mat-label>\n </ng-container>\n </ng-container>\n </mat-tree-node>\n\n <!-- Nodes with Children -->\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\"\n matTreeNodePadding>\n <!-- Expand/Collapse Button -->\n <button mat-icon-button\n matTreeNodeToggle\n [attr.aria-label]=\"'Toggle ' + node.name\"\n *ngIf=\"!node.hideArrow\">\n <mat-icon class=\"mat-icon-rtl-mirror\">\n {{ treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\n </mat-icon>\n </button>\n <!-- Node Content -->\n <ng-container>\n <!-- Checkbox for Selectable Nodes when checkboxes are allowed -->\n <ng-container *ngIf=\"node.canSelect && allowCheckItems && treeControl.getLevel(node) > 0\">\n <mat-checkbox [checked]=\"checklistSelection.isSelected(node)\"\n (change)=\"selectionToggle(node)\"\n (click)=\"$event.stopPropagation()\"\n color=\"primary\">\n {{ node.name }}\n </mat-checkbox>\n </ng-container>\n <!-- Clickable Label for Selectable Nodes when checkboxes are not allowed -->\n <ng-container *ngIf=\"node.canSelect && !allowCheckItems\">\n <mat-label class=\"mdc-label\"\n style=\"cursor: pointer\"\n (click)=\"leafItemSelectionToggle(node)\">\n {{ node.name }}\n </mat-label>\n </ng-container>\n <!-- Non-clickable Label for Non-selectable Nodes -->\n <ng-container *ngIf=\"!node.canSelect\">\n <mat-label class=\"mdc-label\">\n {{ node.name }}\n </mat-label>\n </ng-container>\n </ng-container>\n <!-- Add New Item Button -->\n <button mat-icon-button (click)=\"addNewItem(node)\" *ngIf=\"allowAddItems\">\n <mat-icon>add</mat-icon>\n </button>\n </mat-tree-node>\n</mat-tree>\n<!--</cdk-virtual-scroll-viewport>-->\n", styles: [".dictionary-viewport{height:400px;width:100%}\n"] }]
|
|
213
229
|
}], ctorParameters: () => [{ type: i1.ChecklistDatabase }, { type: i2.TranslatePipe }], propDecorators: { allowAddItems: [{
|
|
214
230
|
type: Input
|
|
215
231
|
}], autoSelectDescendants: [{
|
|
@@ -221,4 +237,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
221
237
|
}], selectionChanged: [{
|
|
222
238
|
type: Output
|
|
223
239
|
}] } });
|
|
224
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9zaGFyZWQtY29tcG9uZW50cy90cmVldmlldy90cmVldmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcmlnaW4tZm9ybS9zcmMvbGliL3NoYXJlZC1jb21wb25lbnRzL3RyZWV2aWV3L3RyZWV2aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixnQkFBZ0IsR0FDakIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sNkJBQTZCLENBQUM7QUFDckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7Ozs7Ozs7O0FBU3JFLE1BQU0sT0FBTyxvQkFBb0I7SUFtQi9CLFlBQ1UsUUFBMkIsRUFDM0IsU0FBd0I7UUFEeEIsYUFBUSxHQUFSLFFBQVEsQ0FBbUI7UUFDM0IsY0FBUyxHQUFULFNBQVMsQ0FBZTtRQXBCekIsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0IsMEJBQXFCLEdBQVksSUFBSSxDQUFDO1FBRXRDLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzVCLHFCQUFnQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzNELFdBQU0sR0FBWSxJQUFJLENB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QUFDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFZO1FBQ3RCLE1BQU0sV0FBVyxHQUFJLEtBQUssQ0FBQyxNQUEyQixDQUFDLEtBQUssQ0FBQztRQUM3RCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdEMsQ0FBQzsrR0F6T1Usb0JBQW9CO21HQUFwQixvQkFBb0Isc1BBRnBCLENBQUMsaUJBQWlCLENBQUMsMEJDckJoQyxnaEhBeUZBOzs0RkRsRWEsb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNFLGNBQWMsYUFHYixDQUFDLGlCQUFpQixDQUFDO2tIQUdyQixhQUFhO3NCQUFyQixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0ksZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgRmxhdFRyZWVDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xuaW1wb3J0IHtcbiAgTWF0VHJlZUZsYXREYXRhU291cmNlLFxuICBNYXRUcmVlRmxhdHRlbmVyLFxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExhYmVsS2V5cyB9IGZyb20gJy4uLy4uL2VudW1zL2xhYmVsLmtleXMnO1xuaW1wb3J0IHsgSXRlbUZsYXROb2RlLCBJdGVtTm9kZSB9IGZyb20gJy4uLy4uL21vZGVscy90cmVldmlldy5tb2RlbCc7XG5pbXBvcnQgeyBDaGVja2xpc3REYXRhYmFzZSB9IGZyb20gJy4uLy4uL290aGVycy9jaGVjay1saXN0LmRhdGFiYXNlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9vdGhlcnMvdHJhbnNsYXRpb24ucGlwZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC10cmVldmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi90cmVldmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi90cmVldmlldy5jb21wb25lbnQuc2NzcycsXG4gIHByb3ZpZGVyczogW0NoZWNrbGlzdERhdGFiYXNlXSxcbn0pXG5leHBvcnQgY2xhc3MgQXBwVHJlZXZpZXdDb21wb25lbnQge1xuICBASW5wdXQoKSBhbGxvd0FkZEl0ZW1zOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGF1dG9TZWxlY3REZXNjZW5kYW50czogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGFsbG93Q2hlY2tJdGVtczogYm9vbGVhbjtcbiAgQElucHV0KCkgYWxsb3dGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwcml2YXRlIGlzSW5pdDogYm9vbGVhbiA9IHRydWU7XG4gIHByaXZhdGUgc2VsZWN0ZWROb2RlOiBJdGVtRmxhdE5vZGU7XG4gIC8qKiBNYXAgZnJvbSBmbGF0IG5vZGUgdG8gbmVzdGVkIG5vZGUuIFRoaXMgaGVscHMgdXMgZmluZGluZyB0aGUgbmVzdGVkIG5vZGUgdG8gYmUgbW9kaWZpZWQgKi9cbiAgZmxhdE5vZGVNYXAgPSBuZXcgTWFwPEl0ZW1GbGF0Tm9kZSwgSXRlbU5vZGU+KCk7XG4gIC8qKiBNYXAgZnJvbSBuZXN0ZWQgbm9kZSB0byBmbGF0dGVuZWQgbm9kZS4gVGhpcyBoZWxwcyB1cyB0byBrZWVwIHRoZSBzYW1lIG9iamVjdCBmb3Igc2VsZWN0aW9uICovXG4gIG5lc3RlZE5vZGVNYXAgPSBuZXcgTWFwPEl0ZW1Ob2RlLCBJdGVtRmxhdE5vZGU+KCk7XG4gIHNlbGVjdGVkUGFyZW50OiBJdGVtRmxhdE5vZGUgfCBudWxsID0gbnVsbDtcbiAgbmV3SXRlbU5hbWUgPSAnJztcbiAgdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxJdGVtRmxhdE5vZGU+O1xuICB0cmVlRmxhdHRlbmVyOiBNYXRUcmVlRmxhdHRlbmVyPEl0ZW1Ob2RlLCBJdGVtRmxhdE5vZGU+O1xuICBkYXRhU291cmNlOiBNYXRUcmVlRmxhdERhdGFTb3VyY2U8SXRlbU5vZGUsIEl0ZW1GbGF0Tm9kZT47XG4gIGNoZWNrbGlzdFNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxJdGVtRmxhdE5vZGU+KHRydWUpO1xuICBjb21tb25LZXlzID0gTGFiZWxLZXlzLmNvbW1vbjtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkYXRhYmFzZTogQ2hlY2tsaXN0RGF0YWJhc2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVBpcGVcbiAgKSB7XG4gICAgdGhpcy50cmVlRmxhdHRlbmVyID0gbmV3IE1hdFRyZWVGbGF0dGVuZXIoXG4gICAgICB0aGlzLnRyYW5zZm9ybWVyLFxuICAgICAgdGhpcy5nZXRMZXZlbCxcbiAgICAgIHRoaXMuaXNFeHBhbmRhYmxlLFxuICAgICAgdGhpcy5nZXRDaGlsZHJlblxuICAgICk7XG4gICAgdGhpcy50cmVlQ29udHJvbCA9IG5ldyBGbGF0VHJlZUNvbnRyb2w8SXRlbUZsYXROb2RlPihcbiAgICAgIHRoaXMuZ2V0TGV2ZWwsXG4gICAgICB0aGlzLmlzRXhwYW5kYWJsZVxuICAgICk7XG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRyZWVGbGF0RGF0YVNvdXJjZShcbiAgICAgIHRoaXMudHJlZUNvbnRyb2wsXG4gICAgICB0aGlzLnRyZWVGbGF0dGVuZXJcbiAgICApO1xuXG4gICAgZGF0YWJhc2UuZGF0YUNoYW5nZS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcbiAgICB9KTtcblxuICAgIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmNoYW5nZWQuc3Vic2NyaWJlKChub2RlKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc0luaXQgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KG5vZGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0TGV2ZWwgPSAobm9kZTogSXRlbUZsYXROb2RlKSA9PiBub2RlLmxldmVsO1xuICBpc0V4cGFuZGFibGUgPSAobm9kZTogSXRlbUZsYXROb2RlKSA9PiBub2RlLmV4cGFuZGFibGU7XG4gIGdldENoaWxkcmVuID0gKG5vZGU6IEl0ZW1Ob2RlKTogSXRlbU5vZGVbXSA9PiBub2RlLmNoaWxkcmVuO1xuICBoYXNDaGlsZCA9IChfOiBudW1iZXIsIF9ub2RlRGF0YTogSXRlbUZsYXROb2RlKSA9PiBfbm9kZURhdGEuZXhwYW5kYWJsZTtcbiAgaGFzTm9Db250ZW50ID0gKF86IG51bWJlciwgX25vZGVEYXRhOiBJdGVtRmxhdE5vZGUpID0+IF9ub2RlRGF0YS5uYW1lID09PSAnJztcblxuICAvKipcbiAgICogVHJhbnNmb3JtZXIgdG8gY29udmVydCBuZXN0ZWQgbm9kZSB0byBmbGF0IG5vZGUuIFJlY29yZCB0aGUgbm9kZXMgaW4gbWFwcyBmb3IgbGF0ZXIgdXNlLlxuICAgKi9cbiAgdHJhbnNmb3JtZXIgPSAobm9kZTogSXRlbU5vZGUsIGxldmVsOiBudW1iZXIpID0+IHtcbiAgICB0aGlzLmlzSW5pdCA9IHRydWU7XG5cbiAgICBjb25zdCBleGlzdGluZ05vZGUgPSB0aGlzLm5lc3RlZE5vZGVNYXAuZ2V0KG5vZGUpO1xuICAgIGNvbnN0IGZsYXROb2RlID1cbiAgICAgIGV4aXN0aW5nTm9kZSAmJiBleGlzdGluZ05vZGUubmFtZSA9PT0gbm9kZS5uYW1lXG4gICAgICAgID8gZXhpc3RpbmdOb2RlXG4gICAgICAgIDogbmV3IEl0ZW1GbGF0Tm9kZSgpO1xuICAgIGZsYXROb2RlLm5hbWUgPSBub2RlLm5hbWU7XG4gICAgZmxhdE5vZGUubGV2ZWwgPSBsZXZlbDtcbiAgICBmbGF0Tm9kZS5jYW5TZWxlY3QgPSBub2RlLmNhblNlbGVjdDtcbiAgICBmbGF0Tm9kZS5kYXRhID0gbm9kZS5kYXRhO1xuICAgIGZsYXROb2RlLmlzU2VsZWN0ZWQgPSBub2RlLmlzU2VsZWN0ZWQ7XG4gICAgZmxhdE5vZGUuZXhwYW5kYWJsZSA9ICEhbm9kZS5jaGlsZHJlbj8ubGVuZ3RoO1xuICAgIGZsYXROb2RlLmhpZGVBcnJvdyA9IG5vZGUuaGlkZUFycm93O1xuICAgIHRoaXMuZmxhdE5vZGVNYXAuc2V0KGZsYXROb2RlLCBub2RlKTtcbiAgICB0aGlzLm5lc3RlZE5vZGVNYXAuc2V0KG5vZGUsIGZsYXROb2RlKTtcblxuICAgIGlmIChmbGF0Tm9kZS5pc1NlbGVjdGVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi5zZWxlY3QoZmxhdE5vZGUpO1xuICAgIH1cbiAgICB0aGlzLmlzSW5pdCA9IGZhbHNlO1xuICAgIHJldHVybiBmbGF0Tm9kZTtcbiAgfTtcblxuICAvKiogV2hldGhlciBhbGwgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBub2RlIGFyZSBzZWxlY3RlZC4gKi9cbiAgZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlOiBJdGVtRmxhdE5vZGUpOiBib29sZWFuIHtcbiAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMobm9kZSk7XG4gICAgY29uc3QgZGVzY0FsbFNlbGVjdGVkID1cbiAgICAgIGRlc2NlbmRhbnRzLmxlbmd0aCA+IDAgJiZcbiAgICAgIGRlc2NlbmRhbnRzLmV2ZXJ5KChjaGlsZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGVja2xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChjaGlsZCk7XG4gICAgICB9KTtcbiAgICByZXR1cm4gZGVzY0FsbFNlbGVjdGVkO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgcGFydCBvZiB0aGUgZGVzY2VuZGFudHMgYXJlIHNlbGVjdGVkICovXG4gIGRlc2NlbmRhbnRzUGFydGlhbGx5U2VsZWN0ZWQobm9kZTogSXRlbUZsYXROb2RlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGRlc2NlbmRhbnRzLnNvbWUoKGNoaWxkKSA9PlxuICAgICAgdGhpcy5jaGVja2xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChjaGlsZClcbiAgICApO1xuICAgIHJldHVybiByZXN1bHQgJiYgIXRoaXMuZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlKTtcbiAgfVxuXG4gIC8qKiBUb2dnbGUgdGhlIHRvLWRvIGl0ZW0gc2VsZWN0aW9uLiBTZWxlY3QvZGVzZWxlY3QgYWxsIHRoZSBkZXNjZW5kYW50cyBub2RlICovXG4gIHNlbGVjdGlvblRvZ2dsZShub2RlOiBJdGVtRmxhdE5vZGUpOiB2b2lkIHtcbiAgICBpZiAoIW5vZGUuY2FuU2VsZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLnRvZ2dsZShub2RlKTtcbiAgICBpZiAodGhpcy5hdXRvU2VsZWN0RGVzY2VuZGFudHMpIHtcbiAgICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gdGhpcy50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhub2RlKTtcbiAgICAgIGlmICh0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpKSB7XG4gICAgICAgIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdCguLi5kZXNjZW5kYW50cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi5kZXNlbGVjdCguLi5kZXNjZW5kYW50cyk7XG4gICAgICB9XG4gICAgICB0aGlzLmNoZWNrQWxsUGFyZW50c1NlbGVjdGlvbihub2RlKTtcbiAgICB9XG4gIH1cblxuICBsZWFmSXRlbVNlbGVjdGlvblRvZ2dsZShub2RlOiBJdGVtRmxhdE5vZGUpOiB2b2lkIHtcbiAgICBpZiAoIW5vZGUuY2FuU2VsZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5hbGxvd0NoZWNrSXRlbXMpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gbm9kZTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KG5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi50b2dnbGUobm9kZSk7XG4gICAgICBpZiAodGhpcy5hdXRvU2VsZWN0RGVzY2VuZGFudHMpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsbFBhcmVudHNTZWxlY3Rpb24obm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyogQ2hlY2tzIGFsbCB0aGUgcGFyZW50cyB3aGVuIGEgbGVhZiBub2RlIGlzIHNlbGVjdGVkL3Vuc2VsZWN0ZWQgKi9cbiAgY2hlY2tBbGxQYXJlbnRzU2VsZWN0aW9uKG5vZGU6IEl0ZW1GbGF0Tm9kZSk6IHZvaWQge1xuICAgIGxldCBwYXJlbnQ6IEl0ZW1GbGF0Tm9kZSB8IG51bGwgPSB0aGlzLmdldFBhcmVudE5vZGUobm9kZSk7XG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgdGhpcy5jaGVja1Jvb3ROb2RlU2VsZWN0aW9uKHBhcmVudCk7XG4gICAgICBwYXJlbnQgPSB0aGlzLmdldFBhcmVudE5vZGUocGFyZW50KTtcbiAgICB9XG4gIH1cblxuICAvKiogQ2hlY2sgcm9vdCBub2RlIGNoZWNrZWQgc3RhdGUgYW5kIGNoYW5nZSBpdCBhY2NvcmRpbmdseSAqL1xuICBjaGVja1Jvb3ROb2RlU2VsZWN0aW9uKG5vZGU6IEl0ZW1GbGF0Tm9kZSk6IHZvaWQge1xuICAgIGNvbnN0IG5vZGVTZWxlY3RlZCA9IHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSk7XG4gICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpO1xuICAgIGNvbnN0IGRlc2NBbGxTZWxlY3RlZCA9XG4gICAgICBkZXNjZW5kYW50cy5sZW5ndGggPiAwICYmXG4gICAgICBkZXNjZW5kYW50cy5ldmVyeSgoY2hpbGQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQoY2hpbGQpO1xuICAgICAgfSk7XG4gICAgaWYgKG5vZGVTZWxlY3RlZCAmJiAhZGVzY0FsbFNlbGVjdGVkKSB7XG4gICAgICB0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi5kZXNlbGVjdChub2RlKTtcbiAgICB9IGVsc2UgaWYgKCFub2RlU2VsZWN0ZWQgJiYgZGVzY0FsbFNlbGVjdGVkKSB7XG4gICAgICB0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi5zZWxlY3Qobm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLyogR2V0IHRoZSBwYXJlbnQgbm9kZSBvZiBhIG5vZGUgKi9cbiAgZ2V0UGFyZW50Tm9kZShub2RlOiBJdGVtRmxhdE5vZGUpOiBJdGVtRmxhdE5vZGUgfCBudWxsIHtcbiAgICBjb25zdCBjdXJyZW50TGV2ZWwgPSB0aGlzLmdldExldmVsKG5vZGUpO1xuXG4gICAgaWYgKGN1cnJlbnRMZXZlbCA8IDEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5pbmRleE9mKG5vZGUpIC0gMTtcblxuICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4OyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgY3VycmVudE5vZGUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXTtcblxuICAgICAgaWYgKHRoaXMuZ2V0TGV2ZWwoY3VycmVudE5vZGUpIDwgY3VycmVudExldmVsKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpbml0aWFsaXplKGRhdGE6IEl0ZW1Ob2RlW10pIHtcbiAgICB0aGlzLmRhdGFiYXNlLmluaXRpYWxpemUoZGF0YSk7XG4gIH1cblxuICBnZXRTZWxlY3RlZE5vZGVzKCk6IEl0ZW1GbGF0Tm9kZVtdIHtcbiAgICBsZXQgc2VsZWN0ZWROb2RlczogSXRlbUZsYXROb2RlW10gPSBbXTtcbiAgICBpZiAoIXRoaXMuYWxsb3dDaGVja0l0ZW1zKSB7XG4gICAgICBzZWxlY3RlZE5vZGVzLnB1c2godGhpcy5zZWxlY3RlZE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG4pKSB7XG4gICAgICAgICAgbi5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICBzZWxlY3RlZE5vZGVzLnB1c2gobik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0ZWROb2RlcztcbiAgfVxuXG4gIC8qKiBTZWxlY3QgdGhlIGNhdGVnb3J5IHNvIHdlIGNhbiBpbnNlcnQgdGhlIG5ldyBpdGVtLiAqL1xuICBhZGROZXdJdGVtKG5vZGU6IEl0ZW1GbGF0Tm9kZSkge1xuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLmZsYXROb2RlTWFwLmdldChub2RlKTtcbiAgICB0aGlzLmRhdGFiYXNlLmluc2VydEl0ZW0ocGFyZW50Tm9kZSEsICcnKTtcbiAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZChub2RlKTtcbiAgfVxuXG4gIC8qKiBTYXZlIHRoZSBub2RlIHRvIGRhdGFiYXNlICovXG4gIHNhdmVOb2RlKG5vZGU6IEl0ZW1GbGF0Tm9kZSwgaXRlbVZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5mbGF0Tm9kZU1hcC5nZXQobm9kZSk7XG4gICAgdGhpcy5kYXRhYmFzZS51cGRhdGVJdGVtKG5lc3RlZE5vZGUhLCBpdGVtVmFsdWUpO1xuICB9XG5cbiAgZmlsdGVyVGV4dCh0ZXh0OiBzdHJpbmcpIHtcbiAgICB0aGlzLmRhdGFiYXNlLmZpbHRlcih0ZXh0KTtcbiAgICB0aGlzLmV4cGFuZEFsbCgpO1xuICB9XG5cbiAgZXhwYW5kQWxsKCkge1xuICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kQWxsKCk7XG4gIH1cblxuICBleHBhbmROb2RlKG5vZGVJbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMgJiZcbiAgICAgIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmxlbmd0aCA+IG5vZGVJbmRleFxuICAgICkge1xuICAgICAgdGhpcy50cmVlQ29udHJvbC5leHBhbmQodGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbbm9kZUluZGV4XSk7XG4gICAgfVxuICB9XG5cbiAgYXBwbHlGaWx0ZXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgZmlsdGVyVmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgIHJldHVybiB0aGlzLmZpbHRlclRleHQoZmlsdGVyVmFsdWUpO1xuICB9XG59XG4iLCI8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmdWxsLXdpZHRoIHAtMTBcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiYWxsb3dGaWx0ZXJcIlxuICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gIDxtYXQtbGFiZWw+IHt7IGNvbW1vbktleXMuYWN0aW9ucy5maWx0ZXIgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgPGlucHV0IG1hdElucHV0XG4gICAgICAgICBtaW5sZW5ndGg9XCIxXCJcbiAgICAgICAgIChrZXl1cCk9XCJhcHBseUZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgY29tbW9uS2V5cy5hY3Rpb25zLmZpbHRlciB9fVwiXG4gICAgICAgICAjaW5wdXQgLz5cbjwvbWF0LWZvcm0tZmllbGQ+XG5cbjwhLS08Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IGl0ZW1TaXplPVwiMzBcIiBjbGFzcz1cImRpY3Rpb25hcnktdmlld3BvcnRcIj4tLT5cbjxtYXQtdHJlZSBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgW3RyZWVDb250cm9sXT1cInRyZWVDb250cm9sXCI+XG4gIDwhLS0gTGVhZiBOb2RlcyAtLT5cbiAgPG1hdC10cmVlLW5vZGUgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIlxuICAgICAgICAgICAgICAgICBtYXRUcmVlTm9kZVBhZGRpbmc+XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gZGlzYWJsZWQ+PC9idXR0b24+XG4gICAgPCEtLSBOb2RlIENvbnRlbnQgLS0+XG4gICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgIDwhLS0gQ2hlY2tib3ggZm9yIFNlbGVjdGFibGUgTm9kZXMgd2hlbiBjaGVja2JveGVzIGFyZSBhbGxvd2VkIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGUuY2FuU2VsZWN0ICYmIGFsbG93Q2hlY2tJdGVtc1wiPlxuICAgICAgICA8bWF0LWNoZWNrYm94IGNsYXNzPVwiY2hlY2tsaXN0LWxlYWYtbm9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiY2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwibGVhZkl0ZW1TZWxlY3Rpb25Ub2dnbGUobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgIHt7IG5vZGUubmFtZSB9fVxuICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPCEtLSBDbGlja2FibGUgTGFiZWwgZm9yIFNlbGVjdGFibGUgTm9kZXMgd2hlbiBjaGVja2JveGVzIGFyZSBub3QgYWxsb3dlZCAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlLmNhblNlbGVjdCAmJiAhYWxsb3dDaGVja0l0ZW1zXCI+XG4gICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJtZGMtbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibGVhZkl0ZW1TZWxlY3Rpb25Ub2dnbGUobm9kZSlcIj5cbiAgICAgICAgICB7eyBub2RlLm5hbWUgfX1cbiAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwhLS0gTm9uLWNsaWNrYWJsZSBMYWJlbCBmb3IgTm9uLXNlbGVjdGFibGUgTm9kZXMgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW5vZGUuY2FuU2VsZWN0XCI+XG4gICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJtZGMtbGFiZWxcIj5cbiAgICAgICAgICB7eyBub2RlLm5hbWUgfX1cbiAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdHJlZS1ub2RlPlxuXG4gIDwhLS0gTm9kZXMgd2l0aCBDaGlsZHJlbiAtLT5cbiAgPG1hdC10cmVlLW5vZGUgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGU7IHdoZW46IGhhc0NoaWxkXCJcbiAgICAgICAgICAgICAgICAgbWF0VHJlZU5vZGVQYWRkaW5nPlxuICAgIDwhLS0gRXhwYW5kL0NvbGxhcHNlIEJ1dHRvbiAtLT5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgbWF0VHJlZU5vZGVUb2dnbGVcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1RvZ2dsZSAnICsgbm9kZS5uYW1lXCJcbiAgICAgICAgICAgICpuZ0lmPVwiIW5vZGUuaGlkZUFycm93XCI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCI+XG4gICAgICAgIHt7IHRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkgPyAnZXhwYW5kX21vcmUnIDogJ2NoZXZyb25fcmlnaHQnIH19XG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAgIDwhLS0gTm9kZSBDb250ZW50IC0tPlxuICAgIDxuZy1jb250YWluZXI+XG4gICAgICA8IS0tIENoZWNrYm94IGZvciBTZWxlY3RhYmxlIE5vZGVzIHdoZW4gY2hlY2tib3hlcyBhcmUgYWxsb3dlZCAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlLmNhblNlbGVjdCAmJiBhbGxvd0NoZWNrSXRlbXNcIj5cbiAgICAgICAgPG1hdC1jaGVja2JveCBbY2hlY2tlZF09XCJjaGVja2xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3Rpb25Ub2dnbGUobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgIHt7IG5vZGUubmFtZSB9fVxuICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPCEtLSBDbGlja2FibGUgTGFiZWwgZm9yIFNlbGVjdGFibGUgTm9kZXMgd2hlbiBjaGVja2JveGVzIGFyZSBub3QgYWxsb3dlZCAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlLmNhblNlbGVjdCAmJiAhYWxsb3dDaGVja0l0ZW1zXCI+XG4gICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJtZGMtbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibGVhZkl0ZW1TZWxlY3Rpb25Ub2dnbGUobm9kZSlcIj5cbiAgICAgICAgICB7eyBub2RlLm5hbWUgfX1cbiAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwhLS0gTm9uLWNsaWNrYWJsZSBMYWJlbCBmb3IgTm9uLXNlbGVjdGFibGUgTm9kZXMgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW5vZGUuY2FuU2VsZWN0XCI+XG4gICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJtZGMtbGFiZWxcIj5cbiAgICAgICAgICB7eyBub2RlLm5hbWUgfX1cbiAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8IS0tIEFkZCBOZXcgSXRlbSBCdXR0b24gLS0+XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImFkZE5ld0l0ZW0obm9kZSlcIiAqbmdJZj1cImFsbG93QWRkSXRlbXNcIj5cbiAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10cmVlLW5vZGU+XG48L21hdC10cmVlPlxuPCEtLTwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Pi0tPlxuIl19
|
|
240
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9zaGFyZWQtY29tcG9uZW50cy90cmVldmlldy90cmVldmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcmlnaW4tZm9ybS9zcmMvbGliL3NoYXJlZC1jb21wb25lbnRzL3RyZWV2aWV3L3RyZWV2aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixnQkFBZ0IsR0FDakIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sNkJBQTZCLENBQUM7QUFDckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7Ozs7Ozs7O0FBU3JFLE1BQU0sT0FBTyxvQkFBb0I7SUFtQi9CLFlBQ1UsUUFBMkIsRUFDM0IsU0FBd0I7UUFEeEIsYUFBUSxHQUFSLFFBQVEsQ0FBbUI7UUFDM0IsY0FBUyxHQUFULFNBQVMsQ0FBZTtRQXBCekIsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0IsMEJBQXFCLEdBQVksSUFBSSxDQUFDO1FBRXRDLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzVCLHFCQUFnQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzNELFdBQU0sR0FBWSxJQUFJLENB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aW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgRmxhdFRyZWVDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xuaW1wb3J0IHtcbiAgTWF0VHJlZUZsYXREYXRhU291cmNlLFxuICBNYXRUcmVlRmxhdHRlbmVyLFxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExhYmVsS2V5cyB9IGZyb20gJy4uLy4uL2VudW1zL2xhYmVsLmtleXMnO1xuaW1wb3J0IHsgSXRlbUZsYXROb2RlLCBJdGVtTm9kZSB9IGZyb20gJy4uLy4uL21vZGVscy90cmVldmlldy5tb2RlbCc7XG5pbXBvcnQgeyBDaGVja2xpc3REYXRhYmFzZSB9IGZyb20gJy4uLy4uL290aGVycy9jaGVjay1saXN0LmRhdGFiYXNlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9vdGhlcnMvdHJhbnNsYXRpb24ucGlwZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC10cmVldmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi90cmVldmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi90cmVldmlldy5jb21wb25lbnQuc2NzcycsXG4gIHByb3ZpZGVyczogW0NoZWNrbGlzdERhdGFiYXNlXSxcbn0pXG5leHBvcnQgY2xhc3MgQXBwVHJlZXZpZXdDb21wb25lbnQge1xuICBASW5wdXQoKSBhbGxvd0FkZEl0ZW1zOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGF1dG9TZWxlY3REZXNjZW5kYW50czogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGFsbG93Q2hlY2tJdGVtczogYm9vbGVhbjtcbiAgQElucHV0KCkgYWxsb3dGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwcml2YXRlIGlzSW5pdDogYm9vbGVhbiA9IHRydWU7XG4gIHByaXZhdGUgc2VsZWN0ZWROb2RlOiBJdGVtRmxhdE5vZGU7XG4gIC8qKiBNYXAgZnJvbSBmbGF0IG5vZGUgdG8gbmVzdGVkIG5vZGUuIFRoaXMgaGVscHMgdXMgZmluZGluZyB0aGUgbmVzdGVkIG5vZGUgdG8gYmUgbW9kaWZpZWQgKi9cbiAgZmxhdE5vZGVNYXAgPSBuZXcgTWFwPEl0ZW1GbGF0Tm9kZSwgSXRlbU5vZGU+KCk7XG4gIC8qKiBNYXAgZnJvbSBuZXN0ZWQgbm9kZSB0byBmbGF0dGVuZWQgbm9kZS4gVGhpcyBoZWxwcyB1cyB0byBrZWVwIHRoZSBzYW1lIG9iamVjdCBmb3Igc2VsZWN0aW9uICovXG4gIG5lc3RlZE5vZGVNYXAgPSBuZXcgTWFwPEl0ZW1Ob2RlLCBJdGVtRmxhdE5vZGU+KCk7XG4gIHNlbGVjdGVkUGFyZW50OiBJdGVtRmxhdE5vZGUgfCBudWxsID0gbnVsbDtcbiAgbmV3SXRlbU5hbWUgPSAnJztcbiAgdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxJdGVtRmxhdE5vZGU+O1xuICB0cmVlRmxhdHRlbmVyOiBNYXRUcmVlRmxhdHRlbmVyPEl0ZW1Ob2RlLCBJdGVtRmxhdE5vZGU+O1xuICBkYXRhU291cmNlOiBNYXRUcmVlRmxhdERhdGFTb3VyY2U8SXRlbU5vZGUsIEl0ZW1GbGF0Tm9kZT47XG4gIGNoZWNrbGlzdFNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxJdGVtRmxhdE5vZGU+KHRydWUpO1xuICBjb21tb25LZXlzID0gTGFiZWxLZXlzLmNvbW1vbjtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkYXRhYmFzZTogQ2hlY2tsaXN0RGF0YWJhc2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVBpcGVcbiAgKSB7XG4gICAgdGhpcy50cmVlRmxhdHRlbmVyID0gbmV3IE1hdFRyZWVGbGF0dGVuZXIoXG4gICAgICB0aGlzLnRyYW5zZm9ybWVyLFxuICAgICAgdGhpcy5nZXRMZXZlbCxcbiAgICAgIHRoaXMuaXNFeHBhbmRhYmxlLFxuICAgICAgdGhpcy5nZXRDaGlsZHJlblxuICAgICk7XG4gICAgdGhpcy50cmVlQ29udHJvbCA9IG5ldyBGbGF0VHJlZUNvbnRyb2w8SXRlbUZsYXROb2RlPihcbiAgICAgIHRoaXMuZ2V0TGV2ZWwsXG4gICAgICB0aGlzLmlzRXhwYW5kYWJsZVxuICAgICk7XG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRyZWVGbGF0RGF0YVNvdXJjZShcbiAgICAgIHRoaXMudHJlZUNvbnRyb2wsXG4gICAgICB0aGlzLnRyZWVGbGF0dGVuZXJcbiAgICApO1xuXG4gICAgZGF0YWJhc2UuZGF0YUNoYW5nZS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcbiAgICB9KTtcblxuICAgIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmNoYW5nZWQuc3Vic2NyaWJlKChub2RlKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc0luaXQgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KG5vZGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0TGV2ZWwgPSAobm9kZTogSXRlbUZsYXROb2RlKSA9PiBub2RlLmxldmVsO1xuICBpc0V4cGFuZGFibGUgPSAobm9kZTogSXRlbUZsYXROb2RlKSA9PiBub2RlLmV4cGFuZGFibGU7XG4gIGdldENoaWxkcmVuID0gKG5vZGU6IEl0ZW1Ob2RlKTogSXRlbU5vZGVbXSA9PiBub2RlLmNoaWxkcmVuO1xuICBoYXNDaGlsZCA9IChfOiBudW1iZXIsIF9ub2RlRGF0YTogSXRlbUZsYXROb2RlKSA9PiBfbm9kZURhdGEuZXhwYW5kYWJsZTtcbiAgaGFzTm9Db250ZW50ID0gKF86IG51bWJlciwgX25vZGVEYXRhOiBJdGVtRmxhdE5vZGUpID0+IF9ub2RlRGF0YS5uYW1lID09PSAnJztcblxuICAvKipcbiAgICogVHJhbnNmb3JtZXIgdG8gY29udmVydCBuZXN0ZWQgbm9kZSB0byBmbGF0IG5vZGUuIFJlY29yZCB0aGUgbm9kZXMgaW4gbWFwcyBmb3IgbGF0ZXIgdXNlLlxuICAgKi9cbiAgdHJhbnNmb3JtZXIgPSAobm9kZTogSXRlbU5vZGUsIGxldmVsOiBudW1iZXIpID0+IHtcbiAgICB0aGlzLmlzSW5pdCA9IHRydWU7XG5cbiAgICBjb25zdCBleGlzdGluZ05vZGUgPSB0aGlzLm5lc3RlZE5vZGVNYXAuZ2V0KG5vZGUpO1xuICAgIGNvbnN0IGZsYXROb2RlID1cbiAgICAgIGV4aXN0aW5nTm9kZSAmJiBleGlzdGluZ05vZGUubmFtZSA9PT0gbm9kZS5uYW1lXG4gICAgICAgID8gZXhpc3RpbmdOb2RlXG4gICAgICAgIDogbmV3IEl0ZW1GbGF0Tm9kZSgpO1xuICAgIGZsYXROb2RlLm5hbWUgPSBub2RlLm5hbWU7XG4gICAgZmxhdE5vZGUubGV2ZWwgPSBsZXZlbDtcbiAgICBmbGF0Tm9kZS5jYW5TZWxlY3QgPSBub2RlLmNhblNlbGVjdDtcbiAgICBmbGF0Tm9kZS5kYXRhID0gbm9kZS5kYXRhO1xuICAgIGZsYXROb2RlLmlzU2VsZWN0ZWQgPSBub2RlLmlzU2VsZWN0ZWQ7XG4gICAgZmxhdE5vZGUuZXhwYW5kYWJsZSA9ICEhbm9kZS5jaGlsZHJlbj8ubGVuZ3RoO1xuICAgIGZsYXROb2RlLmhpZGVBcnJvdyA9IG5vZGUuaGlkZUFycm93O1xuICAgIHRoaXMuZmxhdE5vZGVNYXAuc2V0KGZsYXROb2RlLCBub2RlKTtcbiAgICB0aGlzLm5lc3RlZE5vZGVNYXAuc2V0KG5vZGUsIGZsYXROb2RlKTtcblxuICAgIGlmIChmbGF0Tm9kZS5pc1NlbGVjdGVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi5zZWxlY3QoZmxhdE5vZGUpO1xuICAgIH1cbiAgICB0aGlzLmlzSW5pdCA9IGZhbHNlO1xuICAgIHJldHVybiBmbGF0Tm9kZTtcbiAgfTtcblxuICAvKiogV2hldGhlciBhbGwgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBub2RlIGFyZSBzZWxlY3RlZC4gKi9cbiAgZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlOiBJdGVtRmxhdE5vZGUpOiBib29sZWFuIHtcbiAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMobm9kZSk7XG4gICAgY29uc3QgZGVzY0FsbFNlbGVjdGVkID1cbiAgICAgIGRlc2NlbmRhbnRzLmxlbmd0aCA+IDAgJiZcbiAgICAgIGRlc2NlbmRhbnRzLmV2ZXJ5KChjaGlsZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGVja2xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChjaGlsZCk7XG4gICAgICB9KTtcbiAgICByZXR1cm4gZGVzY0FsbFNlbGVjdGVkO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgcGFydCBvZiB0aGUgZGVzY2VuZGFudHMgYXJlIHNlbGVjdGVkICovXG4gIGRlc2NlbmRhbnRzUGFydGlhbGx5U2VsZWN0ZWQobm9kZTogSXRlbUZsYXROb2RlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGRlc2NlbmRhbnRzLnNvbWUoKGNoaWxkKSA9PlxuICAgICAgdGhpcy5jaGVja2xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChjaGlsZClcbiAgICApO1xuICAgIHJldHVybiByZXN1bHQgJiYgIXRoaXMuZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlKTtcbiAgfVxuXG4gIC8qKiBUb2dnbGUgdGhlIHRvLWRvIGl0ZW0gc2VsZWN0aW9uLiBTZWxlY3QvZGVzZWxlY3QgYWxsIHRoZSBkZXNjZW5kYW50cyBub2RlICovXG4gIHNlbGVjdGlvblRvZ2dsZShub2RlOiBJdGVtRmxhdE5vZGUpOiB2b2lkIHtcbiAgICBpZiAoIW5vZGUuY2FuU2VsZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLnRvZ2dsZShub2RlKTtcbiAgICBpZiAodGhpcy5hdXRvU2VsZWN0RGVzY2VuZGFudHMpIHtcbiAgICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gdGhpcy50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhub2RlKTtcbiAgICAgIGlmICh0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpKSB7XG4gICAgICAgIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdCguLi5kZXNjZW5kYW50cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi5kZXNlbGVjdCguLi5kZXNjZW5kYW50cyk7XG4gICAgICB9XG4gICAgICB0aGlzLmNoZWNrQWxsUGFyZW50c1NlbGVjdGlvbihub2RlKTtcbiAgICB9XG4gIH1cblxuICBsZWFmSXRlbVNlbGVjdGlvblRvZ2dsZShub2RlOiBJdGVtRmxhdE5vZGUpOiB2b2lkIHtcbiAgICBpZiAoIW5vZGUuY2FuU2VsZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5hbGxvd0NoZWNrSXRlbXMpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gbm9kZTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KG5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi50b2dnbGUobm9kZSk7XG4gICAgICBpZiAodGhpcy5hdXRvU2VsZWN0RGVzY2VuZGFudHMpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsbFBhcmVudHNTZWxlY3Rpb24obm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyogQ2hlY2tzIGFsbCB0aGUgcGFyZW50cyB3aGVuIGEgbGVhZiBub2RlIGlzIHNlbGVjdGVkL3Vuc2VsZWN0ZWQgKi9cbiAgY2hlY2tBbGxQYXJlbnRzU2VsZWN0aW9uKG5vZGU6IEl0ZW1GbGF0Tm9kZSk6IHZvaWQge1xuICAgIGxldCBwYXJlbnQ6IEl0ZW1GbGF0Tm9kZSB8IG51bGwgPSB0aGlzLmdldFBhcmVudE5vZGUobm9kZSk7XG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgdGhpcy5jaGVja1Jvb3ROb2RlU2VsZWN0aW9uKHBhcmVudCk7XG4gICAgICBwYXJlbnQgPSB0aGlzLmdldFBhcmVudE5vZGUocGFyZW50KTtcbiAgICB9XG4gIH1cblxuICAvKiogQ2hlY2sgcm9vdCBub2RlIGNoZWNrZWQgc3RhdGUgYW5kIGNoYW5nZSBpdCBhY2NvcmRpbmdseSAqL1xuICBjaGVja1Jvb3ROb2RlU2VsZWN0aW9uKG5vZGU6IEl0ZW1GbGF0Tm9kZSk6IHZvaWQge1xuICAgIGNvbnN0IG5vZGVTZWxlY3RlZCA9IHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSk7XG4gICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpO1xuICAgIGNvbnN0IGRlc2NBbGxTZWxlY3RlZCA9XG4gICAgICBkZXNjZW5kYW50cy5sZW5ndGggPiAwICYmXG4gICAgICBkZXNjZW5kYW50cy5ldmVyeSgoY2hpbGQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQoY2hpbGQpO1xuICAgICAgfSk7XG4gICAgaWYgKG5vZGVTZWxlY3RlZCAmJiAhZGVzY0FsbFNlbGVjdGVkKSB7XG4gICAgICB0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi5kZXNlbGVjdChub2RlKTtcbiAgICB9IGVsc2UgaWYgKCFub2RlU2VsZWN0ZWQgJiYgZGVzY0FsbFNlbGVjdGVkKSB7XG4gICAgICB0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi5zZWxlY3Qobm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLyogR2V0IHRoZSBwYXJlbnQgbm9kZSBvZiBhIG5vZGUgKi9cbiAgZ2V0UGFyZW50Tm9kZShub2RlOiBJdGVtRmxhdE5vZGUpOiBJdGVtRmxhdE5vZGUgfCBudWxsIHtcbiAgICBjb25zdCBjdXJyZW50TGV2ZWwgPSB0aGlzLmdldExldmVsKG5vZGUpO1xuXG4gICAgaWYgKGN1cnJlbnRMZXZlbCA8IDEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5pbmRleE9mKG5vZGUpIC0gMTtcblxuICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4OyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgY3VycmVudE5vZGUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXTtcblxuICAgICAgaWYgKHRoaXMuZ2V0TGV2ZWwoY3VycmVudE5vZGUpIDwgY3VycmVudExldmVsKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpbml0aWFsaXplKGRhdGE6IEl0ZW1Ob2RlW10pIHtcbiAgICB0aGlzLmRhdGFiYXNlLmluaXRpYWxpemUoZGF0YSk7XG4gIH1cblxuICBnZXRTZWxlY3RlZE5vZGVzKCk6IEl0ZW1GbGF0Tm9kZVtdIHtcbiAgICBsZXQgc2VsZWN0ZWROb2RlczogSXRlbUZsYXROb2RlW10gPSBbXTtcbiAgICBpZiAoIXRoaXMuYWxsb3dDaGVja0l0ZW1zKSB7XG4gICAgICBzZWxlY3RlZE5vZGVzLnB1c2godGhpcy5zZWxlY3RlZE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG4pKSB7XG4gICAgICAgICAgbi5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICBzZWxlY3RlZE5vZGVzLnB1c2gobik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0ZWROb2RlcztcbiAgfVxuXG4gIC8qKiBTZWxlY3QgdGhlIGNhdGVnb3J5IHNvIHdlIGNhbiBpbnNlcnQgdGhlIG5ldyBpdGVtLiAqL1xuICBhZGROZXdJdGVtKG5vZGU6IEl0ZW1GbGF0Tm9kZSkge1xuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLmZsYXROb2RlTWFwLmdldChub2RlKTtcbiAgICB0aGlzLmRhdGFiYXNlLmluc2VydEl0ZW0ocGFyZW50Tm9kZSEsICcnKTtcbiAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZChub2RlKTtcbiAgfVxuXG4gIC8qKiBTYXZlIHRoZSBub2RlIHRvIGRhdGFiYXNlICovXG4gIHNhdmVOb2RlKG5vZGU6IEl0ZW1GbGF0Tm9kZSwgaXRlbVZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5mbGF0Tm9kZU1hcC5nZXQobm9kZSk7XG4gICAgdGhpcy5kYXRhYmFzZS51cGRhdGVJdGVtKG5lc3RlZE5vZGUhLCBpdGVtVmFsdWUpO1xuICB9XG5cbiAgZmlsdGVyVGV4dCh0ZXh0OiBzdHJpbmcpIHtcbiAgICB0aGlzLmRhdGFiYXNlLmZpbHRlcih0ZXh0KTtcbiAgICB0aGlzLmV4cGFuZEFsbCgpO1xuICB9XG5cbiAgZXhwYW5kQWxsKCkge1xuICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kQWxsKCk7XG4gIH1cblxuICBleHBhbmROb2RlKG5vZGVJbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMgJiZcbiAgICAgIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmxlbmd0aCA+IG5vZGVJbmRleFxuICAgICkge1xuICAgICAgdGhpcy50cmVlQ29udHJvbC5leHBhbmQodGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbbm9kZUluZGV4XSk7XG4gICAgfVxuICB9XG5cbiAgYXBwbHlGaWx0ZXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgZmlsdGVyVmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgIHJldHVybiB0aGlzLmZpbHRlclRleHQoZmlsdGVyVmFsdWUpO1xuICB9XG5cbiAgdXBkYXRlU2VsZWN0aW9uQnlJZHMoaWRzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMpIHJldHVybjtcblxuICAgIC8vIENsZWFyIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAgdGhpcy5jaGVja2xpc3RTZWxlY3Rpb24uY2xlYXIoKTtcblxuICAgIC8vIFNlbGVjdCBub2RlcyB0aGF0IG1hdGNoIHRoZSBJRHNcbiAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICBpZiAobm9kZS5kYXRhICYmIGlkcy5pbmNsdWRlcyhub2RlLmRhdGEuaWQpKSB7XG4gICAgICAgIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdChub2RlKTtcbiAgICAgICAgbm9kZS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUuaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCI8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmdWxsLXdpZHRoIHAtMTBcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiYWxsb3dGaWx0ZXJcIlxuICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gIDxtYXQtbGFiZWw+IHt7IGNvbW1vbktleXMuYWN0aW9ucy5maWx0ZXIgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgPGlucHV0IG1hdElucHV0XG4gICAgICAgICBtaW5sZW5ndGg9XCIxXCJcbiAgICAgICAgIChrZXl1cCk9XCJhcHBseUZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgY29tbW9uS2V5cy5hY3Rpb25zLmZpbHRlciB9fVwiXG4gICAgICAgICAjaW5wdXQgLz5cbjwvbWF0LWZvcm0tZmllbGQ+XG5cbjwhLS08Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IGl0ZW1TaXplPVwiMzBcIiBjbGFzcz1cImRpY3Rpb25hcnktdmlld3BvcnRcIj4tLT5cbjxtYXQtdHJlZSBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgW3RyZWVDb250cm9sXT1cInRyZWVDb250cm9sXCI+XG4gIDwhLS0gTGVhZiBOb2RlcyAtLT5cbiAgPG1hdC10cmVlLW5vZGUgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIlxuICAgICAgICAgICAgICAgICBtYXRUcmVlTm9kZVBhZGRpbmc+XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gZGlzYWJsZWQ+PC9idXR0b24+XG4gICAgPCEtLSBOb2RlIENvbnRlbnQgLS0+XG4gICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgIDwhLS0gQ2hlY2tib3ggZm9yIFNlbGVjdGFibGUgTm9kZXMgd2hlbiBjaGVja2JveGVzIGFyZSBhbGxvd2VkIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGUuY2FuU2VsZWN0ICYmIGFsbG93Q2hlY2tJdGVtc1wiPlxuICAgICAgICA8bWF0LWNoZWNrYm94IGNsYXNzPVwiY2hlY2tsaXN0LWxlYWYtbm9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiY2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwibGVhZkl0ZW1TZWxlY3Rpb25Ub2dnbGUobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgIHt7IG5vZGUubmFtZSB9fVxuICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPCEtLSBDbGlja2FibGUgTGFiZWwgZm9yIFNlbGVjdGFibGUgTm9kZXMgd2hlbiBjaGVja2JveGVzIGFyZSBub3QgYWxsb3dlZCAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlLmNhblNlbGVjdCAmJiAhYWxsb3dDaGVja0l0ZW1zXCI+XG4gICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJtZGMtbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibGVhZkl0ZW1TZWxlY3Rpb25Ub2dnbGUobm9kZSlcIj5cbiAgICAgICAgICB7eyBub2RlLm5hbWUgfX1cbiAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwhLS0gTm9uLWNsaWNrYWJsZSBMYWJlbCBmb3IgTm9uLXNlbGVjdGFibGUgTm9kZXMgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW5vZGUuY2FuU2VsZWN0XCI+XG4gICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJtZGMtbGFiZWxcIj5cbiAgICAgICAgICB7eyBub2RlLm5hbWUgfX1cbiAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdHJlZS1ub2RlPlxuXG4gIDwhLS0gTm9kZXMgd2l0aCBDaGlsZHJlbiAtLT5cbiAgPG1hdC10cmVlLW5vZGUgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGU7IHdoZW46IGhhc0NoaWxkXCJcbiAgICAgICAgICAgICAgICAgbWF0VHJlZU5vZGVQYWRkaW5nPlxuICAgIDwhLS0gRXhwYW5kL0NvbGxhcHNlIEJ1dHRvbiAtLT5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgbWF0VHJlZU5vZGVUb2dnbGVcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1RvZ2dsZSAnICsgbm9kZS5uYW1lXCJcbiAgICAgICAgICAgICpuZ0lmPVwiIW5vZGUuaGlkZUFycm93XCI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCI+XG4gICAgICAgIHt7IHRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkgPyAnZXhwYW5kX21vcmUnIDogJ2NoZXZyb25fcmlnaHQnIH19XG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAgIDwhLS0gTm9kZSBDb250ZW50IC0tPlxuICAgIDxuZy1jb250YWluZXI+XG4gICAgICA8IS0tIENoZWNrYm94IGZvciBTZWxlY3RhYmxlIE5vZGVzIHdoZW4gY2hlY2tib3hlcyBhcmUgYWxsb3dlZCAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlLmNhblNlbGVjdCAmJiBhbGxvd0NoZWNrSXRlbXMgJiYgdHJlZUNvbnRyb2wuZ2V0TGV2ZWwobm9kZSkgPiAwXCI+XG4gICAgICAgIDxtYXQtY2hlY2tib3ggW2NoZWNrZWRdPVwiY2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2VsZWN0aW9uVG9nZ2xlKG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICB7eyBub2RlLm5hbWUgfX1cbiAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwhLS0gQ2xpY2thYmxlIExhYmVsIGZvciBTZWxlY3RhYmxlIE5vZGVzIHdoZW4gY2hlY2tib3hlcyBhcmUgbm90IGFsbG93ZWQgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZS5jYW5TZWxlY3QgJiYgIWFsbG93Q2hlY2tJdGVtc1wiPlxuICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwibWRjLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImxlYWZJdGVtU2VsZWN0aW9uVG9nZ2xlKG5vZGUpXCI+XG4gICAgICAgICAge3sgbm9kZS5uYW1lIH19XG4gICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8IS0tIE5vbi1jbGlja2FibGUgTGFiZWwgZm9yIE5vbi1zZWxlY3RhYmxlIE5vZGVzIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFub2RlLmNhblNlbGVjdFwiPlxuICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwibWRjLWxhYmVsXCI+XG4gICAgICAgICAge3sgbm9kZS5uYW1lIH19XG4gICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSBBZGQgTmV3IEl0ZW0gQnV0dG9uIC0tPlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJhZGROZXdJdGVtKG5vZGUpXCIgKm5nSWY9XCJhbGxvd0FkZEl0ZW1zXCI+XG4gICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtdHJlZS1ub2RlPlxuPC9tYXQtdHJlZT5cbjwhLS08L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD4tLT5cbiJdfQ==
|