ng-zenduit 1.0.2 → 1.0.4

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.
Files changed (39) hide show
  1. package/esm2020/lib/core/cevent.mjs +20 -0
  2. package/esm2020/lib/core/local.lock.mjs +33 -0
  3. package/esm2020/lib/core/thread.mjs +10 -0
  4. package/esm2020/lib/live-view-player/flv-player/flv-player.component.mjs +82 -0
  5. package/esm2020/lib/live-view-player/flv-player/flv.mjs +19 -0
  6. package/esm2020/lib/live-view-player/hls-player/hls-player.component.mjs +140 -0
  7. package/esm2020/lib/live-view-player/html5-video-player/html5-video-player.component.mjs +20 -0
  8. package/esm2020/lib/live-view-player/live-view-player/live-view-player.component.mjs +41 -0
  9. package/esm2020/lib/live-view-player/player.control.mjs +79 -0
  10. package/esm2020/lib/live-view-player/snapshot-player/snapshot-player.component.mjs +92 -0
  11. package/esm2020/lib/live-view-player/web-rtc/web-rtc-player.component.mjs +100 -0
  12. package/esm2020/lib/live-view-player/web-rtc/web-rtc.mjs +286 -0
  13. package/esm2020/lib/ng-zenduit.module.mjs +23 -3
  14. package/esm2020/lib/services/http.service.mjs +88 -0
  15. package/esm2020/lib/services/opencv.service.mjs +11 -38
  16. package/esm2020/lib/services/script.loader.service.mjs +82 -0
  17. package/esm2020/public-api.mjs +2 -1
  18. package/fesm2015/ng-zenduit.mjs +1014 -44
  19. package/fesm2015/ng-zenduit.mjs.map +1 -1
  20. package/fesm2020/ng-zenduit.mjs +990 -42
  21. package/fesm2020/ng-zenduit.mjs.map +1 -1
  22. package/lib/core/cevent.d.ts +7 -0
  23. package/lib/core/local.lock.d.ts +8 -0
  24. package/lib/core/thread.d.ts +3 -0
  25. package/lib/live-view-player/flv-player/flv-player.component.d.ts +20 -0
  26. package/lib/live-view-player/flv-player/flv.d.ts +320 -0
  27. package/lib/live-view-player/hls-player/hls-player.component.d.ts +25 -0
  28. package/lib/live-view-player/html5-video-player/html5-video-player.component.d.ts +10 -0
  29. package/lib/live-view-player/live-view-player/live-view-player.component.d.ts +20 -0
  30. package/lib/live-view-player/player.control.d.ts +53 -0
  31. package/lib/live-view-player/snapshot-player/snapshot-player.component.d.ts +30 -0
  32. package/lib/live-view-player/web-rtc/web-rtc-player.component.d.ts +28 -0
  33. package/lib/live-view-player/web-rtc/web-rtc.d.ts +52 -0
  34. package/lib/ng-zenduit.module.d.ts +12 -6
  35. package/lib/services/http.service.d.ts +21 -0
  36. package/lib/services/opencv.service.d.ts +3 -2
  37. package/lib/services/script.loader.service.d.ts +11 -0
  38. package/package.json +8 -7
  39. package/public-api.d.ts +1 -0
