@react-three/fiber 8.0.6 → 8.0.7
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/CHANGELOG.md +6 -0
- package/dist/declarations/src/three-types.d.ts +0 -1
- package/dist/{index-0e758026.cjs.prod.js → index-4fb4daff.cjs.prod.js} +9 -3
- package/dist/{index-0076cbd6.cjs.dev.js → index-75d39ab1.cjs.dev.js} +9 -3
- package/dist/{index-91900b41.esm.js → index-e42f8ac9.esm.js} +9 -3
- package/dist/react-three-fiber.cjs.dev.js +9 -13
- package/dist/react-three-fiber.cjs.prod.js +9 -13
- package/dist/react-three-fiber.esm.js +10 -14
- package/native/dist/react-three-fiber-native.cjs.dev.js +9 -13
- package/native/dist/react-three-fiber-native.cjs.prod.js +9 -13
- package/native/dist/react-three-fiber-native.esm.js +10 -14
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -211,7 +211,10 @@ function detach(parent, child, type) {
|
|
|
211
211
|
target,
|
|
212
212
|
key
|
|
213
213
|
} = resolve(parent, type);
|
|
214
|
-
|
|
214
|
+
const previous = child.__r3f.previousAttach; // When the previous value was undefined, it means the value was never set to begin with
|
|
215
|
+
|
|
216
|
+
if (previous === undefined) delete target[key]; // Otherwise set the previous value
|
|
217
|
+
else target[key] = previous;
|
|
215
218
|
} else (_child$__r3f = child.__r3f) == null ? void 0 : _child$__r3f.previousAttach == null ? void 0 : _child$__r3f.previousAttach(parent, child);
|
|
216
219
|
|
|
217
220
|
(_child$__r3f2 = child.__r3f) == null ? true : delete _child$__r3f2.previousAttach;
|
|
@@ -304,9 +307,11 @@ function applyProps$1(instance, data) {
|
|
|
304
307
|
// use the prop constructor to find the default it should be
|
|
305
308
|
value = new targetProp.constructor(...memoized.args);
|
|
306
309
|
} else if (currentInstance.constructor) {
|
|
310
|
+
var _currentInstance$__r, _currentInstance$__r2;
|
|
311
|
+
|
|
307
312
|
// create a blank slate of the instance and copy the particular parameter.
|
|
308
313
|
// @ts-ignore
|
|
309
|
-
const defaultClassCall = new currentInstance.constructor(...currentInstance.__r3f.memoizedProps.args);
|
|
314
|
+
const defaultClassCall = new currentInstance.constructor(...((_currentInstance$__r = (_currentInstance$__r2 = currentInstance.__r3f) == null ? void 0 : _currentInstance$__r2.memoizedProps.args) != null ? _currentInstance$__r : []));
|
|
310
315
|
value = defaultClassCall[targetProp]; // destory the instance
|
|
311
316
|
|
|
312
317
|
if (defaultClassCall.dispose) defaultClassCall.dispose(); // instance does not have constructor, just set it to 0
|
|
@@ -1406,10 +1411,11 @@ function run(effects, timestamp) {
|
|
|
1406
1411
|
|
|
1407
1412
|
let subscribers;
|
|
1408
1413
|
let subscription;
|
|
1414
|
+
let delta;
|
|
1409
1415
|
|
|
1410
1416
|
function render$1(timestamp, state, frame) {
|
|
1411
1417
|
// Run local effects
|
|
1412
|
-
|
|
1418
|
+
delta = state.clock.getDelta(); // In frameloop='never' mode, clock times are updated using the provided timestamp
|
|
1413
1419
|
|
|
1414
1420
|
if (state.frameloop === 'never' && typeof timestamp === 'number') {
|
|
1415
1421
|
delta = timestamp - state.clock.elapsedTime;
|
|
@@ -211,7 +211,10 @@ function detach(parent, child, type) {
|
|
|
211
211
|
target,
|
|
212
212
|
key
|
|
213
213
|
} = resolve(parent, type);
|
|
214
|
-
|
|
214
|
+
const previous = child.__r3f.previousAttach; // When the previous value was undefined, it means the value was never set to begin with
|
|
215
|
+
|
|
216
|
+
if (previous === undefined) delete target[key]; // Otherwise set the previous value
|
|
217
|
+
else target[key] = previous;
|
|
215
218
|
} else (_child$__r3f = child.__r3f) == null ? void 0 : _child$__r3f.previousAttach == null ? void 0 : _child$__r3f.previousAttach(parent, child);
|
|
216
219
|
|
|
217
220
|
(_child$__r3f2 = child.__r3f) == null ? true : delete _child$__r3f2.previousAttach;
|
|
@@ -304,9 +307,11 @@ function applyProps$1(instance, data) {
|
|
|
304
307
|
// use the prop constructor to find the default it should be
|
|
305
308
|
value = new targetProp.constructor(...memoized.args);
|
|
306
309
|
} else if (currentInstance.constructor) {
|
|
310
|
+
var _currentInstance$__r, _currentInstance$__r2;
|
|
311
|
+
|
|
307
312
|
// create a blank slate of the instance and copy the particular parameter.
|
|
308
313
|
// @ts-ignore
|
|
309
|
-
const defaultClassCall = new currentInstance.constructor(...currentInstance.__r3f.memoizedProps.args);
|
|
314
|
+
const defaultClassCall = new currentInstance.constructor(...((_currentInstance$__r = (_currentInstance$__r2 = currentInstance.__r3f) == null ? void 0 : _currentInstance$__r2.memoizedProps.args) != null ? _currentInstance$__r : []));
|
|
310
315
|
value = defaultClassCall[targetProp]; // destory the instance
|
|
311
316
|
|
|
312
317
|
if (defaultClassCall.dispose) defaultClassCall.dispose(); // instance does not have constructor, just set it to 0
|
|
@@ -1406,10 +1411,11 @@ function run(effects, timestamp) {
|
|
|
1406
1411
|
|
|
1407
1412
|
let subscribers;
|
|
1408
1413
|
let subscription;
|
|
1414
|
+
let delta;
|
|
1409
1415
|
|
|
1410
1416
|
function render$1(timestamp, state, frame) {
|
|
1411
1417
|
// Run local effects
|
|
1412
|
-
|
|
1418
|
+
delta = state.clock.getDelta(); // In frameloop='never' mode, clock times are updated using the provided timestamp
|
|
1413
1419
|
|
|
1414
1420
|
if (state.frameloop === 'never' && typeof timestamp === 'number') {
|
|
1415
1421
|
delta = timestamp - state.clock.elapsedTime;
|
|
@@ -182,7 +182,10 @@ function detach(parent, child, type) {
|
|
|
182
182
|
target,
|
|
183
183
|
key
|
|
184
184
|
} = resolve(parent, type);
|
|
185
|
-
|
|
185
|
+
const previous = child.__r3f.previousAttach; // When the previous value was undefined, it means the value was never set to begin with
|
|
186
|
+
|
|
187
|
+
if (previous === undefined) delete target[key]; // Otherwise set the previous value
|
|
188
|
+
else target[key] = previous;
|
|
186
189
|
} else (_child$__r3f = child.__r3f) == null ? void 0 : _child$__r3f.previousAttach == null ? void 0 : _child$__r3f.previousAttach(parent, child);
|
|
187
190
|
|
|
188
191
|
(_child$__r3f2 = child.__r3f) == null ? true : delete _child$__r3f2.previousAttach;
|
|
@@ -275,9 +278,11 @@ function applyProps$1(instance, data) {
|
|
|
275
278
|
// use the prop constructor to find the default it should be
|
|
276
279
|
value = new targetProp.constructor(...memoized.args);
|
|
277
280
|
} else if (currentInstance.constructor) {
|
|
281
|
+
var _currentInstance$__r, _currentInstance$__r2;
|
|
282
|
+
|
|
278
283
|
// create a blank slate of the instance and copy the particular parameter.
|
|
279
284
|
// @ts-ignore
|
|
280
|
-
const defaultClassCall = new currentInstance.constructor(...currentInstance.__r3f.memoizedProps.args);
|
|
285
|
+
const defaultClassCall = new currentInstance.constructor(...((_currentInstance$__r = (_currentInstance$__r2 = currentInstance.__r3f) == null ? void 0 : _currentInstance$__r2.memoizedProps.args) != null ? _currentInstance$__r : []));
|
|
281
286
|
value = defaultClassCall[targetProp]; // destory the instance
|
|
282
287
|
|
|
283
288
|
if (defaultClassCall.dispose) defaultClassCall.dispose(); // instance does not have constructor, just set it to 0
|
|
@@ -1377,10 +1382,11 @@ function run(effects, timestamp) {
|
|
|
1377
1382
|
|
|
1378
1383
|
let subscribers;
|
|
1379
1384
|
let subscription;
|
|
1385
|
+
let delta;
|
|
1380
1386
|
|
|
1381
1387
|
function render$1(timestamp, state, frame) {
|
|
1382
1388
|
// Run local effects
|
|
1383
|
-
|
|
1389
|
+
delta = state.clock.getDelta(); // In frameloop='never' mode, clock times are updated using the provided timestamp
|
|
1384
1390
|
|
|
1385
1391
|
if (state.frameloop === 'never' && typeof timestamp === 'number') {
|
|
1386
1392
|
delta = timestamp - state.clock.elapsedTime;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var index = require('./index-
|
|
5
|
+
var index = require('./index-75d39ab1.cjs.dev.js');
|
|
6
6
|
var _extends = require('@babel/runtime/helpers/extends');
|
|
7
7
|
var React = require('react');
|
|
8
8
|
var THREE = require('three');
|
|
@@ -76,15 +76,13 @@ function createPointerEvents(store) {
|
|
|
76
76
|
var _events$handlers;
|
|
77
77
|
|
|
78
78
|
const {
|
|
79
|
-
|
|
79
|
+
setEvents,
|
|
80
80
|
events
|
|
81
81
|
} = store.getState();
|
|
82
82
|
events.disconnect == null ? void 0 : events.disconnect();
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
}));
|
|
83
|
+
setEvents({
|
|
84
|
+
connected: target
|
|
85
|
+
});
|
|
88
86
|
Object.entries((_events$handlers = events == null ? void 0 : events.handlers) != null ? _events$handlers : []).forEach(([name, event]) => {
|
|
89
87
|
const [eventName, passive] = DOM_EVENTS[name];
|
|
90
88
|
target.addEventListener(eventName, event, {
|
|
@@ -94,7 +92,7 @@ function createPointerEvents(store) {
|
|
|
94
92
|
},
|
|
95
93
|
disconnect: () => {
|
|
96
94
|
const {
|
|
97
|
-
|
|
95
|
+
setEvents,
|
|
98
96
|
events
|
|
99
97
|
} = store.getState();
|
|
100
98
|
|
|
@@ -107,11 +105,9 @@ function createPointerEvents(store) {
|
|
|
107
105
|
events.connected.removeEventListener(eventName, event);
|
|
108
106
|
}
|
|
109
107
|
});
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}
|
|
114
|
-
}));
|
|
108
|
+
setEvents({
|
|
109
|
+
connected: undefined
|
|
110
|
+
});
|
|
115
111
|
}
|
|
116
112
|
}
|
|
117
113
|
};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var index = require('./index-
|
|
5
|
+
var index = require('./index-4fb4daff.cjs.prod.js');
|
|
6
6
|
var _extends = require('@babel/runtime/helpers/extends');
|
|
7
7
|
var React = require('react');
|
|
8
8
|
var THREE = require('three');
|
|
@@ -76,15 +76,13 @@ function createPointerEvents(store) {
|
|
|
76
76
|
var _events$handlers;
|
|
77
77
|
|
|
78
78
|
const {
|
|
79
|
-
|
|
79
|
+
setEvents,
|
|
80
80
|
events
|
|
81
81
|
} = store.getState();
|
|
82
82
|
events.disconnect == null ? void 0 : events.disconnect();
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
}));
|
|
83
|
+
setEvents({
|
|
84
|
+
connected: target
|
|
85
|
+
});
|
|
88
86
|
Object.entries((_events$handlers = events == null ? void 0 : events.handlers) != null ? _events$handlers : []).forEach(([name, event]) => {
|
|
89
87
|
const [eventName, passive] = DOM_EVENTS[name];
|
|
90
88
|
target.addEventListener(eventName, event, {
|
|
@@ -94,7 +92,7 @@ function createPointerEvents(store) {
|
|
|
94
92
|
},
|
|
95
93
|
disconnect: () => {
|
|
96
94
|
const {
|
|
97
|
-
|
|
95
|
+
setEvents,
|
|
98
96
|
events
|
|
99
97
|
} = store.getState();
|
|
100
98
|
|
|
@@ -107,11 +105,9 @@ function createPointerEvents(store) {
|
|
|
107
105
|
events.connected.removeEventListener(eventName, event);
|
|
108
106
|
}
|
|
109
107
|
});
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}
|
|
114
|
-
}));
|
|
108
|
+
setEvents({
|
|
109
|
+
connected: undefined
|
|
110
|
+
});
|
|
115
111
|
}
|
|
116
112
|
}
|
|
117
113
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { c as createEvents, e as extend, u as useMemoizedFn, p as pick, o as omit, a as createRoot, b as unmountComponentAtNode } from './index-
|
|
2
|
-
export { t as ReactThreeFiber, v as _roots, s as act, m as addAfterEffect, l as addEffect, n as addTail, k as advance, h as applyProps, d as context, f as createPortal, a as createRoot, i as dispose, e as extend, q as getRootState, j as invalidate, g as reconciler, r as render, b as unmountComponentAtNode, y as useFrame, z as useGraph, A as useLoader, u as useMemoizedFn, w as useStore, x as useThree } from './index-
|
|
1
|
+
import { c as createEvents, e as extend, u as useMemoizedFn, p as pick, o as omit, a as createRoot, b as unmountComponentAtNode } from './index-e42f8ac9.esm.js';
|
|
2
|
+
export { t as ReactThreeFiber, v as _roots, s as act, m as addAfterEffect, l as addEffect, n as addTail, k as advance, h as applyProps, d as context, f as createPortal, a as createRoot, i as dispose, e as extend, q as getRootState, j as invalidate, g as reconciler, r as render, b as unmountComponentAtNode, y as useFrame, z as useGraph, A as useLoader, u as useMemoizedFn, w as useStore, x as useThree } from './index-e42f8ac9.esm.js';
|
|
3
3
|
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import * as THREE from 'three';
|
|
@@ -46,15 +46,13 @@ function createPointerEvents(store) {
|
|
|
46
46
|
var _events$handlers;
|
|
47
47
|
|
|
48
48
|
const {
|
|
49
|
-
|
|
49
|
+
setEvents,
|
|
50
50
|
events
|
|
51
51
|
} = store.getState();
|
|
52
52
|
events.disconnect == null ? void 0 : events.disconnect();
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
}));
|
|
53
|
+
setEvents({
|
|
54
|
+
connected: target
|
|
55
|
+
});
|
|
58
56
|
Object.entries((_events$handlers = events == null ? void 0 : events.handlers) != null ? _events$handlers : []).forEach(([name, event]) => {
|
|
59
57
|
const [eventName, passive] = DOM_EVENTS[name];
|
|
60
58
|
target.addEventListener(eventName, event, {
|
|
@@ -64,7 +62,7 @@ function createPointerEvents(store) {
|
|
|
64
62
|
},
|
|
65
63
|
disconnect: () => {
|
|
66
64
|
const {
|
|
67
|
-
|
|
65
|
+
setEvents,
|
|
68
66
|
events
|
|
69
67
|
} = store.getState();
|
|
70
68
|
|
|
@@ -77,11 +75,9 @@ function createPointerEvents(store) {
|
|
|
77
75
|
events.connected.removeEventListener(eventName, event);
|
|
78
76
|
}
|
|
79
77
|
});
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}
|
|
84
|
-
}));
|
|
78
|
+
setEvents({
|
|
79
|
+
connected: undefined
|
|
80
|
+
});
|
|
85
81
|
}
|
|
86
82
|
}
|
|
87
83
|
};
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var THREE = require('three');
|
|
6
6
|
var expoAsset = require('expo-asset');
|
|
7
|
-
var index = require('../../dist/index-
|
|
7
|
+
var index = require('../../dist/index-75d39ab1.cjs.dev.js');
|
|
8
8
|
var _extends = require('@babel/runtime/helpers/extends');
|
|
9
9
|
var React = require('react');
|
|
10
10
|
var mergeRefs = require('react-merge-refs');
|
|
@@ -94,32 +94,28 @@ function createTouchEvents(store) {
|
|
|
94
94
|
}), {}),
|
|
95
95
|
connect: () => {
|
|
96
96
|
const {
|
|
97
|
-
|
|
97
|
+
setEvents,
|
|
98
98
|
events
|
|
99
99
|
} = store.getState();
|
|
100
100
|
events.disconnect == null ? void 0 : events.disconnect();
|
|
101
101
|
const connected = new Pressability__default['default'](events == null ? void 0 : events.handlers);
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
}));
|
|
102
|
+
setEvents({
|
|
103
|
+
connected
|
|
104
|
+
});
|
|
107
105
|
const handlers = connected.getEventHandlers();
|
|
108
106
|
return handlers;
|
|
109
107
|
},
|
|
110
108
|
disconnect: () => {
|
|
111
109
|
const {
|
|
112
|
-
|
|
110
|
+
setEvents,
|
|
113
111
|
events
|
|
114
112
|
} = store.getState();
|
|
115
113
|
|
|
116
114
|
if (events.connected) {
|
|
117
115
|
events.connected.reset();
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
122
|
-
}));
|
|
116
|
+
setEvents({
|
|
117
|
+
connected: undefined
|
|
118
|
+
});
|
|
123
119
|
}
|
|
124
120
|
}
|
|
125
121
|
};
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var THREE = require('three');
|
|
6
6
|
var expoAsset = require('expo-asset');
|
|
7
|
-
var index = require('../../dist/index-
|
|
7
|
+
var index = require('../../dist/index-4fb4daff.cjs.prod.js');
|
|
8
8
|
var _extends = require('@babel/runtime/helpers/extends');
|
|
9
9
|
var React = require('react');
|
|
10
10
|
var mergeRefs = require('react-merge-refs');
|
|
@@ -94,32 +94,28 @@ function createTouchEvents(store) {
|
|
|
94
94
|
}), {}),
|
|
95
95
|
connect: () => {
|
|
96
96
|
const {
|
|
97
|
-
|
|
97
|
+
setEvents,
|
|
98
98
|
events
|
|
99
99
|
} = store.getState();
|
|
100
100
|
events.disconnect == null ? void 0 : events.disconnect();
|
|
101
101
|
const connected = new Pressability__default['default'](events == null ? void 0 : events.handlers);
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
}));
|
|
102
|
+
setEvents({
|
|
103
|
+
connected
|
|
104
|
+
});
|
|
107
105
|
const handlers = connected.getEventHandlers();
|
|
108
106
|
return handlers;
|
|
109
107
|
},
|
|
110
108
|
disconnect: () => {
|
|
111
109
|
const {
|
|
112
|
-
|
|
110
|
+
setEvents,
|
|
113
111
|
events
|
|
114
112
|
} = store.getState();
|
|
115
113
|
|
|
116
114
|
if (events.connected) {
|
|
117
115
|
events.connected.reset();
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
122
|
-
}));
|
|
116
|
+
setEvents({
|
|
117
|
+
connected: undefined
|
|
118
|
+
});
|
|
123
119
|
}
|
|
124
120
|
}
|
|
125
121
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as THREE from 'three';
|
|
2
2
|
import { Asset } from 'expo-asset';
|
|
3
|
-
import { c as createEvents, e as extend, u as useMemoizedFn, p as pick, o as omit, a as createRoot, b as unmountComponentAtNode } from '../../dist/index-
|
|
4
|
-
export { t as ReactThreeFiber, v as _roots, s as act, m as addAfterEffect, l as addEffect, n as addTail, k as advance, h as applyProps, d as context, f as createPortal, a as createRoot, i as dispose, e as extend, q as getRootState, j as invalidate, g as reconciler, r as render, b as unmountComponentAtNode, y as useFrame, z as useGraph, A as useLoader, u as useMemoizedFn, w as useStore, x as useThree } from '../../dist/index-
|
|
3
|
+
import { c as createEvents, e as extend, u as useMemoizedFn, p as pick, o as omit, a as createRoot, b as unmountComponentAtNode } from '../../dist/index-e42f8ac9.esm.js';
|
|
4
|
+
export { t as ReactThreeFiber, v as _roots, s as act, m as addAfterEffect, l as addEffect, n as addTail, k as advance, h as applyProps, d as context, f as createPortal, a as createRoot, i as dispose, e as extend, q as getRootState, j as invalidate, g as reconciler, r as render, b as unmountComponentAtNode, y as useFrame, z as useGraph, A as useLoader, u as useMemoizedFn, w as useStore, x as useThree } from '../../dist/index-e42f8ac9.esm.js';
|
|
5
5
|
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
6
6
|
import * as React from 'react';
|
|
7
7
|
import mergeRefs from 'react-merge-refs';
|
|
@@ -64,32 +64,28 @@ function createTouchEvents(store) {
|
|
|
64
64
|
}), {}),
|
|
65
65
|
connect: () => {
|
|
66
66
|
const {
|
|
67
|
-
|
|
67
|
+
setEvents,
|
|
68
68
|
events
|
|
69
69
|
} = store.getState();
|
|
70
70
|
events.disconnect == null ? void 0 : events.disconnect();
|
|
71
71
|
const connected = new Pressability(events == null ? void 0 : events.handlers);
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}
|
|
76
|
-
}));
|
|
72
|
+
setEvents({
|
|
73
|
+
connected
|
|
74
|
+
});
|
|
77
75
|
const handlers = connected.getEventHandlers();
|
|
78
76
|
return handlers;
|
|
79
77
|
},
|
|
80
78
|
disconnect: () => {
|
|
81
79
|
const {
|
|
82
|
-
|
|
80
|
+
setEvents,
|
|
83
81
|
events
|
|
84
82
|
} = store.getState();
|
|
85
83
|
|
|
86
84
|
if (events.connected) {
|
|
87
85
|
events.connected.reset();
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
}
|
|
92
|
-
}));
|
|
86
|
+
setEvents({
|
|
87
|
+
connected: undefined
|
|
88
|
+
});
|
|
93
89
|
}
|
|
94
90
|
}
|
|
95
91
|
};
|