1 |
PRO WEED, ndt, tsample, icasea |
2 |
|
3 |
idldir='$JSOCROOT/proj/globalhs/scripts/idl/' |
4 |
|
5 |
binmics=1e6/(ndt*tsample) |
6 |
nt=1 ; May no longer work for nt>1 |
7 |
|
8 |
if (icasea le 2) then begin |
9 |
iasym=0 |
10 |
nm=24 |
11 |
paroff=7 |
12 |
sigoff=5 |
13 |
aoff=12 |
14 |
y0=0.30 |
15 |
dy=0.10 |
16 |
endif else begin |
17 |
iasym=1 |
18 |
nm=26 |
19 |
paroff=8 |
20 |
sigoff=6 |
21 |
aoff=14 |
22 |
y0=0.36 |
23 |
dy=0.09 |
24 |
end |
25 |
|
26 |
y6=dblarr(nm,310,40,nt) |
27 |
y18=dblarr(nm+24,310,40,nt) |
28 |
y36=dblarr(nm+60,310,40,nt) |
29 |
par=dblarr(12+iasym,310,40,nt) |
30 |
a0=dblarr(9,310,40) |
31 |
names1=strarr(nt) |
32 |
names2=strarr(nt) |
33 |
nms6=lonarr(nt) |
34 |
nms18=lonarr(nt) |
35 |
nms36=lonarr(nt) |
36 |
openr,1,'list' |
37 |
for it=0,nt-1 do begin |
38 |
nm6=0l |
39 |
nm18=0l |
40 |
nm36=0l |
41 |
q='xxx' |
42 |
readf,1,nm6,nm18,nm36,q |
43 |
q1=str_sep(q,' ') |
44 |
name1=q1(1) |
45 |
name2=q1(2) |
46 |
print,it,nm6,nm18,nm36,' ',name1,' ',name2 |
47 |
names1(it)=name1 |
48 |
names2(it)=name2 |
49 |
nms6(it)=nm6 |
50 |
nms18(it)=nm18 |
51 |
nms36(it)=nm36 |
52 |
q=dblarr(nm,nm6) |
53 |
; openr,2,'m'+name1+'q.'+name2 |
54 |
openr,2,'m'+name1+'q' |
55 |
readf,2,q |
56 |
close,2 |
57 |
for im=0,nm6-1 do y6(*,q(0,im),q(1,im),it)=q(*,im) |
58 |
if (nm18 ne 0) then begin |
59 |
q=dblarr(nm+24,nm18) |
60 |
; openr,2,'m'+name1+'q.'+name2+'.18' |
61 |
openr,2,'m'+name1+'q.18' |
62 |
readf,2,q |
63 |
close,2 |
64 |
for im=0,nm18-1 do y18(*,q(0,im),q(1,im),it)=q(*,im) |
65 |
end |
66 |
if (nm36 ne 0) then begin |
67 |
q=dblarr(nm+60,nm36) |
68 |
; openr,2,'m'+name1+'q.'+name2+'.36' |
69 |
openr,2,'m'+name1+'q.36' |
70 |
readf,2,q |
71 |
close,2 |
72 |
for im=0,nm36-1 do y36(*,q(0,im),q(1,im),it)=q(*,im) |
73 |
end |
74 |
q=dblarr(12+iasym,4724) |
75 |
; openr,2,'par'+name1+'.'+name2 |
76 |
openr,2,'par'+name1 |
77 |
readf,2,q |
78 |
close,2 |
79 |
wp=where((q(1,*) le 300) and (q(0,*) le 34),np) |
80 |
for ip=0,np-1 do par(*,q(1,wp(ip)),q(0,wp(ip)),it)=q(*,wp(ip)) |
81 |
end |
82 |
close,1 |
83 |
|
84 |
; Get splittings pridicted from 360d inversion |
85 |
q=dblarr(9,4627) |
86 |
openr,1,idldir+'a0' |
87 |
readf,1,q |
88 |
close,1 |
89 |
wa=where((q(0,*) le 300) and (q(1,*) le 34),na) |
90 |
for i=0,na-1 do a0(*,q(0,wa(i)),q(1,wa(i)))=q(*,wa(i)) |
91 |
|
92 |
nx=310l*40l*nt |
93 |
y6=reform(y6,nm,nx,/overwrite) |
94 |
y18=reform(y18,nm+24,nx,/overwrite) |
95 |
y36=reform(y36,nm+60,nx,/overwrite) |
96 |
par=reform(par,12+iasym,nx,/overwrite) |
97 |
a0=reform(a0,9,310l*40l,/overwrite) |
98 |
|
99 |
; old code |
100 |
;a0x=reform(rebin(reform(a0,9,310l*40l,1),9,310l*40l,nt),9,nx) |
101 |
a0x=reform(rebin(reform(a0,9,310l*40l,1),9,310l*40l,nt),9,310l,40l,nt) |
102 |
|
103 |
df=1e6/72./86400. |
104 |
|
105 |
l=reform(par(1,*)) |
106 |
n=reform(par(0,*)) |
107 |
f=reform(par(2,*)) |
108 |
|
109 |
mask0=intarr(nx) |
110 |
mask0(where(y6(2,*) ne 0))=1 |
111 |
|
112 |
na=6 |
113 |
mask6=intarr(nx) |
114 |
nmodes6=fix(total(y6[2,*] ne 0)) |
115 |
print,'nmodes6=',nmodes6 |
116 |
; Toss modes more than 0.25 sigma away from input guess |
117 |
w6=where(abs((y6(2,*)-par(2,*))/y6(2+sigoff,*)) le 0.25,nw6) |
118 |
mask6(w6)=1 |
119 |
print,'modes6 rejected test1: ',nmodes6-nw6,nmodes6-nw6,nmodes6-nw6 |
120 |
; Toss modes with large errors given width. Most likely low S/N. |
121 |
;wx=where(y6(2+sigoff,*)/y6(4,*)^0.5*(l+0.5)^0.5 ge 0.5,nwx) |
122 |
; remove hardcoding of 1/72d |
123 |
wx=where(y6(2+sigoff,*)/y6(4,*)^0.5*(l+0.5)^0.5 ge 3*sqrt(binmics/2/!pi),nwx) |
124 |
|
125 |
masktest=intarr(nx)+1 |
126 |
nwtest=0 |
127 |
if (nwx gt 0) then begin |
128 |
masktest[wx]=0 |
129 |
wtest=where(masktest lt mask6,nwtest) |
130 |
endif |
131 |
if (nwx gt 0) then mask6(wx)=0 |
132 |
print,'modes6 rejected test2: ',nwtest,nwx,nmodes6-fix(total(mask6)) |
133 |
|
134 |
; Factor to jack up errors for modes with measured widths less than 1/72d. |
135 |
;csig=reform(sqrt(0.16/y6(4,*)>1)) |
136 |
; remove hardcoding of 1/72d |
137 |
csig=reform(sqrt(binmics/y6(4,*)>1)) |
138 |
|
139 |
y6a=y6 |
140 |
y6a(2+sigoff,*)=y6(2+sigoff,*)*csig |
141 |
for ia=0,na-1 do y6a(aoff+na+ia,*)=y6(aoff+na+ia,*)*csig |
142 |
|
143 |
; Toss modes more than 10 sigma away from prediction |
144 |
|
145 |
; old code |
146 |
;rx=dblarr(nx) |
147 |
;for ia=0,na-2,2 do rx=rx>abs((y6a(aoff+ia,*)-a0x(3+ia,*))/y6a(aoff+na+ia,*)) |
148 |
;mask6(where(rx gt 10))=0 |
149 |
|
150 |
; new code |
151 |
y6a=reform(y6a,nm,310l,40,nt) |
152 |
rx=dblarr(310l,40l,nt) |
153 |
for it=0,nt-1 do begin |
154 |
for ia=0,na-2,2 do begin |
155 |
w0=where(y6a(2,*,0,it) ne 0) |
156 |
mmm=median(y6a(aoff+ia,w0,0,it)-a0x(3+ia,w0,0,it)) |
157 |
q=reform(abs((y6a(aoff+ia,*,*,it)-a0x(3+ia,*,*,it)-mmm)/y6a(aoff+na+ia,*,*,it))) |
158 |
wq=where(y6a(aoff+na+ia,*,*,it) eq 0,nwq) |
159 |
if (nwq gt 0) then q[wq]=0 |
160 |
rx(*,*,it)=rx(*,*,it)>q |
161 |
end |
162 |
end |
163 |
wq=where(rx gt 10,nq) |
164 |
masktest=intarr(nx)+1 |
165 |
nwtest=0 |
166 |
if (nq gt 0) then begin |
167 |
masktest[wq]=0 |
168 |
wtest=where(masktest lt mask6,nwtest) |
169 |
endif |
170 |
if (nq gt 0) then mask6(wq)=0 |
171 |
print,'modes6 rejected test3: ',nwtest,nq,nmodes6-fix(total(mask6)) |
172 |
|
173 |
; Toss low freq isolated mode(s) |
174 |
;mask6(where(f le 900))=0 |
175 |
; don't do this after all, rejects almost zero modes anyway |
176 |
; unclear how to generalize to longer timeseries |
177 |
|
178 |
w6=where(mask6 eq 1) |
179 |
|
180 |
na=18 |
181 |
mask18=mask6 |
182 |
mask18(where(y18(2,*) eq 0))=0 |
183 |
nmodes18=fix(total(y18[2,*] ne 0)) |
184 |
masktest=intarr(nx)+1 |
185 |
masktest[where(y18(2,*) eq 0)]=0 |
186 |
wtest=where(mask6 lt masktest,nwtest) |
187 |
print,'nmodes18=',nmodes18 |
188 |
print,'modes18 rejected from test4: ',nwtest,nwtest,nmodes18-fix(total(mask18)) |
189 |
|
190 |
y18a=y18 |
191 |
y18a(2+sigoff,*)=y18(2+sigoff,*)*csig |
192 |
for ia=0,na-1 do y18a(aoff+na+ia,*)=y18(aoff+na+ia,*)*csig |
193 |
|
194 |
; Toss modes with much larger errors or large changes from 6 a-coeff case. |
195 |
ry=reform(abs((y18(2,*)-y6(2,*))/y18a(2+sigoff,*))) |
196 |
for ia=0,5 do ry=ry>reform(abs((y18(aoff+ia,*)-y6(aoff+ia,*))/y18a(aoff+na+ia))) |
197 |
sy=reform(y18(2+sigoff,*)/y6(2+sigoff,*)) |
198 |
for ia=0,5 do sy=sy>reform(y18(aoff+na+ia,*)/y6(aoff+6+ia,*)) |
199 |
wy=where((ry ge 2) or (sy ge 2),nwy) |
200 |
masktest=intarr(nx)+1 |
201 |
nwtest=0 |
202 |
if (nwy gt 0) then begin |
203 |
masktest[wy]=0 |
204 |
wtest=where(masktest lt mask18,nwtest) |
205 |
endif |
206 |
if (nwy ne 0) then mask18(wy)=0 |
207 |
print,'modes18 rejected from test5: ',nwtest,nwy,nmodes18-fix(total(mask18)) |
208 |
|
209 |
w18=where(mask18 eq 1) |
210 |
|
211 |
na=36 |
212 |
mask36=mask18 |
213 |
mask36(where(y36(2,*) eq 0))=0 |
214 |
nmodes36=fix(total(y36[2,*] ne 0)) |
215 |
masktest=intarr(nx)+1 |
216 |
masktest[where(y36(2,*) eq 0)]=0 |
217 |
wtest=where(mask18 lt masktest,nwtest) |
218 |
print,'nmodes36=',nmodes36 |
219 |
print,'modes36 rejected from test6: ',nwtest,nwtest,nmodes36-fix(total(mask36)) |
220 |
|
221 |
y36a=y36 |
222 |
y36a(2+sigoff,*)=y36(2+sigoff,*)*csig |
223 |
for ia=0,na-1 do y36a(aoff+na+ia,*)=y36(aoff+na+ia,*)*csig |
224 |
|
225 |
; Toss modes with much larger errors or large changes from 6 a-coeff case. |
226 |
rz=reform(abs((y36(2,*)-y6(2,*))/y36a(2+sigoff,*))) |
227 |
for ia=0,5 do rz=rz>reform(abs((y36(aoff+ia,*)-y6(aoff+ia,*))/y36a(aoff+na+ia))) |
228 |
sz=reform(y36(2+sigoff,*)/y6(2+sigoff,*)) |
229 |
for ia=0,5 do sz=sz>reform(y36(aoff+na+ia,*)/y6(aoff+6+ia,*)) |
230 |
wz=where((rz ge 2) or (sz ge 2),nwz) |
231 |
masktest=intarr(nx)+1 |
232 |
nwtest=0 |
233 |
if (nwz gt 0) then begin |
234 |
masktest[wz]=0 |
235 |
wtest=where(masktest lt mask36,nwtest) |
236 |
endif |
237 |
if (nwz ne 0) then mask36(wz)=0 |
238 |
print,'modes36 rejected from test7: ',nwtest,nwz,nmodes36-fix(total(mask36)) |
239 |
|
240 |
w36=where(mask36 eq 1) |
241 |
|
242 |
; Write things out |
243 |
na=6 |
244 |
y6a=reform(y6a,aoff+2*na,310l,40l,nt,/overwrite) |
245 |
mask6=reform(mask6,310l,40l,nt,/overwrite) |
246 |
|
247 |
for it=0,nt-1 do begin |
248 |
openw,1,'m'+names1(it)+'qr.'+names2(it) |
249 |
for il=0l,310l-1 do begin |
250 |
for in=0l,40l-1 do begin |
251 |
if (iasym eq 0) then begin |
252 |
if (mask6(il,in,it) eq 1) then printf,1,y6a(*,il,in,it),format='(2i4,f10.4,f10.4,4f8.4,2f9.4,f10.4,f9.4,f11.4,99g14.6)' |
253 |
endif else begin |
254 |
if (mask6(il,in,it) eq 1) then printf,1,y6a(*,il,in,it),format='(2i4,f10.4,f10.4,3f8.4,g14.6,f8.4,2f9.4,f10.4,f9.4,g14.6,f11.4,99g14.6)' |
255 |
end |
256 |
end |
257 |
end |
258 |
close,1 |
259 |
end |
260 |
|
261 |
for it=0,nt-1 do begin |
262 |
openw,1,'freq'+names1(it)+'qr.'+names2(it) |
263 |
for il=0l,310l-1 do begin |
264 |
for in=0l,40l-1 do begin |
265 |
if (mask6(il,in,it) eq 1) then printf,1,y6a([0,1,2,2+sigoff],il,in,it),format='(2i4,f10.4,f8.4)' |
266 |
end |
267 |
end |
268 |
close,1 |
269 |
end |
270 |
|
271 |
i1=[0,1,2,aoff+2*lindgen(na)] |
272 |
for it=0,nt-1 do begin |
273 |
openw,1,'split'+names1(it)+'qr.'+names2(it) |
274 |
for il=1l,310l-1 do begin |
275 |
for in=0l,40l-1 do begin |
276 |
if (mask6(il,in,it) eq 1) then printf,1,y6a(i1,il,in,it),format='(2i4,f10.4,f10.4,99g14.6)' |
277 |
end |
278 |
end |
279 |
close,1 |
280 |
end |
281 |
|
282 |
i1=[0,1,2,aoff+1+2*lindgen(na)] |
283 |
for it=0,nt-1 do begin |
284 |
openw,1,'splite'+names1(it)+'qr.'+names2(it) |
285 |
for il=1l,310l-1 do begin |
286 |
for in=0l,40l-1 do begin |
287 |
if (mask6(il,in,it) eq 1) then printf,1,y6a(i1,il,in,it),format='(2i4,f10.4,99g14.6)' |
288 |
end |
289 |
end |
290 |
close,1 |
291 |
end |
292 |
|
293 |
for it=0,nt-1 do begin |
294 |
openw,1,'split'+names1(it)+'qr.'+names2(it)+'.2d' |
295 |
for il=1l,310l-1 do begin |
296 |
for in=0l,40l-1 do begin |
297 |
if (mask6(il,in,it) eq 1) then begin |
298 |
for ia=0,na-2,2 do begin |
299 |
if y6a(aoff+na+ia,il,in,it) ne 0 then begin |
300 |
printf,1,y6a([0,1,2],il,in,it),ia/2+1,3,na/2,y6a([aoff+ia,aoff+na+ia],il,in,it),format='(i4,i3,f8.2,i4,i2,i3,2g14.6)' |
301 |
end |
302 |
end |
303 |
end |
304 |
end |
305 |
end |
306 |
close,1 |
307 |
end |
308 |
|
309 |
na=18 |
310 |
y18a=reform(y18a,aoff+2*na,310l,40l,nt,/overwrite) |
311 |
mask18=reform(mask18,310l,40l,nt,/overwrite) |
312 |
|
313 |
for it=0,nt-1 do begin |
314 |
if (nms18(it) ne 0) then begin |
315 |
openw,1,'m'+names1(it)+'qr.'+names2(it)+'.18' |
316 |
for il=0l,310l-1 do begin |
317 |
for in=0l,40l-1 do begin |
318 |
if (iasym eq 0) then begin |
319 |
if (mask18(il,in,it) eq 1) then printf,1,y18a(*,il,in,it),format='(2i4,f10.4,f10.4,4f8.4,2f9.4,f10.4,f9.4,f11.4,99g14.6)' |
320 |
endif else begin |
321 |
if (mask18(il,in,it) eq 1) then printf,1,y18a(*,il,in,it),format='(2i4,f10.4,f10.4,3f8.4,g14.6,f8.4,2f9.4,f10.4,f9.4,g14.6,f11.4,99g14.6)' |
322 |
end |
323 |
end |
324 |
end |
325 |
close,1 |
326 |
end |
327 |
end |
328 |
|
329 |
for it=0,nt-1 do begin |
330 |
if (nms18(it) ne 0) then begin |
331 |
openw,1,'freq'+names1(it)+'qr.'+names2(it)+'.18' |
332 |
for il=0l,310l-1 do begin |
333 |
for in=0l,40l-1 do begin |
334 |
if (mask18(il,in,it) eq 1) then printf,1,y18a([0,1,2,2+sigoff],il,in,it),format='(2i4,f10.4,f8.4)' |
335 |
end |
336 |
end |
337 |
close,1 |
338 |
end |
339 |
end |
340 |
|
341 |
i1=[0,1,2,aoff+2*lindgen(na)] |
342 |
for it=0,nt-1 do begin |
343 |
if (nms18(it) ne 0) then begin |
344 |
openw,1,'split'+names1(it)+'qr.'+names2(it)+'.18' |
345 |
for il=1l,310l-1 do begin |
346 |
for in=0l,40l-1 do begin |
347 |
if (mask18(il,in,it) eq 1) then printf,1,y18a(i1,il,in,it),format='(2i4,f10.4,f10.4,99g14.6)' |
348 |
end |
349 |
end |
350 |
close,1 |
351 |
end |
352 |
end |
353 |
|
354 |
i1=[0,1,2,aoff+1+2*lindgen(na)] |
355 |
for it=0,nt-1 do begin |
356 |
if (nms18(it) ne 0) then begin |
357 |
openw,1,'splite'+names1(it)+'qr.'+names2(it)+'.18' |
358 |
for il=1l,310l-1 do begin |
359 |
for in=0l,40l-1 do begin |
360 |
if (mask18(il,in,it) eq 1) then printf,1,y18a(i1,il,in,it),format='(2i4,f10.4,99g14.6)' |
361 |
end |
362 |
end |
363 |
close,1 |
364 |
end |
365 |
end |
366 |
|
367 |
for it=0,nt-1 do begin |
368 |
if (nms18(it) ne 0) then begin |
369 |
openw,1,'split'+names1(it)+'qr.'+names2(it)+'.18.2d' |
370 |
for il=1l,310l-1 do begin |
371 |
for in=0l,40l-1 do begin |
372 |
if (mask18(il,in,it) eq 1) then begin |
373 |
for ia=0,na-2,2 do begin |
374 |
if y18a(aoff+na+ia,il,in,it) ne 0 then begin |
375 |
printf,1,y18a([0,1,2],il,in,it),ia/2+1,3,na/2,y18a([aoff+ia,aoff+na+ia],il,in,it),format='(i4,i3,f8.2,i4,i2,i3,2g14.6)' |
376 |
end |
377 |
end |
378 |
end |
379 |
end |
380 |
end |
381 |
close,1 |
382 |
end |
383 |
end |
384 |
|
385 |
na=36 |
386 |
y36a=reform(y36a,aoff+2*na,310l,40l,nt,/overwrite) |
387 |
mask36=reform(mask36,310l,40l,nt,/overwrite) |
388 |
|
389 |
for it=0,nt-1 do begin |
390 |
if (nms36(it) ne 0) then begin |
391 |
openw,1,'m'+names1(it)+'qr.'+names2(it)+'.36' |
392 |
for il=0l,310l-1 do begin |
393 |
for in=0l,40l-1 do begin |
394 |
if (iasym eq 0) then begin |
395 |
if (mask36(il,in,it) eq 1) then printf,1,y36a(*,il,in,it),format='(2i4,f10.4,f10.4,4f8.4,2f9.4,f10.4,f9.4,f11.4,99g14.6)' |
396 |
endif else begin |
397 |
if (mask36(il,in,it) eq 1) then printf,1,y36a(*,il,in,it),format='(2i4,f10.4,f10.4,3f8.4,g14.6,f8.4,2f9.4,f10.4,f9.4,g14.6,f11.4,99g14.6)' |
398 |
end |
399 |
end |
400 |
end |
401 |
close,1 |
402 |
end |
403 |
end |
404 |
|
405 |
for it=0,nt-1 do begin |
406 |
if (nms36(it) ne 0) then begin |
407 |
openw,1,'freq'+names1(it)+'qr.'+names2(it)+'.36' |
408 |
for il=0l,310l-1 do begin |
409 |
for in=0l,40l-1 do begin |
410 |
if (mask36(il,in,it) eq 1) then printf,1,y36a([0,1,2,2+sigoff],il,in,it),format='(2i4,f10.4,f8.4)' |
411 |
end |
412 |
end |
413 |
close,1 |
414 |
end |
415 |
end |
416 |
|
417 |
i1=[0,1,2,aoff+2*lindgen(na)] |
418 |
for it=0,nt-1 do begin |
419 |
if (nms36(it) ne 0) then begin |
420 |
openw,1,'split'+names1(it)+'qr.'+names2(it)+'.36' |
421 |
for il=1l,310l-1 do begin |
422 |
for in=0l,40l-1 do begin |
423 |
if (mask36(il,in,it) eq 1) then printf,1,y36a(i1,il,in,it),format='(2i4,f10.4,f10.4,99g14.6)' |
424 |
end |
425 |
end |
426 |
close,1 |
427 |
end |
428 |
end |
429 |
|
430 |
i1=[0,1,2,aoff+2*lindgen(na)] |
431 |
for it=0,nt-1 do begin |
432 |
if (nms36(it) ne 0) then begin |
433 |
openw,1,'split'+names1(it)+'qr.'+names2(it)+'.36f' |
434 |
for il=1l,310l-1 do begin |
435 |
for in=0l,0l do begin |
436 |
if (mask36(il,in,it) eq 1) then printf,1,y36a(i1,il,in,it),format='(2i4,f10.4,f10.4,99g14.6)' |
437 |
end |
438 |
end |
439 |
close,1 |
440 |
end |
441 |
end |
442 |
|
443 |
i1=[0,1,2,aoff+1+2*lindgen(na)] |
444 |
for it=0,nt-1 do begin |
445 |
if (nms36(it) ne 0) then begin |
446 |
openw,1,'splite'+names1(it)+'qr.'+names2(it)+'.36' |
447 |
for il=1l,310l-1 do begin |
448 |
for in=0l,40l-1 do begin |
449 |
if (mask36(il,in,it) eq 1) then printf,1,y36a(i1,il,in,it),format='(2i4,f10.4,99g14.6)' |
450 |
end |
451 |
end |
452 |
close,1 |
453 |
end |
454 |
end |
455 |
|
456 |
for it=0,nt-1 do begin |
457 |
if (nms36(it) ne 0) then begin |
458 |
openw,1,'split'+names1(it)+'qr.'+names2(it)+'.36.2d' |
459 |
for il=1l,310l-1 do begin |
460 |
for in=0l,40l-1 do begin |
461 |
if (mask36(il,in,it) eq 1) then begin |
462 |
for ia=0,na-2,2 do begin |
463 |
if y36a(aoff+na+ia,il,in,it) ne 0 then begin |
464 |
printf,1,y36a([0,1,2],il,in,it),ia/2+1,3,na/2,y36a([aoff+ia,aoff+na+ia],il,in,it),format='(i4,i3,f8.2,i4,i2,i3,2g14.6)' |
465 |
end |
466 |
end |
467 |
end |
468 |
end |
469 |
end |
470 |
close,1 |
471 |
end |
472 |
end |
473 |
|
474 |
end |
475 |
|