UNPKG

ngx-pluto

Version:
192 lines 18 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ViewEncapsulation, Input, ElementRef, ViewChild, Output, EventEmitter } from "@angular/core"; import * as moment_ from 'moment'; /** @type {?} */ const moment = moment_; import { NpDatePickerService } from "../date-picker.service"; import { NotifyService } from "../../shared/services/notify.service"; /** * @ignore */ export class NpTimePickerPanel { /** * @param {?} datePickerService * @param {?} notifyService */ constructor(datePickerService, notifyService) { this.datePickerService = datePickerService; this.notifyService = notifyService; this.onTimeClicked = new EventEmitter(); this.onConfirmClicked = new EventEmitter(); this.hours = []; this.minutes = []; this.seconds = []; this.selectedHour = ''; this.selectedMinute = ''; this.selectedSecond = ''; } /** * @return {?} */ ngOnInit() { this.buildData(); } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { /** @type {?} */ const time = (/** @type {?} */ (changes['time'].currentValue)); } /** * @param {?} hour * @return {?} */ onHourClicked(hour) { this.selectedHour = hour; this.buildSelectedTime(); this.onTimeClicked.emit(this.time); } /** * @param {?} minute * @return {?} */ onMinuteClicked(minute) { this.selectedMinute = minute; this.buildSelectedTime(); this.onTimeClicked.emit(this.time); } /** * @param {?} second * @return {?} */ onSecondClicked(second) { this.selectedSecond = second; this.buildSelectedTime(); this.onTimeClicked.emit(this.time); } /** * @return {?} */ onConfirmButtonClicked() { this.onConfirmClicked.emit(this.time); } /** * 根据传入时间滚动到指定时间位置 * @param {?} time 当前传入时间,格式为\@link TIME_FORMAT * @return {?} */ scrollTo(time) { /** @type {?} */ const itemHeight = 28; this.selectedHour = time.split(':')[0]; this.selectedMinute = time.split(':')[1]; this.selectedSecond = time.split(':')[2]; this.hoursElementRef.nativeElement.scrollTo({ top: +this.selectedHour * itemHeight }); this.minutesElementRef.nativeElement.scrollTo({ top: +this.selectedMinute * itemHeight }); this.secondsElementRef.nativeElement.scrollTo({ top: +this.selectedSecond * itemHeight }); } /** * @private * @return {?} */ buildData() { for (let i = 0; i < 24; i++) { this.hours.push((i + '').padStart(2, '0')); } for (let i = 0; i < 60; i++) { this.minutes.push((i + '').padStart(2, '0')); } for (let i = 0; i < 60; i++) { this.seconds.push((i + '').padStart(2, '0')); } } /** * @private * @return {?} */ buildSelectedTime() { this.time = this.selectedHour; if (this.selectedMinute) { this.time += ':' + this.selectedMinute; } if (this.selectedSecond) { this.time += ':' + this.selectedSecond; } this.scrollTo(this.time); } } NpTimePickerPanel.decorators = [ { type: Component, args: [{ selector: `np-time-picker-panel`, template: "<div class=\"np-time-picker-panel flex-wrap col-flex\">\r\n <div class=\"time-picker-header\">{{ time }}</div>\r\n <div class=\"time-picker-body flex-wrap row-flex\">\r\n <div #hoursElementRef class=\"hours flex-wrap col-flex\">\r\n <span *ngFor=\"let hour of hours\" [ngClass]=\"{'selected-item': selectedHour === hour}\"\r\n (click)=\"onHourClicked(hour)\">{{ hour }}</span>\r\n </div>\r\n <div #minutesElementRef class=\"minutes flex-wrap col-flex\">\r\n <span *ngFor=\"let minute of minutes\" [ngClass]=\"{'selected-item': selectedMinute === minute}\"\r\n (click)=\"onMinuteClicked(minute)\">{{ minute }}</span>\r\n </div>\r\n <div #secondsElementRef class=\"seconds flex-wrap col-flex\">\r\n <span *ngFor=\"let second of seconds\" [ngClass]=\"{'selected-item': selectedSecond === second}\"\r\n (click)=\"onSecondClicked(second)\">{{ second }}</span>\r\n </div>\r\n </div>\r\n <div class=\"time-picker-footer flex-wrap col-flex\">\r\n <np-button *ngIf=\"confirmButtonText\" (click)=\"onConfirmButtonClicked()\">{{ confirmButtonText }}</np-button>\r\n </div>\r\n</div>\r\n", encapsulation: ViewEncapsulation.None, styles: [".np-time-picker-panel{width:169px}.np-time-picker-panel .time-picker-header{height:41px;line-height:41px;text-align:center;font-weight:500}.np-time-picker-panel .time-picker-body{height:232px;justify-content:space-between}.np-time-picker-panel .time-picker-body .hours,.np-time-picker-panel .time-picker-body .minutes,.np-time-picker-panel .time-picker-body .seconds{width:56px;flex-wrap:nowrap;overflow:hidden;padding-bottom:204px;scroll-behavior:smooth}.np-time-picker-panel .time-picker-body .hours:hover,.np-time-picker-panel .time-picker-body .minutes:hover,.np-time-picker-panel .time-picker-body .seconds:hover{overflow-y:auto}.np-time-picker-panel .time-picker-body .hours:hover>span,.np-time-picker-panel .time-picker-body .minutes:hover>span,.np-time-picker-panel .time-picker-body .seconds:hover>span{margin-left:-8.5px}.np-time-picker-panel .time-picker-body .hours>span,.np-time-picker-panel .time-picker-body .minutes>span,.np-time-picker-panel .time-picker-body .seconds>span{width:56px;height:28px;text-align:center;line-height:28px}.np-time-picker-panel .time-picker-footer{height:41px;justify-content:center;align-items:flex-end}.np-time-picker-panel .time-picker-footer .np-button-wrapper{width:auto;letter-spacing:initial;font-size:13px;line-height:16px}"] }] } ]; /** @nocollapse */ NpTimePickerPanel.ctorParameters = () => [ { type: NpDatePickerService }, { type: NotifyService } ]; NpTimePickerPanel.propDecorators = { time: [{ type: Input }], confirmButtonText: [{ type: Input }], onTimeClicked: [{ type: Output }], onConfirmClicked: [{ type: Output }], hoursElementRef: [{ type: ViewChild, args: ['hoursElementRef',] }], minutesElementRef: [{ type: ViewChild, args: ['minutesElementRef',] }], secondsElementRef: [{ type: ViewChild, args: ['secondsElementRef',] }] }; if (false) { /** * 传入time,格式为‘HH:mm:ss,如23:59:59’ * @type {?} */ NpTimePickerPanel.prototype.time; /** @type {?} */ NpTimePickerPanel.prototype.confirmButtonText; /** @type {?} */ NpTimePickerPanel.prototype.onTimeClicked; /** @type {?} */ NpTimePickerPanel.prototype.onConfirmClicked; /** @type {?} */ NpTimePickerPanel.prototype.hoursElementRef; /** @type {?} */ NpTimePickerPanel.prototype.minutesElementRef; /** @type {?} */ NpTimePickerPanel.prototype.secondsElementRef; /** @type {?} */ NpTimePickerPanel.prototype.hours; /** @type {?} */ NpTimePickerPanel.prototype.minutes; /** @type {?} */ NpTimePickerPanel.prototype.seconds; /** @type {?} */ NpTimePickerPanel.prototype.selectedHour; /** @type {?} */ NpTimePickerPanel.prototype.selectedMinute; /** @type {?} */ NpTimePickerPanel.prototype.selectedSecond; /** * @type {?} * @private */ NpTimePickerPanel.prototype.datePickerService; /** * @type {?} * @private */ NpTimePickerPanel.prototype.notifyService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1waWNrZXItcGFuZWwuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtcGx1dG8vIiwic291cmNlcyI6WyJsaWIvZGF0ZS1waWNrZXIvY29tcG9uZW50cy90aW1lLXBpY2tlci1wYW5lbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBVSxLQUFLLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBaUIsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SSxPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsQ0FBQzs7TUFBTyxNQUFNLEdBQUcsT0FBTztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7QUFXckUsTUFBTSxPQUFPLGlCQUFpQjs7Ozs7SUFtQjFCLFlBQW9CLGlCQUFzQyxFQUM5QyxhQUE0QjtRQURwQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQXFCO1FBQzlDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBZjlCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUMzQyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBTXhELFVBQUssR0FBa0IsRUFBRSxDQUFDO1FBQzFCLFlBQU8sR0FBa0IsRUFBRSxDQUFDO1FBQzVCLFlBQU8sR0FBa0IsRUFBRSxDQUFDO1FBQzVCLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBQzFCLG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBQzVCLG1CQUFjLEdBQVcsRUFBRSxDQUFDO0lBR2dCLENBQUM7Ozs7SUFFN0MsUUFBUTtRQUNKLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNyQixDQUFDOzs7OztJQUVELFdBQVcsQ0FBQyxPQUFzQjs7Y0FDeEIsSUFBSSxHQUFXLG1CQUFBLE9BQU8sQ0FBQyxNQUFNLENB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TyxpQkFBaUI7UUFDckIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQzlCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixJQUFJLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1NBQzFDO1FBRUQsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7U0FDMUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDOzs7WUExR0osU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxzQkFBc0I7Z0JBQ2hDLDZuQ0FBcUM7Z0JBRXJDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJOzthQUN4Qzs7OztZQVhRLG1CQUFtQjtZQUNuQixhQUFhOzs7bUJBYWpCLEtBQUs7Z0NBQ0wsS0FBSzs0QkFFTCxNQUFNOytCQUNOLE1BQU07OEJBRU4sU0FBUyxTQUFDLGlCQUFpQjtnQ0FDM0IsU0FBUyxTQUFDLG1CQUFtQjtnQ0FDN0IsU0FBUyxTQUFDLG1CQUFtQjs7Ozs7OztJQVI5QixpQ0FBc0I7O0lBQ3RCLDhDQUFtQzs7SUFFbkMsMENBQXFEOztJQUNyRCw2Q0FBd0Q7O0lBRXhELDRDQUF1RTs7SUFDdkUsOENBQTJFOztJQUMzRSw4Q0FBMkU7O0lBRTNFLGtDQUEwQjs7SUFDMUIsb0NBQTRCOztJQUM1QixvQ0FBNEI7O0lBQzVCLHlDQUEwQjs7SUFDMUIsMkNBQTRCOztJQUM1QiwyQ0FBNEI7Ozs7O0lBRWhCLDhDQUE4Qzs7Ozs7SUFDdEQsMENBQW9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiwgT25Jbml0LCBJbnB1dCwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBTaW1wbGVDaGFuZ2VzLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCAqIGFzIG1vbWVudF8gZnJvbSAnbW9tZW50JzsgY29uc3QgbW9tZW50ID0gbW9tZW50X1xyXG5pbXBvcnQgeyBOcERhdGVQaWNrZXJTZXJ2aWNlIH0gZnJvbSBcIi4uL2RhdGUtcGlja2VyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTm90aWZ5U2VydmljZSB9IGZyb20gXCIuLi8uLi9zaGFyZWQvc2VydmljZXMvbm90aWZ5LnNlcnZpY2VcIjtcclxuXHJcbi8qKlxyXG4gKiBAaWdub3JlXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBgbnAtdGltZS1waWNrZXItcGFuZWxgLFxyXG4gICAgdGVtcGxhdGVVcmw6ICd0aW1lLXBpY2tlci1wYW5lbC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWyd0aW1lLXBpY2tlci1wYW5lbC5zY3NzJ10sXHJcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOcFRpbWVQaWNrZXJQYW5lbCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICAvKirkvKDlhaV0aW1l77yM5qC85byP5Li64oCYSEg6bW06c3PvvIzlpoIyMzo1OTo1OeKAmSAqL1xyXG4gICAgQElucHV0KCkgdGltZTogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgY29uZmlybUJ1dHRvblRleHQ6IHN0cmluZztcclxuXHJcbiAgICBAT3V0cHV0KCkgb25UaW1lQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gICAgQE91dHB1dCgpIG9uQ29uZmlybUNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdob3Vyc0VsZW1lbnRSZWYnKSBob3Vyc0VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG4gICAgQFZpZXdDaGlsZCgnbWludXRlc0VsZW1lbnRSZWYnKSBtaW51dGVzRWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgICBAVmlld0NoaWxkKCdzZWNvbmRzRWxlbWVudFJlZicpIHNlY29uZHNFbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuXHJcbiAgICBob3VyczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gICAgbWludXRlczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gICAgc2Vjb25kczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gICAgc2VsZWN0ZWRIb3VyOiBzdHJpbmcgPSAnJztcclxuICAgIHNlbGVjdGVkTWludXRlOiBzdHJpbmcgPSAnJztcclxuICAgIHNlbGVjdGVkU2Vjb25kOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGVQaWNrZXJTZXJ2aWNlOiBOcERhdGVQaWNrZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbm90aWZ5U2VydmljZTogTm90aWZ5U2VydmljZSkgeyB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5idWlsZERhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgY29uc3QgdGltZTogc3RyaW5nID0gY2hhbmdlc1sndGltZSddLmN1cnJlbnRWYWx1ZSBhcyBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgb25Ib3VyQ2xpY2tlZChob3VyOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IGhvdXI7XHJcbiAgICAgICAgdGhpcy5idWlsZFNlbGVjdGVkVGltZSgpO1xyXG4gICAgICAgIHRoaXMub25UaW1lQ2xpY2tlZC5lbWl0KHRoaXMudGltZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25NaW51dGVDbGlja2VkKG1pbnV0ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IG1pbnV0ZTtcclxuICAgICAgICB0aGlzLmJ1aWxkU2VsZWN0ZWRUaW1lKCk7XHJcbiAgICAgICAgdGhpcy5vblRpbWVDbGlja2VkLmVtaXQodGhpcy50aW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBvblNlY29uZENsaWNrZWQoc2Vjb25kOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkU2Vjb25kID0gc2Vjb25kO1xyXG4gICAgICAgIHRoaXMuYnVpbGRTZWxlY3RlZFRpbWUoKTtcclxuICAgICAgICB0aGlzLm9uVGltZUNsaWNrZWQuZW1pdCh0aGlzLnRpbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ29uZmlybUJ1dHRvbkNsaWNrZWQoKSB7XHJcbiAgICAgICAgdGhpcy5vbkNvbmZpcm1DbGlja2VkLmVtaXQodGhpcy50aW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOagueaNruS8oOWFpeaXtumXtOa7muWKqOWIsOaMh+WumuaXtumXtOS9jee9rlxyXG4gICAgICogQHBhcmFtIHRpbWUg5b2T5YmN5Lyg5YWl5pe26Ze077yM5qC85byP5Li6QGxpbmsgVElNRV9GT1JNQVRcclxuICAgICAqL1xyXG4gICAgc2Nyb2xsVG8odGltZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbUhlaWdodCA9IDI4OyAgIC8vIGVhY2ggaXRlbSBoZWlnaHQgaXMgMjhweFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gdGltZS5zcGxpdCgnOicpWzBdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSB0aW1lLnNwbGl0KCc6JylbMV07XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlY29uZCA9IHRpbWUuc3BsaXQoJzonKVsyXTtcclxuXHJcbiAgICAgICAgdGhpcy5ob3Vyc0VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxUbyh7XHJcbiAgICAgICAgICAgIHRvcDogK3RoaXMuc2VsZWN0ZWRIb3VyICogaXRlbUhlaWdodFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLm1pbnV0ZXNFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8oe1xyXG4gICAgICAgICAgICB0b3A6ICt0aGlzLnNlbGVjdGVkTWludXRlICogaXRlbUhlaWdodFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnNlY29uZHNFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8oe1xyXG4gICAgICAgICAgICB0b3A6ICt0aGlzLnNlbGVjdGVkU2Vjb25kICogaXRlbUhlaWdodFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYnVpbGREYXRhKCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjQ7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmhvdXJzLnB1c2goKGkgKyAnJykucGFkU3RhcnQoMiwgJzAnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDYwOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5taW51dGVzLnB1c2goKGkgKyAnJykucGFkU3RhcnQoMiwgJzAnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDYwOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5zZWNvbmRzLnB1c2goKGkgKyAnJykucGFkU3RhcnQoMiwgJzAnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYnVpbGRTZWxlY3RlZFRpbWUoKSB7XHJcbiAgICAgICAgdGhpcy50aW1lID0gdGhpcy5zZWxlY3RlZEhvdXI7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNaW51dGUpIHtcclxuICAgICAgICAgICAgdGhpcy50aW1lICs9ICc6JyArIHRoaXMuc2VsZWN0ZWRNaW51dGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNlY29uZCkge1xyXG4gICAgICAgICAgICB0aGlzLnRpbWUgKz0gJzonICsgdGhpcy5zZWxlY3RlZFNlY29uZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG8odGhpcy50aW1lKTtcclxuICAgIH1cclxufSJdfQ==