@gcorevideo/player 2.30.1 → 2.30.3
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/assets/audio-tracks/template.ejs +1 -1
- package/dist/core.js +1 -1
- package/dist/index.css +335 -335
- package/dist/index.embed.js +43 -13
- package/dist/index.js +69 -32
- package/lib/plugins/audio-selector/AudioTracks.d.ts +4 -0
- package/lib/plugins/audio-selector/AudioTracks.d.ts.map +1 -1
- package/lib/plugins/audio-selector/AudioTracks.js +42 -12
- package/lib/plugins/media-control/MediaControl.d.ts +1 -0
- package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
- package/lib/plugins/media-control/MediaControl.js +9 -1
- package/package.json +1 -1
- package/src/plugins/audio-selector/AudioTracks.ts +51 -16
- package/src/plugins/audio-selector/__tests__/__snapshots__/AudioTracks.test.ts.snap +9 -9
- package/src/plugins/media-control/MediaControl.ts +10 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/assets/vast-ads/style.scss +0 -112
- package/lib/plugins/vast-ads/VastAds.d.ts +0 -74
- package/lib/plugins/vast-ads/VastAds.d.ts.map +0 -1
- package/lib/plugins/vast-ads/VastAds.js +0 -693
- package/lib/plugins/vast-ads/loaderxml.d.ts +0 -32
- package/lib/plugins/vast-ads/loaderxml.d.ts.map +0 -1
- package/lib/plugins/vast-ads/loaderxml.js +0 -229
- package/lib/plugins/vast-ads/roll.d.ts +0 -60
- package/lib/plugins/vast-ads/roll.d.ts.map +0 -1
- package/lib/plugins/vast-ads/roll.js +0 -421
- package/lib/plugins/vast-ads/rollmanager.d.ts +0 -62
- package/lib/plugins/vast-ads/rollmanager.d.ts.map +0 -1
- package/lib/plugins/vast-ads/rollmanager.js +0 -357
- package/lib/plugins/vast-ads/sctemanager.d.ts +0 -18
- package/lib/plugins/vast-ads/sctemanager.d.ts.map +0 -1
- package/lib/plugins/vast-ads/sctemanager.js +0 -117
- package/lib/plugins/vast-ads/types.d.ts +0 -12
- package/lib/plugins/vast-ads/types.d.ts.map +0 -1
- package/lib/plugins/vast-ads/types.js +0 -1
- package/lib/plugins/vast-ads/urlhandler.d.ts +0 -4
- package/lib/plugins/vast-ads/urlhandler.d.ts.map +0 -1
- package/lib/plugins/vast-ads/urlhandler.js +0 -30
- package/lib/plugins/vast-ads/xmlhttprequest.d.ts +0 -6
- package/lib/plugins/vast-ads/xmlhttprequest.d.ts.map +0 -1
- package/lib/plugins/vast-ads/xmlhttprequest.js +0 -40
- package/lib/plugins/vast-ads/xmlmerge.d.ts +0 -12
- package/lib/plugins/vast-ads/xmlmerge.d.ts.map +0 -1
- package/lib/plugins/vast-ads/xmlmerge.js +0 -83
- package/src/plugins/vast-ads/VastAds.ts +0 -919
- package/src/plugins/vast-ads/loaderxml.ts +0 -301
- package/src/plugins/vast-ads/roll.ts +0 -590
- package/src/plugins/vast-ads/rollmanager.ts +0 -447
- package/src/plugins/vast-ads/sctemanager.ts +0 -152
- package/src/plugins/vast-ads/types.ts +0 -20
- package/src/plugins/vast-ads/urlhandler.ts +0 -42
- package/src/plugins/vast-ads/xmlhttprequest.ts +0 -49
- package/src/plugins/vast-ads/xmlmerge.ts +0 -106
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
export default class LoaderXML {
|
|
2
|
-
private url;
|
|
3
|
-
private config;
|
|
4
|
-
constructor(url: string);
|
|
5
|
-
startLoad(): Promise<{
|
|
6
|
-
url: string;
|
|
7
|
-
}>;
|
|
8
|
-
parse(url: string, parentURLs: string | string[] | null, options: any, cb?: (response: any | null, err: any) => void): void;
|
|
9
|
-
_isGoogle(url: string): boolean;
|
|
10
|
-
parseXmlDocument(url: string, parentURLs: string | string[] | null, options: any, xml: any, cb: (response: any, err?: any) => void): void;
|
|
11
|
-
clickUrls(): {
|
|
12
|
-
clickTrackings: string[];
|
|
13
|
-
clickThrough: string;
|
|
14
|
-
};
|
|
15
|
-
timeSkipOffset(): {
|
|
16
|
-
skipEvents: string[];
|
|
17
|
-
progressEvents: string[];
|
|
18
|
-
timeOffset: number;
|
|
19
|
-
};
|
|
20
|
-
getExtension(): {
|
|
21
|
-
controls?: string;
|
|
22
|
-
isClickable?: string;
|
|
23
|
-
} & Record<string, string>;
|
|
24
|
-
getExtensionNode(node: Element): string;
|
|
25
|
-
getWrapperUrl(): string;
|
|
26
|
-
getTag(name: string, attr?: string): string[] | null;
|
|
27
|
-
getUrls(tag: string, attr?: string): string[];
|
|
28
|
-
parseXML(val: string): XMLDocument | null;
|
|
29
|
-
removeTag(name: string, attr?: string): void;
|
|
30
|
-
extendXML(xml: string): void;
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=loaderxml.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loaderxml.d.ts","sourceRoot":"","sources":["../../../src/plugins/vast-ads/loaderxml.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,OAAO,OAAO,SAAS;IAGhB,OAAO,CAAC,GAAG;IAFvB,OAAO,CAAC,MAAM,CAAa;gBAEP,GAAG,EAAE,MAAM;IAEzB,SAAS;aACa,MAAM;;IAelC,KAAK,CACH,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,EACpC,OAAO,EAAE,GAAG,EACZ,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI;IAwB/C,SAAS,CAAC,GAAG,EAAE,MAAM;IAQrB,gBAAgB,CACd,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,EACpC,OAAO,EAAE,GAAG,EACZ,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,IAAI;IAyBxC,SAAS;;;;IAYT,cAAc;;;;;IA2Bd,YAAY;mBASiB,MAAM;sBAAgB,MAAM;;IAqDzD,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM;IASvC,aAAa;IAQb,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAcpD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IA+B7C,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAkBzC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;IAWrC,SAAS,CAAC,GAAG,EAAE,MAAM;CAetB"}
|
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
import { reportError } from '@gcorevideo/utils';
|
|
2
|
-
import assert from 'assert';
|
|
3
|
-
import URLHandler from './urlhandler.js';
|
|
4
|
-
import MergeVast from './xmlmerge.js';
|
|
5
|
-
import { parseClipTime } from '../utils.js';
|
|
6
|
-
export default class LoaderXML {
|
|
7
|
-
url;
|
|
8
|
-
config = '';
|
|
9
|
-
constructor(url) {
|
|
10
|
-
this.url = url;
|
|
11
|
-
}
|
|
12
|
-
async startLoad() {
|
|
13
|
-
return new Promise((resolve, reject) => {
|
|
14
|
-
if (this._isGoogle(this.url)) {
|
|
15
|
-
resolve({ url: this.url });
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
this.parse(this.url, null, {}, (response, err) => {
|
|
19
|
-
if (err) {
|
|
20
|
-
reject(err);
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
resolve(response);
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
parse(url, parentURLs, options, cb) {
|
|
30
|
-
// Options param can be skipped
|
|
31
|
-
if (!cb) {
|
|
32
|
-
if (typeof options === 'function') {
|
|
33
|
-
cb = options;
|
|
34
|
-
}
|
|
35
|
-
options = {};
|
|
36
|
-
}
|
|
37
|
-
options.withCredentials = !this._isGoogle(url);
|
|
38
|
-
options.timeout = 2000;
|
|
39
|
-
assert(cb);
|
|
40
|
-
URLHandler.get(url, options, (err, xml) => {
|
|
41
|
-
if (err) {
|
|
42
|
-
return cb(null, err);
|
|
43
|
-
}
|
|
44
|
-
return this.parseXmlDocument(url, parentURLs, options, xml, cb);
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
_isGoogle(url) {
|
|
48
|
-
return (url.indexOf('g.doubleclick.net') > -1 ||
|
|
49
|
-
url.indexOf('ima3vpaid.appspot') > -1 ||
|
|
50
|
-
url.indexOf('an.facebook.com') > -1);
|
|
51
|
-
}
|
|
52
|
-
parseXmlDocument(url, parentURLs, options, xml, cb) {
|
|
53
|
-
if (xml.indexOf('Wrapper')) {
|
|
54
|
-
xml = xml.replace(/Wrapper/g, 'InLine');
|
|
55
|
-
}
|
|
56
|
-
this.extendXML(xml);
|
|
57
|
-
const vastAdTagUri = this.getWrapperUrl();
|
|
58
|
-
if (vastAdTagUri) {
|
|
59
|
-
this.parse(vastAdTagUri, url, options, cb);
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
const ext = this.getExtension();
|
|
63
|
-
const skipTime = this.timeSkipOffset();
|
|
64
|
-
const clickUrls = this.clickUrls();
|
|
65
|
-
const url = { config: this.config };
|
|
66
|
-
if (this.config.indexOf('<MediaFile') > -1) {
|
|
67
|
-
cb(Object.assign(url, ext, skipTime, clickUrls));
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
cb(null, { error: 'nobanner' });
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
clickUrls() {
|
|
75
|
-
const clickTrackings = this.getUrls('ClickTracking') || [];
|
|
76
|
-
const clickThrough = this.getUrls('ClickThrough').length > 0
|
|
77
|
-
? this.getUrls('ClickThrough')[0]
|
|
78
|
-
: '';
|
|
79
|
-
this.removeTag('ClickThrough');
|
|
80
|
-
return { clickTrackings, clickThrough };
|
|
81
|
-
}
|
|
82
|
-
timeSkipOffset() {
|
|
83
|
-
const skipEvents = this.getUrls('Tracking', 'event="skip"');
|
|
84
|
-
const progressEvents = this.getUrls('Tracking', 'event="progress"');
|
|
85
|
-
const linearSkipOffset = this.config.match(/skipoffset="(\d+:\d+:\d+){1}"/);
|
|
86
|
-
let timeOffset = -1;
|
|
87
|
-
if (skipEvents.length > 0) {
|
|
88
|
-
timeOffset = 5;
|
|
89
|
-
this.removeTag('Tracking', 'event="skip"');
|
|
90
|
-
}
|
|
91
|
-
if (progressEvents.length > 0) {
|
|
92
|
-
timeOffset = 5;
|
|
93
|
-
this.removeTag('Tracking', 'event="progress"');
|
|
94
|
-
}
|
|
95
|
-
if (linearSkipOffset && linearSkipOffset.length > 1) {
|
|
96
|
-
timeOffset = parseClipTime(linearSkipOffset[1]);
|
|
97
|
-
this.config = this.config.replace(/<Linear skipoffset="(\d+:\d+:\d+)".*?>/g, '<Linear>');
|
|
98
|
-
}
|
|
99
|
-
return { skipEvents, progressEvents, timeOffset };
|
|
100
|
-
}
|
|
101
|
-
getExtension() {
|
|
102
|
-
const extensions = this.getTag('Extensions');
|
|
103
|
-
if (!extensions) {
|
|
104
|
-
return {};
|
|
105
|
-
}
|
|
106
|
-
const xml = this.parseXML(extensions[0]);
|
|
107
|
-
assert(xml, 'xml is null');
|
|
108
|
-
const items = xml.getElementsByTagName('Extension');
|
|
109
|
-
const extObj = {};
|
|
110
|
-
extObj.controls === '1';
|
|
111
|
-
for (let i = 0; i < items.length; i++) {
|
|
112
|
-
try {
|
|
113
|
-
const eventName = items[i].getAttribute('type');
|
|
114
|
-
let trackingURLTemplate = '';
|
|
115
|
-
if (items[i].children && items[i].children.length > 0) {
|
|
116
|
-
trackingURLTemplate = String(items[i]); // TODO or textContent
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
trackingURLTemplate = this.getExtensionNode(items[i]);
|
|
120
|
-
}
|
|
121
|
-
if (eventName && trackingURLTemplate) {
|
|
122
|
-
try {
|
|
123
|
-
extObj[eventName] = trackingURLTemplate;
|
|
124
|
-
}
|
|
125
|
-
catch (error) {
|
|
126
|
-
// LogManager.exception(error);
|
|
127
|
-
reportError(error);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
catch (error) {
|
|
132
|
-
// LogManager.exception(error);
|
|
133
|
-
reportError(error);
|
|
134
|
-
continue;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
if (!extObj.isClickable) {
|
|
138
|
-
extObj.isClickable = '1';
|
|
139
|
-
}
|
|
140
|
-
//может оно и не надо
|
|
141
|
-
if (extObj.isClickable === '0') {
|
|
142
|
-
this.removeTag('VideoClicks');
|
|
143
|
-
}
|
|
144
|
-
if (extObj.skipTime2) {
|
|
145
|
-
if (extObj.skipTime2.split(':').length === 2) {
|
|
146
|
-
extObj.skipTime2 = '00:' + extObj.skipTime2;
|
|
147
|
-
}
|
|
148
|
-
if (this.config.indexOf('Linear') > -1) {
|
|
149
|
-
this.config = this.config.replace(/<Linear.*?>/g, '<Linear skipoffset="' + extObj.skipTime2 + '">');
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
return extObj;
|
|
153
|
-
}
|
|
154
|
-
getExtensionNode(node) {
|
|
155
|
-
if (!node) {
|
|
156
|
-
return '';
|
|
157
|
-
}
|
|
158
|
-
const result = (node.textContent || node.text || '').trim();
|
|
159
|
-
return result;
|
|
160
|
-
}
|
|
161
|
-
getWrapperUrl() {
|
|
162
|
-
const vastAdTagUri = this.getUrls('VASTAdTagURI')[0];
|
|
163
|
-
this.removeTag('VASTAdTagURI');
|
|
164
|
-
return vastAdTagUri;
|
|
165
|
-
}
|
|
166
|
-
getTag(name, attr) {
|
|
167
|
-
let tag = '<' + name + '.*?>';
|
|
168
|
-
if (attr) {
|
|
169
|
-
tag = '<' + name + ' ' + attr + '.*?>';
|
|
170
|
-
}
|
|
171
|
-
const matchString = new RegExp(tag + '(.|\n|\r)*?' + '<\\/' + name + '>', 'g');
|
|
172
|
-
return this.config.match(matchString);
|
|
173
|
-
}
|
|
174
|
-
getUrls(tag, attr) {
|
|
175
|
-
const matched = this.getTag(tag, attr);
|
|
176
|
-
const res = [];
|
|
177
|
-
if (matched) {
|
|
178
|
-
for (let i = 0; i < matched.length; i++) {
|
|
179
|
-
if (matched[i].indexOf('<![CDATA[') > -1) {
|
|
180
|
-
const lengthCDATA = 9;
|
|
181
|
-
res.push(matched[i].substring(matched[i].indexOf('<![CDATA[') + lengthCDATA, matched[i].indexOf(']]>')));
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
if (matched[i].indexOf('https://') > -1) {
|
|
185
|
-
res.push(matched[i].substring(matched[i].indexOf('https://'), matched[i].length - 1));
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
return res;
|
|
191
|
-
}
|
|
192
|
-
parseXML(val) {
|
|
193
|
-
let xmlDoc = null;
|
|
194
|
-
if (document.implementation &&
|
|
195
|
-
document.implementation.createDocument) {
|
|
196
|
-
xmlDoc = new DOMParser().parseFromString(val, 'application/xml');
|
|
197
|
-
}
|
|
198
|
-
else if ('ActiveXObject' in window) {
|
|
199
|
-
xmlDoc = new window.ActiveXObject('Microsoft.XMLDOM');
|
|
200
|
-
xmlDoc.loadXML(val);
|
|
201
|
-
}
|
|
202
|
-
else {
|
|
203
|
-
return null;
|
|
204
|
-
}
|
|
205
|
-
return xmlDoc;
|
|
206
|
-
}
|
|
207
|
-
removeTag(name, attr) {
|
|
208
|
-
let tag = '<' + name + '.*?>';
|
|
209
|
-
if (attr) {
|
|
210
|
-
tag = '<' + name + ' ' + attr + '.*?>';
|
|
211
|
-
}
|
|
212
|
-
const filter = new RegExp(tag + '(.|\n|\r)*?' + '<\\/' + name + '>', 'g');
|
|
213
|
-
this.config = this.config.replace(filter, '');
|
|
214
|
-
}
|
|
215
|
-
extendXML(xml) {
|
|
216
|
-
if (xml.indexOf('<?xml') < 0) {
|
|
217
|
-
xml = '<?xml version="1.0" encoding="utf-8"?>' + xml;
|
|
218
|
-
}
|
|
219
|
-
if (!this.config) {
|
|
220
|
-
this.config = xml;
|
|
221
|
-
return;
|
|
222
|
-
}
|
|
223
|
-
else {
|
|
224
|
-
const xmlMerge = new MergeVast(this.config, xml);
|
|
225
|
-
this.config = xmlMerge.merge();
|
|
226
|
-
this.config = this.config.replace(/<\?xml.+\?>/g, '');
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { Core, Events } from '@clappr/core';
|
|
2
|
-
import type { ZeptoResult } from '../../types.js';
|
|
3
|
-
type RollConstructorOptions = {
|
|
4
|
-
core: Core;
|
|
5
|
-
$skipAd: ZeptoResult;
|
|
6
|
-
$muteIcon: ZeptoResult;
|
|
7
|
-
$areaClick: ZeptoResult;
|
|
8
|
-
mute: boolean;
|
|
9
|
-
volume: number;
|
|
10
|
-
prevVolume: number;
|
|
11
|
-
};
|
|
12
|
-
export default class Roll extends Events {
|
|
13
|
-
private mute;
|
|
14
|
-
private core;
|
|
15
|
-
private container;
|
|
16
|
-
private $skipAd;
|
|
17
|
-
private $muteIcon;
|
|
18
|
-
private $areaClick;
|
|
19
|
-
private _playback;
|
|
20
|
-
private _volume;
|
|
21
|
-
private _prevValueVolume;
|
|
22
|
-
private _useDummyMp4Video;
|
|
23
|
-
private firstRemaininTime;
|
|
24
|
-
private intervalTimer;
|
|
25
|
-
private _isAdStartedTriggered;
|
|
26
|
-
private extension;
|
|
27
|
-
private _adsManager;
|
|
28
|
-
private url;
|
|
29
|
-
constructor({ core, $skipAd, $muteIcon, $areaClick, mute, volume, prevVolume, }: RollConstructorOptions);
|
|
30
|
-
static _adContainer: any;
|
|
31
|
-
private static _adDisplayContainer;
|
|
32
|
-
private static _imaContainer;
|
|
33
|
-
static _contentElement: HTMLMediaElement | null;
|
|
34
|
-
static createAdDisplayContainer(): void;
|
|
35
|
-
static createImaContainer(): void;
|
|
36
|
-
static destroyImaContainer(): void;
|
|
37
|
-
private _onAdError;
|
|
38
|
-
_playAds(): Promise<void>;
|
|
39
|
-
private _setVolume;
|
|
40
|
-
_playVideoContent(): void;
|
|
41
|
-
_hideControls(): void;
|
|
42
|
-
_requestAd({ xml, url, extension, }: {
|
|
43
|
-
xml: any;
|
|
44
|
-
url: string;
|
|
45
|
-
extension: any;
|
|
46
|
-
}): void;
|
|
47
|
-
playerResize(): void;
|
|
48
|
-
_onAdsManagerLoaded(adsManagerLoadedEvent: any): void;
|
|
49
|
-
_triggerStartAd(url: string): void;
|
|
50
|
-
_remainingTime(ad: any): void;
|
|
51
|
-
private _cleverContinueAd;
|
|
52
|
-
private _imaEvent;
|
|
53
|
-
changeIconVolume(): void;
|
|
54
|
-
_setupOverlay(): void;
|
|
55
|
-
_trackUrls(urls: string[]): void;
|
|
56
|
-
_trackUrl(url: string): void;
|
|
57
|
-
destroy(): void;
|
|
58
|
-
}
|
|
59
|
-
export {};
|
|
60
|
-
//# sourceMappingURL=roll.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"roll.d.ts","sourceRoot":"","sources":["../../../src/plugins/vast-ads/roll.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,IAAI,EAAE,MAAM,EAAiB,MAAM,cAAc,CAAA;AAIxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAGjD,KAAK,sBAAsB,GAAG;IAC5B,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,WAAW,CAAA;IACpB,SAAS,EAAE,WAAW,CAAA;IACtB,UAAU,EAAE,WAAW,CAAA;IACvB,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,MAAM;IACtC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,gBAAgB,CAAQ;IAEhC,OAAO,CAAC,iBAAiB,CAAQ;IAEjC,OAAO,CAAC,iBAAiB,CAAI;IAE7B,OAAO,CAAC,aAAa,CAAuB;IAE5C,OAAO,CAAC,qBAAqB,CAAS;IAEtC,OAAO,CAAC,SAAS,CAAK;IAEtB,OAAO,CAAC,WAAW,CAAK;IAExB,OAAO,CAAC,GAAG,CAAa;gBAIZ,EACV,IAAI,EACJ,OAAO,EACP,SAAS,EACT,UAAU,EACV,IAAI,EACJ,MAAM,EACN,UAAU,GACX,EAAE,sBAAsB;IAezB,MAAM,CAAC,YAAY,EAAE,GAAG,CAAA;IAExB,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAK;IAEvC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAK;IAEjC,MAAM,CAAC,eAAe,EAAE,gBAAgB,GAAG,IAAI,CAAO;IAEtD,MAAM,CAAC,wBAAwB;IAQ/B,MAAM,CAAC,kBAAkB;IAUzB,MAAM,CAAC,mBAAmB;IAO1B,OAAO,CAAC,UAAU;IAkBZ,QAAQ;IAmBd,OAAO,CAAC,UAAU;IA+BlB,iBAAiB;IAKjB,aAAa;IAUb,UAAU,CAAC,EACT,GAAG,EACH,GAAG,EACH,SAAS,GACV,EAAE;QACD,GAAG,EAAE,GAAG,CAAA;QACR,GAAG,EAAE,MAAM,CAAA;QACX,SAAS,EAAE,GAAG,CAAA;KACf;IA0CD,YAAY;IAWZ,mBAAmB,CAAC,qBAAqB,EAAE,GAAG;IAgM9C,eAAe,CAAC,GAAG,EAAE,MAAM;IAS3B,cAAc,CAAC,EAAE,EAAE,GAAG;IAoCtB,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,SAAS;IAKjB,gBAAgB;IAkBhB,aAAa;IAiDb,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE;IAMzB,SAAS,CAAC,GAAG,EAAE,MAAM;IAQrB,OAAO;CAWR"}
|