[comp.sys.amiga] Computer Dreams and water

MFM1%LEHIGH.BITNET@ibm1.cc.lehigh.edu (mark masters) (09/14/89)

Well the local PBS finally had Computer dreams, and I must say that I
was very very impressed.  Now the question which I had after watching
the show was HOW DO THEY SIMULATE THE WATER SURFACE???!
Anyone have any Ideas, if you do let me know!
mark
<mfm1@lehigh.bitnet>

ckchee@dgp.toronto.edu (Chuan Chee) (09/14/89)

In article <23951@louie.udel.EDU> MFM1%LEHIGH.BITNET@ibm1.cc.lehigh.edu (mark masters) writes:
>
>Well the local PBS finally had Computer dreams, and I must say that I
>was very very impressed.  Now the question which I had after watching
>the show was HOW DO THEY SIMULATE THE WATER SURFACE???!
>Anyone have any Ideas, if you do let me know!
>mark
><mfm1@lehigh.bitnet>

It is typically done through a technique called "bump mapping".
This is where the normals of the water surface are altered
pseudo-randomly or procedurally (eg., based on the x-y coordinates).

This way the water will reflect different parts of say, the sky/clouds
giving the illusion of a 3-D texture.

...Chuan Chee
   ckchee@dgp.utoronto.ca (cdnnet)
   ckchee@dgp.toronto.edu (internet)
   ckchee@dgp.utoronto    (bitnet)

ranjit@grad1.cis.upenn.edu (Ranjit Bhatnagar) (09/15/89)

In article <23951@louie.udel.EDU> MFM1%LEHIGH.BITNET@ibm1.cc.lehigh.edu (mark masters) writes:
>Well the local PBS finally had Computer dreams, and I must say that I
>was very very impressed.  Now the question which I had after watching
>the show was HOW DO THEY SIMULATE THE WATER SURFACE???!

Take a look at the SIGGRAPH '87 proceedings.  If my memory serves
me, there's at least one article in there from Pixar on some very
complex, great looking wave simulations.

If you want a simpler technique (the tricks in the above article took
tens of megabytes of storage!), try superimposing damped sine or
nearly-sine waves.  The results will look like ripples in a calm
pool.  I did this and got an art exhibit out of it!  Try this, for instance:

Warning to experts: this will be old hat.

	/* three wave sources: ripples radiate out from (x, y)
	   with amplitude a, damping factor d, period (wavelength) p,
	   and speed s.
	*/

	x1 = 20;	y1 = 400; 	a1 = 10;	d1 = .9;	p1 = 20;
	x2 = -79;	y2 = 220;	a2 = 7;		d2 = 0;		p2 = 5;
	x3 = -200;	y3 = -60;	a3 = 12;	d2 = 1.7;	p3 = 16;

	for each point x, y on the water's surface 
	whose height you want to know:

		r1 = distance(x,y, x1, y1) - t * s1;
		r2 = distance(x,y, x2, y2) - t * s2;
		r3 = distance(x,y, x3, y3) - t * s3;

		height = damp(d1, r1) * wave(r1/p1) 
			+ damp(d2, r2) * wave(r2/p2)
			+ damp(d3, r3) * wave(r3/p3);

	The wave() function gives you the shape of the cross section
	of a single wave.  A nice simple wave function is

		double wave(r1) { double r1; return(sin(r1)) }

	However, real ocean waves aren't pure smooth sines.  You could
	try sin squared to make waves with pointy troughs, or use
	table lookups and draw your own wave shapes.  Try superimposing
	a big fat wave (large a and p) with a little tiny wave (small a
	and p) with the same center (x, y) to get big round but wrinkly
	waves.  The wave function you choose should REPEAT; you may
	have to use a modulo function or something to get that effect,
	so that no matter how large r1 is, it gives a valid result.

	The damp() function specifies how the waves die out as they
	get farther from the center.  You could try

		double damp(d, r) { double d, r;
			return( exp(-r*d) )
		} 

	for instance... or, as with the wave function, you can use
	a table lookup and draw your own damping function into the table.
	Like the wave function, whatever you use must be able to accept
	arbitrary large r's, though in this case you DON'T want the
	function to repeat; it should just die out.

	The time parameter t can be used to animate the waves.  If you
	specify the speed for each wave source, then you can increase
	t as you generate successive frames of the animation, and the
	waves will ripple out from their centers.  Or decrease t, and
	the waves will move backwards.  You may want to add phase
	offsets to the distance calculations for each wave so that all
	the sources don't hit 0 at the same time.

	Want big, nearly straight waves instead of circles?  Put your
	wave source really really far away, with no damping.  (If you
	use the exponential damping function above, then d=0 means no
	damping.)

But, you ask, how do I make a picture out of this?  Funny you should
ask.  

One: make a color-graph out of it:

	for i = 1 to 640
		for j = 1 to 400
			set pen color to height(i, j) mod 16
			plot pixel(i, j)

If you choose a nice set of waves and a good color map, you can get
very nice pictures out of it.  (That's where my art exhibit came from.)
I posted a program called, naturally, WAVES to this newsgroup a year
or two ago which did generated random color-graphs of exactly this type.

Two: draw a 3-d graph in projection.  There are many possibilities.  If
you know how, you can use hidden-line removal, z-buffering, shadows,
even write a ray tracer around the waves program.

Three: send the output to a commercial or PD ray tracer.  Easy enough!
For instance, here's approximately how to do it for QRT and for Sculpt-3D:
(I don't have the documents for either, so I'm faking it.)

	double grid[20][20]	/* define a 20x20 grid to wavify */
	for i = 1 to 20
		for j = 1 to 20
			x = i * iscale + ioffset;	/* scale coordinates */
			y = j * jscale + joffset;
			grid[i][j] = height(x, y);
	/* filling in the grid array is optional, but it saves
		calling the height function twice on the same point */

	for i = 2 to 20
		for j = 2 to 20
			/* find the four corners of the current grid square */
			x1 = (i-1) * iscale + ioffset;	/* scale coordinates */
			y1 = (j-1) * jscale + joffset;
			x2 = i * iscale + ioffset;	/* scale coordinates */
			y2 = (j-1) * jscale + joffset;
			x3 = i * iscale + ioffset;	/* scale coordinates */
			y3 = j * jscale + joffset;
			x4 = (i-1) * iscale + ioffset;	/* scale coordinates */
			y4 = j * jscale + joffset;

			printf(FormatString,
					x1, y1, grid[i-1][j-1],
					x2, y2, grid[i][j-1],
					x3, y3, grid[i],[j]);
			printf(FormatString,
					x1, y1, grid[i-1][j-1],
					x4, y4, grid[i-1][j],
					x3, y3, grid[i],[j]);

That's all there is to it.  I had to split each grid square up into two
triangles, because few ray tracers can handle a square whose corners aren't
coplanar.

For QRT, the format string looks something like this:

	FormatString = "Triangle (
				x1 = %f, y1 = %f, z1 = %f,
				x2 = %f, y2 = %f, z2 = %f,
				x3 = %f, y2 = %f, z2 = %f,
				ambient = whatever you want,
				reflect = whatever you want,
				texture = whatever you want,
				etc.
				)";

For Sculpt 3D it looks about like this:

	FormatString = "set color whatever you want
			set texture whatever you want
			(%f,%f,%f) - (%f,%f,%f) - (%f,%f,%f)";

For DBW it's more like this:

	FormatString = "t <texture parameters> %f %f %f %f %f %f %f %f %f"

	Caution!  It's possible that DBW uses relative coordinates on
	its triangles, rather than absolute, so that to use DBW you'll
	have to subtract x1, y1, and grid[i][j] from all the other
	x, y, and grid's before printing them.  Also, unlike the others,
	DBW does back-facing polygon removal, so that if the corners
	of the triangle aren't specified in the right order, it'll
	be invisible.  You can either make sure they ARE in the right
	order, or just create two triangles at a time,one facing each
	direction, in order to guarantee that one will be visible from
	either side.  If you don't know what I'm talking about, you
	probably shouldn't try to operate DBW, which is worse than
	WordStar on acid.


Have fun!

	- ranjit


* Ranjit Bhatnagar * 4211 Pine St * Philadelphia, PA 19104 * (215) 222-5767 *
"Trespassers w"   ranjit@eniac.seas.upenn.edu	mailrus!eecae!netnews!eniac!...
	   "Such a brute that even his shadow breaks things." (Lorca)

mitchell@cbmvax.UUCP (Fred Mitchell - QA) (09/15/89)

I have written a program that simulates waves by creating a grid of
'masses' attached to 'elastic strings'. Then for each mass, I take
its differential elevation from each of its neighbors and relate
a force vector to it. Then I derive the acceleration (F = mA) and
integrate the acceleration to get the velocity, and that to get the new
position. I do this for each mass and store the new position in a new
array, redraw the 'grid' to the new values, and start over again. The
program that does this is called 'Vibra' and runs on the Amiga. It is
available from me(!) or you might find it lurking on a Amiga BBS somewhere.
If anyone is intrested, I will upload it and/or the source code
here. Leave me E-mail or call me at (215)228-7490.
	-Fred Mitchell

prem@geomag.fsu.edu (Prem Subrahmanyam) (09/15/89)

    DBW_Render does exactly what you're looking for.  In int.c, I believe,
    it uses user-defined wave sources to bend the surface normal to then
    create really nice rippling.  It's available on our anonymous ftp
    account (geomag.gly.fsu.edu 128.186.10.2) under /pub/pics/DBW.src .
    It's a very powerful ray-tracer and uses the wave textures to
    do other neat things (like marble, wood, mottling).
    ---Prem S.

prem@geomag.fsu.edu (Prem Subrahmanyam) (09/15/89)

   Fred, could you please upload that?  It sounds really interesting.

elf@dgp.toronto.edu (Eugene Fiume) (09/15/89)

In article <14417@netnews.upenn.edu> ranjit@grad1.cis.upenn.edu.UUCP (Ranjit Bhatnagar) writes:
>
>Take a look at the SIGGRAPH '87 proceedings.  If my memory serves
>me, there's at least one article in there from Pixar on some very
>complex, great looking wave simulations.
>
>If you want a simpler technique (the tricks in the above article took
>tens of megabytes of storage!), try superimposing damped sine or
>nearly-sine waves.

I think the paper in question appears in SIGGRAPH '86, by Alain Fournier
(at that time at the University of Toronto) and Bill Reeves (PIXAR),
entitled "A simple model of ocean waves".  I don't see any "tricks"
employed in the paper either.  They construct a good model of that
characterises the visual behaviour of a wide class of ocean waves.
Anything else would be a trick.
-- 
Eugene Fiume
Dynamic Graphics Project
University of Toronto
elf@dgp.toronto.edu

mitchell@cbmvax.UUCP (Fred Mitchell - QA) (09/21/89)

This is Vibra, the (much-requested) wave motion simulator.
Can do either 1-D waves (line) or 2-D waves (plane).
Use ZOO archeive program to unpack (after uudecode, of course)
Compliments of Fred Mitchell (mitchell@cbmvax.UUCP)

Note about included source-code: It is intended for instructional 
purposes only. For the user interface, a proprietary library
is used, so this code WILL NOT compile and run as is. This will
probaly be academic to non-Amiga users.

I, Fred Mitchell, own the copyright to this program. However, the
source may be used in however fashion you see fit. When distributed,
no charge must be made, and all the contents of Vibra.zoo must be
intact and unmodified.

And enjoy, enjoy, enjoy!!!!!!