@@ -0,0 +1,20 @@
1
+ export class CEvent {
2
+ constructor() {
3
+ this.index = 0;
4
+ this.handlers = [];
5
+ }
6
+ on(handler) {
7
+ this.index++;
8
+ this.handlers.push({ func: handler, id: this.index });
9
+ return this.index;
10
+ }
11
+ off(id) {
12
+ this.handlers = this.handlers.filter(h => h.id !== id);
13
+ }
14
+ fire(data) {
15
+ if (this.handlers) {
16
+ this.handlers.slice(0).forEach(h => h.func(data));
17
+ }
18
+ }
19
+ }
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2V2ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctemVuZHVpdC9zcmMvbGliL2NvcmUvY2V2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxNQUFNO0lBQW5CO1FBQ1ksVUFBSyxHQUFXLENBQUMsQ0FBQztRQUVsQixhQUFRLEdBR1YsRUFBRSxDQUFDO0lBcUJiLENBQUM7SUFuQlUsRUFBRSxDQUFDLE9BQTJCO1FBRWpDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDdEQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFTSxHQUFHLENBQUMsRUFBVTtRQUVqQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRU0sSUFBSSxDQUFDLElBQVE7UUFFaEIsSUFBRyxJQUFJLENBQUMsUUFBUSxFQUNoQjtZQUNJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUNyRDtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBDRXZlbnQ8VD4ge1xuICAgIHByaXZhdGUgaW5kZXg6IG51bWJlciA9IDA7XG5cbiAgICBwcml2YXRlIGhhbmRsZXJzOiB7XG4gICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgIGZ1bmM6IChkYXRhPzogVCkgPT4gdm9pZDtcbiAgICB9W10gPSBbXTtcblxuICAgIHB1YmxpYyBvbihoYW5kbGVyOiAoZGF0YT86IFQpID0+IHZvaWQgKTogbnVtYmVyXG4gICAge1xuICAgICAgICB0aGlzLmluZGV4Kys7XG4gICAgICAgIHRoaXMuaGFuZGxlcnMucHVzaCh7IGZ1bmM6IGhhbmRsZXIsIGlkOiB0aGlzLmluZGV4IH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb2ZmKGlkOiBudW1iZXIpXG4gICAge1xuICAgICAgICB0aGlzLmhhbmRsZXJzID0gdGhpcy5oYW5kbGVycy5maWx0ZXIoaCA9PiBoLmlkICE9PSBpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGZpcmUoZGF0YT86IFQpXG4gICAge1xuICAgICAgICBpZih0aGlzLmhhbmRsZXJzKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZXJzLnNsaWNlKDApLmZvckVhY2goaCA9PiBoLmZ1bmMoZGF0YSkpO1xuICAgICAgICB9XG4gICAgfVxufSJdfQ==
@@ -0,0 +1,33 @@
1
+ export class LocalLock {
2
+ constructor() {
3
+ this._acquired = false;
4
+ this._waitingResolvers = [];
5
+ }
6
+ lock() {
7
+ return new Promise(resolve => {
8
+ if (!this._acquired) {
9
+ this._acquired = true;
10
+ resolve();
11
+ return;
12
+ }
13
+ this._waitingResolvers.push(resolve);
14
+ });
15
+ }
16
+ release() {
17
+ if (!this._acquired) {
18
+ // Trying to release an unacquired lock
19
+ return;
20
+ }
21
+ if (this._waitingResolvers.length > 0) {
22
+ const resolve = this._waitingResolvers.shift();
23
+ resolve();
24
+ }
25
+ else {
26
+ this._acquired = false;
27
+ }
28
+ }
29
+ isLock() {
30
+ return this._acquired;
31
+ }
32
+ }
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwubG9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9jb3JlL2xvY2FsLmxvY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLFNBQVM7SUFLbEI7UUFDSSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTSxJQUFJO1FBQ1AsT0FBTyxJQUFJLE9BQU8sQ0FBTyxPQUFPLENBQUMsRUFBRTtZQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ3RCLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE9BQU87YUFDVjtZQUVELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sT0FBTztRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2pCLHVDQUF1QztZQUN2QyxPQUFPO1NBQ1Y7UUFDRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25DLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQWtCLENBQUM7WUFDL0QsT0FBTyxFQUFFLENBQUM7U0FDYjthQUFNO1lBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7U0FDMUI7SUFDTCxDQUFDO0lBRU0sTUFBTTtRQUVULE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgTG9jYWxMb2NrIHtcbiAgICBwcml2YXRlIF9hY3F1aXJlZDogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgX3dhaXRpbmdSZXNvbHZlcnM6IEFycmF5PCgpID0+IHZvaWQ+O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuX2FjcXVpcmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3dhaXRpbmdSZXNvbHZlcnMgPSBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9jaygpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2FjcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWNxdWlyZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3dhaXRpbmdSZXNvbHZlcnMucHVzaChyZXNvbHZlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbGVhc2UoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fYWNxdWlyZWQpIHtcbiAgICAgICAgICAgIC8vIFRyeWluZyB0byByZWxlYXNlIGFuIHVuYWNxdWlyZWQgbG9ja1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl93YWl0aW5nUmVzb2x2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmUgPSB0aGlzLl93YWl0aW5nUmVzb2x2ZXJzLnNoaWZ0KCkgYXMgKCgpID0+IHZvaWQpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fYWNxdWlyZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBpc0xvY2soKTogYm9vbGVhblxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjcXVpcmVkO1xuICAgIH1cbn0iXX0=
@@ -0,0 +1,10 @@
1
+ export class Thread {
2
+ static sleep(ms) {
3
+ return new Promise((resolve) => {
4
+ setTimeout(() => {
5
+ resolve();
6
+ }, ms);
7
+ });
8
+ }
9
+ }
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyZWFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctemVuZHVpdC9zcmMvbGliL2NvcmUvdGhyZWFkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxNQUFNO0lBQ1IsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFVO1FBQzFCLE9BQU8sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNqQyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNaLE9BQU8sRUFBRSxDQUFDO1lBQ2QsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgVGhyZWFkIHtcbiAgICBwdWJsaWMgc3RhdGljIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9LCBtcyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn0iXX0=
@@ -0,0 +1,82 @@
1
+ import { Component, Input } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../services/script.loader.service";
4
+ export class ZenFlvPlayerComponent {
5
+ constructor(_element, _scriptLoader) {
6
+ this._element = _element;
7
+ this._scriptLoader = _scriptLoader;
8
+ this.IsVideoFilterVisible = false;
9
+ }
10
+ ngOnChanges(changeObj) {
11
+ if (changeObj.source) {
12
+ this.reload();
13
+ }
14
+ }
15
+ ngOnDestroy() {
16
+ this.destroy();
17
+ }
18
+ async reload() {
19
+ // load the script first
20
+ await this._scriptLoader.loadScript("flv");
21
+ // update the player
22
+ this.update();
23
+ }
24
+ update() {
25
+ this.destroy(Boolean(this.source));
26
+ if (!this.source) {
27
+ return;
28
+ }
29
+ this._flv = flvjs.createPlayer({
30
+ url: this.source,
31
+ type: "flv"
32
+ }, {
33
+ // Enable/Disable IO stash buffer.
34
+ // Set to false if you need realtime (minimal latency) for live stream playback, but may stalled if there's network jittering.
35
+ enableStashBuffer: false
36
+ });
37
+ const element = this._element.nativeElement.getElementsByTagName("video").item(0);
38
+ this._flv.attachMediaElement(element);
39
+ this._flv.load();
40
+ this._flv.play();
41
+ let previousFrame = 0;
42
+ this._flv.on("statistics_info", (event) => {
43
+ if (event && event.decodedFrames) {
44
+ if (previousFrame != event.decodedFrames) {
45
+ previousFrame = event.decodedFrames;
46
+ if (this.control) {
47
+ // fired event when video is playing
48
+ this.control.EmitData();
49
+ }
50
+ }
51
+ }
52
+ });
53
+ this._flv.on("loading_complete", () => {
54
+ console.log("loading completed");
55
+ this.destroy(true);
56
+ });
57
+ console.log(`Created the flv player for source "${this.source}"`);
58
+ }
59
+ destroy(skipNotify) {
60
+ if (this._flv) {
61
+ console.log("Destroyed the flv player");
62
+ this._flv.pause();
63
+ this._flv.unload();
64
+ this._flv.destroy();
65
+ this._flv = null;
66
+ if (!skipNotify) {
67
+ // this.onStop.emit();
68
+ }
69
+ }
70
+ }
71
+ }
72
+ ZenFlvPlayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenFlvPlayerComponent, deps: [{ token: i0.ElementRef }, { token: i1.ScriptLoader }], target: i0.ɵɵFactoryTarget.Component });
73
+ ZenFlvPlayerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenFlvPlayerComponent, selector: "zen-flv-player", inputs: { source: "source", control: "control" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"flv-player-component\">\n <video controls\n muted></video>\n\n</div>\n", styles: [".flv-player-component{position:relative;background-color:#000;width:100%;height:100%;border-radius:4px}.flv-player-component video{position:absolute;top:0;left:0;width:100%;height:100%;max-height:100%;border-radius:4px}.flv-player-component zen-icon{position:absolute;width:24px;height:24px;right:20px;top:20px;cursor:pointer;border-radius:4px;background:#FFFFFF}.flv-player-component>.video-filter{position:absolute;right:20px;top:50px;z-index:1000;display:none}.flv-player-component>.video-filter.active{display:block}\n"] });
74
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenFlvPlayerComponent, decorators: [{
75
+ type: Component,
76
+ args: [{ selector: 'zen-flv-player', template: "<div class=\"flv-player-component\">\n <video controls\n muted></video>\n\n</div>\n", styles: [".flv-player-component{position:relative;background-color:#000;width:100%;height:100%;border-radius:4px}.flv-player-component video{position:absolute;top:0;left:0;width:100%;height:100%;max-height:100%;border-radius:4px}.flv-player-component zen-icon{position:absolute;width:24px;height:24px;right:20px;top:20px;cursor:pointer;border-radius:4px;background:#FFFFFF}.flv-player-component>.video-filter{position:absolute;right:20px;top:50px;z-index:1000;display:none}.flv-player-component>.video-filter.active{display:block}\n"] }]
77
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.ScriptLoader }]; }, propDecorators: { source: [{
78
+ type: Input
79
+ }], control: [{
80
+ type: Input
81
+ }] } });
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmx2LXBsYXllci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy16ZW5kdWl0L3NyYy9saWIvbGl2ZS12aWV3LXBsYXllci9mbHYtcGxheWVyL2Zsdi1wbGF5ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctemVuZHVpdC9zcmMvbGliL2xpdmUtdmlldy1wbGF5ZXIvZmx2LXBsYXllci9mbHYtcGxheWVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQTRCLEtBQUssRUFBZ0MsTUFBTSxlQUFlLENBQUM7OztBQWdCekcsTUFBTSxPQUFPLHFCQUFxQjtJQVM5QixZQUNZLFFBQW9CLEVBQ3BCLGFBQTJCO1FBRDNCLGFBQVEsR0FBUixRQUFRLENBQVk7UUFDcEIsa0JBQWEsR0FBYixhQUFhLENBQWM7UUFKaEMseUJBQW9CLEdBQUcsS0FBSyxDQUFDO0lBS3BDLENBQUM7SUFFTSxXQUFXLENBQUMsU0FBYztRQUM3QixJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ2pCO0lBRUwsQ0FBQztJQUVNLFdBQVc7UUFDZCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVPLEtBQUssQ0FBQyxNQUFNO1FBQ2hCLHdCQUF3QjtRQUN4QixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLG9CQUFvQjtRQUNwQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVPLE1BQU07UUFDVixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUVuQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNkLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUMzQixHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDaEIsSUFBSSxFQUFFLEtBQUs7U0FDZCxFQUFFO1lBQ0MsbUNBQW1DO1lBQ25DLDhIQUE4SDtZQUM5SCxpQkFBaUIsRUFBRSxLQUFLO1NBQzNCLENBQUMsQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBNkIsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkcsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUEyQixDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRWpCLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztRQUV0QixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEtBQWdDLEVBQUUsRUFBRTtZQUNqRSxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFO2dCQUM5QixJQUFJLGFBQWEsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFO29CQUN0QyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztvQkFDcEMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO3dCQUNkLG9DQUFvQzt3QkFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztxQkFDM0I7aUJBQ0o7YUFDSjtRQUNMLENBQUMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO1lBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUVqQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFBO1FBR0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVPLE9BQU8sQ0FBQyxVQUFvQjtRQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFFakIsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDYixzQkFBc0I7YUFDekI7U0FDSjtJQUNMLENBQUM7O21IQXhGUSxxQkFBcUI7dUdBQXJCLHFCQUFxQiw2SENoQmxDLGtHQUtBOzRGRFdhLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDSSxnQkFBZ0I7NEhBS2pCLE1BQU07c0JBQWQsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPdXRwdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgU2NyaXB0TG9hZGVyIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NjcmlwdC5sb2FkZXIuc2VydmljZVwiO1xuaW1wb3J0IHsgUGxheWVyQ29udHJvbCB9IGZyb20gXCIuLi9wbGF5ZXIuY29udHJvbFwiO1xuaW1wb3J0IHsgRmx2SnMgfSBmcm9tIFwiLi9mbHZcIlxuXG5kZWNsYXJlIHZhciBmbHZqczoge1xuICAgIGNyZWF0ZVBsYXllcihtZWRpYURhdGFTb3VyY2U6IEZsdkpzLk1lZGlhRGF0YVNvdXJjZSwgY29uZmlnPzogRmx2SnMuQ29uZmlnKTogRmx2SnMuUGxheWVyO1xuICAgIGlzU3VwcG9ydGVkKCk6IGJvb2xlYW47XG4gICAgZ2V0RmVhdHVyZUxpc3QoKTogRmx2SnMuRmVhdHVyZUxpc3Q7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnemVuLWZsdi1wbGF5ZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mbHYtcGxheWVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9mbHYtcGxheWVyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgWmVuRmx2UGxheWVyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICAgIEBJbnB1dCgpIHNvdXJjZSE6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGNvbnRyb2w/OiBQbGF5ZXJDb250cm9sO1xuXG4gICAgcHJpdmF0ZSBfZmx2ITogRmx2SnMuUGxheWVyIHwgbnVsbDtcblxuICAgIHB1YmxpYyBJc1ZpZGVvRmlsdGVyVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9zY3JpcHRMb2FkZXI6IFNjcmlwdExvYWRlcikge1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VPYmo6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlT2JqLnNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJlbG9hZCgpIHtcbiAgICAgICAgLy8gbG9hZCB0aGUgc2NyaXB0IGZpcnN0XG4gICAgICAgIGF3YWl0IHRoaXMuX3NjcmlwdExvYWRlci5sb2FkU2NyaXB0KFwiZmx2XCIpO1xuICAgICAgICAvLyB1cGRhdGUgdGhlIHBsYXllclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3koQm9vbGVhbih0aGlzLnNvdXJjZSkpO1xuXG4gICAgICAgIGlmICghdGhpcy5zb3VyY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2ZsdiA9IGZsdmpzLmNyZWF0ZVBsYXllcih7XG4gICAgICAgICAgICB1cmw6IHRoaXMuc291cmNlLFxuICAgICAgICAgICAgdHlwZTogXCJmbHZcIlxuICAgICAgICB9LCB7XG4gICAgICAgICAgICAvLyBFbmFibGUvRGlzYWJsZSBJTyBzdGFzaCBidWZmZXIuIFxuICAgICAgICAgICAgLy8gU2V0IHRvIGZhbHNlIGlmIHlvdSBuZWVkIHJlYWx0aW1lIChtaW5pbWFsIGxhdGVuY3kpIGZvciBsaXZlIHN0cmVhbSBwbGF5YmFjaywgYnV0IG1heSBzdGFsbGVkIGlmIHRoZXJlJ3MgbmV0d29yayBqaXR0ZXJpbmcuXG4gICAgICAgICAgICBlbmFibGVTdGFzaEJ1ZmZlcjogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSAodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5nZXRFbGVtZW50c0J5VGFnTmFtZShcInZpZGVvXCIpLml0ZW0oMCk7XG4gICAgICAgIHRoaXMuX2Zsdi5hdHRhY2hNZWRpYUVsZW1lbnQoZWxlbWVudCBhcyBIVE1MVmlkZW9FbGVtZW50KTtcbiAgICAgICAgdGhpcy5fZmx2LmxvYWQoKTtcbiAgICAgICAgdGhpcy5fZmx2LnBsYXkoKTtcblxuICAgICAgICBsZXQgcHJldmlvdXNGcmFtZSA9IDA7XG5cbiAgICAgICAgdGhpcy5fZmx2Lm9uKFwic3RhdGlzdGljc19pbmZvXCIsIChldmVudDogeyBkZWNvZGVkRnJhbWVzOiBudW1iZXIgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LmRlY29kZWRGcmFtZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNGcmFtZSAhPSBldmVudC5kZWNvZGVkRnJhbWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzRnJhbWUgPSBldmVudC5kZWNvZGVkRnJhbWVzO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmaXJlZCBldmVudCB3aGVuIHZpZGVvIGlzIHBsYXlpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5FbWl0RGF0YSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMuX2Zsdi5vbihcImxvYWRpbmdfY29tcGxldGVcIiwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJsb2FkaW5nIGNvbXBsZXRlZFwiKTtcblxuICAgICAgICAgICAgdGhpcy5kZXN0cm95KHRydWUpO1xuICAgICAgICB9KVxuXG5cbiAgICAgICAgY29uc29sZS5sb2coYENyZWF0ZWQgdGhlIGZsdiBwbGF5ZXIgZm9yIHNvdXJjZSBcIiR7dGhpcy5zb3VyY2V9XCJgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3koc2tpcE5vdGlmeT86IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX2Zsdikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJEZXN0cm95ZWQgdGhlIGZsdiBwbGF5ZXJcIik7XG4gICAgICAgICAgICB0aGlzLl9mbHYucGF1c2UoKTtcbiAgICAgICAgICAgIHRoaXMuX2Zsdi51bmxvYWQoKTtcbiAgICAgICAgICAgIHRoaXMuX2Zsdi5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLl9mbHYgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIXNraXBOb3RpZnkpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLm9uU3RvcC5lbWl0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuIiwiPGRpdiBjbGFzcz1cImZsdi1wbGF5ZXItY29tcG9uZW50XCI+XG4gICAgPHZpZGVvIGNvbnRyb2xzXG4gICAgICAgICAgIG11dGVkPjwvdmlkZW8+XG5cbjwvZGl2PlxuIl19
@@ -0,0 +1,19 @@
1
+ /*
2
+ * Copyright (C) 2016 Bilibili. All Rights Reserved.
3
+ *
4
+ * @author zheng qian <xqq@xqq.im>
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+ export {};
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmx2LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctemVuZHVpdC9zcmMvbGliL2xpdmUtdmlldy1wbGF5ZXIvZmx2LXBsYXllci9mbHYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkciLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE2IEJpbGliaWxpLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIEBhdXRob3IgemhlbmcgcWlhbiA8eHFxQHhxcS5pbT5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8gZmx2LmpzIFR5cGVTY3JpcHQgZGVmaW5pdGlvbiBmaWxlXG5cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBGbHZKcyB7XG4gICAgaW50ZXJmYWNlIE1lZGlhU2VnbWVudCB7XG4gICAgICAgIGR1cmF0aW9uOiBudW1iZXI7XG4gICAgICAgIGZpbGVzaXplPzogbnVtYmVyO1xuICAgICAgICB1cmw6IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgTWVkaWFEYXRhU291cmNlIHtcbiAgICAgICAgdHlwZTogc3RyaW5nO1xuICAgICAgICBpc0xpdmU/OiBib29sZWFuO1xuICAgICAgICBjb3JzPzogYm9vbGVhbjtcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcblxuICAgICAgICBoYXNBdWRpbz86IGJvb2xlYW47XG4gICAgICAgIGhhc1ZpZGVvPzogYm9vbGVhbjtcblxuICAgICAgICBkdXJhdGlvbj86IG51bWJlcjtcbiAgICAgICAgZmlsZXNpemU/OiBudW1iZXI7XG4gICAgICAgIHVybD86IHN0cmluZztcblxuICAgICAgICBzZWdtZW50cz86IE1lZGlhU2VnbWVudFtdO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBDb25maWcge1xuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2MgRW5hYmxlIHNlcGFyYXRlZCB0aHJlYWQgZm9yIHRyYW5zbXV4aW5nICh1bnN0YWJsZSBmb3Igbm93KVxuICAgICAgICAgKiBAZGVmYXVsdHZhbHVlIGZhbHNlXG4gICAgICAgICAqL1xuICAgICAgICBlbmFibGVXb3JrZXI/OiBib29sZWFuO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2MgRW5hYmxlIElPIHN0YXNoIGJ1ZmZlci4gU2V0IHRvIGZhbHNlIGlmIHlvdSBuZWVkIHJlYWx0aW1lIChtaW5pbWFsIGxhdGVuY3kpIGZvciBsaXZlIHN0cmVhbVxuICAgICAgICAgKiAgICAgICAgICBwbGF5YmFjaywgYnV0IG1heSBzdGFsbGVkIGlmIHRoZXJlJ3MgbmV0d29yayBqaXR0ZXJpbmcuXG4gICAgICAgICAqIEBkZWZhdWx0dmFsdWUgdHJ1ZVxuICAgICAgICAgKi9cbiAgICAgICAgZW5hYmxlU3Rhc2hCdWZmZXI/OiBib29sZWFuO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2MgSW5kaWNhdGVzIElPIHN0YXNoIGJ1ZmZlciBpbml0aWFsIHNpemUuIERlZmF1bHQgaXMgYDM4NEtCYC4gSW5kaWNhdGUgYSBzdWl0YWJsZSBzaXplIGNhblxuICAgICAgICAgKiAgICAgICAgICBpbXByb3ZlIHZpZGVvIGxvYWQvc2VlayB0aW1lLlxuICAgICAgICAgKi9cbiAgICAgICAgc3Rhc2hJbml0aWFsU2l6ZT86IG51bWJlcjtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2MgU2FtZSB0byBgaXNMaXZlYCBpbiAqKk1lZGlhRGF0YVNvdXJjZSoqLCBpZ25vcmVkIGlmIGhhcyBiZWVuIHNldCBpbiBNZWRpYURhdGFTb3VyY2Ugc3RydWN0dXJlLlxuICAgICAgICAgKiBAZGVmYXVsdHZhbHVlIGZhbHNlXG4gICAgICAgICAqL1xuICAgICAgICBpc0xpdmU/OiBib29sZWFuO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVzYyBBYm9ydCB0aGUgaHR0cCBjb25uZWN0aW9uIGlmIHRoZXJlJ3MgZW5vdWdoIGRhdGEgZm9yIHBsYXliYWNrLlxuICAgICAgICAgKiBAZGVmYXVsdHZhbHVlIHRydWVcbiAgICAgICAgICovXG4gICAgICAgIGxhenlMb2FkPzogYm9vbGVhbjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXNjIEluZGljYXRlcyBob3cgbWFueSBzZWNvbmRzIG9mIGRhdGEgdG8gYmUga2VwdCBmb3IgYGxhenlMb2FkYC5cbiAgICAgICAgICogQGRlZmF1bHR2YWx1ZSAzICogNjBcbiAgICAgICAgICovXG4gICAgICAgIGxhenlMb2FkTWF4RHVyYXRpb24/OiBudW1iZXI7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVzYyBJbmRpY2F0ZXMgdGhlIGBsYXp5TG9hZGAgcmVjb3ZlciB0aW1lIGJvdW5kYXJ5IGluIHNlY29uZHMuXG4gICAgICAgICAqIEBkZWZhdWx0dmFsdWUgMzBcbiAgICAgICAgICovXG4gICAgICAgIGxhenlMb2FkUmVjb3ZlckR1cmF0aW9uPzogbnVtYmVyO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2MgRG8gbG9hZCBhZnRlciBNZWRpYVNvdXJjZSBgc291cmNlb3BlbmAgZXZlbnQgdHJpZ2dlcmVkLiBPbiBDaHJvbWUsIHRhYnMgd2hpY2hcbiAgICAgICAgICogICAgICAgICAgYmUgb3BlbmVkIGluIGJhY2tncm91bmQgbWF5IG5vdCB0cmlnZ2VyIGBzb3VyY2VvcGVuYCBldmVudCB1bnRpbCBzd2l0Y2hlZCB0byB0aGF0IHRhYi5cbiAgICAgICAgICogQGRlZmF1bHR2YWx1ZSB0cnVlXG4gICAgICAgICAqL1xuICAgICAgICBkZWZlckxvYWRBZnRlclNvdXJjZU9wZW4/OiBib29sZWFuO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVzYyBEbyBhdXRvIGNsZWFudXAgZm9yIFNvdXJjZUJ1ZmZlclxuICAgICAgICAgKiBAZGVmYXVsdHZhbHVlIGZhbHNlIChmcm9tIGRvY3MpXG4gICAgICAgICAqL1xuICAgICAgICBhdXRvQ2xlYW51cFNvdXJjZUJ1ZmZlcj86IGJvb2xlYW47XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVzYyBXaGVuIGJhY2t3YXJkIGJ1ZmZlciBkdXJhdGlvbiBleGNlZWRlZCB0aGlzIHZhbHVlIChpbiBzZWNvbmRzKSwgZG8gYXV0byBjbGVhbnVwIGZvciBTb3VyY2VCdWZmZXJcbiAgICAgICAgICogQGRlZmF1bHR2YWx1ZSAzICogNjBcbiAgICAgICAgICovXG4gICAgICAgIGF1dG9DbGVhbnVwTWF4QmFja3dhcmREdXJhdGlvbj86IG51bWJlcjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXNjIEluZGljYXRlcyB0aGUgZHVyYXRpb24gaW4gc2Vjb25kcyB0byByZXNlcnZlIGZvciBiYWNrd2FyZCBidWZmZXIgd2hlbiBkb2luZyBhdXRvIGNsZWFudXAuXG4gICAgICAgICAqIEBkZWZhdWx0dmFsdWUgMiAqIDYwXG4gICAgICAgICAqL1xuICAgICAgICBhdXRvQ2xlYW51cE1pbkJhY2t3YXJkRHVyYXRpb24/OiBudW1iZXI7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZWZhdWx0dmFsdWUgNjAwXG4gICAgICAgICAqL1xuICAgICAgICBzdGF0aXN0aWNzSW5mb1JlcG9ydEludGVydmFsPzogbnVtYmVyO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVzYyBGaWxsIHNpbGVudCBhdWRpbyBmcmFtZXMgdG8gYXZvaWQgYS92IHVuc3luYyB3aGVuIGRldGVjdCBsYXJnZSBhdWRpbyB0aW1lc3RhbXAgZ2FwLlxuICAgICAgICAgKiBAZGVmYXVsdHZhbHVlIHRydWVcbiAgICAgICAgICovXG4gICAgICAgIGZpeEF1ZGlvVGltZXN0YW1wR2FwPzogYm9vbGVhbjtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2MgQWNjdXJhdGUgc2VlayB0byBhbnkgZnJhbWUsIG5vdCBsaW1pdGVkIHRvIHZpZGVvIElEUiBmcmFtZSwgYnV0IG1heSBhIGJpdCBzbG93ZXIuXG4gICAgICAgICAqICAgICAgICAgIEF2YWlsYWJsZSBvbiBDaHJvbWUgPiA1MCwgRmlyZUZveCBhbmQgU2FmYXJpLlxuICAgICAgICAgKiBAZGVmYXVsdHZhbHVlIGZhbHNlXG4gICAgICAgICAqL1xuICAgICAgICBhY2N1cmF0ZVNlZWs/OiBib29sZWFuO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2MgJ3JhbmdlJyB1c2UgcmFuZ2UgcmVxdWVzdCB0byBzZWVrLCBvciAncGFyYW0nIGFkZCBwYXJhbXMgaW50byB1cmwgdG8gaW5kaWNhdGUgcmVxdWVzdCByYW5nZS5cbiAgICAgICAgICogQGRlZmF1bHR2YWx1ZSAncmFuZ2UnXG4gICAgICAgICAqL1xuICAgICAgICBzZWVrVHlwZT86ICdyYW5nZScgfCAncGFyYW0nIHwgJ2N1c3RvbSc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVzYyBJbmRpY2F0ZXMgc2VlayBzdGFydCBwYXJhbWV0ZXIgbmFtZSBmb3Igc2Vla1R5cGUgPSAncGFyYW0nXG4gICAgICAgICAqIEBkZWZhdWx0dmFsdWUgJ2JzdGFydCdcbiAgICAgICAgICovXG4gICAgICAgIHNlZWtQYXJhbVN0YXJ0Pzogc3RyaW5nO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2MgSW5kaWNhdGVzIHNlZWsgZW5kIHBhcmFtZXRlciBuYW1lIGZvciBzZWVrVHlwZSA9ICdwYXJhbSdcbiAgICAgICAgICogQGRlZmF1bHR2YWx1ZSAnYmVuZCdcbiAgICAgICAgICovXG4gICAgICAgIHNlZWtQYXJhbUVuZD86IHN0cmluZztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXNjIFNlbmQgUmFuZ2U6IGJ5dGVzPTAtIGZvciBmaXJzdCB0aW1lIGxvYWQgaWYgdXNlIFJhbmdlIHNlZWtcbiAgICAgICAgICogQGRlZmF1bHR2YWx1ZSBmYWxzZVxuICAgICAgICAgKi9cbiAgICAgICAgcmFuZ2VMb2FkWmVyb1N0YXJ0PzogYm9vbGVhbjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXNjIEluZGljYXRlcyBhIGN1c3RvbSBzZWVrIGhhbmRsZXJcbiAgICAgICAgICogQGRlc2MgU2hvdWxkIGltcGxlbWVudCBgU2Vla0hhbmRsZXJgIGludGVyZmFjZVxuICAgICAgICAgKi9cbiAgICAgICAgY3VzdG9tU2Vla0hhbmRsZXI/OiBDdXN0b21TZWVrSGFuZGxlckNvbnN0cnVjdG9yO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2MgUmV1c2UgMzAxLzMwMiByZWRpcmVjdGVkIHVybCBmb3Igc3Vic2VxdWVuY2UgcmVxdWVzdCBsaWtlIHNlZWssIHJlY29ubmVjdCwgZXRjLlxuICAgICAgICAgKiBAZGVmYXVsdHZhbHVlIGZhbHNlXG4gICAgICAgICAqL1xuICAgICAgICByZXVzZVJlZGlyZWN0ZWRVUkw/OiBib29sZWFuO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2MgSW5kaWNhdGVzIHRoZSBSZWZlcnJlciBQb2xpY3kgd2hlbiB1c2luZyBGZXRjaFN0cmVhbUxvYWRlclxuICAgICAgICAgKiBAZGVmYXVsdHZhbHVlICduby1yZWZlcnJlci13aGVuLWRvd25ncmFkZScgKGZyb20gZG9jcylcbiAgICAgICAgICovXG4gICAgICAgIHJlZmVycmVyUG9saWN5PzogUmVmZXJyZXJQb2xpY3k7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVzYyBJbmRpY2F0ZXMgYWRkaXRpb25hbCBoZWFkZXJzIHRoYXQgd2lsbCBiZSBhZGRlZCB0byByZXF1ZXN0XG4gICAgICAgICAqL1xuICAgICAgICBoZWFkZXJzPzoge1xuICAgICAgICAgICAgW2s6IHN0cmluZ106IHN0cmluZ1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVzYyBTaG91bGQgaW1wbGVtZW50IGBCYXNlTG9hZGVyYCBpbnRlcmZhY2VcbiAgICAgICAgICovXG4gICAgICAgIGN1c3RvbUxvYWRlcj86IEN1c3RvbUxvYWRlckNvbnN0cnVjdG9yO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBDdXN0b21TZWVrSGFuZGxlckNvbnN0cnVjdG9yIHtcbiAgICAgICAgbmV3KCk6IFNlZWtIYW5kbGVyO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBTZWVrSGFuZGxlciB7XG4gICAgICAgIGdldENvbmZpZyhzb3VyY2VVUkw6IHN0cmluZywgcmFuZ2U6IFJhbmdlKTogU2Vla0NvbmZpZztcbiAgICAgICAgcmVtb3ZlVVJMUGFyYW1ldGVycyh1cmw6IHN0cmluZyk6IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgU2Vla0NvbmZpZyB7XG4gICAgICAgIHVybDogc3RyaW5nO1xuICAgICAgICBoZWFkZXJzOiBIZWFkZXJzIHwgb2JqZWN0O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBCYXNlTG9hZGVyQ29uc3RydWN0b3Ige1xuICAgICAgICBuZXcodHlwZU5hbWU6IHN0cmluZyk6IEJhc2VMb2FkZXI7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIEJhc2VMb2FkZXIge1xuICAgICAgICBfc3RhdHVzOiBudW1iZXI7XG4gICAgICAgIF9uZWVkU3Rhc2g6IGJvb2xlYW47XG5cbiAgICAgICAgZGVzdHJveSgpOiB2b2lkO1xuICAgICAgICBpc1dvcmtpbmcoKTogYm9vbGVhbjtcbiAgICAgICAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuICAgICAgICByZWFkb25seSBzdGF0dXM6IG51bWJlcjtcbiAgICAgICAgcmVhZG9ubHkgbmVlZFN0YXNoQnVmZmVyOiBib29sZWFuO1xuICAgICAgICBvbkNvbnRlbnRMZW5ndGhLbm93bjogKGNvbnRlbnRMZW5ndGg6IG51bWJlcikgPT4gdm9pZDtcbiAgICAgICAgb25VUkxSZWRpcmVjdDogKHJlZGlyZWN0ZWRVUkw6IHN0cmluZykgPT4gdm9pZDtcbiAgICAgICAgb25EYXRhQXJyaXZhbDogKGNodW5rOiBBcnJheUJ1ZmZlciwgYnl0ZVN0YXJ0OiBudW1iZXIsIHJlY2VpdmVkTGVuZ3RoPzogbnVtYmVyKSA9PiB2b2lkO1xuICAgICAgICBvbkVycm9yOiAoZXJyb3JUeXBlOiBMb2FkZXJFcnJvcnMsIGVycm9ySW5mbzogTG9hZGVyRXJyb3JNZXNzYWdlKSA9PiB2b2lkO1xuICAgICAgICBvbkNvbXBsZXRlOiAocmFuZ2VGcm9tOiBudW1iZXIsIHJhbmdlVG86IG51bWJlcikgPT4gdm9pZDtcbiAgICAgICAgb3BlbihkYXRhU291cmNlOiBNZWRpYVNlZ21lbnQsIHJhbmdlOiBSYW5nZSk6IHZvaWQ7XG4gICAgICAgIGFib3J0KCk6IHZvaWQ7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIEN1c3RvbUxvYWRlckNvbnN0cnVjdG9yIHtcbiAgICAgICAgbmV3KHNlZWtIYW5kbGVyOiBTZWVrSGFuZGxlciwgY29uZmlnOiBDb25maWcpOiBCYXNlTG9hZGVyO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBSYW5nZSB7XG4gICAgICAgIGZyb206IG51bWJlcjtcbiAgICAgICAgdG86IG51bWJlcjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgTG9hZGVyU3RhdHVzIHtcbiAgICAgICAgcmVhZG9ubHkga0lkbGU6IDA7XG4gICAgICAgIHJlYWRvbmx5IGtDb25uZWN0aW5nOiAxO1xuICAgICAgICByZWFkb25seSBrQnVmZmVyaW5nOiAyO1xuICAgICAgICByZWFkb25seSBrRXJyb3I6IDM7XG4gICAgICAgIHJlYWRvbmx5IGtDb21wbGV0ZTogNDtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgTG9hZGVyRXJyb3JzIHtcbiAgICAgICAgcmVhZG9ubHkgT0s6ICdPSyc7XG4gICAgICAgIHJlYWRvbmx5IEVYQ0VQVElPTjogJ0V4Y2VwdGlvbic7XG4gICAgICAgIHJlYWRvbmx5IEhUVFBfU1RBVFVTX0NPREVfSU5WQUxJRDogJ0h0dHBTdGF0dXNDb2RlSW52YWxpZCc7XG4gICAgICAgIHJlYWRvbmx5IENPTk5FQ1RJTkdfVElNRU9VVDogJ0Nvbm5lY3RpbmdUaW1lb3V0JztcbiAgICAgICAgcmVhZG9ubHkgRUFSTFlfRU9GOiAnRWFybHlFb2YnO1xuICAgICAgICByZWFkb25seSBVTlJFQ09WRVJBQkxFX0VBUkxZX0VPRjogJ1VucmVjb3ZlcmFibGVFYXJseUVvZic7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIExvYWRlckVycm9yTWVzc2FnZSB7XG4gICAgICAgIGNvZGU6IG51bWJlcjtcbiAgICAgICAgbXNnOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIEZlYXR1cmVMaXN0IHtcbiAgICAgICAgbXNlRmx2UGxheWJhY2s6IGJvb2xlYW47XG4gICAgICAgIG1zZUxpdmVGbHZQbGF5YmFjazogYm9vbGVhbjtcbiAgICAgICAgbmV0d29ya1N0cmVhbUlPOiBib29sZWFuO1xuICAgICAgICBuZXR3b3JrTG9hZGVyTmFtZTogc3RyaW5nO1xuICAgICAgICBuYXRpdmVNUDRIMjY0UGxheWJhY2s6IGJvb2xlYW47XG4gICAgICAgIG5hdGl2ZVdlYm1WUDhQbGF5YmFjazogYm9vbGVhbjtcbiAgICAgICAgbmF0aXZlV2VibVZQOVBsYXliYWNrOiBib29sZWFuO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBQbGF5ZXJDb25zdHJ1Y3RvciB7XG4gICAgICAgIG5ldyAobWVkaWFEYXRhU291cmNlOiBNZWRpYURhdGFTb3VyY2UsIGNvbmZpZz86IENvbmZpZyk6IFBsYXllcjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgUGxheWVyIHtcbiAgICAgICAgZGVzdHJveSgpOiB2b2lkO1xuICAgICAgICBvbihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZDtcbiAgICAgICAgb2ZmKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB2b2lkO1xuICAgICAgICBhdHRhY2hNZWRpYUVsZW1lbnQobWVkaWFFbGVtZW50OiBIVE1MTWVkaWFFbGVtZW50KTogdm9pZDtcbiAgICAgICAgZGV0YWNoTWVkaWFFbGVtZW50KCk6IHZvaWQ7XG4gICAgICAgIGxvYWQoKTogdm9pZDtcbiAgICAgICAgdW5sb2FkKCk6IHZvaWQ7XG4gICAgICAgIHBsYXkoKTogUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gICAgICAgIHBhdXNlKCk6IHZvaWQ7XG4gICAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgICAgYnVmZmVyZWQ6IFRpbWVSYW5nZXM7XG4gICAgICAgIGR1cmF0aW9uOiBudW1iZXI7XG4gICAgICAgIHZvbHVtZTogbnVtYmVyO1xuICAgICAgICBtdXRlZDogYm9vbGVhbjtcbiAgICAgICAgY3VycmVudFRpbWU6IG51bWJlcjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXByZWNhdGVkIEZsdlBsYXllci9OYXRpdmVQbGF5ZXIgaGF2ZSBpdHMgb3duIGBtZWRpYUluZm9gIGZpZWxkLlxuICAgICAgICAgKiBAZGVzYyBLZWVwIGl0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgICAgICAgKiBAc2luY2UgMS40XG4gICAgICAgICAqL1xuICAgICAgICBtZWRpYUluZm86IE5hdGl2ZVBsYXllck1lZGlhSW5mbyB8IEZsdlBsYXllck1lZGlhSW5mbztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXByZWNhdGVkIEZsdlBsYXllci9OYXRpdmVQbGF5ZXIgaGF2ZSBpdHMgb3duIGBzdGF0aXN0aWNzSW5mb2AgZmllbGQuXG4gICAgICAgICAqIEBkZXNjIEtlZXAgaXQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgICAgICAqIEBzaW5jZSAxLjRcbiAgICAgICAgICovXG4gICAgICAgIHN0YXRpc3RpY3NJbmZvOiBOYXRpdmVQbGF5ZXJTdGF0aXN0aWNzSW5mbyB8IEZsdlBsYXllclN0YXRpc3RpY3NJbmZvO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBOYXRpdmVQbGF5ZXJTdGF0aXN0aWNzSW5mbyB7XG4gICAgICAgIHBsYXllclR5cGU6ICdOYXRpdmVQbGF5ZXInO1xuICAgICAgICB1cmw6IHN0cmluZztcbiAgICAgICAgZGVjb2RlZEZyYW1lcz86IG51bWJlcjtcbiAgICAgICAgZHJvcHBlZEZyYW1lcz86IG51bWJlcjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgRmx2UGxheWVyUmVwb3J0U3RhdGlzdGljc0luZm8ge1xuICAgICAgICB1cmw6IHN0cmluZztcbiAgICAgICAgaGFzUmVkaXJlY3Q6IGJvb2xlYW47XG4gICAgICAgIHJlZGlyZWN0ZWRVUkw/OiBzdHJpbmc7XG4gICAgICAgIHNwZWVkOiBudW1iZXI7IC8vIEtCL3NcbiAgICAgICAgbG9hZGVyVHlwZTogc3RyaW5nO1xuICAgICAgICBjdXJyZW50U2VnbWVudEluZGV4OiBudW1iZXI7XG4gICAgICAgIHRvdGFsU2VnbWVudENvdW50OiBudW1iZXI7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIEZsdlBsYXllclN0YXRpc3RpY3NJbmZvIGV4dGVuZHMgUGFydGlhbDxGbHZQbGF5ZXJSZXBvcnRTdGF0aXN0aWNzSW5mbz4ge1xuICAgICAgICBwbGF5ZXJUeXBlOiAnRmx2UGxheWVyJztcbiAgICAgICAgZGVjb2RlZEZyYW1lcz86IG51bWJlcjtcbiAgICAgICAgZHJvcHBlZEZyYW1lcz86IG51bWJlcjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgTmF0aXZlUGxheWVyTWVkaWFJbmZvIHtcbiAgICAgICAgbWltZVR5cGU6IHN0cmluZztcbiAgICAgICAgZHVyYXRpb24/OiBudW1iZXI7XG4gICAgICAgIHdpZHRoPzogbnVtYmVyO1xuICAgICAgICBoZWlnaHQ/OiBudW1iZXI7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIEZsdlBsYXllck1lZGlhSW5mbyBleHRlbmRzIE5hdGl2ZVBsYXllck1lZGlhSW5mbyB7XG4gICAgICAgIGF1ZGlvQ29kZWM/OiBzdHJpbmc7XG4gICAgICAgIHZpZGVvQ29kZWM/OiBzdHJpbmc7XG4gICAgICAgIGF1ZGlvRGF0YVJhdGU/OiBudW1iZXI7XG4gICAgICAgIHZpZGVvRGF0YVJhdGU/OiBudW1iZXI7XG4gICAgICAgIGhhc0F1ZGlvPzogYm9vbGVhbjtcbiAgICAgICAgaGFzVmlkZW8/OiBib29sZWFuO1xuICAgICAgICBjaHJvbWFGb3JtYXQ/OiBzdHJpbmc7XG4gICAgICAgIGZwcz86IG51bWJlcjtcblxuICAgICAgICBbazogc3RyaW5nXTogYW55O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBGbHZQbGF5ZXIgZXh0ZW5kcyBQbGF5ZXIge1xuICAgICAgICBtZWRpYUluZm86IEZsdlBsYXllck1lZGlhSW5mbztcbiAgICAgICAgc3RhdGlzdGljc0luZm86IEZsdlBsYXllclN0YXRpc3RpY3NJbmZvO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBOYXRpdmVQbGF5ZXIgZXh0ZW5kcyBQbGF5ZXIge1xuICAgICAgICBtZWRpYUluZm86IE5hdGl2ZVBsYXllck1lZGlhSW5mbztcbiAgICAgICAgc3RhdGlzdGljc0luZm86IE5hdGl2ZVBsYXllclN0YXRpc3RpY3NJbmZvO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBMb2dnaW5nQ29udHJvbENvbmZpZyB7XG4gICAgICAgIGZvcmNlR2xvYmFsVGFnOiBib29sZWFuO1xuICAgICAgICBnbG9iYWxUYWc6IHN0cmluZztcbiAgICAgICAgZW5hYmxlQWxsOiBib29sZWFuO1xuICAgICAgICBlbmFibGVEZWJ1ZzogYm9vbGVhbjtcbiAgICAgICAgZW5hYmxlVmVyYm9zZTogYm9vbGVhbjtcbiAgICAgICAgZW5hYmxlSW5mbzogYm9vbGVhbjtcbiAgICAgICAgZW5hYmxlV2FybjogYm9vbGVhbjtcbiAgICAgICAgZW5hYmxlRXJyb3I6IGJvb2xlYW47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIExvZ2dpbmdDb250cm9sIGV4dGVuZHMgTG9nZ2luZ0NvbnRyb2xDb25maWcge1xuICAgICAgICBnZXRDb25maWcoKTogTG9nZ2luZ0NvbnRyb2xDb25maWc7XG4gICAgICAgIGFwcGx5Q29uZmlnKGNvbmZpZzogUGFydGlhbDxMb2dnaW5nQ29udHJvbENvbmZpZz4pOiB2b2lkO1xuICAgICAgICBhZGRMb2dMaXN0ZW5lcihsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZDtcbiAgICAgICAgcmVtb3ZlTG9nTGlzdGVuZXIobGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHZvaWQ7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIEV2ZW50cyB7XG4gICAgICAgIEVSUk9SOiBzdHJpbmc7XG4gICAgICAgIExPQURJTkdfQ09NUExFVEU6IHN0cmluZztcbiAgICAgICAgUkVDT1ZFUkVEX0VBUkxZX0VPRjogc3RyaW5nO1xuICAgICAgICBNRURJQV9JTkZPOiBzdHJpbmc7XG4gICAgICAgIE1FVEFEQVRBX0FSUklWRUQ6IHN0cmluZztcbiAgICAgICAgU0NSSVBUREFUQV9BUlJJVkVEOiBzdHJpbmc7XG4gICAgICAgIFNUQVRJU1RJQ1NfSU5GTzogc3RyaW5nO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBFcnJvclR5cGVzIHtcbiAgICAgICAgTkVUV09SS19FUlJPUjogc3RyaW5nO1xuICAgICAgICBNRURJQV9FUlJPUjogc3RyaW5nO1xuICAgICAgICBPVEhFUl9FUlJPUjogc3RyaW5nO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBFcnJvckRldGFpbHMge1xuICAgICAgICBORVRXT1JLX0VYQ0VQVElPTjogc3RyaW5nO1xuICAgICAgICBORVRXT1JLX1NUQVRVU19DT0RFX0lOVkFMSUQ6IHN0cmluZztcbiAgICAgICAgTkVUV09SS19USU1FT1VUOiBzdHJpbmc7XG4gICAgICAgIE5FVFdPUktfVU5SRUNPVkVSQUJMRV9FQVJMWV9FT0Y6IHN0cmluZztcblxuICAgICAgICBNRURJQV9NU0VfRVJST1I6IHN0cmluZztcblxuICAgICAgICBNRURJQV9GT1JNQVRfRVJST1I6IHN0cmluZztcbiAgICAgICAgTUVESUFfRk9STUFUX1VOU1VQUE9SVEVEOiBzdHJpbmc7XG4gICAgICAgIE1FRElBX0NPREVDX1VOU1VQUE9SVEVEOiBzdHJpbmc7XG4gICAgfVxufVxuXG4iXX0=
@@ -0,0 +1,140 @@
1
+ import HLS from "hls.js";
2
+ import { Component, Input, ViewChild } from "@angular/core";
3
+ import { Thread } from "../../core/thread";
4
+ import * as i0 from "@angular/core";
5
+ export class ZenHlsPlayerComponent {
6
+ constructor() {
7
+ this.isVideoFilterVisible = false;
8
+ this._hls = null;
9
+ this._isDestroyed = false;
10
+ }
11
+ ngOnChanges(changeObj) {
12
+ if (this.source) {
13
+ this.reload();
14
+ }
15
+ if (changeObj.control &&
16
+ changeObj.control.currentValue) {
17
+ this.setControl(changeObj.control.currentValue);
18
+ }
19
+ }
20
+ ngOnDestroy() {
21
+ this._isDestroyed = true;
22
+ this.destroy();
23
+ }
24
+ async reload() {
25
+ if (!this.source) {
26
+ return;
27
+ }
28
+ if (this._isDestroyed) {
29
+ return;
30
+ }
31
+ if (!this._video) {
32
+ // wait for component
33
+ await this.waitForComponent();
34
+ }
35
+ if (!this._video || this._isDestroyed) {
36
+ return;
37
+ }
38
+ if (!HLS.isSupported()) {
39
+ console.log("HLS not supported. Set url to the native video player");
40
+ // just attached the link to video player
41
+ this._video.nativeElement.src = this.source;
42
+ return;
43
+ }
44
+ // destroy previous
45
+ this.destroy();
46
+ console.log(`[HlsPlayerComponent] start playing for the source [${this.source}]`);
47
+ // HLS configuration: https://github.com/video-dev/hls.js/blob/v1.3.0/docs/API.md
48
+ this._hls = new HLS({
49
+ fragLoadingTimeOut: 10000,
50
+ manifestLoadingMaxRetry: 3,
51
+ manifestLoadingTimeOut: 10000,
52
+ manifestLoadingMaxRetryTimeout: 10000,
53
+ maxBufferHole: 10,
54
+ lowLatencyMode: false,
55
+ fragLoadingMaxRetry: 1,
56
+ // backBufferLength: 90,
57
+ autoStartLoad: true,
58
+ testBandwidth: false
59
+ });
60
+ this._hls.attachMedia(this._video.nativeElement);
61
+ this._hls.loadSource(this.source);
62
+ this._hls.on(HLS.Events.FRAG_LOADED, () => {
63
+ // fired event when video is playing
64
+ this.onData();
65
+ });
66
+ this._hls.on(HLS.Events.ERROR, (err, data) => {
67
+ if (data.fatal) {
68
+ console.error("HLS error:", err, data);
69
+ // reload source
70
+ console.log("HLS reload source");
71
+ this.destroy();
72
+ this.reload();
73
+ }
74
+ });
75
+ console.log(`Created the hls player for source "${this.source}"`);
76
+ }
77
+ async waitForComponent() {
78
+ while (!this._video) {
79
+ await Thread.sleep(100);
80
+ if (this._isDestroyed) {
81
+ return;
82
+ }
83
+ }
84
+ }
85
+ setControl(control) {
86
+ if (this.control) {
87
+ this.control.OffStop(this._stopCallback);
88
+ this.control.OffStop(this._playCallback);
89
+ }
90
+ this.control = control;
91
+ if (this.control) {
92
+ this._stopCallback = this.control.OnStop(() => {
93
+ this.destroy();
94
+ });
95
+ this._playCallback = this.control.OnPlay(() => {
96
+ this.reload();
97
+ });
98
+ }
99
+ }
100
+ destroy() {
101
+ if (this._hls) {
102
+ this._hls.destroy();
103
+ this._hls = null;
104
+ console.log("Destroyed the HLS player");
105
+ }
106
+ }
107
+ onData() {
108
+ console.log("HLS on data event");
109
+ if (this.control) {
110
+ this.control.EmitData();
111
+ }
112
+ }
113
+ onError() {
114
+ console.log("HLS error");
115
+ if (this.control) {
116
+ this.control.Stop();
117
+ }
118
+ }
119
+ toggleFilter(evt) {
120
+ this.isVideoFilterVisible = !this.isVideoFilterVisible;
121
+ evt.stopPropagation();
122
+ }
123
+ hideFiler() {
124
+ this.isVideoFilterVisible = false;
125
+ }
126
+ }
127
+ ZenHlsPlayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenHlsPlayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
128
+ ZenHlsPlayerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenHlsPlayerComponent, selector: "zen-hls-player", inputs: { source: "source", control: "control" }, viewQueries: [{ propertyName: "_video", first: true, predicate: ["video_container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"hls-player-component\">\n\t<video #video_container\n\t\t controls\n\t\t muted\n\t\t autoplay></video>\n</div>\n", styles: [".hls-player-component{position:relative;background-color:#000;width:100%;height:100%;border-radius:4px}.hls-player-component video{position:absolute;top:0;left:0;width:100%;height:100%;max-height:100%;border-radius:4px}.hls-player-component zen-icon{position:absolute;width:24px;height:24px;right:20px;top:20px;cursor:pointer;border-radius:4px;background:#ffffff}.hls-player-component .video-filter{position:absolute;right:20px;top:50px;z-index:1000}\n"] });
129
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenHlsPlayerComponent, decorators: [{
130
+ type: Component,
131
+ args: [{ selector: 'zen-hls-player', template: "<div class=\"hls-player-component\">\n\t<video #video_container\n\t\t controls\n\t\t muted\n\t\t autoplay></video>\n</div>\n", styles: [".hls-player-component{position:relative;background-color:#000;width:100%;height:100%;border-radius:4px}.hls-player-component video{position:absolute;top:0;left:0;width:100%;height:100%;max-height:100%;border-radius:4px}.hls-player-component zen-icon{position:absolute;width:24px;height:24px;right:20px;top:20px;cursor:pointer;border-radius:4px;background:#ffffff}.hls-player-component .video-filter{position:absolute;right:20px;top:50px;z-index:1000}\n"] }]
132
+ }], propDecorators: { source: [{
133
+ type: Input
134
+ }], control: [{
135
+ type: Input
136
+ }], _video: [{
137
+ type: ViewChild,
138
+ args: ["video_container"]
139
+ }] } });
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGxzLXBsYXllci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy16ZW5kdWl0L3NyYy9saWIvbGl2ZS12aWV3LXBsYXllci9obHMtcGxheWVyL2hscy1wbGF5ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctemVuZHVpdC9zcmMvbGliL2xpdmUtdmlldy1wbGF5ZXIvaGxzLXBsYXllci9obHMtcGxheWVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sR0FBbUIsTUFBTSxRQUFRLENBQUM7QUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQWdDLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV0RyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBTzNDLE1BQU0sT0FBTyxxQkFBcUI7SUFMbEM7UUFZVyx5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFFNUIsU0FBSSxHQUFlLElBQUksQ0FBQztRQU94QixpQkFBWSxHQUFHLEtBQUssQ0FBQztLQWlKaEM7SUEvSVUsV0FBVyxDQUFDLFNBQWM7UUFDN0IsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFBO1NBQ2hCO1FBQ0QsSUFBSSxTQUFTLENBQUMsT0FBTztZQUNqQixTQUFTLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUNoQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDbkQ7SUFDTCxDQUFDO0lBRU0sV0FBVztRQUNkLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRU8sS0FBSyxDQUFDLE1BQU07UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZCxPQUFPO1NBQ1Y7UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZCxxQkFBcUI7WUFDckIsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUNqQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkMsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLHVEQUF1RCxDQUFDLENBQUE7WUFDcEUseUNBQXlDO1lBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzVDLE9BQU87U0FDVjtRQUVELG1CQUFtQjtRQUNuQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFZixPQUFPLENBQUMsR0FBRyxDQUFDLHNEQUFzRCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtRQUVqRixpRkFBaUY7UUFDakYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQztZQUNoQixrQkFBa0IsRUFBRSxLQUFLO1lBQ3pCLHVCQUF1QixFQUFFLENBQUM7WUFDMUIsc0JBQXNCLEVBQUUsS0FBSztZQUM3Qiw4QkFBOEIsRUFBRSxLQUFLO1lBQ3JDLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLGNBQWMsRUFBRSxLQUFLO1lBQ3JCLG1CQUFtQixFQUFFLENBQUM7WUFDdEIsd0JBQXdCO1lBQ3hCLGFBQWEsRUFBRSxJQUFJO1lBQ25CLGFBQWEsRUFBRSxLQUFLO1NBQ3ZCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFakQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWxDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRTtZQUN0QyxvQ0FBb0M7WUFDcEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDekMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDdkMsZ0JBQWdCO2dCQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUE7Z0JBQ2hDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDZixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDakI7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxHQUFHLENBQUMsc0NBQXNDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFTyxLQUFLLENBQUMsZ0JBQWdCO1FBQzFCLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2pCLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ25CLE9BQU87YUFDVjtTQUNKO0lBQ0wsQ0FBQztJQUVPLFVBQVUsQ0FBQyxPQUFzQjtRQUNyQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQzVDO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFFdkIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuQixDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO2dCQUMxQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFHTyxPQUFPO1FBQ1gsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7U0FDM0M7SUFDTCxDQUFDO0lBRU8sTUFBTTtRQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtRQUVoQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUVPLE9BQU87UUFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBRXhCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDdkI7SUFDTCxDQUFDO0lBR00sWUFBWSxDQUFDLEdBQWU7UUFDL0IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1FBQ3ZELEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU0sU0FBUztRQUNaLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7SUFDdEMsQ0FBQzs7bUhBL0pRLHFCQUFxQjt1R0FBckIscUJBQXFCLHdPQ1ZsQyxvSUFNQTs0RkRJYSxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBQ0ksZ0JBQWdCOzhCQUtqQixNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUV3QixNQUFNO3NCQUFuQyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBITFMsIHsgRXJyb3JUeXBlcyB9IGZyb20gXCJobHMuanNcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBQbGF5ZXJDb250cm9sIH0gZnJvbSBcIi4uL3BsYXllci5jb250cm9sXCI7XG5pbXBvcnQgeyBUaHJlYWQgfSBmcm9tIFwiLi4vLi4vY29yZS90aHJlYWRcIjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd6ZW4taGxzLXBsYXllcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2hscy1wbGF5ZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2hscy1wbGF5ZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBaZW5IbHNQbGF5ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KCkgc291cmNlITogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgY29udHJvbCE6IFBsYXllckNvbnRyb2w7XG5cbiAgICBAVmlld0NoaWxkKFwidmlkZW9fY29udGFpbmVyXCIpIF92aWRlbz86IEVsZW1lbnRSZWY8SFRNTFZpZGVvRWxlbWVudD47XG5cbiAgICBwdWJsaWMgaXNWaWRlb0ZpbHRlclZpc2libGUgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX2hsczogSExTIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwcml2YXRlIF9zdG9wQ2FsbGJhY2shOiBudW1iZXI7XG5cbiAgICBwcml2YXRlIF9wbGF5Q2FsbGJhY2shOiBudW1iZXI7XG5cblxuICAgIHByaXZhdGUgX2lzRGVzdHJveWVkID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlT2JqOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc291cmNlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbG9hZCgpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZU9iai5jb250cm9sICYmXG4gICAgICAgICAgICBjaGFuZ2VPYmouY29udHJvbC5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udHJvbChjaGFuZ2VPYmouY29udHJvbC5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcmVsb2FkKCkge1xuICAgICAgICBpZiAoIXRoaXMuc291cmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5faXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fdmlkZW8pIHtcbiAgICAgICAgICAgIC8vIHdhaXQgZm9yIGNvbXBvbmVudFxuICAgICAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yQ29tcG9uZW50KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX3ZpZGVvIHx8IHRoaXMuX2lzRGVzdHJveWVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIUhMUy5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkhMUyBub3Qgc3VwcG9ydGVkLiBTZXQgdXJsIHRvIHRoZSBuYXRpdmUgdmlkZW8gcGxheWVyXCIpXG4gICAgICAgICAgICAvLyBqdXN0IGF0dGFjaGVkIHRoZSBsaW5rIHRvIHZpZGVvIHBsYXllclxuICAgICAgICAgICAgdGhpcy5fdmlkZW8ubmF0aXZlRWxlbWVudC5zcmMgPSB0aGlzLnNvdXJjZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRlc3Ryb3kgcHJldmlvdXNcbiAgICAgICAgdGhpcy5kZXN0cm95KCk7XG5cbiAgICAgICAgY29uc29sZS5sb2coYFtIbHNQbGF5ZXJDb21wb25lbnRdIHN0YXJ0IHBsYXlpbmcgZm9yIHRoZSBzb3VyY2UgWyR7dGhpcy5zb3VyY2V9XWApXG5cbiAgICAgICAgLy8gSExTIGNvbmZpZ3VyYXRpb246IGh0dHBzOi8vZ2l0aHViLmNvbS92aWRlby1kZXYvaGxzLmpzL2Jsb2IvdjEuMy4wL2RvY3MvQVBJLm1kXG4gICAgICAgIHRoaXMuX2hscyA9IG5ldyBITFMoe1xuICAgICAgICAgICAgZnJhZ0xvYWRpbmdUaW1lT3V0OiAxMDAwMCxcbiAgICAgICAgICAgIG1hbmlmZXN0TG9hZGluZ01heFJldHJ5OiAzLFxuICAgICAgICAgICAgbWFuaWZlc3RMb2FkaW5nVGltZU91dDogMTAwMDAsXG4gICAgICAgICAgICBtYW5pZmVzdExvYWRpbmdNYXhSZXRyeVRpbWVvdXQ6IDEwMDAwLFxuICAgICAgICAgICAgbWF4QnVmZmVySG9sZTogMTAsXG4gICAgICAgICAgICBsb3dMYXRlbmN5TW9kZTogZmFsc2UsXG4gICAgICAgICAgICBmcmFnTG9hZGluZ01heFJldHJ5OiAxLFxuICAgICAgICAgICAgLy8gYmFja0J1ZmZlckxlbmd0aDogOTAsXG4gICAgICAgICAgICBhdXRvU3RhcnRMb2FkOiB0cnVlLFxuICAgICAgICAgICAgdGVzdEJhbmR3aWR0aDogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2hscy5hdHRhY2hNZWRpYSh0aGlzLl92aWRlby5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgICB0aGlzLl9obHMubG9hZFNvdXJjZSh0aGlzLnNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy5faGxzLm9uKEhMUy5FdmVudHMuRlJBR19MT0FERUQsICgpID0+IHtcbiAgICAgICAgICAgIC8vIGZpcmVkIGV2ZW50IHdoZW4gdmlkZW8gaXMgcGxheWluZ1xuICAgICAgICAgICAgdGhpcy5vbkRhdGEoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5faGxzLm9uKEhMUy5FdmVudHMuRVJST1IsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgICAgIGlmIChkYXRhLmZhdGFsKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkhMUyBlcnJvcjpcIiwgZXJyLCBkYXRhKTtcbiAgICAgICAgICAgICAgICAvLyByZWxvYWQgc291cmNlXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJITFMgcmVsb2FkIHNvdXJjZVwiKVxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKGBDcmVhdGVkIHRoZSBobHMgcGxheWVyIGZvciBzb3VyY2UgXCIke3RoaXMuc291cmNlfVwiYCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyB3YWl0Rm9yQ29tcG9uZW50KCkge1xuICAgICAgICB3aGlsZSAoIXRoaXMuX3ZpZGVvKSB7XG4gICAgICAgICAgICBhd2FpdCBUaHJlYWQuc2xlZXAoMTAwKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q29udHJvbChjb250cm9sOiBQbGF5ZXJDb250cm9sKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5PZmZTdG9wKHRoaXMuX3N0b3BDYWxsYmFjayk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuT2ZmU3RvcCh0aGlzLl9wbGF5Q2FsbGJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb250cm9sID0gY29udHJvbDtcblxuICAgICAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLl9zdG9wQ2FsbGJhY2sgPSB0aGlzLmNvbnRyb2wuT25TdG9wKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLl9wbGF5Q2FsbGJhY2sgPSB0aGlzLmNvbnRyb2wuT25QbGF5KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHByaXZhdGUgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2hscykge1xuICAgICAgICAgICAgdGhpcy5faGxzLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuX2hscyA9IG51bGw7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkRlc3Ryb3llZCB0aGUgSExTIHBsYXllclwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25EYXRhKCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkhMUyBvbiBkYXRhIGV2ZW50XCIpXG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLkVtaXREYXRhKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRXJyb3IoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiSExTIGVycm9yXCIpXG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLlN0b3AoKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgcHVibGljIHRvZ2dsZUZpbHRlcihldnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1ZpZGVvRmlsdGVyVmlzaWJsZSA9ICF0aGlzLmlzVmlkZW9GaWx0ZXJWaXNpYmxlO1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGhpZGVGaWxlcigpIHtcbiAgICAgICAgdGhpcy5pc1ZpZGVvRmlsdGVyVmlzaWJsZSA9IGZhbHNlO1xuICAgIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cImhscy1wbGF5ZXItY29tcG9uZW50XCI+XG5cdDx2aWRlbyAjdmlkZW9fY29udGFpbmVyXG5cdFx0ICAgY29udHJvbHNcblx0XHQgICBtdXRlZFxuXHRcdCAgIGF1dG9wbGF5PjwvdmlkZW8+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,20 @@
1
+ import { Component, Input } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ export class ZenHTML5VideoPlayerComponent {
4
+ async ngOnChanges() {
5
+ if (this.source) {
6
+ console.log(`Created the html5 video player for source "${this.source}"`);
7
+ }
8
+ }
9
+ }
10
+ ZenHTML5VideoPlayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenHTML5VideoPlayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11
+ ZenHTML5VideoPlayerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenHTML5VideoPlayerComponent, selector: "zen-html5-video-player", inputs: { source: "source", control: "control" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"html5-player-component\">\n\t<video controls\n\t\t muted\n\t\t autoplay\n\t\t [src]=\"source\">\n\t</video>\n</div>\n", styles: [".html5-player-component{position:relative;background-color:#000;width:100%;height:100%;border-radius:4px}.html5-player-component video{position:absolute;top:0;left:0;width:100%;height:100%;max-height:100%;border-radius:4px}\n"] });
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenHTML5VideoPlayerComponent, decorators: [{
13
+ type: Component,
14
+ args: [{ selector: 'zen-html5-video-player', template: "<div class=\"html5-player-component\">\n\t<video controls\n\t\t muted\n\t\t autoplay\n\t\t [src]=\"source\">\n\t</video>\n</div>\n", styles: [".html5-player-component{position:relative;background-color:#000;width:100%;height:100%;border-radius:4px}.html5-player-component video{position:absolute;top:0;left:0;width:100%;height:100%;max-height:100%;border-radius:4px}\n"] }]
15
+ }], propDecorators: { source: [{
16
+ type: Input
17
+ }], control: [{
18
+ type: Input
19
+ }] } });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbDUtdmlkZW8tcGxheWVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9saXZlLXZpZXctcGxheWVyL2h0bWw1LXZpZGVvLXBsYXllci9odG1sNS12aWRlby1wbGF5ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctemVuZHVpdC9zcmMvbGliL2xpdmUtdmlldy1wbGF5ZXIvaHRtbDUtdmlkZW8tcGxheWVyL2h0bWw1LXZpZGVvLXBsYXllci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBYSxNQUFNLGVBQWUsQ0FBQzs7QUFRNUQsTUFBTSxPQUFPLDRCQUE0QjtJQUtqQyxLQUFLLENBQUMsV0FBVztRQUN2QixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDUCxPQUFPLENBQUMsR0FBRyxDQUFDLDhDQUE4QyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztTQUNuRjtJQUNGLENBQUM7OzBIQVRXLDRCQUE0Qjs4R0FBNUIsNEJBQTRCLHFJQ1J6QywwSUFPQTs0RkRDYSw0QkFBNEI7a0JBTHhDLFNBQVM7K0JBQ0Msd0JBQXdCOzhCQUt6QixNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFBsYXllckNvbnRyb2wgfSBmcm9tIFwiLi4vcGxheWVyLmNvbnRyb2xcIjtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnemVuLWh0bWw1LXZpZGVvLXBsYXllcicsXG5cdHRlbXBsYXRlVXJsOiAnLi9odG1sNS12aWRlby1wbGF5ZXIuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsnLi9odG1sNS12aWRlby1wbGF5ZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBaZW5IVE1MNVZpZGVvUGxheWVyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcblx0QElucHV0KCkgc291cmNlITogc3RyaW5nO1xuXG5cdEBJbnB1dCgpIGNvbnRyb2whOiBQbGF5ZXJDb250cm9sO1xuXG5cdHB1YmxpYyBhc3luYyBuZ09uQ2hhbmdlcygpIHtcblx0XHRpZiAodGhpcy5zb3VyY2UpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDcmVhdGVkIHRoZSBodG1sNSB2aWRlbyBwbGF5ZXIgZm9yIHNvdXJjZSBcIiR7dGhpcy5zb3VyY2V9XCJgKTtcblx0XHR9XG5cdH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJodG1sNS1wbGF5ZXItY29tcG9uZW50XCI+XG5cdDx2aWRlbyBjb250cm9sc1xuXHRcdCAgIG11dGVkXG5cdFx0ICAgYXV0b3BsYXlcblx0XHQgICBbc3JjXT1cInNvdXJjZVwiPlxuXHQ8L3ZpZGVvPlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,41 @@
1
+ import { Component, Input } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ import * as i2 from "../html5-video-player/html5-video-player.component";
5
+ import * as i3 from "../flv-player/flv-player.component";
6
+ import * as i4 from "../hls-player/hls-player.component";
7
+ import * as i5 from "../snapshot-player/snapshot-player.component";
8
+ import * as i6 from "../web-rtc/web-rtc-player.component";
9
+ export class ZenLiveViewPlayerComponent {
10
+ constructor() {
11
+ this.playerType = "unknown";
12
+ this.IsLoading = true;
13
+ }
14
+ ngOnDestroy() {
15
+ if (this.control) {
16
+ if (this._controlPlayHander) {
17
+ this.control.OffPlay(this._controlPlayHander);
18
+ }
19
+ if (this._controlStopHander) {
20
+ this.control.OffStop(this._controlStopHander);
21
+ }
22
+ }
23
+ }
24
+ }
25
+ ZenLiveViewPlayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenLiveViewPlayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
26
+ ZenLiveViewPlayerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenLiveViewPlayerComponent, selector: "zen-live-view-player", inputs: { control: "control", source: "source", playerType: "playerType", snapshotInterval: "snapshotInterval", timeout: "timeout" }, ngImport: i0, template: "<zen-web-rtc-player [source]=\"source\"\n [control]=\"control\"\n *ngIf=\"playerType == 'webrtc'\"></zen-web-rtc-player>\n\n<zen-snapshot-player [source]=\"source\"\n [control]=\"control\"\n [interval]=\"snapshotInterval\"\n *ngIf=\"playerType == 'snapshot'\"></zen-snapshot-player>\n\n<zen-flv-player [source]=\"source\"\n [control]=\"control\"\n *ngIf=\"playerType == 'flv'\"></zen-flv-player>\n\n<zen-hls-player [source]=\"source\"\n [control]=\"control\"\n *ngIf=\"playerType == 'hls'\"></zen-hls-player>\n\n<zen-html5-video-player [source]=\"source\"\n [control]=\"control\"\n *ngIf=\"playerType == 'html5'\"></zen-html5-video-player>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ZenHTML5VideoPlayerComponent, selector: "zen-html5-video-player", inputs: ["source", "control"] }, { kind: "component", type: i3.ZenFlvPlayerComponent, selector: "zen-flv-player", inputs: ["source", "control"] }, { kind: "component", type: i4.ZenHlsPlayerComponent, selector: "zen-hls-player", inputs: ["source", "control"] }, { kind: "component", type: i5.ZenSnapshotPlayerComponent, selector: "zen-snapshot-player", inputs: ["source", "channel", "control", "interval"] }, { kind: "component", type: i6.ZenWebRTCPlayerComponent, selector: "zen-web-rtc-player", inputs: ["source", "control"], outputs: ["onStartPlay", "onServerError", "onServerDisconnect"] }] });
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenLiveViewPlayerComponent, decorators: [{
28
+ type: Component,
29
+ args: [{ selector: 'zen-live-view-player', template: "<zen-web-rtc-player [source]=\"source\"\n [control]=\"control\"\n *ngIf=\"playerType == 'webrtc'\"></zen-web-rtc-player>\n\n<zen-snapshot-player [source]=\"source\"\n [control]=\"control\"\n [interval]=\"snapshotInterval\"\n *ngIf=\"playerType == 'snapshot'\"></zen-snapshot-player>\n\n<zen-flv-player [source]=\"source\"\n [control]=\"control\"\n *ngIf=\"playerType == 'flv'\"></zen-flv-player>\n\n<zen-hls-player [source]=\"source\"\n [control]=\"control\"\n *ngIf=\"playerType == 'hls'\"></zen-hls-player>\n\n<zen-html5-video-player [source]=\"source\"\n [control]=\"control\"\n *ngIf=\"playerType == 'html5'\"></zen-html5-video-player>\n" }]
30
+ }], propDecorators: { control: [{
31
+ type: Input
32
+ }], source: [{
33
+ type: Input
34
+ }], playerType: [{
35
+ type: Input
36
+ }], snapshotInterval: [{
37
+ type: Input
38
+ }], timeout: [{
39
+ type: Input
40
+ }] } });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS12aWV3LXBsYXllci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy16ZW5kdWl0L3NyYy9saWIvbGl2ZS12aWV3LXBsYXllci9saXZlLXZpZXctcGxheWVyL2xpdmUtdmlldy1wbGF5ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctemVuZHVpdC9zcmMvbGliL2xpdmUtdmlldy1wbGF5ZXIvbGl2ZS12aWV3LXBsYXllci9saXZlLXZpZXctcGxheWVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUF3QixNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFVdkUsTUFBTSxPQUFPLDBCQUEwQjtJQUx2QztRQVVVLGVBQVUsR0FBMEIsU0FBUyxDQUFDO1FBYWhELGNBQVMsR0FBRyxJQUFJLENBQUM7S0FnQnhCO0lBZE8sV0FBVztRQUNqQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDakIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2FBQzlDO1lBRUQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2FBQzlDO1NBQ0Q7SUFDRixDQUFDOzt3SEE5QlcsMEJBQTBCOzRHQUExQiwwQkFBMEIsa01DVnZDLCswQkFvQkE7NEZEVmEsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNDLHNCQUFzQjs4QkFLdkIsT0FBTztzQkFBZixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFLRyxPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBQbGF5ZXJDb250cm9sIH0gZnJvbSBcIi4uL3BsYXllci5jb250cm9sXCI7XG5cbmV4cG9ydCB0eXBlIFplbkxpdmVWaWV3UGxheWVyVHlwZSA9ICdodG1sNScgfCAnZmx2JyB8ICd3ZWJydGMnIHwgJ3NuYXBzaG90JyB8ICdobHMnIHwgJ3Vua25vd24nO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICd6ZW4tbGl2ZS12aWV3LXBsYXllcicsXG5cdHRlbXBsYXRlVXJsOiAnLi9saXZlLXZpZXctcGxheWVyLmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmxzOiBbJy4vbGl2ZS12aWV3LXBsYXllci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFplbkxpdmVWaWV3UGxheWVyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcblx0QElucHV0KCkgY29udHJvbCE6IFBsYXllckNvbnRyb2w7XG5cblx0QElucHV0KCkgc291cmNlITogc3RyaW5nO1xuXG5cdEBJbnB1dCgpIHBsYXllclR5cGU6IFplbkxpdmVWaWV3UGxheWVyVHlwZSA9IFwidW5rbm93blwiO1xuXG5cdEBJbnB1dCgpIHNuYXBzaG90SW50ZXJ2YWwhOiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIFBsYXliYWNrIHRpbWVvdXQuIEl0IHVzZXMgZm9yIHN0cmVhbWF4IGxpdmUgc3RyZWFtaW5nLiBcblx0ICovXG5cdEBJbnB1dCgpIHRpbWVvdXQhOiBudW1iZXI7XG5cblx0cHJpdmF0ZSBfY29udHJvbFBsYXlIYW5kZXIhOiBudW1iZXI7XG5cblx0cHJpdmF0ZSBfY29udHJvbFN0b3BIYW5kZXIhOiBudW1iZXI7XG5cblx0cHVibGljIElzTG9hZGluZyA9IHRydWU7XG5cblx0cHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmNvbnRyb2wpIHtcblx0XHRcdGlmICh0aGlzLl9jb250cm9sUGxheUhhbmRlcikge1xuXHRcdFx0XHR0aGlzLmNvbnRyb2wuT2ZmUGxheSh0aGlzLl9jb250cm9sUGxheUhhbmRlcik7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLl9jb250cm9sU3RvcEhhbmRlcikge1xuXHRcdFx0XHR0aGlzLmNvbnRyb2wuT2ZmU3RvcCh0aGlzLl9jb250cm9sU3RvcEhhbmRlcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblxuXG59XG4iLCI8emVuLXdlYi1ydGMtcGxheWVyIFtzb3VyY2VdPVwic291cmNlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicGxheWVyVHlwZSA9PSAnd2VicnRjJ1wiPjwvemVuLXdlYi1ydGMtcGxheWVyPlxuXG48emVuLXNuYXBzaG90LXBsYXllciBbc291cmNlXT1cInNvdXJjZVwiXG4gICAgICAgICAgICAgICAgICAgICBbY29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgIFtpbnRlcnZhbF09XCJzbmFwc2hvdEludGVydmFsXCJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicGxheWVyVHlwZSA9PSAnc25hcHNob3QnXCI+PC96ZW4tc25hcHNob3QtcGxheWVyPlxuXG48emVuLWZsdi1wbGF5ZXIgW3NvdXJjZV09XCJzb3VyY2VcIlxuICAgICAgICAgICAgICAgIFtjb250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwicGxheWVyVHlwZSA9PSAnZmx2J1wiPjwvemVuLWZsdi1wbGF5ZXI+XG5cbjx6ZW4taGxzLXBsYXllciBbc291cmNlXT1cInNvdXJjZVwiXG4gICAgICAgICAgICAgICAgW2NvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJwbGF5ZXJUeXBlID09ICdobHMnXCI+PC96ZW4taGxzLXBsYXllcj5cblxuPHplbi1odG1sNS12aWRlby1wbGF5ZXIgW3NvdXJjZV09XCJzb3VyY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBsYXllclR5cGUgPT0gJ2h0bWw1J1wiPjwvemVuLWh0bWw1LXZpZGVvLXBsYXllcj5cbiJdfQ==
@@ -0,0 +1,79 @@
1
+ import { CEvent } from "../core/cevent";
2
+ export class PlayerControl {
3
+ constructor() {
4
+ this._stopEvent = new CEvent();
5
+ this._playEvent = new CEvent();
6
+ this._seekEvent = new CEvent();
7
+ this._dataEvent = new CEvent();
8
+ }
9
+ /**
10
+ * Subscribe to data event
11
+ */
12
+ OnData(callback) {
13
+ return this._dataEvent.on(callback);
14
+ }
15
+ /**
16
+ * Subscribe to play event
17
+ */
18
+ OnPlay(callback) {
19
+ return this._playEvent.on(callback);
20
+ }
21
+ /**
22
+ * Subscribe to stop event
23
+ */
24
+ OnStop(callback) {
25
+ return this._stopEvent.on(callback);
26
+ }
27
+ /**
28
+ * Subscribe to seek event
29
+ */
30
+ OnSeek(callback) {
31
+ return this._seekEvent.on(callback);
32
+ }
33
+ /**
34
+ * Detach the callback from the event
35
+ * @param id callback id
36
+ */
37
+ OffPlay(id) {
38
+ this._playEvent.off(id);
39
+ }
40
+ /**
41
+ * Detach the callback from the event
42
+ * @param id callback id
43
+ */
44
+ OffStop(id) {
45
+ this._stopEvent.off(id);
46
+ }
47
+ /**
48
+ * Detach the callback from the event
49
+ * @param id callback id
50
+ */
51
+ OffSeek(id) {
52
+ this._seekEvent.off(id);
53
+ }
54
+ /**
55
+ * Emit the play event
56
+ */
57
+ Play() {
58
+ this._playEvent.fire();
59
+ }
60
+ /**
61
+ * Emit the stop event
62
+ */
63
+ Stop() {
64
+ this._stopEvent.fire();
65
+ }
66
+ /**
67
+ * Emit the seek event
68
+ */
69
+ Seek(position) {
70
+ this._seekEvent.fire(position);
71
+ }
72
+ /**
73
+ * Emit the data event
74
+ */
75
+ EmitData() {
76
+ this._dataEvent.fire();
77
+ }
78
+ }
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLmNvbnRyb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy16ZW5kdWl0L3NyYy9saWIvbGl2ZS12aWV3LXBsYXllci9wbGF5ZXIuY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEMsTUFBTSxPQUFPLGFBQWE7SUFBMUI7UUFDUyxlQUFVLEdBQWlCLElBQUksTUFBTSxFQUFFLENBQUM7UUFFeEMsZUFBVSxHQUFpQixJQUFJLE1BQU0sRUFBRSxDQUFDO1FBRXhDLGVBQVUsR0FBbUIsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUUxQyxlQUFVLEdBQW1CLElBQUksTUFBTSxFQUFFLENBQUM7SUFpRm5ELENBQUM7SUEvRUE7O09BRUc7SUFDSyxNQUFNLENBQUMsUUFBb0I7UUFDbEMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxNQUFNLENBQUMsUUFBb0I7UUFDbEMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxNQUFNLENBQUMsUUFBb0I7UUFDbEMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsUUFBb0M7UUFDakQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxRQUFlLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksT0FBTyxDQUFDLEVBQVU7UUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE9BQU8sQ0FBQyxFQUFVO1FBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxPQUFPLENBQUMsRUFBVTtRQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxJQUFJO1FBQ1YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxJQUFJO1FBQ1YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxJQUFJLENBQUMsUUFBZ0I7UUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUTtRQUNkLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEIsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ0V2ZW50IH0gZnJvbSBcIi4uL2NvcmUvY2V2ZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBQbGF5ZXJDb250cm9sIHtcblx0cHJpdmF0ZSBfc3RvcEV2ZW50OiBDRXZlbnQ8dm9pZD4gPSBuZXcgQ0V2ZW50KCk7XG5cblx0cHJpdmF0ZSBfcGxheUV2ZW50OiBDRXZlbnQ8dm9pZD4gPSBuZXcgQ0V2ZW50KCk7XG5cblx0cHJpdmF0ZSBfc2Vla0V2ZW50OiBDRXZlbnQ8bnVtYmVyPiA9IG5ldyBDRXZlbnQoKTtcblxuXHRwcml2YXRlIF9kYXRhRXZlbnQ6IENFdmVudDxudW1iZXI+ID0gbmV3IENFdmVudCgpO1xuXG5cdC8qKlxuXHQgKiBTdWJzY3JpYmUgdG8gZGF0YSBldmVudFxuXHQgKi9cblx0IHB1YmxpYyBPbkRhdGEoY2FsbGJhY2s6ICgpID0+IHZvaWQpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLl9kYXRhRXZlbnQub24oY2FsbGJhY2spO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN1YnNjcmliZSB0byBwbGF5IGV2ZW50XG5cdCAqL1xuXHQgcHVibGljIE9uUGxheShjYWxsYmFjazogKCkgPT4gdm9pZCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMuX3BsYXlFdmVudC5vbihjYWxsYmFjayk7XG5cdH1cblxuXHQvKipcblx0ICogU3Vic2NyaWJlIHRvIHN0b3AgZXZlbnRcblx0ICovXG5cdCBwdWJsaWMgT25TdG9wKGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RvcEV2ZW50Lm9uKGNhbGxiYWNrKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTdWJzY3JpYmUgdG8gc2VlayBldmVudFxuXHQgKi9cblx0cHVibGljIE9uU2VlayhjYWxsYmFjazogKHBvc2l0aW9uOiBudW1iZXIpID0+IHZvaWQpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLl9zZWVrRXZlbnQub24oY2FsbGJhY2sgYXMgYW55KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRhY2ggdGhlIGNhbGxiYWNrIGZyb20gdGhlIGV2ZW50XG5cdCAqIEBwYXJhbSBpZCBjYWxsYmFjayBpZFxuXHQgKi9cblx0cHVibGljIE9mZlBsYXkoaWQ6IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMuX3BsYXlFdmVudC5vZmYoaWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGFjaCB0aGUgY2FsbGJhY2sgZnJvbSB0aGUgZXZlbnRcblx0ICogQHBhcmFtIGlkIGNhbGxiYWNrIGlkXG5cdCAqL1xuXHRwdWJsaWMgT2ZmU3RvcChpZDogbnVtYmVyKTogdm9pZCB7XG5cdFx0dGhpcy5fc3RvcEV2ZW50Lm9mZihpZCk7XG5cdH1cblxuXHQvKipcblx0ICogRGV0YWNoIHRoZSBjYWxsYmFjayBmcm9tIHRoZSBldmVudFxuXHQgKiBAcGFyYW0gaWQgY2FsbGJhY2sgaWRcblx0ICovXG5cdHB1YmxpYyBPZmZTZWVrKGlkOiBudW1iZXIpOiB2b2lkIHtcblx0XHR0aGlzLl9zZWVrRXZlbnQub2ZmKGlkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFbWl0IHRoZSBwbGF5IGV2ZW50XG5cdCAqL1xuXHRwdWJsaWMgUGxheSgpOiB2b2lkIHtcblx0XHR0aGlzLl9wbGF5RXZlbnQuZmlyZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEVtaXQgdGhlIHN0b3AgZXZlbnRcblx0ICovXG5cdHB1YmxpYyBTdG9wKCk6IHZvaWQge1xuXHRcdHRoaXMuX3N0b3BFdmVudC5maXJlKCk7XG5cdH1cblxuXHQvKipcblx0ICogRW1pdCB0aGUgc2VlayBldmVudFxuXHQgKi9cblx0cHVibGljIFNlZWsocG9zaXRpb246IG51bWJlcikge1xuXHRcdHRoaXMuX3NlZWtFdmVudC5maXJlKHBvc2l0aW9uKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFbWl0IHRoZSBkYXRhIGV2ZW50XG5cdCAqL1xuXHRwdWJsaWMgRW1pdERhdGEoKSB7XG5cdFx0dGhpcy5fZGF0YUV2ZW50LmZpcmUoKTtcblx0fVxufSJdfQ==