@3dgenomes/ngx-resizable
Version:
A Resizable Split-Pane Layout for Angular6+
263 lines • 21.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, HostBinding, Input, ElementRef, ViewEncapsulation, Output, EventEmitter } from '@angular/core';
import { NgxResizeableWindowRef } from '../window.service';
var ɵ0 = window;
var ResizableComponent = /** @class */ (function () {
function ResizableComponent(regionElement, windowRef) {
this.regionElement = regionElement;
this.windowRef = windowRef;
this.resizable = true;
this.noTransition = false;
this.rFlex = false;
this.resizeStart = new EventEmitter();
this.resizing = new EventEmitter();
this.resizeEnd = new EventEmitter();
this.vx = 1;
this.vy = 1;
this.info = {};
this.nativeElement = this.regionElement.nativeElement;
}
/**
* @return {?}
*/
ResizableComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
if (!this.rFlex) {
this.resizable = false;
} // Added to permit use of component for all cells
this.flexBasis = 'flexBasis' in this.nativeElement.style ? 'flexBasis' :
'webkitFlexBasis' in this.nativeElement.style ? 'webkitFlexBasis' :
'msFlexPreferredSize' in this.nativeElement.style ? 'msFlexPreferredSize' : 'flexBasis';
};
/**
* @return {?}
*/
ResizableComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
this.style = this.windowRef.nativeWindow.getComputedStyle(this.nativeElement);
};
/**
* @private
* @param {?} e
* @return {?}
*/
ResizableComponent.prototype.updateInfo = /**
* @private
* @param {?} e
* @return {?}
*/
function (e) {
this.info['width'] = false;
this.info['height'] = false;
if (this.axis === 'x') {
this.info['width'] = parseInt(this.nativeElement.style[this.rFlex ? this.flexBasis : 'width'], 10);
}
else {
this.info['height'] = parseInt(this.nativeElement.style[this.rFlex ? this.flexBasis : 'height'], 10);
}
this.info['id'] = this.nativeElement.id;
this.info['evt'] = e;
};
/**
* @param {?} e
* @param {?} direction
* @return {?}
*/
ResizableComponent.prototype.dragStart = /**
* @param {?} e
* @param {?} direction
* @return {?}
*/
function (e, direction) {
/** @type {?} */
var mouseEvent = e.originalEvent;
this.dragDir = direction;
this.axis = (this.dragDir === 'left' || this.dragDir === 'right') ? 'x' : 'y';
this.start = (this.axis === 'x' ? mouseEvent.clientX : mouseEvent.clientY);
this.w = parseInt(this.style.getPropertyValue('width'), 10);
this.h = parseInt(this.style.getPropertyValue('height'), 10);
this.resizeStart.emit({ info: this.info });
// prevent transition while dragging
this.noTransition = true;
};
/**
* @param {?} e
* @return {?}
*/
ResizableComponent.prototype.dragEnd = /**
* @param {?} e
* @return {?}
*/
function (e) {
/** @type {?} */
var mouseEvent = e.originalEvent;
this.updateInfo(mouseEvent);
this.resizeEnd.emit({ info: this.info });
this.noTransition = false;
};
/**
* @param {?} e
* @return {?}
*/
ResizableComponent.prototype.dragging = /**
* @param {?} e
* @return {?}
*/
function (e) {
/** @type {?} */
var mouseEvent = e.originalEvent;
/** @type {?} */
var offset = (this.axis === 'x') ? this.start - mouseEvent.clientX : this.start - mouseEvent.clientY;
/** @type {?} */
var operand = 1;
switch (this.dragDir) {
case 'top':
operand = -1;
/* falls through */
case 'bottom':
/** @type {?} */
var height = (this.h - offset * this.vy * operand) + 'px';
if (this.rFlex) {
this.flexBasis = height;
}
else {
this.height = height;
}
break;
case 'left':
operand = -1;
/* falls through */
case 'right':
/** @type {?} */
var width = (this.w - offset * this.vx * operand) + 'px';
if (this.rFlex) {
this.flexBasis = width;
}
else {
this.width = width;
}
break;
}
this.updateInfo(mouseEvent);
this.resizing.emit({ info: this.info });
};
ResizableComponent.decorators = [
{ type: Component, args: [{
selector: 'rsz-layout',
template: "<ng-content></ng-content>\n\n<div *ngFor='let direction of directions'\n [class]=\"'rg-' + direction\"\n rszDragHandle\n (DragStart)=\"dragStart($event, direction);\"\n (DragEnd)=\"dragEnd($event)\"\n (Drag)=\"dragging($event)\">\n <span></span>\n</div>",
providers: [{ provide: 'Window', useValue: ɵ0 }],
encapsulation: ViewEncapsulation.None,
styles: [".content{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap}.row{-webkit-box-flex:1;flex:1;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap}.row.resizable{-webkit-box-flex:0;flex:0 0 360px}.cell{box-sizing:border-box;background:#fff;border:4px solid #f0f0f0;-webkit-box-flex:1;flex:1;min-height:60px}.cell.resizable{-webkit-box-flex:0;flex:0 0 360px}.resizable{position:relative}.resizable.no-transition{-webkit-transition:none!important;transition:none!important}.rg-none{display:none}.rg-bottom,.rg-left,.rg-right,.rg-top{display:block;width:8px;height:8px;line-height:8px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:0 0;position:absolute;z-index:1}.rg-bottom span,.rg-left span,.rg-right span,.rg-top span{position:absolute;box-sizing:border-box;display:block;border:1px solid #ccc}.rg-left span,.rg-right span{border-width:0 1px;top:50%;margin:-10px 0 0 2px;height:20px;width:4px}.rg-bottom span,.rg-top span{border-width:1px 0;left:50%;margin:2px 0 0 -10px;width:20px;height:4px}.rg-top{cursor:row-resize;width:100%;top:0;left:0;margin-top:-4px}.rg-right{cursor:col-resize;height:100%;right:0;top:0;margin-right:-8px}.rg-bottom{cursor:row-resize;width:100%;bottom:0;left:0;margin-bottom:-4px}.rg-left{cursor:col-resize;height:100%;left:0;top:0;margin-left:-8px}.content.cols{-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap}.content.cols .row{-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap}.content.cols .cell{min-width:60px}.content.cols .rg-top{margin-top:-8px}.content.cols .rg-right{margin-right:-4px}.content.cols .rg-bottom{margin-bottom:-8px}.content.cols .rg-left{margin-left:-4px}"]
}] }
];
/** @nocollapse */
ResizableComponent.ctorParameters = function () { return [
{ type: ElementRef },
{ type: NgxResizeableWindowRef }
]; };
ResizableComponent.propDecorators = {
resizable: [{ type: HostBinding, args: ['class.resizable',] }],
noTransition: [{ type: HostBinding, args: ['class.no-transition',] }],
width: [{ type: HostBinding, args: ['style.width',] }],
height: [{ type: HostBinding, args: ['style.height',] }],
flexBasis: [{ type: HostBinding, args: ['style.flex-basis',] }],
directions: [{ type: Input }],
rFlex: [{ type: Input }],
resizeStart: [{ type: Output }],
resizing: [{ type: Output }],
resizeEnd: [{ type: Output }]
};
return ResizableComponent;
}());
export { ResizableComponent };
if (false) {
/** @type {?} */
ResizableComponent.prototype.resizable;
/** @type {?} */
ResizableComponent.prototype.noTransition;
/** @type {?} */
ResizableComponent.prototype.width;
/** @type {?} */
ResizableComponent.prototype.height;
/** @type {?} */
ResizableComponent.prototype.flexBasis;
/** @type {?} */
ResizableComponent.prototype.directions;
/** @type {?} */
ResizableComponent.prototype.rFlex;
/** @type {?} */
ResizableComponent.prototype.resizeStart;
/** @type {?} */
ResizableComponent.prototype.resizing;
/** @type {?} */
ResizableComponent.prototype.resizeEnd;
/**
* @type {?}
* @private
*/
ResizableComponent.prototype.nativeElement;
/**
* @type {?}
* @private
*/
ResizableComponent.prototype.style;
/**
* @type {?}
* @private
*/
ResizableComponent.prototype.w;
/**
* @type {?}
* @private
*/
ResizableComponent.prototype.h;
/**
* @type {?}
* @private
*/
ResizableComponent.prototype.vx;
/**
* @type {?}
* @private
*/
ResizableComponent.prototype.vy;
/**
* @type {?}
* @private
*/
ResizableComponent.prototype.start;
/**
* @type {?}
* @private
*/
ResizableComponent.prototype.dragDir;
/**
* @type {?}
* @private
*/
ResizableComponent.prototype.axis;
/**
* @type {?}
* @private
*/
ResizableComponent.prototype.info;
/**
* @type {?}
* @private
*/
ResizableComponent.prototype.regionElement;
/**
* @type {?}
* @private
*/
ResizableComponent.prototype.windowRef;
}
export { ɵ0 };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0AzZGdlbm9tZXMvbmd4LXJlc2l6YWJsZS8iLCJzb3VyY2VzIjpbImxpYi9yZXNpemFibGUvcmVzaXphYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxXQUFXLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUMxSSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztTQU1iLE1BQU07QUFKcEQ7SUF3Q0UsNEJBQW9CLGFBQXlCLEVBQVUsU0FBaUM7UUFBcEUsa0JBQWEsR0FBYixhQUFhLENBQVk7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUF3QjtRQS9CeEQsY0FBUyxHQUFHLElBQUksQ0FBQztRQUNiLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBTWhELFVBQUssR0FBRyxLQUFLLENBQUM7UUFFYixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDOUIsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFTakMsT0FBRSxHQUFHLENBQUMsQ0FBQztRQUNQLE9BQUUsR0FBRyxDQUFDLENBQUM7UUFRUCxTQUFJLEdBQUcsRUFBRSxDQUFDO1FBR2hCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUM7SUFDeEQsQ0FBQzs7OztJQUVELHFDQUFROzs7SUFBUjtRQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7U0FBRSxDQUFDLGlEQUFpRDtRQUM5RixJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMs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OztJQUNmLGdDQUFlOzs7OztJQUVmLG1DQUFjOzs7OztJQUVkLHFDQUFnQjs7Ozs7SUFFaEIsa0NBQWE7Ozs7O0lBRWIsa0NBQWtCOzs7OztJQUVOLDJDQUFpQzs7Ozs7SUFBRSx1Q0FBeUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSG9zdEJpbmRpbmcsIElucHV0LCBFbGVtZW50UmVmLCBWaWV3RW5jYXBzdWxhdGlvbiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEFmdGVyVmlld0luaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5neFJlc2l6ZWFibGVXaW5kb3dSZWYgfSBmcm9tICcuLi93aW5kb3cuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Jzei1sYXlvdXQnLFxuICB0ZW1wbGF0ZVVybDogJ3Jlc2l6YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydyZXNpemFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbIHsgcHJvdmlkZTogJ1dpbmRvdycsIHVzZVZhbHVlOiB3aW5kb3cgfSBdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFJlc2l6YWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5yZXNpemFibGUnKSByZXNpemFibGUgPSB0cnVlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm5vLXRyYW5zaXRpb24nKSBub1RyYW5zaXRpb24gPSBmYWxzZTtcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS53aWR0aCcpIHdpZHRoO1xuICBASG9zdEJpbmRpbmcoJ3N0eWxlLmhlaWdodCcpIGhlaWdodDtcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5mbGV4LWJhc2lzJykgZmxleEJhc2lzO1xuXG4gIEBJbnB1dCgpIGRpcmVjdGlvbnM7XG4gIEBJbnB1dCgpIHJGbGV4ID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHJlc2l6ZVN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcmVzaXppbmcgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSByZXNpemVFbmQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJpdmF0ZSBuYXRpdmVFbGVtZW50O1xuXG4gIHByaXZhdGUgc3R5bGU7XG5cbiAgcHJpdmF0ZSB3O1xuICBwcml2YXRlIGg7XG5cbiAgcHJpdmF0ZSB2eCA9IDE7XG4gIHByaXZhdGUgdnkgPSAxO1xuXG4gIHByaXZhdGUgc3RhcnQ7XG5cbiAgcHJpdmF0ZSBkcmFnRGlyO1xuXG4gIHByaXZhdGUgYXhpcztcblxuICBwcml2YXRlIGluZm8gPSB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZ2lvbkVsZW1lbnQ6IEVsZW1lbnRSZWYsIHByaXZhdGUgd2luZG93UmVmOiBOZ3hSZXNpemVhYmxlV2luZG93UmVmKSB7XG4gICAgdGhpcy5uYXRpdmVFbGVtZW50ID0gdGhpcy5yZWdpb25FbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuckZsZXgpIHsgdGhpcy5yZXNpemFibGUgPSBmYWxzZTsgfSAvLyBBZGRlZCB0byBwZXJtaXQgdXNlIG9mIGNvbXBvbmVudCBmb3IgYWxsIGNlbGxzXG4gICAgdGhpcy5mbGV4QmFzaXMgPSAnZmxleEJhc2lzJyBpbiB0aGlzLm5hdGl2ZUVsZW1lbnQuc3R5bGUgPyAnZmxleEJhc2lzJyA6XG4gICAgICAnd2Via2l0RmxleEJhc2lzJyBpbiB0aGlzLm5hdGl2ZUVsZW1lbnQuc3R5bGUgPyAnd2Via2l0RmxleEJhc2lzJyA6XG4gICAgICAnbXNGbGV4UHJlZmVycmVkU2l6ZScgaW4gdGhpcy5uYXRpdmVFbGVtZW50LnN0eWxlID8gJ21zRmxleFByZWZlcnJlZFNpemUnIDogJ2ZsZXhCYXNpcyc7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5zdHlsZSA9IHRoaXMud2luZG93UmVmLm5hdGl2ZVdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUluZm8oZSkge1xuICAgIHRoaXMuaW5mb1snd2lkdGgnXSA9IGZhbHNlOyB0aGlzLmluZm9bJ2hlaWdodCddID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuYXhpcyA9PT0gJ3gnKSB7XG4gICAgICB0aGlzLmluZm9bJ3dpZHRoJ10gPSBwYXJzZUludCh0aGlzLm5hdGl2ZUVsZW1lbnQuc3R5bGVbdGhpcy5yRmxleCA/IHRoaXMuZmxleEJhc2lzIDogJ3dpZHRoJ10sIDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmZvWydoZWlnaHQnXSA9IHBhcnNlSW50KHRoaXMubmF0aXZlRWxlbWVudC5zdHlsZVt0aGlzLnJGbGV4ID8gdGhpcy5mbGV4QmFzaXMgOiAnaGVpZ2h0J10sIDEwKTtcbiAgICB9XG4gICAgdGhpcy5pbmZvWydpZCddID0gdGhpcy5uYXRpdmVFbGVtZW50LmlkO1xuICAgIHRoaXMuaW5mb1snZXZ0J10gPSBlO1xuICB9XG5cbiAgcHVibGljIGRyYWdTdGFydChlLCBkaXJlY3Rpb24pIHtcbiAgICBjb25zdCBtb3VzZUV2ZW50ID0gZS5vcmlnaW5hbEV2ZW50O1xuXG4gICAgdGhpcy5kcmFnRGlyID0gZGlyZWN0aW9uO1xuICAgIHRoaXMuYXhpcyA9ICh0aGlzLmRyYWdEaXIgPT09ICdsZWZ0JyB8fCB0aGlzLmRyYWdEaXIgPT09ICdyaWdodCcpID8gJ3gnIDogJ3knO1xuICAgIHRoaXMuc3RhcnQgPSAodGhpcy5heGlzID09PSAneCcgPyBtb3VzZUV2ZW50LmNsaWVudFggOiBtb3VzZUV2ZW50LmNsaWVudFkpO1xuICAgIHRoaXMudyA9IHBhcnNlSW50KHRoaXMuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnd2lkdGgnKSwgMTApO1xuICAgIHRoaXMuaCA9IHBhcnNlSW50KHRoaXMuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnaGVpZ2h0JyksIDEwKTtcblxuICAgIHRoaXMucmVzaXplU3RhcnQuZW1pdCh7IGluZm86IHRoaXMuaW5mbyB9KTtcblxuICAgIC8vIHByZXZlbnQgdHJhbnNpdGlvbiB3aGlsZSBkcmFnZ2luZ1xuICAgIHRoaXMubm9UcmFuc2l0aW9uID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBkcmFnRW5kKGUpIHtcbiAgICBjb25zdCBtb3VzZUV2ZW50ID0gZS5vcmlnaW5hbEV2ZW50O1xuXG4gICAgdGhpcy51cGRhdGVJbmZvKG1vdXNlRXZlbnQpO1xuICAgIHRoaXMucmVzaXplRW5kLmVtaXQoeyBpbmZvOiB0aGlzLmluZm8gfSk7XG4gICAgdGhpcy5ub1RyYW5zaXRpb24gPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBkcmFnZ2luZyhlKSB7XG4gICAgY29uc3QgbW91c2VFdmVudCA9IGUub3JpZ2luYWxFdmVudDtcbiAgICBjb25zdCBvZmZzZXQgPSAodGhpcy5heGlzID09PSAneCcpID8gdGhpcy5zdGFydCAtIG1vdXNlRXZlbnQuY2xpZW50WCA6IHRoaXMuc3RhcnQgLSBtb3VzZUV2ZW50LmNsaWVudFk7XG5cbiAgICBsZXQgb3BlcmFuZCA9IDE7XG4gICAgc3dpdGNoICh0aGlzLmRyYWdEaXIpIHtcbiAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgIG9wZXJhbmQgPSAtMTtcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gKHRoaXMuaCAtIG9mZnNldCAqIHRoaXMudnkgKiBvcGVyYW5kKSArICdweCc7XG4gICAgICAgIGlmICh0aGlzLnJGbGV4KSB7XG4gICAgICAgICAgdGhpcy5mbGV4QmFzaXMgPSBoZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgb3BlcmFuZCA9IC0xO1xuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgIGNvbnN0IHdpZHRoID0gKHRoaXMudyAtIG9mZnNldCAqIHRoaXMudnggKiBvcGVyYW5kKSArICdweCc7XG4gICAgICAgIGlmICh0aGlzLnJGbGV4KSB7XG4gICAgICAgICAgdGhpcy5mbGV4QmFzaXMgPSB3aWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlSW5mbyhtb3VzZUV2ZW50KTtcbiAgICB0aGlzLnJlc2l6aW5nLmVtaXQoeyBpbmZvOiB0aGlzLmluZm8gfSk7XG4gIH1cbn1cbiJdfQ==