@dicdikshaorg/epub-player-v9
Version:
Contains Epub player library components powered by angular. These components are designed to be used in sunbird consumption platforms *(mobile app, web portal, offline desktop app)* to drive reusability, maintainability hence reducing the redundant develo
186 lines • 23.7 kB
JavaScript
import { __awaiter } from "tslib";
import { Injectable, EventEmitter } from '@angular/core';
import { EpubPlayerService } from '../../sunbird-epub-player.service';
import { UtilService } from '../utilService/util.service';
import { eventName, telemetryType } from '../../sunbird-epub.constant';
import { HttpClient } from '@angular/common/http';
import * as i0 from "@angular/core";
import * as i1 from "../utilService/util.service";
import * as i2 from "../../sunbird-epub-player.service";
import * as i3 from "@angular/common/http";
export class ViwerService {
constructor(utilService, epubPlayerService, http) {
this.utilService = utilService;
this.epubPlayerService = epubPlayerService;
this.http = http;
this.currentIndex = 0;
this.totalNumberOfPages = 0;
this.endPageSeen = false;
this.timeSpent = '0:0';
this.version = '1.0';
this.playerEvent = new EventEmitter();
this.isAvailableLocally = false;
this.isEndEventRaised = false;
}
initialize({ context, config, metadata }) {
this.epubPlayerStartTime = this.epubLastPageTime = new Date().getTime();
this.totalNumberOfPages = 0;
this.currentIndex = 0;
this.contentName = metadata.name;
this.identifier = metadata.identifier;
this.artifactUrl = metadata.artifactUrl;
this.isAvailableLocally = metadata.isAvailableLocally;
if (this.isAvailableLocally) {
const basePath = (metadata.streamingUrl) ? (metadata.streamingUrl) : (metadata.basePath || metadata.baseDir);
this.src = `${basePath}/${metadata.artifactUrl}`;
}
else {
this.src = metadata.streamingUrl || metadata.artifactUrl;
}
if (context.userData) {
const { userData: { firstName, lastName } } = context;
this.userName = firstName === lastName ? firstName : `${firstName} ${lastName}`;
}
this.metaData = {
pagesVisited: [],
totalPages: 0,
duration: [],
zoom: [],
rotation: []
};
this.showDownloadPopup = false;
this.endPageSeen = false;
}
raiseStartEvent(event) {
this.currentIndex = event.items[0].index;
const duration = new Date().getTime() - this.epubPlayerStartTime;
const startEvent = {
eid: 'START',
ver: this.version,
edata: {
type: 'START',
currentPage: this.currentIndex,
duration
},
metaData: this.metaData
};
this.playerEvent.emit(startEvent);
this.epubLastPageTime = this.epubPlayerStartTime = new Date().getTime();
this.epubPlayerService.start(duration);
}
raiseHeartBeatEvent(event, teleType) {
if (event.data) {
this.currentIndex = event.data.index;
}
const eventType = event.type ? event.type : event;
const heartBeatEvent = {
eid: 'HEARTBEAT',
ver: this.version,
edata: {
type: eventType,
currentPage: this.currentIndex
},
metaData: this.metaData
};
this.playerEvent.emit(heartBeatEvent);
if (telemetryType.IMPRESSION === teleType) {
this.epubPlayerService.impression(this.currentIndex);
}
if (telemetryType.INTERACT === teleType) {
this.epubPlayerService.interact(eventType.toLowerCase(), this.currentIndex);
}
}
raiseEndEvent(event) {
if (!this.isEndEventRaised) {
this.currentIndex = event.data.index;
const percentage = event.data.percentage || 0;
if (event.data.percentage) {
this.endPageSeen = true;
}
const duration = new Date().getTime() - this.epubPlayerStartTime;
this.metaData.duration = duration;
this.metaData.totalPages = this.totalNumberOfPages;
const endEvent = {
eid: 'END',
ver: this.version,
edata: {
type: 'END',
currentPage: event.data.index,
totalPages: this.totalNumberOfPages,
duration
},
metaData: this.metaData
};
this.playerEvent.emit(endEvent);
const visitedlength = this.currentIndex;
this.timeSpent = this.utilService.getTimeSpentText(this.epubPlayerStartTime);
this.epubPlayerService.end(duration, percentage, this.currentIndex, this.endPageSeen);
}
}
raiseExceptionLog(errorCode, pageIndex, errorType, traceId, stacktrace) {
const exceptionLogEvent = {
eid: 'ERROR',
edata: {
err: errorCode,
errtype: errorType,
requestid: traceId || '',
stacktrace
}
};
this.playerEvent.emit(exceptionLogEvent);
this.epubPlayerService.error(errorCode, errorType, pageIndex, stacktrace);
}
isValidEpubSrc(src) {
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
this.http.get(src, { responseType: 'blob' }).toPromise().then((res) => {
resolve(res);
}).catch((error) => {
reject(error);
});
}));
}
raiseHeartBeatEventNew(type, telemetryType1, pageId, nextContentId) {
const hearBeatEvent = {
eid: 'HEARTBEAT',
ver: this.version,
edata: {
type,
currentPage: this.currentIndex
},
metaData: this.metaData
};
if (type === eventName.nextContentPlay && nextContentId) {
hearBeatEvent.edata.nextContentId = nextContentId;
}
// if (this.isSectionsAvailable) {
// hearBeatEvent.edata.sectionId = this.questionSetId;
// }
this.playerEvent.emit(hearBeatEvent);
if (telemetryType.INTERACT === telemetryType1) {
this.epubPlayerService.interact(type.toLowerCase(), pageId);
}
else if (telemetryType.IMPRESSION === telemetryType1) {
this.epubPlayerService.impression(pageId);
}
}
}
/** @nocollapse */ ViwerService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ViwerService_Factory() { return new ViwerService(i0.ɵɵinject(i1.UtilService), i0.ɵɵinject(i2.EpubPlayerService), i0.ɵɵinject(i3.HttpClient)); }, token: ViwerService, providedIn: "root" });
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
ViwerService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
/**
* @type {function(): !Array<(null|{
* type: ?,
* decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>),
* })>}
* @nocollapse
*/
ViwerService.ctorParameters = () => [
{ type: UtilService },
{ type: EpubPlayerService },
{ type: HttpClient }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml3ZXItc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N1bmJpcmQtZXB1Yi1wbGF5ZXIvc3JjL2xpYi9zZXJ2aWNlcy92aWV3ZXJTZXJ2aWNlL3Zpd2VyLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7QUFLbEQsTUFBTSxPQUFPLFlBQVk7SUFvQnZCLFlBQ1UsV0FBd0IsRUFDeEIsaUJBQW9DLEVBQ3BDLElBQWdCO1FBRmhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQXJCbkIsaUJBQVksR0FBRyxDQUFDLENBQUM7UUFDakIsdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBR3ZCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDakIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNqQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFTdEMsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztJQUs1QixDQUFDO0lBRUwsVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQWdCO1FBQ3BELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENB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SUFBSSxhQUFhLENBQUMsUUFBUSxLQUFLLGNBQWMsRUFBRTtZQUM3QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUM3RDthQUFNLElBQUksYUFBYSxDQUFDLFVBQVUsS0FBSyxjQUFjLEVBQUU7WUFDdEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMzQztJQUVILENBQUM7Ozs7O1lBbkxGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7Ozs7Ozs7OztZQU5RLFdBQVc7WUFEWCxpQkFBaUI7WUFHakIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQbGF5ZXJDb25maWcgfSBmcm9tICcuLi8uLi9zdW5iaXJkLWVwdWItcGxheWVyLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEVwdWJQbGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc3VuYmlyZC1lcHViLXBsYXllci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXRpbFNlcnZpY2UgfSBmcm9tICcuLi91dGlsU2VydmljZS91dGlsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBldmVudE5hbWUsIHRlbGVtZXRyeVR5cGUgfSBmcm9tICcuLi8uLi9zdW5iaXJkLWVwdWIuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVml3ZXJTZXJ2aWNlIHtcclxuXHJcbiAgcHVibGljIGN1cnJlbnRJbmRleCA9IDA7XHJcbiAgcHVibGljIHRvdGFsTnVtYmVyT2ZQYWdlcyA9IDA7XHJcbiAgcHVibGljIGVwdWJQbGF5ZXJTdGFydFRpbWU6IG51bWJlcjtcclxuICBwdWJsaWMgZXB1Ykxhc3RQYWdlVGltZTogbnVtYmVyO1xyXG4gIHB1YmxpYyBlbmRQYWdlU2VlbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB0aW1lU3BlbnQgPSAnMDowJztcclxuICBwcml2YXRlIHZlcnNpb24gPSAnMS4wJztcclxuICBwdWJsaWMgcGxheWVyRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBwdWJsaWMgY29udGVudE5hbWU6IHN0cmluZztcclxuICBwdWJsaWMgbG9hZGluZ1Byb2dyZXNzOiBudW1iZXI7XHJcbiAgcHVibGljIHNob3dEb3dubG9hZFBvcHVwOiBib29sZWFuO1xyXG4gIHB1YmxpYyBzcmM6IHN0cmluZztcclxuICBwdWJsaWMgdXNlck5hbWU6IHN0cmluZztcclxuICBwdWJsaWMgbWV0YURhdGE6IGFueTtcclxuICBwdWJsaWMgaWRlbnRpZmllcjogYW55O1xyXG4gIHB1YmxpYyBhcnRpZmFjdFVybDogYW55O1xyXG4gIHB1YmxpYyBpc0F2YWlsYWJsZUxvY2FsbHkgPSBmYWxzZTtcclxuICBwdWJsaWMgaXNFbmRFdmVudFJhaXNlZCA9IGZhbHNlO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB1dGlsU2VydmljZTogVXRpbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVwdWJQbGF5ZXJTZXJ2aWNlOiBFcHViUGxheWVyU2VydmljZSxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudFxyXG4gICkgeyB9XHJcblxyXG4gIGluaXRpYWxpemUoeyBjb250ZXh0LCBjb25maWcsIG1ldGFkYXRhIH06IFBsYXllckNvbmZpZykge1xyXG4gICAgdGhpcy5lcHViUGxheWVyU3RhcnRUaW1lID0gdGhpcy5lcHViTGFzdFBhZ2VUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICB0aGlzLnRvdGFsTnVtYmVyT2ZQYWdlcyA9IDA7XHJcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XHJcbiAgICB0aGlzLmNvbnRlbnROYW1lID0gbWV0YWRhdGEubmFtZTtcclxuICAgIHRoaXMuaWRlbnRpZmllciA9IG1ldGFkYXRhLmlkZW50aWZpZXI7XHJcbiAgICB0aGlzLmFydGlmYWN0VXJsID0gbWV0YWRhdGEuYXJ0aWZhY3RVcmw7XHJcbiAgICB0aGlzLmlzQXZhaWxhYmxlTG9jYWxseSA9IG1ldGFkYXRhLmlzQXZhaWxhYmxlTG9jYWxseTtcclxuICAgIGlmICh0aGlzLmlzQXZhaWxhYmxlTG9jYWxseSkge1xyXG4gICAgICBjb25zdCBiYXNlUGF0aCA9IChtZXRhZGF0YS5zdHJlYW1pbmdVcmwpID8gKG1ldGFkYXRhLnN0cmVhbWluZ1VybCkgOiAobWV0YWRhdGEuYmFzZVBhdGggfHwgbWV0YWRhdGEuYmFzZURpcik7XHJcbiAgICAgIHRoaXMuc3JjID0gYCR7YmFzZVBhdGh9LyR7bWV0YWRhdGEuYXJ0aWZhY3RVcmx9YDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3JjID0gbWV0YWRhdGEuc3RyZWFtaW5nVXJsIHx8IG1ldGFkYXRhLmFydGlmYWN0VXJsO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbnRleHQudXNlckRhdGEpIHtcclxuICAgICAgY29uc3QgeyB1c2VyRGF0YTogeyBmaXJzdE5hbWUsIGxhc3ROYW1lIH0gfSA9IGNvbnRleHQ7XHJcbiAgICAgIHRoaXMudXNlck5hbWUgPSBmaXJzdE5hbWUgPT09IGxhc3ROYW1lID8gZmlyc3ROYW1lIDogYCR7Zmlyc3ROYW1lfSAke2xhc3ROYW1lfWA7XHJcbiAgICB9XHJcbiAgICB0aGlzLm1ldGFEYXRhID0ge1xyXG4gICAgICBwYWdlc1Zpc2l0ZWQ6IFtdLFxyXG4gICAgICB0b3RhbFBhZ2VzOiAwLFxyXG4gICAgICBkdXJhdGlvbjogW10sXHJcbiAgICAgIHpvb206IFtdLFxyXG4gICAgICByb3RhdGlvbjogW11cclxuICAgIH07XHJcbiAgICB0aGlzLnNob3dEb3dubG9hZFBvcHVwID0gZmFsc2U7XHJcbiAgICB0aGlzLmVuZFBhZ2VTZWVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICByYWlzZVN0YXJ0RXZlbnQoZXZlbnQpIHtcclxuICAgIHRoaXMuY3VycmVudEluZGV4ID0gZXZlbnQuaXRlbXNbMF0uaW5kZXg7XHJcbiAgICBjb25zdCBkdXJhdGlvbiA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gdGhpcy5lcHViUGxheWVyU3RhcnRUaW1lO1xyXG4gICAgY29uc3Qgc3RhcnRFdmVudCA9IHtcclxuICAgICAgZWlkOiAnU1RBUlQnLFxyXG4gICAgICB2ZXI6IHRoaXMudmVyc2lvbixcclxuICAgICAgZWRhdGE6IHtcclxuICAgICAgICB0eXBlOiAnU1RBUlQnLFxyXG4gICAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLmN1cnJlbnRJbmRleCxcclxuICAgICAgICBkdXJhdGlvblxyXG4gICAgICB9LFxyXG4gICAgICBtZXRhRGF0YTogdGhpcy5tZXRhRGF0YVxyXG4gICAgfTtcclxuICAgIHRoaXMucGxheWVyRXZlbnQuZW1pdChzdGFydEV2ZW50KTtcclxuICAgIHRoaXMuZXB1Ykxhc3RQYWdlVGltZSA9IHRoaXMuZXB1YlBsYXllclN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgdGhpcy5lcHViUGxheWVyU2VydmljZS5zdGFydChkdXJhdGlvbik7XHJcbiAgfVxyXG5cclxuICByYWlzZUhlYXJ0QmVhdEV2ZW50KGV2ZW50LCB0ZWxlVHlwZT8pIHtcclxuICAgIGlmIChldmVudC5kYXRhKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gZXZlbnQuZGF0YS5pbmRleDtcclxuICAgIH1cclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50LnR5cGUgPyBldmVudC50eXBlIDogZXZlbnQ7XHJcbiAgICBjb25zdCBoZWFydEJlYXRFdmVudCA9IHtcclxuICAgICAgZWlkOiAnSEVBUlRCRUFUJyxcclxuICAgICAgdmVyOiB0aGlzLnZlcnNpb24sXHJcbiAgICAgIGVkYXRhOiB7XHJcbiAgICAgICAgdHlwZTogZXZlbnRUeXBlLFxyXG4gICAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLmN1cnJlbnRJbmRleFxyXG4gICAgICB9LFxyXG4gICAgICBtZXRhRGF0YTogdGhpcy5tZXRhRGF0YVxyXG4gICAgfTtcclxuICAgIHRoaXMucGxheWVyRXZlbnQuZW1pdChoZWFydEJlYXRFdmVudCk7XHJcbiAgICBpZiAodGVsZW1ldHJ5VHlwZS5JTVBSRVNTSU9OID09PSB0ZWxlVHlwZSkge1xyXG4gICAgICB0aGlzLmVwdWJQbGF5ZXJTZXJ2aWNlLmltcHJlc3Npb24odGhpcy5jdXJyZW50SW5kZXgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRlbGVtZXRyeVR5cGUuSU5URVJBQ1QgPT09IHRlbGVUeXBlKSB7XHJcbiAgICAgIHRoaXMuZXB1YlBsYXllclNlcnZpY2UuaW50ZXJhY3QoZXZlbnRUeXBlLnRvTG93ZXJDYXNlKCksIHRoaXMuY3VycmVudEluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJhaXNlRW5kRXZlbnQoZXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5pc0VuZEV2ZW50UmFpc2VkKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gZXZlbnQuZGF0YS5pbmRleDtcclxuICAgICAgY29uc3QgcGVyY2VudGFnZSA9IGV2ZW50LmRhdGEucGVyY2VudGFnZSB8fCAwO1xyXG4gICAgICBpZiAoZXZlbnQuZGF0YS5wZXJjZW50YWdlKSB7XHJcbiAgICAgICAgdGhpcy5lbmRQYWdlU2VlbiA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZHVyYXRpb24gPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHRoaXMuZXB1YlBsYXllclN0YXJ0VGltZTtcclxuICAgICAgdGhpcy5tZXRhRGF0YS5kdXJhdGlvbiA9IGR1cmF0aW9uO1xyXG4gICAgICB0aGlzLm1ldGFEYXRhLnRvdGFsUGFnZXMgPSB0aGlzLnRvdGFsTnVtYmVyT2ZQYWdlcztcclxuICAgICAgY29uc3QgZW5kRXZlbnQgPSB7XHJcbiAgICAgICAgZWlkOiAnRU5EJyxcclxuICAgICAgICB2ZXI6IHRoaXMudmVyc2lvbixcclxuICAgICAgICBlZGF0YToge1xyXG4gICAgICAgICAgdHlwZTogJ0VORCcsXHJcbiAgICAgICAgICBjdXJyZW50UGFnZTogZXZlbnQuZGF0YS5pbmRleCxcclxuICAgICAgICAgIHRvdGFsUGFnZXM6IHRoaXMudG90YWxOdW1iZXJPZlBhZ2VzLFxyXG4gICAgICAgICAgZHVyYXRpb25cclxuICAgICAgICB9LFxyXG4gICAgICAgIG1ldGFEYXRhOiB0aGlzLm1ldGFEYXRhXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMucGxheWVyRXZlbnQuZW1pdChlbmRFdmVudCk7XHJcbiAgICAgIGNvbnN0IHZpc2l0ZWRsZW5ndGggPSB0aGlzLmN1cnJlbnRJbmRleDtcclxuICAgICAgdGhpcy50aW1lU3BlbnQgPSB0aGlzLnV0aWxTZXJ2aWNlLmdldFRpbWVTcGVudFRleHQodGhpcy5lcHViUGxheWVyU3RhcnRUaW1lKTtcclxuICAgICAgdGhpcy5lcHViUGxheWVyU2VydmljZS5lbmQoZHVyYXRpb24sIHBlcmNlbnRhZ2UsIHRoaXMuY3VycmVudEluZGV4LCB0aGlzLmVuZFBhZ2VTZWVuKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICByYWlzZUV4Y2VwdGlvbkxvZyhlcnJvckNvZGU6IHN0cmluZyAsIHBhZ2VJbmRleCwgZXJyb3JUeXBlOiBzdHJpbmcgLCB0cmFjZUlkICwgc3RhY2t0cmFjZTogRXJyb3IgKSB7XHJcbiAgICBjb25zdCBleGNlcHRpb25Mb2dFdmVudCA9IHtcclxuICAgICAgZWlkOiAnRVJST1InLFxyXG4gICAgICBlZGF0YToge1xyXG4gICAgICAgICAgZXJyOiBlcnJvckNvZGUsXHJcbiAgICAgICAgICBlcnJ0eXBlOiBlcnJvclR5cGUsXHJcbiAgICAgICAgICByZXF1ZXN0aWQ6IHRyYWNlSWQgfHwgJycsXHJcbiAgICAgICAgICBzdGFja3RyYWNlXHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aGlzLnBsYXllckV2ZW50LmVtaXQoZXhjZXB0aW9uTG9nRXZlbnQpO1xyXG4gICAgdGhpcy5lcHViUGxheWVyU2VydmljZS5lcnJvcihlcnJvckNvZGUgLCBlcnJvclR5cGUsIHBhZ2VJbmRleCAsIHN0YWNrdHJhY2UpO1xyXG4gIH1cclxuXHJcbiAgaXNWYWxpZEVwdWJTcmMoc3JjKTogUHJvbWlzZTxCbG9iPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUgLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5odHRwLmdldChzcmMsIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgfSkudG9Qcm9taXNlKCkudGhlbigocmVzKSA9PiB7XHJcbiAgICAgICAgcmVzb2x2ZShyZXMpO1xyXG4gICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIHJhaXNlSGVhcnRCZWF0RXZlbnROZXcodHlwZTogc3RyaW5nLCB0ZWxlbWV0cnlUeXBlMTogc3RyaW5nLCBwYWdlSWQ6IG51bWJlciB8IHN0cmluZywgbmV4dENvbnRlbnRJZD86IHN0cmluZykge1xyXG4gICAgY29uc3QgaGVhckJlYXRFdmVudDogYW55ID0ge1xyXG4gICAgICBlaWQ6ICdIRUFSVEJFQVQnLFxyXG4gICAgICB2ZXI6IHRoaXMudmVyc2lvbixcclxuICAgICAgZWRhdGE6IHtcclxuICAgICAgICB0eXBlLFxyXG4gICAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLmN1cnJlbnRJbmRleFxyXG4gICAgICB9LFxyXG4gICAgICBtZXRhRGF0YTogdGhpcy5tZXRhRGF0YVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gZXZlbnROYW1lLm5leHRDb250ZW50UGxheSAmJiBuZXh0Q29udGVudElkKSB7XHJcbiAgICAgIGhlYXJCZWF0RXZlbnQuZWRhdGEubmV4dENvbnRlbnRJZCA9IG5leHRDb250ZW50SWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgKHRoaXMuaXNTZWN0aW9uc0F2YWlsYWJsZSkge1xyXG4gICAgLy8gICBoZWFyQmVhdEV2ZW50LmVkYXRhLnNlY3Rpb25JZCA9IHRoaXMucXVlc3Rpb25TZXRJZDtcclxuICAgIC8vIH1cclxuXHJcbiAgICB0aGlzLnBsYXllckV2ZW50LmVtaXQoaGVhckJlYXRFdmVudCk7XHJcbiAgICBpZiAodGVsZW1ldHJ5VHlwZS5JTlRFUkFDVCA9PT0gdGVsZW1ldHJ5VHlwZTEpIHtcclxuICAgICAgdGhpcy5lcHViUGxheWVyU2VydmljZS5pbnRlcmFjdCh0eXBlLnRvTG93ZXJDYXNlKCksIHBhZ2VJZCk7XHJcbiAgICB9IGVsc2UgaWYgKHRlbGVtZXRyeVR5cGUuSU1QUkVTU0lPTiA9PT0gdGVsZW1ldHJ5VHlwZTEpIHtcclxuICAgICAgdGhpcy5lcHViUGxheWVyU2VydmljZS5pbXByZXNzaW9uKHBhZ2VJZCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxufVxyXG4iXX0=