@angular/youtube-player 17.1.0-next.1 → 17.1.0-next.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.
- package/esm2022/youtube-module.mjs +5 -5
- package/esm2022/youtube-player-placeholder.mjs +4 -4
- package/esm2022/youtube-player.mjs +4 -4
- package/fesm2022/youtube-player.mjs +10 -10
- package/fesm2022/youtube-player.mjs.map +1 -1
- package/package.json +2 -1
- package/schematics/collection.json +10 -0
- package/schematics/ng-add/index.d.ts +9 -0
- package/schematics/ng-add/index.js +16 -0
- package/schematics/ng-add/index.mjs +16 -0
- package/schematics/package.json +3 -0
- package/schematics/schematics.externs.js +0 -0
|
@@ -9,15 +9,15 @@ import { NgModule } from '@angular/core';
|
|
|
9
9
|
import { YouTubePlayer } from './youtube-player';
|
|
10
10
|
import * as i0 from "@angular/core";
|
|
11
11
|
export class YouTubePlayerModule {
|
|
12
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
13
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.
|
|
14
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.
|
|
12
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.0-next.2", ngImport: i0, type: YouTubePlayerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
13
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.0-next.2", ngImport: i0, type: YouTubePlayerModule, imports: [YouTubePlayer], exports: [YouTubePlayer] }); }
|
|
14
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.0-next.2", ngImport: i0, type: YouTubePlayerModule }); }
|
|
15
15
|
}
|
|
16
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
16
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0-next.2", ngImport: i0, type: YouTubePlayerModule, decorators: [{
|
|
17
17
|
type: NgModule,
|
|
18
18
|
args: [{
|
|
19
19
|
imports: [YouTubePlayer],
|
|
20
20
|
exports: [YouTubePlayer],
|
|
21
21
|
}]
|
|
22
22
|
}] });
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieW91dHViZS1tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMveW91dHViZS1wbGF5ZXIveW91dHViZS1tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7O0FBTS9DLE1BQU0sT0FBTyxtQkFBbUI7cUhBQW5CLG1CQUFtQjtzSEFBbkIsbUJBQW1CLFlBSHBCLGFBQWEsYUFDYixhQUFhO3NIQUVaLG1CQUFtQjs7a0dBQW5CLG1CQUFtQjtrQkFKL0IsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxhQUFhLENBQUM7b0JBQ3hCLE9BQU8sRUFBRSxDQUFDLGFBQWEsQ0FBQztpQkFDekIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1lvdVR1YmVQbGF5ZXJ9IGZyb20gJy4veW91dHViZS1wbGF5ZXInO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbWW91VHViZVBsYXllcl0sXG4gIGV4cG9ydHM6IFtZb3VUdWJlUGxheWVyXSxcbn0pXG5leHBvcnQgY2xhc3MgWW91VHViZVBsYXllck1vZHVsZSB7fVxuIl19
|
|
@@ -22,8 +22,8 @@ export class YouTubePlayerPlaceholder {
|
|
|
22
22
|
}
|
|
23
23
|
return `url(${url})`;
|
|
24
24
|
}
|
|
25
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
26
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.
|
|
25
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.0-next.2", ngImport: i0, type: YouTubePlayerPlaceholder, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.0-next.2", type: YouTubePlayerPlaceholder, isStandalone: true, selector: "youtube-player-placeholder", inputs: { videoId: "videoId", width: "width", height: "height", isLoading: "isLoading", buttonLabel: "buttonLabel", quality: "quality" }, host: { properties: { "class.youtube-player-placeholder-loading": "isLoading", "style.background-image": "_getBackgroundImage()", "style.width.px": "width", "style.height.px": "height" }, classAttribute: "youtube-player-placeholder" }, ngImport: i0, template: `
|
|
27
27
|
<button type="button" class="youtube-player-placeholder-button" [attr.aria-label]="buttonLabel">
|
|
28
28
|
<svg
|
|
29
29
|
height="100%"
|
|
@@ -37,7 +37,7 @@ export class YouTubePlayerPlaceholder {
|
|
|
37
37
|
</button>
|
|
38
38
|
`, isInline: true, styles: [".youtube-player-placeholder{display:flex;align-items:center;justify-content:center;width:100%;overflow:hidden;cursor:pointer;background-color:#000;background-position:center center;background-size:cover;transition:box-shadow 300ms ease;box-shadow:inset 0 120px 90px -90px rgba(0,0,0,.8)}.youtube-player-placeholder-button{transition:opacity 300ms ease;-moz-appearance:none;-webkit-appearance:none;background:none;border:none;padding:0;display:flex}.youtube-player-placeholder-button svg{width:68px;height:48px}.youtube-player-placeholder-loading{box-shadow:none}.youtube-player-placeholder-loading .youtube-player-placeholder-button{opacity:0}"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
39
39
|
}
|
|
40
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
40
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0-next.2", ngImport: i0, type: YouTubePlayerPlaceholder, decorators: [{
|
|
41
41
|
type: Component,
|
|
42
42
|
args: [{ selector: 'youtube-player-placeholder', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: `
|
|
43
43
|
<button type="button" class="youtube-player-placeholder-button" [attr.aria-label]="buttonLabel">
|
|
@@ -71,4 +71,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImpor
|
|
|
71
71
|
}], quality: [{
|
|
72
72
|
type: Input
|
|
73
73
|
}] } });
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieW91dHViZS1wbGF5ZXItcGxhY2Vob2xkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMveW91dHViZS1wbGF5ZXIveW91dHViZS1wbGF5ZXItcGxhY2Vob2xkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUM7O0FBZ0MzRixNQUFNLE9BQU8sd0JBQXdCO0lBbUJuQyx5REFBeUQ7SUFDL0MsbUJBQW1CO1FBQzNCLElBQUksR0FBVyxDQUFDO1FBRWhCLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUMzQixHQUFHLEdBQUcsMEJBQTBCLElBQUksQ0FBQyxPQUFPLGdCQUFnQixDQUFDO1FBQy9ELENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDbkMsR0FBRyxHQUFHLDBCQUEwQixJQUFJLENBQUMsT0FBTyxvQkFBb0IsQ0FBQztRQUNuRSxDQUFDO2FBQU0sQ0FBQztZQUNOLEdBQUcsR0FBRywrQkFBK0IsSUFBSSxDQUFDLE9BQU8saUJBQWlCLENBQUM7UUFDckUsQ0FBQztRQUVELE9BQU8sT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUN2QixDQUFDO3FIQWhDVSx3QkFBd0I7eUdBQXhCLHdCQUF3Qiw0Y0F2QnpCOzs7Ozs7Ozs7Ozs7R0FZVDs7a0dBV1Usd0JBQXdCO2tCQTNCcEMsU0FBUzsrQkFDRSw0QkFBNEIsbUJBQ3JCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksWUFDM0I7Ozs7Ozs7Ozs7OztHQVlULGNBQ1csSUFBSSxRQUVWO3dCQUNKLE9BQU8sRUFBRSw0QkFBNEI7d0JBQ3JDLDRDQUE0QyxFQUFFLFdBQVc7d0JBQ3pELDBCQUEwQixFQUFFLHVCQUF1Qjt3QkFDbkQsa0JBQWtCLEVBQUUsT0FBTzt3QkFDM0IsbUJBQW1CLEVBQUUsUUFBUTtxQkFDOUI7OEJBSVEsT0FBTztzQkFBZixLQUFLO2dCQUdHLEtBQUs7c0JBQWIsS0FBSztnQkFHRyxNQUFNO3NCQUFkLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKiAgUXVhbGl0eSBvZiB0aGUgcGxhY2Vob2xkZXIgaW1hZ2UuICAqL1xuZXhwb3J0IHR5cGUgUGxhY2Vob2xkZXJJbWFnZVF1YWxpdHkgPSAnaGlnaCcgfCAnc3RhbmRhcmQnIHwgJ2xvdyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3lvdXR1YmUtcGxheWVyLXBsYWNlaG9sZGVyJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ5b3V0dWJlLXBsYXllci1wbGFjZWhvbGRlci1idXR0b25cIiBbYXR0ci5hcmlhLWxhYmVsXT1cImJ1dHRvbkxhYmVsXCI+XG4gICAgICA8c3ZnXG4gICAgICAgIGhlaWdodD1cIjEwMCVcIlxuICAgICAgICB2ZXJzaW9uPVwiMS4xXCJcbiAgICAgICAgdmlld0JveD1cIjAgMCA2OCA0OFwiXG4gICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgIDxwYXRoIGQ9XCJNNjYuNTIsNy43NGMtMC43OC0yLjkzLTIuNDktNS40MS01LjQyLTYuMTlDNTUuNzksLjEzLDM0LDAsMzQsMFMxMi4yMSwuMTMsNi45LDEuNTUgQzMuOTcsMi4zMywyLjI3LDQuODEsMS40OCw3Ljc0QzAuMDYsMTMuMDUsMCwyNCwwLDI0czAuMDYsMTAuOTUsMS40OCwxNi4yNmMwLjc4LDIuOTMsMi40OSw1LjQxLDUuNDIsNi4xOSBDMTIuMjEsNDcuODcsMzQsNDgsMzQsNDhzMjEuNzktMC4xMywyNy4xLTEuNTVjMi45My0wLjc4LDQuNjQtMy4yNiw1LjQyLTYuMTlDNjcuOTQsMzQuOTUsNjgsMjQsNjgsMjRTNjcuOTQsMTMuMDUsNjYuNTIsNy43NHpcIiBmaWxsPVwiI2YwMFwiPjwvcGF0aD5cbiAgICAgICAgPHBhdGggZD1cIk0gNDUsMjQgMjcsMTQgMjcsMzRcIiBmaWxsPVwiI2ZmZlwiPjwvcGF0aD5cbiAgICAgIDwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuICBgLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzdHlsZVVybDogJ3lvdXR1YmUtcGxheWVyLXBsYWNlaG9sZGVyLmNzcycsXG4gIGhvc3Q6IHtcbiAgICAnY2xhc3MnOiAneW91dHViZS1wbGF5ZXItcGxhY2Vob2xkZXInLFxuICAgICdbY2xhc3MueW91dHViZS1wbGF5ZXItcGxhY2Vob2xkZXItbG9hZGluZ10nOiAnaXNMb2FkaW5nJyxcbiAgICAnW3N0eWxlLmJhY2tncm91bmQtaW1hZ2VdJzogJ19nZXRCYWNrZ3JvdW5kSW1hZ2UoKScsXG4gICAgJ1tzdHlsZS53aWR0aC5weF0nOiAnd2lkdGgnLFxuICAgICdbc3R5bGUuaGVpZ2h0LnB4XSc6ICdoZWlnaHQnLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBZb3VUdWJlUGxheWVyUGxhY2Vob2xkZXIge1xuICAvKiogSUQgb2YgdGhlIHZpZGVvIGZvciB3aGljaCB0byBzaG93IHRoZSBwbGFjZWhvbGRlci4gKi9cbiAgQElucHV0KCkgdmlkZW9JZDogc3RyaW5nO1xuXG4gIC8qKiBXaWR0aCBvZiB0aGUgdmlkZW8gZm9yIHdoaWNoIHRvIHNob3cgdGhlIHBsYWNlaG9sZGVyLiAqL1xuICBASW5wdXQoKSB3aWR0aDogbnVtYmVyO1xuXG4gIC8qKiBIZWlnaHQgb2YgdGhlIHZpZGVvIGZvciB3aGljaCB0byBzaG93IHRoZSBwbGFjZWhvbGRlci4gKi9cbiAgQElucHV0KCkgaGVpZ2h0OiBudW1iZXI7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHZpZGVvIGlzIGN1cnJlbnRseSBiZWluZyBsb2FkZWQuICovXG4gIEBJbnB1dCgpIGlzTG9hZGluZzogYm9vbGVhbjtcblxuICAvKiogQWNjZXNzaWJsZSBsYWJlbCBmb3IgdGhlIHBsYXkgYnV0dG9uLiAqL1xuICBASW5wdXQoKSBidXR0b25MYWJlbDogc3RyaW5nO1xuXG4gIC8qKiBRdWFsaXR5IG9mIHRoZSBwbGFjZWhvbGRlciBpbWFnZS4gKi9cbiAgQElucHV0KCkgcXVhbGl0eTogUGxhY2Vob2xkZXJJbWFnZVF1YWxpdHk7XG5cbiAgLyoqIEdldHMgdGhlIGJhY2tncm91bmQgaW1hZ2Ugc2hvd2luZyB0aGUgcGxhY2Vob2xkZXIuICovXG4gIHByb3RlY3RlZCBfZ2V0QmFja2dyb3VuZEltYWdlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IHVybDogc3RyaW5nO1xuXG4gICAgaWYgKHRoaXMucXVhbGl0eSA9PT0gJ2xvdycpIHtcbiAgICAgIHVybCA9IGBodHRwczovL2kueXRpbWcuY29tL3ZpLyR7dGhpcy52aWRlb0lkfS9ocWRlZmF1bHQuanBnYDtcbiAgICB9IGVsc2UgaWYgKHRoaXMucXVhbGl0eSA9PT0gJ2hpZ2gnKSB7XG4gICAgICB1cmwgPSBgaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS8ke3RoaXMudmlkZW9JZH0vbWF4cmVzZGVmYXVsdC5qcGdgO1xuICAgIH0gZWxzZSB7XG4gICAgICB1cmwgPSBgaHR0cHM6Ly9pLnl0aW1nLmNvbS92aV93ZWJwLyR7dGhpcy52aWRlb0lkfS9zZGRlZmF1bHQud2VicGA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGB1cmwoJHt1cmx9KWA7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -461,8 +461,8 @@ export class YouTubePlayer {
|
|
|
461
461
|
// Ensures that everything is cleared out on destroy.
|
|
462
462
|
takeUntil(this._destroyed));
|
|
463
463
|
}
|
|
464
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
465
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.
|
|
464
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.0-next.2", ngImport: i0, type: YouTubePlayer, deps: [{ token: i0.NgZone }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
465
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.0-next.2", type: YouTubePlayer, isStandalone: true, selector: "youtube-player", inputs: { videoId: "videoId", height: ["height", "height", numberAttribute], width: ["width", "width", numberAttribute], startSeconds: ["startSeconds", "startSeconds", coerceTime], endSeconds: ["endSeconds", "endSeconds", coerceTime], suggestedQuality: "suggestedQuality", playerVars: "playerVars", disableCookies: ["disableCookies", "disableCookies", booleanAttribute], loadApi: ["loadApi", "loadApi", booleanAttribute], disablePlaceholder: ["disablePlaceholder", "disablePlaceholder", booleanAttribute], showBeforeIframeApiLoads: ["showBeforeIframeApiLoads", "showBeforeIframeApiLoads", booleanAttribute], placeholderButtonLabel: "placeholderButtonLabel", placeholderImageQuality: "placeholderImageQuality" }, outputs: { ready: "ready", stateChange: "stateChange", error: "error", apiChange: "apiChange", playbackQualityChange: "playbackQualityChange", playbackRateChange: "playbackRateChange" }, viewQueries: [{ propertyName: "youtubeContainer", first: true, predicate: ["youtubeContainer"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `
|
|
466
466
|
@if (_shouldShowPlaceholder()) {
|
|
467
467
|
<youtube-player-placeholder
|
|
468
468
|
[videoId]="videoId!"
|
|
@@ -478,7 +478,7 @@ export class YouTubePlayer {
|
|
|
478
478
|
</div>
|
|
479
479
|
`, isInline: true, dependencies: [{ kind: "component", type: YouTubePlayerPlaceholder, selector: "youtube-player-placeholder", inputs: ["videoId", "width", "height", "isLoading", "buttonLabel", "quality"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
480
480
|
}
|
|
481
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
481
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0-next.2", ngImport: i0, type: YouTubePlayer, decorators: [{
|
|
482
482
|
type: Component,
|
|
483
483
|
args: [{
|
|
484
484
|
selector: 'youtube-player',
|
|
@@ -586,4 +586,4 @@ function loadApi(nonce) {
|
|
|
586
586
|
apiLoaded = true;
|
|
587
587
|
document.body.appendChild(script);
|
|
588
588
|
}
|
|
589
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieW91dHViZS1wbGF5ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMveW91dHViZS1wbGF5ZXIveW91dHViZS1wbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0EsaUNBQWlDO0FBVGpDOzs7Ozs7R0FNRztBQUVILHlFQUF5RTtBQUN6RSxpQ0FBaUM7QUFFakMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBRU4sTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLFdBQVcsRUFHWCxnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLGNBQWMsRUFDZCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixHQUVsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxZQUFZLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNoRyxPQUFPLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBMEIsd0JBQXdCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQzs7QUFTL0YsNkRBQTZEO0FBQzdELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUNyRCx1QkFBdUIsQ0FDeEIsQ0FBQztBQXdCRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFDeEMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsR0FBRyxDQUFDO0FBY3pDLHlDQUF5QztBQUN6QyxTQUFTLFVBQVUsQ0FBQyxLQUF5QjtJQUMzQyxPQUFPLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQXVCSCxNQUFNLE9BQU8sYUFBYTtJQWtCeEIsNkJBQTZCO0lBQzdCLElBQ0ksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsTUFBMEI7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNsRixDQUFDO0lBR0QsNEJBQTRCO0lBQzVCLElBQ0ksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsS0FBeUI7UUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM3RSxDQUFDO0lBNEVELFlBQ1UsT0FBZSxFQUNGLFVBQWtCO1FBRC9CLFlBQU8sR0FBUCxPQUFPLENBQVE7UUF6R1IsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDakMsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBd0IsU0FBUyxDQUFDLENBQUM7UUFDdkUsV0FBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUM3Qyx1QkFBa0IsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN0RCxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBY3pCLFlBQU8sR0FBRyxxQkFBcUIsQ0FBQztRQVVoQyxXQUFNLEdBQUcsb0JBQW9CLENBQUM7UUFxQnRDLDREQUE0RDtRQUU1RCxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQU1oQzs7O1dBR0c7UUFFSCx1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFFcEM7Ozs7V0FJRztRQUNtQyw2QkFBd0IsR0FBWSxLQUFLLENBQUM7UUFXaEYseURBQXlEO1FBQ3RDLFVBQUssR0FDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBaUIsU0FBUyxDQUFDLENBQUM7UUFFL0IsZ0JBQVcsR0FDNUIsSUFBSSxDQUFDLGVBQWUsQ0FBd0IsZUFBZSxDQUFDLENBQUM7UUFFNUMsVUFBSyxHQUN0QixJQUFJLENBQUMsZUFBZSxDQUFrQixTQUFTLENBQUMsQ0FBQztRQUVoQyxjQUFTLEdBQzFCLElBQUksQ0FBQyxlQUFlLENBQWlCLGFBQWEsQ0FBQyxDQUFDO1FBRW5DLDBCQUFxQixHQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFrQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRWhFLHVCQUFrQixHQUNuQyxJQUFJLENBQUMsZUFBZSxDQUErQixzQkFBc0IsQ0FBQyxDQUFDO1FBVTNFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUM7UUFDdkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUM7UUFDdkQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLE1BQU0sRUFBRSxzQkFBc0IsSUFBSSxZQUFZLENBQUM7UUFDN0UsSUFBSSxDQUFDLHVCQUF1QixHQUFHLE1BQU0sRUFBRSx1QkFBdUIsSUFBSSxVQUFVLENBQUM7UUFDN0UsSUFBSSxDQUFDLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDM0I7YUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDdkIsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUN6QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDakI7WUFFRCxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO2dCQUMvQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDcEI7WUFFRCxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7Z0JBQ25GLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzthQUNuQjtTQUNGO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBRS9CLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUM7U0FDakU7UUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsK0VBQStFO0lBQy9FLFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUMxQjthQUFNO1lBQ0wsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO1NBQ2hFO0lBQ0gsQ0FBQztJQUVELGdGQUFnRjtJQUNoRixVQUFVO1FBQ1IsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDM0I7YUFBTTtZQUNMLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztTQUMvRDtJQUNILENBQUM7SUFFRCwrRUFBK0U7SUFDL0UsU0FBUztRQUNQLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQzFCO2FBQU07WUFDTCxtRUFBbUU7WUFDbkUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1NBQzdEO0lBQ0gsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxNQUFNLENBQUMsT0FBZSxFQUFFLGNBQXVCO1FBQzdDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDOUM7YUFBTTtZQUNMLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUMsQ0FBQztTQUMxRDtJQUNILENBQUM7SUFFRCwwRUFBMEU7SUFDMUUsSUFBSTtRQUNGLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ3JCO2FBQU07WUFDTCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxNQUFNO1FBQ0osSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDdkI7YUFBTTtZQUNMLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7U0FDdkM7SUFDSCxDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLE9BQU87UUFDTCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQy9CO1FBRUQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDNUIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQztTQUN6QztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELCtFQUErRTtJQUMvRSxTQUFTLENBQUMsTUFBYztRQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDaEM7YUFBTTtZQUNMLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBRUQsK0VBQStFO0lBQy9FLFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2pDO1FBRUQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUU7WUFDdkUsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDO1NBQ3hDO1FBRUQsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQscUZBQXFGO0lBQ3JGLGVBQWUsQ0FBQyxZQUFvQjtRQUNsQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNuRDthQUFNO1lBQ0wsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztTQUNyRDtJQUNILENBQUM7SUFFRCxxRkFBcUY7SUFDckYsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDdkM7UUFFRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxJQUFJLElBQUksRUFBRTtZQUM3RSxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUM7U0FDOUM7UUFFRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCwrRkFBK0Y7SUFDL0YseUJBQXlCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdEUsQ0FBQztJQUVELDRGQUE0RjtJQUM1RixzQkFBc0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsb0ZBQW9GO0lBQ3BGLGNBQWM7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUU7WUFDbEMsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3RDO1FBRUQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsSUFBSSxJQUFJLEVBQUU7WUFDOUUsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDO1NBQy9DO1FBRUQsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsb0ZBQW9GO0lBQ3BGLGNBQWM7UUFDWixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3RDO1FBRUQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRTtZQUM3RCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQzlDO1FBRUQsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsd0ZBQXdGO0lBQ3hGLGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3RFLENBQUM7SUFFRCwrRkFBK0Y7SUFDL0YseUJBQXlCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdEUsQ0FBQztJQUVELGlGQUFpRjtJQUNqRixXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELGlGQUFpRjtJQUNqRixXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVELHVGQUF1RjtJQUN2RixpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzlELENBQUM7SUFFRDs7O09BR0c7SUFDTyxLQUFLLENBQUMsU0FBa0I7UUFDaEMsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUU7WUFDbkMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNoQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDdkIsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN0QjtpQkFBTSxJQUFJLElBQUksQ0FBQyx3QkFBd0IsSUFBSSxDQUFDLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxTQUFTLENBQUMsRUFBRTtnQkFDM0YsTUFBTSxJQUFJLEtBQUssQ0FDYixvRUFBb0U7b0JBQ2xFLHFFQUFxRTtvQkFDckUsNERBQTRELENBQy9ELENBQUM7YUFDSDtZQUVELElBQUksQ0FBQyx5QkFBeUIsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUM7WUFFaEUsTUFBTSxDQUFDLHVCQUF1QixHQUFHLEdBQUcsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ3hELENBQUMsQ0FBQztTQUNIO2FBQU07WUFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVELHlFQUF5RTtJQUNqRSxrQkFBa0I7UUFDeEIscUVBQXFFO1FBQ3JFLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsRUFBRTtZQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ25CO2FBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsS0FBSyxDQUFDLEVBQUU7WUFDMUMsbUZBQW1GO1lBQ25GLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbEI7SUFDSCxDQUFDO0lBRUQsK0NBQStDO0lBQ3JDLHNCQUFzQjtRQUM5QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUMzQixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsa0ZBQWtGO1FBQ2xGLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ2pFLENBQUM7SUFFRCwyRUFBMkU7SUFDbkUsZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDN0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztTQUMvQjtRQUVELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFFRDs7O09BR0c7SUFDSyxxQkFBcUIsQ0FBQyxPQUFzQjtRQUNsRCxNQUFNLE1BQU0sR0FDVixPQUFPLENBQUMsU0FBUyxDQUFDO1lBQ2xCLE9BQU8sQ0FBQyxZQUFZLENBQUM7WUFDckIsT0FBTyxDQUFDLGdCQUFnQixDQUFDO1lBQ3pCLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssYUFBYSxDQUFDLFNBQWtCO1FBQ3RDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUUvQixxREFBcUQ7UUFDckQsbURBQW1EO1FBQ25ELElBQUksT0FBTyxFQUFFLEtBQUssV0FBVyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUMxRSxPQUFPO1NBQ1I7UUFFRCwyRkFBMkY7UUFDM0YsdUZBQXVGO1FBQ3ZGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQzNDLEdBQUcsRUFBRSxDQUNILElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFO1lBQ2pELE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsa0NBQWtDLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDMUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQiw4REFBOEQ7WUFDOUQsbUVBQW1FO1lBQ25FLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVTtTQUNwRixDQUFDLENBQ0wsQ0FBQztRQUVGLE1BQU0sU0FBUyxHQUFHLEdBQUcsRUFBRTtZQUNyQixzRkFBc0Y7WUFDdEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO2dCQUN0QixJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztnQkFDaEMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDakQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUVuQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtvQkFDNUIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztvQkFDaEUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztpQkFDdEM7Z0JBRUQsc0VBQXNFO2dCQUN0RSxtRUFBbUU7Z0JBQ25FLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7b0JBQ3hGLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztpQkFDbkI7Z0JBRUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7UUFDN0IsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsd0VBQXdFO0lBQ2hFLHdCQUF3QixDQUFDLE1BQWlCLEVBQUUsWUFBZ0M7UUFDbEYsTUFBTSxFQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUMsR0FBRyxZQUFZLENBQUM7UUFFeEUsUUFBUSxhQUFhLEVBQUU7WUFDckIsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDLE9BQU87Z0JBQ3pCLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDbkIsTUFBTTtZQUNSLEtBQUssRUFBRSxDQUFDLFdBQVcsQ0FBQyxNQUFNO2dCQUN4QixNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3BCLE1BQU07WUFDUixLQUFLLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSTtnQkFDdEIsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNuQixNQUFNO1NBQ1Q7UUFFRCxJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUU7WUFDeEIsTUFBTSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUN0QztRQUVELElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtZQUNsQixNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzFCO1FBRUQsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1lBQ2pCLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDekM7UUFFRCxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7WUFDaEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUNsRDtJQUNILENBQUM7SUFFRCw0REFBNEQ7SUFDcEQsVUFBVTtRQUNoQixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztnQkFDeEIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNyQixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQy9CLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtnQkFDM0IsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjthQUN4QyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxnRUFBZ0U7SUFDeEQsUUFBUTtRQUNkLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxtRUFBbUU7SUFDM0QsV0FBVztRQUNqQixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3pDLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDeEQ7SUFDSCxDQUFDO0lBRUQsaUdBQWlHO0lBQ3pGLGVBQWUsQ0FBMkIsSUFBcUI7UUFDckUsNEVBQTRFO1FBQzVFLGdFQUFnRTtRQUNoRSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSTtRQUM3Qix3RkFBd0Y7UUFDeEYsa0ZBQWtGO1FBQ2xGLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNqQixPQUFPLE1BQU07Z0JBQ1gsQ0FBQyxDQUFDLGdCQUFnQixDQUNkLENBQUMsUUFBNEIsRUFBRSxFQUFFO29CQUMvQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUMxQyxDQUFDLEVBQ0QsQ0FBQyxRQUE0QixFQUFFLEVBQUU7b0JBQy9CLHNGQUFzRjtvQkFDdEYsdUZBQXVGO29CQUN2RiwrQ0FBK0M7b0JBQy9DLElBQUk7d0JBQ0YsTUFBTSxFQUFFLG1CQUFtQixFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO3FCQUMvQztvQkFBQyxNQUFNLEdBQUU7Z0JBQ1osQ0FBQyxDQUNGO2dCQUNILENBQUMsQ0FBQyxZQUFZLEVBQUssQ0FBQztRQUN4QixDQUFDLENBQUM7UUFDRiw4REFBOEQ7UUFDOUQsa0VBQWtFO1FBQ2xFLE1BQU0sQ0FBQyxFQUFFLENBQ1AsSUFBSSxVQUFVLENBQUksUUFBUSxDQUFDLEVBQUUsQ0FDM0IsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUNmLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0QsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDckMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUU7U0FDcEMsQ0FBQyxDQUNIO1FBQ0gscURBQXFEO1FBQ3JELFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQzNCLENBQUM7SUFDSixDQUFDOzhHQTFqQlUsYUFBYSx3Q0FpSGQsV0FBVztrR0FqSFYsYUFBYSw2R0FtQkwsZUFBZSw2QkFVZixlQUFlLGtEQTVEM0IsVUFBVSw0Q0FBVixVQUFVLHdIQXlGRSxnQkFBZ0IsbUNBSWhCLGdCQUFnQixvRUFPaEIsZ0JBQWdCLHNGQVFoQixnQkFBZ0IsdWRBN0Z6Qjs7Ozs7Ozs7Ozs7Ozs7R0FjVCw0REFmUyx3QkFBd0I7OzJGQWlCdkIsYUFBYTtrQkF0QnpCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsd0JBQXdCLENBQUM7b0JBQ25DLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7R0FjVDtpQkFDRjs7MEJBa0hJLE1BQU07MkJBQUMsV0FBVzt5Q0FqR3JCLE9BQU87c0JBRE4sS0FBSztnQkFLRixNQUFNO3NCQURULEtBQUs7dUJBQUMsRUFBQyxTQUFTLEVBQUUsZUFBZSxFQUFDO2dCQVcvQixLQUFLO3NCQURSLEtBQUs7dUJBQUMsRUFBQyxTQUFTLEVBQUUsZUFBZSxFQUFDO2dCQVduQyxZQUFZO3NCQURYLEtBQUs7dUJBQUMsRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFDO2dCQUs5QixVQUFVO3NCQURULEtBQUs7dUJBQUMsRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFDO2dCQUs5QixnQkFBZ0I7c0JBRGYsS0FBSztnQkFRTixVQUFVO3NCQURULEtBQUs7Z0JBS04sY0FBYztzQkFEYixLQUFLO3VCQUFDLEVBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFDO2dCQUtwQyxPQUFPO3NCQUROLEtBQUs7dUJBQUMsRUFBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUM7Z0JBUXBDLGtCQUFrQjtzQkFEakIsS0FBSzt1QkFBQyxFQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBQztnQkFRRSx3QkFBd0I7c0JBQTdELEtBQUs7dUJBQUMsRUFBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUM7Z0JBRzNCLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFNRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBR2EsS0FBSztzQkFBdkIsTUFBTTtnQkFHWSxXQUFXO3NCQUE3QixNQUFNO2dCQUdZLEtBQUs7c0JBQXZCLE1BQU07Z0JBR1ksU0FBUztzQkFBM0IsTUFBTTtnQkFHWSxxQkFBcUI7c0JBQXZDLE1BQU07Z0JBR1ksa0JBQWtCO3NCQUFwQyxNQUFNO2dCQUtQLGdCQUFnQjtzQkFEZixTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQzs7QUFpZC9DLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztBQUV0Qiw0REFBNEQ7QUFDNUQsU0FBUyxPQUFPLENBQUMsS0FBb0I7SUFDbkMsSUFBSSxTQUFTLEVBQUU7UUFDYixPQUFPO0tBQ1I7SUFFRCwyRkFBMkY7SUFDM0YsTUFBTSxHQUFHLEdBQUcsb0NBQW9DLENBQUM7SUFDakQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQVksRUFBRSxFQUFFO1FBQ2hDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDN0MsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUU5QyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO1lBQzFCLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFFbEIsSUFBSSxPQUFPLFNBQVMsS0FBSyxXQUFXLElBQUksU0FBUyxFQUFFO2dCQUNqRCxPQUFPLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2FBQ3pEO1NBQ0Y7SUFDSCxDQUFDLENBQUM7SUFDRixNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDMUMsTUFBYyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDMUIsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFFcEIsSUFBSSxLQUFLLEVBQUU7UUFDVCxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztLQUN0QjtJQUVELHdFQUF3RTtJQUN4RSw0RUFBNEU7SUFDNUUsU0FBUyxHQUFHLElBQUksQ0FBQztJQUNqQixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8vIFdvcmthcm91bmQgZm9yOiBodHRwczovL2dpdGh1Yi5jb20vYmF6ZWxidWlsZC9ydWxlc19ub2RlanMvaXNzdWVzLzEyNjVcbi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwieW91dHViZVwiIC8+XG5cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBJbmplY3QsXG4gIFBMQVRGT1JNX0lELFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIG51bWJlckF0dHJpYnV0ZSxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIGluamVjdCxcbiAgQ1NQX05PTkNFLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQWZ0ZXJWaWV3SW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2lzUGxhdGZvcm1Ccm93c2VyfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBvZiBhcyBvYnNlcnZhYmxlT2YsIFN1YmplY3QsIEJlaGF2aW9yU3ViamVjdCwgZnJvbUV2ZW50UGF0dGVybn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3Rha2VVbnRpbCwgc3dpdGNoTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1BsYWNlaG9sZGVySW1hZ2VRdWFsaXR5LCBZb3VUdWJlUGxheWVyUGxhY2Vob2xkZXJ9IGZyb20gJy4veW91dHViZS1wbGF5ZXItcGxhY2Vob2xkZXInO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIFlUOiB0eXBlb2YgWVQgfCB1bmRlZmluZWQ7XG4gICAgb25Zb3VUdWJlSWZyYW1lQVBJUmVhZHk6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKiogSW5qZWN0aW9uIHRva2VuIHVzZWQgdG8gY29uZmlndXJlIHRoZSBgWW91VHViZVBsYXllcmAuICovXG5leHBvcnQgY29uc3QgWU9VVFVCRV9QTEFZRVJfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPFlvdVR1YmVQbGF5ZXJDb25maWc+KFxuICAnWU9VVFVCRV9QTEFZRVJfQ09ORklHJyxcbik7XG5cbi8qKiBPYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgdGhlIGBZb3VUdWJlUGxheWVyYC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgWW91VHViZVBsYXllckNvbmZpZyB7XG4gIC8qKiBXaGV0aGVyIHRvIGxvYWQgdGhlIFlvdVR1YmUgaWZyYW1lIEFQSSBhdXRvbWF0aWNhbGx5LiBEZWZhdWx0cyB0byBgdHJ1ZWAuICovXG4gIGxvYWRBcGk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBwbGF5ZXIgc2hvd3MgYSBwbGFjZWhvbGRlciBpbWFnZSBpbnN0ZWFkIG9mIGxvYWRpbmcgdGhlIFlvdVR1YmUgQVBJIHdoaWNoXG4gICAqIGltcHJvdmVzIHRoZSBpbml0aWFsIHBhZ2UgbG9hZCBwZXJmb3JtYW5jZS4gVXNlIHRoaXMgb3B0aW9uIHRvIGRpc2FibGUgdGhlIHBsYWNlaG9sZGVyIGxvYWRpbmdcbiAgICogYmVoYXZpb3IgZ2xvYmFsbHkuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAqL1xuICBkaXNhYmxlUGxhY2Vob2xkZXI/OiBib29sZWFuO1xuXG4gIC8qKiBBY2Nlc3NpYmxlIGxhYmVsIGZvciB0aGUgcGxheSBidXR0b24gaW5zaWRlIG9mIHRoZSBwbGFjZWhvbGRlci4gKi9cbiAgcGxhY2Vob2xkZXJCdXR0b25MYWJlbD86IHN0cmluZztcblxuICAvKipcbiAgICogUXVhbGl0eSBvZiB0aGUgZGlzcGxheWVkIHBsYWNlaG9sZGVyIGltYWdlLiBEZWZhdWx0cyB0byBgc3RhbmRhcmRgLFxuICAgKiBiZWNhdXNlIG5vdCBhbGwgdmlkZW8gaGF2ZSBhIGhpZ2gtcXVhbGl0eSBwbGFjZWhvbGRlci5cbiAgICovXG4gIHBsYWNlaG9sZGVySW1hZ2VRdWFsaXR5PzogUGxhY2Vob2xkZXJJbWFnZVF1YWxpdHk7XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1BMQVlFUl9XSURUSCA9IDY0MDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1BMQVlFUl9IRUlHSFQgPSAzOTA7XG5cbi8qKlxuICogT2JqZWN0IHVzZWQgdG8gc3RvcmUgdGhlIHN0YXRlIG9mIHRoZSBwbGF5ZXIgaWYgdGhlXG4gKiB1c2VyIHRyaWVzIHRvIGludGVyYWN0IHdpdGggdGhlIEFQSSBiZWZvcmUgaXQgaGFzIGJlZW4gbG9hZGVkLlxuICovXG5pbnRlcmZhY2UgUGVuZGluZ1BsYXllclN0YXRlIHtcbiAgcGxheWJhY2tTdGF0ZT86IFlULlBsYXllclN0YXRlLlBMQVlJTkcgfCBZVC5QbGF5ZXJTdGF0ZS5QQVVTRUQgfCBZVC5QbGF5ZXJTdGF0ZS5DVUVEO1xuICBwbGF5YmFja1JhdGU/OiBudW1iZXI7XG4gIHZvbHVtZT86IG51bWJlcjtcbiAgbXV0ZWQ/OiBib29sZWFuO1xuICBzZWVrPzoge3NlY29uZHM6IG51bWJlcjsgYWxsb3dTZWVrQWhlYWQ6IGJvb2xlYW59O1xufVxuXG4vKiogQ29lcmNpb24gZnVuY3Rpb24gZm9yIHRpbWUgdmFsdWVzLiAqL1xuZnVuY3Rpb24gY29lcmNlVGltZSh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyB2YWx1ZSA6IG51bWJlckF0dHJpYnV0ZSh2YWx1ZSwgMCk7XG59XG5cbi8qKlxuICogQW5ndWxhciBjb21wb25lbnQgdGhhdCByZW5kZXJzIGEgWW91VHViZSBwbGF5ZXIgdmlhIHRoZSBZb3VUdWJlIHBsYXllclxuICogaWZyYW1lIEFQSS5cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20veW91dHViZS9pZnJhbWVfYXBpX3JlZmVyZW5jZVxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd5b3V0dWJlLXBsYXllcicsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbWW91VHViZVBsYXllclBsYWNlaG9sZGVyXSxcbiAgdGVtcGxhdGU6IGBcbiAgICBAaWYgKF9zaG91bGRTaG93UGxhY2Vob2xkZXIoKSkge1xuICAgICAgPHlvdXR1YmUtcGxheWVyLXBsYWNlaG9sZGVyXG4gICAgICAgIFt2aWRlb0lkXT1cInZpZGVvSWQhXCJcbiAgICAgICAgW3dpZHRoXT1cIndpZHRoXCJcbiAgICAgICAgW2hlaWdodF09XCJoZWlnaHRcIlxuICAgICAgICBbaXNMb2FkaW5nXT1cIl9pc0xvYWRpbmdcIlxuICAgICAgICBbYnV0dG9uTGFiZWxdPVwicGxhY2Vob2xkZXJCdXR0b25MYWJlbFwiXG4gICAgICAgIFtxdWFsaXR5XT1cInBsYWNlaG9sZGVySW1hZ2VRdWFsaXR5XCJcbiAgICAgICAgKGNsaWNrKT1cIl9sb2FkKHRydWUpXCIvPlxuICAgIH1cbiAgICA8ZGl2IFtzdHlsZS5kaXNwbGF5XT1cIl9zaG91bGRTaG93UGxhY2Vob2xkZXIoKSA/ICdub25lJyA6ICcnXCI+XG4gICAgICA8ZGl2ICN5b3V0dWJlQ29udGFpbmVyPjwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBZb3VUdWJlUGxheWVyIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAvKiogV2hldGhlciB3ZSdyZSBjdXJyZW50bHkgcmVuZGVyaW5nIGluc2lkZSBhIGJyb3dzZXIuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzQnJvd3NlcjogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfcGxheWVyOiBZVC5QbGF5ZXIgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX3BlbmRpbmdQbGF5ZXI6IFlULlBsYXllciB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfZXhpc3RpbmdBcGlSZWFkeUNhbGxiYWNrOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX3BlbmRpbmdQbGF5ZXJTdGF0ZTogUGVuZGluZ1BsYXllclN0YXRlIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wbGF5ZXJDaGFuZ2VzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxZVC5QbGF5ZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX25vbmNlID0gaW5qZWN0KENTUF9OT05DRSwge29wdGlvbmFsOiB0cnVlfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5nZURldGVjdG9yUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJvdGVjdGVkIF9pc0xvYWRpbmcgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIF9oYXNQbGFjZWhvbGRlciA9IHRydWU7XG5cbiAgLyoqIFlvdVR1YmUgVmlkZW8gSUQgdG8gdmlldyAqL1xuICBASW5wdXQoKVxuICB2aWRlb0lkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIEhlaWdodCBvZiB2aWRlbyBwbGF5ZXIgKi9cbiAgQElucHV0KHt0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZX0pXG4gIGdldCBoZWlnaHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xuICB9XG4gIHNldCBoZWlnaHQoaGVpZ2h0OiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQgPT0gbnVsbCB8fCBpc05hTihoZWlnaHQpID8gREVGQVVMVF9QTEFZRVJfSEVJR0hUIDogaGVpZ2h0O1xuICB9XG4gIHByaXZhdGUgX2hlaWdodCA9IERFRkFVTFRfUExBWUVSX0hFSUdIVDtcblxuICAvKiogV2lkdGggb2YgdmlkZW8gcGxheWVyICovXG4gIEBJbnB1dCh7dHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGV9KVxuICBnZXQgd2lkdGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gIH1cbiAgc2V0IHdpZHRoKHdpZHRoOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl93aWR0aCA9IHdpZHRoID09IG51bGwgfHwgaXNOYU4od2lkdGgpID8gREVGQVVMVF9QTEFZRVJfV0lEVEggOiB3aWR0aDtcbiAgfVxuICBwcml2YXRlIF93aWR0aCA9IERFRkFVTFRfUExBWUVSX1dJRFRIO1xuXG4gIC8qKiBUaGUgbW9tZW50IHdoZW4gdGhlIHBsYXllciBpcyBzdXBwb3NlZCB0byBzdGFydCBwbGF5aW5nICovXG4gIEBJbnB1dCh7dHJhbnNmb3JtOiBjb2VyY2VUaW1lfSlcbiAgc3RhcnRTZWNvbmRzOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIFRoZSBtb21lbnQgd2hlbiB0aGUgcGxheWVyIGlzIHN1cHBvc2VkIHRvIHN0b3AgcGxheWluZyAqL1xuICBASW5wdXQoe3RyYW5zZm9ybTogY29lcmNlVGltZX0pXG4gIGVuZFNlY29uZHM6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAvKiogVGhlIHN1Z2dlc3RlZCBxdWFsaXR5IG9mIHRoZSBwbGF5ZXIgKi9cbiAgQElucHV0KClcbiAgc3VnZ2VzdGVkUXVhbGl0eTogWVQuU3VnZ2VzdGVkVmlkZW9RdWFsaXR5IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBFeHRyYSBwYXJhbWV0ZXJzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBwbGF5ZXIuIFNlZTpcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20veW91dHViZS9wbGF5ZXJfcGFyYW1ldGVycy5odG1sP3BsYXllclZlcnNpb249SFRNTDUjUGFyYW1ldGVyc1xuICAgKi9cbiAgQElucHV0KClcbiAgcGxheWVyVmFyczogWVQuUGxheWVyVmFycyB8IHVuZGVmaW5lZDtcblxuICAvKiogV2hldGhlciBjb29raWVzIGluc2lkZSB0aGUgcGxheWVyIGhhdmUgYmVlbiBkaXNhYmxlZC4gKi9cbiAgQElucHV0KHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KVxuICBkaXNhYmxlQ29va2llczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgbG9hZCB0aGUgWW91VHViZSBpZnJhbWUgQVBJLiBEZWZhdWx0cyB0byBgdHJ1ZWAuICovXG4gIEBJbnB1dCh7dHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSlcbiAgbG9hZEFwaTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQnkgZGVmYXVsdCB0aGUgcGxheWVyIHNob3dzIGEgcGxhY2Vob2xkZXIgaW1hZ2UgaW5zdGVhZCBvZiBsb2FkaW5nIHRoZSBZb3VUdWJlIEFQSSB3aGljaFxuICAgKiBpbXByb3ZlcyB0aGUgaW5pdGlhbCBwYWdlIGxvYWQgcGVyZm9ybWFuY2UuIFRoaXMgaW5wdXQgYWxsb3dzIGZvciB0aGUgYmVoYXZpb3IgdG8gYmUgZGlzYWJsZWQuXG4gICAqL1xuICBASW5wdXQoe3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pXG4gIGRpc2FibGVQbGFjZWhvbGRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBpZnJhbWUgd2lsbCBhdHRlbXB0IHRvIGxvYWQgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzIG9mIHRoZSBhcGkgb24gdGhlXG4gICAqIHBhZ2UuIFNldCB0aGlzIHRvIHRydWUgaWYgeW91IGRvbid0IHdhbnQgdGhlIGBvbllvdVR1YmVJZnJhbWVBUElSZWFkeWAgZmllbGQgdG8gYmVcbiAgICogc2V0IG9uIHRoZSBnbG9iYWwgd2luZG93LlxuICAgKi9cbiAgQElucHV0KHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KSBzaG93QmVmb3JlSWZyYW1lQXBpTG9hZHM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogQWNjZXNzaWJsZSBsYWJlbCBmb3IgdGhlIHBsYXkgYnV0dG9uIGluc2lkZSBvZiB0aGUgcGxhY2Vob2xkZXIuICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyQnV0dG9uTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogUXVhbGl0eSBvZiB0aGUgZGlzcGxheWVkIHBsYWNlaG9sZGVyIGltYWdlLiBEZWZhdWx0cyB0byBgc3RhbmRhcmRgLFxuICAgKiBiZWNhdXNlIG5vdCBhbGwgdmlkZW8gaGF2ZSBhIGhpZ2gtcXVhbGl0eSBwbGFjZWhvbGRlci5cbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVySW1hZ2VRdWFsaXR5OiBQbGFjZWhvbGRlckltYWdlUXVhbGl0eTtcblxuICAvKiogT3V0cHV0cyBhcmUgZGlyZWN0IHByb3hpZXMgZnJvbSB0aGUgcGxheWVyIGl0c2VsZi4gKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHJlYWR5OiBPYnNlcnZhYmxlPFlULlBsYXllckV2ZW50PiA9XG4gICAgdGhpcy5fZ2V0TGF6eUVtaXR0ZXI8WVQuUGxheWVyRXZlbnQ+KCdvblJlYWR5Jyk7XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHN0YXRlQ2hhbmdlOiBPYnNlcnZhYmxlPFlULk9uU3RhdGVDaGFuZ2VFdmVudD4gPVxuICAgIHRoaXMuX2dldExhenlFbWl0dGVyPFlULk9uU3RhdGVDaGFuZ2VFdmVudD4oJ29uU3RhdGVDaGFuZ2UnKTtcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgZXJyb3I6IE9ic2VydmFibGU8WVQuT25FcnJvckV2ZW50PiA9XG4gICAgdGhpcy5fZ2V0TGF6eUVtaXR0ZXI8WVQuT25FcnJvckV2ZW50Pignb25FcnJvcicpO1xuXG4gIEBPdXRwdXQoKSByZWFkb25seSBhcGlDaGFuZ2U6IE9ic2VydmFibGU8WVQuUGxheWVyRXZlbnQ+ID1cbiAgICB0aGlzLl9nZXRMYXp5RW1pdHRlcjxZVC5QbGF5ZXJFdmVudD4oJ29uQXBpQ2hhbmdlJyk7XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHBsYXliYWNrUXVhbGl0eUNoYW5nZTogT2JzZXJ2YWJsZTxZVC5PblBsYXliYWNrUXVhbGl0eUNoYW5nZUV2ZW50PiA9XG4gICAgdGhpcy5fZ2V0TGF6eUVtaXR0ZXI8WVQuT25QbGF5YmFja1F1YWxpdHlDaGFuZ2VFdmVudD4oJ29uUGxheWJhY2tRdWFsaXR5Q2hhbmdlJyk7XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHBsYXliYWNrUmF0ZUNoYW5nZTogT2JzZXJ2YWJsZTxZVC5PblBsYXliYWNrUmF0ZUNoYW5nZUV2ZW50PiA9XG4gICAgdGhpcy5fZ2V0TGF6eUVtaXR0ZXI8WVQuT25QbGF5YmFja1JhdGVDaGFuZ2VFdmVudD4oJ29uUGxheWJhY2tSYXRlQ2hhbmdlJyk7XG5cbiAgLyoqIFRoZSBlbGVtZW50IHRoYXQgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgaWZyYW1lLiAqL1xuICBAVmlld0NoaWxkKCd5b3V0dWJlQ29udGFpbmVyJywge3N0YXRpYzogdHJ1ZX0pXG4gIHlvdXR1YmVDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX25nWm9uZTogTmdab25lLFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHBsYXRmb3JtSWQ6IE9iamVjdCxcbiAgKSB7XG4gICAgY29uc3QgY29uZmlnID0gaW5qZWN0KFlPVVRVQkVfUExBWUVSX0NPTkZJRywge29wdGlvbmFsOiB0cnVlfSk7XG4gICAgdGhpcy5sb2FkQXBpID0gY29uZmlnPy5sb2FkQXBpID8/IHRydWU7XG4gICAgdGhpcy5kaXNhYmxlUGxhY2Vob2xkZXIgPSAhIWNvbmZpZz8uZGlzYWJsZVBsYWNlaG9sZGVyO1xuICAgIHRoaXMucGxhY2Vob2xkZXJCdXR0b25MYWJlbCA9IGNvbmZpZz8ucGxhY2Vob2xkZXJCdXR0b25MYWJlbCB8fCAnUGxheSB2aWRlbyc7XG4gICAgdGhpcy5wbGFjZWhvbGRlckltYWdlUXVhbGl0eSA9IGNvbmZpZz8ucGxhY2Vob2xkZXJJbWFnZVF1YWxpdHkgfHwgJ3N0YW5kYXJkJztcbiAgICB0aGlzLl9pc0Jyb3dzZXIgPSBpc1BsYXRmb3JtQnJvd3NlcihwbGF0Zm9ybUlkKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLl9jb25kaXRpb25hbGx5TG9hZCgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9zaG91bGRSZWNyZWF0ZVBsYXllcihjaGFuZ2VzKSkge1xuICAgICAgdGhpcy5fY29uZGl0aW9uYWxseUxvYWQoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgaWYgKGNoYW5nZXNbJ3dpZHRoJ10gfHwgY2hhbmdlc1snaGVpZ2h0J10pIHtcbiAgICAgICAgdGhpcy5fc2V0U2l6ZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlc1snc3VnZ2VzdGVkUXVhbGl0eSddKSB7XG4gICAgICAgIHRoaXMuX3NldFF1YWxpdHkoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYW5nZXNbJ3N0YXJ0U2Vjb25kcyddIHx8IGNoYW5nZXNbJ2VuZFNlY29uZHMnXSB8fCBjaGFuZ2VzWydzdWdnZXN0ZWRRdWFsaXR5J10pIHtcbiAgICAgICAgdGhpcy5fY3VlUGxheWVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fcGVuZGluZ1BsYXllcj8uZGVzdHJveSgpO1xuXG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgdGhpcy5fcGxheWVyLmRlc3Ryb3koKTtcbiAgICAgIHdpbmRvdy5vbllvdVR1YmVJZnJhbWVBUElSZWFkeSA9IHRoaXMuX2V4aXN0aW5nQXBpUmVhZHlDYWxsYmFjaztcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXJDaGFuZ2VzLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZGVzdHJveWVkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20veW91dHViZS9pZnJhbWVfYXBpX3JlZmVyZW5jZSNwbGF5VmlkZW8gKi9cbiAgcGxheVZpZGVvKCkge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3BsYXllci5wbGF5VmlkZW8oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZ2V0UGVuZGluZ1N0YXRlKCkucGxheWJhY2tTdGF0ZSA9IFlULlBsYXllclN0YXRlLlBMQVlJTkc7XG4gICAgfVxuICB9XG5cbiAgLyoqIFNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS95b3V0dWJlL2lmcmFtZV9hcGlfcmVmZXJlbmNlI3BhdXNlVmlkZW8gKi9cbiAgcGF1c2VWaWRlbygpIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIucGF1c2VWaWRlbygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9nZXRQZW5kaW5nU3RhdGUoKS5wbGF5YmFja1N0YXRlID0gWVQuUGxheWVyU3RhdGUuUEFVU0VEO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20veW91dHViZS9pZnJhbWVfYXBpX3JlZmVyZW5jZSNzdG9wVmlkZW8gKi9cbiAgc3RvcFZpZGVvKCkge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3BsYXllci5zdG9wVmlkZW8oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSXQgc2VlbXMgbGlrZSBZb3VUdWJlIHNldHMgdGhlIHBsYXllciB0byBDVUVEIHdoZW4gaXQncyBzdG9wcGVkLlxuICAgICAgdGhpcy5fZ2V0UGVuZGluZ1N0YXRlKCkucGxheWJhY2tTdGF0ZSA9IFlULlBsYXllclN0YXRlLkNVRUQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIFNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS95b3V0dWJlL2lmcmFtZV9hcGlfcmVmZXJlbmNlI3NlZWtUbyAqL1xuICBzZWVrVG8oc2Vjb25kczogbnVtYmVyLCBhbGxvd1NlZWtBaGVhZDogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3BsYXllci5zZWVrVG8oc2Vjb25kcywgYWxsb3dTZWVrQWhlYWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9nZXRQZW5kaW5nU3RhdGUoKS5zZWVrID0ge3NlY29uZHMsIGFsbG93U2Vla0FoZWFkfTtcbiAgICB9XG4gIH1cblxuICAvKiogU2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3lvdXR1YmUvaWZyYW1lX2FwaV9yZWZlcmVuY2UjbXV0ZSAqL1xuICBtdXRlKCkge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3BsYXllci5tdXRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2dldFBlbmRpbmdTdGF0ZSgpLm11dGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKiogU2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3lvdXR1YmUvaWZyYW1lX2FwaV9yZWZlcmVuY2UjdW5NdXRlICovXG4gIHVuTXV0ZSgpIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIudW5NdXRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2dldFBlbmRpbmdTdGF0ZSgpLm11dGVkID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqIFNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS95b3V0dWJlL2lmcmFtZV9hcGlfcmVmZXJlbmNlI2lzTXV0ZWQgKi9cbiAgaXNNdXRlZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcGxheWVyLmlzTXV0ZWQoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVuZGluZ1BsYXllclN0YXRlKSB7XG4gICAgICByZXR1cm4gISF0aGlzLl9wZW5kaW5nUGxheWVyU3RhdGUubXV0ZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIFNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS95b3V0dWJlL2lmcmFtZV9hcGlfcmVmZXJlbmNlI3NldFZvbHVtZSAqL1xuICBzZXRWb2x1bWUodm9sdW1lOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIuc2V0Vm9sdW1lKHZvbHVtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2dldFBlbmRpbmdTdGF0ZSgpLnZvbHVtZSA9IHZvbHVtZTtcbiAgICB9XG4gIH1cblxuICAvKiogU2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3lvdXR1YmUvaWZyYW1lX2FwaV9yZWZlcmVuY2UjZ2V0Vm9sdW1lICovXG4gIGdldFZvbHVtZSgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXIuZ2V0Vm9sdW1lKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BlbmRpbmdQbGF5ZXJTdGF0ZSAmJiB0aGlzLl9wZW5kaW5nUGxheWVyU3RhdGUudm9sdW1lICE9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wZW5kaW5nUGxheWVyU3RhdGUudm9sdW1lO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLyoqIFNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS95b3V0dWJlL2lmcmFtZV9hcGlfcmVmZXJlbmNlI3NldFBsYXliYWNrUmF0ZSAqL1xuICBzZXRQbGF5YmFja1JhdGUocGxheWJhY2tSYXRlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcGxheWVyLnNldFBsYXliYWNrUmF0ZShwbGF5YmFja1JhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9nZXRQZW5kaW5nU3RhdGUoKS5wbGF5YmFja1JhdGUgPSBwbGF5YmFja1JhdGU7XG4gICAgfVxuICB9XG5cbiAgLyoqIFNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS95b3V0dWJlL2lmcmFtZV9hcGlfcmVmZXJlbmNlI2dldFBsYXliYWNrUmF0ZSAqL1xuICBnZXRQbGF5YmFja1JhdGUoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcGxheWVyLmdldFBsYXliYWNrUmF0ZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZW5kaW5nUGxheWVyU3RhdGUgJiYgdGhpcy5fcGVuZGluZ1BsYXllclN0YXRlLnBsYXliYWNrUmF0ZSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcGVuZGluZ1BsYXllclN0YXRlLnBsYXliYWNrUmF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIC8qKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20veW91dHViZS9pZnJhbWVfYXBpX3JlZmVyZW5jZSNnZXRBdmFpbGFibGVQbGF5YmFja1JhdGVzICovXG4gIGdldEF2YWlsYWJsZVBsYXliYWNrUmF0ZXMoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLl9wbGF5ZXIgPyB0aGlzLl9wbGF5ZXIuZ2V0QXZhaWxhYmxlUGxheWJhY2tSYXRlcygpIDogW107XG4gIH1cblxuICAvKiogU2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3lvdXR1YmUvaWZyYW1lX2FwaV9yZWZlcmVuY2UjZ2V0VmlkZW9Mb2FkZWRGcmFjdGlvbiAqL1xuICBnZXRWaWRlb0xvYWRlZEZyYWN0aW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYXllciA/IHRoaXMuX3BsYXllci5nZXRWaWRlb0xvYWRlZEZyYWN0aW9uKCkgOiAwO1xuICB9XG5cbiAgLyoqIFNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS95b3V0dWJlL2lmcmFtZV9hcGlfcmVmZXJlbmNlI2dldFBsYXllclN0YXRlICovXG4gIGdldFBsYXllclN0YXRlKCk6IFlULlBsYXllclN0YXRlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMuX2lzQnJvd3NlciB8fCAhd2luZG93LllUKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXIuZ2V0UGxheWVyU3RhdGUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVuZGluZ1BsYXllclN0YXRlICYmIHRoaXMuX3BlbmRpbmdQbGF5ZXJTdGF0ZS5wbGF5YmFja1N0YXRlICE9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wZW5kaW5nUGxheWVyU3RhdGUucGxheWJhY2tTdGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gWVQuUGxheWVyU3RhdGUuVU5TVEFSVEVEO1xuICB9XG5cbiAgLyoqIFNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS95b3V0dWJlL2lmcmFtZV9hcGlfcmVmZXJlbmNlI2dldEN1cnJlbnRUaW1lICovXG4gIGdldEN1cnJlbnRUaW1lKCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3BsYXllci5nZXRDdXJyZW50VGltZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZW5kaW5nUGxheWVyU3RhdGUgJiYgdGhpcy5fcGVuZGluZ1BsYXllclN0YXRlLnNlZWspIHtcbiAgICAgIHJldHVybiB0aGlzLl9wZW5kaW5nUGxheWVyU3RhdGUuc2Vlay5zZWNvbmRzO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLyoqIFNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS95b3V0dWJlL2lmcmFtZV9hcGlfcmVmZXJlbmNlI2dldFBsYXliYWNrUXVhbGl0eSAqL1xuICBnZXRQbGF5YmFja1F1YWxpdHkoKTogWVQuU3VnZ2VzdGVkVmlkZW9RdWFsaXR5IHtcbiAgICByZXR1cm4gdGhpcy5fcGxheWVyID8gdGhpcy5fcGxheWVyLmdldFBsYXliYWNrUXVhbGl0eSgpIDogJ2RlZmF1bHQnO1xuICB9XG5cbiAgLyoqIFNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS95b3V0dWJlL2lmcmFtZV9hcGlfcmVmZXJlbmNlI2dldEF2YWlsYWJsZVF1YWxpdHlMZXZlbHMgKi9cbiAgZ2V0QXZhaWxhYmxlUXVhbGl0eUxldmVscygpOiBZVC5TdWdnZXN0ZWRWaWRlb1F1YWxpdHlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYXllciA/IHRoaXMuX3BsYXllci5nZXRBdmFpbGFibGVRdWFsaXR5TGV2ZWxzKCkgOiBbXTtcbiAgfVxuXG4gIC8qKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20veW91dHViZS9pZnJhbWVfYXBpX3JlZmVyZW5jZSNnZXREdXJhdGlvbiAqL1xuICBnZXREdXJhdGlvbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9wbGF5ZXIgPyB0aGlzLl9wbGF5ZXIuZ2V0RHVyYXRpb24oKSA6IDA7XG4gIH1cblxuICAvKiogU2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3lvdXR1YmUvaWZyYW1lX2FwaV9yZWZlcmVuY2UjZ2V0VmlkZW9VcmwgKi9cbiAgZ2V0VmlkZW9VcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcGxheWVyID8gdGhpcy5fcGxheWVyLmdldFZpZGVvVXJsKCkgOiAnJztcbiAgfVxuXG4gIC8qKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20veW91dHViZS9pZnJhbWVfYXBpX3JlZmVyZW5jZSNnZXRWaWRlb0VtYmVkQ29kZSAqL1xuICBnZXRWaWRlb0VtYmVkQ29kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wbGF5ZXIgPyB0aGlzLl9wbGF5ZXIuZ2V0VmlkZW9FbWJlZENvZGUoKSA6ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBZb3VUdWJlIEFQSSBhbmQgc2V0cyB1cCB0aGUgcGxheWVyLlxuICAgKiBAcGFyYW0gcGxheVZpZGVvIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBwbGF5IHRoZSB2aWRlbyBvbmNlIHRoZSBwbGF5ZXIgaXMgbG9hZGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9sb2FkKHBsYXlWaWRlbzogYm9vbGVhbikge1xuICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlJ3JlIG5vdCBpbiBhIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgaWYgKCF0aGlzLl9pc0Jyb3dzZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXdpbmRvdy5ZVCB8fCAhd2luZG93LllULlBsYXllcikge1xuICAgICAgaWYgKHRoaXMubG9hZEFwaSkge1xuICAgICAgICB0aGlzLl9pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICBsb2FkQXBpKHRoaXMuX25vbmNlKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG93QmVmb3JlSWZyYW1lQXBpTG9hZHMgJiYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdOYW1lc3BhY2UgWVQgbm90IGZvdW5kLCBjYW5ub3QgY29uc3RydWN0IGVtYmVkZGVkIHlvdXR1YmUgcGxheWVyLiAnICtcbiAgICAgICAgICAgICdQbGVhc2UgaW5zdGFsbCB0aGUgWW91VHViZSBQbGF5ZXIgQVBJIFJlZmVyZW5jZSBmb3IgaWZyYW1lIEVtYmVkczogJyArXG4gICAgICAgICAgICAnaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20veW91dHViZS9pZnJhbWVfYXBpX3JlZmVyZW5jZScsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2V4aXN0aW5nQXBpUmVhZHlDYWxsYmFjayA9IHdpbmRvdy5vbllvdVR1YmVJZnJhbWVBUElSZWFkeTtcblxuICAgICAgd2luZG93Lm9uWW91VHViZUlmcmFtZUFQSVJlYWR5ID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9leGlzdGluZ0FwaVJlYWR5Q2FsbGJhY2s/LigpO1xuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuX2NyZWF0ZVBsYXllcihwbGF5VmlkZW8pKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NyZWF0ZVBsYXllcihwbGF5VmlkZW8pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBMb2FkcyB0aGUgcGxheWVyIGRlcGVuZGluZyBvbiB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGNvbXBvbmVudC4gKi9cbiAgcHJpdmF0ZSBfY29uZGl0aW9uYWxseUxvYWQoKSB7XG4gICAgLy8gSWYgdGhlIHBsYWNlaG9sZGVyIGlzbid0IHNob3duIGFueW1vcmUsIHdlIGhhdmUgdG8gdHJpZ2dlciBhIGxvYWQuXG4gICAgaWYgKCF0aGlzLl9zaG91bGRTaG93UGxhY2Vob2xkZXIoKSkge1xuICAgICAgdGhpcy5fbG9hZChmYWxzZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnBsYXllclZhcnM/LmF1dG9wbGF5ID09PSAxKSB7XG4gICAgICAvLyBJZiBpdCdzIGFuIGF1dG9wbGF5aW5nIHZpZGVvLCB3ZSBoYXZlIHRvIGhpZGUgdGhlIHBsYWNlaG9sZGVyIGFuZCBzdGFydCBwbGF5aW5nLlxuICAgICAgdGhpcy5fbG9hZCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICAvKiogV2hldGhlciB0byBzaG93IHRoZSBwbGFjZWhvbGRlciBlbGVtZW50LiAqL1xuICBwcm90ZWN0ZWQgX3Nob3VsZFNob3dQbGFjZWhvbGRlcigpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlUGxhY2Vob2xkZXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBTaW5jZSB3ZSBkb24ndCBsb2FkIHRoZSBBUEkgb24gdGhlIHNlcnZlciwgd2Ugc2hvdyB0aGUgcGxhY2Vob2xkZXIgcGVybWFuZW50bHkuXG4gICAgaWYgKCF0aGlzLl9pc0Jyb3dzZXIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9oYXNQbGFjZWhvbGRlciAmJiAhIXRoaXMudmlkZW9JZCAmJiAhdGhpcy5fcGxheWVyO1xuICB9XG5cbiAgLyoqIEdldHMgYW4gb2JqZWN0IHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gc3RvcmUgdGhlIHRlbXBvcmFyeSBBUEkgc3RhdGUuICovXG4gIHByaXZhdGUgX2dldFBlbmRpbmdTdGF0ZSgpOiBQZW5kaW5nUGxheWVyU3RhdGUge1xuICAgIGlmICghdGhpcy5fcGVuZGluZ1BsYXllclN0YXRlKSB7XG4gICAgICB0aGlzLl9wZW5kaW5nUGxheWVyU3RhdGUgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ1BsYXllclN0YXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBhIGNoYW5nZSBpbiB0aGUgY29tcG9uZW50IHN0YXRlXG4gICAqIHJlcXVpcmVzIHRoZSBZb3VUdWJlIHBsYXllciB0byBiZSByZWNyZWF0ZWQuXG4gICAqL1xuICBwcml2YXRlIF9zaG91bGRSZWNyZWF0ZVBsYXllcihjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2hhbmdlID1cbiAgICAgIGNoYW5nZXNbJ3ZpZGVvSWQnXSB8fFxuICAgICAgY2hhbmdlc1sncGxheWVyVmFycyddIHx8XG4gICAgICBjaGFuZ2VzWydkaXNhYmxlQ29va2llcyddIHx8XG4gICAgICBjaGFuZ2VzWydkaXNhYmxlUGxhY2Vob2xkZXInXTtcbiAgICByZXR1cm4gISFjaGFuZ2UgJiYgIWNoYW5nZS5pc0ZpcnN0Q2hhbmdlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBZb3VUdWJlIHBsYXllciBhbmQgZGVzdHJveXMgdGhlIGV4aXN0aW5nIG9uZS5cbiAgICogQHBhcmFtIHBsYXlWaWRlbyBXaGV0aGVyIHRvIHBsYXkgdGhlIHZpZGVvIG9uY2UgaXQgbG9hZHMuXG4gICAqL1xuICBwcml2YXRlIF9jcmVhdGVQbGF5ZXIocGxheVZpZGVvOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcGxheWVyPy5kZXN0cm95KCk7XG4gICAgdGhpcy5fcGVuZGluZ1BsYXllcj8uZGVzdHJveSgpO1xuXG4gICAgLy8gQSBwbGF5ZXIgY2FuJ3QgYmUgY3JlYXRlZCBpZiB0aGUgQVBJIGlzbid0IGxvYWRlZCxcbiAgICAvLyBvciB0aGVyZSBpc24ndCBhIHZpZGVvIG9yIHBsYXlsaXN0IHRvIGJlIHBsYXllZC5cbiAgICBpZiAodHlwZW9mIFlUID09PSAndW5kZWZpbmVkJyB8fCAoIXRoaXMudmlkZW9JZCAmJiAhdGhpcy5wbGF5ZXJWYXJzPy5saXN0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEltcG9ydGFudCEgV2UgbmVlZCB0byBjcmVhdGUgdGhlIFBsYXllciBvYmplY3Qgb3V0c2lkZSBvZiB0aGUgYE5nWm9uZWAsIGJlY2F1c2UgaXQga2lja3NcbiAgICAvLyBvZmYgYSAyNTBtcyBzZXRJbnRlcnZhbCB3aGljaCB3aWxsIGNvbnRpbnVhbGx5IHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBpZiB3ZSBkb24ndC5cbiAgICBjb25zdCBwbGF5ZXIgPSB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoXG4gICAgICAoKSA9PlxuICAgICAgICBuZXcgWVQuUGxheWVyKHRoaXMueW91dHViZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LCB7XG4gICAgICAgICAgdmlkZW9JZDogdGhpcy52aWRlb0lkLFxuICAgICAgICAgIGhvc3Q6IHRoaXMuZGlzYWJsZUNvb2tpZXMgPyAnaHR0cHM6Ly93d3cueW91dHViZS1ub2Nvb2tpZS5jb20nIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHdpZHRoOiB0aGlzLndpZHRoLFxuICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQsXG4gICAgICAgICAgLy8gQ2FsbGluZyBgcGxheVZpZGVvYCBvbiBsb2FkIGRvZXNuJ3QgYXBwZWFyIHRvIGFjdHVhbGx5IHBsYXlcbiAgICAgICAgICAvLyB0aGUgdmlkZW8gc28gd2UgbmVlZCB0byB0cmlnZ2VyIGl0IHRocm91Z2ggYHBsYXllclZhcnNgIGluc3RlYWQuXG4gICAgICAgICAgcGxheWVyVmFyczogcGxheVZpZGVvID8gey4uLih0aGlzLnBsYXllclZhcnMgfHwge30pLCBhdXRvcGxheTogMX0gOiB0aGlzLnBsYXllclZhcnMsXG4gICAgICAgIH0pLFxuICAgICk7XG5cbiAgICBjb25zdCB3aGVuUmVhZHkgPSAoKSA9PiB7XG4gICAgICAvLyBPbmx5IGFzc2lnbiB0aGUgcGxheWVyIG9uY2UgaXQncyByZWFkeSwgb3RoZXJ3aXNlIFlvdVR1YmUgZG9lc24ndCBleHBvc2Ugc29tZSBBUElzLlxuICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2lzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9oYXNQbGFjZWhvbGRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wbGF5ZXIgPSBwbGF5ZXI7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdQbGF5ZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIHBsYXllci5yZW1vdmVFdmVudExpc3RlbmVyKCdvblJlYWR5Jywgd2hlblJlYWR5KTtcbiAgICAgICAgdGhpcy5fcGxheWVyQ2hhbmdlcy5uZXh0KHBsYXllcik7XG4gICAgICAgIHRoaXMuX3NldFNpemUoKTtcbiAgICAgICAgdGhpcy5fc2V0UXVhbGl0eSgpO1xuXG4gICAgICAgIGlmICh0aGlzLl9wZW5kaW5nUGxheWVyU3RhdGUpIHtcbiAgICAgICAgICB0aGlzLl9hcHBseVBlbmRpbmdQbGF5ZXJTdGF0ZShwbGF5ZXIsIHRoaXMuX3BlbmRpbmdQbGF5ZXJTdGF0ZSk7XG4gICAgICAgICAgdGhpcy5fcGVuZGluZ1BsYXllclN0YXRlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT25seSBjdWUgdGhlIHBsYXllciB3aGVuIGl0IGVpdGhlciBoYXNuJ3Qgc3RhcnRlZCB5ZXQgb3IgaXQncyBjdWVkLFxuICAgICAgICAvLyBvdGhlcndpc2UgY3VpbmcgaXQgY2FuIGludGVycnVwdCBhIHBsYXllciB3aXRoIGF1dG9wbGF5IGVuYWJsZWQuXG4gICAgICAgIGNvbnN0IHN0YXRlID0gcGxheWVyLmdldFBsYXllclN0YXRlKCk7XG4gICAgICAgIGlmIChzdGF0ZSA9PT0gWVQuUGxheWVyU3RhdGUuVU5TVEFSVEVEIHx8IHN0YXRlID09PSBZVC5QbGF5ZXJTdGF0ZS5DVUVEIHx8IHN0YXRlID09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLl9jdWVQbGF5ZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuX3BlbmRpbmdQbGF5ZXIgPSBwbGF5ZXI7XG4gICAgcGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoJ29uUmVhZHknLCB3aGVuUmVhZHkpO1xuICB9XG5cbiAgLyoqIEFwcGxpZXMgYW55IHN0YXRlIHRoYXQgY2hhbmdlZCBiZWZvcmUgdGhlIHBsYXllciB3YXMgaW5pdGlhbGl6ZWQuICovXG4gIHByaXZhdGUgX2FwcGx5UGVuZGluZ1BsYXllclN0YXRlKHBsYXllcjogWVQuUGxheWVyLCBwZW5kaW5nU3RhdGU6IFBlbmRpbmdQbGF5ZXJTdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IHtwbGF5YmFja1N0YXRlLCBwbGF5YmFja1JhdGUsIHZvbHVtZSwgbXV0ZWQsIHNlZWt9ID0gcGVuZGluZ1N0YXRlO1xuXG4gICAgc3dpdGNoIChwbGF5YmFja1N0YXRlKSB7XG4gICAgICBjYXNlIFlULlBsYXllclN0YXRlLlBMQVlJTkc6XG4gICAgICAgIHBsYXllci5wbGF5VmlkZW8oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFlULlBsYXllclN0YXRlLlBBVVNFRDpcbiAgICAgICAgcGxheWVyLnBhdXNlVmlkZW8oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFlULlBsYXllclN0YXRlLkNVRUQ6XG4gICAgICAgIHBsYXllci5zdG9wVmlkZW8oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHBsYXliYWNrUmF0ZSAhPSBudWxsKSB7XG4gICAgICBwbGF5ZXIuc2V0UGxheWJhY2tSYXRlKHBsYXliYWNrUmF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHZvbHVtZSAhPSBudWxsKSB7XG4gICAgICBwbGF5ZXIuc2V0Vm9sdW1lKHZvbHVtZSk7XG4gICAgfVxuXG4gICAgaWYgKG11dGVkICE9IG51bGwpIHtcbiAgICAgIG11dGVkID8gcGxheWVyLm11dGUoKSA6IHBsYXllci51bk11dGUoKTtcbiAgICB9XG5cbiAgICBpZiAoc2VlayAhPSBudWxsKSB7XG4gICAgICBwbGF5ZXIuc2Vla1RvKHNlZWsuc2Vjb25kcywgc2Vlay5hbGxvd1NlZWtBaGVhZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEN1ZXMgdGhlIHBsYXllciBiYXNlZCBvbiB0aGUgY3VycmVudCBjb21wb25lbnQgc3RhdGUuICovXG4gIHByaXZhdGUgX2N1ZVBsYXllcigpIHtcbiAgICBpZiAodGhpcy5fcGxheWVyICYmIHRoaXMudmlkZW9JZCkge1xuICAgICAgdGhpcy5fcGxheWVyLmN1ZVZpZGVvQnlJZCh7XG4gICAgICAgIHZpZGVvSWQ6IHRoaXMudmlkZW9JZCxcbiAgICAgICAgc3RhcnRTZWNvbmRzOiB0aGlzLnN0YXJ0U2Vjb25kcyxcbiAgICAgICAgZW5kU2Vjb25kczogdGhpcy5lbmRTZWNvbmRzLFxuICAgICAgICBzdWdnZXN0ZWRRdWFsaXR5OiB0aGlzLnN1Z2dlc3RlZFF1YWxpdHksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogU2V0cyB0aGUgcGxheWVyJ3Mgc2l6ZSBiYXNlZCBvbiB0aGUgY3VycmVudCBpbnB1dCB2YWx1ZXMuICovXG4gIHByaXZhdGUgX3NldFNpemUoKSB7XG4gICAgdGhpcy5fcGxheWVyPy5zZXRTaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgfVxuXG4gIC8qKiBTZXRzIHRoZSBwbGF5ZXIncyBxdWFsaXR5IGJhc2VkIG9uIHRoZSBjdXJyZW50IGlucHV0IHZhbHVlcy4gKi9cbiAgcHJpdmF0ZSBfc2V0UXVhbGl0eSgpIHtcbiAgICBpZiAodGhpcy5fcGxheWVyICYmIHRoaXMuc3VnZ2VzdGVkUXVhbGl0eSkge1xuICAgICAgdGhpcy5fcGxheWVyLnNldFBsYXliYWNrUXVhbGl0eSh0aGlzLnN1Z2dlc3RlZFF1YWxpdHkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBHZXRzIGFuIG9ic2VydmFibGUgdGhhdCBhZGRzIGFuIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBwbGF5ZXIgd2hlbiBhIHVzZXIgc3Vic2NyaWJlcyB0byBpdC4gKi9cbiAgcHJpdmF0ZSBfZ2V0TGF6eUVtaXR0ZXI8VCBleHRlbmRzIFlULlBsYXllckV2ZW50PihuYW1lOiBrZXlvZiBZVC5FdmVudHMpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAvLyBTdGFydCB3aXRoIHRoZSBzdHJlYW0gb2YgcGxheWVycy4gVGhpcyB3YXkgdGhlIGV2ZW50cyB3aWxsIGJlIHRyYW5zZmVycmVkXG4gICAgLy8gb3ZlciB0byB0aGUgbmV3IHBsYXllciBpZiBpdCBnZXRzIHN3YXBwZWQgb3V0IHVuZGVyLXRoZS1ob29kLlxuICAgIHJldHVybiB0aGlzLl9wbGF5ZXJDaGFuZ2VzLnBpcGUoXG4gICAgICAvLyBTd2l0Y2ggdG8gdGhlIGJvdW5kIGV2ZW50LiBgc3dpdGNoTWFwYCBlbnN1cmVzIHRoYXQgdGhlIG9sZCBldmVudCBpcyByZW1vdmVkIHdoZW4gdGhlXG4gICAgICAvLyBwbGF5ZXIgaXMgY2hhbmdlZC4gSWYgdGhlcmUncyBubyBwbGF5ZXIsIHJldHVybiBhbiBvYnNlcnZhYmxlIHRoYXQgbmV2ZXIgZW1pdHMuXG4gICAgICBzd2l0Y2hNYXAocGxheWVyID0+IHtcbiAgICAgICAgcmV0dXJuIHBsYXllclxuICAgICAgICAgID8gZnJvbUV2ZW50UGF0dGVybjxUPihcbiAgICAgICAgICAgICAgKGxpc3RlbmVyOiAoZXZlbnQ6IFQpID0+IHZvaWQpID0+IHtcbiAgICAgICAgICAgICAgICBwbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBsaXN0ZW5lcik7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIChsaXN0ZW5lcjogKGV2ZW50OiBUKSA9PiB2b2lkKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIEFQSSBzZWVtcyB0byB0aHJvdyB3aGVuIHdlIHRyeSB0byB1bmJpbmQgZnJvbSBhIGRlc3Ryb3llZCBwbGF5ZXIgYW5kIGl0IGRvZXNuJ3RcbiAgICAgICAgICAgICAgICAvLyBleHBvc2Ugd2hldGhlciB0aGUgcGxheWVyIGhhcyBiZWVuIGRlc3Ryb3llZCBzbyB3ZSBoYXZlIHRvIHdyYXAgaXQgaW4gYSB0cnkvY2F0Y2ggdG9cbiAgICAgICAgICAgICAgICAvLyBwcmV2ZW50IHRoZSBlbnRpcmUgc3RyZWFtIGZyb20gZXJyb3Jpbmcgb3V0LlxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBwbGF5ZXI/LnJlbW92ZUV2ZW50TGlzdGVuZXI/LihuYW1lLCBsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogb2JzZXJ2YWJsZU9mPFQ+KCk7XG4gICAgICB9KSxcbiAgICAgIC8vIEJ5IGRlZmF1bHQgd2UgcnVuIGFsbCB0aGUgQVBJIGludGVyYWN0aW9ucyBvdXRzaWRlIHRoZSB6b25lXG4gICAgICAvLyBzbyB3ZSBoYXZlIHRvIGJyaW5nIHRoZSBldmVudHMgYmFjayBpbiBtYW51YWxseSB3aGVuIHRoZXkgZW1pdC5cbiAgICAgIHNvdXJjZSA9PlxuICAgICAgICBuZXcgT2JzZXJ2YWJsZTxUPihvYnNlcnZlciA9PlxuICAgICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogdmFsdWUgPT4gdGhpcy5fbmdab25lLnJ1bigoKSA9PiBvYnNlcnZlci5uZXh0KHZhbHVlKSksXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IgPT4gb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpLFxuICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IG9ic2VydmVyLmNvbXBsZXRlKCksXG4gICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgICAvLyBFbnN1cmVzIHRoYXQgZXZlcnl0aGluZyBpcyBjbGVhcmVkIG91dCBvbiBkZXN0cm95LlxuICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCksXG4gICAgKTtcbiAgfVxufVxuXG5sZXQgYXBpTG9hZGVkID0gZmFsc2U7XG5cbi8qKiBMb2FkcyB0aGUgWW91VHViZSBBUEkgZnJvbSBhIHNwZWNpZmllZCBVUkwgb25seSBvbmNlLiAqL1xuZnVuY3Rpb24gbG9hZEFwaShub25jZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICBpZiAoYXBpTG9hZGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gV2UgY2FuIHVzZSBgZG9jdW1lbnRgIGRpcmVjdGx5IGhlcmUsIGJlY2F1c2UgdGhpcyBsb2dpYyBkb2Vzbid0IHJ1biBvdXRzaWRlIHRoZSBicm93c2VyLlxuICBjb25zdCB1cmwgPSAnaHR0cHM6Ly93d3cueW91dHViZS5jb20vaWZyYW1lX2FwaSc7XG4gIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICBjb25zdCBjYWxsYmFjayA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICBzY3JpcHQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIGNhbGxiYWNrKTtcbiAgICBzY3JpcHQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCBjYWxsYmFjayk7XG5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgYXBpTG9hZGVkID0gZmFsc2U7XG5cbiAgICAgIGlmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGxvYWQgWW91VHViZSBBUEkgZnJvbSAke3VybH1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHNjcmlwdC5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgY2FsbGJhY2spO1xuICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBjYWxsYmFjayk7XG4gIChzY3JpcHQgYXMgYW55KS5zcmMgPSB1cmw7XG4gIHNjcmlwdC5hc3luYyA9IHRydWU7XG5cbiAgaWYgKG5vbmNlKSB7XG4gICAgc2NyaXB0Lm5vbmNlID0gbm9uY2U7XG4gIH1cblxuICAvLyBTZXQgdGhpcyBpbW1lZGlhdGVseSB0byB0cnVlIHNvIHdlIGRvbid0IHN0YXJ0IGxvYWRpbmcgYW5vdGhlciBzY3JpcHRcbiAgLy8gd2hpbGUgdGhpcyBvbmUgaXMgcGVuZGluZy4gSWYgbG9hZGluZyBmYWlscywgd2UnbGwgZmxpcCBpdCBiYWNrIHRvIGZhbHNlLlxuICBhcGlMb2FkZWQgPSB0cnVlO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG59XG4iXX0=
|
|
589
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieW91dHViZS1wbGF5ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMveW91dHViZS1wbGF5ZXIveW91dHViZS1wbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0EsaUNBQWlDO0FBVGpDOzs7Ozs7R0FNRztBQUVILHlFQUF5RTtBQUN6RSxpQ0FBaUM7QUFFakMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBRU4sTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLFdBQVcsRUFHWCxnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLGNBQWMsRUFDZCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixHQUVsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxZQUFZLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNoRyxPQUFPLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBMEIsd0JBQXdCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQzs7QUFTL0YsNkRBQTZEO0FBQzdELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUNyRCx1QkFBdUIsQ0FDeEIsQ0FBQztBQXdCRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFDeEMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsR0FBRyxDQUFDO0FBY3pDLHlDQUF5QztBQUN6QyxTQUFTLFVBQVUsQ0FBQyxLQUF5QjtJQUMzQyxPQUFPLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQXVCSCxNQUFNLE9BQU8sYUFBYTtJQWtCeEIsNkJBQTZCO0lBQzdCLElBQ0ksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsTUFBMEI7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNsRixDQUFDO0lBR0QsNEJBQTRCO0lBQzVCLElBQ0ksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsS0FBeUI7UUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM3RSxDQUFDO0lBNEVELFlBQ1UsT0FBZSxFQUNGLFVBQWtCO1FBRC9CLFlBQU8sR0FBUCxPQUFPLENBQVE7UUF6R1IsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDakMsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBd0IsU0FBUyxDQUFDLENBQUM7UUFDdkUsV0FBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUM3Qyx1QkFBa0IsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN0RCxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBY3pCLFlBQU8sR0FBRyxxQkFBcUIsQ0FBQztRQVVoQyxXQUFNLEdBQUcsb0JBQW9CLENBQUM7UUFxQnRDLDREQUE0RDtRQUU1RCxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQU1oQzs7O1dBR0c7UUFFSCx1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFFcEM7Ozs7V0FJRztRQUNtQyw2QkFBd0IsR0FBWSxLQUFLLENBQUM7UUFXaEYseURBQXlEO1FBQ3RDLFVBQUssR0FDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBaUIsU0FBUyxDQUFDLENBQUM7UUFFL0IsZ0JBQVcsR0FDNUIsSUFBSSxDQUFDLGVBQWUsQ0FBd0IsZUFBZSxDQUFDLENBQUM7UUFFNUMsVUFBSyxHQUN0QixJQUFJLENBQUMsZUFBZSxDQUFrQixTQUFTLENBQUMsQ0FBQztRQUVoQyxjQUFTLEdBQzFCLElBQUksQ0FBQyxlQUFlLENBQWlCLGFBQWEsQ0FBQyxDQUFDO1FBRW5DLDBCQUFxQixHQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFrQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRWhFLHVCQUFrQixHQUNuQyxJQUFJLENBQUMsZUFBZSxDQUErQixzQkFBc0IsQ0FBQyxDQUFDO1FBVTNFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUM7UUFDdkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUM7UUFDdkQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLE1BQU0sRUFBRSxzQkFBc0IsSUFBSSxZQUFZLENBQUM7UUFDN0UsSUFBSSxDQUFDLHVCQUF1QixHQUFHLE1BQU0sRUFBRSx1QkFBdUIsSUFBSSxVQUFVLENBQUM7UUFDN0UsSUFBSSxDQUFDLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM1QixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDeEIsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixDQUFDO1lBRUQsSUFBSSxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsQ0FBQztZQUVELElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO2dCQUNwRixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFFL0IsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN2QixNQUFNLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDO1FBQ2xFLENBQUM7UUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsK0VBQStFO0lBQy9FLFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzNCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLFVBQVU7UUFDUixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzVCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ2hFLENBQUM7SUFDSCxDQUFDO0lBRUQsK0VBQStFO0lBQy9FLFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzNCLENBQUM7YUFBTSxDQUFDO1lBQ04sbUVBQW1FO1lBQ25FLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztRQUM5RCxDQUFDO0lBQ0gsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxNQUFNLENBQUMsT0FBZSxFQUFFLGNBQXVCO1FBQzdDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztRQUMvQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUMsQ0FBQztRQUMzRCxDQUFDO0lBQ0gsQ0FBQztJQUVELDBFQUEwRTtJQUMxRSxJQUFJO1FBQ0YsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDdkMsQ0FBQztJQUNILENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsTUFBTTtRQUNKLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDeEIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLE9BQU87UUFDTCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDN0IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQztRQUMxQyxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsK0VBQStFO0lBQy9FLFNBQVMsQ0FBQyxNQUFjO1FBQ3RCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQztJQUVELCtFQUErRTtJQUMvRSxTQUFTO1FBQ1AsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2xDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3hFLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQztRQUN6QyxDQUFDO1FBRUQsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQscUZBQXFGO0lBQ3JGLGVBQWUsQ0FBQyxZQUFvQjtRQUNsQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUN0RCxDQUFDO0lBQ0gsQ0FBQztJQUVELHFGQUFxRjtJQUNyRixlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzlFLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQztRQUMvQyxDQUFDO1FBRUQsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsK0ZBQStGO0lBQy9GLHlCQUF5QjtRQUN2QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3RFLENBQUM7SUFFRCw0RkFBNEY7SUFDNUYsc0JBQXNCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELG9GQUFvRjtJQUNwRixjQUFjO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbkMsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUMvRSxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUM7UUFDaEQsQ0FBQztRQUVELE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7SUFDbEMsQ0FBQztJQUVELG9GQUFvRjtJQUNwRixjQUFjO1FBQ1osSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDOUQsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUMvQyxDQUFDO1FBRUQsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsd0ZBQXdGO0lBQ3hGLGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3RFLENBQUM7SUFFRCwrRkFBK0Y7SUFDL0YseUJBQXlCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdEUsQ0FBQztJQUVELGlGQUFpRjtJQUNqRixXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELGlGQUFpRjtJQUNqRixXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVELHVGQUF1RjtJQUN2RixpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzlELENBQUM7SUFFRDs7O09BR0c7SUFDTyxLQUFLLENBQUMsU0FBa0I7UUFDaEMsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZCLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsd0JBQXdCLElBQUksQ0FBQyxPQUFPLFNBQVMsS0FBSyxXQUFXLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDNUYsTUFBTSxJQUFJLEtBQUssQ0FDYixvRUFBb0U7b0JBQ2xFLHFFQUFxRTtvQkFDckUsNERBQTRELENBQy9ELENBQUM7WUFDSixDQUFDO1lBRUQsSUFBSSxDQUFDLHlCQUF5QixHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQztZQUVoRSxNQUFNLENBQUMsdUJBQXVCLEdBQUcsR0FBRyxFQUFFO2dCQUNwQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDeEQsQ0FBQyxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0lBRUQseUVBQXlFO0lBQ2pFLGtCQUFrQjtRQUN4QixxRUFBcUU7UUFDckUsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxtRkFBbUY7WUFDbkYsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVELCtDQUErQztJQUNyQyxzQkFBc0I7UUFDOUIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1QixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxrRkFBa0Y7UUFDbEYsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNyQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ2pFLENBQUM7SUFFRCwyRUFBMkU7SUFDbkUsZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0sscUJBQXFCLENBQUMsT0FBc0I7UUFDbEQsTUFBTSxNQUFNLEdBQ1YsT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUNsQixPQUFPLENBQUMsWUFBWSxDQUFDO1lBQ3JCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztZQUN6QixPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNoQyxPQUFPLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGFBQWEsQ0FBQyxTQUFrQjtRQUN0QyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFFL0IscURBQXFEO1FBQ3JELG1EQUFtRDtRQUNuRCxJQUFJLE9BQU8sRUFBRSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMzRSxPQUFPO1FBQ1QsQ0FBQztRQUVELDJGQUEyRjtRQUMzRix1RkFBdUY7UUFDdkYsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FDM0MsR0FBRyxFQUFFLENBQ0gsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUU7WUFDakQsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUMxRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLDhEQUE4RDtZQUM5RCxtRUFBbUU7WUFDbkUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVO1NBQ3BGLENBQUMsQ0FDTCxDQUFDO1FBRUYsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFO1lBQ3JCLHNGQUFzRjtZQUN0RixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUN4QixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztnQkFDN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO2dCQUNoQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDakMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNoQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBRW5CLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7b0JBQzdCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7b0JBQ2hFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLENBQUM7Z0JBQ3ZDLENBQUM7Z0JBRUQsc0VBQXNFO2dCQUN0RSxtRUFBbUU7Z0JBQ25FLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDekYsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNwQixDQUFDO2dCQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN6QyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELHdFQUF3RTtJQUNoRSx3QkFBd0IsQ0FBQyxNQUFpQixFQUFFLFlBQWdDO1FBQ2xGLE1BQU0sRUFBQyxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDLEdBQUcsWUFBWSxDQUFDO1FBRXhFLFFBQVEsYUFBYSxFQUFFLENBQUM7WUFDdEIsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDLE9BQU87Z0JBQ3pCLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDbkIsTUFBTTtZQUNSLEtBQUssRUFBRSxDQUFDLFdBQVcsQ0FBQyxNQUFNO2dCQUN4QixNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3BCLE1BQU07WUFDUixLQUFLLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSTtnQkFDdEIsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNuQixNQUFNO1FBQ1YsQ0FBQztRQUVELElBQUksWUFBWSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3pCLE1BQU0sQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUVELElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ25CLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsQ0FBQztRQUVELElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2xCLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDMUMsQ0FBQztRQUVELElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUM7SUFFRCw0REFBNEQ7SUFDcEQsVUFBVTtRQUNoQixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO2dCQUN4QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3JCLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUMzQixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2FBQ3hDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0VBQWdFO0lBQ3hELFFBQVE7UUFDZCxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsbUVBQW1FO0lBQzNELFdBQVc7UUFDakIsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDekQsQ0FBQztJQUNILENBQUM7SUFFRCxpR0FBaUc7SUFDekYsZUFBZSxDQUEyQixJQUFxQjtRQUNyRSw0RUFBNEU7UUFDNUUsZ0VBQWdFO1FBQ2hFLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJO1FBQzdCLHdGQUF3RjtRQUN4RixrRkFBa0Y7UUFDbEYsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2pCLE9BQU8sTUFBTTtnQkFDWCxDQUFDLENBQUMsZ0JBQWdCLENBQ2QsQ0FBQyxRQUE0QixFQUFFLEVBQUU7b0JBQy9CLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzFDLENBQUMsRUFDRCxDQUFDLFFBQTRCLEVBQUUsRUFBRTtvQkFDL0Isc0ZBQXNGO29CQUN0Rix1RkFBdUY7b0JBQ3ZGLCtDQUErQztvQkFDL0MsSUFBSSxDQUFDO3dCQUNILE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDaEQsQ0FBQztvQkFBQyxNQUFNLENBQUMsQ0FBQSxDQUFDO2dCQUNaLENBQUMsQ0FDRjtnQkFDSCxDQUFDLENBQUMsWUFBWSxFQUFLLENBQUM7UUFDeEIsQ0FBQyxDQUFDO1FBQ0YsOERBQThEO1FBQzlELGtFQUFrRTtRQUNsRSxNQUFNLENBQUMsRUFBRSxDQUNQLElBQUksVUFBVSxDQUFJLFFBQVEsQ0FBQyxFQUFFLENBQzNCLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDZixJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNELEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3JDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFO1NBQ3BDLENBQUMsQ0FDSDtRQUNILHFEQUFxRDtRQUNyRCxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUMzQixDQUFDO0lBQ0osQ0FBQztxSEExakJVLGFBQWEsd0NBaUhkLFdBQVc7eUdBakhWLGFBQWEsNkdBbUJMLGVBQWUsNkJBVWYsZUFBZSxrREE1RDNCLFVBQVUsNENBQVYsVUFBVSx3SEF5RkUsZ0JBQWdCLG1DQUloQixnQkFBZ0Isb0VBT2hCLGdCQUFnQixzRkFRaEIsZ0JBQWdCLHVkQTdGekI7Ozs7Ozs7Ozs7Ozs7O0dBY1QsNERBZlMsd0JBQXdCOztrR0FpQnZCLGFBQWE7a0JBdEJ6QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDckMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLHdCQUF3QixDQUFDO29CQUNuQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7O0dBY1Q7aUJBQ0Y7OzBCQWtISSxNQUFNOzJCQUFDLFdBQVc7eUNBakdyQixPQUFPO3NCQUROLEtBQUs7Z0JBS0YsTUFBTTtzQkFEVCxLQUFLO3VCQUFDLEVBQUMsU0FBUyxFQUFFLGVBQWUsRUFBQztnQkFXL0IsS0FBSztzQkFEUixLQUFLO3VCQUFDLEVBQUMsU0FBUyxFQUFFLGVBQWUsRUFBQztnQkFXbkMsWUFBWTtzQkFEWCxLQUFLO3VCQUFDLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBQztnQkFLOUIsVUFBVTtzQkFEVCxLQUFLO3VCQUFDLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBQztnQkFLOUIsZ0JBQWdCO3NCQURmLEtBQUs7Z0JBUU4sVUFBVTtzQkFEVCxLQUFLO2dCQUtOLGNBQWM7c0JBRGIsS0FBSzt1QkFBQyxFQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBQztnQkFLcEMsT0FBTztzQkFETixLQUFLO3VCQUFDLEVBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFDO2dCQVFwQyxrQkFBa0I7c0JBRGpCLEtBQUs7dUJBQUMsRUFBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUM7Z0JBUUUsd0JBQXdCO3NCQUE3RCxLQUFLO3VCQUFDLEVBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFDO2dCQUczQixzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBTUcsdUJBQXVCO3NCQUEvQixLQUFLO2dCQUdhLEtBQUs7c0JBQXZCLE1BQU07Z0JBR1ksV0FBVztzQkFBN0IsTUFBTTtnQkFHWSxLQUFLO3NCQUF2QixNQUFNO2dCQUdZLFNBQVM7c0JBQTNCLE1BQU07Z0JBR1kscUJBQXFCO3NCQUF2QyxNQUFNO2dCQUdZLGtCQUFrQjtzQkFBcEMsTUFBTTtnQkFLUCxnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7O0FBaWQvQyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFFdEIsNERBQTREO0FBQzVELFNBQVMsT0FBTyxDQUFDLEtBQW9CO0lBQ25DLElBQUksU0FBUyxFQUFFLENBQUM7UUFDZCxPQUFPO0lBQ1QsQ0FBQztJQUVELDJGQUEyRjtJQUMzRixNQUFNLEdBQUcsR0FBRyxvQ0FBb0MsQ0FBQztJQUNqRCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7UUFDaEMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM3QyxNQUFNLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRTlDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUMzQixTQUFTLEdBQUcsS0FBSyxDQUFDO1lBRWxCLElBQUksT0FBTyxTQUFTLEtBQUssV0FBVyxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNsRCxPQUFPLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzFELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBQ0YsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMxQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzFDLE1BQWMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzFCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBRXBCLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLDRFQUE0RTtJQUM1RSxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ2pCLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLy8gV29ya2Fyb3VuZCBmb3I6IGh0dHBzOi8vZ2l0aHViLmNvbS9iYXplbGJ1aWxkL3J1bGVzX25vZGVqcy9pc3N1ZXMvMTI2NVxuLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJ5b3V0dWJlXCIgLz5cblxuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIEluamVjdCxcbiAgUExBVEZPUk1fSUQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgbnVtYmVyQXR0cmlidXRlLFxuICBJbmplY3Rpb25Ub2tlbixcbiAgaW5qZWN0LFxuICBDU1BfTk9OQ0UsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBBZnRlclZpZXdJbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7aXNQbGF0Zm9ybUJyb3dzZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge09ic2VydmFibGUsIG9mIGFzIG9ic2VydmFibGVPZiwgU3ViamVjdCwgQmVoYXZpb3JTdWJqZWN0LCBmcm9tRXZlbnRQYXR0ZXJufSBmcm9tICdyeGpzJztcbmltcG9ydCB7dGFrZVVudGlsLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7UGxhY2Vob2xkZXJJbWFnZVF1YWxpdHksIFlvdVR1YmVQbGF5ZXJQbGFjZWhvbGRlcn0gZnJvbSAnLi95b3V0dWJlLXBsYXllci1wbGFjZWhvbGRlcic7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgWVQ6IHR5cGVvZiBZVCB8IHVuZGVmaW5lZDtcbiAgICBvbllvdVR1YmVJZnJhbWVBUElSZWFkeTogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKiBJbmplY3Rpb24gdG9rZW4gdXNlZCB0byBjb25maWd1cmUgdGhlIGBZb3VUdWJlUGxheWVyYC4gKi9cbmV4cG9ydCBjb25zdCBZT1VUVUJFX1BMQVlFUl9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48WW91VHViZVBsYXllckNvbmZpZz4oXG4gICdZT1VUVUJFX1BMQVlFUl9DT05GSUcnLFxuKTtcblxuLyoqIE9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgYFlvdVR1YmVQbGF5ZXJgLiAqL1xuZXhwb3J0IGludGVyZmFjZSBZb3VUdWJlUGxheWVyQ29uZmlnIHtcbiAgLyoqIFdoZXRoZXIgdG8gbG9hZCB0aGUgWW91VHViZSBpZnJhbWUgQVBJIGF1dG9tYXRpY2FsbHkuIERlZmF1bHRzIHRvIGB0cnVlYC4gKi9cbiAgbG9hZEFwaT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIHBsYXllciBzaG93cyBhIHBsYWNlaG9sZGVyIGltYWdlIGluc3RlYWQgb2YgbG9hZGluZyB0aGUgWW91VHViZSBBUEkgd2hpY2hcbiAgICogaW1wcm92ZXMgdGhlIGluaXRpYWwgcGFnZSBsb2FkIHBlcmZvcm1hbmNlLiBVc2UgdGhpcyBvcHRpb24gdG8gZGlzYWJsZSB0aGUgcGxhY2Vob2xkZXIgbG9hZGluZ1xuICAgKiBiZWhhdmlvciBnbG9iYWxseS4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICovXG4gIGRpc2FibGVQbGFjZWhvbGRlcj86IGJvb2xlYW47XG5cbiAgLyoqIEFjY2Vzc2libGUgbGFiZWwgZm9yIHRoZSBwbGF5IGJ1dHRvbiBpbnNpZGUgb2YgdGhlIHBsYWNlaG9sZGVyLiAqL1xuICBwbGFjZWhvbGRlckJ1dHRvbkxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBRdWFsaXR5IG9mIHRoZSBkaXNwbGF5ZWQgcGxhY2Vob2xkZXIgaW1hZ2UuIERlZmF1bHRzIHRvIGBzdGFuZGFyZGAsXG4gICAqIGJlY2F1c2Ugbm90IGFsbCB2aWRlbyBoYXZlIGEgaGlnaC1xdWFsaXR5IHBsYWNlaG9sZGVyLlxuICAgKi9cbiAgcGxhY2Vob2xkZXJJbWFnZVF1YWxpdHk/OiBQbGFjZWhvbGRlckltYWdlUXVhbGl0eTtcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUExBWUVSX1dJRFRIID0gNjQwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUExBWUVSX0hFSUdIVCA9IDM5MDtcblxuLyoqXG4gKiBPYmplY3QgdXNlZCB0byBzdG9yZSB0aGUgc3RhdGUgb2YgdGhlIHBsYXllciBpZiB0aGVcbiAqIHVzZXIgdHJpZXMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgQVBJIGJlZm9yZSBpdCBoYXMgYmVlbiBsb2FkZWQuXG4gKi9cbmludGVyZmFjZSBQZW5kaW5nUGxheWVyU3RhdGUge1xuICBwbGF5YmFja1N0YXRlPzogWVQuUGxheWVyU3RhdGUuUExBWUlORyB8IFlULlBsYXllclN0YXRlLlBBVVNFRCB8IFlULlBsYXllclN0YXRlLkNVRUQ7XG4gIHBsYXliYWNrUmF0ZT86IG51bWJlcjtcbiAgdm9sdW1lPzogbnVtYmVyO1xuICBtdXRlZD86IGJvb2xlYW47XG4gIHNlZWs/OiB7c2Vjb25kczogbnVtYmVyOyBhbGxvd1NlZWtBaGVhZDogYm9vbGVhbn07XG59XG5cbi8qKiBDb2VyY2lvbiBmdW5jdGlvbiBmb3IgdGltZSB2YWx1ZXMuICovXG5mdW5jdGlvbiBjb2VyY2VUaW1lKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/IHZhbHVlIDogbnVtYmVyQXR0cmlidXRlKHZhbHVlLCAwKTtcbn1cblxuLyoqXG4gKiBBbmd1bGFyIGNvbXBvbmVudCB0aGF0IHJlbmRlcnMgYSBZb3VUdWJlIHBsYXllciB2aWEgdGhlIFlvdVR1YmUgcGxheWVyXG4gKiBpZnJhbWUgQVBJLlxuICogQHNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS95b3V0dWJlL2lmcmFtZV9hcGlfcmVmZXJlbmNlXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3lvdXR1YmUtcGxheWVyJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtZb3VUdWJlUGxheWVyUGxhY2Vob2xkZXJdLFxuICB0ZW1wbGF0ZTogYFxuICAgIEBpZiAoX3Nob3VsZFNob3dQbGFjZWhvbGRlcigpKSB7XG4gICAgICA8eW91dHViZS1wbGF5ZXItcGxhY2Vob2xkZXJcbiAgICAgICAgW3ZpZGVvSWRdPVwidmlkZW9JZCFcIlxuICAgICAgICBbd2lkdGhdPVwid2lkdGhcIlxuICAgICAgICBbaGVpZ2h0XT1cImhlaWdodFwiXG4gICAgICAgIFtpc0xvYWRpbmddPVwiX2lzTG9hZGluZ1wiXG4gICAgICAgIFtidXR0b25MYWJlbF09XCJwbGFjZWhvbGRlckJ1dHRvbkxhYmVsXCJcbiAgICAgICAgW3F1YWxpdHldPVwicGxhY2Vob2xkZXJJbWFnZVF1YWxpdHlcIlxuICAgICAgICAoY2xpY2spPVwiX2xvYWQodHJ1ZSlcIi8+XG4gICAgfVxuICAgIDxkaXYgW3N0eWxlLmRpc3BsYXldPVwiX3Nob3VsZFNob3dQbGFjZWhvbGRlcigpID8gJ25vbmUnIDogJydcIj5cbiAgICAgIDxkaXYgI3lvdXR1YmVDb250YWluZXI+PC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIFlvdVR1YmVQbGF5ZXIgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIC8qKiBXaGV0aGVyIHdlJ3JlIGN1cnJlbnRseSByZW5kZXJpbmcgaW5zaWRlIGEgYnJvd3Nlci4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfaXNCcm93c2VyOiBib29sZWFuO1xuICBwcml2YXRlIF9wbGF5ZXI6IFlULlBsYXllciB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfcGVuZGluZ1BsYXllcjogWVQuUGxheWVyIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9leGlzdGluZ0FwaVJlYWR5Q2FsbGJhY2s6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfcGVuZGluZ1BsYXllclN0YXRlOiBQZW5kaW5nUGxheWVyU3RhdGUgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3llZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BsYXllckNoYW5nZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFlULlBsYXllciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbm9uY2UgPSBpbmplY3QoQ1NQX05PTkNFLCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbmdlRGV0ZWN0b3JSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcm90ZWN0ZWQgX2lzTG9hZGluZyA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgX2hhc1BsYWNlaG9sZGVyID0gdHJ1ZTtcblxuICAvKiogWW91VHViZSBWaWRlbyBJRCB0byB2aWV3ICovXG4gIEBJbnB1dCgpXG4gIHZpZGVvSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKiogSGVpZ2h0IG9mIHZpZGVvIHBsYXllciAqL1xuICBASW5wdXQoe3RyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlfSlcbiAgZ2V0IGhlaWdodCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gIH1cbiAgc2V0IGhlaWdodChoZWlnaHQ6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2hlaWdodCA9IGhlaWdodCA9PSBudWxsIHx8IGlzTmFOKGhlaWdodCkgPyBERUZBVUxUX1BMQVlFUl9IRUlHSFQgOiBoZWlnaHQ7XG4gIH1cbiAgcHJpdmF0ZSBfaGVpZ2h0ID0gREVGQVVMVF9QTEFZRVJfSEVJR0hUO1xuXG4gIC8qKiBXaWR0aCBvZiB2aWRlbyBwbGF5ZXIgKi9cbiAgQElucHV0KHt0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZX0pXG4gIGdldCB3aWR0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgfVxuICBzZXQgd2lkdGgod2lkdGg6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3dpZHRoID0gd2lkdGggPT0gbnVsbCB8fCBpc05hTih3aWR0aCkgPyBERUZBVUxUX1BMQVlFUl9XSURUSCA6IHdpZHRoO1xuICB9XG4gIHByaXZhdGUgX3dpZHRoID0gREVGQVVMVF9QTEFZRVJfV0lEVEg7XG5cbiAgLyoqIFRoZSBtb21lbnQgd2hlbiB0aGUgcGxheWVyIGlzIHN1cHBvc2VkIHRvIHN0YXJ0IHBsYXlpbmcgKi9cbiAgQElucHV0KHt0cmFuc2Zvcm06IGNvZXJjZVRpbWV9KVxuICBzdGFydFNlY29uZHM6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAvKiogVGhlIG1vbWVudCB3aGVuIHRoZSBwbGF5ZXIgaXMgc3VwcG9zZWQgdG8gc3RvcCBwbGF5aW5nICovXG4gIEBJbnB1dCh7dHJhbnNmb3JtOiBjb2VyY2VUaW1lfSlcbiAgZW5kU2Vjb25kczogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBUaGUgc3VnZ2VzdGVkIHF1YWxpdHkgb2YgdGhlIHBsYXllciAqL1xuICBASW5wdXQoKVxuICBzdWdnZXN0ZWRRdWFsaXR5OiBZVC5TdWdnZXN0ZWRWaWRlb1F1YWxpdHkgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEV4dHJhIHBhcmFtZXRlcnMgdXNlZCB0byBjb25maWd1cmUgdGhlIHBsYXllci4gU2VlOlxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS95b3V0dWJlL3BsYXllcl9wYXJhbWV0ZXJzLmh0bWw/cGxheWVyVmVyc2lvbj1IVE1MNSNQYXJhbWV0ZXJzXG4gICAqL1xuICBASW5wdXQoKVxuICBwbGF5ZXJWYXJzOiBZVC5QbGF5ZXJWYXJzIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBXaGV0aGVyIGNvb2tpZXMgaW5zaWRlIHRoZSBwbGF5ZXIgaGF2ZSBiZWVuIGRpc2FibGVkLiAqL1xuICBASW5wdXQoe3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pXG4gIGRpc2FibGVDb29raWVzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBsb2FkIHRoZSBZb3VUdWJlIGlmcmFtZSBBUEkuIERlZmF1bHRzIHRvIGB0cnVlYC4gKi9cbiAgQElucHV0KHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KVxuICBsb2FkQXBpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBwbGF5ZXIgc2hvd3MgYSBwbGFjZWhvbGRlciBpbWFnZSBpbnN0ZWFkIG9mIGxvYWRpbmcgdGhlIFlvdVR1YmUgQVBJIHdoaWNoXG4gICAqIGltcHJvdmVzIHRoZSBpbml0aWFsIHBhZ2UgbG9hZCBwZXJmb3JtYW5jZS4gVGhpcyBpbnB1dCBhbGxvd3MgZm9yIHRoZSBiZWhhdmlvciB0byBiZSBkaXNhYmxlZC5cbiAgICovXG4gIEBJbnB1dCh7dHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSlcbiAgZGlzYWJsZVBsYWNlaG9sZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGlmcmFtZSB3aWxsIGF0dGVtcHQgdG8gbG9hZCByZWdhcmRsZXNzIG9mIHRoZSBzdGF0dXMgb2YgdGhlIGFwaSBvbiB0aGVcbiAgICogcGFnZS4gU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3UgZG9uJ3Qgd2FudCB0aGUgYG9uWW91VHViZUlmcmFtZUFQSVJlYWR5YCBmaWVsZCB0byBiZVxuICAgKiBzZXQgb24gdGhlIGdsb2JhbCB3aW5kb3cuXG4gICAqL1xuICBASW5wdXQoe3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pIHNob3dCZWZvcmVJZnJhbWVBcGlMb2FkczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBBY2Nlc3NpYmxlIGxhYmVsIGZvciB0aGUgcGxheSBidXR0b24gaW5zaWRlIG9mIHRoZSBwbGFjZWhvbGRlci4gKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXJCdXR0b25MYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBRdWFsaXR5IG9mIHRoZSBkaXNwbGF5ZWQgcGxhY2Vob2xkZXIgaW1hZ2UuIERlZmF1bHRzIHRvIGBzdGFuZGFyZGAsXG4gICAqIGJlY2F1c2Ugbm90IGFsbCB2aWRlbyBoYXZlIGEgaGlnaC1xdWFsaXR5IHBsYWNlaG9sZGVyLlxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXJJbWFnZVF1YWxpdHk6IFBsYWNlaG9sZGVySW1hZ2VRdWFsaXR5O1xuXG4gIC8qKiBPdXRwdXRzIGFyZSBkaXJlY3QgcHJveGllcyBmcm9tIHRoZSBwbGF5ZXIgaXRzZWxmLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgcmVhZHk6IE9ic2VydmFibGU8WVQuUGxheWVyRXZlbnQ+ID1cbiAgICB0aGlzLl9nZXRMYXp5RW1pdHRlcjxZVC5QbGF5ZXJFdmVudD4oJ29uUmVhZHknKTtcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgc3RhdGVDaGFuZ2U6IE9ic2VydmFibGU8WVQuT25TdGF0ZUNoYW5nZUV2ZW50PiA9XG4gICAgdGhpcy5fZ2V0TGF6eUVtaXR0ZXI8WVQuT25TdGF0ZUNoYW5nZUV2ZW50Pignb25TdGF0ZUNoYW5nZScpO1xuXG4gIEBPdXRwdXQoKSByZWFkb25seSBlcnJvcjogT2JzZXJ2YWJsZTxZVC5PbkVycm9yRXZlbnQ+ID1cbiAgICB0aGlzLl9nZXRMYXp5RW1pdHRlcjxZVC5PbkVycm9yRXZlbnQ+KCdvbkVycm9yJyk7XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGFwaUNoYW5nZTogT2JzZXJ2YWJsZTxZVC5QbGF5ZXJFdmVudD4gPVxuICAgIHRoaXMuX2dldExhenlFbWl0dGVyPFlULlBsYXllckV2ZW50Pignb25BcGlDaGFuZ2UnKTtcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgcGxheWJhY2tRdWFsaXR5Q2hhbmdlOiBPYnNlcnZhYmxlPFlULk9uUGxheWJhY2tRdWFsaXR5Q2hhbmdlRXZlbnQ+ID1cbiAgICB0aGlzLl9nZXRMYXp5RW1pdHRlcjxZVC5PblBsYXliYWNrUXVhbGl0eUNoYW5nZUV2ZW50Pignb25QbGF5YmFja1F1YWxpdHlDaGFuZ2UnKTtcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgcGxheWJhY2tSYXRlQ2hhbmdlOiBPYnNlcnZhYmxlPFlULk9uUGxheWJhY2tSYXRlQ2hhbmdlRXZlbnQ+ID1cbiAgICB0aGlzLl9nZXRMYXp5RW1pdHRlcjxZVC5PblBsYXliYWNrUmF0ZUNoYW5nZUV2ZW50Pignb25QbGF5YmFja1JhdGVDaGFuZ2UnKTtcblxuICAvKiogVGhlIGVsZW1lbnQgdGhhdCB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBpZnJhbWUuICovXG4gIEBWaWV3Q2hpbGQoJ3lvdXR1YmVDb250YWluZXInLCB7c3RhdGljOiB0cnVlfSlcbiAgeW91dHViZUNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcGxhdGZvcm1JZDogT2JqZWN0LFxuICApIHtcbiAgICBjb25zdCBjb25maWcgPSBpbmplY3QoWU9VVFVCRV9QTEFZRVJfQ09ORklHLCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgICB0aGlzLmxvYWRBcGkgPSBjb25maWc/LmxvYWRBcGkgPz8gdHJ1ZTtcbiAgICB0aGlzLmRpc2FibGVQbGFjZWhvbGRlciA9ICEhY29uZmlnPy5kaXNhYmxlUGxhY2Vob2xkZXI7XG4gICAgdGhpcy5wbGFjZWhvbGRlckJ1dHRvbkxhYmVsID0gY29uZmlnPy5wbGFjZWhvbGRlckJ1dHRvbkxhYmVsIHx8ICdQbGF5IHZpZGVvJztcbiAgICB0aGlzLnBsYWNlaG9sZGVySW1hZ2VRdWFsaXR5ID0gY29uZmlnPy5wbGFjZWhvbGRlckltYWdlUXVhbGl0eSB8fCAnc3RhbmRhcmQnO1xuICAgIHRoaXMuX2lzQnJvd3NlciA9IGlzUGxhdGZvcm1Ccm93c2VyKHBsYXRmb3JtSWQpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuX2NvbmRpdGlvbmFsbHlMb2FkKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3Nob3VsZFJlY3JlYXRlUGxheWVyKGNoYW5nZXMpKSB7XG4gICAgICB0aGlzLl9jb25kaXRpb25hbGx5TG9hZCgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICBpZiAoY2hhbmdlc1snd2lkdGgnXSB8fCBjaGFuZ2VzWydoZWlnaHQnXSkge1xuICAgICAgICB0aGlzLl9zZXRTaXplKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFuZ2VzWydzdWdnZXN0ZWRRdWFsaXR5J10pIHtcbiAgICAgICAgdGhpcy5fc2V0UXVhbGl0eSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlc1snc3RhcnRTZWNvbmRzJ10gfHwgY2hhbmdlc1snZW5kU2Vjb25kcyddIHx8IGNoYW5nZXNbJ3N1Z2dlc3RlZFF1YWxpdHknXSkge1xuICAgICAgICB0aGlzLl9jdWVQbGF5ZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9wZW5kaW5nUGxheWVyPy5kZXN0cm95KCk7XG5cbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGVzdHJveSgpO1xuICAgICAgd2luZG93Lm9uWW91VHViZUlmcmFtZUFQSVJlYWR5ID0gdGhpcy5fZXhpc3RpbmdBcGlSZWFkeUNhbGxiYWNrO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllckNoYW5nZXMuY29tcGxldGUoKTtcbiAgICB0aGlzLl9kZXN0cm95ZWQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqIFNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS95b3V0dWJlL2lmcmFtZV9hcGlfcmVmZXJlbmNlI3BsYXlWaWRlbyAqL1xuICBwbGF5VmlkZW8oKSB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgdGhpcy5fcGxheWVyLnBsYXlWaWRlbygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9nZXRQZW5kaW5nU3RhdGUoKS5wbGF5YmFja1N0YXRlID0gWVQuUGxheWVyU3RhdGUuUExBWUlORztcbiAgICB9XG4gIH1cblxuICAvKiogU2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3lvdXR1YmUvaWZyYW1lX2FwaV9yZWZlcmVuY2UjcGF1c2VWaWRlbyAqL1xuICBwYXVzZVZpZGVvKCkge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3BsYXllci5wYXVzZVZpZGVvKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2dldFBlbmRpbmdTdGF0ZSgpLnBsYXliYWNrU3RhdGUgPSBZVC5QbGF5ZXJTdGF0ZS5QQVVTRUQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIFNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS95b3V0dWJlL2lmcmFtZV9hcGlfcmVmZXJlbmNlI3N0b3BWaWRlbyAqL1xuICBzdG9wVmlkZW8oKSB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgdGhpcy5fcGxheWVyLnN0b3BWaWRlbygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJdCBzZWVtcyBsaWtlIFlvdVR1YmUgc2V0cyB0aGUgcGxheWVyIHRvIENVRUQgd2hlbiBpdCdzIHN0b3BwZWQuXG4gICAgICB0aGlzLl9nZXRQZW5kaW5nU3RhdGUoKS5wbGF5YmFja1N0YXRlID0gWVQuUGxheWVyU3RhdGUuQ1VFRDtcbiAgICB9XG4gIH1cblxuICAvKiogU2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3lvdXR1YmUvaWZyYW1lX2FwaV9yZWZlcmVuY2Ujc2Vla1RvICovXG4gIHNlZWtUbyhzZWNvbmRzOiBudW1iZXIsIGFsbG93U2Vla0FoZWFkOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgdGhpcy5fcGxheWVyLnNlZWtUbyhzZWNvbmRzLCBhbGxvd1NlZWtBaGVhZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2dldFBlbmRpbmdTdGF0ZSgpLnNlZWsgPSB7c2Vjb25kcywgYWxsb3dTZWVrQWhlYWR9O1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20veW91dHViZS9pZnJhbWVfYXBpX3JlZmVyZW5jZSNtdXRlICovXG4gIG11dGUoKSB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgdGhpcy5fcGxheWVyLm11dGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZ2V0UGVuZGluZ1N0YXRlKCkubXV0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20veW91dHViZS9pZnJhbWVfYXBpX3JlZmVyZW5jZSN1bk11dGUgKi9cbiAgdW5NdXRlKCkge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3BsYXllci51bk11dGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZ2V0UGVuZGluZ1N0YXRlKCkubXV0ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKiogU2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3lvdXR1YmUvaWZyYW1lX2FwaV9yZWZlcmVuY2UjaXNNdXRlZCAqL1xuICBpc011dGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXIuaXNNdXRlZCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZW5kaW5nUGxheWVyU3RhdGUpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuX3BlbmRpbmdQbGF5ZXJTdGF0ZS5tdXRlZDtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKiogU2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3lvdXR1YmUvaWZyYW1lX2FwaV9yZWZlcmVuY2Ujc2V0Vm9sdW1lICovXG4gIHNldFZvbHVtZSh2b2x1bWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3BsYXllci5zZXRWb2x1bWUodm9sdW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZ2V0UGVuZGluZ1N0YXRlKCkudm9sdW1lID0gdm9sdW1lO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20veW91dHViZS9pZnJhbWVfYXBpX3JlZmVyZW5jZSNnZXRWb2x1bWUgKi9cbiAgZ2V0Vm9sdW1lKCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3BsYXllci5nZXRWb2x1bWUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVuZGluZ1BsYXllclN0YXRlICYmIHRoaXMuX3BlbmRpbmdQbGF5ZXJTdGF0ZS52b2x1bWUgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdQbGF5ZXJTdGF0ZS52b2x1bWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKiogU2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3lvdXR1YmUvaWZyYW1lX2FwaV9yZWZlcmVuY2Ujc2V0UGxheWJhY2tSYXRlICovXG4gIHNldFBsYXliYWNrUmF0ZShwbGF5YmFja1JhdGU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXIuc2V0UGxheWJhY2tSYXRlKHBsYXliYWNrUmF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2dldFBlbmRpbmdTdGF0ZSgpLnBsYXliYWNrUmF0ZSA9IHBsYXliYWNrUmF0ZTtcbiAgICB9XG4gIH1cblxuICAvKiogU2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3lvdXR1YmUvaWZyYW1lX2FwaV9yZWZlcmVuY2UjZ2V0UGxheWJhY2tSYXRlICovXG4gIGdldFBsYXliYWNrUmF0ZSgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXIuZ2V0UGxheWJhY2tSYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BlbmRpbmdQbGF5ZXJTdGF0ZSAmJiB0aGlzLl9wZW5kaW5nUGxheWVyU3RhdGUucGxheWJhY2tSYXRlICE9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wZW5kaW5nUGxheWVyU3RhdGUucGxheWJhY2tSYXRlO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLyoqIFNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS95b3V0dWJlL2lmcmFtZV9hcGlfcmVmZXJlbmNlI2dldEF2YWlsYWJsZVBsYXliYWNrUmF0ZXMgKi9cbiAgZ2V0QXZhaWxhYmxlUGxheWJhY2tSYXRlcygpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYXllciA/IHRoaXMuX3BsYXllci5nZXRBdmFpbGFibGVQbGF5YmFja1JhdGVzKCkgOiBbXTtcbiAgfVxuXG4gIC8qKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20veW91dHViZS9pZnJhbWVfYXBpX3JlZmVyZW5jZSNnZXRWaWRlb0xvYWRlZEZyYWN0aW9uICovXG4gIGdldFZpZGVvTG9hZGVkRnJhY3Rpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGxheWVyID8gdGhpcy5fcGxheWVyLmdldFZpZGVvTG9hZGVkRnJhY3Rpb24oKSA6IDA7XG4gIH1cblxuICAvKiogU2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3lvdXR1YmUvaWZyYW1lX2FwaV9yZWZlcmVuY2UjZ2V0UGxheWVyU3RhdGUgKi9cbiAgZ2V0UGxheWVyU3RhdGUoKTogWVQuUGxheWVyU3RhdGUgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5faXNCcm93c2VyIHx8ICF3aW5kb3cuWVQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3BsYXllci5nZXRQbGF5ZXJTdGF0ZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZW5kaW5nUGxheWVyU3RhdGUgJiYgdGhpcy5fcGVuZGluZ1BsYXllclN0YXRlLnBsYXliYWNrU3RhdGUgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdQbGF5ZXJTdGF0ZS5wbGF5YmFja1N0YXRlO1xuICAgIH1cblxuICAgIHJldHVybiBZVC5QbGF5ZXJTdGF0ZS5VTlNUQVJURUQ7XG4gIH1cblxuICAvKiogU2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3lvdXR1YmUvaWZyYW1lX2FwaV9yZWZlcmVuY2UjZ2V0Q3VycmVudFRpbWUgKi9cbiAgZ2V0Q3VycmVudFRpbWUoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcGxheWVyLmdldEN1cnJlbnRUaW1lKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BlbmRpbmdQbGF5ZXJTdGF0ZSAmJiB0aGlzLl9wZW5kaW5nUGxheWVyU3RhdGUuc2Vlaykge1xuICAgICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdQbGF5ZXJTdGF0ZS5zZWVrLnNlY29uZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKiogU2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3lvdXR1YmUvaWZyYW1lX2FwaV9yZWZlcmVuY2UjZ2V0UGxheWJhY2tRdWFsaXR5ICovXG4gIGdldFBsYXliYWNrUXVhbGl0eSgpOiBZVC5TdWdnZXN0ZWRWaWRlb1F1YWxpdHkge1xuICAgIHJldHVybiB0aGlzLl9wbGF5ZXIgPyB0aGlzLl9wbGF5ZXIuZ2V0UGxheWJhY2tRdWFsaXR5KCkgOiAnZGVmYXVsdCc7XG4gIH1cblxuICAvKiogU2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3lvdXR1YmUvaWZyYW1lX2FwaV9yZWZlcmVuY2UjZ2V0QXZhaWxhYmxlUXVhbGl0eUxldmVscyAqL1xuICBnZXRBdmFpbGFibGVRdWFsaXR5TGV2ZWxzKCk6IFlULlN1Z2dlc3RlZFZpZGVvUXVhbGl0eVtdIHtcbiAgICByZXR1cm4gdGhpcy5fcGxheWVyID8gdGhpcy5fcGxheWVyLmdldEF2YWlsYWJsZVF1YWxpdHlMZXZlbHMoKSA6IFtdO1xuICB9XG5cbiAgLyoqIFNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS95b3V0dWJlL2lmcmFtZV9hcGlfcmVmZXJlbmNlI2dldER1cmF0aW9uICovXG4gIGdldER1cmF0aW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYXllciA/IHRoaXMuX3BsYXllci5nZXREdXJhdGlvbigpIDogMDtcbiAgfVxuXG4gIC8qKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20veW91dHViZS9pZnJhbWVfYXBpX3JlZmVyZW5jZSNnZXRWaWRlb1VybCAqL1xuICBnZXRWaWRlb1VybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wbGF5ZXIgPyB0aGlzLl9wbGF5ZXIuZ2V0VmlkZW9VcmwoKSA6ICcnO1xuICB9XG5cbiAgLyoqIFNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS95b3V0dWJlL2lmcmFtZV9hcGlfcmVmZXJlbmNlI2dldFZpZGVvRW1iZWRDb2RlICovXG4gIGdldFZpZGVvRW1iZWRDb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYXllciA/IHRoaXMuX3BsYXllci5nZXRWaWRlb0VtYmVkQ29kZSgpIDogJyc7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIFlvdVR1YmUgQVBJIGFuZCBzZXRzIHVwIHRoZSBwbGF5ZXIuXG4gICAqIEBwYXJhbSBwbGF5VmlkZW8gV2hldGhlciB0byBhdXRvbWF0aWNhbGx5IHBsYXkgdGhlIHZpZGVvIG9uY2UgdGhlIHBsYXllciBpcyBsb2FkZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgX2xvYWQocGxheVZpZGVvOiBib29sZWFuKSB7XG4gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UncmUgbm90IGluIGEgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgICBpZiAoIXRoaXMuX2lzQnJvd3Nlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghd2luZG93LllUIHx8ICF3aW5kb3cuWVQuUGxheWVyKSB7XG4gICAgICBpZiAodGhpcy5sb2FkQXBpKSB7XG4gICAgICAgIHRoaXMuX2lzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIGxvYWRBcGkodGhpcy5fbm9uY2UpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dCZWZvcmVJZnJhbWVBcGlMb2FkcyAmJiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ05hbWVzcGFjZSBZVCBub3QgZm91bmQsIGNhbm5vdCBjb25zdHJ1Y3QgZW1iZWRkZWQgeW91dHViZSBwbGF5ZXIuICcgK1xuICAgICAgICAgICAgJ1BsZWFzZSBpbnN0YWxsIHRoZSBZb3VUdWJlIFBsYXllciBBUEkgUmVmZXJlbmNlIGZvciBpZnJhbWUgRW1iZWRzOiAnICtcbiAgICAgICAgICAgICdodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS95b3V0dWJlL2lmcmFtZV9hcGlfcmVmZXJlbmNlJyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZXhpc3RpbmdBcGlSZWFkeUNhbGxiYWNrID0gd2luZG93Lm9uWW91VHViZUlmcmFtZUFQSVJlYWR5O1xuXG4gICAgICB3aW5kb3cub25Zb3VUdWJlSWZyYW1lQVBJUmVhZHkgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2V4aXN0aW5nQXBpUmVhZHlDYWxsYmFjaz8uKCk7XG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5fY3JlYXRlUGxheWVyKHBsYXlWaWRlbykpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY3JlYXRlUGxheWVyKHBsYXlWaWRlbyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIExvYWRzIHRoZSBwbGF5ZXIgZGVwZW5kaW5nIG9uIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgY29tcG9uZW50LiAqL1xuICBwcml2YXRlIF9jb25kaXRpb25hbGx5TG9hZCgpIHtcbiAgICAvLyBJZiB0aGUgcGxhY2Vob2xkZXIgaXNuJ3Qgc2hvd24gYW55bW9yZSwgd2UgaGF2ZSB0byB0cmlnZ2VyIGEgbG9hZC5cbiAgICBpZiAoIXRoaXMuX3Nob3VsZFNob3dQbGFjZWhvbGRlcigpKSB7XG4gICAgICB0aGlzLl9sb2FkKGZhbHNlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucGxheWVyVmFycz8uYXV0b3BsYXkgPT09IDEpIHtcbiAgICAgIC8vIElmIGl0J3MgYW4gYXV0b3BsYXlpbmcgdmlkZW8sIHdlIGhhdmUgdG8gaGlkZSB0aGUgcGxhY2Vob2xkZXIgYW5kIHN0YXJ0IHBsYXlpbmcuXG4gICAgICB0aGlzLl9sb2FkKHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgdGhlIHBsYWNlaG9sZGVyIGVsZW1lbnQuICovXG4gIHByb3RlY3RlZCBfc2hvdWxkU2hvd1BsYWNlaG9sZGVyKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmRpc2FibGVQbGFjZWhvbGRlcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFNpbmNlIHdlIGRvbid0IGxvYWQgdGhlIEFQSSBvbiB0aGUgc2VydmVyLCB3ZSBzaG93IHRoZSBwbGFjZWhvbGRlciBwZXJtYW5lbnRseS5cbiAgICBpZiAoIXRoaXMuX2lzQnJvd3Nlcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2hhc1BsYWNlaG9sZGVyICYmICEhdGhpcy52aWRlb0lkICYmICF0aGlzLl9wbGF5ZXI7XG4gIH1cblxuICAvKiogR2V0cyBhbiBvYmplY3QgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBzdG9yZSB0aGUgdGVtcG9yYXJ5IEFQSSBzdGF0ZS4gKi9cbiAgcHJpdmF0ZSBfZ2V0UGVuZGluZ1N0YXRlKCk6IFBlbmRpbmdQbGF5ZXJTdGF0ZSB7XG4gICAgaWYgKCF0aGlzLl9wZW5kaW5nUGxheWVyU3RhdGUpIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdQbGF5ZXJTdGF0ZSA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZW5kaW5nUGxheWVyU3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgY2hhbmdlIGluIHRoZSBjb21wb25lbnQgc3RhdGVcbiAgICogcmVxdWlyZXMgdGhlIFlvdVR1YmUgcGxheWVyIHRvIGJlIHJlY3JlYXRlZC5cbiAgICovXG4gIHByaXZhdGUgX3Nob3VsZFJlY3JlYXRlUGxheWVyKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiBib29sZWFuIHtcbiAgICBjb25zdCBjaGFuZ2UgPVxuICAgICAgY2hhbmdlc1sndmlkZW9JZCddIHx8XG4gICAgICBjaGFuZ2VzWydwbGF5ZXJWYXJzJ10gfHxcbiAgICAgIGNoYW5nZXNbJ2Rpc2FibGVDb29raWVzJ10gfHxcbiAgICAgIGNoYW5nZXNbJ2Rpc2FibGVQbGFjZWhvbGRlciddO1xuICAgIHJldHVybiAhIWNoYW5nZSAmJiAhY2hhbmdlLmlzRmlyc3RDaGFuZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IFlvdVR1YmUgcGxheWVyIGFuZCBkZXN0cm95cyB0aGUgZXhpc3Rpbmcgb25lLlxuICAgKiBAcGFyYW0gcGxheVZpZGVvIFdoZXRoZXIgdG8gcGxheSB0aGUgdmlkZW8gb25jZSBpdCBsb2Fkcy5cbiAgICovXG4gIHByaXZhdGUgX2NyZWF0ZVBsYXllcihwbGF5VmlkZW86IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9wbGF5ZXI/LmRlc3Ryb3koKTtcbiAgICB0aGlzLl9wZW5kaW5nUGxheWVyPy5kZXN0cm95KCk7XG5cbiAgICAvLyBBIHBsYXllciBjYW4ndCBiZSBjcmVhdGVkIGlmIHRoZSBBUEkgaXNuJ3QgbG9hZGVkLFxuICAgIC8vIG9yIHRoZXJlIGlzbid0IGEgdmlkZW8gb3IgcGxheWxpc3QgdG8gYmUgcGxheWVkLlxuICAgIGlmICh0eXBlb2YgWVQgPT09ICd1bmRlZmluZWQnIHx8ICghdGhpcy52aWRlb0lkICYmICF0aGlzLnBsYXllclZhcnM/Lmxpc3QpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSW1wb3J0YW50ISBXZSBuZWVkIHRvIGNyZWF0ZSB0aGUgUGxheWVyIG9iamVjdCBvdXRzaWRlIG9mIHRoZSBgTmdab25lYCwgYmVjYXVzZSBpdCBraWNrc1xuICAgIC8vIG9mZiBhIDI1MG1zIHNldEludGVydmFsIHdoaWNoIHdpbGwgY29udGludWFsbHkgdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIGlmIHdlIGRvbid0LlxuICAgIGNvbnN0IHBsYXllciA9IHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihcbiAgICAgICgpID0+XG4gICAgICAgIG5ldyBZVC5QbGF5ZXIodGhpcy55b3V0dWJlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgICB2aWRlb0lkOiB0aGlzLnZpZGVvSWQsXG4gICAgICAgICAgaG9zdDogdGhpcy5kaXNhYmxlQ29va2llcyA/ICdodHRwczovL3d3dy55b3V0dWJlLW5vY29va2llLmNvbScgOiB1bmRlZmluZWQsXG4gICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCxcbiAgICAgICAgICAvLyBDYWxsaW5nIGBwbGF5VmlkZW9gIG9uIGxvYWQgZG9lc24ndCBhcHBlYXIgdG8gYWN0dWFsbHkgcGxheVxuICAgICAgICAgIC8vIHRoZSB2aWRlbyBzbyB3ZSBuZWVkIHRvIHRyaWdnZXIgaXQgdGhyb3VnaCBgcGxheWVyVmFyc2AgaW5zdGVhZC5cbiAgICAgICAgICBwbGF5ZXJWYXJzOiBwbGF5VmlkZW8gPyB7Li4uKHRoaXMucGxheWVyVmFycyB8fCB7fSksIGF1dG9wbGF5OiAxfSA6IHRoaXMucGxheWVyVmFycyxcbiAgICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IHdoZW5SZWFkeSA9ICgpID0+IHtcbiAgICAgIC8vIE9ubHkgYXNzaWduIHRoZSBwbGF5ZXIgb25jZSBpdCdzIHJlYWR5LCBvdGhlcndpc2UgWW91VHViZSBkb2Vzbid0IGV4cG9zZSBzb21lIEFQSXMuXG4gICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5faXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2hhc1BsYWNlaG9sZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BsYXllciA9IHBsYXllcjtcbiAgICAgICAgdGhpcy5fcGVuZGluZ1BsYXllciA9IHVuZGVmaW5lZDtcbiAgICAgICAgcGxheWVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29uUmVhZHknLCB3aGVuUmVhZHkpO1xuICAgICAgICB0aGlzLl9wbGF5ZXJDaGFuZ2VzLm5leHQocGxheWVyKTtcbiAgICAgICAgdGhpcy5fc2V0U2l6ZSgpO1xuICAgICAgICB0aGlzLl9zZXRRdWFsaXR5KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdQbGF5ZXJTdGF0ZSkge1xuICAgICAgICAgIHRoaXMuX2FwcGx5UGVuZGluZ1BsYXllclN0YXRlKHBsYXllciwgdGhpcy5fcGVuZGluZ1BsYXllclN0YXRlKTtcbiAgICAgICAgICB0aGlzLl9wZW5kaW5nUGxheWVyU3RhdGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbmx5IGN1ZSB0aGUgcGxheWVyIHdoZW4gaXQgZWl0aGVyIGhhc24ndCBzdGFydGVkIHlldCBvciBpdCdzIGN1ZWQsXG4gICAgICAgIC8vIG90aGVyd2lzZSBjdWluZyBpdCBjYW4gaW50ZXJydXB0IGEgcGxheWVyIHdpdGggYXV0b3BsYXkgZW5hYmxlZC5cbiAgICAgICAgY29uc3Qgc3RhdGUgPSBwbGF5ZXIuZ2V0UGxheWVyU3RhdGUoKTtcbiAgICAgICAgaWYgKHN0YXRlID09PSBZVC5QbGF5ZXJTdGF0ZS5VTlNUQVJURUQgfHwgc3RhdGUgPT09IFlULlBsYXllclN0YXRlLkNVRUQgfHwgc3RhdGUgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuX2N1ZVBsYXllcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5fcGVuZGluZ1BsYXllciA9IHBsYXllcjtcbiAgICBwbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcignb25SZWFkeScsIHdoZW5SZWFkeSk7XG4gIH1cblxuICAvKiogQXBwbGllcyBhbnkgc3RhdGUgdGhhdCBjaGFuZ2VkIGJlZm9yZSB0aGUgcGxheWVyIHdhcyBpbml0aWFsaXplZC4gKi9cbiAgcHJpdmF0ZSBfYXBwbHlQZW5kaW5nUGxheWVyU3RhdGUocGxheWVyOiBZVC5QbGF5ZXIsIHBlbmRpbmdTdGF0ZTogUGVuZGluZ1BsYXllclN0YXRlKTogdm9pZCB7XG4gICAgY29uc3Qge3BsYXliYWNrU3RhdGUsIHBsYXliYWNrUmF0ZSwgdm9sdW1lLCBtdXRlZCwgc2Vla30gPSBwZW5kaW5nU3RhdGU7XG5cbiAgICBzd2l0Y2ggKHBsYXliYWNrU3RhdGUpIHtcbiAgICAgIGNhc2UgWVQuUGxheWVyU3RhdGUuUExBWUlORzpcbiAgICAgICAgcGxheWVyLnBsYXlWaWRlbygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgWVQuUGxheWVyU3RhdGUuUEFVU0VEOlxuICAgICAgICBwbGF5ZXIucGF1c2VWaWRlbygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgWVQuUGxheWVyU3RhdGUuQ1VFRDpcbiAgICAgICAgcGxheWVyLnN0b3BWaWRlbygpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAocGxheWJhY2tSYXRlICE9IG51bGwpIHtcbiAgICAgIHBsYXllci5zZXRQbGF5YmFja1JhdGUocGxheWJhY2tSYXRlKTtcbiAgICB9XG5cbiAgICBpZiAodm9sdW1lICE9IG51bGwpIHtcbiAgICAgIHBsYXllci5zZXRWb2x1bWUodm9sdW1lKTtcbiAgICB9XG5cbiAgICBpZiAobXV0ZWQgIT0gbnVsbCkge1xuICAgICAgbXV0ZWQgPyBwbGF5ZXIubXV0ZSgpIDogcGxheWVyLnVuTXV0ZSgpO1xuICAgIH1cblxuICAgIGlmIChzZWVrICE9IG51bGwpIHtcbiAgICAgIHBsYXllci5zZWVrVG8oc2Vlay5zZWNvbmRzLCBzZWVrLmFsbG93U2Vla0FoZWFkKTtcbiAgICB9XG4gIH1cblxuICAvKiogQ3VlcyB0aGUgcGxheWVyIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbXBvbmVudCBzdGF0ZS4gKi9cbiAgcHJpdmF0ZSBfY3VlUGxheWVyKCkge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIgJiYgdGhpcy52aWRlb0lkKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIuY3VlVmlkZW9CeUlkKHtcbiAgICAgICAgdmlkZW9JZDogdGhpcy52aWRlb0lkLFxuICAgICAgICBzdGFydFNlY29uZHM6IHRoaXMuc3RhcnRTZWNvbmRzLFxuICAgICAgICBlbmRTZWNvbmRzOiB0aGlzLmVuZFNlY29uZHMsXG4gICAgICAgIHN1Z2dlc3RlZFF1YWxpdHk6IHRoaXMuc3VnZ2VzdGVkUXVhbGl0eSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTZXRzIHRoZSBwbGF5ZXIncyBzaXplIGJhc2VkIG9uIHRoZSBjdXJyZW50IGlucHV0IHZhbHVlcy4gKi9cbiAgcHJpdmF0ZSBfc2V0U2l6ZSgpIHtcbiAgICB0aGlzLl9wbGF5ZXI/LnNldFNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuICB9XG5cbiAgLyoqIFNldHMgdGhlIHBsYXllcidzIHF1YWxpdHkgYmFzZWQgb24gdGhlIGN1cnJlbnQgaW5wdXQgdmFsdWVzLiAqL1xuICBwcml2YXRlIF9zZXRRdWFsaXR5KCkge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIgJiYgdGhpcy5zdWdnZXN0ZWRRdWFsaXR5KSB7XG4gICAgICB0aGlzLl9wbGF5ZXIuc2V0UGxheWJhY2tRdWFsaXR5KHRoaXMuc3VnZ2VzdGVkUXVhbGl0eSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEdldHMgYW4gb2JzZXJ2YWJsZSB0aGF0IGFkZHMgYW4gZXZlbnQgbGlzdGVuZXIgdG8gdGhlIHBsYXllciB3aGVuIGEgdXNlciBzdWJzY3JpYmVzIHRvIGl0LiAqL1xuICBwcml2YXRlIF9nZXRMYXp5RW1pdHRlcjxUIGV4dGVuZHMgWVQuUGxheWVyRXZlbnQ+KG5hbWU6IGtleW9mIFlULkV2ZW50cyk6IE9ic2VydmFibGU8VD4ge1xuICAgIC8vIFN0YXJ0IHdpdGggdGhlIHN0cmVhbSBvZiBwbGF5ZXJzLiBUaGlzIHdheSB0aGUgZXZlbnRzIHdpbGwgYmUgdHJhbnNmZXJyZWRcbiAgICAvLyBvdmVyIHRvIHRoZSBuZXcgcGxheWVyIGlmIGl0IGdldHMgc3dhcHBlZCBvdXQgdW5kZXItdGhlLWhvb2QuXG4gICAgcmV0dXJuIHRoaXMuX3BsYXllckNoYW5nZXMucGlwZShcbiAgICAgIC8vIFN3aXRjaCB0byB0aGUgYm91bmQgZXZlbnQuIGBzd2l0Y2hNYXBgIGVuc3VyZXMgdGhhdCB0aGUgb2xkIGV2ZW50IGlzIHJlbW92ZWQgd2hlbiB0aGVcbiAgICAgIC8vIHBsYXllciBpcyBjaGFuZ2VkLiBJZiB0aGVyZSdzIG5vIHBsYXllciwgcmV0dXJuIGFuIG9ic2VydmFibGUgdGhhdCBuZXZlciBlbWl0cy5cbiAgICAgIHN3aXRjaE1hcChwbGF5ZXIgPT4ge1xuICAgICAgICByZXR1cm4gcGxheWVyXG4gICAgICAgICAgPyBmcm9tRXZlbnRQYXR0ZXJuPFQ+KFxuICAgICAgICAgICAgICAobGlzdGVuZXI6IChldmVudDogVCkgPT4gdm9pZCkgPT4ge1xuICAgICAgICAgICAgICAgIHBsYXllci5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKGxpc3RlbmVyOiAoZXZlbnQ6IFQpID0+IHZvaWQpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgQVBJIHNlZW1zIHRvIHRocm93IHdoZW4gd2UgdHJ5IHRvIHVuYmluZCBmcm9tIGEgZGVzdHJveWVkIHBsYXllciBhbmQgaXQgZG9lc24ndFxuICAgICAgICAgICAgICAgIC8vIGV4cG9zZSB3aGV0aGVyIHRoZSBwbGF5ZXIgaGFzIGJlZW4gZGVzdHJveWVkIHNvIHdlIGhhdmUgdG8gd3JhcCBpdCBpbiBhIHRyeS9jYXRjaCB0b1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgdGhlIGVudGlyZSBzdHJlYW0gZnJvbSBlcnJvcmluZyBvdXQuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIHBsYXllcj8ucmVtb3ZlRXZlbnRMaXN0ZW5lcj8uKG5hbWUsIGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIHt9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBvYnNlcnZhYmxlT2Y8VD4oKTtcbiAgICAgIH0pLFxuICAgICAgLy8gQnkgZGVmYXVsdCB3ZSBydW4gYWxsIHRoZSBBUEkgaW50ZXJhY3Rpb25zIG91dHNpZGUgdGhlIHpvbmVcbiAgICAgIC8vIHNvIHdlIGhhdmUgdG8gYnJpbmcgdGhlIGV2ZW50cyBiYWNrIGluIG1hbnVhbGx5IHdoZW4gdGhleSBlbWl0LlxuICAgICAgc291cmNlID0+XG4gICAgICAgIG5ldyBPYnNlcnZhYmxlPFQ+KG9ic2VydmVyID0+XG4gICAgICAgICAgc291cmNlLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiB2YWx1ZSA9PiB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IG9ic2VydmVyLm5leHQodmFsdWUpKSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvciA9PiBvYnNlcnZlci5lcnJvcihlcnJvciksXG4gICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4gb2JzZXJ2ZXIuY29tcGxldGUoKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICAgIC8vIEVuc3VyZXMgdGhhdCBldmVyeXRoaW5nIGlzIGNsZWFyZWQgb3V0IG9uIGRlc3Ryb3kuXG4gICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSxcbiAgICApO1xuICB9XG59XG5cbmxldCBhcGlMb2FkZWQgPSBmYWxzZTtcblxuLyoqIExvYWRzIHRoZSBZb3VUdWJlIEFQSSBmcm9tIGEgc3BlY2lmaWVkIFVSTCBvbmx5IG9uY2UuICovXG5mdW5jdGlvbiBsb2FkQXBpKG5vbmNlOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gIGlmIChhcGlMb2FkZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBXZSBjYW4gdXNlIGBkb2N1bWVudGAgZGlyZWN0bHkgaGVyZSwgYmVjYXVzZSB0aGlzIGxvZ2ljIGRvZXNuJ3QgcnVuIG91dHNpZGUgdGhlIGJyb3dzZXIuXG4gIGNvbnN0IHVybCA9ICdodHRwczovL3d3dy55b3V0dWJlLmNvbS9pZnJhbWVfYXBpJztcbiAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gIGNvbnN0IGNhbGxiYWNrID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgIHNjcmlwdC5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgY2FsbGJhY2spO1xuICAgIHNjcmlwdC5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIGNhbGxiYWNrKTtcblxuICAgIGlmIChldmVudC50eXBlID09PSAnZXJyb3InKSB7XG4gICAgICBhcGlMb2FkZWQgPSBmYWxzZTtcblxuICAgICAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gbG9hZCBZb3VUdWJlIEFQSSBmcm9tICR7dXJsfWApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgc2NyaXB0LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBjYWxsYmFjayk7XG4gIHNjcmlwdC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGNhbGxiYWNrKTtcbiAgKHNjcmlwdCBhcyBhbnkpLnNyYyA9IHVybDtcbiAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcblxuICBpZiAobm9uY2UpIHtcbiAgICBzY3JpcHQubm9uY2UgPSBub25jZTtcbiAgfVxuXG4gIC8vIFNldCB0aGlzIGltbWVkaWF0ZWx5IHRvIHRydWUgc28gd2UgZG9uJ3Qgc3RhcnQgbG9hZGluZyBhbm90aGVyIHNjcmlwdFxuICAvLyB3aGlsZSB0aGlzIG9uZSBpcyBwZW5kaW5nLiBJZiBsb2FkaW5nIGZhaWxzLCB3ZSdsbCBmbGlwIGl0IGJhY2sgdG8gZmFsc2UuXG4gIGFwaUxvYWRlZCA9IHRydWU7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbn1cbiJdfQ==
|
|
@@ -19,8 +19,8 @@ class YouTubePlayerPlaceholder {
|
|
|
19
19
|
}
|
|
20
20
|
return `url(${url})`;
|
|
21
21
|
}
|
|
22
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
23
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.
|
|
22
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.0-next.2", ngImport: i0, type: YouTubePlayerPlaceholder, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.0-next.2", type: YouTubePlayerPlaceholder, isStandalone: true, selector: "youtube-player-placeholder", inputs: { videoId: "videoId", width: "width", height: "height", isLoading: "isLoading", buttonLabel: "buttonLabel", quality: "quality" }, host: { properties: { "class.youtube-player-placeholder-loading": "isLoading", "style.background-image": "_getBackgroundImage()", "style.width.px": "width", "style.height.px": "height" }, classAttribute: "youtube-player-placeholder" }, ngImport: i0, template: `
|
|
24
24
|
<button type="button" class="youtube-player-placeholder-button" [attr.aria-label]="buttonLabel">
|
|
25
25
|
<svg
|
|
26
26
|
height="100%"
|
|
@@ -34,7 +34,7 @@ class YouTubePlayerPlaceholder {
|
|
|
34
34
|
</button>
|
|
35
35
|
`, isInline: true, styles: [".youtube-player-placeholder{display:flex;align-items:center;justify-content:center;width:100%;overflow:hidden;cursor:pointer;background-color:#000;background-position:center center;background-size:cover;transition:box-shadow 300ms ease;box-shadow:inset 0 120px 90px -90px rgba(0,0,0,.8)}.youtube-player-placeholder-button{transition:opacity 300ms ease;-moz-appearance:none;-webkit-appearance:none;background:none;border:none;padding:0;display:flex}.youtube-player-placeholder-button svg{width:68px;height:48px}.youtube-player-placeholder-loading{box-shadow:none}.youtube-player-placeholder-loading .youtube-player-placeholder-button{opacity:0}"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
36
36
|
}
|
|
37
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
37
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0-next.2", ngImport: i0, type: YouTubePlayerPlaceholder, decorators: [{
|
|
38
38
|
type: Component,
|
|
39
39
|
args: [{ selector: 'youtube-player-placeholder', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: `
|
|
40
40
|
<button type="button" class="youtube-player-placeholder-button" [attr.aria-label]="buttonLabel">
|
|
@@ -517,8 +517,8 @@ class YouTubePlayer {
|
|
|
517
517
|
// Ensures that everything is cleared out on destroy.
|
|
518
518
|
takeUntil(this._destroyed));
|
|
519
519
|
}
|
|
520
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
521
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.
|
|
520
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.0-next.2", ngImport: i0, type: YouTubePlayer, deps: [{ token: i0.NgZone }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
521
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.0-next.2", type: YouTubePlayer, isStandalone: true, selector: "youtube-player", inputs: { videoId: "videoId", height: ["height", "height", numberAttribute], width: ["width", "width", numberAttribute], startSeconds: ["startSeconds", "startSeconds", coerceTime], endSeconds: ["endSeconds", "endSeconds", coerceTime], suggestedQuality: "suggestedQuality", playerVars: "playerVars", disableCookies: ["disableCookies", "disableCookies", booleanAttribute], loadApi: ["loadApi", "loadApi", booleanAttribute], disablePlaceholder: ["disablePlaceholder", "disablePlaceholder", booleanAttribute], showBeforeIframeApiLoads: ["showBeforeIframeApiLoads", "showBeforeIframeApiLoads", booleanAttribute], placeholderButtonLabel: "placeholderButtonLabel", placeholderImageQuality: "placeholderImageQuality" }, outputs: { ready: "ready", stateChange: "stateChange", error: "error", apiChange: "apiChange", playbackQualityChange: "playbackQualityChange", playbackRateChange: "playbackRateChange" }, viewQueries: [{ propertyName: "youtubeContainer", first: true, predicate: ["youtubeContainer"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `
|
|
522
522
|
@if (_shouldShowPlaceholder()) {
|
|
523
523
|
<youtube-player-placeholder
|
|
524
524
|
[videoId]="videoId!"
|
|
@@ -534,7 +534,7 @@ class YouTubePlayer {
|
|
|
534
534
|
</div>
|
|
535
535
|
`, isInline: true, dependencies: [{ kind: "component", type: YouTubePlayerPlaceholder, selector: "youtube-player-placeholder", inputs: ["videoId", "width", "height", "isLoading", "buttonLabel", "quality"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
536
536
|
}
|
|
537
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
537
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0-next.2", ngImport: i0, type: YouTubePlayer, decorators: [{
|
|
538
538
|
type: Component,
|
|
539
539
|
args: [{
|
|
540
540
|
selector: 'youtube-player',
|
|
@@ -644,11 +644,11 @@ function loadApi(nonce) {
|
|
|
644
644
|
}
|
|
645
645
|
|
|
646
646
|
class YouTubePlayerModule {
|
|
647
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
648
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.
|
|
649
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.
|
|
647
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.0-next.2", ngImport: i0, type: YouTubePlayerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
648
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.0-next.2", ngImport: i0, type: YouTubePlayerModule, imports: [YouTubePlayer], exports: [YouTubePlayer] }); }
|
|
649
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.0-next.2", ngImport: i0, type: YouTubePlayerModule }); }
|
|
650
650
|
}
|
|
651
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
651
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0-next.2", ngImport: i0, type: YouTubePlayerModule, decorators: [{
|
|
652
652
|
type: NgModule,
|
|
653
653
|
args: [{
|
|
654
654
|
imports: [YouTubePlayer],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"youtube-player.mjs","sources":["../../../../../../src/youtube-player/youtube-player-placeholder.ts","../../../../../../src/youtube-player/youtube-player.ts","../../../../../../src/youtube-player/youtube-module.ts","../../../../../../src/youtube-player/youtube-player_public_index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ChangeDetectionStrategy, Component, Input, ViewEncapsulation} from '@angular/core';\n\n/** Quality of the placeholder image. */\nexport type PlaceholderImageQuality = 'high' | 'standard' | 'low';\n\n@Component({\n selector: 'youtube-player-placeholder',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n <button type=\"button\" class=\"youtube-player-placeholder-button\" [attr.aria-label]=\"buttonLabel\">\n <svg\n height=\"100%\"\n version=\"1.1\"\n viewBox=\"0 0 68 48\"\n focusable=\"false\"\n aria-hidden=\"true\">\n <path d=\"M66.52,7.74c-0.78-2.93-2.49-5.41-5.42-6.19C55.79,.13,34,0,34,0S12.21,.13,6.9,1.55 C3.97,2.33,2.27,4.81,1.48,7.74C0.06,13.05,0,24,0,24s0.06,10.95,1.48,16.26c0.78,2.93,2.49,5.41,5.42,6.19 C12.21,47.87,34,48,34,48s21.79-0.13,27.1-1.55c2.93-0.78,4.64-3.26,5.42-6.19C67.94,34.95,68,24,68,24S67.94,13.05,66.52,7.74z\" fill=\"#f00\"></path>\n <path d=\"M 45,24 27,14 27,34\" fill=\"#fff\"></path>\n </svg>\n </button>\n `,\n standalone: true,\n styleUrl: 'youtube-player-placeholder.css',\n host: {\n 'class': 'youtube-player-placeholder',\n '[class.youtube-player-placeholder-loading]': 'isLoading',\n '[style.background-image]': '_getBackgroundImage()',\n '[style.width.px]': 'width',\n '[style.height.px]': 'height',\n },\n})\nexport class YouTubePlayerPlaceholder {\n /** ID of the video for which to show the placeholder. */\n @Input() videoId: string;\n\n /** Width of the video for which to show the placeholder. */\n @Input() width: number;\n\n /** Height of the video for which to show the placeholder. */\n @Input() height: number;\n\n /** Whether the video is currently being loaded. */\n @Input() isLoading: boolean;\n\n /** Accessible label for the play button. */\n @Input() buttonLabel: string;\n\n /** Quality of the placeholder image. */\n @Input() quality: PlaceholderImageQuality;\n\n /** Gets the background image showing the placeholder. */\n protected _getBackgroundImage(): string | undefined {\n let url: string;\n\n if (this.quality === 'low') {\n url = `https://i.ytimg.com/vi/${this.videoId}/hqdefault.jpg`;\n } else if (this.quality === 'high') {\n url = `https://i.ytimg.com/vi/${this.videoId}/maxresdefault.jpg`;\n } else {\n url = `https://i.ytimg.com/vi_webp/${this.videoId}/sddefault.webp`;\n }\n\n return `url(${url})`;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/// <reference types=\"youtube\" />\n\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n NgZone,\n OnDestroy,\n Output,\n ViewChild,\n ViewEncapsulation,\n Inject,\n PLATFORM_ID,\n OnChanges,\n SimpleChanges,\n booleanAttribute,\n numberAttribute,\n InjectionToken,\n inject,\n CSP_NONCE,\n ChangeDetectorRef,\n AfterViewInit,\n} from '@angular/core';\nimport {isPlatformBrowser} from '@angular/common';\nimport {Observable, of as observableOf, Subject, BehaviorSubject, fromEventPattern} from 'rxjs';\nimport {takeUntil, switchMap} from 'rxjs/operators';\nimport {PlaceholderImageQuality, YouTubePlayerPlaceholder} from './youtube-player-placeholder';\n\ndeclare global {\n interface Window {\n YT: typeof YT | undefined;\n onYouTubeIframeAPIReady: (() => void) | undefined;\n }\n}\n\n/** Injection token used to configure the `YouTubePlayer`. */\nexport const YOUTUBE_PLAYER_CONFIG = new InjectionToken<YouTubePlayerConfig>(\n 'YOUTUBE_PLAYER_CONFIG',\n);\n\n/** Object that can be used to configure the `YouTubePlayer`. */\nexport interface YouTubePlayerConfig {\n /** Whether to load the YouTube iframe API automatically. Defaults to `true`. */\n loadApi?: boolean;\n\n /**\n * By default the player shows a placeholder image instead of loading the YouTube API which\n * improves the initial page load performance. Use this option to disable the placeholder loading\n * behavior globally. Defaults to `false`.\n */\n disablePlaceholder?: boolean;\n\n /** Accessible label for the play button inside of the placeholder. */\n placeholderButtonLabel?: string;\n\n /**\n * Quality of the displayed placeholder image. Defaults to `standard`,\n * because not all video have a high-quality placeholder.\n */\n placeholderImageQuality?: PlaceholderImageQuality;\n}\n\nexport const DEFAULT_PLAYER_WIDTH = 640;\nexport const DEFAULT_PLAYER_HEIGHT = 390;\n\n/**\n * Object used to store the state of the player if the\n * user tries to interact with the API before it has been loaded.\n */\ninterface PendingPlayerState {\n playbackState?: YT.PlayerState.PLAYING | YT.PlayerState.PAUSED | YT.PlayerState.CUED;\n playbackRate?: number;\n volume?: number;\n muted?: boolean;\n seek?: {seconds: number; allowSeekAhead: boolean};\n}\n\n/** Coercion function for time values. */\nfunction coerceTime(value: number | undefined): number | undefined {\n return value == null ? value : numberAttribute(value, 0);\n}\n\n/**\n * Angular component that renders a YouTube player via the YouTube player\n * iframe API.\n * @see https://developers.google.com/youtube/iframe_api_reference\n */\n@Component({\n selector: 'youtube-player',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [YouTubePlayerPlaceholder],\n template: `\n @if (_shouldShowPlaceholder()) {\n <youtube-player-placeholder\n [videoId]=\"videoId!\"\n [width]=\"width\"\n [height]=\"height\"\n [isLoading]=\"_isLoading\"\n [buttonLabel]=\"placeholderButtonLabel\"\n [quality]=\"placeholderImageQuality\"\n (click)=\"_load(true)\"/>\n }\n <div [style.display]=\"_shouldShowPlaceholder() ? 'none' : ''\">\n <div #youtubeContainer></div>\n </div>\n `,\n})\nexport class YouTubePlayer implements AfterViewInit, OnChanges, OnDestroy {\n /** Whether we're currently rendering inside a browser. */\n private readonly _isBrowser: boolean;\n private _player: YT.Player | undefined;\n private _pendingPlayer: YT.Player | undefined;\n private _existingApiReadyCallback: (() => void) | undefined;\n private _pendingPlayerState: PendingPlayerState | undefined;\n private readonly _destroyed = new Subject<void>();\n private readonly _playerChanges = new BehaviorSubject<YT.Player | undefined>(undefined);\n private readonly _nonce = inject(CSP_NONCE, {optional: true});\n private readonly _changeDetectorRef = inject(ChangeDetectorRef);\n protected _isLoading = false;\n protected _hasPlaceholder = true;\n\n /** YouTube Video ID to view */\n @Input()\n videoId: string | undefined;\n\n /** Height of video player */\n @Input({transform: numberAttribute})\n get height(): number {\n return this._height;\n }\n set height(height: number | undefined) {\n this._height = height == null || isNaN(height) ? DEFAULT_PLAYER_HEIGHT : height;\n }\n private _height = DEFAULT_PLAYER_HEIGHT;\n\n /** Width of video player */\n @Input({transform: numberAttribute})\n get width(): number {\n return this._width;\n }\n set width(width: number | undefined) {\n this._width = width == null || isNaN(width) ? DEFAULT_PLAYER_WIDTH : width;\n }\n private _width = DEFAULT_PLAYER_WIDTH;\n\n /** The moment when the player is supposed to start playing */\n @Input({transform: coerceTime})\n startSeconds: number | undefined;\n\n /** The moment when the player is supposed to stop playing */\n @Input({transform: coerceTime})\n endSeconds: number | undefined;\n\n /** The suggested quality of the player */\n @Input()\n suggestedQuality: YT.SuggestedVideoQuality | undefined;\n\n /**\n * Extra parameters used to configure the player. See:\n * https://developers.google.com/youtube/player_parameters.html?playerVersion=HTML5#Parameters\n */\n @Input()\n playerVars: YT.PlayerVars | undefined;\n\n /** Whether cookies inside the player have been disabled. */\n @Input({transform: booleanAttribute})\n disableCookies: boolean = false;\n\n /** Whether to automatically load the YouTube iframe API. Defaults to `true`. */\n @Input({transform: booleanAttribute})\n loadApi: boolean;\n\n /**\n * By default the player shows a placeholder image instead of loading the YouTube API which\n * improves the initial page load performance. This input allows for the behavior to be disabled.\n */\n @Input({transform: booleanAttribute})\n disablePlaceholder: boolean = false;\n\n /**\n * Whether the iframe will attempt to load regardless of the status of the api on the\n * page. Set this to true if you don't want the `onYouTubeIframeAPIReady` field to be\n * set on the global window.\n */\n @Input({transform: booleanAttribute}) showBeforeIframeApiLoads: boolean = false;\n\n /** Accessible label for the play button inside of the placeholder. */\n @Input() placeholderButtonLabel: string;\n\n /**\n * Quality of the displayed placeholder image. Defaults to `standard`,\n * because not all video have a high-quality placeholder.\n */\n @Input() placeholderImageQuality: PlaceholderImageQuality;\n\n /** Outputs are direct proxies from the player itself. */\n @Output() readonly ready: Observable<YT.PlayerEvent> =\n this._getLazyEmitter<YT.PlayerEvent>('onReady');\n\n @Output() readonly stateChange: Observable<YT.OnStateChangeEvent> =\n this._getLazyEmitter<YT.OnStateChangeEvent>('onStateChange');\n\n @Output() readonly error: Observable<YT.OnErrorEvent> =\n this._getLazyEmitter<YT.OnErrorEvent>('onError');\n\n @Output() readonly apiChange: Observable<YT.PlayerEvent> =\n this._getLazyEmitter<YT.PlayerEvent>('onApiChange');\n\n @Output() readonly playbackQualityChange: Observable<YT.OnPlaybackQualityChangeEvent> =\n this._getLazyEmitter<YT.OnPlaybackQualityChangeEvent>('onPlaybackQualityChange');\n\n @Output() readonly playbackRateChange: Observable<YT.OnPlaybackRateChangeEvent> =\n this._getLazyEmitter<YT.OnPlaybackRateChangeEvent>('onPlaybackRateChange');\n\n /** The element that will be replaced by the iframe. */\n @ViewChild('youtubeContainer', {static: true})\n youtubeContainer: ElementRef<HTMLElement>;\n\n constructor(\n private _ngZone: NgZone,\n @Inject(PLATFORM_ID) platformId: Object,\n ) {\n const config = inject(YOUTUBE_PLAYER_CONFIG, {optional: true});\n this.loadApi = config?.loadApi ?? true;\n this.disablePlaceholder = !!config?.disablePlaceholder;\n this.placeholderButtonLabel = config?.placeholderButtonLabel || 'Play video';\n this.placeholderImageQuality = config?.placeholderImageQuality || 'standard';\n this._isBrowser = isPlatformBrowser(platformId);\n }\n\n ngAfterViewInit() {\n this._conditionallyLoad();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this._shouldRecreatePlayer(changes)) {\n this._conditionallyLoad();\n } else if (this._player) {\n if (changes['width'] || changes['height']) {\n this._setSize();\n }\n\n if (changes['suggestedQuality']) {\n this._setQuality();\n }\n\n if (changes['startSeconds'] || changes['endSeconds'] || changes['suggestedQuality']) {\n this._cuePlayer();\n }\n }\n }\n\n ngOnDestroy() {\n this._pendingPlayer?.destroy();\n\n if (this._player) {\n this._player.destroy();\n window.onYouTubeIframeAPIReady = this._existingApiReadyCallback;\n }\n\n this._playerChanges.complete();\n this._destroyed.next();\n this._destroyed.complete();\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#playVideo */\n playVideo() {\n if (this._player) {\n this._player.playVideo();\n } else {\n this._getPendingState().playbackState = YT.PlayerState.PLAYING;\n }\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#pauseVideo */\n pauseVideo() {\n if (this._player) {\n this._player.pauseVideo();\n } else {\n this._getPendingState().playbackState = YT.PlayerState.PAUSED;\n }\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#stopVideo */\n stopVideo() {\n if (this._player) {\n this._player.stopVideo();\n } else {\n // It seems like YouTube sets the player to CUED when it's stopped.\n this._getPendingState().playbackState = YT.PlayerState.CUED;\n }\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#seekTo */\n seekTo(seconds: number, allowSeekAhead: boolean) {\n if (this._player) {\n this._player.seekTo(seconds, allowSeekAhead);\n } else {\n this._getPendingState().seek = {seconds, allowSeekAhead};\n }\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#mute */\n mute() {\n if (this._player) {\n this._player.mute();\n } else {\n this._getPendingState().muted = true;\n }\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#unMute */\n unMute() {\n if (this._player) {\n this._player.unMute();\n } else {\n this._getPendingState().muted = false;\n }\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#isMuted */\n isMuted(): boolean {\n if (this._player) {\n return this._player.isMuted();\n }\n\n if (this._pendingPlayerState) {\n return !!this._pendingPlayerState.muted;\n }\n\n return false;\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#setVolume */\n setVolume(volume: number) {\n if (this._player) {\n this._player.setVolume(volume);\n } else {\n this._getPendingState().volume = volume;\n }\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#getVolume */\n getVolume(): number {\n if (this._player) {\n return this._player.getVolume();\n }\n\n if (this._pendingPlayerState && this._pendingPlayerState.volume != null) {\n return this._pendingPlayerState.volume;\n }\n\n return 0;\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#setPlaybackRate */\n setPlaybackRate(playbackRate: number) {\n if (this._player) {\n return this._player.setPlaybackRate(playbackRate);\n } else {\n this._getPendingState().playbackRate = playbackRate;\n }\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#getPlaybackRate */\n getPlaybackRate(): number {\n if (this._player) {\n return this._player.getPlaybackRate();\n }\n\n if (this._pendingPlayerState && this._pendingPlayerState.playbackRate != null) {\n return this._pendingPlayerState.playbackRate;\n }\n\n return 0;\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#getAvailablePlaybackRates */\n getAvailablePlaybackRates(): number[] {\n return this._player ? this._player.getAvailablePlaybackRates() : [];\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#getVideoLoadedFraction */\n getVideoLoadedFraction(): number {\n return this._player ? this._player.getVideoLoadedFraction() : 0;\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#getPlayerState */\n getPlayerState(): YT.PlayerState | undefined {\n if (!this._isBrowser || !window.YT) {\n return undefined;\n }\n\n if (this._player) {\n return this._player.getPlayerState();\n }\n\n if (this._pendingPlayerState && this._pendingPlayerState.playbackState != null) {\n return this._pendingPlayerState.playbackState;\n }\n\n return YT.PlayerState.UNSTARTED;\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#getCurrentTime */\n getCurrentTime(): number {\n if (this._player) {\n return this._player.getCurrentTime();\n }\n\n if (this._pendingPlayerState && this._pendingPlayerState.seek) {\n return this._pendingPlayerState.seek.seconds;\n }\n\n return 0;\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#getPlaybackQuality */\n getPlaybackQuality(): YT.SuggestedVideoQuality {\n return this._player ? this._player.getPlaybackQuality() : 'default';\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#getAvailableQualityLevels */\n getAvailableQualityLevels(): YT.SuggestedVideoQuality[] {\n return this._player ? this._player.getAvailableQualityLevels() : [];\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#getDuration */\n getDuration(): number {\n return this._player ? this._player.getDuration() : 0;\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#getVideoUrl */\n getVideoUrl(): string {\n return this._player ? this._player.getVideoUrl() : '';\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#getVideoEmbedCode */\n getVideoEmbedCode(): string {\n return this._player ? this._player.getVideoEmbedCode() : '';\n }\n\n /**\n * Loads the YouTube API and sets up the player.\n * @param playVideo Whether to automatically play the video once the player is loaded.\n */\n protected _load(playVideo: boolean) {\n // Don't do anything if we're not in a browser environment.\n if (!this._isBrowser) {\n return;\n }\n\n if (!window.YT || !window.YT.Player) {\n if (this.loadApi) {\n this._isLoading = true;\n loadApi(this._nonce);\n } else if (this.showBeforeIframeApiLoads && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw new Error(\n 'Namespace YT not found, cannot construct embedded youtube player. ' +\n 'Please install the YouTube Player API Reference for iframe Embeds: ' +\n 'https://developers.google.com/youtube/iframe_api_reference',\n );\n }\n\n this._existingApiReadyCallback = window.onYouTubeIframeAPIReady;\n\n window.onYouTubeIframeAPIReady = () => {\n this._existingApiReadyCallback?.();\n this._ngZone.run(() => this._createPlayer(playVideo));\n };\n } else {\n this._createPlayer(playVideo);\n }\n }\n\n /** Loads the player depending on the internal state of the component. */\n private _conditionallyLoad() {\n // If the placeholder isn't shown anymore, we have to trigger a load.\n if (!this._shouldShowPlaceholder()) {\n this._load(false);\n } else if (this.playerVars?.autoplay === 1) {\n // If it's an autoplaying video, we have to hide the placeholder and start playing.\n this._load(true);\n }\n }\n\n /** Whether to show the placeholder element. */\n protected _shouldShowPlaceholder(): boolean {\n if (this.disablePlaceholder) {\n return false;\n }\n\n // Since we don't load the API on the server, we show the placeholder permanently.\n if (!this._isBrowser) {\n return true;\n }\n\n return this._hasPlaceholder && !!this.videoId && !this._player;\n }\n\n /** Gets an object that should be used to store the temporary API state. */\n private _getPendingState(): PendingPlayerState {\n if (!this._pendingPlayerState) {\n this._pendingPlayerState = {};\n }\n\n return this._pendingPlayerState;\n }\n\n /**\n * Determines whether a change in the component state\n * requires the YouTube player to be recreated.\n */\n private _shouldRecreatePlayer(changes: SimpleChanges): boolean {\n const change =\n changes['videoId'] ||\n changes['playerVars'] ||\n changes['disableCookies'] ||\n changes['disablePlaceholder'];\n return !!change && !change.isFirstChange();\n }\n\n /**\n * Creates a new YouTube player and destroys the existing one.\n * @param playVideo Whether to play the video once it loads.\n */\n private _createPlayer(playVideo: boolean) {\n this._player?.destroy();\n this._pendingPlayer?.destroy();\n\n // A player can't be created if the API isn't loaded,\n // or there isn't a video or playlist to be played.\n if (typeof YT === 'undefined' || (!this.videoId && !this.playerVars?.list)) {\n return;\n }\n\n // Important! We need to create the Player object outside of the `NgZone`, because it kicks\n // off a 250ms setInterval which will continually trigger change detection if we don't.\n const player = this._ngZone.runOutsideAngular(\n () =>\n new YT.Player(this.youtubeContainer.nativeElement, {\n videoId: this.videoId,\n host: this.disableCookies ? 'https://www.youtube-nocookie.com' : undefined,\n width: this.width,\n height: this.height,\n // Calling `playVideo` on load doesn't appear to actually play\n // the video so we need to trigger it through `playerVars` instead.\n playerVars: playVideo ? {...(this.playerVars || {}), autoplay: 1} : this.playerVars,\n }),\n );\n\n const whenReady = () => {\n // Only assign the player once it's ready, otherwise YouTube doesn't expose some APIs.\n this._ngZone.run(() => {\n this._isLoading = false;\n this._hasPlaceholder = false;\n this._player = player;\n this._pendingPlayer = undefined;\n player.removeEventListener('onReady', whenReady);\n this._playerChanges.next(player);\n this._setSize();\n this._setQuality();\n\n if (this._pendingPlayerState) {\n this._applyPendingPlayerState(player, this._pendingPlayerState);\n this._pendingPlayerState = undefined;\n }\n\n // Only cue the player when it either hasn't started yet or it's cued,\n // otherwise cuing it can interrupt a player with autoplay enabled.\n const state = player.getPlayerState();\n if (state === YT.PlayerState.UNSTARTED || state === YT.PlayerState.CUED || state == null) {\n this._cuePlayer();\n }\n\n this._changeDetectorRef.markForCheck();\n });\n };\n\n this._pendingPlayer = player;\n player.addEventListener('onReady', whenReady);\n }\n\n /** Applies any state that changed before the player was initialized. */\n private _applyPendingPlayerState(player: YT.Player, pendingState: PendingPlayerState): void {\n const {playbackState, playbackRate, volume, muted, seek} = pendingState;\n\n switch (playbackState) {\n case YT.PlayerState.PLAYING:\n player.playVideo();\n break;\n case YT.PlayerState.PAUSED:\n player.pauseVideo();\n break;\n case YT.PlayerState.CUED:\n player.stopVideo();\n break;\n }\n\n if (playbackRate != null) {\n player.setPlaybackRate(playbackRate);\n }\n\n if (volume != null) {\n player.setVolume(volume);\n }\n\n if (muted != null) {\n muted ? player.mute() : player.unMute();\n }\n\n if (seek != null) {\n player.seekTo(seek.seconds, seek.allowSeekAhead);\n }\n }\n\n /** Cues the player based on the current component state. */\n private _cuePlayer() {\n if (this._player && this.videoId) {\n this._player.cueVideoById({\n videoId: this.videoId,\n startSeconds: this.startSeconds,\n endSeconds: this.endSeconds,\n suggestedQuality: this.suggestedQuality,\n });\n }\n }\n\n /** Sets the player's size based on the current input values. */\n private _setSize() {\n this._player?.setSize(this.width, this.height);\n }\n\n /** Sets the player's quality based on the current input values. */\n private _setQuality() {\n if (this._player && this.suggestedQuality) {\n this._player.setPlaybackQuality(this.suggestedQuality);\n }\n }\n\n /** Gets an observable that adds an event listener to the player when a user subscribes to it. */\n private _getLazyEmitter<T extends YT.PlayerEvent>(name: keyof YT.Events): Observable<T> {\n // Start with the stream of players. This way the events will be transferred\n // over to the new player if it gets swapped out under-the-hood.\n return this._playerChanges.pipe(\n // Switch to the bound event. `switchMap` ensures that the old event is removed when the\n // player is changed. If there's no player, return an observable that never emits.\n switchMap(player => {\n return player\n ? fromEventPattern<T>(\n (listener: (event: T) => void) => {\n player.addEventListener(name, listener);\n },\n (listener: (event: T) => void) => {\n // The API seems to throw when we try to unbind from a destroyed player and it doesn't\n // expose whether the player has been destroyed so we have to wrap it in a try/catch to\n // prevent the entire stream from erroring out.\n try {\n player?.removeEventListener?.(name, listener);\n } catch {}\n },\n )\n : observableOf<T>();\n }),\n // By default we run all the API interactions outside the zone\n // so we have to bring the events back in manually when they emit.\n source =>\n new Observable<T>(observer =>\n source.subscribe({\n next: value => this._ngZone.run(() => observer.next(value)),\n error: error => observer.error(error),\n complete: () => observer.complete(),\n }),\n ),\n // Ensures that everything is cleared out on destroy.\n takeUntil(this._destroyed),\n );\n }\n}\n\nlet apiLoaded = false;\n\n/** Loads the YouTube API from a specified URL only once. */\nfunction loadApi(nonce: string | null): void {\n if (apiLoaded) {\n return;\n }\n\n // We can use `document` directly here, because this logic doesn't run outside the browser.\n const url = 'https://www.youtube.com/iframe_api';\n const script = document.createElement('script');\n const callback = (event: Event) => {\n script.removeEventListener('load', callback);\n script.removeEventListener('error', callback);\n\n if (event.type === 'error') {\n apiLoaded = false;\n\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.error(`Failed to load YouTube API from ${url}`);\n }\n }\n };\n script.addEventListener('load', callback);\n script.addEventListener('error', callback);\n (script as any).src = url;\n script.async = true;\n\n if (nonce) {\n script.nonce = nonce;\n }\n\n // Set this immediately to true so we don't start loading another script\n // while this one is pending. If loading fails, we'll flip it back to false.\n apiLoaded = true;\n document.body.appendChild(script);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {YouTubePlayer} from './youtube-player';\n\n@NgModule({\n imports: [YouTubePlayer],\n exports: [YouTubePlayer],\n})\nexport class YouTubePlayerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["observableOf"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"youtube-player.mjs","sources":["../../../../../../src/youtube-player/youtube-player-placeholder.ts","../../../../../../src/youtube-player/youtube-player.ts","../../../../../../src/youtube-player/youtube-module.ts","../../../../../../src/youtube-player/youtube-player_public_index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ChangeDetectionStrategy, Component, Input, ViewEncapsulation} from '@angular/core';\n\n/** Quality of the placeholder image. */\nexport type PlaceholderImageQuality = 'high' | 'standard' | 'low';\n\n@Component({\n selector: 'youtube-player-placeholder',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n <button type=\"button\" class=\"youtube-player-placeholder-button\" [attr.aria-label]=\"buttonLabel\">\n <svg\n height=\"100%\"\n version=\"1.1\"\n viewBox=\"0 0 68 48\"\n focusable=\"false\"\n aria-hidden=\"true\">\n <path d=\"M66.52,7.74c-0.78-2.93-2.49-5.41-5.42-6.19C55.79,.13,34,0,34,0S12.21,.13,6.9,1.55 C3.97,2.33,2.27,4.81,1.48,7.74C0.06,13.05,0,24,0,24s0.06,10.95,1.48,16.26c0.78,2.93,2.49,5.41,5.42,6.19 C12.21,47.87,34,48,34,48s21.79-0.13,27.1-1.55c2.93-0.78,4.64-3.26,5.42-6.19C67.94,34.95,68,24,68,24S67.94,13.05,66.52,7.74z\" fill=\"#f00\"></path>\n <path d=\"M 45,24 27,14 27,34\" fill=\"#fff\"></path>\n </svg>\n </button>\n `,\n standalone: true,\n styleUrl: 'youtube-player-placeholder.css',\n host: {\n 'class': 'youtube-player-placeholder',\n '[class.youtube-player-placeholder-loading]': 'isLoading',\n '[style.background-image]': '_getBackgroundImage()',\n '[style.width.px]': 'width',\n '[style.height.px]': 'height',\n },\n})\nexport class YouTubePlayerPlaceholder {\n /** ID of the video for which to show the placeholder. */\n @Input() videoId: string;\n\n /** Width of the video for which to show the placeholder. */\n @Input() width: number;\n\n /** Height of the video for which to show the placeholder. */\n @Input() height: number;\n\n /** Whether the video is currently being loaded. */\n @Input() isLoading: boolean;\n\n /** Accessible label for the play button. */\n @Input() buttonLabel: string;\n\n /** Quality of the placeholder image. */\n @Input() quality: PlaceholderImageQuality;\n\n /** Gets the background image showing the placeholder. */\n protected _getBackgroundImage(): string | undefined {\n let url: string;\n\n if (this.quality === 'low') {\n url = `https://i.ytimg.com/vi/${this.videoId}/hqdefault.jpg`;\n } else if (this.quality === 'high') {\n url = `https://i.ytimg.com/vi/${this.videoId}/maxresdefault.jpg`;\n } else {\n url = `https://i.ytimg.com/vi_webp/${this.videoId}/sddefault.webp`;\n }\n\n return `url(${url})`;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/// <reference types=\"youtube\" />\n\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n NgZone,\n OnDestroy,\n Output,\n ViewChild,\n ViewEncapsulation,\n Inject,\n PLATFORM_ID,\n OnChanges,\n SimpleChanges,\n booleanAttribute,\n numberAttribute,\n InjectionToken,\n inject,\n CSP_NONCE,\n ChangeDetectorRef,\n AfterViewInit,\n} from '@angular/core';\nimport {isPlatformBrowser} from '@angular/common';\nimport {Observable, of as observableOf, Subject, BehaviorSubject, fromEventPattern} from 'rxjs';\nimport {takeUntil, switchMap} from 'rxjs/operators';\nimport {PlaceholderImageQuality, YouTubePlayerPlaceholder} from './youtube-player-placeholder';\n\ndeclare global {\n interface Window {\n YT: typeof YT | undefined;\n onYouTubeIframeAPIReady: (() => void) | undefined;\n }\n}\n\n/** Injection token used to configure the `YouTubePlayer`. */\nexport const YOUTUBE_PLAYER_CONFIG = new InjectionToken<YouTubePlayerConfig>(\n 'YOUTUBE_PLAYER_CONFIG',\n);\n\n/** Object that can be used to configure the `YouTubePlayer`. */\nexport interface YouTubePlayerConfig {\n /** Whether to load the YouTube iframe API automatically. Defaults to `true`. */\n loadApi?: boolean;\n\n /**\n * By default the player shows a placeholder image instead of loading the YouTube API which\n * improves the initial page load performance. Use this option to disable the placeholder loading\n * behavior globally. Defaults to `false`.\n */\n disablePlaceholder?: boolean;\n\n /** Accessible label for the play button inside of the placeholder. */\n placeholderButtonLabel?: string;\n\n /**\n * Quality of the displayed placeholder image. Defaults to `standard`,\n * because not all video have a high-quality placeholder.\n */\n placeholderImageQuality?: PlaceholderImageQuality;\n}\n\nexport const DEFAULT_PLAYER_WIDTH = 640;\nexport const DEFAULT_PLAYER_HEIGHT = 390;\n\n/**\n * Object used to store the state of the player if the\n * user tries to interact with the API before it has been loaded.\n */\ninterface PendingPlayerState {\n playbackState?: YT.PlayerState.PLAYING | YT.PlayerState.PAUSED | YT.PlayerState.CUED;\n playbackRate?: number;\n volume?: number;\n muted?: boolean;\n seek?: {seconds: number; allowSeekAhead: boolean};\n}\n\n/** Coercion function for time values. */\nfunction coerceTime(value: number | undefined): number | undefined {\n return value == null ? value : numberAttribute(value, 0);\n}\n\n/**\n * Angular component that renders a YouTube player via the YouTube player\n * iframe API.\n * @see https://developers.google.com/youtube/iframe_api_reference\n */\n@Component({\n selector: 'youtube-player',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [YouTubePlayerPlaceholder],\n template: `\n @if (_shouldShowPlaceholder()) {\n <youtube-player-placeholder\n [videoId]=\"videoId!\"\n [width]=\"width\"\n [height]=\"height\"\n [isLoading]=\"_isLoading\"\n [buttonLabel]=\"placeholderButtonLabel\"\n [quality]=\"placeholderImageQuality\"\n (click)=\"_load(true)\"/>\n }\n <div [style.display]=\"_shouldShowPlaceholder() ? 'none' : ''\">\n <div #youtubeContainer></div>\n </div>\n `,\n})\nexport class YouTubePlayer implements AfterViewInit, OnChanges, OnDestroy {\n /** Whether we're currently rendering inside a browser. */\n private readonly _isBrowser: boolean;\n private _player: YT.Player | undefined;\n private _pendingPlayer: YT.Player | undefined;\n private _existingApiReadyCallback: (() => void) | undefined;\n private _pendingPlayerState: PendingPlayerState | undefined;\n private readonly _destroyed = new Subject<void>();\n private readonly _playerChanges = new BehaviorSubject<YT.Player | undefined>(undefined);\n private readonly _nonce = inject(CSP_NONCE, {optional: true});\n private readonly _changeDetectorRef = inject(ChangeDetectorRef);\n protected _isLoading = false;\n protected _hasPlaceholder = true;\n\n /** YouTube Video ID to view */\n @Input()\n videoId: string | undefined;\n\n /** Height of video player */\n @Input({transform: numberAttribute})\n get height(): number {\n return this._height;\n }\n set height(height: number | undefined) {\n this._height = height == null || isNaN(height) ? DEFAULT_PLAYER_HEIGHT : height;\n }\n private _height = DEFAULT_PLAYER_HEIGHT;\n\n /** Width of video player */\n @Input({transform: numberAttribute})\n get width(): number {\n return this._width;\n }\n set width(width: number | undefined) {\n this._width = width == null || isNaN(width) ? DEFAULT_PLAYER_WIDTH : width;\n }\n private _width = DEFAULT_PLAYER_WIDTH;\n\n /** The moment when the player is supposed to start playing */\n @Input({transform: coerceTime})\n startSeconds: number | undefined;\n\n /** The moment when the player is supposed to stop playing */\n @Input({transform: coerceTime})\n endSeconds: number | undefined;\n\n /** The suggested quality of the player */\n @Input()\n suggestedQuality: YT.SuggestedVideoQuality | undefined;\n\n /**\n * Extra parameters used to configure the player. See:\n * https://developers.google.com/youtube/player_parameters.html?playerVersion=HTML5#Parameters\n */\n @Input()\n playerVars: YT.PlayerVars | undefined;\n\n /** Whether cookies inside the player have been disabled. */\n @Input({transform: booleanAttribute})\n disableCookies: boolean = false;\n\n /** Whether to automatically load the YouTube iframe API. Defaults to `true`. */\n @Input({transform: booleanAttribute})\n loadApi: boolean;\n\n /**\n * By default the player shows a placeholder image instead of loading the YouTube API which\n * improves the initial page load performance. This input allows for the behavior to be disabled.\n */\n @Input({transform: booleanAttribute})\n disablePlaceholder: boolean = false;\n\n /**\n * Whether the iframe will attempt to load regardless of the status of the api on the\n * page. Set this to true if you don't want the `onYouTubeIframeAPIReady` field to be\n * set on the global window.\n */\n @Input({transform: booleanAttribute}) showBeforeIframeApiLoads: boolean = false;\n\n /** Accessible label for the play button inside of the placeholder. */\n @Input() placeholderButtonLabel: string;\n\n /**\n * Quality of the displayed placeholder image. Defaults to `standard`,\n * because not all video have a high-quality placeholder.\n */\n @Input() placeholderImageQuality: PlaceholderImageQuality;\n\n /** Outputs are direct proxies from the player itself. */\n @Output() readonly ready: Observable<YT.PlayerEvent> =\n this._getLazyEmitter<YT.PlayerEvent>('onReady');\n\n @Output() readonly stateChange: Observable<YT.OnStateChangeEvent> =\n this._getLazyEmitter<YT.OnStateChangeEvent>('onStateChange');\n\n @Output() readonly error: Observable<YT.OnErrorEvent> =\n this._getLazyEmitter<YT.OnErrorEvent>('onError');\n\n @Output() readonly apiChange: Observable<YT.PlayerEvent> =\n this._getLazyEmitter<YT.PlayerEvent>('onApiChange');\n\n @Output() readonly playbackQualityChange: Observable<YT.OnPlaybackQualityChangeEvent> =\n this._getLazyEmitter<YT.OnPlaybackQualityChangeEvent>('onPlaybackQualityChange');\n\n @Output() readonly playbackRateChange: Observable<YT.OnPlaybackRateChangeEvent> =\n this._getLazyEmitter<YT.OnPlaybackRateChangeEvent>('onPlaybackRateChange');\n\n /** The element that will be replaced by the iframe. */\n @ViewChild('youtubeContainer', {static: true})\n youtubeContainer: ElementRef<HTMLElement>;\n\n constructor(\n private _ngZone: NgZone,\n @Inject(PLATFORM_ID) platformId: Object,\n ) {\n const config = inject(YOUTUBE_PLAYER_CONFIG, {optional: true});\n this.loadApi = config?.loadApi ?? true;\n this.disablePlaceholder = !!config?.disablePlaceholder;\n this.placeholderButtonLabel = config?.placeholderButtonLabel || 'Play video';\n this.placeholderImageQuality = config?.placeholderImageQuality || 'standard';\n this._isBrowser = isPlatformBrowser(platformId);\n }\n\n ngAfterViewInit() {\n this._conditionallyLoad();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this._shouldRecreatePlayer(changes)) {\n this._conditionallyLoad();\n } else if (this._player) {\n if (changes['width'] || changes['height']) {\n this._setSize();\n }\n\n if (changes['suggestedQuality']) {\n this._setQuality();\n }\n\n if (changes['startSeconds'] || changes['endSeconds'] || changes['suggestedQuality']) {\n this._cuePlayer();\n }\n }\n }\n\n ngOnDestroy() {\n this._pendingPlayer?.destroy();\n\n if (this._player) {\n this._player.destroy();\n window.onYouTubeIframeAPIReady = this._existingApiReadyCallback;\n }\n\n this._playerChanges.complete();\n this._destroyed.next();\n this._destroyed.complete();\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#playVideo */\n playVideo() {\n if (this._player) {\n this._player.playVideo();\n } else {\n this._getPendingState().playbackState = YT.PlayerState.PLAYING;\n }\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#pauseVideo */\n pauseVideo() {\n if (this._player) {\n this._player.pauseVideo();\n } else {\n this._getPendingState().playbackState = YT.PlayerState.PAUSED;\n }\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#stopVideo */\n stopVideo() {\n if (this._player) {\n this._player.stopVideo();\n } else {\n // It seems like YouTube sets the player to CUED when it's stopped.\n this._getPendingState().playbackState = YT.PlayerState.CUED;\n }\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#seekTo */\n seekTo(seconds: number, allowSeekAhead: boolean) {\n if (this._player) {\n this._player.seekTo(seconds, allowSeekAhead);\n } else {\n this._getPendingState().seek = {seconds, allowSeekAhead};\n }\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#mute */\n mute() {\n if (this._player) {\n this._player.mute();\n } else {\n this._getPendingState().muted = true;\n }\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#unMute */\n unMute() {\n if (this._player) {\n this._player.unMute();\n } else {\n this._getPendingState().muted = false;\n }\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#isMuted */\n isMuted(): boolean {\n if (this._player) {\n return this._player.isMuted();\n }\n\n if (this._pendingPlayerState) {\n return !!this._pendingPlayerState.muted;\n }\n\n return false;\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#setVolume */\n setVolume(volume: number) {\n if (this._player) {\n this._player.setVolume(volume);\n } else {\n this._getPendingState().volume = volume;\n }\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#getVolume */\n getVolume(): number {\n if (this._player) {\n return this._player.getVolume();\n }\n\n if (this._pendingPlayerState && this._pendingPlayerState.volume != null) {\n return this._pendingPlayerState.volume;\n }\n\n return 0;\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#setPlaybackRate */\n setPlaybackRate(playbackRate: number) {\n if (this._player) {\n return this._player.setPlaybackRate(playbackRate);\n } else {\n this._getPendingState().playbackRate = playbackRate;\n }\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#getPlaybackRate */\n getPlaybackRate(): number {\n if (this._player) {\n return this._player.getPlaybackRate();\n }\n\n if (this._pendingPlayerState && this._pendingPlayerState.playbackRate != null) {\n return this._pendingPlayerState.playbackRate;\n }\n\n return 0;\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#getAvailablePlaybackRates */\n getAvailablePlaybackRates(): number[] {\n return this._player ? this._player.getAvailablePlaybackRates() : [];\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#getVideoLoadedFraction */\n getVideoLoadedFraction(): number {\n return this._player ? this._player.getVideoLoadedFraction() : 0;\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#getPlayerState */\n getPlayerState(): YT.PlayerState | undefined {\n if (!this._isBrowser || !window.YT) {\n return undefined;\n }\n\n if (this._player) {\n return this._player.getPlayerState();\n }\n\n if (this._pendingPlayerState && this._pendingPlayerState.playbackState != null) {\n return this._pendingPlayerState.playbackState;\n }\n\n return YT.PlayerState.UNSTARTED;\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#getCurrentTime */\n getCurrentTime(): number {\n if (this._player) {\n return this._player.getCurrentTime();\n }\n\n if (this._pendingPlayerState && this._pendingPlayerState.seek) {\n return this._pendingPlayerState.seek.seconds;\n }\n\n return 0;\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#getPlaybackQuality */\n getPlaybackQuality(): YT.SuggestedVideoQuality {\n return this._player ? this._player.getPlaybackQuality() : 'default';\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#getAvailableQualityLevels */\n getAvailableQualityLevels(): YT.SuggestedVideoQuality[] {\n return this._player ? this._player.getAvailableQualityLevels() : [];\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#getDuration */\n getDuration(): number {\n return this._player ? this._player.getDuration() : 0;\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#getVideoUrl */\n getVideoUrl(): string {\n return this._player ? this._player.getVideoUrl() : '';\n }\n\n /** See https://developers.google.com/youtube/iframe_api_reference#getVideoEmbedCode */\n getVideoEmbedCode(): string {\n return this._player ? this._player.getVideoEmbedCode() : '';\n }\n\n /**\n * Loads the YouTube API and sets up the player.\n * @param playVideo Whether to automatically play the video once the player is loaded.\n */\n protected _load(playVideo: boolean) {\n // Don't do anything if we're not in a browser environment.\n if (!this._isBrowser) {\n return;\n }\n\n if (!window.YT || !window.YT.Player) {\n if (this.loadApi) {\n this._isLoading = true;\n loadApi(this._nonce);\n } else if (this.showBeforeIframeApiLoads && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw new Error(\n 'Namespace YT not found, cannot construct embedded youtube player. ' +\n 'Please install the YouTube Player API Reference for iframe Embeds: ' +\n 'https://developers.google.com/youtube/iframe_api_reference',\n );\n }\n\n this._existingApiReadyCallback = window.onYouTubeIframeAPIReady;\n\n window.onYouTubeIframeAPIReady = () => {\n this._existingApiReadyCallback?.();\n this._ngZone.run(() => this._createPlayer(playVideo));\n };\n } else {\n this._createPlayer(playVideo);\n }\n }\n\n /** Loads the player depending on the internal state of the component. */\n private _conditionallyLoad() {\n // If the placeholder isn't shown anymore, we have to trigger a load.\n if (!this._shouldShowPlaceholder()) {\n this._load(false);\n } else if (this.playerVars?.autoplay === 1) {\n // If it's an autoplaying video, we have to hide the placeholder and start playing.\n this._load(true);\n }\n }\n\n /** Whether to show the placeholder element. */\n protected _shouldShowPlaceholder(): boolean {\n if (this.disablePlaceholder) {\n return false;\n }\n\n // Since we don't load the API on the server, we show the placeholder permanently.\n if (!this._isBrowser) {\n return true;\n }\n\n return this._hasPlaceholder && !!this.videoId && !this._player;\n }\n\n /** Gets an object that should be used to store the temporary API state. */\n private _getPendingState(): PendingPlayerState {\n if (!this._pendingPlayerState) {\n this._pendingPlayerState = {};\n }\n\n return this._pendingPlayerState;\n }\n\n /**\n * Determines whether a change in the component state\n * requires the YouTube player to be recreated.\n */\n private _shouldRecreatePlayer(changes: SimpleChanges): boolean {\n const change =\n changes['videoId'] ||\n changes['playerVars'] ||\n changes['disableCookies'] ||\n changes['disablePlaceholder'];\n return !!change && !change.isFirstChange();\n }\n\n /**\n * Creates a new YouTube player and destroys the existing one.\n * @param playVideo Whether to play the video once it loads.\n */\n private _createPlayer(playVideo: boolean) {\n this._player?.destroy();\n this._pendingPlayer?.destroy();\n\n // A player can't be created if the API isn't loaded,\n // or there isn't a video or playlist to be played.\n if (typeof YT === 'undefined' || (!this.videoId && !this.playerVars?.list)) {\n return;\n }\n\n // Important! We need to create the Player object outside of the `NgZone`, because it kicks\n // off a 250ms setInterval which will continually trigger change detection if we don't.\n const player = this._ngZone.runOutsideAngular(\n () =>\n new YT.Player(this.youtubeContainer.nativeElement, {\n videoId: this.videoId,\n host: this.disableCookies ? 'https://www.youtube-nocookie.com' : undefined,\n width: this.width,\n height: this.height,\n // Calling `playVideo` on load doesn't appear to actually play\n // the video so we need to trigger it through `playerVars` instead.\n playerVars: playVideo ? {...(this.playerVars || {}), autoplay: 1} : this.playerVars,\n }),\n );\n\n const whenReady = () => {\n // Only assign the player once it's ready, otherwise YouTube doesn't expose some APIs.\n this._ngZone.run(() => {\n this._isLoading = false;\n this._hasPlaceholder = false;\n this._player = player;\n this._pendingPlayer = undefined;\n player.removeEventListener('onReady', whenReady);\n this._playerChanges.next(player);\n this._setSize();\n this._setQuality();\n\n if (this._pendingPlayerState) {\n this._applyPendingPlayerState(player, this._pendingPlayerState);\n this._pendingPlayerState = undefined;\n }\n\n // Only cue the player when it either hasn't started yet or it's cued,\n // otherwise cuing it can interrupt a player with autoplay enabled.\n const state = player.getPlayerState();\n if (state === YT.PlayerState.UNSTARTED || state === YT.PlayerState.CUED || state == null) {\n this._cuePlayer();\n }\n\n this._changeDetectorRef.markForCheck();\n });\n };\n\n this._pendingPlayer = player;\n player.addEventListener('onReady', whenReady);\n }\n\n /** Applies any state that changed before the player was initialized. */\n private _applyPendingPlayerState(player: YT.Player, pendingState: PendingPlayerState): void {\n const {playbackState, playbackRate, volume, muted, seek} = pendingState;\n\n switch (playbackState) {\n case YT.PlayerState.PLAYING:\n player.playVideo();\n break;\n case YT.PlayerState.PAUSED:\n player.pauseVideo();\n break;\n case YT.PlayerState.CUED:\n player.stopVideo();\n break;\n }\n\n if (playbackRate != null) {\n player.setPlaybackRate(playbackRate);\n }\n\n if (volume != null) {\n player.setVolume(volume);\n }\n\n if (muted != null) {\n muted ? player.mute() : player.unMute();\n }\n\n if (seek != null) {\n player.seekTo(seek.seconds, seek.allowSeekAhead);\n }\n }\n\n /** Cues the player based on the current component state. */\n private _cuePlayer() {\n if (this._player && this.videoId) {\n this._player.cueVideoById({\n videoId: this.videoId,\n startSeconds: this.startSeconds,\n endSeconds: this.endSeconds,\n suggestedQuality: this.suggestedQuality,\n });\n }\n }\n\n /** Sets the player's size based on the current input values. */\n private _setSize() {\n this._player?.setSize(this.width, this.height);\n }\n\n /** Sets the player's quality based on the current input values. */\n private _setQuality() {\n if (this._player && this.suggestedQuality) {\n this._player.setPlaybackQuality(this.suggestedQuality);\n }\n }\n\n /** Gets an observable that adds an event listener to the player when a user subscribes to it. */\n private _getLazyEmitter<T extends YT.PlayerEvent>(name: keyof YT.Events): Observable<T> {\n // Start with the stream of players. This way the events will be transferred\n // over to the new player if it gets swapped out under-the-hood.\n return this._playerChanges.pipe(\n // Switch to the bound event. `switchMap` ensures that the old event is removed when the\n // player is changed. If there's no player, return an observable that never emits.\n switchMap(player => {\n return player\n ? fromEventPattern<T>(\n (listener: (event: T) => void) => {\n player.addEventListener(name, listener);\n },\n (listener: (event: T) => void) => {\n // The API seems to throw when we try to unbind from a destroyed player and it doesn't\n // expose whether the player has been destroyed so we have to wrap it in a try/catch to\n // prevent the entire stream from erroring out.\n try {\n player?.removeEventListener?.(name, listener);\n } catch {}\n },\n )\n : observableOf<T>();\n }),\n // By default we run all the API interactions outside the zone\n // so we have to bring the events back in manually when they emit.\n source =>\n new Observable<T>(observer =>\n source.subscribe({\n next: value => this._ngZone.run(() => observer.next(value)),\n error: error => observer.error(error),\n complete: () => observer.complete(),\n }),\n ),\n // Ensures that everything is cleared out on destroy.\n takeUntil(this._destroyed),\n );\n }\n}\n\nlet apiLoaded = false;\n\n/** Loads the YouTube API from a specified URL only once. */\nfunction loadApi(nonce: string | null): void {\n if (apiLoaded) {\n return;\n }\n\n // We can use `document` directly here, because this logic doesn't run outside the browser.\n const url = 'https://www.youtube.com/iframe_api';\n const script = document.createElement('script');\n const callback = (event: Event) => {\n script.removeEventListener('load', callback);\n script.removeEventListener('error', callback);\n\n if (event.type === 'error') {\n apiLoaded = false;\n\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.error(`Failed to load YouTube API from ${url}`);\n }\n }\n };\n script.addEventListener('load', callback);\n script.addEventListener('error', callback);\n (script as any).src = url;\n script.async = true;\n\n if (nonce) {\n script.nonce = nonce;\n }\n\n // Set this immediately to true so we don't start loading another script\n // while this one is pending. If loading fails, we'll flip it back to false.\n apiLoaded = true;\n document.body.appendChild(script);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {YouTubePlayer} from './youtube-player';\n\n@NgModule({\n imports: [YouTubePlayer],\n exports: [YouTubePlayer],\n})\nexport class YouTubePlayerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["observableOf"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@angular/youtube-player",
|
|
3
|
-
"version": "17.1.0-next.
|
|
3
|
+
"version": "17.1.0-next.2",
|
|
4
4
|
"description": "Angular YouTube Player",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
"rxjs": "^6.5.3 || ^7.4.0"
|
|
27
27
|
},
|
|
28
28
|
"sideEffects": false,
|
|
29
|
+
"schematics": "./schematics/collection.json",
|
|
29
30
|
"ng-update": {},
|
|
30
31
|
"module": "./fesm2022/youtube-player.mjs",
|
|
31
32
|
"typings": "./index.d.ts",
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
import { Rule } from '@angular-devkit/schematics';
|
|
9
|
+
export default function (): Rule;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright Google LLC All Rights Reserved.
|
|
5
|
+
*
|
|
6
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
+
* found in the LICENSE file at https://angular.io/license
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
function default_1() {
|
|
11
|
+
// Noop schematic so the CLI doesn't throw if users try to `ng add` this package.
|
|
12
|
+
// Also allows us to add more functionality in the future.
|
|
13
|
+
return () => { };
|
|
14
|
+
}
|
|
15
|
+
exports.default = default_1;
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMveW91dHViZS1wbGF5ZXIvc2NoZW1hdGljcy9uZy1hZGQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7QUFJSDtJQUNFLGlGQUFpRjtJQUNqRiwwREFBMEQ7SUFDMUQsT0FBTyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7QUFDbEIsQ0FBQztBQUpELDRCQUlDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7UnVsZX0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L3NjaGVtYXRpY3MnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKTogUnVsZSB7XG4gIC8vIE5vb3Agc2NoZW1hdGljIHNvIHRoZSBDTEkgZG9lc24ndCB0aHJvdyBpZiB1c2VycyB0cnkgdG8gYG5nIGFkZGAgdGhpcyBwYWNrYWdlLlxuICAvLyBBbHNvIGFsbG93cyB1cyB0byBhZGQgbW9yZSBmdW5jdGlvbmFsaXR5IGluIHRoZSBmdXR1cmUuXG4gIHJldHVybiAoKSA9PiB7fTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright Google LLC All Rights Reserved.
|
|
5
|
+
*
|
|
6
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
+
* found in the LICENSE file at https://angular.io/license
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
function default_1() {
|
|
11
|
+
// Noop schematic so the CLI doesn't throw if users try to `ng add` this package.
|
|
12
|
+
// Also allows us to add more functionality in the future.
|
|
13
|
+
return () => { };
|
|
14
|
+
}
|
|
15
|
+
exports.default = default_1;
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMveW91dHViZS1wbGF5ZXIvc2NoZW1hdGljcy9uZy1hZGQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7QUFJSDtJQUNFLGlGQUFpRjtJQUNqRiwwREFBMEQ7SUFDMUQsT0FBTyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7QUFDbEIsQ0FBQztBQUpELDRCQUlDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7UnVsZX0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L3NjaGVtYXRpY3MnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKTogUnVsZSB7XG4gIC8vIE5vb3Agc2NoZW1hdGljIHNvIHRoZSBDTEkgZG9lc24ndCB0aHJvdyBpZiB1c2VycyB0cnkgdG8gYG5nIGFkZGAgdGhpcyBwYWNrYWdlLlxuICAvLyBBbHNvIGFsbG93cyB1cyB0byBhZGQgbW9yZSBmdW5jdGlvbmFsaXR5IGluIHRoZSBmdXR1cmUuXG4gIHJldHVybiAoKSA9PiB7fTtcbn1cbiJdfQ==
|
|
File without changes
|