@@ -17,129 +17,6 @@ let cameras = [
17
17
18
18
let camera = cameras [ 0 ] ;
19
19
20
- function getProjectionMatrix ( fx , fy , width , height ) {
21
- const znear = 0.2 ;
22
- const zfar = 200 ;
23
- return [
24
- [ ( 2 * fx ) / width , 0 , 0 , 0 ] ,
25
- [ 0 , - ( 2 * fy ) / height , 0 , 0 ] ,
26
- [ 0 , 0 , zfar / ( zfar - znear ) , 1 ] ,
27
- [ 0 , 0 , - ( zfar * znear ) / ( zfar - znear ) , 0 ] ,
28
- ] . flat ( ) ;
29
- }
30
-
31
- function getViewMatrix ( camera ) {
32
- const R = camera . rotation . flat ( ) ;
33
- const t = camera . position ;
34
- const camToWorld = [
35
- [ R [ 0 ] , R [ 1 ] , R [ 2 ] , 0 ] ,
36
- [ R [ 3 ] , R [ 4 ] , R [ 5 ] , 0 ] ,
37
- [ R [ 6 ] , R [ 7 ] , R [ 8 ] , 0 ] ,
38
- [ - t [ 0 ] * R [ 0 ] - t [ 1 ] * R [ 3 ] - t [ 2 ] * R [ 6 ] , - t [ 0 ] * R [ 1 ] - t [ 1 ] * R [ 4 ] - t [ 2 ] * R [ 7 ] , - t [ 0 ] * R [ 2 ] - t [ 1 ] * R [ 5 ] - t [ 2 ] * R [ 8 ] , 1 ] ,
39
- ] . flat ( ) ;
40
- return camToWorld ;
41
- }
42
-
43
- function multiply4 ( a , b ) {
44
- return [
45
- b [ 0 ] * a [ 0 ] + b [ 1 ] * a [ 4 ] + b [ 2 ] * a [ 8 ] + b [ 3 ] * a [ 12 ] ,
46
- b [ 0 ] * a [ 1 ] + b [ 1 ] * a [ 5 ] + b [ 2 ] * a [ 9 ] + b [ 3 ] * a [ 13 ] ,
47
- b [ 0 ] * a [ 2 ] + b [ 1 ] * a [ 6 ] + b [ 2 ] * a [ 10 ] + b [ 3 ] * a [ 14 ] ,
48
- b [ 0 ] * a [ 3 ] + b [ 1 ] * a [ 7 ] + b [ 2 ] * a [ 11 ] + b [ 3 ] * a [ 15 ] ,
49
- b [ 4 ] * a [ 0 ] + b [ 5 ] * a [ 4 ] + b [ 6 ] * a [ 8 ] + b [ 7 ] * a [ 12 ] ,
50
- b [ 4 ] * a [ 1 ] + b [ 5 ] * a [ 5 ] + b [ 6 ] * a [ 9 ] + b [ 7 ] * a [ 13 ] ,
51
- b [ 4 ] * a [ 2 ] + b [ 5 ] * a [ 6 ] + b [ 6 ] * a [ 10 ] + b [ 7 ] * a [ 14 ] ,
52
- b [ 4 ] * a [ 3 ] + b [ 5 ] * a [ 7 ] + b [ 6 ] * a [ 11 ] + b [ 7 ] * a [ 15 ] ,
53
- b [ 8 ] * a [ 0 ] + b [ 9 ] * a [ 4 ] + b [ 10 ] * a [ 8 ] + b [ 11 ] * a [ 12 ] ,
54
- b [ 8 ] * a [ 1 ] + b [ 9 ] * a [ 5 ] + b [ 10 ] * a [ 9 ] + b [ 11 ] * a [ 13 ] ,
55
- b [ 8 ] * a [ 2 ] + b [ 9 ] * a [ 6 ] + b [ 10 ] * a [ 10 ] + b [ 11 ] * a [ 14 ] ,
56
- b [ 8 ] * a [ 3 ] + b [ 9 ] * a [ 7 ] + b [ 10 ] * a [ 11 ] + b [ 11 ] * a [ 15 ] ,
57
- b [ 12 ] * a [ 0 ] + b [ 13 ] * a [ 4 ] + b [ 14 ] * a [ 8 ] + b [ 15 ] * a [ 12 ] ,
58
- b [ 12 ] * a [ 1 ] + b [ 13 ] * a [ 5 ] + b [ 14 ] * a [ 9 ] + b [ 15 ] * a [ 13 ] ,
59
- b [ 12 ] * a [ 2 ] + b [ 13 ] * a [ 6 ] + b [ 14 ] * a [ 10 ] + b [ 15 ] * a [ 14 ] ,
60
- b [ 12 ] * a [ 3 ] + b [ 13 ] * a [ 7 ] + b [ 14 ] * a [ 11 ] + b [ 15 ] * a [ 15 ] ,
61
- ] ;
62
- }
63
-
64
- function invert4 ( a ) {
65
- let b00 = a [ 0 ] * a [ 5 ] - a [ 1 ] * a [ 4 ] ;
66
- let b01 = a [ 0 ] * a [ 6 ] - a [ 2 ] * a [ 4 ] ;
67
- let b02 = a [ 0 ] * a [ 7 ] - a [ 3 ] * a [ 4 ] ;
68
- let b03 = a [ 1 ] * a [ 6 ] - a [ 2 ] * a [ 5 ] ;
69
- let b04 = a [ 1 ] * a [ 7 ] - a [ 3 ] * a [ 5 ] ;
70
- let b05 = a [ 2 ] * a [ 7 ] - a [ 3 ] * a [ 6 ] ;
71
- let b06 = a [ 8 ] * a [ 13 ] - a [ 9 ] * a [ 12 ] ;
72
- let b07 = a [ 8 ] * a [ 14 ] - a [ 10 ] * a [ 12 ] ;
73
- let b08 = a [ 8 ] * a [ 15 ] - a [ 11 ] * a [ 12 ] ;
74
- let b09 = a [ 9 ] * a [ 14 ] - a [ 10 ] * a [ 13 ] ;
75
- let b10 = a [ 9 ] * a [ 15 ] - a [ 11 ] * a [ 13 ] ;
76
- let b11 = a [ 10 ] * a [ 15 ] - a [ 11 ] * a [ 14 ] ;
77
- let det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;
78
- if ( ! det ) return null ;
79
- return [
80
- ( a [ 5 ] * b11 - a [ 6 ] * b10 + a [ 7 ] * b09 ) / det ,
81
- ( a [ 2 ] * b10 - a [ 1 ] * b11 - a [ 3 ] * b09 ) / det ,
82
- ( a [ 13 ] * b05 - a [ 14 ] * b04 + a [ 15 ] * b03 ) / det ,
83
- ( a [ 10 ] * b04 - a [ 9 ] * b05 - a [ 11 ] * b03 ) / det ,
84
- ( a [ 6 ] * b08 - a [ 4 ] * b11 - a [ 7 ] * b07 ) / det ,
85
- ( a [ 0 ] * b11 - a [ 2 ] * b08 + a [ 3 ] * b07 ) / det ,
86
- ( a [ 14 ] * b02 - a [ 12 ] * b05 - a [ 15 ] * b01 ) / det ,
87
- ( a [ 8 ] * b05 - a [ 10 ] * b02 + a [ 11 ] * b01 ) / det ,
88
- ( a [ 4 ] * b10 - a [ 5 ] * b08 + a [ 7 ] * b06 ) / det ,
89
- ( a [ 1 ] * b08 - a [ 0 ] * b10 - a [ 3 ] * b06 ) / det ,
90
- ( a [ 12 ] * b04 - a [ 13 ] * b02 + a [ 15 ] * b00 ) / det ,
91
- ( a [ 9 ] * b02 - a [ 8 ] * b04 - a [ 11 ] * b00 ) / det ,
92
- ( a [ 5 ] * b07 - a [ 4 ] * b09 - a [ 6 ] * b06 ) / det ,
93
- ( a [ 0 ] * b09 - a [ 1 ] * b07 + a [ 2 ] * b06 ) / det ,
94
- ( a [ 13 ] * b01 - a [ 12 ] * b03 - a [ 14 ] * b00 ) / det ,
95
- ( a [ 8 ] * b03 - a [ 9 ] * b01 + a [ 10 ] * b00 ) / det ,
96
- ] ;
97
- }
98
-
99
- function rotate4 ( a , rad , x , y , z ) {
100
- let len = Math . hypot ( x , y , z ) ;
101
- x /= len ;
102
- y /= len ;
103
- z /= len ;
104
- let s = Math . sin ( rad ) ;
105
- let c = Math . cos ( rad ) ;
106
- let t = 1 - c ;
107
- let b00 = x * x * t + c ;
108
- let b01 = y * x * t + z * s ;
109
- let b02 = z * x * t - y * s ;
110
- let b10 = x * y * t - z * s ;
111
- let b11 = y * y * t + c ;
112
- let b12 = z * y * t + x * s ;
113
- let b20 = x * z * t + y * s ;
114
- let b21 = y * z * t - x * s ;
115
- let b22 = z * z * t + c ;
116
- return [
117
- a [ 0 ] * b00 + a [ 4 ] * b01 + a [ 8 ] * b02 ,
118
- a [ 1 ] * b00 + a [ 5 ] * b01 + a [ 9 ] * b02 ,
119
- a [ 2 ] * b00 + a [ 6 ] * b01 + a [ 10 ] * b02 ,
120
- a [ 3 ] * b00 + a [ 7 ] * b01 + a [ 11 ] * b02 ,
121
- a [ 0 ] * b10 + a [ 4 ] * b11 + a [ 8 ] * b12 ,
122
- a [ 1 ] * b10 + a [ 5 ] * b11 + a [ 9 ] * b12 ,
123
- a [ 2 ] * b10 + a [ 6 ] * b11 + a [ 10 ] * b12 ,
124
- a [ 3 ] * b10 + a [ 7 ] * b11 + a [ 11 ] * b12 ,
125
- a [ 0 ] * b20 + a [ 4 ] * b21 + a [ 8 ] * b22 ,
126
- a [ 1 ] * b20 + a [ 5 ] * b21 + a [ 9 ] * b22 ,
127
- a [ 2 ] * b20 + a [ 6 ] * b21 + a [ 10 ] * b22 ,
128
- a [ 3 ] * b20 + a [ 7 ] * b21 + a [ 11 ] * b22 ,
129
- ...a . slice ( 12 , 16 ) ,
130
- ] ;
131
- }
132
-
133
- function translate4 ( a , x , y , z ) {
134
- return [
135
- ...a . slice ( 0 , 12 ) ,
136
- a [ 0 ] * x + a [ 4 ] * y + a [ 8 ] * z + a [ 12 ] ,
137
- a [ 1 ] * x + a [ 5 ] * y + a [ 9 ] * z + a [ 13 ] ,
138
- a [ 2 ] * x + a [ 6 ] * y + a [ 10 ] * z + a [ 14 ] ,
139
- a [ 3 ] * x + a [ 7 ] * y + a [ 11 ] * z + a [ 15 ] ,
140
- ] ;
141
- }
142
-
143
20
function createWorker ( self ) {
144
21
let vertexCount = 0 ;
145
22
let viewProj ;
@@ -148,10 +25,6 @@ function createWorker(self) {
148
25
let lastVertexCount = 0 ;
149
26
let positions ;
150
27
151
- function generateTexture ( ) {
152
- if ( ! positions ) return ;
153
- }
154
-
155
28
var _floatView = new Float32Array ( 1 ) ;
156
29
var _int32View = new Int32Array ( _floatView . buffer ) ;
157
30
@@ -192,7 +65,6 @@ function createWorker(self) {
192
65
let dist = Math . hypot ( ...[ 2 , 6 , 10 ] . map ( ( k ) => lastProj [ k ] - viewProj [ k ] ) ) ;
193
66
if ( dist < 0.01 ) return ;
194
67
} else {
195
- generateTexture ( ) ;
196
68
lastVertexCount = vertexCount ;
197
69
}
198
70
@@ -1017,7 +889,6 @@ async function main() {
1017
889
document . getElementById ( "spinner" ) . style . display = "none" ;
1018
890
gl . uniformMatrix4fv ( u_view , false , actualViewMatrix ) ;
1019
891
gl . uniform1f ( u_time , Math . sin ( Date . now ( ) / 1000 ) / 2 + 1 / 2 ) ;
1020
- // gl.uniform1f(u_time, Math.sin(Date.now() / 1000) + 1 / 2);
1021
892
1022
893
gl . clear ( gl . COLOR_BUFFER_BIT ) ;
1023
894
gl . drawArraysInstanced ( gl . TRIANGLE_FAN , 0 , 4 , vertexCount ) ;
@@ -1033,9 +904,6 @@ async function main() {
1033
904
document . getElementById ( "progress" ) . style . display = "none" ;
1034
905
}
1035
906
fps . innerText = Math . round ( avgFps ) + " fps" ;
1036
- // if (isNaN(currentCameraIndex)) {
1037
- // camid.innerText = "";
1038
- // }
1039
907
lastFrame = now ;
1040
908
requestAnimationFrame ( frame ) ;
1041
909
} ;
@@ -1190,3 +1058,126 @@ async function readChunks(reader, chunks, handleChunk) {
1190
1058
}
1191
1059
if ( chunk ) handleChunk ( chunk , buffer . buffer , 0 , chunks ) ;
1192
1060
}
1061
+
1062
+ function getProjectionMatrix ( fx , fy , width , height ) {
1063
+ const znear = 0.2 ;
1064
+ const zfar = 200 ;
1065
+ return [
1066
+ [ ( 2 * fx ) / width , 0 , 0 , 0 ] ,
1067
+ [ 0 , - ( 2 * fy ) / height , 0 , 0 ] ,
1068
+ [ 0 , 0 , zfar / ( zfar - znear ) , 1 ] ,
1069
+ [ 0 , 0 , - ( zfar * znear ) / ( zfar - znear ) , 0 ] ,
1070
+ ] . flat ( ) ;
1071
+ }
1072
+
1073
+ function getViewMatrix ( camera ) {
1074
+ const R = camera . rotation . flat ( ) ;
1075
+ const t = camera . position ;
1076
+ const camToWorld = [
1077
+ [ R [ 0 ] , R [ 1 ] , R [ 2 ] , 0 ] ,
1078
+ [ R [ 3 ] , R [ 4 ] , R [ 5 ] , 0 ] ,
1079
+ [ R [ 6 ] , R [ 7 ] , R [ 8 ] , 0 ] ,
1080
+ [ - t [ 0 ] * R [ 0 ] - t [ 1 ] * R [ 3 ] - t [ 2 ] * R [ 6 ] , - t [ 0 ] * R [ 1 ] - t [ 1 ] * R [ 4 ] - t [ 2 ] * R [ 7 ] , - t [ 0 ] * R [ 2 ] - t [ 1 ] * R [ 5 ] - t [ 2 ] * R [ 8 ] , 1 ] ,
1081
+ ] . flat ( ) ;
1082
+ return camToWorld ;
1083
+ }
1084
+
1085
+ function multiply4 ( a , b ) {
1086
+ return [
1087
+ b [ 0 ] * a [ 0 ] + b [ 1 ] * a [ 4 ] + b [ 2 ] * a [ 8 ] + b [ 3 ] * a [ 12 ] ,
1088
+ b [ 0 ] * a [ 1 ] + b [ 1 ] * a [ 5 ] + b [ 2 ] * a [ 9 ] + b [ 3 ] * a [ 13 ] ,
1089
+ b [ 0 ] * a [ 2 ] + b [ 1 ] * a [ 6 ] + b [ 2 ] * a [ 10 ] + b [ 3 ] * a [ 14 ] ,
1090
+ b [ 0 ] * a [ 3 ] + b [ 1 ] * a [ 7 ] + b [ 2 ] * a [ 11 ] + b [ 3 ] * a [ 15 ] ,
1091
+ b [ 4 ] * a [ 0 ] + b [ 5 ] * a [ 4 ] + b [ 6 ] * a [ 8 ] + b [ 7 ] * a [ 12 ] ,
1092
+ b [ 4 ] * a [ 1 ] + b [ 5 ] * a [ 5 ] + b [ 6 ] * a [ 9 ] + b [ 7 ] * a [ 13 ] ,
1093
+ b [ 4 ] * a [ 2 ] + b [ 5 ] * a [ 6 ] + b [ 6 ] * a [ 10 ] + b [ 7 ] * a [ 14 ] ,
1094
+ b [ 4 ] * a [ 3 ] + b [ 5 ] * a [ 7 ] + b [ 6 ] * a [ 11 ] + b [ 7 ] * a [ 15 ] ,
1095
+ b [ 8 ] * a [ 0 ] + b [ 9 ] * a [ 4 ] + b [ 10 ] * a [ 8 ] + b [ 11 ] * a [ 12 ] ,
1096
+ b [ 8 ] * a [ 1 ] + b [ 9 ] * a [ 5 ] + b [ 10 ] * a [ 9 ] + b [ 11 ] * a [ 13 ] ,
1097
+ b [ 8 ] * a [ 2 ] + b [ 9 ] * a [ 6 ] + b [ 10 ] * a [ 10 ] + b [ 11 ] * a [ 14 ] ,
1098
+ b [ 8 ] * a [ 3 ] + b [ 9 ] * a [ 7 ] + b [ 10 ] * a [ 11 ] + b [ 11 ] * a [ 15 ] ,
1099
+ b [ 12 ] * a [ 0 ] + b [ 13 ] * a [ 4 ] + b [ 14 ] * a [ 8 ] + b [ 15 ] * a [ 12 ] ,
1100
+ b [ 12 ] * a [ 1 ] + b [ 13 ] * a [ 5 ] + b [ 14 ] * a [ 9 ] + b [ 15 ] * a [ 13 ] ,
1101
+ b [ 12 ] * a [ 2 ] + b [ 13 ] * a [ 6 ] + b [ 14 ] * a [ 10 ] + b [ 15 ] * a [ 14 ] ,
1102
+ b [ 12 ] * a [ 3 ] + b [ 13 ] * a [ 7 ] + b [ 14 ] * a [ 11 ] + b [ 15 ] * a [ 15 ] ,
1103
+ ] ;
1104
+ }
1105
+
1106
+ function invert4 ( a ) {
1107
+ let b00 = a [ 0 ] * a [ 5 ] - a [ 1 ] * a [ 4 ] ;
1108
+ let b01 = a [ 0 ] * a [ 6 ] - a [ 2 ] * a [ 4 ] ;
1109
+ let b02 = a [ 0 ] * a [ 7 ] - a [ 3 ] * a [ 4 ] ;
1110
+ let b03 = a [ 1 ] * a [ 6 ] - a [ 2 ] * a [ 5 ] ;
1111
+ let b04 = a [ 1 ] * a [ 7 ] - a [ 3 ] * a [ 5 ] ;
1112
+ let b05 = a [ 2 ] * a [ 7 ] - a [ 3 ] * a [ 6 ] ;
1113
+ let b06 = a [ 8 ] * a [ 13 ] - a [ 9 ] * a [ 12 ] ;
1114
+ let b07 = a [ 8 ] * a [ 14 ] - a [ 10 ] * a [ 12 ] ;
1115
+ let b08 = a [ 8 ] * a [ 15 ] - a [ 11 ] * a [ 12 ] ;
1116
+ let b09 = a [ 9 ] * a [ 14 ] - a [ 10 ] * a [ 13 ] ;
1117
+ let b10 = a [ 9 ] * a [ 15 ] - a [ 11 ] * a [ 13 ] ;
1118
+ let b11 = a [ 10 ] * a [ 15 ] - a [ 11 ] * a [ 14 ] ;
1119
+ let det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;
1120
+ if ( ! det ) return null ;
1121
+ return [
1122
+ ( a [ 5 ] * b11 - a [ 6 ] * b10 + a [ 7 ] * b09 ) / det ,
1123
+ ( a [ 2 ] * b10 - a [ 1 ] * b11 - a [ 3 ] * b09 ) / det ,
1124
+ ( a [ 13 ] * b05 - a [ 14 ] * b04 + a [ 15 ] * b03 ) / det ,
1125
+ ( a [ 10 ] * b04 - a [ 9 ] * b05 - a [ 11 ] * b03 ) / det ,
1126
+ ( a [ 6 ] * b08 - a [ 4 ] * b11 - a [ 7 ] * b07 ) / det ,
1127
+ ( a [ 0 ] * b11 - a [ 2 ] * b08 + a [ 3 ] * b07 ) / det ,
1128
+ ( a [ 14 ] * b02 - a [ 12 ] * b05 - a [ 15 ] * b01 ) / det ,
1129
+ ( a [ 8 ] * b05 - a [ 10 ] * b02 + a [ 11 ] * b01 ) / det ,
1130
+ ( a [ 4 ] * b10 - a [ 5 ] * b08 + a [ 7 ] * b06 ) / det ,
1131
+ ( a [ 1 ] * b08 - a [ 0 ] * b10 - a [ 3 ] * b06 ) / det ,
1132
+ ( a [ 12 ] * b04 - a [ 13 ] * b02 + a [ 15 ] * b00 ) / det ,
1133
+ ( a [ 9 ] * b02 - a [ 8 ] * b04 - a [ 11 ] * b00 ) / det ,
1134
+ ( a [ 5 ] * b07 - a [ 4 ] * b09 - a [ 6 ] * b06 ) / det ,
1135
+ ( a [ 0 ] * b09 - a [ 1 ] * b07 + a [ 2 ] * b06 ) / det ,
1136
+ ( a [ 13 ] * b01 - a [ 12 ] * b03 - a [ 14 ] * b00 ) / det ,
1137
+ ( a [ 8 ] * b03 - a [ 9 ] * b01 + a [ 10 ] * b00 ) / det ,
1138
+ ] ;
1139
+ }
1140
+
1141
+ function rotate4 ( a , rad , x , y , z ) {
1142
+ let len = Math . hypot ( x , y , z ) ;
1143
+ x /= len ;
1144
+ y /= len ;
1145
+ z /= len ;
1146
+ let s = Math . sin ( rad ) ;
1147
+ let c = Math . cos ( rad ) ;
1148
+ let t = 1 - c ;
1149
+ let b00 = x * x * t + c ;
1150
+ let b01 = y * x * t + z * s ;
1151
+ let b02 = z * x * t - y * s ;
1152
+ let b10 = x * y * t - z * s ;
1153
+ let b11 = y * y * t + c ;
1154
+ let b12 = z * y * t + x * s ;
1155
+ let b20 = x * z * t + y * s ;
1156
+ let b21 = y * z * t - x * s ;
1157
+ let b22 = z * z * t + c ;
1158
+ return [
1159
+ a [ 0 ] * b00 + a [ 4 ] * b01 + a [ 8 ] * b02 ,
1160
+ a [ 1 ] * b00 + a [ 5 ] * b01 + a [ 9 ] * b02 ,
1161
+ a [ 2 ] * b00 + a [ 6 ] * b01 + a [ 10 ] * b02 ,
1162
+ a [ 3 ] * b00 + a [ 7 ] * b01 + a [ 11 ] * b02 ,
1163
+ a [ 0 ] * b10 + a [ 4 ] * b11 + a [ 8 ] * b12 ,
1164
+ a [ 1 ] * b10 + a [ 5 ] * b11 + a [ 9 ] * b12 ,
1165
+ a [ 2 ] * b10 + a [ 6 ] * b11 + a [ 10 ] * b12 ,
1166
+ a [ 3 ] * b10 + a [ 7 ] * b11 + a [ 11 ] * b12 ,
1167
+ a [ 0 ] * b20 + a [ 4 ] * b21 + a [ 8 ] * b22 ,
1168
+ a [ 1 ] * b20 + a [ 5 ] * b21 + a [ 9 ] * b22 ,
1169
+ a [ 2 ] * b20 + a [ 6 ] * b21 + a [ 10 ] * b22 ,
1170
+ a [ 3 ] * b20 + a [ 7 ] * b21 + a [ 11 ] * b22 ,
1171
+ ...a . slice ( 12 , 16 ) ,
1172
+ ] ;
1173
+ }
1174
+
1175
+ function translate4 ( a , x , y , z ) {
1176
+ return [
1177
+ ...a . slice ( 0 , 12 ) ,
1178
+ a [ 0 ] * x + a [ 4 ] * y + a [ 8 ] * z + a [ 12 ] ,
1179
+ a [ 1 ] * x + a [ 5 ] * y + a [ 9 ] * z + a [ 13 ] ,
1180
+ a [ 2 ] * x + a [ 6 ] * y + a [ 10 ] * z + a [ 14 ] ,
1181
+ a [ 3 ] * x + a [ 7 ] * y + a [ 11 ] * z + a [ 15 ] ,
1182
+ ] ;
1183
+ }
0 commit comments