@vpmedia/phaser 1.62.0 → 1.64.0
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/README.md +1 -1
- package/package.json +1 -1
- package/src/phaser/core/game.js +2 -2
- package/src/phaser/core/loader.js +9 -9
- package/src/phaser/core/sound_manager.js +65 -41
- package/src/phaser/display/webgl/renderer.js +1 -1
- package/types/phaser/core/sound.d.ts +1 -1
- package/types/phaser/core/sound.d.ts.map +1 -1
- package/types/phaser/core/sound_manager.d.ts +17 -5
- package/types/phaser/core/sound_manager.d.ts.map +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @vpmedia/phaser
|
|
2
2
|
|
|
3
|
-
[](https://badge.fury.io/js/@vpmedia%2Fphaser)
|
|
4
4
|
[](https://github.com/vpmedia/phaser/actions/workflows/ci.yml)
|
|
5
5
|
|
|
6
6
|
@vpmedia/phaser is the modern ECMAScript port of the popular Phaser game engine v2.6.2.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vpmedia/phaser",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.64.0",
|
|
4
4
|
"description": "@vpmedia/phaser is the modern ECMAScript port of the popular Phaser game engine v2.6.2",
|
|
5
5
|
"author": "Andras Csizmadia <andras@vpmedia.hu> (www.vpmedia.hu)",
|
|
6
6
|
"license": "MIT",
|
package/src/phaser/core/game.js
CHANGED
|
@@ -148,7 +148,7 @@ export class Game {
|
|
|
148
148
|
this.canvas.addEventListener('webglcontextlost', this.contextLostBinded, false);
|
|
149
149
|
this.canvas.addEventListener('webglcontextrestored', this.contextRestoredBinded, false);
|
|
150
150
|
isWebGlReady = true;
|
|
151
|
-
} catch (
|
|
151
|
+
} catch (error) {
|
|
152
152
|
isWebGlReady = false;
|
|
153
153
|
if (window.PhaserRegistry?.GL_PROGRAM_INFO_LOG) {
|
|
154
154
|
this.logger.warn('WebGL program info', { log: window.PhaserRegistry.GL_PROGRAM_INFO_LOG });
|
|
@@ -156,7 +156,7 @@ export class Game {
|
|
|
156
156
|
if (window.PhaserRegistry?.GL_SHADER_INFO_LOG) {
|
|
157
157
|
this.logger.warn('WebGL shader info', { log: window.PhaserRegistry.GL_SHADER_INFO_LOG });
|
|
158
158
|
}
|
|
159
|
-
this.exceptionHandler(
|
|
159
|
+
this.exceptionHandler(error);
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
162
|
if (!isWebGlReady) {
|
|
@@ -413,7 +413,7 @@ export class Loader {
|
|
|
413
413
|
let xml = null;
|
|
414
414
|
try {
|
|
415
415
|
json = JSON.parse(atlasData);
|
|
416
|
-
} catch (
|
|
416
|
+
} catch (error) {
|
|
417
417
|
xml = this.parseXml(atlasData);
|
|
418
418
|
}
|
|
419
419
|
if (!xml && !json) {
|
|
@@ -846,13 +846,13 @@ export class Loader {
|
|
|
846
846
|
}
|
|
847
847
|
}
|
|
848
848
|
return onload.call(scope, file, xhr);
|
|
849
|
-
} catch (
|
|
849
|
+
} catch (error) {
|
|
850
850
|
// If this was the last file in the queue and an error is thrown in the create method
|
|
851
851
|
// then it's caught here, so be sure we don't carry on processing it
|
|
852
852
|
if (!scope.hasLoaded) {
|
|
853
|
-
scope.asyncComplete(file,
|
|
853
|
+
scope.asyncComplete(file, error.message || 'Exception');
|
|
854
854
|
} else {
|
|
855
|
-
scope.game.exceptionHandler(
|
|
855
|
+
scope.game.exceptionHandler(error);
|
|
856
856
|
}
|
|
857
857
|
}
|
|
858
858
|
return null;
|
|
@@ -866,11 +866,11 @@ export class Loader {
|
|
|
866
866
|
} else {
|
|
867
867
|
try {
|
|
868
868
|
return onerror.call(scope, file, xhr);
|
|
869
|
-
} catch (
|
|
869
|
+
} catch (error) {
|
|
870
870
|
if (!scope.hasLoaded) {
|
|
871
|
-
scope.asyncComplete(file,
|
|
871
|
+
scope.asyncComplete(file, error.message || 'Exception');
|
|
872
872
|
} else {
|
|
873
|
-
scope.game.exceptionHandler(
|
|
873
|
+
scope.game.exceptionHandler(error);
|
|
874
874
|
}
|
|
875
875
|
}
|
|
876
876
|
}
|
|
@@ -1002,7 +1002,7 @@ export class Loader {
|
|
|
1002
1002
|
try {
|
|
1003
1003
|
// Try to parse as JSON, if it fails, then it's hopefully XML
|
|
1004
1004
|
json = JSON.parse(bitmapFontXhr.responseText);
|
|
1005
|
-
} catch (
|
|
1005
|
+
} catch (error) {
|
|
1006
1006
|
// pass
|
|
1007
1007
|
}
|
|
1008
1008
|
if (json) {
|
|
@@ -1102,7 +1102,7 @@ export class Loader {
|
|
|
1102
1102
|
xml.async = 'false';
|
|
1103
1103
|
xml.loadXML(data);
|
|
1104
1104
|
}
|
|
1105
|
-
} catch (
|
|
1105
|
+
} catch (error) {
|
|
1106
1106
|
xml = null;
|
|
1107
1107
|
}
|
|
1108
1108
|
if (!xml || !xml.documentElement || xml.getElementsByTagName('parsererror').length) {
|
|
@@ -11,6 +11,7 @@ export class SoundManager {
|
|
|
11
11
|
constructor(game) {
|
|
12
12
|
this.game = game;
|
|
13
13
|
this.onChange = new Signal();
|
|
14
|
+
/** @type {AudioContext} */
|
|
14
15
|
this.context = null;
|
|
15
16
|
this.baseLatency = 0; // https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/baseLatency
|
|
16
17
|
this.noAudio = false;
|
|
@@ -41,20 +42,20 @@ export class SoundManager {
|
|
|
41
42
|
} else if (window.AudioContext) {
|
|
42
43
|
try {
|
|
43
44
|
this.context = new window.AudioContext();
|
|
44
|
-
} catch (
|
|
45
|
+
} catch (error) {
|
|
45
46
|
this.context = null;
|
|
46
47
|
this.noAudio = true;
|
|
47
48
|
this.isLocked = false;
|
|
48
|
-
this.game.exceptionHandler(
|
|
49
|
+
this.game.exceptionHandler(error);
|
|
49
50
|
}
|
|
50
51
|
} else if (window.webkitAudioContext) {
|
|
51
52
|
try {
|
|
52
53
|
this.context = new window.webkitAudioContext();
|
|
53
|
-
} catch (
|
|
54
|
+
} catch (error) {
|
|
54
55
|
this.context = null;
|
|
55
56
|
this.noAudio = true;
|
|
56
57
|
this.isLocked = false;
|
|
57
|
-
this.game.exceptionHandler(
|
|
58
|
+
this.game.exceptionHandler(error);
|
|
58
59
|
}
|
|
59
60
|
}
|
|
60
61
|
if (
|
|
@@ -75,61 +76,82 @@ export class SoundManager {
|
|
|
75
76
|
this.masterGain.connect(this.context.destination);
|
|
76
77
|
// handle audio state unlock
|
|
77
78
|
// possible states: interrupted, suspended, running, closed
|
|
78
|
-
this.onUnlockEventBinded = this.onUnlockEvent.bind(this);
|
|
79
79
|
if (this.context.state === 'suspended' || this.context.state === 'interrupted') {
|
|
80
80
|
this.addUnlockHandlers();
|
|
81
81
|
}
|
|
82
|
-
this.context.addEventListener('statechange',
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
});
|
|
87
|
-
if (!this.isLocked && (this.context.state === 'suspended' || this.context.state === 'interrupted')) {
|
|
88
|
-
this.addUnlockHandlers();
|
|
89
|
-
} else if (this.isLocked && this.context.state === 'running') {
|
|
90
|
-
this.removeUnlockHandlers();
|
|
91
|
-
}
|
|
92
|
-
});
|
|
82
|
+
this.context.addEventListener('statechange', this.onContextStateChange, false);
|
|
83
|
+
for (const eventType of ['pageshow', 'visibilitychange', 'resume']) {
|
|
84
|
+
window.addEventListener(eventType, this.onPageLifecycleChange, true);
|
|
85
|
+
}
|
|
93
86
|
}
|
|
94
87
|
|
|
95
88
|
/**
|
|
96
89
|
* TBD.
|
|
97
90
|
*/
|
|
98
|
-
|
|
91
|
+
onPageLifecycleChange = () => {
|
|
92
|
+
if (!document.hidden) {
|
|
93
|
+
this.checkUnlockHandlers();
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* TBD.
|
|
99
|
+
*/
|
|
100
|
+
onContextStateChange = () => {
|
|
101
|
+
this.game.logger.info('onContextStateChange', {
|
|
102
|
+
state: this.context.state,
|
|
103
|
+
isLocked: this.isLocked,
|
|
104
|
+
});
|
|
105
|
+
this.checkUnlockHandlers();
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* TBD.
|
|
110
|
+
*/
|
|
111
|
+
checkUnlockHandlers = () => {
|
|
112
|
+
if (!this.isLocked && (this.context.state === 'suspended' || this.context.state === 'interrupted')) {
|
|
113
|
+
this.addUnlockHandlers();
|
|
114
|
+
} else if (this.isLocked && this.context.state === 'running') {
|
|
115
|
+
this.removeUnlockHandlers();
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* TBD.
|
|
121
|
+
*/
|
|
122
|
+
addUnlockHandlers = () => {
|
|
99
123
|
this.isLocked = true;
|
|
100
|
-
this.
|
|
124
|
+
this.game.logger.info('addUnlockHandlers', {
|
|
101
125
|
state: this.context.state,
|
|
102
126
|
isLocked: this.isLocked,
|
|
103
127
|
});
|
|
104
|
-
document.body.addEventListener('
|
|
105
|
-
document.body.addEventListener('
|
|
106
|
-
document.body.addEventListener('
|
|
107
|
-
|
|
108
|
-
}
|
|
128
|
+
document.body.addEventListener('touchend', this.onUnlockEvent, false);
|
|
129
|
+
document.body.addEventListener('click', this.onUnlockEvent, false);
|
|
130
|
+
document.body.addEventListener('keydown', this.onUnlockEvent, false);
|
|
131
|
+
};
|
|
109
132
|
|
|
110
133
|
/**
|
|
111
134
|
* TBD.
|
|
112
135
|
*/
|
|
113
|
-
removeUnlockHandlers() {
|
|
136
|
+
removeUnlockHandlers = () => {
|
|
114
137
|
this.isLocked = false;
|
|
115
|
-
this.
|
|
138
|
+
this.game.logger.info('removeUnlockHandlers', {
|
|
116
139
|
state: this.context.state,
|
|
117
140
|
isLocked: this.isLocked,
|
|
118
141
|
});
|
|
119
|
-
document.body.removeEventListener('
|
|
120
|
-
document.body.removeEventListener('
|
|
121
|
-
document.body.removeEventListener('
|
|
122
|
-
|
|
123
|
-
}
|
|
142
|
+
document.body.removeEventListener('touchend', this.onUnlockEvent, false);
|
|
143
|
+
document.body.removeEventListener('click', this.onUnlockEvent, false);
|
|
144
|
+
document.body.removeEventListener('keydown', this.onUnlockEvent, false);
|
|
145
|
+
};
|
|
124
146
|
|
|
125
147
|
/**
|
|
126
148
|
* TBD.
|
|
127
149
|
* @param {Event} event - TBD.
|
|
128
150
|
*/
|
|
129
|
-
onUnlockEvent(event) {
|
|
151
|
+
onUnlockEvent = (event) => {
|
|
130
152
|
const initialState = this.context.state;
|
|
131
153
|
if (initialState !== 'suspended' && initialState !== 'interrupted') {
|
|
132
|
-
this.
|
|
154
|
+
this.game.logger.info('onUnlockResumeDenied', {
|
|
133
155
|
state: initialState,
|
|
134
156
|
isLocked: this.isLocked,
|
|
135
157
|
event,
|
|
@@ -137,7 +159,7 @@ export class SoundManager {
|
|
|
137
159
|
this.removeUnlockHandlers();
|
|
138
160
|
return;
|
|
139
161
|
}
|
|
140
|
-
this.
|
|
162
|
+
this.game.logger.info('onContextResumeStart', {
|
|
141
163
|
state: initialState,
|
|
142
164
|
isLocked: this.isLocked,
|
|
143
165
|
event,
|
|
@@ -145,24 +167,24 @@ export class SoundManager {
|
|
|
145
167
|
this.context
|
|
146
168
|
.resume()
|
|
147
169
|
.then(() => {
|
|
148
|
-
this.
|
|
170
|
+
this.game.logger.info('onContextResumeResult', {
|
|
149
171
|
initialState,
|
|
150
172
|
state: this.context.state,
|
|
151
173
|
isLocked: this.isLocked,
|
|
152
174
|
});
|
|
153
175
|
this.removeUnlockHandlers();
|
|
154
176
|
})
|
|
155
|
-
.catch((
|
|
156
|
-
this.
|
|
177
|
+
.catch((error) => {
|
|
178
|
+
this.game.logger.info('onContextResumeReject', {
|
|
157
179
|
initialState,
|
|
158
180
|
state: this.context.state,
|
|
159
181
|
isLocked: this.isLocked,
|
|
160
|
-
error
|
|
182
|
+
error,
|
|
161
183
|
});
|
|
162
184
|
this.removeUnlockHandlers();
|
|
163
|
-
this.game.exceptionHandler(
|
|
185
|
+
this.game.exceptionHandler(error, { 'audio.initialState': initialState, 'audio.state': this.context.state });
|
|
164
186
|
});
|
|
165
|
-
}
|
|
187
|
+
};
|
|
166
188
|
|
|
167
189
|
/**
|
|
168
190
|
* TBD.
|
|
@@ -220,8 +242,8 @@ export class SoundManager {
|
|
|
220
242
|
.then((buffer) => {
|
|
221
243
|
this.game.cache.decodedSound(key, buffer);
|
|
222
244
|
})
|
|
223
|
-
.catch((
|
|
224
|
-
this.game.exceptionHandler(
|
|
245
|
+
.catch((error) => {
|
|
246
|
+
this.game.exceptionHandler(error, { 'asset.key': key });
|
|
225
247
|
});
|
|
226
248
|
}
|
|
227
249
|
}
|
|
@@ -249,6 +271,7 @@ export class SoundManager {
|
|
|
249
271
|
}
|
|
250
272
|
// All decoded already?
|
|
251
273
|
if (this._watchList.total === 0) {
|
|
274
|
+
this.game.logger.info('All sounds decoded');
|
|
252
275
|
this._watching = false;
|
|
253
276
|
callback.call(callbackContext);
|
|
254
277
|
} else {
|
|
@@ -277,6 +300,7 @@ export class SoundManager {
|
|
|
277
300
|
key = this._watchList.next;
|
|
278
301
|
}
|
|
279
302
|
if (this._watchList.total === 0) {
|
|
303
|
+
this.game.logger.info('All sounds decoded');
|
|
280
304
|
this._watching = false;
|
|
281
305
|
this._watchCallback.call(this._watchContext);
|
|
282
306
|
}
|
|
@@ -124,7 +124,7 @@ export class WebGLRenderer {
|
|
|
124
124
|
* @throws Error.
|
|
125
125
|
*/
|
|
126
126
|
initContext(game) {
|
|
127
|
-
game.logger.
|
|
127
|
+
game.logger.info('initContext');
|
|
128
128
|
// TODO: view.addEventListener('webglcontextcreationerror', this.onWebGLContextCreationError, false);
|
|
129
129
|
/** @type {WebGLRenderingContext & { id: number }} */
|
|
130
130
|
// @ts-ignore
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sound.d.ts","sourceRoot":"","sources":["../../../src/phaser/core/sound.js"],"names":[],"mappings":"AAEA;IACE;;;;;;;OAOG;IACH,kBANW,OAAO,WAAW,EAAE,IAAI,OACxB,MAAM,WACN,MAAM,SACN,OAAO,YACP,OAAO,EAoEjB;IA5DC,+BAAgB;IAChB,aAAe;IACf,YAAc;IACd,cAAgB;IAChB,YAAiB;IACjB,
|
|
1
|
+
{"version":3,"file":"sound.d.ts","sourceRoot":"","sources":["../../../src/phaser/core/sound.js"],"names":[],"mappings":"AAEA;IACE;;;;;;;OAOG;IACH,kBANW,OAAO,WAAW,EAAE,IAAI,OACxB,MAAM,WACN,MAAM,SACN,OAAO,YACP,OAAO,EAoEjB;IA5DC,+BAAgB;IAChB,aAAe;IACf,YAAc;IACd,cAAgB;IAChB,YAAiB;IACjB,sBAAmB;IACnB,kBAAqB;IACrB,sBAAsB;IACtB,kBAAkB;IAClB,oBAAoB;IACpB,iBAAiB;IACjB,mBAAmB;IACnB,iBAAiB;IACjB,iBAAiB;IACjB,gBAAmB;IACnB,uBAAuB;IACvB,mBAAmB;IACnB,mBAAsB;IACtB,sBAAuB;IACvB,sCAAqB;IACrB,yBAA4B;IAC5B,kBAAqB;IACrB,uBAA0B;IAC1B,kBAAwB;IACxB,oBAA0B;IAC1B,cAAoB;IACpB,YAAkB;IAClB,yBAA4B;IAC5B,iCAAoC;IAcpC,eAA0B;IAC1B,gBAA2B;IAC3B,iBAA4B;IAC5B,eAA0B;IAC1B,eAA0B;IAC1B,eAA0B;IAC1B,yBAAoC;IACpC,uBAAkC;IAClC,gBAAqB;IACrB,aAAmB;IACnB,gBAAmB;IACnB,oBAAoB;IACpB,sBAAsB;IACtB,oBAAoB;IACpB,mBAAmB;IACnB,oBAAoB;IACpB,kBAAkB;IAClB,iBAAoB;IAGtB;;;OAGG;IACH,sBAFW,MAAM,QAOhB;IAED;;;;;;;OAOG;IACH,gBANW,MAAM,SACN,MAAM,aACN,MAAM,WACN,MAAM,SACN,OAAO,QAYjB;IAED;;;OAGG;IACH,mBAFW,MAAM,QAIhB;IAED;;OAEG;IACH,uBA2BC;IAED;;OAEG;IACH,eA6CC;IAED;;;;OAIG;IACH,iBAHW,MAAM,GACJ,KAAK,CAIjB;IAED;;;;;;;;OAQG;IACH,aAPW,MAAM,YACN,MAAM,UACN,MAAM,QACN,OAAO,gBACP,OAAO,GACL,KAAK,CA+IjB;IA8MD;;OAEG;IACH,0BAUC;IArBD;;;OAGG;IACH,qBAEC;IA1MD;;;;;;OAMG;IACH,iBALW,MAAM,aACN,MAAM,WACN,MAAM,SACN,OAAO,QAIjB;IAED;;OAEG;IACH,cASC;IAED;;OAEG;IACH,eAgCC;IAED;;OAEG;IACH,aA4BC;IAED;;;;;OAKG;IACH,iBAJW,MAAM,SACN,OAAO,WACP,MAAM,QAQhB;IAED;;;OAGG;IACH,kBAFW,MAAM,QAIhB;IAED;;;;OAIG;IACH,kBAHW,MAAM,WACN,MAAM,QAQhB;IAED;;OAEG;IACH,qBAKC;IAED;;;OAGG;IACH,iBAFW,OAAO,QAqBjB;IAUD;;OAEG;IACH,yBAkBC;IA7BD;;;OAGG;IACH,oBAEC;CA+CF;uBAnkBsB,aAAa"}
|
|
@@ -6,7 +6,8 @@ export class SoundManager {
|
|
|
6
6
|
constructor(game: import("./game.js").Game);
|
|
7
7
|
game: import("./game.js").Game;
|
|
8
8
|
onChange: Signal;
|
|
9
|
-
|
|
9
|
+
/** @type {AudioContext} */
|
|
10
|
+
context: AudioContext;
|
|
10
11
|
baseLatency: number;
|
|
11
12
|
noAudio: boolean;
|
|
12
13
|
connectToMaster: boolean;
|
|
@@ -26,20 +27,31 @@ export class SoundManager {
|
|
|
26
27
|
*/
|
|
27
28
|
boot(): void;
|
|
28
29
|
masterGain: any;
|
|
29
|
-
onUnlockEventBinded: (event: Event) => void;
|
|
30
30
|
/**
|
|
31
31
|
* TBD.
|
|
32
32
|
*/
|
|
33
|
-
|
|
33
|
+
onPageLifecycleChange: () => void;
|
|
34
34
|
/**
|
|
35
35
|
* TBD.
|
|
36
36
|
*/
|
|
37
|
-
|
|
37
|
+
onContextStateChange: () => void;
|
|
38
|
+
/**
|
|
39
|
+
* TBD.
|
|
40
|
+
*/
|
|
41
|
+
checkUnlockHandlers: () => void;
|
|
42
|
+
/**
|
|
43
|
+
* TBD.
|
|
44
|
+
*/
|
|
45
|
+
addUnlockHandlers: () => void;
|
|
46
|
+
/**
|
|
47
|
+
* TBD.
|
|
48
|
+
*/
|
|
49
|
+
removeUnlockHandlers: () => void;
|
|
38
50
|
/**
|
|
39
51
|
* TBD.
|
|
40
52
|
* @param {Event} event - TBD.
|
|
41
53
|
*/
|
|
42
|
-
onUnlockEvent(event: Event)
|
|
54
|
+
onUnlockEvent: (event: Event) => void;
|
|
43
55
|
/**
|
|
44
56
|
* TBD.
|
|
45
57
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sound_manager.d.ts","sourceRoot":"","sources":["../../../src/phaser/core/sound_manager.js"],"names":[],"mappings":"AAKA;IACE;;;OAGG;IACH,kBAFW,OAAO,WAAW,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"sound_manager.d.ts","sourceRoot":"","sources":["../../../src/phaser/core/sound_manager.js"],"names":[],"mappings":"AAKA;IACE;;;OAGG;IACH,kBAFW,OAAO,WAAW,EAAE,IAAI,EAqBlC;IAlBC,+BAAgB;IAChB,iBAA4B;IAC5B,2BAA2B;IAC3B,SADW,YAAY,CACJ;IACnB,oBAAoB;IACpB,iBAAoB;IACpB,yBAA2B;IAC3B,kBAAqB;IACrB,qBAAuB;IACvB,oBAAuB;IACvB,gBAAmB;IACnB,mBAAyB;IACzB,gBAAgB;IAChB,eAAiB;IACjB,qBAAgC;IAChC,mBAAsB;IACtB,yBAA0B;IAC1B,mBAAyB;IAG3B;;OAEG;IACH,aAmDC;IAfG,gBAA+C;IAiBnD;;OAEG;IACH,kCAIE;IAEF;;OAEG;IACH,iCAME;IAEF;;OAEG;IACH,gCAME;IAEF;;OAEG;IACH,8BASE;IAEF;;OAEG;IACH,iCASE;IAEF;;;OAGG;IACH,uBAFW,KAAK,UAsCd;IAEF;;OAEG;IACH,gBASC;IAED;;OAEG;IACH,iBASC;IAED;;OAEG;IACH,kBASC;IAED;;;OAGG;IACH,YAFW,MAAM,QAiBhB;IAED;;;;;OAKG;IACH,0BAJW,KAAK,EAAE,GAAC,MAAM,EAAE,uCAEhB,MAAM,QA0BhB;IAED;;OAEG;IACH,eAqBC;IAED;;;;;;;OAOG;IACH,SANW,MAAM,WACN,MAAM,SACN,OAAO,YACP,OAAO,GACL,KAAK,CAMjB;IAED;;;;OAIG;IACH,eAHW,MAAM,GACJ,WAAW,CAIvB;IAED;;;;OAIG;IACH,cAHW,KAAK,GACH,OAAO,CAanB;IAED;;;;OAIG;IACH,iBAHW,MAAM,GACJ,MAAM,CAclB;IAED;;;;;;OAMG;IACH,UALW,MAAM,WACN,MAAM,SACN,OAAO,GACL,KAAK,CASjB;IAED;;OAEG;IACH,gBAUC;IAJG,iBAA6C;IAMjD;;OAEG;IACH,kBASC;IAED;;OAEG;IACH,gBAgBC;IAUD;;OAEG;IACH,yBAcC;IAzBD;;;OAGG;IACH,oBAEC;IA6BD;;OAEG;IACH,0BAYC;IAvBD;;;OAGG;IACH,qBAEC;CAkBF;uBAresB,aAAa;yBADX,gBAAgB;sBAEnB,YAAY;4BACN,mBAAmB"}
|