UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

217 lines (216 loc) 17.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { AbstractI18NApplicable } from '../../share/AbstractI18NApplicable'; import { ValidationStatus } from './ValidationStatus'; /** * @abstract * @template T */ var /** * @abstract * @template T */ AbstractValidator = /** @class */ (function (_super) { tslib_1.__extends(AbstractValidator, _super); function AbstractValidator(el, target, name, options, phloxAppService) { var _this = _super.call(this) || this; _this.elementRef = el; _this.target = target; _this.name = name; _this.options = options; _this.i18NStatusMap = {}; // ! NOTE TODO PENDING TO CONFIRM THIS LOGIC AGAIN // if (phloxAppService !== null && typeof phloxAppService !== 'undefined') { // phloxAppService.getAppInfo().then((result) => { // let phloxAppInfo = result; // let defMessage = phloxAppInfo.i18n.INVALID_DATA; // // if (this.options === null || typeof this.options === 'undefined') { // let newOptions = { // message: defMessage // }; // this.setOptions(newOptions); // } else { // if (this.options.message === null || typeof this.options.message === 'undefined') { // this.options.message = defMessage; // } // this.setOptions(this.options); // } // }); // } return _this; } /** * @return {?} */ AbstractValidator.prototype.ngOnInit = /** * @return {?} */ function () { // auto adding into validator var /** @type {?} */ component = this.getTargetComponent(); if (component !== null) { if (typeof component.addValidator === 'function') { component.addValidator(this); } } }; /** * @return {?} */ AbstractValidator.prototype.ngOnDestroy = /** * @return {?} */ function () { // auto remove from validator var /** @type {?} */ component = this.getTargetComponent(); if (component !== null) { if (typeof component.addValidator === 'function') { component.removeValidator(this); } } }; /** * @return {?} */ AbstractValidator.prototype.getTargetComponent = /** * @return {?} */ function () { var /** @type {?} */ component = null; try { if (this.target !== null && typeof this.target !== 'undefined') { component = (/** @type {?} */ (this.target))._data.componentView.component; } } catch (/** @type {?} */ error) { } return component; }; /** * @return {?} */ AbstractValidator.prototype.getMessage = /** * @return {?} */ function () { var /** @type {?} */ msg = ""; if (this.options !== null && typeof this.options !== 'undefined') { if (this.options.message !== null && typeof this.options.message !== 'undefined') { msg = this.options.message; } } return msg; }; /** * @return {?} */ AbstractValidator.prototype.getName = /** * @return {?} */ function () { return this.name; }; /** * @return {?} */ AbstractValidator.prototype.getOptions = /** * @return {?} */ function () { return this.options; }; /** * @param {?} value * @return {?} */ AbstractValidator.prototype.applyI18N = /** * @param {?} value * @return {?} */ function (value) { _super.prototype.applyI18N.call(this, value); if (typeof value === 'undefined') { return; } // value as I18Nobject this.i18NStatusMap = {}; for (var /** @type {?} */ status_1 in ValidationStatus) { var /** @type {?} */ isValueProperty = parseInt(status_1, 10) >= 0; if (isValueProperty) { var /** @type {?} */ statusName = ValidationStatus[status_1]; this.i18NStatusMap[statusName] = value[statusName]; } } }; /** * @param {?} value * @return {?} */ AbstractValidator.prototype.validate = /** * @param {?} value * @return {?} */ function (value) { var /** @type {?} */ result = this.doValidate(value); var /** @type {?} */ ignoreI18N = false; if (this.options !== null && typeof this.options !== 'undefined') { ignoreI18N = this.options.ignoreI18N; if (ignoreI18N === null || typeof ignoreI18N !== 'boolean') { ignoreI18N = false; } } // Resolve ii8n and add to validate result // if option ignore i18n so just leave it if (result !== null && typeof result !== 'undefined' && !ignoreI18N) { var /** @type {?} */ statusName = ValidationStatus[result.getStatus()]; var /** @type {?} */ msg = this.i18NStatusMap[statusName]; if (msg !== null && typeof msg !== 'undefined') { result.setMessage(msg); } } // Force set result.source to target component. result.setSource(this.getTargetComponent()); return result; }; /** * @return {?} */ AbstractValidator.prototype.getI18NKey = /** * @return {?} */ function () { // To return validator's name instead of its class name. if (this.name !== null && typeof this.name === 'string') { return this.name; } // Else, return as super. return _super.prototype.getI18NKey.call(this); }; return AbstractValidator; }(AbstractI18NApplicable)); /** * @abstract * @template T */ export { AbstractValidator }; function AbstractValidator_tsickle_Closure_declarations() { /** @type {?} */ AbstractValidator.prototype.name; /** @type {?} */ AbstractValidator.prototype.elementRef; /** @type {?} */ AbstractValidator.prototype.target; /** @type {?} */ AbstractValidator.prototype.i18NStatusMap; /** * @abstract * @param {?} value * @return {?} */ AbstractValidator.prototype.doValidate = function (value) { }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RWYWxpZGF0b3IuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvdmFsaWRhdGUvQWJzdHJhY3RWYWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFHQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUc1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7QUFJdEQ7Ozs7QUFBQTtJQUFtRCw2Q0FBc0I7SUFPdkUsMkJBQVksRUFBYyxFQUFFLE1BQXdCLEVBQUUsSUFBWSxFQUFFLE9BQWEsRUFBRSxlQUFxQztRQUF4SCxZQUNFLGlCQUFPLFNBNEJSO1FBMUJDLEtBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLEtBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLEtBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLEtBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLEtBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FzQnpCOzs7O0lBRU0sb0NBQVE7Ozs7O1FBRWIscUJBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sU0FBUyxDQUFDLFlBQVksS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUNqRCxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzlCO1NBQ0Y7Ozs7O0lBR0ksdUNBQVc7Ozs7O1FBRWhCLHFCQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQyxFQUFFLENBQUMsQ0FBQyxTQUFT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QUksSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLHFCQUFJLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUN0RCxxQkFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUV6QyxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxJQUFJLE9BQU8sR0FBRyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQy9DLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDeEI7U0FDRjs7UUFHRCxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7UUFFNUMsTUFBTSxDQUFDLE1BQU0sQ0FBQzs7Ozs7SUFJVCxzQ0FBVTs7Ozs7UUFFZixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztZQUN4RCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUNsQjs7UUFHRCxNQUFNLENBQUMsaUJBQU0sVUFBVSxXQUFFLENBQUM7OzRCQXpKOUI7RUFVbUQsc0JBQXNCLEVBbUp4RSxDQUFBOzs7OztBQW5KRCw2QkFtSkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPbkluaXQsIEVsZW1lbnRSZWYsIFZpZXdDb250YWluZXJSZWYsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi4vbW9kZWwvVmFsaWRhdGlvblJlc3VsdCc7XG5pbXBvcnQgeyBBYnN0cmFjdEkxOE5BcHBsaWNhYmxlIH0gZnJvbSAnLi4vLi4vc2hhcmUvQWJzdHJhY3RJMThOQXBwbGljYWJsZSc7XG5pbXBvcnQgeyBJVmFsaWRhdGFibGUgfSBmcm9tICcuL0lWYWxpZGF0YWJsZSc7XG5pbXBvcnQgeyBJVmFsaWRhdG9yIH0gZnJvbSAnLi9JVmFsaWRhdG9yJztcbmltcG9ydCB7IFZhbGlkYXRpb25TdGF0dXMgfSBmcm9tICcuL1ZhbGlkYXRpb25TdGF0dXMnO1xuaW1wb3J0IHsgUGhsb3hBcHBJbmZvIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50L21vZGVsL1BobG94QXBwSW5mbyc7XG5pbXBvcnQgeyBQaGxveEFwcEluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9QaGxveEFwcEluZm9TZXJ2aWNlLnNlcnZpY2UnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RWYWxpZGF0b3I8VD4gZXh0ZW5kcyBBYnN0cmFjdEkxOE5BcHBsaWNhYmxlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIElWYWxpZGF0b3I8VD4ge1xuXG4gIHByb3RlY3RlZCBuYW1lOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICBwcm90ZWN0ZWQgdGFyZ2V0OiBWaWV3Q29udGFpbmVyUmVmO1xuICBwcm90ZWN0ZWQgaTE4TlN0YXR1c01hcDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKGVsOiBFbGVtZW50UmVmLCB0YXJnZXQ6IFZpZXdDb250YWluZXJSZWYsIG5hbWU6IHN0cmluZywgb3B0aW9ucz86IGFueSwgcGhsb3hBcHBTZXJ2aWNlPzogUGhsb3hBcHBJbmZvU2VydmljZSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmVsZW1lbnRSZWYgPSBlbDtcbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5pMThOU3RhdHVzTWFwID0ge307XG5cbiAgICAvLyAhIE5PVEUgVE9ETyBQRU5ESU5HIFRPIENPTkZJUk0gVEhJUyBMT0dJQyBBR0FJTlxuXG4gICAgLy8gaWYgKHBobG94QXBwU2VydmljZSAhPT0gbnVsbCAmJiB0eXBlb2YgcGhsb3hBcHBTZXJ2aWNlICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vICAgICBwaGxveEFwcFNlcnZpY2UuZ2V0QXBwSW5mbygpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgIC8vICAgICAgICAgbGV0IHBobG94QXBwSW5mbyA9IHJlc3VsdDtcbiAgICAvLyAgICAgICAgIGxldCBkZWZNZXNzYWdlID0gcGhsb3hBcHBJbmZvLmkxOG4uSU5WQUxJRF9EQVRBO1xuICAgIC8vXG4gICAgLy8gICAgICAgICBpZiAodGhpcy5vcHRpb25zID09PSBudWxsIHx8IHR5cGVvZiB0aGlzLm9wdGlvbnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gICAgICAgICAgICAgbGV0IG5ld09wdGlvbnMgPSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGRlZk1lc3NhZ2VcbiAgICAvLyAgICAgICAgICAgICB9O1xuICAgIC8vICAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9ucyhuZXdPcHRpb25zKTtcbiAgICAvLyAgICAgICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5tZXNzYWdlID09PSBudWxsIHx8IHR5cGVvZiB0aGlzLm9wdGlvbnMubWVzc2FnZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLm1lc3NhZ2UgPSBkZWZNZXNzYWdlO1xuICAgIC8vICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICB0aGlzLnNldE9wdGlvbnModGhpcy5vcHRpb25zKTtcbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgfSk7XG4gICAgLy8gfVxuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIGF1dG8gYWRkaW5nIGludG8gdmFsaWRhdG9yXG4gICAgbGV0IGNvbXBvbmVudCA9IHRoaXMuZ2V0VGFyZ2V0Q29tcG9uZW50KCk7XG4gICAgaWYgKGNvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnQuYWRkVmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbXBvbmVudC5hZGRWYWxpZGF0b3IodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIC8vIGF1dG8gcmVtb3ZlIGZyb20gdmFsaWRhdG9yXG4gICAgbGV0IGNvbXBvbmVudCA9IHRoaXMuZ2V0VGFyZ2V0Q29tcG9uZW50KCk7XG4gICAgaWYgKGNvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnQuYWRkVmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbXBvbmVudC5yZW1vdmVWYWxpZGF0b3IodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFRhcmdldENvbXBvbmVudCgpOiBhbnkge1xuICAgIGxldCBjb21wb25lbnQgPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy50YXJnZXQgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMudGFyZ2V0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb21wb25lbnQgPSAoPGFueT50aGlzLnRhcmdldCkuX2RhdGEuY29tcG9uZW50Vmlldy5jb21wb25lbnQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcG9uZW50O1xuICB9XG5cbiAgcHVibGljIGdldE1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICBsZXQgbXNnOiBzdHJpbmcgPSBcIlwiO1xuICAgIGlmICh0aGlzLm9wdGlvbnMgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMub3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubWVzc2FnZSAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5vcHRpb25zLm1lc3NhZ2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIG1zZyA9IHRoaXMub3B0aW9ucy5tZXNzYWdlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbXNnO1xuICB9XG5cbiAgcHVibGljIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lXG4gIH1cblxuICBwdWJsaWMgZ2V0T3B0aW9ucygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgYXBwbHlJMThOKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBzdXBlci5hcHBseUkxOE4odmFsdWUpO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB2YWx1ZSBhcyBJMThOb2JqZWN0XG4gICAgdGhpcy5pMThOU3RhdHVzTWFwID0ge307XG4gICAgZm9yIChsZXQgc3RhdHVzIGluIFZhbGlkYXRpb25TdGF0dXMpIHtcbiAgICAgIGxldCBpc1ZhbHVlUHJvcGVydHkgPSBwYXJzZUludChzdGF0dXMsIDEwKSA+PSAwO1xuXG4gICAgICBpZiAoaXNWYWx1ZVByb3BlcnR5KSB7XG4gICAgICAgIGxldCBzdGF0dXNOYW1lID0gVmFsaWRhdGlvblN0YXR1c1tzdGF0dXNdO1xuICAgICAgICB0aGlzLmkxOE5TdGF0dXNNYXBbc3RhdHVzTmFtZV0gPSB2YWx1ZVtzdGF0dXNOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUodmFsdWU6IFQpOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5kb1ZhbGlkYXRlKHZhbHVlKTtcblxuICAgIGxldCBpZ25vcmVJMThOID0gZmFsc2U7XG4gICAgaWYgKHRoaXMub3B0aW9ucyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5vcHRpb25zICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWdub3JlSTE4TiA9IHRoaXMub3B0aW9ucy5pZ25vcmVJMThOO1xuICAgICAgaWYgKGlnbm9yZUkxOE4gPT09IG51bGwgfHwgdHlwZW9mIGlnbm9yZUkxOE4gIT09ICdib29sZWFuJykge1xuICAgICAgICBpZ25vcmVJMThOID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVzb2x2ZSBpaThuIGFuZCBhZGQgdG8gdmFsaWRhdGUgcmVzdWx0XG4gICAgLy8gaWYgb3B0aW9uIGlnbm9yZSBpMThuIHNvIGp1c3QgbGVhdmUgaXRcbiAgICBpZiAocmVzdWx0ICE9PSBudWxsICYmIHR5cGVvZiByZXN1bHQgIT09ICd1bmRlZmluZWQnICYmICFpZ25vcmVJMThOKSB7XG4gICAgICBsZXQgc3RhdHVzTmFtZSA9IFZhbGlkYXRpb25TdGF0dXNbcmVzdWx0LmdldFN0YXR1cygpXTtcbiAgICAgIGxldCBtc2cgPSB0aGlzLmkxOE5TdGF0dXNNYXBbc3RhdHVzTmFtZV07XG5cbiAgICAgIGlmIChtc2cgIT09IG51bGwgJiYgdHlwZW9mIG1zZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmVzdWx0LnNldE1lc3NhZ2UobXNnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGb3JjZSBzZXQgcmVzdWx0LnNvdXJjZSB0byB0YXJnZXQgY29tcG9uZW50LlxuICAgIHJlc3VsdC5zZXRTb3VyY2UodGhpcy5nZXRUYXJnZXRDb21wb25lbnQoKSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gT3ZlcnJpZGVcbiAgcHVibGljIGdldEkxOE5LZXkoKTogc3RyaW5nIHtcbiAgICAvLyBUbyByZXR1cm4gdmFsaWRhdG9yJ3MgbmFtZSBpbnN0ZWFkIG9mIGl0cyBjbGFzcyBuYW1lLlxuICAgIGlmICh0aGlzLm5hbWUgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMubmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hbWU7XG4gICAgfVxuXG4gICAgLy8gRWxzZSwgcmV0dXJuIGFzIHN1cGVyLlxuICAgIHJldHVybiBzdXBlci5nZXRJMThOS2V5KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZG9WYWxpZGF0ZSh2YWx1ZTogVCk6IFZhbGlkYXRpb25SZXN1bHQ7XG59XG4iXX0=