@reveldigital/player-client 0.0.16-beta.0 → 0.0.16-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,73 @@
1
+ import { Injectable, isDevMode } from '@angular/core';
2
+ import * as yaml from "js-yaml";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common/http";
5
+ import * as i2 from "@angular/router";
6
+ export class AppInitService {
7
+ constructor(http, _route, _router) {
8
+ this.http = http;
9
+ this._route = _route;
10
+ this._router = _router;
11
+ }
12
+ init() {
13
+ return new Promise(async (resolve) => {
14
+ if (isDevMode()) {
15
+ console.log('%cRunning in development mode', 'background-color: yellow; color:red;');
16
+ /**
17
+ * Shim the shindig prefs functionality for dev mode
18
+ */
19
+ window.gadgets = {
20
+ Prefs: class {
21
+ getString(key) { return this.getParameterByName(key); }
22
+ getArray(key) { return this.getParameterByName(key).split(','); }
23
+ getBool(key) { return !!this.getParameterByName(key); }
24
+ getCountry() { }
25
+ getFloat(key) { return parseFloat(this.getParameterByName(key)); }
26
+ getInt(key) { return parseInt(this.getParameterByName(key)); }
27
+ getLang() { return this.getParameterByName('lang') === '' ? 'en' : this.getParameterByName('lang'); }
28
+ getParameterByName(name, search = window.location.href) {
29
+ const urlParams = new URLSearchParams(search);
30
+ return urlParams.has(name) ? urlParams.get(name) : '';
31
+ // name = name.replace(/[\[\]]/g, '\\$&');
32
+ // let regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),
33
+ // results = regex.exec(search);
34
+ // if (!results) return '';
35
+ // if (!results[2]) return '';
36
+ // return decodeURIComponent(results[2].replace(/\+/g, ' '));
37
+ }
38
+ }
39
+ };
40
+ this.http.get('assets/user-prefs.yml', {
41
+ responseType: 'text'
42
+ }).subscribe(data => {
43
+ try {
44
+ const doc = yaml.load(data);
45
+ let params = {};
46
+ for (const val of doc.prefs) {
47
+ params[val.name] = val.default_value;
48
+ }
49
+ this._router.navigate([], {
50
+ relativeTo: this._route,
51
+ queryParams: params,
52
+ });
53
+ console.log(`%cUser prefs loaded successfully`, 'background-color: yellow; color:red;');
54
+ }
55
+ catch (e) {
56
+ console.log(`Unable to load user preferences YAML definition file: ${e}`, 'background-color: yellow; color:red;');
57
+ console.log(`Please see our developer documentation for help with your app configuration: https://developer.reveldigital.com`, 'background-color: yellow; color:red;');
58
+ }
59
+ });
60
+ }
61
+ resolve();
62
+ });
63
+ }
64
+ }
65
+ AppInitService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AppInitService, deps: [{ token: i1.HttpClient }, { token: i2.ActivatedRoute }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable });
66
+ AppInitService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AppInitService, providedIn: 'root' });
67
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AppInitService, decorators: [{
68
+ type: Injectable,
69
+ args: [{
70
+ providedIn: 'root'
71
+ }]
72
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.ActivatedRoute }, { type: i2.Router }]; } });
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWluaXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JldmVsZGlnaXRhbC9wbGF5ZXItY2xpZW50L3NyYy9saWIvYXBwLWluaXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd0RCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQzs7OztBQU1oQyxNQUFNLE9BQU8sY0FBYztJQUV6QixZQUNTLElBQWdCLEVBQ2YsTUFBc0IsRUFDdEIsT0FBZTtRQUZoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2YsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIsWUFBTyxHQUFQLE9BQU8sQ0FBUTtJQUN6QixDQUFDO0lBRUQsSUFBSTtRQUVGLE9BQU8sSUFBSSxPQUFPLENBQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ3pDLElBQUksU0FBUyxFQUFFLEVBQUU7Z0JBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FDVCwrQkFBK0IsRUFDL0Isc0NBQXNDLENBQ3ZDLENBQUM7Z0JBRUY7O21CQUVHO2dCQUNHLE1BQU8sQ0FBQyxPQUFPLEdBQUc7b0JBRXRCLEtBQUssRUFBRTt3QkFDTCxTQUFTLENBQUMsR0FBVyxJQUFJLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFBLENBQUMsQ0FBQzt3QkFFOUQsUUFBUSxDQUFDLEdBQVcsSUFBSSxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUEsQ0FBQyxDQUFDO3dCQUV4RSxPQUFPLENBQUMsR0FBVyxJQUFJLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQSxDQUFDLENBQUM7d0JBRTlELFVBQVUsS0FBSyxDQUFDO3dCQUVoQixRQUFRLENBQUMsR0FBVyxJQUFJLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQzt3QkFFekUsTUFBTSxDQUFDLEdBQVcsSUFBSSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUM7d0JBRXJFLE9BQU8sS0FBSyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFFckcsa0JBQWtCLENBQUMsSUFBWSxFQUFFLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUk7NEJBRTVELE1BQU0sU0FBUyxHQUFHLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDOzRCQUM5QyxPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs0QkFFdEQsMENBQTBDOzRCQUMxQywrREFBK0Q7NEJBQy9ELGtDQUFrQzs0QkFDbEMsMkJBQTJCOzRCQUMzQiw4QkFBOEI7NEJBQzlCLDZEQUE2RDt3QkFDL0QsQ0FBQztxQkFDRjtpQkFDRixDQUFDO2dCQUVGLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFFO29CQUNyQyxZQUFZLEVBQUUsTUFBTTtpQkFDckIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDbEIsSUFBSTt3QkFDRixNQUFNLEdBQUcsR0FBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNqQyxJQUFJLE1BQU0sR0FBUSxFQUFFLENBQUE7d0JBQ3BCLEtBQUssTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRTs0QkFDM0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFBO3lCQUNyQzt3QkFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUU7NEJBQ3hCLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTTs0QkFDdkIsV0FBVyxFQUFFLE1BQU07eUJBQ3BCLENBQUMsQ0FBQzt3QkFFSCxPQUFPLENBQUMsR0FBRyxDQUNULGtDQUFrQyxFQUNsQyxzQ0FBc0MsQ0FDdkMsQ0FBQztxQkFDSDtvQkFBQyxPQUFPLENBQUMsRUFBRTt3QkFDVixPQUFPLENBQUMsR0FBRyxDQUNULHlEQUF5RCxDQUFDLEVBQUUsRUFDNUQsc0NBQXNDLENBQ3ZDLENBQUM7d0JBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FDVCxpSEFBaUgsRUFDakgsc0NBQXNDLENBQ3ZDLENBQUE7cUJBQ0Y7Z0JBQ0gsQ0FBQyxDQUFDLENBQUE7YUFDSDtZQUNELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzs0R0FyRlUsY0FBYztnSEFBZCxjQUFjLGNBRmIsTUFBTTs0RkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSBcImpzLXlhbWxcIjtcclxuXHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcHBJbml0U2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIF9yb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcikge1xyXG4gIH1cclxuXHJcbiAgaW5pdCgpOiBQcm9taXNlPGFueT4ge1xyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihhc3luYyAocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICclY1J1bm5pbmcgaW4gZGV2ZWxvcG1lbnQgbW9kZScsXHJcbiAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcjogeWVsbG93OyBjb2xvcjpyZWQ7J1xyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNoaW0gdGhlIHNoaW5kaWcgcHJlZnMgZnVuY3Rpb25hbGl0eSBmb3IgZGV2IG1vZGVcclxuICAgICAgICAgKi9cclxuICAgICAgICAoPGFueT53aW5kb3cpLmdhZGdldHMgPSB7XHJcblxyXG4gICAgICAgICAgUHJlZnM6IGNsYXNzIHtcclxuICAgICAgICAgICAgZ2V0U3RyaW5nKGtleTogc3RyaW5nKSB7IHJldHVybiB0aGlzLmdldFBhcmFtZXRlckJ5TmFtZShrZXkpIH1cclxuXHJcbiAgICAgICAgICAgIGdldEFycmF5KGtleTogc3RyaW5nKSB7IHJldHVybiB0aGlzLmdldFBhcmFtZXRlckJ5TmFtZShrZXkpLnNwbGl0KCcsJykgfVxyXG5cclxuICAgICAgICAgICAgZ2V0Qm9vbChrZXk6IHN0cmluZykgeyByZXR1cm4gISF0aGlzLmdldFBhcmFtZXRlckJ5TmFtZShrZXkpIH1cclxuXHJcbiAgICAgICAgICAgIGdldENvdW50cnkoKSB7IH1cclxuXHJcbiAgICAgICAgICAgIGdldEZsb2F0KGtleTogc3RyaW5nKSB7IHJldHVybiBwYXJzZUZsb2F0KHRoaXMuZ2V0UGFyYW1ldGVyQnlOYW1lKGtleSkpIH1cclxuXHJcbiAgICAgICAgICAgIGdldEludChrZXk6IHN0cmluZykgeyByZXR1cm4gcGFyc2VJbnQodGhpcy5nZXRQYXJhbWV0ZXJCeU5hbWUoa2V5KSkgfVxyXG5cclxuICAgICAgICAgICAgZ2V0TGFuZygpIHsgcmV0dXJuIHRoaXMuZ2V0UGFyYW1ldGVyQnlOYW1lKCdsYW5nJykgPT09ICcnID8gJ2VuJyA6IHRoaXMuZ2V0UGFyYW1ldGVyQnlOYW1lKCdsYW5nJyk7IH1cclxuXHJcbiAgICAgICAgICAgIGdldFBhcmFtZXRlckJ5TmFtZShuYW1lOiBzdHJpbmcsIHNlYXJjaCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmKTogc3RyaW5nIHtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhzZWFyY2gpO1xyXG4gICAgICAgICAgICAgIHJldHVybiB1cmxQYXJhbXMuaGFzKG5hbWUpID8gdXJsUGFyYW1zLmdldChuYW1lKSA6ICcnO1xyXG5cclxuICAgICAgICAgICAgICAvLyBuYW1lID0gbmFtZS5yZXBsYWNlKC9bXFxbXFxdXS9nLCAnXFxcXCQmJyk7XHJcbiAgICAgICAgICAgICAgLy8gbGV0IHJlZ2V4ID0gbmV3IFJlZ0V4cCgnWz8mXScgKyBuYW1lICsgJyg9KFteJiNdKil8JnwjfCQpJyksXHJcbiAgICAgICAgICAgICAgLy8gICByZXN1bHRzID0gcmVnZXguZXhlYyhzZWFyY2gpO1xyXG4gICAgICAgICAgICAgIC8vIGlmICghcmVzdWx0cykgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICAgIC8vIGlmICghcmVzdWx0c1syXSkgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICAgIC8vIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQocmVzdWx0c1syXS5yZXBsYWNlKC9cXCsvZywgJyAnKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmh0dHAuZ2V0KCdhc3NldHMvdXNlci1wcmVmcy55bWwnLCB7XHJcbiAgICAgICAgICByZXNwb25zZVR5cGU6ICd0ZXh0J1xyXG4gICAgICAgIH0pLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRvYzogYW55ID0geWFtbC5sb2FkKGRhdGEpO1xyXG4gICAgICAgICAgICBsZXQgcGFyYW1zOiBhbnkgPSB7fVxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiBkb2MucHJlZnMpIHtcclxuICAgICAgICAgICAgICBwYXJhbXNbdmFsLm5hbWVdID0gdmFsLmRlZmF1bHRfdmFsdWVcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XHJcbiAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5fcm91dGUsXHJcbiAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHBhcmFtcyxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICBgJWNVc2VyIHByZWZzIGxvYWRlZCBzdWNjZXNzZnVsbHlgLFxyXG4gICAgICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7IGNvbG9yOnJlZDsnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgIGBVbmFibGUgdG8gbG9hZCB1c2VyIHByZWZlcmVuY2VzIFlBTUwgZGVmaW5pdGlvbiBmaWxlOiAke2V9YCxcclxuICAgICAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcjogeWVsbG93OyBjb2xvcjpyZWQ7J1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICBgUGxlYXNlIHNlZSBvdXIgZGV2ZWxvcGVyIGRvY3VtZW50YXRpb24gZm9yIGhlbHAgd2l0aCB5b3VyIGFwcCBjb25maWd1cmF0aW9uOiBodHRwczovL2RldmVsb3Blci5yZXZlbGRpZ2l0YWwuY29tYCxcclxuICAgICAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcjogeWVsbG93OyBjb2xvcjpyZWQ7J1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgICByZXNvbHZlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,42 @@
1
+ import { APP_INITIALIZER, NgModule } from '@angular/core';
2
+ import { PlayerClientService } from './player-client.service';
3
+ import { AppInitService } from './app-init.service';
4
+ import { HttpClientModule } from '@angular/common/http';
5
+ import { RouterModule } from '@angular/router';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/router";
8
+ export class PlayerClientModule {
9
+ }
10
+ PlayerClientModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
11
+ PlayerClientModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientModule, imports: [HttpClientModule, i1.RouterModule] });
12
+ PlayerClientModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientModule, providers: [{
13
+ provide: APP_INITIALIZER,
14
+ useFactory: initializeApp,
15
+ deps: [AppInitService, PlayerClientService],
16
+ multi: true
17
+ }], imports: [[
18
+ HttpClientModule,
19
+ RouterModule.forRoot([])
20
+ ]] });
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientModule, decorators: [{
22
+ type: NgModule,
23
+ args: [{
24
+ imports: [
25
+ HttpClientModule,
26
+ RouterModule.forRoot([])
27
+ ],
28
+ providers: [{
29
+ provide: APP_INITIALIZER,
30
+ useFactory: initializeApp,
31
+ deps: [AppInitService, PlayerClientService],
32
+ multi: true
33
+ }]
34
+ }]
35
+ }] });
36
+ function initializeApp(appInitService) {
37
+ return async () => {
38
+ PlayerClientService.init({});
39
+ await appInitService.init();
40
+ };
41
+ }
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLWNsaWVudC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXZlbGRpZ2l0YWwvcGxheWVyLWNsaWVudC9zcmMvbGliL3BsYXllci1jbGllbnQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFVLE1BQU0saUJBQWlCLENBQUM7OztBQWV2RCxNQUFNLE9BQU8sa0JBQWtCOztnSEFBbEIsa0JBQWtCO2lIQUFsQixrQkFBa0IsWUFWM0IsZ0JBQWdCO2lIQVVQLGtCQUFrQixhQVBsQixDQUFDO1lBQ1YsT0FBTyxFQUFFLGVBQWU7WUFDeEIsVUFBVSxFQUFFLGFBQWE7WUFDekIsSUFBSSxFQUFFLENBQUMsY0FBYyxFQUFFLG1CQUFtQixDQUFDO1lBQzNDLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyxZQVRPO1lBQ1AsZ0JBQWdCO1lBQ2hCLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1NBQ3pCOzRGQVFVLGtCQUFrQjtrQkFaOUIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsZ0JBQWdCO3dCQUNoQixZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztxQkFDekI7b0JBQ0QsU0FBUyxFQUFFLENBQUM7NEJBQ1YsT0FBTyxFQUFFLGVBQWU7NEJBQ3hCLFVBQVUsRUFBRSxhQUFhOzRCQUN6QixJQUFJLEVBQUUsQ0FBQyxjQUFjLEVBQUUsbUJBQW1CLENBQUM7NEJBQzNDLEtBQUssRUFBRSxJQUFJO3lCQUNaLENBQUM7aUJBQ0g7O0FBR0QsU0FBUyxhQUFhLENBQUMsY0FBOEI7SUFDbkQsT0FBTyxLQUFLLElBQUksRUFBRTtRQUNoQixtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0IsTUFBTSxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQyxDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQUF9JTklUSUFMSVpFUiwgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBsYXllckNsaWVudFNlcnZpY2UgfSBmcm9tICcuL3BsYXllci1jbGllbnQuc2VydmljZSc7XG5pbXBvcnQgeyBBcHBJbml0U2VydmljZSB9IGZyb20gJy4vYXBwLWluaXQuc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlLCBSb3V0ZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBIdHRwQ2xpZW50TW9kdWxlLFxuICAgIFJvdXRlck1vZHVsZS5mb3JSb290KFtdKVxuICBdLFxuICBwcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgIHVzZUZhY3Rvcnk6IGluaXRpYWxpemVBcHAsXG4gICAgZGVwczogW0FwcEluaXRTZXJ2aWNlLCBQbGF5ZXJDbGllbnRTZXJ2aWNlXSxcbiAgICBtdWx0aTogdHJ1ZVxuICB9XVxufSlcbmV4cG9ydCBjbGFzcyBQbGF5ZXJDbGllbnRNb2R1bGUgeyB9XG5cbmZ1bmN0aW9uIGluaXRpYWxpemVBcHAoYXBwSW5pdFNlcnZpY2U6IEFwcEluaXRTZXJ2aWNlKSB7XG4gIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgUGxheWVyQ2xpZW50U2VydmljZS5pbml0KHt9KTtcbiAgICBhd2FpdCBhcHBJbml0U2VydmljZS5pbml0KCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,258 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject, fromEvent, Subject } from 'rxjs';
3
+ import { map, share, tap } from 'rxjs/operators';
4
+ import * as i0 from "@angular/core";
5
+ export class PlayerClientService {
6
+ // private onPostMessageSub: Subscription;
7
+ // private onPostMessageEvt$ = fromEvent(window, 'message').pipe(
8
+ // filter((messageEvent: MessageEvent) =>
9
+ // messageEvent.source !== window.parent &&
10
+ // typeof messageEvent.data === 'string' &&
11
+ // messageEvent.data.startsWith('reveldigital:')),
12
+ // map((e: any) => { return JSON.parse(e.substring(13)) as Command }),
13
+ // share(),
14
+ // tap(this.onCommand$)
15
+ // );
16
+ constructor(zone) {
17
+ this.onCommand$ = new Subject();
18
+ this.onReady$ = new BehaviorSubject(false);
19
+ this.onStart$ = new Subject();
20
+ this.onStop$ = new Subject();
21
+ this.onStartEvt$ = fromEvent(document, 'RevelDigital.Start').pipe(share(), tap(this.onStart$));
22
+ this.onStopEvt$ = fromEvent(document, 'RevelDigital.Stop').pipe(share(), tap(this.onStop$));
23
+ this.onCommandEvt$ = fromEvent(document, 'RevelDigital.Command').pipe(map((e) => { return { name: e.detail.name, arg: e.detail.arg }; }), share(), tap(this.onCommand$));
24
+ let self = this;
25
+ window.RevelDigital = {
26
+ Controller: {
27
+ onCommand: function (name, arg) {
28
+ zone.run(() => {
29
+ self.onCommand$.next({ name: name, arg: arg });
30
+ });
31
+ },
32
+ onStart: function () {
33
+ zone.run(() => {
34
+ self.onStart$.next();
35
+ });
36
+ },
37
+ onStop: function () {
38
+ zone.run(() => {
39
+ self.onStop$.next();
40
+ });
41
+ }
42
+ }
43
+ };
44
+ this.onStartSub = this.onStartEvt$.subscribe(() => { });
45
+ this.onStopSub = this.onStopEvt$.subscribe(() => { });
46
+ this.onCommandSub = this.onCommandEvt$.subscribe(() => { });
47
+ this.clientPromise = null;
48
+ this.onReady$.next(true);
49
+ }
50
+ ngOnDestroy() {
51
+ this.onStartSub?.unsubscribe();
52
+ this.onStopSub?.unsubscribe();
53
+ this.onCommandSub?.unsubscribe();
54
+ this.onReady$.next(false);
55
+ }
56
+ static init(data) {
57
+ console.log('%cInitializing Revel Digital client library', 'background-color: yellow; color:red;');
58
+ }
59
+ callback(...args) {
60
+ this.getClient().then((client) => {
61
+ switch (args.length) {
62
+ case 0:
63
+ client.callback();
64
+ break;
65
+ case 1:
66
+ client.callback(args[0]);
67
+ break;
68
+ case 2:
69
+ client.callback(args[1]);
70
+ break;
71
+ case 3:
72
+ client.callback(args[2]);
73
+ break;
74
+ case 4:
75
+ client.callback(args[3]);
76
+ break;
77
+ case 5:
78
+ client.callback(args[4]);
79
+ break;
80
+ }
81
+ });
82
+ }
83
+ async getDeviceTime(date) {
84
+ const client = await this.getClient();
85
+ if (date !== undefined) {
86
+ return client.getDeviceTime(date);
87
+ }
88
+ return client.getDeviceTime();
89
+ }
90
+ async getDeviceTimeZoneName() {
91
+ const client = await this.getClient();
92
+ return client.getDeviceTimeZoneName();
93
+ }
94
+ async getDeviceTimeZoneID() {
95
+ const client = await this.getClient();
96
+ return client.getDeviceTimeZoneID();
97
+ }
98
+ async getDeviceTimeZoneOffset() {
99
+ const client = await this.getClient();
100
+ return client.getDeviceTimeZoneOffset();
101
+ }
102
+ async getLanguageCode() {
103
+ const client = await this.getClient();
104
+ return client.getLanguageCode();
105
+ }
106
+ async getDeviceKey() {
107
+ const client = await this.getClient();
108
+ return client.getDeviceKey();
109
+ }
110
+ sendCommand(name, arg) {
111
+ this.getClient().then((client) => {
112
+ client.sendCommand(name, arg);
113
+ });
114
+ }
115
+ sendRemoteCommand(deviceKeys, name, arg) {
116
+ this.getClient().then((client) => {
117
+ client.sendRemoteCommand(deviceKeys, name, arg);
118
+ });
119
+ }
120
+ track(eventName, properties) {
121
+ this.getClient().then((client) => {
122
+ client.track(eventName, JSON.stringify(properties));
123
+ });
124
+ }
125
+ timeEvent(eventName) {
126
+ this.getClient().then((client) => {
127
+ client.timeEvent(eventName);
128
+ });
129
+ }
130
+ newEventSession(id) {
131
+ this.getClient().then((client) => {
132
+ if (id !== undefined) {
133
+ client.newEventSession();
134
+ }
135
+ else {
136
+ client.newEventSession(id);
137
+ }
138
+ });
139
+ }
140
+ async getRevelRoot() {
141
+ const client = await this.getClient();
142
+ return client.getRevelRoot();
143
+ }
144
+ async getCommandMap() {
145
+ const client = await this.getClient();
146
+ return JSON.parse(await client.getCommandMap());
147
+ // let map = new Map<string, any>();
148
+ // let obj = JSON.parse(await client.getCommandMap());
149
+ // for (let key in obj) {
150
+ // map.set(key, obj[key]);
151
+ // }
152
+ // return map;
153
+ }
154
+ finish() {
155
+ this.getClient().then((client) => {
156
+ client.finish();
157
+ });
158
+ }
159
+ // ---
160
+ // PRIVATE METHODS.
161
+ // ---
162
+ getClient() {
163
+ if (this.clientPromise) {
164
+ return (this.clientPromise);
165
+ }
166
+ if (window.Client) {
167
+ return (this.clientPromise = Promise.resolve(window.Client));
168
+ }
169
+ // A "complete" status indicates that the "load" event has been fired on the
170
+ // window; and, that all sub-resources such as Scripts, Images, and Frames have
171
+ // been loaded.
172
+ if (window.document.readyState === "complete") {
173
+ // If this event has fired AND the 3rd-party script isn't available (see IF-
174
+ // condition BEFORE this one), it means that the 3rd-party script either
175
+ // failed on the network or was BLOCKED by an ad-blocker. As such, we have to
176
+ // fall-back to using a mock API.
177
+ return (this.clientPromise = Promise.resolve(new NoopClient()));
178
+ }
179
+ // ASSERT: If we made it this far, the document has not completed loading (but it
180
+ // may be in an "interactive" state which is when I believe that the Angular app
181
+ // gets bootstrapped). As such, we need bind to the LOAD event to wait for our
182
+ // third-party scripts to load (or fail to load, or be blocked).
183
+ this.clientPromise = new Promise((resolve) => {
184
+ window.addEventListener("load", function handleWindowLoad() {
185
+ // At this point, the 3rd-party library is either available or
186
+ // it's not - there's no further loading to do. If it's not
187
+ // present on the global scope, we're going to fall-back to using
188
+ // a mock API.
189
+ resolve(window.Client || new NoopClient());
190
+ });
191
+ });
192
+ return (this.clientPromise);
193
+ }
194
+ }
195
+ PlayerClientService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
196
+ PlayerClientService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientService, providedIn: 'root' });
197
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PlayerClientService, decorators: [{
198
+ type: Injectable,
199
+ args: [{
200
+ providedIn: 'root'
201
+ }]
202
+ }], ctorParameters: function () { return [{ type: i0.NgZone }]; } });
203
+ // ----------------------------------------------------------------------------------- //
204
+ // ----------------------------------------------------------------------------------- //
205
+ // I provide a mock API for the 3rd-party script. This just allows the consuming code to
206
+ // act as though the library is available even if it failed to load (example, it was
207
+ // blocked by an ad-blocker).
208
+ class NoopClient {
209
+ constructor() {
210
+ console.log('%cClient API not available, falling back to mock API', 'background-color: yellow; color:red;');
211
+ }
212
+ callback(...args) {
213
+ // NOOP implement, nothing to do....
214
+ }
215
+ getDeviceTime(date) {
216
+ return Promise.resolve(new Date().toISOString());
217
+ }
218
+ async getDeviceTimeZoneName() {
219
+ return Promise.resolve(null);
220
+ }
221
+ async getDeviceTimeZoneID() {
222
+ return Promise.resolve(null);
223
+ }
224
+ async getDeviceTimeZoneOffset() {
225
+ return Promise.resolve(null);
226
+ }
227
+ async getLanguageCode() {
228
+ return Promise.resolve(null);
229
+ }
230
+ async getDeviceKey() {
231
+ return Promise.resolve(null);
232
+ }
233
+ sendCommand(name, arg) {
234
+ // NOOP implement, nothing to do....
235
+ }
236
+ sendRemoteCommand(deviceKeys, name, arg) {
237
+ // NOOP implement, nothing to do....
238
+ }
239
+ track(eventName, properties) {
240
+ // NOOP implement, nothing to do....
241
+ }
242
+ timeEvent(eventName) {
243
+ // NOOP implement, nothing to do....
244
+ }
245
+ newEventSession(id) {
246
+ // NOOP implement, nothing to do....
247
+ }
248
+ async getRevelRoot() {
249
+ return Promise.resolve(null);
250
+ }
251
+ async getCommandMap() {
252
+ return Promise.resolve('{}');
253
+ }
254
+ finish() {
255
+ // NOOP implement, nothing to do....
256
+ }
257
+ }
258
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLWNsaWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmV2ZWxkaWdpdGFsL3BsYXllci1jbGllbnQvc3JjL2xpYi9wbGF5ZXItY2xpZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBNkIsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN6RSxPQUFPLEVBQVUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUF3RHpELE1BQU0sT0FBTyxtQkFBbUI7SUFnQzlCLDBDQUEwQztJQUMxQyxpRUFBaUU7SUFDakUsMkNBQTJDO0lBQzNDLCtDQUErQztJQUMvQywrQ0FBK0M7SUFDL0Msc0RBQXNEO0lBQ3RELHdFQUF3RTtJQUN4RSxhQUFhO0lBQ2IseUJBQXlCO0lBQ3pCLEtBQUs7SUFHTCxZQUFZLElBQVk7UUF4Q2pCLGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBQ3BDLGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN6QixZQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQVN2QixnQkFBVyxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQ2xFLEtBQUssRUFBRSxFQUNQLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQ25CLENBQUM7UUFFTSxlQUFVLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLElBQUksQ0FDaEUsS0FBSyxFQUFFLEVBQ1AsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMs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Q0FBQztJQUMvQixDQUFDO0lBRU0sS0FBSyxDQUFDLGFBQWE7UUFFeEIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxNQUFNO1FBRVgsb0NBQW9DO0lBQ3RDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tRXZlbnQsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgc2hhcmUsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcblxyXG4vLyBTbyB0aGF0IFR5cGVTY3JpcHQgZG9lc24ndCBjb21wbGFpbiwgd2UncmUgZ29pbmcgdG8gYXVnbWVudCB0aGUgR0xPQkFMIC8gV0lORE9XIFxyXG4vLyBuYW1lLXNwYWNlIGRlZmluaXRpb24gdG8gaW5jbHVkZSB0aGUgVHJhY2tlciBBUEkuIFRoaXMgYWxzbyBwcm92aWRlcyB1cyB3aXRoIGEgcGxhY2VcclxuLy8gdG8gYWN0dWFsbHkgRE9DVU1FTlQgdGhlIEFQSSBzbyB0aGF0IG91ciBkZXZlbG9wZXJzIGFyZW4ndCBndWVzc2luZyBhYm91dCB3aGF0J3NcclxuLy8gYXZhaWxhYmxlIG9uIHRoZSBsaWJyYXJ5LlxyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgdmFyIENsaWVudDogQ2xpZW50O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENsaWVudCB7XHJcblxyXG4gIGNhbGxiYWNrKC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcclxuXHJcbiAgZ2V0RGV2aWNlVGltZShkYXRlPzogRGF0ZSk6IFByb21pc2U8c3RyaW5nPjtcclxuXHJcbiAgZ2V0RGV2aWNlVGltZVpvbmVOYW1lKCk6IFByb21pc2U8c3RyaW5nPjtcclxuXHJcbiAgZ2V0RGV2aWNlVGltZVpvbmVJRCgpOiBQcm9taXNlPHN0cmluZz47XHJcblxyXG4gIGdldERldmljZVRpbWVab25lT2Zmc2V0KCk6IFByb21pc2U8bnVtYmVyPjtcclxuXHJcbiAgZ2V0TGFuZ3VhZ2VDb2RlKCk6IFByb21pc2U8c3RyaW5nPjtcclxuXHJcbiAgZ2V0RGV2aWNlS2V5KCk6IFByb21pc2U8c3RyaW5nPjtcclxuXHJcbiAgc2VuZENvbW1hbmQobmFtZTogc3RyaW5nLCBhcmc6IHN0cmluZyk6IHZvaWQ7XHJcblxyXG4gIHNlbmRSZW1vdGVDb21tYW5kKGRldmljZUtleXM6IHN0cmluZ1tdLCBuYW1lOiBzdHJpbmcsIGFyZzogc3RyaW5nKTogdm9pZDtcclxuXHJcbiAgdHJhY2soZXZlbnROYW1lOiBzdHJpbmcsIHByb3BlcnRpZXM/OiBzdHJpbmcpOiB2b2lkO1xyXG5cclxuICB0aW1lRXZlbnQoZXZlbnROYW1lOiBzdHJpbmcpOiB2b2lkO1xyXG5cclxuICBuZXdFdmVudFNlc3Npb24oaWQ/OiBzdHJpbmcpOiB2b2lkO1xyXG5cclxuICBnZXRSZXZlbFJvb3QoKTogUHJvbWlzZTxzdHJpbmc+O1xyXG5cclxuICBnZXRDb21tYW5kTWFwKCk6IFByb21pc2U8c3RyaW5nPjtcclxuXHJcbiAgZmluaXNoKCk6IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRQcm9wZXJ0aWVzIHtcclxuICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZCB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGFyZzogc3RyaW5nO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQbGF5ZXJDbGllbnRTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgcHJpdmF0ZSBjbGllbnRQcm9taXNlOiBQcm9taXNlPENsaWVudD4gfCBudWxsO1xyXG5cclxuICBwdWJsaWMgb25Db21tYW5kJCA9IG5ldyBTdWJqZWN0PENvbW1hbmQ+KCk7XHJcbiAgcHVibGljIG9uUmVhZHkkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcbiAgcHVibGljIG9uU3RhcnQkID0gbmV3IFN1YmplY3QoKTtcclxuICBwdWJsaWMgb25TdG9wJCA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIC8vXHJcbiAgLy8gVHdvIG1ldGhvZHMgYXZhaWxhYmxlIGZvciBjYWxsaW5nIGludG8gdGhlIGxpYnJhcnk6XHJcbiAgLy9cclxuICAvLyAxKSBVc2luZyBkaXNwYXRjaEV2ZW50KCkgd2l0aCB0aGUgZm9sbG93aW5nIGN1c3RvbSBldmVudHNcclxuICAvLyAyKSBVc2luZyB0aGUgd2luZG93IHNjb3BlZCBSZXZlbERpZ2l0YWwgb2JqZWN0IGFzIGRlZmluZWQgaW4gdGhlIGNvbnN0cnVjdG9yXHJcbiAgLy9cclxuICBwcml2YXRlIG9uU3RhcnRTdWI6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIG9uU3RhcnRFdnQkID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnUmV2ZWxEaWdpdGFsLlN0YXJ0JykucGlwZShcclxuICAgIHNoYXJlKCksXHJcbiAgICB0YXAodGhpcy5vblN0YXJ0JClcclxuICApO1xyXG4gIHByaXZhdGUgb25TdG9wU3ViOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBvblN0b3BFdnQkID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnUmV2ZWxEaWdpdGFsLlN0b3AnKS5waXBlKFxyXG4gICAgc2hhcmUoKSxcclxuICAgIHRhcCh0aGlzLm9uU3RvcCQpXHJcbiAgKTtcclxuICBwcml2YXRlIG9uQ29tbWFuZFN1YjogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgb25Db21tYW5kRXZ0JCA9IGZyb21FdmVudDxDb21tYW5kPihkb2N1bWVudCwgJ1JldmVsRGlnaXRhbC5Db21tYW5kJykucGlwZShcclxuICAgIG1hcCgoZTogYW55KSA9PiB7IHJldHVybiB7IG5hbWU6IGUuZGV0YWlsLm5hbWUsIGFyZzogZS5kZXRhaWwuYXJnIH0gYXMgQ29tbWFuZCB9KSxcclxuICAgIHNoYXJlKCksXHJcbiAgICB0YXAodGhpcy5vbkNvbW1hbmQkKVxyXG4gICk7XHJcblxyXG4gIC8vIHByaXZhdGUgb25Qb3N0TWVzc2FnZVN1YjogU3Vic2NyaXB0aW9uO1xyXG4gIC8vIHByaXZhdGUgb25Qb3N0TWVzc2FnZUV2dCQgPSBmcm9tRXZlbnQod2luZG93LCAnbWVzc2FnZScpLnBpcGUoXHJcbiAgLy8gICBmaWx0ZXIoKG1lc3NhZ2VFdmVudDogTWVzc2FnZUV2ZW50KSA9PlxyXG4gIC8vICAgICBtZXNzYWdlRXZlbnQuc291cmNlICE9PSB3aW5kb3cucGFyZW50ICYmXHJcbiAgLy8gICAgIHR5cGVvZiBtZXNzYWdlRXZlbnQuZGF0YSA9PT0gJ3N0cmluZycgJiZcclxuICAvLyAgICAgbWVzc2FnZUV2ZW50LmRhdGEuc3RhcnRzV2l0aCgncmV2ZWxkaWdpdGFsOicpKSxcclxuICAvLyAgIG1hcCgoZTogYW55KSA9PiB7IHJldHVybiBKU09OLnBhcnNlKGUuc3Vic3RyaW5nKDEzKSkgYXMgQ29tbWFuZCB9KSxcclxuICAvLyAgIHNoYXJlKCksXHJcbiAgLy8gICB0YXAodGhpcy5vbkNvbW1hbmQkKVxyXG4gIC8vICk7XHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcih6b25lOiBOZ1pvbmUpIHtcclxuXHJcbiAgICBsZXQgc2VsZiA9IHRoaXM7XHJcbiAgICAod2luZG93IGFzIGFueSkuUmV2ZWxEaWdpdGFsID0ge1xyXG4gICAgICBDb250cm9sbGVyOiB7XHJcbiAgICAgICAgb25Db21tYW5kOiBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBhcmc6IHN0cmluZykge1xyXG4gICAgICAgICAgem9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBzZWxmLm9uQ29tbWFuZCQubmV4dCh7IG5hbWU6IG5hbWUsIGFyZzogYXJnIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBvblN0YXJ0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB6b25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgIHNlbGYub25TdGFydCQubmV4dCgpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBvblN0b3A6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHpvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgICAgc2VsZi5vblN0b3AkLm5leHQoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub25TdGFydFN1YiA9IHRoaXMub25TdGFydEV2dCQuc3Vic2NyaWJlKCgpID0+IHsgfSk7XHJcbiAgICB0aGlzLm9uU3RvcFN1YiA9IHRoaXMub25TdG9wRXZ0JC5zdWJzY3JpYmUoKCkgPT4geyB9KTtcclxuICAgIHRoaXMub25Db21tYW5kU3ViID0gdGhpcy5vbkNvbW1hbmRFdnQkLnN1YnNjcmliZSgoKSA9PiB7IH0pO1xyXG5cclxuICAgIHRoaXMuY2xpZW50UHJvbWlzZSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5vblJlYWR5JC5uZXh0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5vblN0YXJ0U3ViPy51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5vblN0b3BTdWI/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLm9uQ29tbWFuZFN1Yj8udW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLm9uUmVhZHkkLm5leHQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBpbml0KGRhdGE6IGFueSkge1xyXG5cclxuICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAnJWNJbml0aWFsaXppbmcgUmV2ZWwgRGlnaXRhbCBjbGllbnQgbGlicmFyeScsXHJcbiAgICAgICdiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7IGNvbG9yOnJlZDsnXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbGxiYWNrKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5nZXRDbGllbnQoKS50aGVuKChjbGllbnQpID0+IHtcclxuXHJcbiAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcclxuICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgIGNsaWVudC5jYWxsYmFjayhhcmdzWzBdKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgIGNsaWVudC5jYWxsYmFjayhhcmdzWzFdKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgIGNsaWVudC5jYWxsYmFjayhhcmdzWzJdKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgIGNsaWVudC5jYWxsYmFjayhhcmdzWzNdKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgIGNsaWVudC5jYWxsYmFjayhhcmdzWzRdKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldERldmljZVRpbWUoZGF0ZT86IERhdGUpOiBQcm9taXNlPHN0cmluZz4ge1xyXG5cclxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XHJcblxyXG4gICAgaWYgKGRhdGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gY2xpZW50LmdldERldmljZVRpbWUoZGF0ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xpZW50LmdldERldmljZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VUaW1lWm9uZU5hbWUoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuXHJcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xyXG5cclxuICAgIHJldHVybiBjbGllbnQuZ2V0RGV2aWNlVGltZVpvbmVOYW1lKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZVpvbmVJRCgpOiBQcm9taXNlPHN0cmluZz4ge1xyXG5cclxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XHJcblxyXG4gICAgcmV0dXJuIGNsaWVudC5nZXREZXZpY2VUaW1lWm9uZUlEKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZVpvbmVPZmZzZXQoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuXHJcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xyXG5cclxuICAgIHJldHVybiBjbGllbnQuZ2V0RGV2aWNlVGltZVpvbmVPZmZzZXQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRMYW5ndWFnZUNvZGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuXHJcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xyXG5cclxuICAgIHJldHVybiBjbGllbnQuZ2V0TGFuZ3VhZ2VDb2RlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlS2V5KCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcclxuXHJcbiAgICByZXR1cm4gY2xpZW50LmdldERldmljZUtleSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbmRDb21tYW5kKG5hbWU6IHN0cmluZywgYXJnOiBzdHJpbmcpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmdldENsaWVudCgpLnRoZW4oKGNsaWVudCkgPT4ge1xyXG4gICAgICBjbGllbnQuc2VuZENvbW1hbmQobmFtZSwgYXJnKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VuZFJlbW90ZUNvbW1hbmQoZGV2aWNlS2V5czogc3RyaW5nW10sIG5hbWU6IHN0cmluZywgYXJnOiBzdHJpbmcpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmdldENsaWVudCgpLnRoZW4oKGNsaWVudCkgPT4ge1xyXG4gICAgICBjbGllbnQuc2VuZFJlbW90ZUNvbW1hbmQoZGV2aWNlS2V5cywgbmFtZSwgYXJnKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRyYWNrKGV2ZW50TmFtZTogc3RyaW5nLCBwcm9wZXJ0aWVzPzogRXZlbnRQcm9wZXJ0aWVzKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5nZXRDbGllbnQoKS50aGVuKChjbGllbnQpID0+IHtcclxuICAgICAgY2xpZW50LnRyYWNrKGV2ZW50TmFtZSwgSlNPTi5zdHJpbmdpZnkocHJvcGVydGllcykpO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0aW1lRXZlbnQoZXZlbnROYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmdldENsaWVudCgpLnRoZW4oKGNsaWVudCkgPT4ge1xyXG4gICAgICBjbGllbnQudGltZUV2ZW50KGV2ZW50TmFtZSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG5ld0V2ZW50U2Vzc2lvbihpZD86IHN0cmluZyk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuZ2V0Q2xpZW50KCkudGhlbigoY2xpZW50KSA9PiB7XHJcbiAgICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY2xpZW50Lm5ld0V2ZW50U2Vzc2lvbigpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNsaWVudC5uZXdFdmVudFNlc3Npb24oaWQpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFJldmVsUm9vdCgpOiBQcm9taXNlPHN0cmluZz4ge1xyXG5cclxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XHJcblxyXG4gICAgcmV0dXJuIGNsaWVudC5nZXRSZXZlbFJvb3QoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRDb21tYW5kTWFwKCk6IFByb21pc2U8YW55PiB7XHJcblxyXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcclxuXHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShhd2FpdCBjbGllbnQuZ2V0Q29tbWFuZE1hcCgpKTtcclxuXHJcbiAgICAvLyBsZXQgbWFwID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcclxuXHJcbiAgICAvLyBsZXQgb2JqID0gSlNPTi5wYXJzZShhd2FpdCBjbGllbnQuZ2V0Q29tbWFuZE1hcCgpKTtcclxuICAgIC8vIGZvciAobGV0IGtleSBpbiBvYmopIHtcclxuICAgIC8vICAgbWFwLnNldChrZXksIG9ialtrZXldKTtcclxuICAgIC8vIH1cclxuICAgIC8vIHJldHVybiBtYXA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmluaXNoKCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuZ2V0Q2xpZW50KCkudGhlbigoY2xpZW50KSA9PiB7XHJcbiAgICAgIGNsaWVudC5maW5pc2goKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvLyAtLS1cclxuICAvLyBQUklWQVRFIE1FVEhPRFMuXHJcbiAgLy8gLS0tXHJcblxyXG4gIHByaXZhdGUgZ2V0Q2xpZW50KCk6IFByb21pc2U8Q2xpZW50PiB7XHJcblxyXG4gICAgaWYgKHRoaXMuY2xpZW50UHJvbWlzZSkge1xyXG5cclxuICAgICAgcmV0dXJuICh0aGlzLmNsaWVudFByb21pc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aW5kb3cuQ2xpZW50KSB7XHJcblxyXG4gICAgICByZXR1cm4gKHRoaXMuY2xpZW50UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh3aW5kb3cuQ2xpZW50KSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQSBcImNvbXBsZXRlXCIgc3RhdHVzIGluZGljYXRlcyB0aGF0IHRoZSBcImxvYWRcIiBldmVudCBoYXMgYmVlbiBmaXJlZCBvbiB0aGVcclxuICAgIC8vIHdpbmRvdzsgYW5kLCB0aGF0IGFsbCBzdWItcmVzb3VyY2VzIHN1Y2ggYXMgU2NyaXB0cywgSW1hZ2VzLCBhbmQgRnJhbWVzIGhhdmVcclxuICAgIC8vIGJlZW4gbG9hZGVkLlxyXG4gICAgaWYgKHdpbmRvdy5kb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHtcclxuXHJcbiAgICAgIC8vIElmIHRoaXMgZXZlbnQgaGFzIGZpcmVkIEFORCB0aGUgM3JkLXBhcnR5IHNjcmlwdCBpc24ndCBhdmFpbGFibGUgKHNlZSBJRi1cclxuICAgICAgLy8gY29uZGl0aW9uIEJFRk9SRSB0aGlzIG9uZSksIGl0IG1lYW5zIHRoYXQgdGhlIDNyZC1wYXJ0eSBzY3JpcHQgZWl0aGVyXHJcbiAgICAgIC8vIGZhaWxlZCBvbiB0aGUgbmV0d29yayBvciB3YXMgQkxPQ0tFRCBieSBhbiBhZC1ibG9ja2VyLiBBcyBzdWNoLCB3ZSBoYXZlIHRvXHJcbiAgICAgIC8vIGZhbGwtYmFjayB0byB1c2luZyBhIG1vY2sgQVBJLlxyXG4gICAgICByZXR1cm4gKHRoaXMuY2xpZW50UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShuZXcgTm9vcENsaWVudCgpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQVNTRVJUOiBJZiB3ZSBtYWRlIGl0IHRoaXMgZmFyLCB0aGUgZG9jdW1lbnQgaGFzIG5vdCBjb21wbGV0ZWQgbG9hZGluZyAoYnV0IGl0XHJcbiAgICAvLyBtYXkgYmUgaW4gYW4gXCJpbnRlcmFjdGl2ZVwiIHN0YXRlIHdoaWNoIGlzIHdoZW4gSSBiZWxpZXZlIHRoYXQgdGhlIEFuZ3VsYXIgYXBwXHJcbiAgICAvLyBnZXRzIGJvb3RzdHJhcHBlZCkuIEFzIHN1Y2gsIHdlIG5lZWQgYmluZCB0byB0aGUgTE9BRCBldmVudCB0byB3YWl0IGZvciBvdXJcclxuICAgIC8vIHRoaXJkLXBhcnR5IHNjcmlwdHMgdG8gbG9hZCAob3IgZmFpbCB0byBsb2FkLCBvciBiZSBibG9ja2VkKS5cclxuICAgIHRoaXMuY2xpZW50UHJvbWlzZSA9IG5ldyBQcm9taXNlPENsaWVudD4oXHJcbiAgICAgIChyZXNvbHZlKSA9PiB7XHJcblxyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICAgXCJsb2FkXCIsXHJcbiAgICAgICAgICBmdW5jdGlvbiBoYW5kbGVXaW5kb3dMb2FkKCkge1xyXG5cclxuICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgdGhlIDNyZC1wYXJ0eSBsaWJyYXJ5IGlzIGVpdGhlciBhdmFpbGFibGUgb3JcclxuICAgICAgICAgICAgLy8gaXQncyBub3QgLSB0aGVyZSdzIG5vIGZ1cnRoZXIgbG9hZGluZyB0byBkby4gSWYgaXQncyBub3RcclxuICAgICAgICAgICAgLy8gcHJlc2VudCBvbiB0aGUgZ2xvYmFsIHNjb3BlLCB3ZSdyZSBnb2luZyB0byBmYWxsLWJhY2sgdG8gdXNpbmdcclxuICAgICAgICAgICAgLy8gYSBtb2NrIEFQSS5cclxuICAgICAgICAgICAgcmVzb2x2ZSh3aW5kb3cuQ2xpZW50IHx8IG5ldyBOb29wQ2xpZW50KCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiAodGhpcy5jbGllbnRQcm9taXNlKTtcclxuICB9XHJcblxyXG59XHJcblxyXG5cclxuXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXHJcblxyXG4vLyBJIHByb3ZpZGUgYSBtb2NrIEFQSSBmb3IgdGhlIDNyZC1wYXJ0eSBzY3JpcHQuIFRoaXMganVzdCBhbGxvd3MgdGhlIGNvbnN1bWluZyBjb2RlIHRvXHJcbi8vIGFjdCBhcyB0aG91Z2ggdGhlIGxpYnJhcnkgaXMgYXZhaWxhYmxlIGV2ZW4gaWYgaXQgZmFpbGVkIHRvIGxvYWQgKGV4YW1wbGUsIGl0IHdhc1xyXG4vLyBibG9ja2VkIGJ5IGFuIGFkLWJsb2NrZXIpLlxyXG5jbGFzcyBOb29wQ2xpZW50IGltcGxlbWVudHMgQ2xpZW50IHtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcblxyXG4gICAgY29uc29sZS5sb2coXHJcbiAgICAgICclY0NsaWVudCBBUEkgbm90IGF2YWlsYWJsZSwgZmFsbGluZyBiYWNrIHRvIG1vY2sgQVBJJyxcclxuICAgICAgJ2JhY2tncm91bmQtY29sb3I6IHllbGxvdzsgY29sb3I6cmVkOydcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FsbGJhY2soLi4uYXJnczogYW55W10pOiB2b2lkIHtcclxuXHJcbiAgICAvLyBOT09QIGltcGxlbWVudCwgbm90aGluZyB0byBkby4uLi5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXREZXZpY2VUaW1lKGRhdGU/OiBEYXRlKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZVpvbmVOYW1lKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VUaW1lWm9uZUlEKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VUaW1lWm9uZU9mZnNldCgpOiBQcm9taXNlPG51bWJlcj4ge1xyXG5cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0TGFuZ3VhZ2VDb2RlKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VLZXkoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbmRDb21tYW5kKG5hbWU6IHN0cmluZywgYXJnOiBzdHJpbmcpOiB2b2lkIHtcclxuXHJcbiAgICAvLyBOT09QIGltcGxlbWVudCwgbm90aGluZyB0byBkby4uLi5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZW5kUmVtb3RlQ29tbWFuZChkZXZpY2VLZXlzOiBzdHJpbmdbXSwgbmFtZTogc3RyaW5nLCBhcmc6IHN0cmluZykge1xyXG5cclxuICAgIC8vIE5PT1AgaW1wbGVtZW50LCBub3RoaW5nIHRvIGRvLi4uLlxyXG4gIH1cclxuXHJcbiAgcHVibGljIHRyYWNrKGV2ZW50TmFtZTogc3RyaW5nLCBwcm9wZXJ0aWVzPzogc3RyaW5nKTogdm9pZCB7XHJcblxyXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdGltZUV2ZW50KGV2ZW50TmFtZTogc3RyaW5nKTogdm9pZCB7XHJcblxyXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmV3RXZlbnRTZXNzaW9uKGlkPzogc3RyaW5nKTogdm9pZCB7XHJcblxyXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UmV2ZWxSb290KCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRDb21tYW5kTWFwKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgne30nKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaW5pc2goKTogdm9pZCB7XHJcblxyXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,6 @@
1
+ /*
2
+ * Public API Surface of player-client
3
+ */
4
+ export * from './lib/player-client.service';
5
+ export * from './lib/player-client.module';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3JldmVsZGlnaXRhbC9wbGF5ZXItY2xpZW50L3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBwbGF5ZXItY2xpZW50XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvcGxheWVyLWNsaWVudC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BsYXllci1jbGllbnQubW9kdWxlJztcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2ZWxkaWdpdGFsLXBsYXllci1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXZlbGRpZ2l0YWwvcGxheWVyLWNsaWVudC9zcmMvcmV2ZWxkaWdpdGFsLXBsYXllci1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==