UNPKG

@noaestudio/forms

Version:

Dynamic forms extension for Covalent

131 lines (130 loc) 14 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, forwardRef } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { AbstractControlValueAccessor } from '../abstract-control-value-accesor'; import * as moment_ from 'moment'; var /** @type {?} */ moment = moment_; export var /** @type {?} */ DATEPICKER_INPUT_CONTROL_VALUE_ACCESSOR = { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(function () { return DateTimePickerComponent; }), multi: true, }; var DateTimePickerComponent = /** @class */ (function (_super) { tslib_1.__extends(DateTimePickerComponent, _super); function DateTimePickerComponent() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.label = ''; _this.type = undefined; _this.required = undefined; _this.min = undefined; _this.max = undefined; _this.format = 24; _this.dateTime = moment.utc(); _this.dateValue = null; _this.timeValue = ''; return _this; } /** * @return {?} */ DateTimePickerComponent.prototype.ngOnInit = /** * @return {?} */ function () { if (this.value) { this.dateTime = this.value; this.initValues(); } else { this.dateTime = moment.utc(); this.control.setValue(this.dateTime); } }; /** * @return {?} */ DateTimePickerComponent.prototype.initValues = /** * @return {?} */ function () { this.dateValue = moment.utc(this.dateTime.clone()); this.timeValue = this.dateTime.format('HH:mm'); }; /** * @param {?} value * @return {?} */ DateTimePickerComponent.prototype.selectDateValue = /** * @param {?} value * @return {?} */ function (value) { if (this.dateTime == null) { this.dateTime = moment.utc(); } this.dateTime.year(value.year()).month(value.month()).date(value.date()); this.control.setValue(this.dateTime); }; /** * @param {?} value * @return {?} */ DateTimePickerComponent.prototype.selectTimeValue = /** * @param {?} value * @return {?} */ function (value) { var /** @type {?} */ timeMoment = moment.utc(this.timeValue, 'HH:mm'); if (this.dateTime == null) { this.dateTime = moment.utc(); } this.dateTime.hour(timeMoment.hour()).minute(timeMoment.minute()).second(timeMoment.second()); this.control.setValue(this.dateTime); }; DateTimePickerComponent.decorators = [ { type: Component, args: [{ providers: [DATEPICKER_INPUT_CONTROL_VALUE_ACCESSOR], selector: 'td-date-time-picker', styles: [".td-dynamic-timepicker-wrapper{-ms-flex-direction:row;flex-direction:row;display:-ms-flexbox;display:flex;box-sizing:border-box}.td-dynamic-timepicker-wrapper .td-dynamic-timepicker-field{-ms-flex:1;flex:1;box-sizing:border-box}"], template: "<style>\n\n.timeLabel {\n\tdisplay: block;\n\tmargin-bottom: 5px;\n\tcolor: rgba(0, 0, 0, 0.54);\n\tfont-size: 11px;\n}\n\n.timeInput {\n\tborder: none;\n border-bottom: 1px solid rgba(0, 0, 0, 0.54);\n width: 201px;\n}\n\n.timeIcon {\n\tdisplay: inline-flex;\n\tvertical-align: middle;\n}\n\n</style>\n\n<div class=\"td-dynamic-datepicker-wrapper\">\n\t<label>{{label}}</label>\n\n\t<br />\n\t<br />\n\n\t<mat-form-field class=\"td-dynamic-datepicker-field\">\n\t\t<input #elementInput matInput [matDatepicker]=\"dynamicDatePicker\" autocomplete=\"off\"\n\t\t\t[(ngModel)]=\"dateValue\" (ngModelChange)=\"selectDateValue($event)\"\n\t\t\tplaceholder=\"Fecha\" [required]=\"required\" [min]=\"min\" [max]=\"max\"\n\t\t/>\n\t\t<mat-datepicker-toggle matSuffix [for]=\"dynamicDatePicker\"></mat-datepicker-toggle>\n\t\t<mat-datepicker #dynamicDatePicker></mat-datepicker>\n\n\t</mat-form-field>\n\n\t<br />\n\n\t<label class=\"timeLabel\">Hora</label>\n\t<input class=\"timeInput\" [ngxTimepicker]=\"pickerDT\" [(ngModel)]=\"timeValue\" (ngModelChange)=\"selectTimeValue($event)\"\n\t\t[disableClick]=\"true\" readonly [format]=\"format\" [required]=\"required\" autocomplete=\"off\" />\n <ngx-material-timepicker-toggle class=\"timeIcon\" [for]=\"pickerDT\"></ngx-material-timepicker-toggle>\n <ngx-material-timepicker #pickerDT></ngx-material-timepicker>\n\n</div>\n", },] }, ]; /** @nocollapse */ DateTimePickerComponent.ctorParameters = function () { return []; }; return DateTimePickerComponent; }(AbstractControlValueAccessor)); export { DateTimePickerComponent }; function DateTimePickerComponent_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ DateTimePickerComponent.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ DateTimePickerComponent.ctorParameters; /** @type {?} */ DateTimePickerComponent.prototype.control; /** @type {?} */ DateTimePickerComponent.prototype.label; /** @type {?} */ DateTimePickerComponent.prototype.type; /** @type {?} */ DateTimePickerComponent.prototype.required; /** @type {?} */ DateTimePickerComponent.prototype.min; /** @type {?} */ DateTimePickerComponent.prototype.max; /** @type {?} */ DateTimePickerComponent.prototype.format; /** @type {?} */ DateTimePickerComponent.prototype.dateTime; /** @type {?} */ DateTimePickerComponent.prototype.dateValue; /** @type {?} */ DateTimePickerComponent.prototype.timeValue; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY292YWxlbnQvZHluYW1pYy1mb3Jtcy8iLCJzb3VyY2VzIjpbImR5bmFtaWMtZWxlbWVudHMvZGF0ZS10aW1lLXBpY2tlci9kYXRlLXRpbWUtcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBcUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUdqRixPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsQ0FBQztBQUVsQyxxQkFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBRXZCLE1BQU0sQ0FBQyxxQkFBTSx1Q0FBdUMsR0FBUTtJQUMzRCxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsY0FBTSxPQUFBLHVCQUF1QixFQUF2QixDQUF1QixDQUFDO0lBQ3RELEtBQUssRUFBRSxJQUFJO0NBQ1gsQ0FBQzs7SUF1RDJDLG1EQUE0Qjs7O3NCQUl4RCxFQUFFO3FCQUVILFNBQVM7eUJBRUosU0FBUztvQkFFZixTQUFTO29CQUVULFNBQVM7dUJBRUwsRUFBRTt5QkFFRCxNQUFNLENBQUMsR0FBRyxFQUFFOzBCQUVWLElBQUk7MEJBQ0osRUFBRTs7Ozs7O0lBRXZCLDBDQUFROzs7SUFBUjtRQUNDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUMzQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDbEI7UUFDRCxJQUFJLENBQUMsQ0FBQztZQUNMLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNyQztLQUNEOzs7O0lBRU8sNENBQVU7Ozs7UUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDOzs7Ozs7SUFJaEQsaURBQWU7Ozs7SUFBZixVQUFnQixLQUFhO1FBQzVCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUM3QjtRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFFekUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3JDOzs7OztJQUVELGlEQUFlOzs7O0lBQWYsVUFBZ0IsS0FBYztRQUM3QixxQkFBSSxVQUFVLEdBQVksTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTdELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUM3QjtRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFOUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3JDOztnQkEvR0QsU0FBUyxTQUFDO29CQUNWLFNBQVMsRUFBRSxDQUFDLHVDQUF1QyxDQUFDO29CQUNwRCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixNQUFNLEVBQUUsQ0FBQyxzT0FBc08sQ0FBQztvQkFDaFAsUUFBUSxFQUFFLG8yQ0ErQ1Y7aUJBQ0E7Ozs7a0NBcEVEO0VBcUU2Qyw0QkFBNEI7U0FBNUQsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnLi4vYWJzdHJhY3QtY29udHJvbC12YWx1ZS1hY2Nlc29yJztcclxuXHJcbmltcG9ydCB7IE1vbWVudCB9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCAqIGFzIG1vbWVudF8gZnJvbSAnbW9tZW50JztcclxuXHJcbmNvbnN0IG1vbWVudCA9IG1vbWVudF87XHJcblxyXG5leHBvcnQgY29uc3QgREFURVBJQ0tFUl9JTlBVVF9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XHJcblx0cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcblx0dXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQpLFxyXG5cdG11bHRpOiB0cnVlLFxyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0cHJvdmlkZXJzOiBbREFURVBJQ0tFUl9JTlBVVF9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SXSxcclxuXHRzZWxlY3RvcjogJ3RkLWRhdGUtdGltZS1waWNrZXInLFxyXG5cdHN0eWxlczogW2AudGQtZHluYW1pYy10aW1lcGlja2VyLXdyYXBwZXJ7LW1zLWZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LWRpcmVjdGlvbjpyb3c7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94fS50ZC1keW5hbWljLXRpbWVwaWNrZXItd3JhcHBlciAudGQtZHluYW1pYy10aW1lcGlja2VyLWZpZWxkey1tcy1mbGV4OjE7ZmxleDoxO2JveC1zaXppbmc6Ym9yZGVyLWJveH1gXSxcclxuXHR0ZW1wbGF0ZTogYDxzdHlsZT5cclxuXHJcbi50aW1lTGFiZWwge1xyXG5cdGRpc3BsYXk6IGJsb2NrO1xyXG5cdG1hcmdpbi1ib3R0b206IDVweDtcclxuXHRjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjU0KTtcclxuXHRmb250LXNpemU6IDExcHg7XHJcbn1cclxuXHJcbi50aW1lSW5wdXQge1xyXG5cdGJvcmRlcjogbm9uZTtcclxuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuNTQpO1xyXG4gICAgd2lkdGg6IDIwMXB4O1xyXG59XHJcblxyXG4udGltZUljb24ge1xyXG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xyXG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbn1cclxuXHJcbjwvc3R5bGU+XHJcblxyXG48ZGl2IGNsYXNzPVwidGQtZHluYW1pYy1kYXRlcGlja2VyLXdyYXBwZXJcIj5cclxuXHQ8bGFiZWw+e3tsYWJlbH19PC9sYWJlbD5cclxuXHJcblx0PGJyIC8+XHJcblx0PGJyIC8+XHJcblxyXG5cdDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInRkLWR5bmFtaWMtZGF0ZXBpY2tlci1maWVsZFwiPlxyXG5cdFx0PGlucHV0ICNlbGVtZW50SW5wdXQgbWF0SW5wdXQgW21hdERhdGVwaWNrZXJdPVwiZHluYW1pY0RhdGVQaWNrZXJcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG5cdFx0XHRbKG5nTW9kZWwpXT1cImRhdGVWYWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdERhdGVWYWx1ZSgkZXZlbnQpXCJcclxuXHRcdFx0cGxhY2Vob2xkZXI9XCJGZWNoYVwiIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiIFttaW5dPVwibWluXCIgW21heF09XCJtYXhcIlxyXG5cdFx0Lz5cclxuXHRcdDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwiZHluYW1pY0RhdGVQaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuXHRcdDxtYXQtZGF0ZXBpY2tlciAjZHluYW1pY0RhdGVQaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuXHJcblx0PC9tYXQtZm9ybS1maWVsZD5cclxuXHJcblx0PGJyIC8+XHJcblxyXG5cdDxsYWJlbCBjbGFzcz1cInRpbWVMYWJlbFwiPkhvcmE8L2xhYmVsPlxyXG5cdDxpbnB1dCBjbGFzcz1cInRpbWVJbnB1dFwiIFtuZ3hUaW1lcGlja2VyXT1cInBpY2tlckRUXCIgWyhuZ01vZGVsKV09XCJ0aW1lVmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3RUaW1lVmFsdWUoJGV2ZW50KVwiXHJcblx0XHRbZGlzYWJsZUNsaWNrXT1cInRydWVcIiByZWFkb25seSBbZm9ybWF0XT1cImZvcm1hdFwiIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XHJcbiAgICA8bmd4LW1hdGVyaWFsLXRpbWVwaWNrZXItdG9nZ2xlIGNsYXNzPVwidGltZUljb25cIiBbZm9yXT1cInBpY2tlckRUXCI+PC9uZ3gtbWF0ZXJpYWwtdGltZXBpY2tlci10b2dnbGU+XHJcbiAgICA8bmd4LW1hdGVyaWFsLXRpbWVwaWNrZXIgI3BpY2tlckRUPjwvbmd4LW1hdGVyaWFsLXRpbWVwaWNrZXI+XHJcblxyXG48L2Rpdj5cclxuYCxcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGVUaW1lUGlja2VyQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RDb250cm9sVmFsdWVBY2Nlc3NvciBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcblx0Y29udHJvbDogRm9ybUNvbnRyb2w7XHJcblxyXG5cdGxhYmVsOiBzdHJpbmcgPSAnJztcclxuXHJcblx0dHlwZTogc3RyaW5nID0gdW5kZWZpbmVkO1xyXG5cclxuXHRyZXF1aXJlZDogYm9vbGVhbiA9IHVuZGVmaW5lZDtcclxuXHJcblx0bWluOiBudW1iZXIgPSB1bmRlZmluZWQ7XHJcblxyXG5cdG1heDogbnVtYmVyID0gdW5kZWZpbmVkO1xyXG5cclxuXHRmb3JtYXQgOiBudW1iZXIgPSAyNDtcclxuXHJcblx0ZGF0ZVRpbWU6IE1vbWVudCA9IG1vbWVudC51dGMoKTtcclxuXHJcblx0ZGF0ZVZhbHVlIDogTW9tZW50ID0gbnVsbDtcclxuXHR0aW1lVmFsdWUgOiBzdHJpbmcgPSAnJztcclxuXHJcblx0bmdPbkluaXQoKSB7XHJcblx0XHRpZiAodGhpcy52YWx1ZSkge1xyXG5cdFx0XHR0aGlzLmRhdGVUaW1lID0gdGhpcy52YWx1ZTtcclxuXHRcdFx0dGhpcy5pbml0VmFsdWVzKCk7XHJcblx0XHR9XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0dGhpcy5kYXRlVGltZSA9IG1vbWVudC51dGMoKTtcclxuXHRcdFx0dGhpcy5jb250cm9sLnNldFZhbHVlKHRoaXMuZGF0ZVRpbWUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBpbml0VmFsdWVzKCkge1xyXG5cdFx0dGhpcy5kYXRlVmFsdWUgPSBtb21lbnQudXRjKHRoaXMuZGF0ZVRpbWUuY2xvbmUoKSk7XHJcblx0XHR0aGlzLnRpbWVWYWx1ZSA9IHRoaXMuZGF0ZVRpbWUuZm9ybWF0KCdISDptbScpO1xyXG5cdH1cclxuXHJcblxyXG5cdHNlbGVjdERhdGVWYWx1ZSh2YWx1ZTogTW9tZW50KSB7XHJcblx0XHRpZiAodGhpcy5kYXRlVGltZSA9PSBudWxsKSB7XHJcblx0XHRcdHRoaXMuZGF0ZVRpbWUgPSBtb21lbnQudXRjKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5kYXRlVGltZS55ZWFyKHZhbHVlLnllYXIoKSkubW9udGgodmFsdWUubW9udGgoKSkuZGF0ZSh2YWx1ZS5kYXRlKCkpO1xyXG5cclxuXHRcdHRoaXMuY29udHJvbC5zZXRWYWx1ZSh0aGlzLmRhdGVUaW1lKTtcclxuXHR9XHJcblxyXG5cdHNlbGVjdFRpbWVWYWx1ZSh2YWx1ZSA6IHN0cmluZykge1xyXG5cdFx0bGV0IHRpbWVNb21lbnQgOiBNb21lbnQgPSBtb21lbnQudXRjKHRoaXMudGltZVZhbHVlLCdISDptbScpO1xyXG5cclxuXHRcdGlmICh0aGlzLmRhdGVUaW1lID09IG51bGwpIHtcclxuXHRcdFx0dGhpcy5kYXRlVGltZSA9IG1vbWVudC51dGMoKTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmRhdGVUaW1lLmhvdXIodGltZU1vbWVudC5ob3VyKCkpLm1pbnV0ZSh0aW1lTW9tZW50Lm1pbnV0ZSgpKS5zZWNvbmQodGltZU1vbWVudC5zZWNvbmQoKSk7XHJcblxyXG5cdFx0dGhpcy5jb250cm9sLnNldFZhbHVlKHRoaXMuZGF0ZVRpbWUpO1xyXG5cdH1cclxuXHJcbn1cclxuIl19