keevo-components 1.8.408 → 1.8.410
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/components/kv-orgchart/kv-orgchart.component.mjs +3 -3
- package/esm2022/lib/components/kv-pick-list/kv-pick-list.component.mjs +58 -21
- package/esm2022/lib/components/kv-pick-list/kv-pick-list.module.mjs +11 -4
- package/esm2022/lib/components/kv-tree-table/kv-tree-table.component.mjs +3 -3
- package/esm2022/lib/components/kv-tree-view/kv-tree-view.component.mjs +43 -3
- package/fesm2022/keevo-components.mjs +189 -108
- package/fesm2022/keevo-components.mjs.map +1 -1
- package/lib/components/kv-pick-list/kv-pick-list.component.d.ts +16 -2
- package/lib/components/kv-pick-list/kv-pick-list.module.d.ts +2 -1
- package/lib/components/kv-tree-view/kv-tree-view.component.d.ts +8 -1
- package/package.json +1 -1
|
@@ -5,26 +5,66 @@ export class KvTreeViewComponent {
|
|
|
5
5
|
constructor() {
|
|
6
6
|
this.selectedFiles = [];
|
|
7
7
|
this.selectionMode = 'checkbox';
|
|
8
|
+
this.filter = false;
|
|
9
|
+
this.filterPlaceholder = 'Pesquisar...';
|
|
10
|
+
this.scrollheight = '';
|
|
8
11
|
this.selectedItems = new EventEmitter();
|
|
12
|
+
this.initialSelectionVerified = false;
|
|
9
13
|
}
|
|
10
14
|
ngOnInit() {
|
|
11
15
|
}
|
|
16
|
+
ngOnChanges() {
|
|
17
|
+
if (!this.initialSelectionVerified && this.selectedFiles && this.selectedFiles.length > 2) {
|
|
18
|
+
this.verifyParentSelection(this.treeViewData);
|
|
19
|
+
this.initialSelectionVerified = true;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
verifyParentSelection(nodes) {
|
|
23
|
+
nodes.forEach((node) => {
|
|
24
|
+
if (node.children && node.children.length > 0) {
|
|
25
|
+
const allChildrenSelected = this.areAllDescendantsSelected(node);
|
|
26
|
+
if (allChildrenSelected) {
|
|
27
|
+
// Se todos os filhos forem selecionados, seleciona o nó pai
|
|
28
|
+
this.selectedFiles.push({
|
|
29
|
+
label: node.label,
|
|
30
|
+
data: node.data,
|
|
31
|
+
key: node.key,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
// Verifica recursivamente para os filhos
|
|
35
|
+
this.verifyParentSelection(node.children);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
// Função auxiliar para verificar se todos os descendentes de um nó estão selecionados
|
|
40
|
+
areAllDescendantsSelected(node) {
|
|
41
|
+
if (!node.children || node.children.length === 0) {
|
|
42
|
+
return this.selectedFiles.some((selected) => selected.key === node.key);
|
|
43
|
+
}
|
|
44
|
+
return node.children.every(child => this.areAllDescendantsSelected(child));
|
|
45
|
+
}
|
|
12
46
|
onSelectionChange() {
|
|
13
47
|
this.selectedItems.emit(this.selectedFiles);
|
|
14
48
|
}
|
|
15
49
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTreeViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
16
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.8", type: KvTreeViewComponent, selector: "kv-tree-view", inputs: { selectedFiles: "selectedFiles", selectionMode: "selectionMode", treeViewData: "treeViewData" }, outputs: { selectedItems: "selectedItems" }, ngImport: i0, template: "<div class=\"card flex flex-column align-items-center justify-content-center\">\r\n <p-tree\r\n [value]=\"treeViewData\"\r\n [selectionMode]=\"selectionMode\"\r\n class=\"w-full\"\r\n [(selection)]=\"selectedFiles\"\r\n (selectionChange)=\"onSelectionChange()\"\r\n
|
|
50
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.8", type: KvTreeViewComponent, selector: "kv-tree-view", inputs: { selectedFiles: "selectedFiles", selectionMode: "selectionMode", treeViewData: "treeViewData", filter: "filter", filterPlaceholder: "filterPlaceholder", scrollheight: "scrollheight" }, outputs: { selectedItems: "selectedItems" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"card flex flex-column align-items-center justify-content-center\">\r\n <p-tree\r\n [value]=\"treeViewData\"\r\n [selectionMode]=\"selectionMode\"\r\n class=\"w-full\"\r\n [(selection)]=\"selectedFiles\"\r\n (selectionChange)=\"onSelectionChange()\"\r\n [filter]=\"filter\" \r\n [filterPlaceholder]=\"filterPlaceholder\"\r\n [scrollHeight]=\"scrollheight\" \r\n emptyMessage=\"Nenhum registro encontrado\"\r\n >\r\n </p-tree>\r\n</div>\r\n\r\n\r\n", styles: [":host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight{color:#fff;border-color:#004172;background:#004172}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{background-color:#002542}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight:active{background-color:#002542}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight:disabled{background-color:#002542;opacity:.4;cursor:auto}\n"], dependencies: [{ kind: "component", type: i1.Tree, selector: "p-tree", inputs: ["value", "selectionMode", "loadingMode", "selection", "style", "styleClass", "contextMenu", "layout", "draggableScope", "droppableScope", "draggableNodes", "droppableNodes", "metaKeySelection", "propagateSelectionUp", "propagateSelectionDown", "loading", "loadingIcon", "emptyMessage", "ariaLabel", "togglerAriaLabel", "ariaLabelledBy", "validateDrop", "filter", "filterBy", "filterMode", "filterPlaceholder", "filteredNodes", "filterLocale", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "indentation", "_templateMap", "trackBy", "virtualNodeHeight"], outputs: ["selectionChange", "onNodeSelect", "onNodeUnselect", "onNodeExpand", "onNodeCollapse", "onNodeContextMenuSelect", "onNodeDrop", "onLazyLoad", "onScroll", "onScrollIndexChange", "onFilter"] }] }); }
|
|
17
51
|
}
|
|
18
52
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTreeViewComponent, decorators: [{
|
|
19
53
|
type: Component,
|
|
20
|
-
args: [{ selector: 'kv-tree-view', template: "<div class=\"card flex flex-column align-items-center justify-content-center\">\r\n <p-tree\r\n [value]=\"treeViewData\"\r\n [selectionMode]=\"selectionMode\"\r\n class=\"w-full\"\r\n [(selection)]=\"selectedFiles\"\r\n (selectionChange)=\"onSelectionChange()\"\r\n
|
|
54
|
+
args: [{ selector: 'kv-tree-view', template: "<div class=\"card flex flex-column align-items-center justify-content-center\">\r\n <p-tree\r\n [value]=\"treeViewData\"\r\n [selectionMode]=\"selectionMode\"\r\n class=\"w-full\"\r\n [(selection)]=\"selectedFiles\"\r\n (selectionChange)=\"onSelectionChange()\"\r\n [filter]=\"filter\" \r\n [filterPlaceholder]=\"filterPlaceholder\"\r\n [scrollHeight]=\"scrollheight\" \r\n emptyMessage=\"Nenhum registro encontrado\"\r\n >\r\n </p-tree>\r\n</div>\r\n\r\n\r\n", styles: [":host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight{color:#fff;border-color:#004172;background:#004172}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{background-color:#002542}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight:active{background-color:#002542}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight:disabled{background-color:#002542;opacity:.4;cursor:auto}\n"] }]
|
|
21
55
|
}], ctorParameters: () => [], propDecorators: { selectedFiles: [{
|
|
22
56
|
type: Input
|
|
23
57
|
}], selectionMode: [{
|
|
24
58
|
type: Input
|
|
25
59
|
}], treeViewData: [{
|
|
26
60
|
type: Input
|
|
61
|
+
}], filter: [{
|
|
62
|
+
type: Input
|
|
63
|
+
}], filterPlaceholder: [{
|
|
64
|
+
type: Input
|
|
65
|
+
}], scrollheight: [{
|
|
66
|
+
type: Input
|
|
27
67
|
}], selectedItems: [{
|
|
28
68
|
type: Output
|
|
29
69
|
}] } });
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LXRyZWUtdmlldy9rdi10cmVlLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtdHJlZS12aWV3L2t2LXRyZWUtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDOzs7QUFTdkIsTUFBTSxPQUFPLG1CQUFtQjtJQVk5QjtRQVhTLGtCQUFhLEdBQVEsRUFBRSxDQUFDO1FBQ3hCLGtCQUFhLEdBQVEsVUFBVSxDQUFDO1FBRWhDLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFDeEIsc0JBQWlCLEdBQVcsY0FBYyxDQUFDO1FBQzNDLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBRXpCLGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFaEUsNkJBQXdCLEdBQUcsS0FBSyxDQUFDO0lBRWpCLENBQUM7SUFFakIsUUFBUTtJQUNSLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQWlCO1FBQ3JDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNyQixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUVqRSxJQUFJLG1CQUFtQixFQUFFLENBQUM7b0JBQ3hCLDREQUE0RDtvQkFDNUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7d0JBQ3RCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSzt3QkFDakIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO3dCQUNmLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztxQkFDZCxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFFRCx5Q0FBeUM7Z0JBQ3pDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFNUMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHNGQUFzRjtJQUN0Rix5QkFBeUIsQ0FBQyxJQUFjO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9FLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUM3QyxDQUFDOzhHQXhEVSxtQkFBbUI7a0dBQW5CLG1CQUFtQix3VENmaEMscWhCQWdCQTs7MkZERGEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGNBQWM7d0RBS2YsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2t2LXRyZWUtdmlldycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2t2LXRyZWUtdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4va3YtdHJlZS12aWV3LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEt2VHJlZVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkRmlsZXM6IGFueSA9IFtdO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGlvbk1vZGU6IGFueSA9ICdjaGVja2JveCc7XHJcbiAgQElucHV0KCkgdHJlZVZpZXdEYXRhITogVHJlZU5vZGVbXTtcclxuICBASW5wdXQoKSBmaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBmaWx0ZXJQbGFjZWhvbGRlcjogc3RyaW5nID0gJ1Blc3F1aXNhci4uLic7XHJcbiAgQElucHV0KCkgc2Nyb2xsaGVpZ2h0OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkSXRlbXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBpbml0aWFsU2VsZWN0aW9uVmVyaWZpZWQgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pbml0aWFsU2VsZWN0aW9uVmVyaWZpZWQgJiYgdGhpcy5zZWxlY3RlZEZpbGVzICYmIHRoaXMuc2VsZWN0ZWRGaWxlcy5sZW5ndGggPiAyKSB7XHJcbiAgICAgIHRoaXMudmVyaWZ5UGFyZW50U2VsZWN0aW9uKHRoaXMudHJlZVZpZXdEYXRhKTtcclxuICAgICAgdGhpcy5pbml0aWFsU2VsZWN0aW9uVmVyaWZpZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmVyaWZ5UGFyZW50U2VsZWN0aW9uKG5vZGVzOiBUcmVlTm9kZVtdKSB7XHJcbiAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IGFsbENoaWxkcmVuU2VsZWN0ZWQgPSB0aGlzLmFyZUFsbERlc2NlbmRhbnRzU2VsZWN0ZWQobm9kZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGFsbENoaWxkcmVuU2VsZWN0ZWQpIHtcclxuICAgICAgICAgIC8vIFNlIHRvZG9zIG9zIGZpbGhvcyBmb3JlbSBzZWxlY2lvbmFkb3MsIHNlbGVjaW9uYSBvIG7DsyBwYWlcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlcy5wdXNoKHtcclxuICAgICAgICAgICAgbGFiZWw6IG5vZGUubGFiZWwsXHJcbiAgICAgICAgICAgIGRhdGE6IG5vZGUuZGF0YSxcclxuICAgICAgICAgICAga2V5OiBub2RlLmtleSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVmVyaWZpY2EgcmVjdXJzaXZhbWVudGUgcGFyYSBvcyBmaWxob3NcclxuICAgICAgICB0aGlzLnZlcmlmeVBhcmVudFNlbGVjdGlvbihub2RlLmNoaWxkcmVuKTtcclxuXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gRnVuw6fDo28gYXV4aWxpYXIgcGFyYSB2ZXJpZmljYXIgc2UgdG9kb3Mgb3MgZGVzY2VuZGVudGVzIGRlIHVtIG7DsyBlc3TDo28gc2VsZWNpb25hZG9zXHJcbiAgYXJlQWxsRGVzY2VuZGFudHNTZWxlY3RlZChub2RlOiBUcmVlTm9kZSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFub2RlLmNoaWxkcmVuIHx8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRmlsZXMuc29tZSgoc2VsZWN0ZWQ6IGFueSkgPT4gc2VsZWN0ZWQua2V5ID09PSBub2RlLmtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4uZXZlcnkoY2hpbGQgPT4gdGhpcy5hcmVBbGxEZXNjZW5kYW50c1NlbGVjdGVkKGNoaWxkKSk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGlvbkNoYW5nZSgpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWRGaWxlcylcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNhcmQgZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgPHAtdHJlZVxyXG4gICAgICAgIFt2YWx1ZV09XCJ0cmVlVmlld0RhdGFcIlxyXG4gICAgICAgIFtzZWxlY3Rpb25Nb2RlXT1cInNlbGVjdGlvbk1vZGVcIlxyXG4gICAgICAgIGNsYXNzPVwidy1mdWxsXCJcclxuICAgICAgICBbKHNlbGVjdGlvbildPVwic2VsZWN0ZWRGaWxlc1wiXHJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgpXCJcclxuICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiIFxyXG4gICAgICAgIFtmaWx0ZXJQbGFjZWhvbGRlcl09XCJmaWx0ZXJQbGFjZWhvbGRlclwiXHJcbiAgICAgICAgW3Njcm9sbEhlaWdodF09XCJzY3JvbGxoZWlnaHRcIiBcclxuICAgICAgICBlbXB0eU1lc3NhZ2U9XCJOZW5odW0gcmVnaXN0cm8gZW5jb250cmFkb1wiXHJcbiAgICA+XHJcbiAgICA8L3AtdHJlZT5cclxuPC9kaXY+XHJcblxyXG5cclxuIl19
|