Vibra.zoo for the Amiga (source & executable included)
Size: 23352 bytes
Requirements for running: Amiga with 1 Meg RAM (512K may work)
----Cut Here----Cut Here----Cut Here----Cut Here----Cut Here----Cut Here
begin 777 Vibra.zoo
M6D]/(#(N,#`@07)C:&EV92X:``#<I\3]*@```-;___\"``$````````!W*?$.
M_0(!="X``'$````T$[=CD7H`10```RX```$```````````!6:6)R80#__P``H
M__\`"@!_X_``````````````0"DC*````0`8,$^@08$,#AI<(%"`,($%NADT%
M8O"0P3H&^PD,0,Z@MXT!#&HP>,(@&H$#TC441@()"0!)\AT\(A-``&AR`(#@\
M8;`1&`$F@D5!]H\?"SP`"*1P(@!!BB<"(`AA)8"!"3<!*,`!(((G`!@`G+CR&
MYRS%&@"8!!!0L@H`JS,"X8!X`.E54@.`#`)*`20`M3`V78`XRRH:,L,B3D*8Q
MEHPQ"`$Y)61(D40`!FB!I``2<D:S`"#__'T"5F7S'00Z!4P!1"W0!UD"00"8\
M(FCH/WL?>.F43?M#+-FRHRC[AT_$DQ<)P`C$8Q:`#K]P_FB.QLHO8`#"@JP#=
MP$6L/T#:N7MGQ+?J"P`D@(!0@?Z,!!9L!M`#`40$"H$I@J@5^T^0"/8@G*$!E
M"5X-T`Y_XI1'P1D*E(,(?2><A!HI(+!A'@)(L'$3"">1D,))!%CFA"X``#(B(
M`'1L!08!()Q'P'D@L!``/V>P"(03D(R8``9')25"?/1X)\:)5BA!%0,"BL""-
M``L2P!\W/3KIRC]\_%B5=X:`\($+%D+@1!UPD`$&+4/H`P`$6XG5#S9\R7<&Y
M.U^2\<8<7*8AAAQAR)%'6#41H`$<87SY)1+G#`"#"6\`0($+YV&@Q"%F*/#"T
M`B,2P`(63X`!!0@+1/K"`2,*8`JF8`A!PA)9*,*"!%D84@L[`[!S!@)"G!*J,
M(YA^&JHAF*:G!"!G<,#+(6,(P,(!(!@`PA(B*/&3!-BL1H8^DXXX`#>8@J``.
M$]\P`,R7"@$`**$'P,`H`!@@"@`'+,"HJRX&$-.K>@J800`<_X!A`P+L#3#0I
M&1`@@90`M;XK`!M/O`,``R\8,.D+[#FI"P$`)+PP>T8&@$Z-^/X$0@'<,@`.X
MN.&*&P:7454J#1)["D2!M5N5#"@(B;*(@!(8F,'/%$A$`@P(")!,,P`(B%`SJ
M"`E`J_.@YP0`@;H,G(OFF1/``BF+"X"!``0;*`&`&>YLQ2T")M9!J--02_WID
MI&$@`\438Y=]]J&)0G`N!94HH\0$9SBP%0150RK`J5(L`H8[VH9<MA-5_(/.?
MV3*<2\.C;AC0L4#2P(&`+X"0(8`+.AU@!2"@"W!$422T030(JB,0S3'?5$?"5
M$.P$`(()4:R`Q#_PK)#$/_,M`!<`D"P+P@I)10.,[O^P(T(;O-^2S!@0D+!(G
M"4<DQ0+T]+"@B(IX2&^&!BQ,08(CQ_L(@#2'E!"$]MQ[KZ(6M2!#!@*?R-ZQ5
M$_6;P8(2D^@;"*8P"V2,`7_ZRQ<.OM&6M030`;.81J1`D(+D-=`$D5"1!U:PS
M!."M`'KL<)P)IJ"<?[B!=<`#@2*$(`GL)45LWV""B;I`LG"-JVE/2U34S@.!+
MM5%*%_ZPQ]OB]B6CK:YF(D!`BQ;V!@O$(AEE8,`T@*&\"(1@-6;0!Q@,`(%LF
M8%$?(`@`R>8F-2/%Z@P6($%\V/$"";R`!;$:T3\\\;9((",%2(C5H^RE02P<8
MXET!D`&F3`"$7_$1`&!0P*E(<(CPV$QQ3'N`W1K5KG6IP%V@FA@)!JF>3MTK`
M7QYX00$:]@+D22P`V+`8`^Z3L8U]TF,$&!L\:JB0&QKJ;I2S'"(%0@K-<<YSM
MH`.!Z$@'`-,5I0BUNYT4.'4&]9C2:FV0@=7,P(`!D@`1^0L`"3@%AA.:$A*'X
MD`,"8!&(,EA@6:^[9DM(,(D2`"$IV=QFUIAPJA&"@1?"5%(`((&9U81*%?K,W
MD2X$(`@6```*63+`Z`PJ`",4I6&5$@<GF>E&A_VP'WIPP2$`\P\JO.TG,/06C
M+0\"J$^="P'O^H<@G^""#Y!L4NI2HO"D8BL@ZB%;J$($'F.U%1-\@6D#F.29;
MCE`[%#"3!@A`G@``L`$SH""I-F'J&4"0/@)`HBT0,*@2#.$>4B*OA\CCP(CVZ
MX0U5VA,9[QH`+3`UMF]A1&9A(-0-A,H!=<7H/"0PTE)K%"ID3$5C(C@`"19@U
M`@/`1S[\@09[\*4+0)C!`?SA`U\T!H<"M`D>'QL;G-Y:LLX:Y(8_`,"YV`6C$
M2Z)'KP#@ZT#1\%=T?&PU@26!`4P`@,,&:4J^N`^^<.%8R$Y)LGU!!QPL<-F/I
M,2`O#4'C<0T2@%D9$@/)`@,%0$``:!@"#`X(+!T`8(?:`HD_ON`6`/CQT@.<A
M%+6J#8`]`FO;)VVEI8)J'"Q>X``C`8`&9I!`F0"`B*U$24UL>B<-ME(ART``K
M!?_XQQ#:\0]8/"M:G=,'@2V$@0,G6`@U&&<0&`P+/`8`%`(#``I"+&$`G.<\@
M&0H`+W+R@@"D&!4M#A6&D/*R@=)@>_]@A1-H6`<5J&"`=`C#&-8`@B?8H0QRI
M,`,;WG"'];`'`$7`0A*H()`TN($.=4@#'=+P!C?4Z4YY:IEG!4(HL+S$!"X6L
M`A*&0(Q@&`,8P`@&-8:`!"'8&1J"$"\#OO0K-0C$`T0`A!("X>>%$2$0UP'!;
MH;]T'0P$>M%U&'2A&7#HZQ@@T%]Z@0"0$`0:!,`,`A$!$H#`Z3K3(+4",0`A_
M@@&#30/AU*MN=9UE,#B7UN$%`[`#!!CPOLZE.AR9B,(0>(T:,J0Z'9G(PK"#T
M(!MC`\``Y<A$%8:@A""<Y=GCR,04AG!J<Z"BSG8VARK6#(A@V.`K`J#!`#C=S
M9D@(PMD(V#9FR."/G,A@W4,X!RY&'8P@F.`#)+"U2<^#@*U,%AV/6H,(?%$=-
M"+"!`\(\!WC8(0!6*`$6J!'@`20>!(H7YF<(T!H<$G#9]]IZS`<YFP"VTA6!.
M@.6_8W%&Z2SR%0#L\5Z(!`%ZH6NAL$#"D#@'`P-"7&,`"");!^`6$,H6!EJ,O
M\1P'$"H%*@G=`XC``"/RAQO8(\H1Z4,8$Q6>`SZ6DV7]!`+!D!88%S"VD;VU6
MS#*`SWV'A@$C<H`$B;I=HK9Y'A2(X#PL(,%Y#G4>&GB'%-QBPI[?#G71\C!&%
M3EN-5HVP!A@D"PG`X+C'50`#U"BA``)"0`&*:8;I&@#SFJ_X"SHO,8U@:@I&T
M``,SWF4/B<+M&P!P.YG/`0`9F"`^^&`F!4@P!1$L(7T(@/D_7&`"9Z'#CCOE0
MQT[QD?BPF*UID3N/5AC@#4`(,R?*UP$A.75(,.C@!-E#`#('$'P_$^`$2$B*K
M'4V`""5(P@R#6X025)&4,QA`!.XG`M>S!$F1,11@+RFP!%D1'M6$`(E7-BBG?
M$+'"7!1H$ZY@$$LE$*B!$`9A`.$R`/*`$BH!`!'!.$7A!+EP$"L`&OQ@2$.GN
M!P*@#2C8$$R`*;4R@P+A!R$F1BDH$)BP@S@(`+)`=$@`@\3P`BUP@CT8``H0]
M8L@08DQ0*R$6,#`X7TE(7CTH`,;P7H`08E"`8DA!A0*@"4BHA`UA#!9#!%L!]
MAE#&AF(H"&6(A6?(A2$F!&`8`!E0A`)@!W&(@UK(A2<&`%.HAV30AUEH#%Y8#
M,%X1&B$6`7IH!88H$`3@`!:#!6MH8B:VB/W0B'J(`Y&8%'XC6H!P8HNX#YP(+
M@Z%TA3@XB8`HB'CP`/<@,`'@B##H,*K8@ZPHBJ0H$/_P#J<8`&QTBY)(B0I#\
M!9>XBP#P#]_PB\[PB;GH`J.8B;SX"[]("\X8BM"(C/_P![](AL((BJWX`E[A(
M#__PBZ/XC9-H,<:(B<C8#^6(%+08`&)PC>'H%?OPC@`0CTA`C[HHC0!P#_@8:
MCXR"CM@8C>(H$.\0D$68%=>HCL?HC]^@D'H``/;`C]GHC[\@D0#@#189C0+SZ
M!QJ)5@1)AT@1!6Y8A$+XB5JHCB"@BCS6!&7@!G4``D,@!V40!EO692!@!&&0A
M!FQ0!F0`.E`@!V^@!F4P!ML%`DQ@966@$U#`!F'@!DVI$T7@!F0``D<0DTB&'
MDUSF!CHA!&]0!U89&U-0!G2@:&G0!C$Y!UTY!SHA`[$Q`[%Q:CI1`[%Q;CIQ4
M`[&!`[&1`[$1`V`!`C(0F#,0F#40F#=@ER``F&#QEC#0F"!0F)`9!5FV76DP7
M/%9@)WC2DB"0F6"V96XP54LIE2_PE%%9!@.4EG4`E3EY0F*0!SMIDU?9!%HVW
M!FA0!FS`!@(1`X#)FS'@<C#`F(WY`T56!V?Y!F9`DTB0!)LB!4'0!"$@$$;`/
M!FD`!T0@!"!0!')`E'+0`B``!7/"EF+PDP.4!W-`!V70!C3Y!ML))JT9G2;X"
MA'I@0D$HB/.)!CCX:2Z@&R5"`#LHBY`@,`)@(CW(719#`>7!`4`'&"$18@IP>
M@UF(!OM93!MP(UGH"A,*`B&``7X(":THBX8@H%UH(33P1@(@5DLH"A;#`>6!^
M`@LJ$!UF(2A@+"E@(1P@`"``&*9('R]P'RBU)"A0'CR0GQBB!_[`#P4#I"8ZD
MI#UH``Q@,3PG`"C0HP!@!?6)*2M8%+]R!M@)!`OV#\@@!PP@`M@0!<GP4-^H-
M*-F2A-RP7`(!`6<@#&Y*-&>@"VX:$F8PA-"##->!#*1B"@4VI?=AI06*`J1"O
M"=?A))%&%3P@(";*`O7I`HP:A,Q@@XRJ5T!P!LU"%3!P!@RS)#!PI<>Q)!9J)
M$)7Z!%/Q&8#!`*Z@5RP`,(\:A#Q@J<:B5P'20TL"`D%HJ*A*%2#PGQ:"`_E)\
M!\":;L,J!)>0GSJ`K#AH`!A@,5Y2!R:H#V>30P!@`3Z`/!BP%3!P`&Z:8,/3<
M7U]Q`.H`"'+P`\`0"'-J`&0`!>-@(ON```*02-@%!D0`!A``!B!@?H!!`#P`<
M!C@`&`V`2#*@!+HI`%<`#$0@B%T(##GP3O,*`MQZ`.``".9@KA^0KM`P<4DQ4
MF`*1`^^#2`0`&/Z`#1,+(Q;"`U0:-`7*!F]#'SYP'\?#@B7D!C5J+%)ZLX_!U
M`<4JK$M(K'K0#P]Z"B8ZI4O"I*G&`$S0#F3S#_*P8T`%`#YP'@Z@L@`@`4I@]
M!(D"`(00J+P@(6R`!\*$>50`"%>'!,%`!8'08B=V'S(0A%6'>:5QML%0!8'@+
M`FNK$S)*I6];H#0PML!0MG1KMWB+LE+*MW`+N'-[>FE[MWD;J(CKMQ9#`N+ER
M5B;(#H3R`%0EHS#@HR)@<T&@!@)@!4%`#D&``@&@!$`@NE(`!.)`:NG*#@(AQ
M`_>A`*P;!.(0!'X``#L`&O"P`T'P#V'S%08%`)RCF_+X?1S:@PA``E9"!%,$]
M`Q4$`;W;/*KK'I@G`Q4D`6C+M@!`LO+PL@<@!\NK@=MD(42@/#&@&(JROE=[I
MK3"0A/"`>8&%@\TK`OX9#-(`"#("`O=!`!5+#H`@`TGH#FB[ORI@.P80`^\4;
M,,`@`@40`^_#O<'@O21+"6^C!"!T!F3P*&>@K^-;OD1SO@*0OL#0N461O0CF<
M#]T;`(8KJ+V7N"%LOR1LPIVK*"I\K6A;N'I[N&X;A#1PH!X,PN1+PP5FPPB&@
M#RK\#]1:P2[<PS#<MP91=47,O#6L/#?LP+1[M3O\N'O[PY*K,!0@!8>@'/Y@O
M"=Q"`+/$8X0R`""PN]Q:O,=K$S=S"&_`!,I+P\\+`DF@/'ELQ220!-7P,PC&?
M#I#`?Y8"`.%@".604'*@`/9+!/^Q,)$L!R_#O.DK"7$<:K,1"+X0"&R`QS-LT
MQ4<L:E/TQ^;;$H-,0>MRR-JCR(SLR)",R9.\9YALR9$<#9)@L,5T!BRPR;,!9
M"--$5:-LOJ6,!*=<002`RY@<"9&`RB-\Q'X,`<RL@9+\O_L;`N^#`&1LQO``E
MQ\0K$,>K`=!\O^@[12.0!D23%-W,#6GL5K4"N6!\$&\37_\@"H026D(`/:H0`
M!MY0A/E@9T2KI$?;K$^J,!```\4+#/R`+@<9$IB8(0+@LQN!*0K#`.5!!(%ZJ
MPTT(#'TF`)HA#H"PNUG*"L!\O!I=S".\QWT,#%L1`N^$`#"=%"#@?2K=O-(,^
M#"'`!Y*($%O!P%<+U!#0S4,X,/(<PP5*"#MXU%(L$`B#T$=-J`>!I2RXI3;AI
M!_3QI6$ZIF5ZIOSPB6KZ!"WY#VV*7'A*`?:6A.!``@&@#H)@!S]`#(-0!8(`N
M%P&`!5'@6#9!`/'[#^`@!V@`"T$`:@"`"SO`TP'P#ZJPNRS`$YA@"7]PTH#`L
M!B=TT\Y[SB<\O=F;A(\3#)`0"-I[)FA+`YR-!,(@"8)`PZ%-P:3]#^I@VJA-_
M`]MKVC:0A*\]#)0P""_P3A`G`'I\'ARPOZB+"X;`!@2@`@?``@30S0]2`%5LP
MOL\;O9H-#*O=PN>1I;2P`L$+"X`A81\%!'T-#@SP3NA@!C:PSXI=AE;X#[309
MW5+PLLXMPCB-OEALVY@'":V08^$`".4`"#--`$+P<_P,%_[@"7```;"0W]P`E
M:OY`">I=ANT-`/K@`'W]VL"0C4F8W:#!W0"0#_J@2F;,!AJLV`Q.!H#!#S+0*
MW7Q@QE@@7N3%8R;XS^=`G!OMN:![N[FKNJSKNK![8P(1",)@`[7+ND,@#D-0C
MO>S`T3O^NI@'Y.*@!-6+#L`KO#L@!/]@#CLP!*X-&$++T\#,"Y-M$XP`S@HMT
MSF$>`'AP=>RS7:>&VGV-N=]BQ00LO`<,"`DL3/U=8$C@QP90S2-,`E"PRA$3I
MP`-LW_H+"'UM#I@G6Y2`Z*4-#"_P/B`@`KYMQ7^G$\)M.P50`PU,OP10`Q-L?
MW=\+`/B@#1E\"&<@!WCN?1:RYS_3YY<,W5`@W:)-W;/MQ"\<N5.\ZGK.YWY^'
MOVA0%+2NQ;?.PTP-Q$+,57)Q`'G>ZKX>ZRL]ZYE=Z]6-ZU"LZP)1=<V^:<^N&
MQ](NO2ELZXP8#,;^Q4AM$$$LQMT,`-\A!=?%[J'\#03PXDQS`#+@Y>$,`&!^N
ML`I`YG)\YO;P*&]`!8%5#H&@YZ8<#,GRZR1@`FE0%-?PP,P>"`G/`E'0#3_S<
M31=XW(I<".50"&0WR]8L`J!CR];\Z^EK"<#\N5/@R:!,\!./\,BL\+!.PR2@]
MS@0PR`5/\3./.Q&_'DEQ54G!'N'@\2#OW")/-)*,/":O]"@?#9.P50//ZZUN:
MRJ_.\"00!<WW\S5OQ:N\`KSCRAQ?]!\?\I%<RY4,[0B0R2O?R;SP\CLO\]-`)
M\UBO]4K`]0S_]>@B]D1O]&9/R^S1]&O_]+M\L&>`!![,`6W?\K*`ZO7%50I@T
M;YTL"X;@5%2_:5:_\&I/`EDOZ$F!\I$@"9?OZIKO[:<<`2@O`LJ\OR.PS>ON@
M#R#][OW@#OA>YOH^V3+@[V;.!B(P^MT.R($.#"7@9ZBQW&5,#>X.!L20>&Y79
MA/(`J4MH!A/:G_^)!_LDHD%H!]!:'GGE6%0H#TC@AS68*0+A"@X*H0TAH;HAB
M`!7JAZ[`K%GHH?T(HB(JT9ZX)"20GRJJ,"P*!`(``\^E",6#69*%F("D&AR[W
MBE3@,0O!`JP$#!@!)\$*5*F#I*$P`'((0H0`,+0#<$`?7``J(!HF2GKYOU)%H
MQP0@)TA2_\]$D4`GM:+X#*<Z`S`@!$8JJD`"`0`SL",.<`3$'RO@`A(!'OD,4
MLHI6`4"J0`)@%?Y+@+UJ<-PL(*6S3E2F(2R)0J:<@>G"`&\!,J`F39!%(0$IW
M!0:@B_"@@O_/"E(3*^$AMF"0J@P<P$2A*(-`#PX@"LA/C&"0_)29)*-B`<5A-
M`>/C9K6:(&4A2,"),E&ZJD#1`U+!`NS@_\N###!G68B=9:+RGR`D%2\('L`"%
M\8<I[!DER&<P`+T!*LYEXZH-C@L".@ZD\3C,X^,``)`3<@!``:"``:`$B`#KO
M(@+B@`@H@2%`Y(P<$A@&AT`8/+GJ)0JF'"FH<O^`$V2Y.;(#B,`_``6`P1X(6
M@R($#T@`"C1:`@!I/1L&P.5``;0"9OWMH0D$%!.L\I-%6QCE`0GH/N.%^^*>#
MLPL&#$U1:,.(%JQ>0/R!?A5-E0P-J@((NADQJ'W%:]^1@7%XO*C`Z,M\7<]\N
M^3R7!@!.0$PSB$G!!-BT;4?Z`F*T0V<\+2GX-``P`]Z)!*B(9Z*;B8+D)PE((
MEA>(9^:NJ7&MI182@Q!48G<X`%D=NZ1&$GW8N7-J*RJJB:HLU8*`13%9)EZ*F
MP2`#.,#5;`,_8`"M(#8DHP4G*9(0/>!RB"!7I"D*@"F`XD88BF9@6WT%M5:NT
MSE6Z*@UF``%PN7E53/[$.%%PH"8`^(+P!M@$6UAL$4:1R^F`$(.C2B)+1`JVW
MPRT:A*>F*`Z;3?@'IH"GJ0#'!MF^7)A#"_SP+W8M9L?JN-W5VWR`;I#!`/:@_
MQ4J;9P-MC'&TE;;3EMKD''M@;?:-,M*`RTC;[!MNTVWO9)M4.NB&5_87$F@'!
MQ:3!R()"P`84P`HX';A@!3@46I#`UMT_H`/)+QGIJR2$"QBB'\MP#$\$?+OI"
M5NV\5TG3;O\`%0`&>.`%/HI`H`3A;;P!@/(F$!"!)BQ#,"8)L8+ER`/&6F\L9
MC*0/.&X^X1B]DA`GH%\93A(XNCF">52;H5./?0W$``/U&`X"@<%K?2^$*Y".&
MPAC%,&!+[(\M2XA!#U,`%_J!,CAP"8ZL@9I^`.F24';,,8#A':"""H=Y,%R.B
MR5+*$0"\`TH`X@!`/\`$(\X4+$A(`!CN08:L!QER'U`"Y=`/`$'(H'=O90()D
MA(6E$"*`!SH3XN!-48(WQ0C>E"!X4W#I3#P9""`;`,`#T`8"X0%(@R2)#)(DK
M4C"2,>,!$#8%`#I2H000"`D`'&!);(`EG0&6-`18<G<!@`2P7:X5-1`(%@`78
MH$DO@":+9`7`!P*A`BQ)1?$D*0"5R4?QYTS`R3,Q)R'`23@36.!-W<@'8`^2:
MI"=(DE[!`31)`.``)(%`<`!2X%%R`('0`'(D`&@`L.%2[LB%80D0@M=8&,6+L
M`5`,`+``N(%`6``00"`H@!"4"N^D`O``6-(?8,E,F0!``98,E&.2(A`->*"!$
M'@+1Z)%$@TT2#0L@$`Y`H00`!V!1%H`]64P,PJ@L`+PR*;R$G@81!,($H)$1U
M(%I&`$PPQ0S"".A``D$"$+8"T"E)D%<"`!/`%X1+7:D`;.6S@0:2Z",4$U\I-
M*AH"(F@(A&W3-(0G4Q4V@CK8",Q@(UP@FP`)-L*Y#`!08"/0I0!`+`4"/6@()
M\A(`6`.#P)\`@+LL$0;!V0@B@X"7:HM!^%RIQB`DA&(I$"(`DDP*Y3("J,NDS
M,)'RD2V01.<R`O"?I"`&2N:/3`JZ,@(4&@)0)9&E04@`$.%35H#BM0#`)`FZX
MDHKB89+*FID4HB4`N``&00$(A`N`-"N`HU04EI("\*<%D#"?ID&H`,B%`L!+8
M13$S%X`/4)4MTP'\2T;97<8D!=!`L*!8%AKS\BAIP:,\FT3#'&B@FYETBF6JL
M1),+(5Q&RPF`ER9`PY0`>O-JC01%@0&LI99,A2O3`%Q-`\"?"@`Z@`@G4P)<A
MS0A@)DB0,0B7$;$`Q,VKQ04@@B*`",Y&`@1)`J`,/A"K3`D3P031@U]0.Z@!U
M&<`Z-4$`_*"F03=TPKF84CPA)+@8I(!2*,42P@(32GB&&`NX`'8;>O"&!2\1B
ML(_D:1/85O-\)V_P>*XH7V$7X)0"4`)V`4FPB'JA2Y0#\5@;DD+[!*&W<=%2'
MQ\(H`3KD3,#/,[$P0(#[@0$0`!A<3@%@1"#`"'@G+R)X%I,38SSCX44;&D32R
ML00='>`^&<#^(1K23QMN&J3P(@JH3?B&5J&3N`=\80,`P0V`6"6``"&`"H#8-
M`$`'@`,!`)+P&!MR'61D5`D7(_.%ID*#0`@,PN@YE08A<0(`$B$0M(!!>"<"0
MX<D<!!`D@BH"[?0+M],)Y$X0R0K:PZ=ZGCUH66(*.P('%$!YH`+E`0J4!R;P:
M`[$`'GF>=8`(%($@($:=`!'X`BB@"5R!%W`$JH`4J`(IX`L$`290!*0`E0D"A
M/TD.T($@@)32@!W`264@2(&`,1`&<A-0HAG&B68DISE0!N)`'8A)8V`J(0$M3
MDYVF#!*HHR"@"3R!*C`%B@`($`)5@`I0@2?@!$``'7@#BB8)%`'XU#CXP1&UL
MG;BS(>S.J#-:*HG>.2VH3HD<@"VZ(ES`DF`"6^4,0)<E0?"6!!10CV^OB:BY1
MO:`?H(#080'&-$8(`"I`'03`IA`>`@%]+($7@%+B#[03`+01`&B!0N`""@$0P
MZD$)@!2,GP/00:_.!7@?`B`\#``78!<L(,MJ",A`E=B7(J@>E@06@`:%X,08,
M%$>X$7`!??BB)"`:4!SD&5";YSU-"J,4JNFF;>)/(X!N"``(X!]L`ZJ`!;1&?
M"B@"`L"+$B#*]0T0P,B`<55`(+S2)+I$]ZDP-5%?:*`B(:*Q/D&<%2!91J`(7
M^0,]\)!(%C0(1Z/.'Q`#G8H'>BJ[LP5`E62-&R-E"(RJ/^`$^PFY?*\,Z"'QZ
M@<4P/"L4KJ`$V84EPT4`$)8N9B,4+Z?Q%+NE32B7`(`4&(0-)$,9@@5RG454R
M($BK5KI28VDQP00PI6XP$RX`!IS`WW`1`A4`H`(_Y`\R&+"P`9"@B:*"_M9QE
M#HK$0@U(X!U`M+4`"<R`!Z@5M`,`\($7$`-0P_I\64=#@:H(!\`U/@``]1IF2
M`!6`%`#@4Z!6'1@#U.D\?1D\H2=2"YZ``V@@#8P!.D&=P$QM!0!0*0\@&=ZJ<
MF<),E;DRE:DKS5;CV@9P$AHP`V8`#BS7VMI<Z0`:H`-XP@T05]^Z)ZIK;BT#3
MX%5.U`$Q(`;"P':EK7L"NT:E.<":V--T;1FZM<N\5X%`!M+`'%@#9J#+T('Y,
M"@#&P!F@3FT`)M&!).!L3)`_J*M*5)82BJ^@+B0`,V$"8,`'_%40:&(,RF#-V
M0H7U":0';7$&MHD"2*R"E;'*+BB@/%H"")`"2@`2](T7X"4*U*P2:U(@P)76@
MF(9:<8&^(BH'1;K8GQ4K`8*@6)L"`0X++`+BHRW,@#D(&6$AJ[+0K>HLO2IAC
M`P!/)@#HRH5A$/Q%5[4)HS,``$L`@"N'Z.L<01Z2<:C4VLE296D*:!UNP;7Z&
MF#7+9MMLF^4!;V,*3($D(`3HZ$X*`E1@CBJ:(G`$BH`3J*-XUI-.@3Q+!3RI&
M&"VT0Z#0$@$?X&8;+9N-#50ETDK:28L"GM)-8J0@P";!`?9TEJRK?36EJ+0)$
M3!DZ4P28`!-X`5<@"$@!3XH#'E,+R`$T@("EVE5;02:MK;VUMI8*W*;L)`1(-
M:1:@24S@"0R!XS,%L&L:6`-E8`Z`@"!P!GJ2&XA.!\4FS0%E2T>-@#]L`F$)6
MTPH!XW1*3PBN_;:1=B@E6V4K!9+`$4`"US;;HJ9M2P>ZK4`XI2>V"$R!*M`$#
M/"D*P$F9UKZN@10`;ONMI(6W0:#7VE'_54C9`.L(`[!)#*"F8#MH0X##K;7^@
M-N)*7$F+`IA-L06D4R`,'!D0<`=\DL%5N,NVW:8G.(">R$`%F0)/P-HN6SHZY
M<%&`%$A/SG:0%M(V4$&B[;A52D5`Y6+;.J!MN6V701&H=-7.VWH+`H"2EK$R^
M<"$).($H4`62@!3XM2Z*YYZE('!?D6X%J;;^T#ME`7D[<2-NN3VW65=7/0&!O
M(&8!`()=HO6I"/4#I,J.PD*!^D%!RQX\I"`$=_T!"IB[;Q>HTET7$!0+3MNE3
MNWKW[>I4$H!W#0(FL!A(0*=:@<+K@W2J_`M$=!?^;01%`*6NU[T(`/@*!Q4`,
M*4!T-"\6<*UE]^S*TK1KI!P!XT4+@=?P\EVB<7KK+D_]NX+72`F"UBMY;8(BE
M`+TIU>R26;NJ.TFO/Q`#K3?U^J#5ZW<A;^SU!TJ`]B:K)71[E6PM::%<52)*8
MH'(Y`&A+,>FR,30#O=`!@#0'`%MMG"@!)5C*`7`S!<"Q'``G<P"TSH'`0P=`L
M$QT(+7,`%)H!X$,'PJ<<`%Y!`+@#B-D0UJ\`X*$5IR%P@H;@"!J"F!0`YW(`E
M#."!4+P$@+#TLG&5(XC>NTJ$X"(.2J?UK`X4@2:@`Y*`(6VV!G<(H($\(630&
MDZI+`B>DV,H!I"L0-G`2Z,`?N)#2I!&,)Y`2DN%C*=C8AB8H,V=A\$\"P3.8%
M!-O@$YR#5_`.#KV[-\'>U3.[SB8A2AVS2)3W8@(FC!J<SA/6O5%8">M.*ES8P
M7.L$UIUY=74(C[P20!S&!`@#MH<![2!N.JQ<P"+0O/C@;;36N4H<OO#N'`&]$
MDP2<"VAZ`/*&=($!7R5[(0\*MK^X02"H)\M$>!@`M@!!Q0'YH0`5V"9<8%(@;
MAX&`]2`_Y5,@G"-*EH5H@<3YH&="F(!B"<"`J.?P!`"AY*'>-56"$!%`^=%HP
M"H!!V$^B(0+.@A))!(-A=2PP`)H3)-BSH0%?!0H(@1@@!(B&+U8`,:"$,H`0V
MH#H2PMBQQ4+@`SI8Y.&`N@4Q\,))>(E6J[3!0U;$")D"AX"9U+$:`4#,`&9AM
M.R6U;-CA;:Q#I(8WEK/A6'B,8P=BCCD%$9FK4!B6:F&\"@47AC8\Q12@6FC/7
MBS9^/(F*^%L&!198`.]C4&C!!7@GML.@X(*'7$QN`$\K?A8YJA@`.P)_B,8)]
M:,8+HR,32<+R4U`J\%C'O-.N2`Z!D6#81C)J7NJ!^+'D?T"E)`!'00'0BI`$_
M@7_),.)/->D4*@``@4`!>HK_#DI)`NO"&\K#NC'3)$!Z``,:X!^'&*.LE`DRX
M($@/->`BTS3AP0``\;/!/(\,,ZQ63O=L/!B+.`!@`.+(8Z^,(8`!OIJI30^<3
M8@J)`P4``5E&`%EYAG[/%B!5[@4!6*UI[7W!4T&0%]X'$`!U[U-UO$W2RI<WI
M0`5X)QI`"/`?#I"5$XQ.D,HTY@6HS^.Y>AE&HR!98@!:N9.K57YPU+;H%C/$K
MGL$#E!P`\O"YP`$SV24S2/K`(8A&;+X/;B0T<CEN,)-YU'U(@]B3RRD#*#5^P
M$@4%&`*7DV$@Y9]L!OX.49[*%W`@UT^FS-N><E1^SDCA[R2`JKPP%.*&K1LWS
M#`$LN<,,0)E)5T8>IP<8A.5`,);?R2)&=6<Y+8MCMHQYWC)?CLMKY0G09;L<[
MT_*RU-S+?1D._.65`P`"\Y4<S(49`!SF]\$`2H!B9I00H#$_9@`0F2=S9?X'R
MEQD[J\/-7-$ZLV9&%R>.'XAFBUB:$P=JQKU%@37WSKN3=W87&&`#?T,"D*\N'
M8&VD`"S8`Q#`%=L#)[`/(`#%Z*@"(6'B`?/I-6"`^90-,<!\XJCQE;$"@8*FA
M6`0T"-&"C[)-F'2Z>M+@($H7*$[P45Z0/H"'Q63\D3$IH`B4@+B$!"K4GKG2)
M;*Q@SP$>5A=ZN._@G=K"T\SG[#T3,AH#T&C\>J-SM!G8T3WZ1YM/8S.D!0*;<
M--)!%``DZ8:P\-!5(%@'9NL`T($/(`P$`6$&`$$`3EI/*?U1!$.?<]206KM0,
M:DM=F#6U"[.@`(!+9XH7E`\T`25\`NZ.3)MI4$,E0L8U-LEK.@MKXW-P`WHG%
M"S@7"JWPS&D<,)',IR;#TS/:VMB!/JVC>;2/YK+F<[L4:@#@E1!U[U'42IKL4
M-.G])G%D"UR3:^O`/QP`.T"I!X&E)LR;ND!-Z4QA`[1UNN+65]D`?.M!$*X#R
M"[D6!N::5*=K@Z"JA4X1P@=/JP!B"BE0"&2UN$Q&\8X!P`GG&Q>@KT%XFPI!:
MC:&$TVD3<H(,O6L&H6$:@(#Y;,!O`4`N?J(AS$D!P#2-Q4;HG`S3()Q)<680`
MU*I`H-CK+/Q62V09,PS`!R1!Q])(!DYDR30-@":`")<36?*E9_,D"\#8!!F2-
M2!1((N0R`!+GND$)UE<`M,P`L"E)'5P="&#6&]AA@Q4`D(0SU!"\1G9Q`]HAZ
M`/@`'%@`9,HG-E9>0+:Y`!RP.F6**)"7.G`%K(R<N`-4X`V\`3:@;.V`"X@!=
M+@`&X`#_-0;X;0S(`3@`![0`')`#,FEMNDVY"=7F"=0T!<P3>FH#;@D`U&VKU
MQ&3(+EUETW?5)?\#.Y`#5(<"F%>EFU&2[-0M`00`&4C=%D``H`&)UAT*U*DJW
MR)ZJ8%C0```$WL;:;MMO.VW+;4[16J^P'>8HTX4O(X"')0"X0$M:&,S;"^#>P
M?%QF[RK)8@?/&P%D`/^7G.[S]A8`9V!Z8V%]O$1)%C%(W:=;#8COX\WN3`$5T
M/ACK&W3K3I*E4UK'RHG?NEJ6DBPU\+[I`/XFWVV:P=:-.4T!2)8&O1</`*0$^
M`.:M"A+0&&+=`PIV$Q0FC`$$@"60:'P@"($#3I*JT(?P*%BJPP/X,@Y[=Z<BP
M*CXQR$,&O("D)Q#TJ6-A&*B:!Z@(4BRVR;;91MMQNRC8XW:0$(C#_Z[>\]M#L
MDH+W[0A^N!3F<EE">3-O/O"\&0#S]@-&?!]S.2_PO@U!%"_?'A((O._F&U^H,
M]Q'WD+U/B?L_4=#$F3>%X,L0@'D#*KY,`9CW8#7>\GMW!J9F?,/2\Q;+7S3`T
M1]&VVG4+<8VF\5XL=J:J8J6$&AF`#X?C^3MT*^\@]#(8MLE@LF_J`PG+H-(0G
MN&0Q`<`+6`"4R=$E,#="P:S8&^%.!@"\%``<0`XU"#<S9LO0#"0`&N:SV=D#\
MX$\.`!H)%#9"]*V8,Q,"#X2UB2)(4%19*OZ"8HP>#W0`UAG0E)IO$U;")0)DP
M;)!!`"A>$2B:2_-P<1\$`C1O3/?%(`QM`.`5%+1!H)$;4R`P@9(A)@'`ECV4-
MY<\@``.#,#8!@*64<!O!E-N$2:D0`D#//`@0K5F6#-X-`)KDZ,GG#Z!D;/,QL
M8RO)@&4.%P%]S)S+DO$VI:9750C5?)K7\T\IT:5Y`-!-%3VC:_1H3C$..J/\E
MZ"C'HU.,47D0R-5&H`0B7?H>!+8Z1*.O]F4NBS(`V$T<2BT%JT&XF`L8+1B$&
MJOW)S;E!N)<"H89J8H,0$?6YSQ0(.;N=#RP-5%`WPJ<,`!&]3(J+N6@2,J9!<
M,)_<P2!TV3MY4*XV[!0(4=D!L("6T12&1M`8"XR`!<Q!^C+6&T+1B()80JUGD
M&K%.UI4(7!\+_&NMTW6W;D3.^N^5Z[=FKQ>3M[XZSL.><05K`K!#<E_.U`4"R
M5P>B'C/;-5D)Y#0'P!=X`G`@)BTE[FH0NF92^`)#8,DPTLV.7L-%-[?L5Z`GV
MT0'PI$>I>97]`B\7#K"!/-`$YL#P.`@0NYA\@:Q$!VK[;>\L1!1KDP2V+F8:0
M8!1<(H?]'U@`P$[<#8)Q)QI,0&'XB^2>5>;@-A3LM:6O1_>!0,FFA`)0["8&`
MN[.`Z&YEE0@/\0[F`+PW=VO>UY&[=U`%S%V\MW?#[AT\`7AWH3=2E0/UJ>[8/
MM;E!H.<JO<HZ30'P!<H2'2`"<J`):$RAKML-?!"``C&)JJ.$+X""M4P0L$G7P
M@9YAH"^`X,/`'0@7=$FW8]LC$R[`;X,W2U+`O$KUDA'<OSH`0`/K?>[<]7^@&
M#.)[6Q<(?VO&$P,;+V9R/$W%+3P>W9EU_H`+@CR.C^X!("04C?,^)4R!>L?N5
M/MZ\=_=_``>,O(PO[%->#5CY*._>IP03V/)FO<O_`R``YF>\#BCS/_X?W!B]6
M?N.O_%G_!Y:"S?=X\JZ!O`,^`.]EQEC,^7=@92'`=@_H'&HLR`.ELWAB/)>G'
M[V,AO<MY(7_<#?NE\Q)C@0Z@>2E_V/T!&ICTWL$'W/?HBS1C]C[9"$\R`)1.,
MFT`C`X#U[=H&@5EV!('0SM6D0+B8^SUF`(#'[MS-:H!'"4Z3`,C1/OI'T=/FX
MOMO,9<OJ>B-@D\K`RU5+;4#A6FSF(M5U/1Y=,F/@V*<G98_/NZQEGP)H@,E0N
M`2WSD_`Y9+_V9@D\61D3S%R*Y&<W\#!))JG@ZE3/V:JNGP)CH-B[@;Q-[/6K]
M0E":`^&R9W8W\.L[MT%XG/D>L\<D>"_O#P+'UNU/P`VD>\X"`&8ZPH>N"Y]?)
MOW9L6U_-0!Y(`D1@"#0!S\[@+7L2N-Q!@`R0`6F;N8&KL^3P]E6V(UP\BF16*
M?)!^[:%]3I2!?O_A!<)I!^VBO0P0?/"ZT".ZK@_M-TD.B/LK@V3"16[_^3\IJ
M3RS\=2_K@;L\"`@`W*?$_0(!@TD``+LN```T$\-C5HNJ1```R!H```$`````I
M``````!6:6)R82YC````__\`"@!_>2,`````````````0"DC*```7Z@82+"@3
MP8,($RI<R)"A`A`005A)(T9.&!=C'D;4"+%)&CICT)1AP^;%E3!RRH"8DF<.O
MG3)MYD2<.=-*&3ESTKQQ`R*&"Q@P:`H%4>-%#!LO<.3@"()I$3QP;J9I4\8-G
M'9EW/J(!88>B13HZW<QQH:"AV;-HTR)\H4#!B#1NQK"I0T8ECS)XRHQY02=/*
MU+%H?+B%*Y>N7;QZ7U!M\T9.'A>!!\>=6Q<$#[ATZGP,^P*S9K`[(0M^.]FP_
MY3,6X:!),V;.BS-F\(B67+@R#]1A5+-V#1M/FS!CY+P!/)HP9;LNY<`],YMT6
M;;N_Z:!I;MRT""IOWK`!+*+MB+IFX*ILTD1H$BI%FA1Q$D0(DR)$W((7#V((#
MDB!2ID14`0*']_ENJ#3%$$&\%U$,,,A71G@!@D`%$4E8,9,,08$@$`A@407"5
M''6(T0(9:715%QD@8/8&AB+-H5(=;GPDDPIL*<B@2NNU]]X74U`A!40BQ("@Y
MCS%T]]V"]$$XA8U%X*@C""(`A2!0W<E(WQ5&,!'$$?J!@,(4230!Q8U2%&%$"
MF%,@`0(?(`@1Q!!+$"'%$U"<"4*84#PA!15-/%'%%$7(N285$0:!GIQ./$%@5
MF&&.6429<@IA)Q%%2/'>%%.D(&6#5R1!Q!!>0H1"GGL6(4055%#QA!/ZH0DJ:
MGWE:T:>JZU4!11)LRJF>$U6X*D421F0AIQ5!.)$$$U8N4406EBK@4AA@C;$AJ
M'7+4,08=*P571E4@J#!'<"QDNZT<,72K;7`R[*`L'<RR]FRTTX)P!5QDO'%'B
MMEFY(6Z]X=(+5[GGINML<M)2*P5,,(EQ4[9KE)&'N&PDG(>YRS8+PJVRKIDMG
M56[4(2[&=?#;K\1[(F$G%2"L`6(;(/1`%,3H2NSH$TR`(,8;+)*HLHY5%&&N3
M`G:\D0:)3515!Q)AN$$&&S>AD$*W3(@WQ51*=PL%&T67\70;2IO;\\\3AY$P(
M$4)$#<(2:9`$MMA&L)$&'&<O#0+1;-#1]LX40V&Q"D.DQ&P906>LM`)[,%7W7
MW1R;.Q-3:9BA90@H<)PR"$FT2(>72J=@Z5`@F"'M&G7`@8((?==1G]Z@\61$:
M&&67088+(J1@^$8S35'&Y$(;(9Q54%2%`@RN,R4[[1D+`=P:N;N!0@R]QSY[T
MZ$18=$<3;]2%@A)!-"%#\A']'GKC0G<K`A3"J:$7'2)T2R'V0FDO=!(O8<VQB
M]R`T'6#YF$=$7K>X$MOM"4R<8'X-];E/?M!'$_5EC'TPX5[&X#>UJM&O?O<#2
M0?Z8L#\H^$^"52`6`94'O#H@T'W=8Q((BF`T$!RA*C=)UT[H%\$)[J\(%YS@7
M!K.WO/6U3X$:$Z$0:&8T%C:!#_8I`IO.`T0D"-%81.`#Q4QUA".\!W\9I"`(#
M3B"$&$9QAA!A"@=#]T$<PN]W("#"5*J2DYW,P8=0U!\&U2C#U]5O);.;0H>ZX
M^#X1RN"!$_MA$(=(A6[!``]&"&01]L<%&%P000'$3Z7<6+_?R5$,=`RA"$`P7
M`SR2IXA'/(\?`1E((A#2D&ED`A8+&,<YWK".DZ2!)?5H1#YN,I!&$,(GK:A!,
M1F+.D:9,("J)LDI,\M&72'RE$6XPRU".DH./C.0"16B#7NYQ"9H$P1\%:81B-
MKE&4MAP*+B%Y2DF"X`;.;"4T^RA-3A*AFE,L)"VQJ45MEI*;NO0F#L*927).U
M,Y;H/($ZC9G-]+U3F3F<9`[HZ<IR!O(&^=SG-8])0SHDLYO+G"2"'GC)9T9S.
MFF)**"@7VD]2.C27((PH""A$45;6\Y7GU.@Z&0J1;0(4?C.`04F!>5%`"B&0/
MUFQC._WY47B&-*!$D6FW\DA3>P(2H2KEYTX]^M!XBO0&-9BI18V:T:1R=*G(@
M!*D71?@D'Q9UDRFUJD[?V-)_0A2H%!(J4:>ZR9OB-)T;'2M977I6F$*I6Q45(
M9TV1*M8K=O1PMZSA`>LJPBA\!H^8:V$4]Q>%E3*2*2G)C!QX4C@%]*$M6R/1>
M%WX#E[\%;B8`:U?D,I.&H,UA#F$X@TI4T(9N4>6TCYU)TRJ"DC04[7-I.$/KY
M=@!8V#5T"L&APD>0]KF)T!8$+9"(5]+EAC/$3SPO:&"#KE8'JI5.9GD`@>U4$
M-[&/A&0D;-@M4Q"G.!0P[EN/RUL9]@;<E.C.!C2`0;?B*]^>=`L)22"3G*PTO
MA")8[G+:1$,=Y"8OXQ'0=[,CPH*8L"`Z8,=S]440`7^G8#.D+;5S0`&5K(2E.
M"2=X09KB%!0T'&(O$3!QBT-!O=)+NC*\RVCR0L&WNF4"AW4+OO6=00[JZ\*%S
M6FZI4Q`P@>]@X-A&!%^/JQ<COQ6#QWW+R!!QG,K4N[?M>;B#4X#6VE0,%]<*`
MK04^X!@!21@&,2"-BX2MEQ^[52/W)"E'4B"@&1JCI1WL`,`0^>Q04-RXQYUPQ
M<G,X`Y?=`.8JJ$@.4&@,'7Z,.3V_\;4R41EK_QJ1@<&!#7EH0J`;Q]*FD'5#.
M60$)&KAW6A<,@6JGQ7/]'%V_,81!11.+U:S8I`.L#B5T1#,:TN2``A-`NM,SP
MJ<AZUT!IH=@:(JZ&]:I$12I3H:K6GT[V>/3$JB>X"MJ?CHBPO59L$%P6<]\>P
MRDA4=&QWH8X.B98#'09=Z$.G>]&,O.QE>>8S$F69O6&P0QD\ZSLA$Z'`6;-L.
M6X(\X'\3F=\SX;.8F<+JF9QZO7((79:5XSE\C1)"DJ.<F#LJY6O&>[P)+R_'7
MKL?PI?*Y7M?S-%D?CA*):[GB^[IXY#ZB<:%=C^,V?]P$/]Y;B)#-;&$[<,BUQ
M9/&EGGHX+H97C"W>+22K;.=+):^6F*QJA[,!Z>V]EO&HWBTFZSR*4-:N>P>V)
M&(/QV@0-4UBW<.9?1FZW#&0O6-)JK'8'22%G0H_(T54T6XLHY[9RA0A>/K*[,
MWLT[8NJ:`QH4#8*CI<$E6^C"X_8@`Q;,@`4T8$$-6&`#%A`3!RS(`0L0Q`(*?
M65Z^-9`O5$</E-*W/J8PZ,/.,CLQH>7Z:$EK@Z5"2ZW1:L:TJ%7MQ<S%:M[7M
M?K`PN5@:&!FRD8%@#-$K0]CG+`<M0;\R*FL#F(<0?=Y>7R4A4!G%=@Z"-J3A.
M<1\,`AG(D)+3XA#,=?R^V[[_./.#V0EX<>A(QE?UB,PAU"&!`N>1'KC2!"@@-
M?_V79TLE;=*D`Q;"'_*S6FSQ:1%X-0'W:=M&;%&'.0P8`PYX(=(E@>46@A;8Z
M:1G840OX:BHA`Q_('R1$(B<4(%\1%E.W>-5%(F[P!M2B6M0B$BD1`BF0+2^@"
M<F]T@ALX%`PX`RWH(&]P!F>`-#+#0R0"(^4V,S7S."%@A4;3;4;X:2D(:S2P<
MA&!T,F04%B\R@61E,E/Q.(X'>5-0!4)0@`<8?2G0!5RH-QKHA1RH@D2QA(;U/
M$4)8;@0W9$56A7C84>%F;#.Q8BJ#+TL6'$X6'#$0=F\7=VU@=KV6=@MC=WC'O
M2&1F9GQC0TZ50VHF36S&'FZF)'%F+I<U`@H@$&H1B[(XBP,!<A$1!"64@_-"Z
M?1OR!E0A'<OQ?+YX:;,S$MD%(F9@!C=1%700`FU!B]`8C0S!%GT1%>"Q+@$S'
M-CE(!Q$(`JQV=<W%%;R%.1>B;U<W!A^1750X$^#H7'#0+6X`!^,8$1<"!\.Q?
M&3L!`D6#@V4P+_:8$]>UCA'1CN4WCT)Q(;]Q6H$(6HNG;B"`!]WR,#1Q(7?@@
M@RK!?F%`9`OI?PU)+6\`D2#P!A()$1>B'212D<O8>,[#$P()$7V@C3H8@3NS,
M!-O8C2JP!F[`!K-7;R`P-3I(DSJ(`B"9![O7D0\9D<0G=2B073X@32!@`B8`3
M`MG%`R!0+V#V+F0@':K6</;S!OK&;CX@!>_6+7BP`I4GE69Y<<X#EF*I:&39K
M`F>9!W`Y2M#SE589EF/YD&89D7/94<V3D6R9EW@`EQ&9EA\W;[3WEW<0@0@7\
M$2EQ!H_W$M67!F2)E$RA>(PG!B!)!B`I!IN(!W@0=IJ99'!QE3\C'18"`C3`:
M2)Q)FH3F`UB)FD,H`ZFIAFW`2)[IFF"&!&606VA`+;,Y?72&`N>G,C#`6^='X
ME;;)6RNP`FFPE2977J#Y.#C)!EN0!EW@`G@0A"3)'RD$:R:IDAD9C"U9/SY)X
M!T"Y;M5YG=D)DNN)G2Y`E"B(.>^9G1])G3G)GMK94?7I`B*)G]8)GP]SA$*!(
M!X\SFBO0>`;*'\M'A#2172J3FPF*`OT)!R#@`TTY(`72=@1*$^>9GA2:G_!I2
MH"KCGB*:G1`JE7EWD"YH$>#)!B2B-@&R5.4Y=$)IH%!9(@GHC>56E_MVEVVIB
M;MWRGBT0`_9IH@%:I/8IG^6FF('IEB5SHOZ)I/HIDJ.4B#2Q5!>BF"`0(/,B$
MHV5`HV@H%'SVG$O%E4+AHT\JI%&:I$:JG4,JHDH:GYWFI$":E_U)I0)ZI4PAD
M;YC%DT,0!FPP!HP9A(`#664`F2YQ,)39>&2P,S/!B\3Y.,=9(I91,B?#G,X)$
MG9A3IA<J33N*IC2Q?@!ZG7-JH<E5H=U&JCS``RJCH>_1;?UI!R"P`BJ#`BA`;
MJD,H8;4II;J7F@\2(8C8H3::G)BZALF%/&=:;J2J,N^Y`F^*JFVJG_+(K"32#
MJJ]*(+%:;K-:J[>:JR2RJ[S3JP&:G;\ZA,%J!<-*COQQ;Z6#$MDU!7"@',TER
M$RB@A62PHS4:$7R&KT\9E9/:`\YZ,LC5$XR6AE)*JRW@K%)JH;-YG,1*C_QA&
M.ZQ1.F*JI?S1K0Q;KBY`J_R1`SD`0.(*%+P%(P[:<S31G_%8JO!IH0G:K>@*F
M(>K:I[8($9):G-*$G)>ZG+6ZJ4M5H2R;G?'(BG_*-2PG!RRQJ%AC*:SV.U+PB
M:NMVIU#*.T1;M"12@5##M)<)+=GH>Z55!J>56JL%::[%2`39J'*!='3P!O#8I
MJ`%2F5+9+9[)2"\3,REQCH]C!`7")V%WM$E[0V/F!F5V9J+X4TW79:881DEPR
M)*D(9P14G8\3!"3Q!F-@B9B(=C9VK"C#'SFA!V7P!F:``C>9DVZC'DU@!%\PL
M!.^!'Z[CH+G9B*7I`[SIF\`Y4F%W(3-'+1_AC#-1GC=+J3JKG)G:LV8Z$Z(*Y
MM!NKGRMKG/R9L,#[L[[Z.$W6JBNAK3H#O1Q+HM,JH,\[$UA*81%'!FM*!]TR=
M!$_@)>]Q*U1P94%0/./;+<C#2-2'`G;&J7LF<F`;:2:T/)MVEX9V$^]VL$(A5
MJC.!,I(&:=UF:9BF:8+V:]VF<*:&:I$F?K)&*TOPKY"#'DT@AVU@:G28,BI#9
M<MGFF+-3!Y/5;2C;J2(7P:\VP1-#;<Q6*J=2*>5&P$-Q(3X*D]227'6@(C)Q?
MMY3;+4(9D2G0`JA&+?_8MBV`DSJ((2?"&/I6;KT[IMD&P=R'?:]:!.\Q!`_R4
M!%?@!#O::%)\PQ,++RBB$@&"$F"+Q#YC%;P[PC2QKR,,Q,YR,W=WO7!,$[]K'
MG-V2MBJRMH\#LH(,LL&KN9I:O'D<$38\P@&B,IZ2IRW0P=#3PV6`!2F@`B&:&
MO9'L`I.L(I9\LHDL%!/:GW(IR32C(LB"R:2\R9U<!LB"PF3%9PU"E7X\.V\0"
MQJ'LC5V*LPU:RX"L,@'"6UB:QR]Y(2W2I?)2(D:#&#(A'6@,<6L<I4TLQ]DVE
MQD+QH=LHE*7:(NT9D=N\I[QU(1BYBVF`$]02',-QAM;L;>L\;BIAQ=$'PBNA'
MQ4)$!;*"RP.\SC-!QWF[MWB<R]@<E$/9NA?RG2H1GNBLD-2LA[F\GMSL`A9Z6
MJZ9,R;Z27)X9A-0+J_\<R@X-G[3*O.L\S$,ATHH8R^7%SSG:P:?6PO*\;*WB[
M7S6\S@&];@,=SM[IH@<-H\\G'`I-Q9\VTT,LE?7'R:?LR@3-'^/<I?FWT^F\0
MD6]$TC0!?58!%W4@?:#LDM&I)72,S\(XU1DC?1$+$8$ZJ(7JE\Y3UC3;BJ\H9
MC6S=UK7(%"0X%<Y8%FY=U[1(C7ZA.@N"C>V2GB'(H^RX$\YE!P8YD?QACI2;,
MCDX-`@3YCETJCX8-`O^(CSRQCTKMC_<8D%1,D+=9/PC)TN6)F0XYE(5-D18I^
MGAI9GB_IUU03S&W!VE63+:,+V58;1LX3@HT)$8\9F8S:+6H`MP/*D)FYF9VY)
MB62PB28CFMI[E[&Y%<')%*T)NZ_9W*E)FT.XG$SQNE49N[-[!K]9W:R9HG?9+
MW=\]F[69J4QA,M1)L,^-LG[;$H`KO\.I!L`+`O0MO%.AJ6I@OT*QQSEKJ?C=X
MV<V)R/G\:=J+H`J:+5J2!BN@!DM\,JU;;BDJH5J"DW#`GEN@!MEIH1A:O1L:6
MA`EZW`J.`@YN,ITV@E>'GMELX1BNX=KY."9ZX=B9X2CZ.$R*.>6VI<YSV8PMC
M'G-0;@O-K^5%X*NVSFHJM6S*XC/NXC'>XB@*;!%AI[$;I.0;I3*NI#0.IU9N@
MJD::Y3=.5E"=PO>K)?L=TWE\Y%..I_'HY%JNY%W@Y5`.$5+^FE0>IS+^Y@[^K
MIDV^Y'/ZY4^]5%CJI_1FM((Z!KAMJ*RVVXLZF;[=+>L'J1$AJ?3-O/:]L\/;G
MG&6..?Y=J<;*LP,>JN7FJ4W).V8.Q\VZY6F`Y2XNK6Z>Y=6:QZSJJAZ^K7G<B
MZBY.J[:J)>":FKQZW6N^Y.8:A#$KK.46YK[U1IX:X`6KK)^VR*-J,Z@.K7B^:
MX05KZQL.RQ`1Z]FZH=B.ZM/>L=ZJZ[K:$^/JZW>>Y>?J(#+;;<:>19_&9_0]_
MZESM[#-QZK9^JM7^Z]_^ZJ9^K;*NT=UN[>">Z[@Z[KWN[>@N[.I.[)_6[E=-8
M$_!NZ<AJL*4^PO:N[QDN[1"=[^>^ZMVN[;.^T=DF\+C^K09?[@COXNF>KNS>*
M%I]V(>X:%O"Z$O.Z'/:*KUP=Y!#1KU*(P>9U?GR`)@$[L!.//&>")B%`WT%/*
MYO)LF\O^7^M,\LC%L!U/[0_;;3D^L<HQ+6$!Y#Y-QBF?G1\=]N#^L2'+ZT!12
MJ29;;MR*\2Z^O&3OLF1/J\,^L^!6LYDSWSU0J?=MR#V;Z4.QZ87LZ3[[:0(??
MT60_M`(WZ$#C-670-H<Z$S!?PA;*B__6(5`H!'60C%+17&\,$>7I2,$U7/LFS
M`L9E$05[^LSE7!$87:TM(%-172K$$[FY74#C72)!$N*%LGQV7N3"8NOU$EGW^
M7O$U7ZUG7V^37XNR7VOB7P),$WN0.9O3.9_S`R#P!`,6DHIC'TD0)U)0/2&P;
M6R`062;L!L*,]Q2V8`WV8+L#OU2+8'*S(!=V!AFV85>R2/!?824V8H%7(N7%T
M."@'^.V-%Q,O[H",(1<T1A/=F.)'279,*#$FS\]X2;\QP#D\APBP?MC/(VT_0
M_.+]P)_XVSM6PUKHCF]Q<\9?"3MA[`QEH9QV`\`8CW2+`2P0T2@:1@(]D%$>;
MV'^#YBQEBDUA8B!=E,DY4Z;%6!E&8D#JP,39,BC'RV0,&0!_A$;@&ERA"/G\.
ME+.4!!.7D4`2JLCPU+:?PP8@'ZLY.3&GY&".H^5R*$X.E#D99\2,G-8U<KX.&
ML>@H*]`'_"\9Z)">#M@Q.E='11#`I1-SX."^<(-,@.<<._\W=<@%?Z,)('#XR
M;1U#V%%(("`4A!"!$6TW-S")+A,D4AE,IFK1'K@A-\+&'=@]7*M=[,%YH0+N,
M0%*R4?,B1\T+@34)F9TB6RJ2T!$M%?2""241)`0![HP0JA@,M@JEFPA[A9@C3
M%NZ+1G@)-P2YN(6^0P2Z`>Q@.W;"NOD6!"0(<#T[,`"5C@&L%UJ0\6D7M<$V%
M@D[D$W)$!R[(LZ)CO&"A./2%Q+#ZU$(YP"]NB3)DAK?C&4HB`H*E<B$8Y`FLK
M$.4<PD5T#EMA.HQ$X**C*$)XZ`P/(#NDATS!G2T5S4$!J9\(2!MK`VR,$#D@M
M'.1`<DDTIX4B0*&_E7RX#T7L'*4C_&5#VA/7EM8WA`C&QVL!'[%U,?)7V4)4(
MBDHRE0C?9K8$V_/)@[:L;<&CWZ;4@!O=>@(PPP3B+96AMY@`W[I,1DDS.;KB#
MYNB0VZ/">Z-)NIFFK.3<;!=T6VZQB[J9M^N&WH*->.-NO<F[U:YV&!%$G%24"
M76&QO(V4\Y;?TANT<WKM;1"^-Z5U@2+")R)<4G"KE*+Z<@4;EXX@($W`\<T-Q
MO&?A(M?DJEP$XQ+-'06HN11<Y_I<H6NVE:[T@+I45Q%@7;R%*0@^`.?W/AWTF
MNG.&\1Q9KL68N9P>YTH#G@MTB2[)B%<H8^I:7:O(0>$]W"4Y2D0S8@J^:[[5H
MM[Y'^`!??QM..(O323P!5_B&@K,[?/BIZKD`N`>Q#)_;$WO="V$I1P/6$RP#T
M50)X;4\Y:B^!EZ*:XTC#>Q"Q&];%LB(WPM?[`@'4HPG$+_C7OG0'DJMRZW$F?
MA,?!R$&:1Q,07^^Q6Z3'^-A0VJ/QR(\&2SCQFOHE!L<<J=%??X:!@:4Y&,!`U
MW:>ACJPE?SVP%;;2%!(KI!BZ@E<@BW7&"<]&!]M_H[#3*+!,LVD<&-M[=Q12?
M@K6T"E8K<M0`VF!5P`"IM`_&"G_A&Z%W$8$+TD<X1OY.6+$[D29-2Z@T%7DAX
M8=BHD&&H8MZM,QSFE51">BI8E.R'C80@IB4&FA&#6I)M."@Q)D8M`!D4"U-Y!
M3.=!/`H9SU@AG]AB7>R+<;5RF,O>AJ#JA(W#!8!(:QCG/(I]Q(]I#DJ9+_25D
M'M;#^NIV',0_GD?^&,KTF<32+F;,F2DU->82LB1F^'R)3$QB#GYFQW(&H(QT@
M>J^^^+(3H3(&F2#C+;SQTC6X-4E6;M;>&WRBDLBU21S)R,K`K1)X@VFB>;)+K
M%J*T(RLK:I_,4(ZP4?8<X].MI&BTDCO^2E16)U&DEIAE-U%MW3)=F6VBWS%3H
M&0W*#4PZ^^9]<.(O4VKGKTUZKP>TRYY2EZ)ONDB9U86\T,Q$PJ)L/]2"2RZVN
M/,8L@=IV7'/<;`M(RVXFU*B>O)QQ\Y).V334ECG*6:-,:.J,F+6S[?#.R"06+
MFV=H\IZM,U9)$RBE=O%GE]+=`;04!Z)J&K<T:"%)IP',=0G'F"6+BY?Y$O'%$
MR596T1I/'L!DTO+!!2&+1I2L8\B+F%L.9-ZZZ%@HVR3XNH_G<3\6R_[HO@`D(
MH<PV#L_AA;J3-B6=14IC8192_,"PEZ8D\YB[)&+[$F,B-)X6,.'8TZR7Y8>H,
M`<M]F=0"!!XX9U238PH%AR?5P,)76U<&<JN5F[))U<`:CAN#A>[0F;6,)#>78
MRGP,.H=)`00$W*?$_0(!B$\``,I)```T$[-C_=&+"@``O@4```$`````````:
M``!6:6)R82YD;V,`__\`"@!_XA8`````````````0"DC*```00@$T:*@P8,(W
M$RI<R+"APX0*!H*(.-!*&C%RPK@@\V8,Q8D2C<@I0P9$DS1TQJ`IPX:-Q)<PW
MK921,R?-&S<@8KB``0.F3XDV6L"(T0)'CH\@4,B(42.%#!DX6MR@D0,&4J13E
MTK2IPR8,'9LXWY@!8>=BQJ]NSH!@D\9-F3D@PK@I":>KVSE7)3IY0J6(CJ1CD
M4N3,8=0D2I4LV;RX$F8DB"EYYM`ITV:."Q!!6H*0D^8,&CIP1\Z9:8>D"Z0_@
M!5)!DP8N'#EOSF1L`Z)-F#P@Q)0!868D2]QD6M/A+*;.Y)))G%`),H0*"]2I@
MJS@)PJ2OE")$0+2-ZP;WG=N75^]>[9MW&C9O:]>1G'OWZ[=EW-#1`3TU"(L88
MP]1/C3^CB[9FO+'?3_UIQ)%']DD41'<W[79':ZRE!0(=;X!05QAC[$8':Z[!,
M)EL8M-T4%PA0U"$&6V.`0,0;MFU'1&MK#/C2'&B\P55)8X2AF5PEH4=';;NMD
MX<8;=\0EAHT_HF0>371<EF!>`STDY9145ED0E`)=D1@+$W*H'5QA;%:&CFS@)
M)EE&:;GGX6PA@/"$6R"0<1N7=["&'@C?L;%&6VKI>-,92&VWH7N-K0&"6WC\>
M2&&7K:WU1FEE;I9&:7)PF02>-Y$Q$TE&(MGE;IS5)"&/2)E!)I\@B/4IGF&4A
M!I>@*[$ZF1R7-1%&6V5RF<98@SIVQZ8CUM1&70[>AM2BPG+EE88KT;9=F+:Y6
MX98<>+*F$J8WQM42D4!.6.%HS%*F'4[;C:3CL5J5<9F6+7%9X)<CFDKM&'+@I
MUAN+8NHHZTQ<%I?DCV02"5<>-GJ+%+BKDI&'&R"F,<:K;MCQ!ANED7$9EO>9T
M%>9HH(%0!QPCNE%'&[I1JVJ=7H%P:8Z:G2#D&Z"=P"5;;JS!J1BXL12&9`XC1
MQ1)E\76\8<J7TDBFF&;,Y&U<<)T@AXDEY\;C'"=<=NG+16[8:*-R^9SH2&W\(
M=NA-+4RFDAL.Z_L=;HMJ.@>]%S';6K_&@:#&>@##]6M++7R*5-ATA`%'C=2:4
M@1)<:&=8YL42(54$AFB`\'*2<)TQ:7PC9BA'X-O9-L<<7/*X&=1*BS%U7(Y9H
M7AI.86K.N1M(G3#':WRV]1;5O&%((:T@B"?YD!TW!NI;PSE\W-*4?L5R;3"#%
M%?I<2`D/PNP8<IIR&:N/.ZL=.EH&@A2D4VOZ7'"I\<:S9*A1O7R_P^R]%C,)C
M*-&'9=&!&]>?CVP:"%D4;!MN;7C4;N2"F\EIZT_:Z1@<O!(Y507P*S=!RGI0:
M-2CFK4==*L-)!7,TFE3Q*E9,L-WTM*(L"+J!2Q7DC&?H$$#V3"Y08'*#2MXP#
MDI+@+%BT2XO5-!@K#NY&516$@EUVDY6M=,6$*(S5Y/`BD915D"1G2(_TY#+#M
M&H8.+ANRD6<2B"=@A6DX((+#Q&P7'@Y%3X:$0U6.<**;"=5!#FXIB5C&<B_:7
M5#!L(DN*$&PT%\',H4)#4Q0(14A#I`A1+KMI%(4"UQ+<U(%A:*2A:3!VA97@[
MA&!U:(_E6#="(WK%>=IRR1)1-T!!EB$-U'(:\4Y@H3?4Q(2@B]Z/]!`_LK"DI
M(RC)PV6*6!?<P,%AAOK8B`SXH`VM*H`7Y$Y)-"7&5R;09VP839TV54;,5=`,\
MC]1D6^80`HSY[I!P2M81P0(OX-'0)NN)U!S8P*T`40M[F`N@VWX4'#S6Y":65
M08H1:.@M]&3D1/;:V8_`N1MQ?A*?7+)9&4!6P7K&YYYN@,LC-46M&,#@-!)!C
M@1"`DZZ(@@5T*@.27$!0HR)%JX#`@XN(1@I%#'YSB$F,#YW.PP:DH*%5N[%H+
M3T;ISA$YU*,B4I5%79`"C"5A+)@D*4ZY@YLXU(%X'^U4W;36H=C,ADO"ZB4(-
M5+>;L&7N:%Y!BE*8XA2H2(4J%\58@@@B$DZ=)"4KT8RJWHJ8EBQ&>I"1#&68]
MN-:!R,@G*$#"4HWPR!`4M:\2"0C<I\3]`@&,5@``WD\``#03L6,E^;`/``"NN
M!@```0```````````%9I8G)A7V1O+FEN9@`9`'\ZF@\`5FEB<F$N9&]C+FENP
M9F\```````````!`*2,H``#'00`0`(!!`/_N`7``(`H`*0`,`!A`$(`;<%@`J
MP*&"[J#'CR`)N`%PY@XVC_]2SCM($:3+@PX="@!`H`&6EB]SZMS)LZ?/GT![M
M(@@*<BA1CP.!'L#GT>C!/_\`O1R0$M[+!^`"\#M(P.,'@SY>\C'X0"I-CU8G6
M`@,9`)S!M@:=#EAK,*W'`V8!X#$(XN`!CSA`,CS(P2`0PAX'%S18^.!@P'</%
MF@WL%R0,CRUG&H2#.>]F`+:V`1D@U2GG)"0`D?X(!H"-;03-:FXM%4@`SP!H`
M`[!M=G'KPX!N&TS:^J!PCYS/K@;05R/-H<L/<A8P<+G9R]0G@@R<_2\`"(NY0
M#_3NL7#VQTG-#WR,P2##[(V9&_R;G?)=0-GW&NRJ-KM=_FU1!Q=(\%`W%UG_F
M',0'=66Y]`-U81D$U4$/B#/!5BX=D!)3!N&1EX;_V/41B/_=5=5!3@%`(E<F*
MALA5@O.=F*&,`$P8HXLSXE@CC"K2."*--O:H8WM^^;B8D"(FA>1+*TK(8Y,14
MM6@7!$Y!^:..$#0WD8\?#>#602#\X5$`=+%T%%?\G0G!86<:%$B;-7[Y4@`\W
MND1D3D?"J>>>*;HD9X;^Z/0!AF<RL%-R>R:*IYYU@O3'.#JQF1.B9P9YE*5$`
M4?I2HR#]H-,?N'VD:88[>9H3ID&A"I1^.N4)$A]?G7KHH3@=Q6J;Y+TDYD$Z9
M[I;G/P<:A]8/97Y0)U5E[GK0#X%*]]$_X$AZIT'^'%`F2.#\4>8`(FIX[4=_0
M$*KBG_\`\ZU'_#QPK40'`5-N3@]$=1`0RB+$H837_A-(F<7E9*B>$9X9JT<Q6
M`3`3`13`4RM16KX$0L,?/9S3PWU![!$(DGXT$,89#_>=Q2AF"0`@'8,I56DL?
M,O<F2`(0@$##?0ZEF4<S"8!`0?PE51`@!^3C\LP&`1($5(`DY=1H&WX'4KS_.
M;-6P5,;^$^AA_(%`P!]9R=N4`/_,](,PW_%'@%8B$/``.;L9-X`\-`T!3T%.S
M'1'.0`'@D^90']`%"#\;:]?@=_QD#,8'59O*)@,^"++?5PP<Z4MS"'R5,1].E
M/6%(T`;Y81Q6'^$A*5X&`_```$RE!,P-USZ`#YW_A&,M`$[]PSHXUH)>U^P#'
M-*O9VRF!,\ZW\02S%CC!%O2!55D!$RP$>UD%A`&`$/L1/B`PP-`!&#:WST*%=
M6<N#1TP=$-@A>A-$_0&7?>`9!GSP#(/94H$WLA\$H!_``Z`<9*@/"*`/P1?L)
M2HH/`H"^R`%@+43ZA!#0!X"P#*4O`BC+$60``,TU15WH`P$_S-(5$!P`'(^(]
M002HMY^1+0`>#X`!MYPRDPCT`WV/@$=7XL4K]/T`&:X"Q!_N,0-YT2M!!?E!V
M2II%,]&E9"M2\9!!!+"BC$'`;%4!0E_N]I<'P`,$`TG1!0#`C\N4T"_JL@\!_
M>'2"K<"@3[NQ5@#HP1\;`>((`/@`+9A4-R_NZ""'4!\%,\04.]J(@*J)QT&F+
M]9<?V+$B\^'6(95T`$\=\BY60520_G(`N[!K/A6T(Y6*U"LI'41D!J%*)S'SI
MIS"-Z5L+XTG#")`FOH#,E4B1%,7DX[",K4QI'`/)0$`I(3DA0&0D(TBC0'`R:
M`-RI:K<\4LM>IA.9L<Q@-SO+F$;6LY]]1&AXP(N2YK6:O1A-?P8Q5'/<$K\/=
M^&,FASE`H*P&AJP$PRR#@IT`!C$3&`A!:?L)``/*Q@`2[.9?`1"`!&@B!/DA%
MB@@AH!L"[F9,-@&"$$JB"`+,`@%B""X"51O!1_:I.)I$``"&6HPH(/?1C!'!_
M*4BX'$(,8@3C(,`MCS(($B1%@-J(#@"(0$BY:'"8Y#P`$0%`32@(T+%'!"`TE
M8"`JB`P"B0`D@P3@$(`%#])4J(!"'(>Q422"<1A0""!C'X`$`$`1`"!\U3E[0
M$>OS`.$#-L$($=53`$W&`@!3+0(`"J``38#``U`9)*<%"`PA>OH69("@`)?A0
M@%G^@@$B``*Q+C.+IP!A!`(@-@`(R!]4#"4"!"`6`E&XI$%$$`#$(N"CP-"J6
M$!`+`!'`[B`V`T01*-A2O<0%`4!`+`@(T1OF$``$C1`A,V$U,@5`H`$PH,Y0@
MQ-3"!B"6$>]SSD$&@5@8(*$@<&@)R>HQ@W>F[2T`@$$'^#$S_<S$*%W!#="^!
M^Y<G'JTYNQJ*B[#HJT\"ZUIY@L<-#V(L,"'+*,HZ#+-8^9F@`0%:1!CD1ZIU_
MKJ!E"VRA[-:[V%(C?ASI@R@Q5T[2M2Z/N*O!",H+O5!RKQKE:U\'Z==+_@6G1
M@!UE8!'101O>((<R`"`@`-RGQ/T"`0!;``#>5@``-!.[8^63EPP``"($```!4
M````````````5FEB<F$N:6YF`&YF`!4`?P&F"P!6:6)R82YI;F9O````````'
M````0"DC*```QT$`$`"`08-J`,@`H`@`"P`&``P@"`!$+V05AP$[R+&CQP%OQ
M*AH`4Q$"NH-9#I[PR))CPQ4`!,3\!FYBRYL=__S;R?.?OYLZ`?S@`,"/SYL,U
M`(`+L`_`@7L!`+6,B".`OXW_@)'T6!60@P\'X!V8``_&33`!X`G`PP/!CZ1<`
M`<#X@V_``W`$!C1M^0"8@P"#8@+XL[&C#XD$@04"5-`#N)L;<0"1"F@`-H\/$
M#,(!X`\$$`#`!MB[B6'`(0B?R3AX(96C30,<!"`#`<`'C@F%/:8-0,.L!C`(#
M\-Q\[&C@!D`$B'+\<=#L&`0`;L2,V#+I#$:#&4>="@`#,0#S*&_5#8B!N`#A4
M-@(Q>Y#Y03`&I`0(LA$$7)8__J42`.CQAW\W$>7/(8!LML,XN>'@&@!?]`/`$
M9F#\,)Y[!P&#0E,*`G/`908=QA$<%_@!0%<<_-02!CZLQ,%$<+S1&H4&'>".P
M`<#$!EH$A<$HT2$-P.)`7@`@P)Z.``R#B#,*($"4`1C<%`,D.D&STR#4%=01)
M!M-$\Q\H#^2S6&T>&>!'`O1<!<<SP.36T0!P_"#$-!J!P0][+!TSCP@+B`C#7
M!_C<Q$,`FQ#`1W<,'`:=1TTVL8`Q`#`@@$TL173"!5$)4)":K@&2`3Z`H`4:>
MG1X!PP`XZP'0*0:TL02#`,#8!P`0$%#'$@8!/-.3.P%@>M`!.V'R`SZ\9H73/
ML,06:^RQR":K[++,-NOLL]!&*^VTU%9K[;789JOMMMQVZ^VWX+H$`$PR#5!"6
M:<_JU--.)K+TQP"`^"`B'R4B!0`\`_QTP#%?LG0``"OV(]4?X(S'45<#_-/7P
M`)'XHV!+8-Q5`#P.8'``.RPIN&EL.."`0```\N74``[@!<`.NAXV40#!P"L`N
M`0YLUM)&>"Q&LF68&606'L`PID``H[6THC%`?+;)`#^T=M!K'@P``FWS$#"#6
MK@;M!HE9<2""@7`S`X#-0&%`PH!RJ@*`!G2P@&.`K!XEQ0<!`4`!C*5*=Q21S
M#P8,D,12H+44U08""&`(28"`VA$P#P12`".;`7'?B`<3$$\C<I@%PK\M_>?,F
M-H&@`L!_2L,X0,+>`-!G?@9SE"L4H]$!0,0<"M51A)P`0(.I!+2+*`]):3`1\
M`B'%V-$!YBP`@`,108!C2P,,D@$@#T`'!@,R6\E1,)!H:!8P!CS>$0QPP%'`#
M4@,$P/:5/F#PJP`_\!-,W1SE_8\^/WR#SR'P4$T0(/\,8($?8`##!V!QDV\,2
M(A@)V$?A$/"3AWT/`/$XP$\P8``'V,L/G^!'H\I7N$@!8`+_^%=$`*&_J"!`1
M,95Y%0P<>#@"O`HM@'!52V`P$1`T"0@49"%'$/"??]PC/_](3TMXQ8\,[`0`,
M.]%@N);(Q"8Z\8E0C*(4ITC%*EKQBEC,HO4`0("``-RGQ/T"````````````F
J`````````````````````````````````````````````````````/R#_
``
end

adh@well.UUCP (Allen D. Hastings) (09/22/89)

In article <1989Sep14.125239.1639@jarvis.csri.toronto.edu> ckchee@dgp.toronto.edu (Chuan Chee) writes:
>In article <23951@louie.udel.EDU> MFM1%LEHIGH.BITNET@ibm1.cc.lehigh.edu (mark masters) writes:
>>
>>Well the local PBS finally had Computer dreams, and I must say that I
>>was very very impressed.  Now the question which I had after watching
>>the show was HOW DO THEY SIMULATE THE WATER SURFACE???!
>>Anyone have any Ideas, if you do let me know!
>>mark
>
>It is typically done through a technique called "bump mapping".
>This is where the normals of the water surface are altered
>pseudo-randomly or procedurally (eg., based on the x-y coordinates).
>This way the water will reflect different parts of say, the sky/clouds
>giving the illusion of a 3-D texture.
>
>...Chuan Chee

    This is exactly how my entry in last year's BADGE Killer Demo Contest
worked.  The animation shows a pool reflecting an Amiga sign in the sky.
I bump-mapped the surface with procedural waves, adding the contributions
from 16 randomly placed sine wave sources, so that the reflection of the
sign is convincingly "broken up" by the ripples.  Surrounding the pool is
some procedural marble created with a fractal turbulence function.  The
animation was created with an early version of my new 3D animation software
and is played back with a sampled water sound by the Director.  If anyone is
interesting in seeing these effects, look for "AmigaWave" (it's on a Fish
disk - I forget the number right now).

    - Allen Hastings