@nibo-ai/ngx-powerbi
Version:
TypeScript library for embedding Power BI assets (reports/dashboards/tiles) in your application. This TypeScript library is built on top of the official powerbi-client library provided by Microsoft.
147 lines • 14 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/ngx-powerbi.service.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Injectable, Optional } from '@angular/core';
import { factories, service as pbiService } from 'powerbi-client';
import * as i0 from "@angular/core";
/**
* @return {?}
*/
export function powerBiServiceFactory() {
return new pbiService.Service(factories.hpmFactory, factories.wpmpFactory, factories.routerFactory);
}
export class NgxPowerBiService {
/**
* @param {?=} service
*/
constructor(service) {
this.service = service;
if (!service) {
this.powerBiCoreService = new pbiService.Service(factories.hpmFactory, factories.wpmpFactory, factories.routerFactory);
}
else {
this.powerBiCoreService = service;
}
}
/**
* Creates new report
* @param {?} element
* @param {?} config
* @return {?} Embed Embedded object
*/
createReport(element, config) {
return this.powerBiCoreService.createReport(element, config);
}
/**
* Given a configuration based on an HTML element,
* if the component has already been created and attached to the element, reuses the component instance and existing iframe,
* otherwise creates a new component instance.
*
* @param {?} element
* @param {?} config
* @return {?} Embed Embedded object
*/
embed(element, config) {
return this.powerBiCoreService.embed(element, config);
}
/**
* Given a configuration based on an HTML element,
* if the component has already been created and attached to the element, reuses the component instance and existing iframe,
* otherwise creates a new component instance.
* This is used for the phased embedding API, once element is loaded successfully, one can call 'render' on it.
*
* @param {?} element
* @param {?} config
* @return {?} Embed Embedded object
*/
load(element, config) {
return this.powerBiCoreService.load(element, config);
}
/**
* Adds an event handler for DOMContentLoaded, which searches the DOM for elements that have the 'powerbi-embed-url' attribute,
* and automatically attempts to embed a Power BI component based on information from other powerbi-* attributes.
*
* Note: Only runs if `config.autoEmbedOnContentLoaded` is true when the service is created.
* This handler is typically useful only for applications that are rendered on the server so that all
* required data is available when the handler is called.
* @return {?}
*/
enableAutoEmbed() {
return this.powerBiCoreService.enableAutoEmbed();
}
/**
* Returns an instance of the component associated with the element.
*
* @param {?} element
* @return {?} (Report | Tile) Embedded report/tile object
*/
get(element) {
return this.powerBiCoreService.get(element);
}
/**
* Finds an embed instance by the name or unique ID that is provided.
*
* @param {?} uniqueId
* @return {?} (Report | Tile) Embedded report/tile object
*/
findById(uniqueId) {
return this.powerBiCoreService.find(uniqueId);
}
/**
* Given an HTML element that has a component embedded within it,
* removes the component from the list of embedded components,
* removes the association between the element and the component, and removes the iframe.
*
* @param {?} element
* @return {?} void
*/
reset(element) {
return this.powerBiCoreService.reset(element);
}
/**
* handles tile events
*
* @param {?} event
* @return {?}
*/
handleTileEvents(event) {
return this.powerBiCoreService.handleTileEvents(event);
}
/**
* API for warm starting Power BI embedded endpoints.
* Use this API to preload Power BI Embedded in the background.
*
* @param {?} config
* @param {?} element
* @return {?}
*/
preload(config, element) {
return this.powerBiCoreService.preload(config, element);
}
}
NgxPowerBiService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root',
useFactory: powerBiServiceFactory
},] }
];
/** @nocollapse */
NgxPowerBiService.ctorParameters = () => [
{ type: pbiService.Service, decorators: [{ type: Optional }] }
];
/** @nocollapse */ NgxPowerBiService.ɵprov = i0.ɵɵdefineInjectable({ factory: powerBiServiceFactory, token: NgxPowerBiService, providedIn: "root" });
if (false) {
/**
* @type {?}
* @private
*/
NgxPowerBiService.prototype.powerBiCoreService;
/**
* @type {?}
* @private
*/
NgxPowerBiService.prototype.service;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXBvd2VyYmkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuaWJvLWFpL25neC1wb3dlcmJpLyIsInNvdXJjZXMiOlsibGliL25neC1wb3dlcmJpLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBRUwsU0FBUyxFQUdULE9BQU8sSUFBSSxVQUFVLEVBRXRCLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBRXhCLE1BQU0sVUFBVSxxQkFBcUI7SUFDbkMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQzNCLFNBQVMsQ0FBQyxVQUFVLEVBQ3BCLFNBQVMsQ0FBQyxXQUFXLEVBQ3JCLFNBQVMsQ0FBQyxhQUFhLENBQ3hCLENBQUM7QUFDSixDQUFDO0FBTUQsTUFBTSxPQUFPLGlCQUFpQjs7OztJQUc1QixZQUFnQyxPQUE0QjtRQUE1QixZQUFPLEdBQVAsT0FBTyxDQUFxQjtRQUMxRCxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FDOUMsU0FBUyxDQUFDLFVBQVUsRUFDcEIsU0FBUyxDQUFDLFdBQVcsRUFDckIsU0FBUyxDQUFDLGFBQWEsQ0FDeEIsQ0FBQztTQUNIO2FBQU07WUFDTCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDO1NBQ25DO0lBQ0gsQ0FBQzs7Ozs7OztJQVFELFlBQVksQ0FBQyxPQUFvQixFQUFFLE1BQTJCO1FBQzVELE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDL0QsQ0FBQzs7Ozs7Ozs7OztJQVdELEtBQUssQ0FBQyxPQUFvQixFQUFFLE1BQTJCO1FBQ3JELE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEQsQ0FBQzs7Ozs7Ozs7Ozs7SUFZRCxJQUFJLENBQUMsT0FBb0IsRUFBRSxNQUEyQjtRQUNwRCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7Ozs7Ozs7Ozs7SUFVRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDbkQsQ0FBQzs7Ozs7OztJQVFELEdBQUcsQ0FBQyxPQUFvQjtRQUN0QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUMsQ0FBQzs7Ozs7OztJQVFELFFBQVEsQ0FBQyxRQUFnQjtRQUN2QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEQsQ0FBQzs7Ozs7Ozs7O0lBVUQsS0FBSyxDQUFDLE9BQW9CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoRCxDQUFDOzs7Ozs7O0lBT0QsZ0JBQWdCLENBQUMsS0FBNkI7UUFDNUMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekQsQ0FBQzs7Ozs7Ozs7O0lBU0QsT0FBTyxDQUNMLE1BQTJCLEVBQzNCLE9BQW9CO1FBRXBCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDMUQsQ0FBQzs7O1lBekhGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTtnQkFDbEIsVUFBVSxFQUFFLHFCQUFxQjthQUNsQzs7OztZQWZZLFVBQVUsQ0FtQmdDLE9BQU8sdUJBQS9DLFFBQVE7Ozs7Ozs7O0lBRnJCLCtDQUErQzs7Ozs7SUFFbkMsb0NBQWdEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBFbWJlZCxcclxuICBmYWN0b3JpZXMsXHJcbiAgSUVtYmVkQ29uZmlndXJhdGlvbixcclxuICBSZXBvcnQsXHJcbiAgc2VydmljZSBhcyBwYmlTZXJ2aWNlLFxyXG4gIFRpbGVcclxufSBmcm9tICdwb3dlcmJpLWNsaWVudCc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcG93ZXJCaVNlcnZpY2VGYWN0b3J5KCkge1xyXG4gIHJldHVybiBuZXcgcGJpU2VydmljZS5TZXJ2aWNlKFxyXG4gICAgZmFjdG9yaWVzLmhwbUZhY3RvcnksXHJcbiAgICBmYWN0b3JpZXMud3BtcEZhY3RvcnksXHJcbiAgICBmYWN0b3JpZXMucm91dGVyRmFjdG9yeVxyXG4gICk7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbiAgdXNlRmFjdG9yeTogcG93ZXJCaVNlcnZpY2VGYWN0b3J5XHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hQb3dlckJpU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBwb3dlckJpQ29yZVNlcnZpY2U6IHBiaVNlcnZpY2UuU2VydmljZTtcclxuXHJcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJpdmF0ZSBzZXJ2aWNlPzogcGJpU2VydmljZS5TZXJ2aWNlKSB7XHJcbiAgICBpZiAoIXNlcnZpY2UpIHtcclxuICAgICAgdGhpcy5wb3dlckJpQ29yZVNlcnZpY2UgPSBuZXcgcGJpU2VydmljZS5TZXJ2aWNlKFxyXG4gICAgICAgIGZhY3Rvcmllcy5ocG1GYWN0b3J5LFxyXG4gICAgICAgIGZhY3Rvcmllcy53cG1wRmFjdG9yeSxcclxuICAgICAgICBmYWN0b3JpZXMucm91dGVyRmFjdG9yeVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wb3dlckJpQ29yZVNlcnZpY2UgPSBzZXJ2aWNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBuZXcgcmVwb3J0XHJcbiAgICogQHBhcmFtIEhUTUxFbGVtZW50IFBhcmVudCBIVE1MIGVsZW1lbnRcclxuICAgKiBAcGFyYW0gSUVtYmVkQ29uZmlndXJhdGlvbiBFbWJlZCBjb25maWd1cmF0aW9uXHJcbiAgICogQHJldHVybnMgRW1iZWQgRW1iZWRkZWQgb2JqZWN0XHJcbiAgICovXHJcbiAgY3JlYXRlUmVwb3J0KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjb25maWc6IElFbWJlZENvbmZpZ3VyYXRpb24pOiBFbWJlZCB7XHJcbiAgICByZXR1cm4gdGhpcy5wb3dlckJpQ29yZVNlcnZpY2UuY3JlYXRlUmVwb3J0KGVsZW1lbnQsIGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHaXZlbiBhIGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gYW4gSFRNTCBlbGVtZW50LFxyXG4gICAqIGlmIHRoZSBjb21wb25lbnQgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIGFuZCBhdHRhY2hlZCB0byB0aGUgZWxlbWVudCwgcmV1c2VzIHRoZSBjb21wb25lbnQgaW5zdGFuY2UgYW5kIGV4aXN0aW5nIGlmcmFtZSxcclxuICAgKiBvdGhlcndpc2UgY3JlYXRlcyBhIG5ldyBjb21wb25lbnQgaW5zdGFuY2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gSFRNTEVsZW1lbnQgUGFyZW50IEhUTUwgZWxlbWVudFxyXG4gICAqIEBwYXJhbSBJRW1iZWRDb25maWd1cmF0aW9uIEVtYmVkIGNvbmZpZ3VyYXRpb25cclxuICAgKiBAcmV0dXJucyBFbWJlZCBFbWJlZGRlZCBvYmplY3RcclxuICAgKi9cclxuICBlbWJlZChlbGVtZW50OiBIVE1MRWxlbWVudCwgY29uZmlnOiBJRW1iZWRDb25maWd1cmF0aW9uKTogRW1iZWQge1xyXG4gICAgcmV0dXJuIHRoaXMucG93ZXJCaUNvcmVTZXJ2aWNlLmVtYmVkKGVsZW1lbnQsIGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHaXZlbiBhIGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gYW4gSFRNTCBlbGVtZW50LFxyXG4gICAqIGlmIHRoZSBjb21wb25lbnQgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIGFuZCBhdHRhY2hlZCB0byB0aGUgZWxlbWVudCwgcmV1c2VzIHRoZSBjb21wb25lbnQgaW5zdGFuY2UgYW5kIGV4aXN0aW5nIGlmcmFtZSxcclxuICAgKiBvdGhlcndpc2UgY3JlYXRlcyBhIG5ldyBjb21wb25lbnQgaW5zdGFuY2UuXHJcbiAgICogVGhpcyBpcyB1c2VkIGZvciB0aGUgcGhhc2VkIGVtYmVkZGluZyBBUEksIG9uY2UgZWxlbWVudCBpcyBsb2FkZWQgc3VjY2Vzc2Z1bGx5LCBvbmUgY2FuIGNhbGwgJ3JlbmRlcicgb24gaXQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gSFRNTEVsZW1lbnR9IFBhcmVudCBIVE1MIGVsZW1lbnRcclxuICAgKiBAcGFyYW0gSUVtYmVkQ29uZmlndXJhdGlvbiBFbWJlZCBjb25maWd1cmF0aW9uXHJcbiAgICogQHJldHVybnMgRW1iZWQgRW1iZWRkZWQgb2JqZWN0XHJcbiAgICovXHJcbiAgbG9hZChlbGVtZW50OiBIVE1MRWxlbWVudCwgY29uZmlnOiBJRW1iZWRDb25maWd1cmF0aW9uKTogRW1iZWQge1xyXG4gICAgcmV0dXJuIHRoaXMucG93ZXJCaUNvcmVTZXJ2aWNlLmxvYWQoZWxlbWVudCwgY29uZmlnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYW4gZXZlbnQgaGFuZGxlciBmb3IgRE9NQ29udGVudExvYWRlZCwgd2hpY2ggc2VhcmNoZXMgdGhlIERPTSBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIHRoZSAncG93ZXJiaS1lbWJlZC11cmwnIGF0dHJpYnV0ZSxcclxuICAgKiBhbmQgYXV0b21hdGljYWxseSBhdHRlbXB0cyB0byBlbWJlZCBhIFBvd2VyIEJJIGNvbXBvbmVudCBiYXNlZCBvbiBpbmZvcm1hdGlvbiBmcm9tIG90aGVyIHBvd2VyYmktKiBhdHRyaWJ1dGVzLlxyXG4gICAqXHJcbiAgICogTm90ZTogT25seSBydW5zIGlmIGBjb25maWcuYXV0b0VtYmVkT25Db250ZW50TG9hZGVkYCBpcyB0cnVlIHdoZW4gdGhlIHNlcnZpY2UgaXMgY3JlYXRlZC5cclxuICAgKiBUaGlzIGhhbmRsZXIgaXMgdHlwaWNhbGx5IHVzZWZ1bCBvbmx5IGZvciBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgcmVuZGVyZWQgb24gdGhlIHNlcnZlciBzbyB0aGF0IGFsbFxyXG4gICAqIHJlcXVpcmVkIGRhdGEgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIGhhbmRsZXIgaXMgY2FsbGVkLlxyXG4gICAqL1xyXG4gIGVuYWJsZUF1dG9FbWJlZCgpOiB2b2lkIHtcclxuICAgIHJldHVybiB0aGlzLnBvd2VyQmlDb3JlU2VydmljZS5lbmFibGVBdXRvRW1iZWQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudCBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gSFRNTEVsZW1lbnQgUGFyZW50IEhUTUwgZWxlbWVudFxyXG4gICAqIEByZXR1cm5zIChSZXBvcnQgfCBUaWxlKSBFbWJlZGRlZCByZXBvcnQvdGlsZSBvYmplY3RcclxuICAgKi9cclxuICBnZXQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBFbWJlZCB7XHJcbiAgICByZXR1cm4gdGhpcy5wb3dlckJpQ29yZVNlcnZpY2UuZ2V0KGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmluZHMgYW4gZW1iZWQgaW5zdGFuY2UgYnkgdGhlIG5hbWUgb3IgdW5pcXVlIElEIHRoYXQgaXMgcHJvdmlkZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gc3RyaW5nfSB1bmlxdWVJZCBvciBuYW1lIG9mIHRoZSByZXBvcnQvdGlsZVxyXG4gICAqIEByZXR1cm5zIChSZXBvcnQgfCBUaWxlKSBFbWJlZGRlZCByZXBvcnQvdGlsZSBvYmplY3RcclxuICAgKi9cclxuICBmaW5kQnlJZCh1bmlxdWVJZDogc3RyaW5nKTogUmVwb3J0IHwgVGlsZSB7XHJcbiAgICByZXR1cm4gdGhpcy5wb3dlckJpQ29yZVNlcnZpY2UuZmluZCh1bmlxdWVJZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHaXZlbiBhbiBIVE1MIGVsZW1lbnQgdGhhdCBoYXMgYSBjb21wb25lbnQgZW1iZWRkZWQgd2l0aGluIGl0LFxyXG4gICAqIHJlbW92ZXMgdGhlIGNvbXBvbmVudCBmcm9tIHRoZSBsaXN0IG9mIGVtYmVkZGVkIGNvbXBvbmVudHMsXHJcbiAgICogcmVtb3ZlcyB0aGUgYXNzb2NpYXRpb24gYmV0d2VlbiB0aGUgZWxlbWVudCBhbmQgdGhlIGNvbXBvbmVudCwgYW5kIHJlbW92ZXMgdGhlIGlmcmFtZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBIVE1MRWxlbWVudCBQYXJlbnQgSFRNTCBlbGVtZW50XHJcbiAgICogQHJldHVybnMgdm9pZFxyXG4gICAqL1xyXG4gIHJlc2V0KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XHJcbiAgICByZXR1cm4gdGhpcy5wb3dlckJpQ29yZVNlcnZpY2UucmVzZXQoZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBoYW5kbGVzIHRpbGUgZXZlbnRzXHJcbiAgICpcclxuICAgKiBAcGFyYW0gSUV2ZW50PGFueT4gZXZlbnRcclxuICAgKi9cclxuICBoYW5kbGVUaWxlRXZlbnRzKGV2ZW50OiBwYmlTZXJ2aWNlLklFdmVudDxhbnk+KTogdm9pZCB7XHJcbiAgICByZXR1cm4gdGhpcy5wb3dlckJpQ29yZVNlcnZpY2UuaGFuZGxlVGlsZUV2ZW50cyhldmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBUEkgZm9yIHdhcm0gc3RhcnRpbmcgUG93ZXIgQkkgZW1iZWRkZWQgZW5kcG9pbnRzLlxyXG4gICAqIFVzZSB0aGlzIEFQSSB0byBwcmVsb2FkIFBvd2VyIEJJIEVtYmVkZGVkIGluIHRoZSBiYWNrZ3JvdW5kLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGVtYmVkLklFbWJlZENvbmZpZ3VyYXRpb24gRW1iZWQgY29uZmlndXJhdGlvblxyXG4gICAqIEBwYXJhbSBIVE1MRWxlbWVudCBbZWxlbWVudD11bmRlZmluZWRdXHJcbiAgICovXHJcbiAgcHJlbG9hZChcclxuICAgIGNvbmZpZzogSUVtYmVkQ29uZmlndXJhdGlvbixcclxuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50XHJcbiAgKTogSFRNTElGcmFtZUVsZW1lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMucG93ZXJCaUNvcmVTZXJ2aWNlLnByZWxvYWQoY29uZmlnLCBlbGVtZW50KTtcclxuICB9XHJcbn1cclxuIl19