UNPKG

ngx-modialog-10

Version:
176 lines 14.8 kB
/** * @fileoverview added by tsickle * Generated from: lib/models/overlay-context.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { __extends } from "tslib"; import { FluentAssign } from './../framework/fluent-assign'; import { extend, arrayUnion } from './../framework/utils'; var ɵ0 = /** * @param {?} keyCode * @return {?} */ function supportsKey(keyCode) { return ((/** @type {?} */ (this.keyboard))).indexOf(keyCode) > -1; }; /** @type {?} */ export var DEFAULT_VALUES = { inElement: false, isBlocking: true, keyboard: [27], supportsKey: (ɵ0) }; /** @type {?} */ var DEFAULT_SETTERS = [ 'inElement', 'isBlocking', 'keyboard' ]; var OverlayContext = /** @class */ (function () { function OverlayContext() { } /** * @return {?} */ OverlayContext.prototype.normalize = /** * @return {?} */ function () { if (this.isBlocking !== false) { this.isBlocking = true; } if (this.keyboard === null) { this.keyboard = []; } else if (typeof this.keyboard === 'number') { this.keyboard = [(/** @type {?} */ (this.keyboard))]; } else if (!Array.isArray((/** @type {?} */ (this.keyboard)))) { this.keyboard = DEFAULT_VALUES.keyboard; } }; return OverlayContext; }()); export { OverlayContext }; if (false) { /** * Describes if the modal is rendered within the container element. * The container element is the ViewContainerRef supplied. * Defaults to false. * @type {?} */ OverlayContext.prototype.inElement; /** * Describes if the modal is blocking modal. * A Blocking modal is not closable by clicking outside of the modal window. * Defaults to false. * @type {?} */ OverlayContext.prototype.isBlocking; /** * Keyboard value/s that close the modal. * Accepts either a single numeric value or an array of numeric values. * A modal closed by a keyboard stroke will result in a 'reject' notification from the promise. * Defaults to 27, set `null` implicitly to disable. * @type {?} */ OverlayContext.prototype.keyboard; } /** * A core context builder for a modal window instance, used to define the context upon * a modal choose it's behaviour. * @template T */ var /** * A core context builder for a modal window instance, used to define the context upon * a modal choose it's behaviour. * @template T */ OverlayContextBuilder = /** @class */ (function (_super) { __extends(OverlayContextBuilder, _super); function OverlayContextBuilder(defaultValues, initialSetters, baseType) { return _super.call(this, extend(DEFAULT_VALUES, defaultValues || {}), arrayUnion(DEFAULT_SETTERS, initialSetters || []), baseType || (/** @type {?} */ (OverlayContext)) // https://github.com/Microsoft/TypeScript/issues/7234 ) || this; } /** * Returns an new OverlayConfig with a context property representing the data in this builder. * @param base A base configuration that the result will extend */ /** * Returns an new OverlayConfig with a context property representing the data in this builder. * @param {?=} base A base configuration that the result will extend * @return {?} */ OverlayContextBuilder.prototype.toOverlayConfig = /** * Returns an new OverlayConfig with a context property representing the data in this builder. * @param {?=} base A base configuration that the result will extend * @return {?} */ function (base) { return extend(base || {}, { context: this.toJSON() }); }; return OverlayContextBuilder; }(FluentAssign)); /** * A core context builder for a modal window instance, used to define the context upon * a modal choose it's behaviour. * @template T */ export { OverlayContextBuilder }; if (false) { /** * Describes if the modal is rendered within the container element. * The container element is the ViewContainerRef supplied. * Defaults to false. * @type {?} */ OverlayContextBuilder.prototype.inElement; /** * Describes if the modal is blocking modal. * A Blocking modal is not closable by clicking outside of the modal window. * Defaults to false. * @type {?} */ OverlayContextBuilder.prototype.isBlocking; /** * Keyboard value/s that close the modal. * Accepts either a single numeric value or an array of numeric values. * A modal closed by a keyboard stroke will result in a 'reject' notification from the promise. * Defaults to 27, set `null` implicitly to disable. * @type {?} */ OverlayContextBuilder.prototype.keyboard; } /** * @record * @template T */ export function ModalControllingContextBuilder() { } if (false) { /** * @param {?=} viewContainer * @return {?} */ ModalControllingContextBuilder.prototype.open = function (viewContainer) { }; } /** * A helper to create an `OverlayConfig` on the fly. * Since `OverlayConfig` requires context it means a builder is needed, this process had some boilerplate. * When a quick, on the fly overlay config is needed use this helper to avoid that boilerplate. * * A builder is used as an API to allow setting the context and providing some operations around the modal. * When a developers knows the context before hand we can skip this step, this is what this factory is for. * * @template T * @param {?} context The context for the modal * @param {?=} baseContextType Optional. The type/class of the context. This is the class used to init a new instance of the context * @param {?=} baseConfig A base configuration that the result will extend * @return {?} */ export function overlayConfigFactory(context, baseContextType, baseConfig) { return new OverlayContextBuilder((/** @type {?} */ (context)), undefined, baseContextType).toOverlayConfig(baseConfig); } export { ɵ0 }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS1jb250ZXh0LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LW1vZGlhbG9nLTEwLyIsInNvdXJjZXMiOlsibGliL21vZGVscy9vdmVybGF5LWNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBc0IsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7OztBQVEzQyxTQUFTLFdBQVcsQ0FBQyxPQUFlO0lBQy9DLE9BQU8sQ0FBQyxtQkFBZSxJQUFJLENBQUMsUUFBUSxFQUFBLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUQsQ0FBQzs7QUFOSCxNQUFNLEtBQU8sY0FBYyxHQUFHO0lBQzVCLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNkLFdBQVcsTUFFVjtDQUNGOztJQUVLLGVBQWUsR0FBRztJQUN0QixXQUFXO0lBQ1gsWUFBWTtJQUNaLFVBQVU7Q0FDWDtBQUVEO0lBQUE7SUFvQ0EsQ0FBQzs7OztJQWJDLGtDQUFTOzs7SUFBVDtRQUNFLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxLQUFLLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7U0FDeEI7UUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO1lBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1NBQ3BCO2FBQU0sSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFO1lBQzVDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxtQkFBUSxJQUFJLENBQUMsUUFBUSxFQUFBLENBQUMsQ0FBQztTQUN6QzthQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLG1CQUFlLElBQUksQ0FBQyxRQUFRLEVBQUEsQ0FBQyxFQUFFO1lBQ3ZELElBQUksQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQztTQUN6QztJQUNILENBQUM7SUFDSCxxQkFBQztBQUFELENBQUMsQUFwQ0QsSUFvQ0M7Ozs7Ozs7OztJQTlCQyxtQ0FBbUI7Ozs7Ozs7SUFPbkIsb0NBQW9COzs7Ozs7OztJQVFwQixrQ0FBaUM7Ozs7Ozs7QUFxQm5DOzs7Ozs7SUFBcUUseUNBQWU7SUF3QmxGLCtCQUFZLGFBQXVCLEVBQ3ZCLGNBQXlCLEVBQ3pCLFFBQXNCO2VBQ2hDLGtCQUNFLE1BQU0sQ0FBTSxjQUFjLEVBQUUsYUFBYSxJQUFJLEVBQUUsQ0FBQyxFQUNoRCxVQUFVLENBQVMsZUFBZSxFQUFFLGNBQWMsSUFBSSxFQUFFLENBQUMsRUFDekQsUUFBUSxJQUFJLG1CQUFLLGNBQWMsRUFBQSxDQUFDLHNEQUFzRDtTQUN2RjtJQUNILENBQUM7SUFFRDs7O09BR0c7Ozs7OztJQUNILCtDQUFlOzs7OztJQUFmLFVBQWdCLElBQW9CO1FBQ2xDLE9BQU8sTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUU7WUFDeEIsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUU7U0FDdkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNILDRCQUFDO0FBQUQsQ0FBQyxBQTNDRCxDQUFxRSxZQUFZLEdBMkNoRjs7Ozs7Ozs7Ozs7Ozs7SUFyQ0MsMENBQTZDOzs7Ozs7O0lBTzdDLDJDQUE4Qzs7Ozs7Ozs7SUFROUMseUNBQTJEOzs7Ozs7QUF3QjdELG9EQUVDOzs7Ozs7SUFEQyw2RUFBOEM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlaEQsTUFBTSxVQUFVLG9CQUFvQixDQUFJLE9BQVUsRUFBRSxlQUFxQixFQUFFLFVBQTBCO0lBQ25HLE9BQU8sSUFBSSxxQkFBcUIsQ0FBcUIsbUJBQUssT0FBTyxFQUFBLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM3SCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmx1ZW50QXNzaWduLCBGbHVlbnRBc3NpZ25NZXRob2QgfSBmcm9tICcuLy4uL2ZyYW1ld29yay9mbHVlbnQtYXNzaWduJztcbmltcG9ydCB7IGV4dGVuZCwgYXJyYXlVbmlvbiB9IGZyb20gJy4vLi4vZnJhbWV3b3JrL3V0aWxzJztcbmltcG9ydCB7IERpYWxvZ1JlZiB9IGZyb20gJy4vZGlhbG9nLXJlZic7XG5pbXBvcnQgeyBXaWRlVkNSZWYsIE92ZXJsYXlDb25maWcgfSBmcm9tICcuL3Rva2Vucyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1ZBTFVFUyA9IHtcbiAgaW5FbGVtZW50OiBmYWxzZSxcbiAgaXNCbG9ja2luZzogdHJ1ZSxcbiAga2V5Ym9hcmQ6IFsyN10sXG4gIHN1cHBvcnRzS2V5OiBmdW5jdGlvbiBzdXBwb3J0c0tleShrZXlDb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKDxBcnJheTxudW1iZXI+PnRoaXMua2V5Ym9hcmQpLmluZGV4T2Yoa2V5Q29kZSkgPiAtMTtcbiAgfVxufTtcblxuY29uc3QgREVGQVVMVF9TRVRURVJTID0gW1xuICAnaW5FbGVtZW50JyxcbiAgJ2lzQmxvY2tpbmcnLFxuICAna2V5Ym9hcmQnXG5dO1xuXG5leHBvcnQgY2xhc3MgT3ZlcmxheUNvbnRleHQge1xuICAvKipcbiAgICogRGVzY3JpYmVzIGlmIHRoZSBtb2RhbCBpcyByZW5kZXJlZCB3aXRoaW4gdGhlIGNvbnRhaW5lciBlbGVtZW50LlxuICAgKiBUaGUgY29udGFpbmVyIGVsZW1lbnQgaXMgdGhlIFZpZXdDb250YWluZXJSZWYgc3VwcGxpZWQuXG4gICAqIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKi9cbiAgaW5FbGVtZW50OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZXNjcmliZXMgaWYgdGhlIG1vZGFsIGlzIGJsb2NraW5nIG1vZGFsLlxuICAgKiBBIEJsb2NraW5nIG1vZGFsIGlzIG5vdCBjbG9zYWJsZSBieSBjbGlja2luZyBvdXRzaWRlIG9mIHRoZSBtb2RhbCB3aW5kb3cuXG4gICAqIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKi9cbiAgaXNCbG9ja2luZzogYm9vbGVhbjtcblxuICAvKipcbiAgICogS2V5Ym9hcmQgdmFsdWUvcyB0aGF0IGNsb3NlIHRoZSBtb2RhbC5cbiAgICogQWNjZXB0cyBlaXRoZXIgYSBzaW5nbGUgbnVtZXJpYyB2YWx1ZSBvciBhbiBhcnJheSBvZiBudW1lcmljIHZhbHVlcy5cbiAgICogQSBtb2RhbCBjbG9zZWQgYnkgYSBrZXlib2FyZCBzdHJva2Ugd2lsbCByZXN1bHQgaW4gYSAncmVqZWN0JyBub3RpZmljYXRpb24gZnJvbSB0aGUgcHJvbWlzZS5cbiAgICogRGVmYXVsdHMgdG8gMjcsIHNldCBgbnVsbGAgaW1wbGljaXRseSB0byBkaXNhYmxlLlxuICAgKi9cbiAga2V5Ym9hcmQ6IEFycmF5PG51bWJlcj4gfCBudW1iZXI7XG5cbiAgbm9ybWFsaXplKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzQmxvY2tpbmcgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmlzQmxvY2tpbmcgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmtleWJvYXJkID09PSBudWxsKSB7XG4gICAgICB0aGlzLmtleWJvYXJkID0gW107XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5rZXlib2FyZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMua2V5Ym9hcmQgPSBbPG51bWJlcj50aGlzLmtleWJvYXJkXTtcbiAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KDxBcnJheTxudW1iZXI+PnRoaXMua2V5Ym9hcmQpKSB7XG4gICAgICB0aGlzLmtleWJvYXJkID0gREVGQVVMVF9WQUxVRVMua2V5Ym9hcmQ7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQSBjb3JlIGNvbnRleHQgYnVpbGRlciBmb3IgYSBtb2RhbCB3aW5kb3cgaW5zdGFuY2UsIHVzZWQgdG8gZGVmaW5lIHRoZSBjb250ZXh0IHVwb25cbiAqIGEgbW9kYWwgY2hvb3NlIGl0J3MgYmVoYXZpb3VyLlxuICovXG5leHBvcnQgY2xhc3MgT3ZlcmxheUNvbnRleHRCdWlsZGVyPFQgZXh0ZW5kcyBPdmVybGF5Q29udGV4dD4gZXh0ZW5kcyBGbHVlbnRBc3NpZ248VD4ge1xuICAvKipcbiAgICogRGVzY3JpYmVzIGlmIHRoZSBtb2RhbCBpcyByZW5kZXJlZCB3aXRoaW4gdGhlIGNvbnRhaW5lciBlbGVtZW50LlxuICAgKiBUaGUgY29udGFpbmVyIGVsZW1lbnQgaXMgdGhlIFZpZXdDb250YWluZXJSZWYgc3VwcGxpZWQuXG4gICAqIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKi9cbiAgaW5FbGVtZW50OiBGbHVlbnRBc3NpZ25NZXRob2Q8Ym9vbGVhbiwgdGhpcz47XG5cbiAgLyoqXG4gICAqIERlc2NyaWJlcyBpZiB0aGUgbW9kYWwgaXMgYmxvY2tpbmcgbW9kYWwuXG4gICAqIEEgQmxvY2tpbmcgbW9kYWwgaXMgbm90IGNsb3NhYmxlIGJ5IGNsaWNraW5nIG91dHNpZGUgb2YgdGhlIG1vZGFsIHdpbmRvdy5cbiAgICogRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAqL1xuICBpc0Jsb2NraW5nOiBGbHVlbnRBc3NpZ25NZXRob2Q8Ym9vbGVhbiwgdGhpcz47XG5cbiAgLyoqXG4gICAqIEtleWJvYXJkIHZhbHVlL3MgdGhhdCBjbG9zZSB0aGUgbW9kYWwuXG4gICAqIEFjY2VwdHMgZWl0aGVyIGEgc2luZ2xlIG51bWVyaWMgdmFsdWUgb3IgYW4gYXJyYXkgb2YgbnVtZXJpYyB2YWx1ZXMuXG4gICAqIEEgbW9kYWwgY2xvc2VkIGJ5IGEga2V5Ym9hcmQgc3Ryb2tlIHdpbGwgcmVzdWx0IGluIGEgJ3JlamVjdCcgbm90aWZpY2F0aW9uIGZyb20gdGhlIHByb21pc2UuXG4gICAqIERlZmF1bHRzIHRvIDI3LCBzZXQgYG51bGxgIGltcGxpY2l0bHkgdG8gZGlzYWJsZS5cbiAgICovXG4gIGtleWJvYXJkOiBGbHVlbnRBc3NpZ25NZXRob2Q8QXJyYXk8bnVtYmVyPiB8IG51bWJlciwgdGhpcz47XG5cblxuICBjb25zdHJ1Y3RvcihkZWZhdWx0VmFsdWVzPzogVCB8IFRbXSxcbiAgICAgICAgICAgICAgaW5pdGlhbFNldHRlcnM/OiBzdHJpbmdbXSxcbiAgICAgICAgICAgICAgYmFzZVR5cGU/OiBuZXcgKCkgPT4gVCkge1xuICAgIHN1cGVyKFxuICAgICAgZXh0ZW5kPGFueT4oREVGQVVMVF9WQUxVRVMsIGRlZmF1bHRWYWx1ZXMgfHwge30pLFxuICAgICAgYXJyYXlVbmlvbjxzdHJpbmc+KERFRkFVTFRfU0VUVEVSUywgaW5pdGlhbFNldHRlcnMgfHwgW10pLFxuICAgICAgYmFzZVR5cGUgfHwgPGFueT5PdmVybGF5Q29udGV4dCAvLyBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzcyMzRcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gbmV3IE92ZXJsYXlDb25maWcgd2l0aCBhIGNvbnRleHQgcHJvcGVydHkgcmVwcmVzZW50aW5nIHRoZSBkYXRhIGluIHRoaXMgYnVpbGRlci5cbiAgICogQHBhcmFtIGJhc2UgQSBiYXNlIGNvbmZpZ3VyYXRpb24gdGhhdCB0aGUgcmVzdWx0IHdpbGwgZXh0ZW5kXG4gICAqL1xuICB0b092ZXJsYXlDb25maWcoYmFzZT86IE92ZXJsYXlDb25maWcpOiBPdmVybGF5Q29uZmlnIHtcbiAgICByZXR1cm4gZXh0ZW5kKGJhc2UgfHwge30sIHtcbiAgICAgIGNvbnRleHQ6IHRoaXMudG9KU09OKClcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vZGFsQ29udHJvbGxpbmdDb250ZXh0QnVpbGRlcjxUPiB7XG4gIG9wZW4odmlld0NvbnRhaW5lcj86IFdpZGVWQ1JlZik6IERpYWxvZ1JlZjxUPjtcbn1cblxuLyoqXG4gKiBBIGhlbHBlciB0byBjcmVhdGUgYW4gYE92ZXJsYXlDb25maWdgIG9uIHRoZSBmbHkuXG4gKiBTaW5jZSBgT3ZlcmxheUNvbmZpZ2AgcmVxdWlyZXMgY29udGV4dCBpdCBtZWFucyBhIGJ1aWxkZXIgaXMgbmVlZGVkLCB0aGlzIHByb2Nlc3MgaGFkIHNvbWUgYm9pbGVycGxhdGUuXG4gKiBXaGVuIGEgcXVpY2ssIG9uIHRoZSBmbHkgb3ZlcmxheSBjb25maWcgaXMgbmVlZGVkIHVzZSB0aGlzIGhlbHBlciB0byBhdm9pZCB0aGF0IGJvaWxlcnBsYXRlLlxuICpcbiAqIEEgYnVpbGRlciBpcyB1c2VkIGFzIGFuIEFQSSB0byBhbGxvdyBzZXR0aW5nIHRoZSBjb250ZXh0IGFuZCBwcm92aWRpbmcgc29tZSBvcGVyYXRpb25zIGFyb3VuZCB0aGUgbW9kYWwuXG4gKiBXaGVuIGEgZGV2ZWxvcGVycyBrbm93cyB0aGUgY29udGV4dCBiZWZvcmUgaGFuZCB3ZSBjYW4gc2tpcCB0aGlzIHN0ZXAsIHRoaXMgaXMgd2hhdCB0aGlzIGZhY3RvcnkgaXMgZm9yLlxuICpcbiAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IGZvciB0aGUgbW9kYWxcbiAqIEBwYXJhbSBiYXNlQ29udGV4dFR5cGUgT3B0aW9uYWwuIFRoZSB0eXBlL2NsYXNzIG9mIHRoZSBjb250ZXh0LiBUaGlzIGlzIHRoZSBjbGFzcyB1c2VkIHRvIGluaXQgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNvbnRleHRcbiAqIEBwYXJhbSBiYXNlQ29uZmlnIEEgYmFzZSBjb25maWd1cmF0aW9uIHRoYXQgdGhlIHJlc3VsdCB3aWxsIGV4dGVuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gb3ZlcmxheUNvbmZpZ0ZhY3Rvcnk8VD4oY29udGV4dDogVCwgYmFzZUNvbnRleHRUeXBlPzogYW55LCBiYXNlQ29uZmlnPzogT3ZlcmxheUNvbmZpZyk6IE92ZXJsYXlDb25maWcge1xuICByZXR1cm4gbmV3IE92ZXJsYXlDb250ZXh0QnVpbGRlcjxUICYgT3ZlcmxheUNvbnRleHQ+KDxhbnk+Y29udGV4dCwgdW5kZWZpbmVkLCBiYXNlQ29udGV4dFR5cGUpLnRvT3ZlcmxheUNvbmZpZyhiYXNlQ29uZmlnKTtcbn1cbiJdfQ==