@woosh/meep-engine 2.125.1 → 2.126.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/package.json +1 -1
- package/src/engine/ecs/EntityComponentDataset.d.ts.map +1 -1
- package/src/engine/ecs/EntityComponentDataset.js +1 -0
- package/src/engine/ecs/EntityManager.d.ts +1 -1
- package/src/engine/ecs/EntityManager.d.ts.map +1 -1
- package/src/engine/ecs/EntityManager.js +46 -21
- package/src/engine/ecs/EntityObserver.d.ts.map +1 -1
- package/src/engine/ecs/EntityObserver.js +18 -2
- package/src/engine/ecs/System.d.ts.map +1 -1
- package/src/engine/ecs/System.js +48 -7
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"description": "Pure JavaScript game engine. Fully featured and production ready.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"author": "Alexander Goldring",
|
|
8
|
-
"version": "2.
|
|
8
|
+
"version": "2.126.0",
|
|
9
9
|
"main": "build/meep.module.js",
|
|
10
10
|
"module": "build/meep.module.js",
|
|
11
11
|
"exports": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityComponentDataset.d.ts","sourceRoot":"","sources":["../../../../src/engine/ecs/EntityComponentDataset.js"],"names":[],"mappings":"AAyHA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,+CAfgB,QAAQ,CAAC,MAAM;IAiB3B;;;;OAIG;IACH,wBAA+B;IAE/B;;;;;OAKG;IACH,yBAAsC;IAEtC;;;;;;;;;OASG;IACH,2BAAkC;IAElC;;;;;OAKG;IACH,yBAAsB;IAEtB;;;;OAIG;IACH,4BAAgC;IAEhC;;;;OAIG;IACH,2BAAuB;IAEvB;;;OAGG;IACH,mBAAgB;IAEhB;;;;OAIG;IACH,oBAAgB;IAEhB;;;;;;;OAOG;IACH,mBAAe;IAEf;;;OAGG;IACH,0BAFU,MAAM,CAAC,MAAM,CAAC,CAEO;IAE/B;;;OAGG;IACH,0BAFU,MAAM,CAEe;IAG/B;;;;OAIG;IACH,+BAA4B;IAE5B;;;;OAIG;IACH,kCAA+B;IAE/B;;;OAGG;IACH,kBAAe;IAGf;;;;;;OAMG;IACH,iBALa,CAAC,EAAE,CAAC,UACN,GAAG,kBACH,CAAC,GACC,OAAO,CAAC,CAAC,CAAC,CAoCtB;IAED;;;;;OAKG;IACH,sBAJW,cAAc,cACd,OAAO,GACL,OAAO,CAqDnB;IAED;;;;;OAKG;IACH,yBAJW,cAAc,cACd,OAAO,GACL,OAAO,
|
|
1
|
+
{"version":3,"file":"EntityComponentDataset.d.ts","sourceRoot":"","sources":["../../../../src/engine/ecs/EntityComponentDataset.js"],"names":[],"mappings":"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"}
|
|
@@ -90,7 +90,6 @@ export class EntityManager {
|
|
|
90
90
|
* @private
|
|
91
91
|
*/
|
|
92
92
|
private updateExecutionOrder;
|
|
93
|
-
detachDataSet(): void;
|
|
94
93
|
/**
|
|
95
94
|
* Get list of all components referenced by active systems
|
|
96
95
|
* @returns {Class[]}
|
|
@@ -103,6 +102,7 @@ export class EntityManager {
|
|
|
103
102
|
* @throws {Error} if dataset is incompatible with current system set
|
|
104
103
|
*/
|
|
105
104
|
attachDataSet(dataset: EntityComponentDataset): void;
|
|
105
|
+
detachDataSet(): void;
|
|
106
106
|
/**
|
|
107
107
|
* @template T
|
|
108
108
|
* @param {Class<T>} systemClass
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityManager.d.ts","sourceRoot":"","sources":["../../../../src/engine/ecs/EntityManager.js"],"names":[],"mappings":"iCAeU,MAAM;;;;;;;;;AAWhB;;;GAGG;AACH;IAEI;;;OAGG;IACH,kBAFU,iCAAQ,CAEL;IAEb;;;;OAIG;IACH,uCAA2B;IAE3B;;;;OAIG;IACH,iCAA4B;IAE5B;;OAEG;IACH;;;QAGI;;WAEG;qBADO,MAAM,iCAAQ;;MAI1B;IAEF;;;OAGG;IACH,OAFU,kBAAkB,CAEO;IAEnC;;;;;;OAMG;IACH,gDAA2C;IAE3C;;;;;;;;;OASG;IACH,qBAFU,MAAM,CAEqB;IAErC;;;;;OAKG;IACH,wCAFU,MAAM,CAE4B;IAE5C;;;;OAIG;IACH,SAFU,sBAAsB,CAEjB;IAEf;;;;;OAKG;IACH,uCAAsC;IAEtC;;;OAGG;IACH,6BAmFC;IAED
|
|
1
|
+
{"version":3,"file":"EntityManager.d.ts","sourceRoot":"","sources":["../../../../src/engine/ecs/EntityManager.js"],"names":[],"mappings":"iCAeU,MAAM;;;;;;;;;AAWhB;;;GAGG;AACH;IAEI;;;OAGG;IACH,kBAFU,iCAAQ,CAEL;IAEb;;;;OAIG;IACH,uCAA2B;IAE3B;;;;OAIG;IACH,iCAA4B;IAE5B;;OAEG;IACH;;;QAGI;;WAEG;qBADO,MAAM,iCAAQ;;MAI1B;IAEF;;;OAGG;IACH,OAFU,kBAAkB,CAEO;IAEnC;;;;;;OAMG;IACH,gDAA2C;IAE3C;;;;;;;;;OASG;IACH,qBAFU,MAAM,CAEqB;IAErC;;;;;OAKG;IACH,wCAFU,MAAM,CAE4B;IAE5C;;;;OAIG;IACH,SAFU,sBAAsB,CAEjB;IAEf;;;;;OAKG;IACH,uCAAsC;IAEtC;;;OAGG;IACH,6BAmFC;IAED;;;OAGG;IACH,uBAFa,KAAK,EAAE,CAuBnB;IAED;;;;;OAKG;IACH,uBAJW,sBAAsB,QAwChC;IAGD,sBA2BC;IAED;;;;OAIG;IACH,UAJa,CAAC,eACH,KAAK,CAAC,CAAC,CAAC,GACN,OAAO,CAInB;IAED;;;;OAIG;IACH,UAJa,CAAC,eACH,KAAK,CAAC,CAAC,CAAC,GACN,CAAC,GAAC,IAAI,CAkBlB;IAED;;;;;OAKG;IACH,wBAJa,CAAC,aACH,MAAM,GACJ,IAAI,GAAC,KAAK,CAAC,CAAC,CAAC,CAiBzB;IAGD;;;OAGG;IACH,oBAFW,MAAM,QAoEhB;IAED;;;;;OAKG;IACH,iEAoEC;IAED;;;;OAIG;IACH,uDAFa,OAAO,CAAC,OAAO,CAAC,CA2C5B;IAED;;;;;OAKG;IACH,mBA6BC;IAED;;;;;OAKG;IACH,oBA0DC;IAED;;;;;OAKG;IACH,kEAwEC;IAED;;;;OAIG;IACH,2BAHW,KAAK,GACH,OAAO,iCAAS,CA0B5B;IAED;;;;;OAKG;IACH,kCAJW,KAAK,SACL,WAAW,GACT,OAAO,iCAAS,CAsB5B;IAED;;;;;OAKG;IACH,mEAsEC;CACJ;uBAn2BmC,aAAa;mBAP9B,oCAAoC"}
|
|
@@ -202,26 +202,6 @@ export class EntityManager {
|
|
|
202
202
|
// console.timeEnd('updateExecutionOrder')
|
|
203
203
|
}
|
|
204
204
|
|
|
205
|
-
detachDataSet() {
|
|
206
|
-
const dataset = this.dataset;
|
|
207
|
-
|
|
208
|
-
if (dataset === null) {
|
|
209
|
-
//no dataset attached
|
|
210
|
-
return;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
//remove system observers
|
|
214
|
-
for (const [_, observer] of this.systemObservers) {
|
|
215
|
-
if (!observer.isConnected) {
|
|
216
|
-
continue;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
dataset.removeObserver(observer, true);
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
this.dataset = null;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
205
|
/**
|
|
226
206
|
* Get list of all components referenced by active systems
|
|
227
207
|
* @returns {Class[]}
|
|
@@ -274,6 +254,15 @@ export class EntityManager {
|
|
|
274
254
|
|
|
275
255
|
this.dataset = dataset;
|
|
276
256
|
|
|
257
|
+
for (const system of this.systems) {
|
|
258
|
+
if (system.state.get() !== SystemState.RUNNING) {
|
|
259
|
+
// not ready
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
system.handleDatasetAttached(dataset);
|
|
264
|
+
}
|
|
265
|
+
|
|
277
266
|
for (const [s, observer] of this.systemObservers) {
|
|
278
267
|
if (s.state.get() !== SystemState.RUNNING) {
|
|
279
268
|
continue;
|
|
@@ -284,6 +273,36 @@ export class EntityManager {
|
|
|
284
273
|
|
|
285
274
|
}
|
|
286
275
|
|
|
276
|
+
|
|
277
|
+
detachDataSet() {
|
|
278
|
+
const dataset = this.dataset;
|
|
279
|
+
|
|
280
|
+
if (dataset === null) {
|
|
281
|
+
//no dataset attached
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
//remove system observers
|
|
286
|
+
for (const [_, observer] of this.systemObservers) {
|
|
287
|
+
if (!observer.isConnected) {
|
|
288
|
+
continue;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
dataset.removeObserver(observer, true);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
for (const system of this.systems) {
|
|
295
|
+
if (system.state.get() !== SystemState.RUNNING) {
|
|
296
|
+
// not running
|
|
297
|
+
continue;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
system.handleDatasetAttached(dataset);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
this.dataset = null;
|
|
304
|
+
}
|
|
305
|
+
|
|
287
306
|
/**
|
|
288
307
|
* @template T
|
|
289
308
|
* @param {Class<T>} systemClass
|
|
@@ -517,7 +536,9 @@ export class EntityManager {
|
|
|
517
536
|
this.__execution_order_needs_update = true;
|
|
518
537
|
|
|
519
538
|
if (this.dataset !== null) {
|
|
520
|
-
|
|
539
|
+
// remove observed and unlink entities
|
|
540
|
+
this.dataset.removeObserver(systemObserver, true);
|
|
541
|
+
system.handleDatasetDetached(this.dataset);
|
|
521
542
|
}
|
|
522
543
|
|
|
523
544
|
await new Promise((resolve, reject) => {
|
|
@@ -608,6 +629,10 @@ export class EntityManager {
|
|
|
608
629
|
|
|
609
630
|
assert.notEqual(i, -1, "System was not found in the system list");
|
|
610
631
|
|
|
632
|
+
if (self.dataset !== null) {
|
|
633
|
+
system.handleDatasetAttached(self.dataset);
|
|
634
|
+
}
|
|
635
|
+
|
|
611
636
|
const observer = self.systemObservers.get(system);
|
|
612
637
|
|
|
613
638
|
if (observer !== undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityObserver.d.ts","sourceRoot":"","sources":["../../../../src/engine/ecs/EntityObserver.js"],"names":[],"mappings":"AAGA;IAoBI;;;;;;;OAOG;IACH,0FAHW,GAAC,EA+CX;IAvED;;;OAGG;IACH,eAFU,MAAM,CAEa;IAE7B;;;;OAIG;IACH,uBAFU,MAAM,EAAE,CAES;IAE3B;;;OAGG;IACH,SAFU,sBAAsB,GAAC,IAAI,CAEtB;IA0BX;;OAEG;IACH,oBAFU,MAAM,CAE2B;IAE3C;;;OAGG;IACH,kBAFU,CAAS,IAAK,eAAC,CAEgB;IAEzC;;;OAGG;IACH,gBAFU,CAAS,IAAK,eAAC,CAEW;IAEpC;;;OAGG;IACH,sBAAoC;IAEpC;;;OAGG;IACH,SAFU,GAAC,CAEW;IAG1B;;;OAGG;IACH,qCAqBC;IAED;;;OAGG;IACH,iBAFW,sBAAsB,
|
|
1
|
+
{"version":3,"file":"EntityObserver.d.ts","sourceRoot":"","sources":["../../../../src/engine/ecs/EntityObserver.js"],"names":[],"mappings":"AAGA;;;;GAIG;AACH;IAoBI;;;;;;;OAOG;IACH,0FAHW,GAAC,EA+CX;IAvED;;;OAGG;IACH,eAFU,MAAM,CAEa;IAE7B;;;;OAIG;IACH,uBAFU,MAAM,EAAE,CAES;IAE3B;;;OAGG;IACH,SAFU,sBAAsB,GAAC,IAAI,CAEtB;IA0BX;;OAEG;IACH,oBAFU,MAAM,CAE2B;IAE3C;;;OAGG;IACH,kBAFU,CAAS,IAAK,eAAC,CAEgB;IAEzC;;;OAGG;IACH,gBAFU,CAAS,IAAK,eAAC,CAEW;IAEpC;;;OAGG;IACH,sBAAoC;IAEpC;;;OAGG;IACH,SAFU,GAAC,CAEW;IAG1B;;;OAGG;IACH,qCAqBC;IAED;;;OAGG;IACH,iBAFW,sBAAsB,QAQhC;IAED;;;OAGG;IACH,mBAFY,OAAO,CAIlB;IAED;;OAEG;IACH,mBAQC;CACJ;uBA5IsB,6BAA6B"}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { assert } from "../../core/assert.js";
|
|
2
2
|
import { BitSet } from "../../core/binary/BitSet.js";
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Signaling component query.
|
|
6
|
+
* Enables definition of a component class tuple, which will then be observed; for any entity that completes the tuple - a notification will be dispatched, same for any broken tuples.
|
|
7
|
+
* see {@link EntityComponentDataset.addObserver}/{@link EntityComponentDataset.removeObserver}.
|
|
8
|
+
*/
|
|
4
9
|
export class EntityObserver {
|
|
5
10
|
/**
|
|
6
11
|
*
|
|
@@ -16,7 +21,7 @@ export class EntityObserver {
|
|
|
16
21
|
componentIndexMapping = [];
|
|
17
22
|
|
|
18
23
|
/**
|
|
19
|
-
*
|
|
24
|
+
* Currently attached dataset. `null` when not attached.
|
|
20
25
|
* @type {EntityComponentDataset|null}
|
|
21
26
|
*/
|
|
22
27
|
dataset = null;
|
|
@@ -103,10 +108,14 @@ export class EntityObserver {
|
|
|
103
108
|
}
|
|
104
109
|
|
|
105
110
|
/**
|
|
106
|
-
*
|
|
111
|
+
* A shortcut for {@link EntityComponentDataset.addObserver}
|
|
107
112
|
* @param {EntityComponentDataset} dataset
|
|
108
113
|
*/
|
|
109
114
|
connect(dataset) {
|
|
115
|
+
if (this.dataset !== null) {
|
|
116
|
+
throw new Error("Already attached to a dataset, disconnect first");
|
|
117
|
+
}
|
|
118
|
+
|
|
110
119
|
dataset.addObserver(this, true);
|
|
111
120
|
}
|
|
112
121
|
|
|
@@ -118,7 +127,14 @@ export class EntityObserver {
|
|
|
118
127
|
return this.dataset === null;
|
|
119
128
|
}
|
|
120
129
|
|
|
130
|
+
/**
|
|
131
|
+
* A shortcut for {@link EntityComponentDataset.removeObserver}
|
|
132
|
+
*/
|
|
121
133
|
disconnect() {
|
|
134
|
+
if (this.dataset === null) {
|
|
135
|
+
// not attached
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
122
138
|
//de-register updates
|
|
123
139
|
this.dataset.removeObserver(this);
|
|
124
140
|
this.dataset = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"System.d.ts","sourceRoot":"","sources":["../../../../src/engine/ecs/System.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,oBArBa,CAAC;IAuBV;;;;;OAKG;IACH,yBAFU,aAAa,CAEF;IAErB;;;;OAIG;IACH,gBAFU,aAAa,CAAE,WAAW,CAAC,CAEU;IAE/C
|
|
1
|
+
{"version":3,"file":"System.d.ts","sourceRoot":"","sources":["../../../../src/engine/ecs/System.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,oBArBa,CAAC;IAuBV;;;;;OAKG;IACH,yBAFU,aAAa,CAEF;IAErB;;;;OAIG;IACH,gBAFU,aAAa,CAAE,WAAW,CAAC,CAEU;IAE/C;;;;;OAKG;IACH,oBAAkB;IAElB;;;;;;;;;OASG;IACH,iBAFU,2BAA2B,EAAE,CAElB;IAGrB;;OAEG;IACH,mCAcC;IAED;;;;OAIG;IACH,sBAJa,CAAC,SACH,CAAC,GACA,MAAM,CA8BjB;IAED;;;;;;OAMG;IACH,uBAJW,aAAa,0DAOvB;IAED;;;;;;;OAOG;IACH,wBAJW,aAAa,0DAMvB;IAGD;;;;OAIG;IACH,wCAEC;IAED;;;;OAIG;IACH,0CAEC;IAED;;;;;;;;OAQG;IACH,+BAFW,sBAAsB,QAIhC;IAED;;;;;;;;OAQG;IACH,+BAFW,sBAAsB,QAIhC;IAIL;;;OAGG;IACH,mBAFU,OAAO,CAEQ;IAEzB;;;;OAIG;IACH,yBAA4B;IAG5B;;;OAGG;IACH,oBAAuB;CApBtB;;;;0BA2CS,MAAM;;;;;;;;0BA1OU,mCAAmC;qBADxC,6BAA6B"}
|
package/src/engine/ecs/System.js
CHANGED
|
@@ -49,8 +49,9 @@ export class System {
|
|
|
49
49
|
state = new ObservedValue(SystemState.INITIAL);
|
|
50
50
|
|
|
51
51
|
/**
|
|
52
|
-
*
|
|
53
|
-
* NOTE: do not modify this while the system is running
|
|
52
|
+
* Component classes which have to be present before the system links an entity.
|
|
53
|
+
* NOTE: do not modify this while the system is running.
|
|
54
|
+
* see {@link link} and {@link unlink} methods.
|
|
54
55
|
* @type {Array}
|
|
55
56
|
*/
|
|
56
57
|
dependencies = [];
|
|
@@ -123,10 +124,11 @@ export class System {
|
|
|
123
124
|
}
|
|
124
125
|
|
|
125
126
|
/**
|
|
126
|
-
*
|
|
127
|
+
* Invoked before system is used
|
|
128
|
+
* Managed by {@EntityManager}'s lifecycle. Do not call this manually.
|
|
127
129
|
* @param {EntityManager} entityManager
|
|
128
|
-
* @param {function} readyCallback
|
|
129
|
-
* @param {function} errorCallback
|
|
130
|
+
* @param {function} readyCallback must be called by the system when the startup process is finished
|
|
131
|
+
* @param {function} errorCallback must be called by the system if any issues occur during startup process that prevent completion
|
|
130
132
|
*/
|
|
131
133
|
startup(entityManager, readyCallback, errorCallback) {
|
|
132
134
|
this.entityManager = entityManager;
|
|
@@ -134,7 +136,9 @@ export class System {
|
|
|
134
136
|
}
|
|
135
137
|
|
|
136
138
|
/**
|
|
137
|
-
*
|
|
139
|
+
* Invoked when system is no longer needed.
|
|
140
|
+
* Good place to clean up any held resourced and terminate owned processes.
|
|
141
|
+
* Managed by {@EntityManager}'s lifecycle. Do not call this manually.
|
|
138
142
|
* @param {EntityManager} entityManager
|
|
139
143
|
* @param {function} readyCallback
|
|
140
144
|
* @param {function} errorCallback
|
|
@@ -143,12 +147,49 @@ export class System {
|
|
|
143
147
|
readyCallback();
|
|
144
148
|
}
|
|
145
149
|
|
|
146
|
-
link(component, entity) {
|
|
147
150
|
|
|
151
|
+
/**
|
|
152
|
+
* Called automatically when an entity gets a complete component tuple {@link this.dependencies}.
|
|
153
|
+
* Inputs are the same as dependencies, only instances instead of classes, plus there is an extra argument at the end, which is the entity ID.
|
|
154
|
+
* see {@link EntityObserver} for more implementation detail
|
|
155
|
+
*/
|
|
156
|
+
link(component, entity) {
|
|
157
|
+
// override as necessary
|
|
148
158
|
}
|
|
149
159
|
|
|
160
|
+
/**
|
|
161
|
+
* Called automatically when an entity breaks component tuple {@link this.dependencies}.
|
|
162
|
+
* Inputs are the same as dependencies, only instances instead of classes, plus there is an extra argument at the end, which is the entity ID.
|
|
163
|
+
* see {@link EntityObserver} for more implementation detail
|
|
164
|
+
*/
|
|
150
165
|
unlink(component, entity) {
|
|
166
|
+
// override as necessary
|
|
167
|
+
}
|
|
151
168
|
|
|
169
|
+
/**
|
|
170
|
+
* Invoked when a dataset is attached to the system, this happens before any entities are linked.
|
|
171
|
+
* Happens as a result of {@link EntityManager.attachDataSet}.
|
|
172
|
+
* It is generally advised *NOT* to modify the dataset here.
|
|
173
|
+
* Managed by {@EntityManager}'s lifecycle. Do not call this manually.
|
|
174
|
+
* Entirely optional, provides advanced functionality for situations where datasets are being switched on the fly.
|
|
175
|
+
* see {@link handleDatasetDetached} for the reverse.
|
|
176
|
+
* @param {EntityComponentDataset} dataset
|
|
177
|
+
*/
|
|
178
|
+
handleDatasetAttached(dataset) {
|
|
179
|
+
// override as necessary
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Invoked when dataset is about to be detached from the system, this happens after all entities have been unlinked.
|
|
184
|
+
* Happens as a result of {@link EntityManager.detachDataSet}.
|
|
185
|
+
* It is generally advised *NOT* to modify the dataset here.
|
|
186
|
+
* Managed by {@EntityManager}'s lifecycle. Do not call this manually.
|
|
187
|
+
* Entirely optional, provides advanced functionality for situations where datasets are being switched on the fly.
|
|
188
|
+
* see {@link handleDatasetAttached} for the reverse.
|
|
189
|
+
* @param {EntityComponentDataset} dataset
|
|
190
|
+
*/
|
|
191
|
+
handleDatasetDetached(dataset) {
|
|
192
|
+
// override as necessary
|
|
152
193
|
}
|
|
153
194
|
|
|
154
195
|
}
|