videogular2
Version:
Videogular is a video application framework for desktop and mobile powered by Angular
161 lines • 18.9 kB
JavaScript
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
var core_1 = require("@angular/core");
var vg_api_1 = require("../../core/services/vg-api");
var VgHLS = /** @class */ (function () {
function VgHLS(ref, API) {
this.ref = ref;
this.API = API;
this.vgHlsHeaders = {};
this.onGetBitrates = new core_1.EventEmitter();
this.subscriptions = [];
}
VgHLS.prototype.ngOnInit = function () {
var _this = this;
if (this.API.isPlayerReady) {
this.onPlayerReady();
}
else {
this.subscriptions.push(this.API.playerReadyEvent.subscribe(function () { return _this.onPlayerReady(); }));
}
};
VgHLS.prototype.onPlayerReady = function () {
var _this = this;
this.crossorigin = this.ref.nativeElement.getAttribute('crossorigin');
this.preload = this.ref.nativeElement.getAttribute('preload') !== 'none';
this.vgFor = this.ref.nativeElement.getAttribute('vgFor');
if (this.vgFor) {
this.target = this.API.getMediaById(this.vgFor);
}
else {
this.target = this.API.getDefaultMedia();
}
this.config = {
autoStartLoad: this.preload
};
// @ts-ignore
this.config.xhrSetup = function (xhr, url) {
// Send cookies
if (_this.crossorigin === 'use-credentials') {
xhr.withCredentials = true;
}
for (var _i = 0, _a = Object.keys(_this.vgHlsHeaders); _i < _a.length; _i++) {
var key = _a[_i];
xhr.setRequestHeader(key, _this.vgHlsHeaders[key]);
}
};
this.createPlayer();
if (!this.preload) {
this.subscriptions.push(this.API.subscriptions.play.subscribe(function () {
if (_this.hls) {
_this.hls.startLoad(0);
}
}));
}
};
VgHLS.prototype.ngOnChanges = function (changes) {
if (changes['vgHls'] && changes['vgHls'].currentValue) {
this.createPlayer();
}
else if (changes['vgHlsHeaders'] && changes['vgHlsHeaders'].currentValue) {
// Do nothing. We don't want to create a or destroy a player if the headers change.
}
else {
this.destroyPlayer();
}
};
VgHLS.prototype.createPlayer = function () {
var _this = this;
if (this.hls) {
this.destroyPlayer();
}
// It's a HLS source
if (this.vgHls && this.vgHls.indexOf('m3u8') > -1 && Hls.isSupported() && this.API.isPlayerReady) {
var video = this.ref.nativeElement;
this.hls = new Hls(this.config);
// @ts-ignore
this.hls.on(Hls.Events.MANIFEST_PARSED, function (event, data) {
var videoList = [];
videoList.push({
qualityIndex: 0,
width: 0,
height: 0,
bitrate: 0,
mediaType: 'video',
label: 'AUTO'
});
data.levels.forEach(function (item, index) {
videoList.push({
qualityIndex: ++index,
width: item.width,
height: item.height,
bitrate: item.bitrate,
mediaType: 'video',
label: item.name
});
});
_this.onGetBitrates.emit(videoList);
});
// @ts-ignore
this.hls.on(Hls.Events.LEVEL_LOADED, function (event, data) {
_this.target.isLive = data.details.live;
});
this.hls.loadSource(this.vgHls);
this.hls.attachMedia(video);
}
else {
if (this.target && !!this.target.pause) {
this.target.pause();
this.target.seekTime(0);
this.ref.nativeElement.src = this.vgHls;
}
}
};
VgHLS.prototype.setBitrate = function (bitrate) {
if (this.hls) {
this.hls.nextLevel = bitrate.qualityIndex - 1;
}
};
VgHLS.prototype.destroyPlayer = function () {
if (this.hls) {
this.hls.destroy();
this.hls = null;
}
};
VgHLS.prototype.ngOnDestroy = function () {
this.subscriptions.forEach(function (s) { return s.unsubscribe(); });
this.destroyPlayer();
delete this.hls;
};
__decorate([
core_1.Input(),
__metadata("design:type", String)
], VgHLS.prototype, "vgHls", void 0);
__decorate([
core_1.Input(),
__metadata("design:type", Object)
], VgHLS.prototype, "vgHlsHeaders", void 0);
__decorate([
core_1.Output(),
__metadata("design:type", core_1.EventEmitter)
], VgHLS.prototype, "onGetBitrates", void 0);
VgHLS = __decorate([
core_1.Directive({
selector: '[vgHls]',
exportAs: 'vgHls'
}),
__metadata("design:paramtypes", [core_1.ElementRef, vg_api_1.VgAPI])
], VgHLS);
return VgHLS;
}());
exports.VgHLS = VgHLS;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmctaGxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N0cmVhbWluZy92Zy1obHMvdmctaGxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsc0NBVXVCO0FBQ3ZCLHFEQUFtRDtBQVduRDtJQWVJLGVBQW9CLEdBQWMsRUFBUyxHQUFTO1FBQWhDLFFBQUcsR0FBSCxHQUFHLENBQVc7UUFBUyxRQUFHLEdBQUgsR0FBRyxDQUFNO1FBYjNDLGlCQUFZLEdBQTRCLEVBQUUsQ0FBQztRQUUxQyxrQkFBYSxHQUFrQyxJQUFJLG1CQUFZLEVBQUUsQ0FBQztRQVM1RSxrQkFBYSxHQUFtQixFQUFFLENBQUM7SUFFb0IsQ0FBQztJQUV4RCx3QkFBUSxHQUFSO1FBQUEsaUJBT0M7UUFORyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN4QjthQUNJO1lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsY0FBTSxPQUFBLEtBQUksQ0FBQyxhQUFhLEVBQUUsRUFBcEIsQ0FBb0IsQ0FBQyxDQUFDLENBQUM7U0FDNUY7SUFDTCxDQUFDO0lBRUQsNkJBQWEsR0FBYjtRQUFBLGlCQXdDQztRQXZDRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxNQUFNLENBQUM7UUFDekUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFMUQs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SUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDM0M7U0FDSjtJQUNMLENBQUM7SUFFRCwwQkFBVSxHQUFWLFVBQVcsT0FBc0I7UUFDN0IsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7U0FDakQ7SUFDTCxDQUFDO0lBRUQsNkJBQWEsR0FBYjtRQUNJLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7U0FDbkI7SUFDTCxDQUFDO0lBRUQsMkJBQVcsR0FBWDtRQUNJLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFmLENBQWUsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDcEIsQ0FBQztJQXZKUTtRQUFSLFlBQUssRUFBRTs7d0NBQWM7SUFDYjtRQUFSLFlBQUssRUFBRTs7K0NBQTRDO0lBRTFDO1FBQVQsYUFBTSxFQUFFO2tDQUFnQixtQkFBWTtnREFBdUM7SUFKbkUsS0FBSztRQUpqQixnQkFBUyxDQUFDO1lBQ1AsUUFBUSxFQUFFLFNBQVM7WUFDbkIsUUFBUSxFQUFFLE9BQU87U0FDcEIsQ0FBQzt5Q0FnQjBCLGlCQUFVLEVBQWEsY0FBSztPQWYzQyxLQUFLLENBeUpqQjtJQUFELFlBQUM7Q0FBQSxBQXpKRCxJQXlKQztBQXpKWSxzQkFBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5wdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBWZ0FQSSB9IGZyb20gXCIuLi8uLi9jb3JlL3NlcnZpY2VzL3ZnLWFwaVwiO1xuaW1wb3J0IHsgSUhMU0NvbmZpZyB9IGZyb20gJy4vaGxzLWNvbmZpZyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJpdHJhdGVPcHRpb24gfSBmcm9tICcuLi8uLi9jb3JlL2NvcmUnO1xuXG5kZWNsYXJlIGxldCBIbHM7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3ZnSGxzXScsXG4gICAgZXhwb3J0QXM6ICd2Z0hscydcbn0pXG5leHBvcnQgY2xhc3MgVmdITFMgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSB2Z0hsczpzdHJpbmc7XG4gICAgQElucHV0KCkgdmdIbHNIZWFkZXJzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSA9IHt9O1xuXG4gICAgQE91dHB1dCgpIG9uR2V0Qml0cmF0ZXM6IEV2ZW50RW1pdHRlcjxCaXRyYXRlT3B0aW9uW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgdmdGb3I6IHN0cmluZztcbiAgICB0YXJnZXQ6IGFueTtcbiAgICBobHM6IGFueTtcbiAgICBwcmVsb2FkOiBib29sZWFuO1xuICAgIGNyb3Nzb3JpZ2luOiBzdHJpbmc7XG4gICAgY29uZmlnOiBJSExTQ29uZmlnO1xuXG4gICAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmOkVsZW1lbnRSZWYsIHB1YmxpYyBBUEk6VmdBUEkpIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuQVBJLmlzUGxheWVyUmVhZHkpIHtcbiAgICAgICAgICAgIHRoaXMub25QbGF5ZXJSZWFkeSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5BUEkucGxheWVyUmVhZHlFdmVudC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vblBsYXllclJlYWR5KCkpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUGxheWVyUmVhZHkoKSB7XG4gICAgICAgIHRoaXMuY3Jvc3NvcmlnaW4gPSB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnY3Jvc3NvcmlnaW4nKTtcbiAgICAgICAgdGhpcy5wcmVsb2FkID0gdGhpcy5yZWYubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3ByZWxvYWQnKSAhPT0gJ25vbmUnO1xuICAgICAgICB0aGlzLnZnRm9yID0gdGhpcy5yZWYubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3ZnRm9yJyk7XG5cbiAgICAgICAgaWYodGhpcy52Z0Zvcil7XG4gICAgICAgICAgICB0aGlzLnRhcmdldCA9IHRoaXMuQVBJLmdldE1lZGlhQnlJZCh0aGlzLnZnRm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgICAgdGhpcy50YXJnZXQgPSB0aGlzLkFQSS5nZXREZWZhdWx0TWVkaWEoKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgdGhpcy5jb25maWcgPSA8SUhMU0NvbmZpZz57XG4gICAgICAgICAgICBhdXRvU3RhcnRMb2FkOiB0aGlzLnByZWxvYWRcbiAgICAgICAgfTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB0aGlzLmNvbmZpZy54aHJTZXR1cCA9ICh4aHIsIHVybCkgPT4ge1xuICAgICAgICAgICAgLy8gU2VuZCBjb29raWVzXG4gICAgICAgICAgICBpZiAodGhpcy5jcm9zc29yaWdpbiA9PT0gJ3VzZS1jcmVkZW50aWFscycpIHtcbiAgICAgICAgICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMudmdIbHNIZWFkZXJzKSkge1xuICAgICAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdGhpcy52Z0hsc0hlYWRlcnNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jcmVhdGVQbGF5ZXIoKTtcblxuICAgICAgICBpZiAoIXRoaXMucHJlbG9hZCkge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5BUEkuc3Vic2NyaXB0aW9ucy5wbGF5LnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGxzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5obHMuc3RhcnRMb2FkKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6U2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlc1sndmdIbHMnXSAmJiBjaGFuZ2VzWyd2Z0hscyddLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVQbGF5ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjaGFuZ2VzWyd2Z0hsc0hlYWRlcnMnXSAmJiBjaGFuZ2VzWyd2Z0hsc0hlYWRlcnMnXS5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIC8vIERvIG5vdGhpbmcuIFdlIGRvbid0IHdhbnQgdG8gY3JlYXRlIGEgb3IgZGVzdHJveSBhIHBsYXllciBpZiB0aGUgaGVhZGVycyBjaGFuZ2UuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3lQbGF5ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZVBsYXllcigpIHtcbiAgICAgICAgaWYgKHRoaXMuaGxzKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3lQbGF5ZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEl0J3MgYSBITFMgc291cmNlXG4gICAgICAgIGlmICh0aGlzLnZnSGxzICYmIHRoaXMudmdIbHMuaW5kZXhPZignbTN1OCcpID4gLTEgJiYgSGxzLmlzU3VwcG9ydGVkKCkgJiYgdGhpcy5BUEkuaXNQbGF5ZXJSZWFkeSkge1xuICAgICAgICAgICAgbGV0IHZpZGVvOkhUTUxWaWRlb0VsZW1lbnQgPSB0aGlzLnJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgICAgICB0aGlzLmhscyA9IG5ldyBIbHModGhpcy5jb25maWcpO1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgdGhpcy5obHMub24oSGxzLkV2ZW50cy5NQU5JRkVTVF9QQVJTRUQsIChldmVudCwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2aWRlb0xpc3QgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICB2aWRlb0xpc3QucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWFsaXR5SW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpdHJhdGU6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYVR5cGU6ICd2aWRlbycsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0FVVE8nXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGRhdGEubGV2ZWxzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aWRlb0xpc3QucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbGl0eUluZGV4OiArK2luZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBpdGVtLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaXRlbS5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cmF0ZTogaXRlbS5iaXRyYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhVHlwZTogJ3ZpZGVvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogaXRlbS5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkdldEJpdHJhdGVzLmVtaXQodmlkZW9MaXN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgdGhpcy5obHMub24oSGxzLkV2ZW50cy5MRVZFTF9MT0FERUQsIChldmVudCwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhcmdldC5pc0xpdmUgPSBkYXRhLmRldGFpbHMubGl2ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmhscy5sb2FkU291cmNlKHRoaXMudmdIbHMpO1xuICAgICAgICAgICAgdGhpcy5obHMuYXR0YWNoTWVkaWEodmlkZW8pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudGFyZ2V0ICYmICEhdGhpcy50YXJnZXQucGF1c2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhcmdldC5wYXVzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0LnNlZWtUaW1lKDApO1xuICAgICAgICAgICAgICAgIHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQuc3JjID0gdGhpcy52Z0hscztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldEJpdHJhdGUoYml0cmF0ZTogQml0cmF0ZU9wdGlvbikge1xuICAgICAgICBpZiAodGhpcy5obHMpIHtcbiAgICAgICAgICAgIHRoaXMuaGxzLm5leHRMZXZlbCA9IGJpdHJhdGUucXVhbGl0eUluZGV4IC0gMTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3lQbGF5ZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmhscykge1xuICAgICAgICAgICAgdGhpcy5obHMuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5obHMgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5kZXN0cm95UGxheWVyKCk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmhscztcbiAgICB9XG59XG4iXX0=