ACRS9"}xI @ D<ێf<(R@ #dQh5#zrUv.o`brp1?max}HAg+N3#DD$BBB,"DD*BS$LB"䐈D.8$$DB$$DB"ڝ̻ٙj wBXa 0a~Q8w(NUDh͠8 q .F| w.|8#xOyaJlIrRrT\$mtG0'd,eiKwĿp(l+vBQ"EQ\Kb^,oJ[fCŲTUleݲGA9,夜 rY%Um*OLQ5 ծnW/Ԩ)5Պ:EghޮHutnuHc*wbMLC?j Ay߅Y!d7sh!dHJ2$&93X󳋲0IG-ׯ5X-r:㯙=ln(5#}y68+`>Z!P :S!n|jKB@lwj RjHVAN⍑Y|MGu`"bfsc1us˜g-qv)'"xJ*J*~sxc`_]иsKKi=AE2i}`3_A Do'c(ݟLY P4_ Bς;}. JA["0oH;oBQ0 F( OPRxSN0=vRQR*DĀP'0UL `%tATR'$ RN)M˱9>HR*}$0/I8HPiQf]Si8hiEpy('cgMtc56/j _3x& +"C9g+?l|{>1TIA(Msx, H>c-kdtH).iմǟ)|;Ɏ|GG]>[N1a%ʳw,(1~]WVcNZjPǀU\ 8;! e9.~} ]Ӆ;?m-ww#VxS[n0\ 0 P#I =M-BW!0*IEM?jv9]q@qBqDqFqHqJqLqNqPqRqTqVqXqZq\q^q`qbqdqfqhqjqlqnqpqrqtqvqxqzq|q~qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqrrrrr r rrrrrrrrrr r"r$r&r(r*r,r.r0r2r4r6r8r:rr@rBrDrFrHrJrLrNrPrRrTrVrXrZr\r^r`rbrdrfrhrjrlrnrprrrtrvrxrzr|r~rrrrrrrY'{8602A660-DB68-11D5-BB51-00902749B387} Continuea; 'ZET #>M5 i!   ; Version 6 of Authorware now has much better support of ActiveX; controls than prior versions. This program demonstrates how to ; use the Microsoft Agent 2.0 Control to implement some of the ; more common features of Microsoft Agent. No Agent-specific UCD ; or Xtra is needed (you will need to distribute the ActiveX.x32 ; Xtra with your application of course).; THIS DEMO ASSUMES YOU ALREADY HAVE MICROSOFT AGENT, A TEXT-TO-SPEECH; (TTS) ENGINE, AND AT LEAST ONE MS/AGENT CHARACTER INSTALLED. IF YOU; ARE NEW TO MS/AGENT, FIRST READ UP ON THE TECHNOLOGY AND DOWNLOAD ; THE NECESSARY COMPONENTS FROM: http://www.microsoft.com/msagent/; Keep in mind that MS/Agent includes much more functionality than; is shown in this sample. You're encouraged to read the "Microsoft; Agent Software Development Kit" (book and CD) available from ; Microsoft Press. All information in this book/CD is also available; for download at the web site noted above but the book provides; the information in a handy form.; When distributing your application, you will want to distribute; the MS/Agent control and a TTS engine. You need a license (free); to distribute MS/Agent (see the web site above for more information).; Depending on the TTS engine distributed, you may need to license; that as well. You should check for the presence of the control and; TTS engine, and install both if necessary, prior to accessing the; control sprite on your flow line. Code similar to:; ; IDAgent:="{D45FD31B-5C6E-11D1-9EC1-00C04FD7081F}"; ActiveXerror:=ActiveXControlQuery(IDAgent); ; ...will help you accomplish this. In the code above, if ActiveXerror; is 0, the control is not installed.; This demo makes use of WinCtrls.u32 merely for interface purposes; (some listboxes, spinner controls, etx.). You don't necessarily need ; WinCtrls.u32 to implement MS/Agent in your application.; You are free to utilize this demo code in your own applications.; However, GanTek Multimedia makes no assurances that this; code will meet your needs or even work! Therefore, by using; this code, you agree to do so at your own risk.; Feel free to contact Steve Gannon at GanTek Multimedia; with any comments or questions. Email correspondence is; preferred, rather than telephone. Since this is 'freeware',; GanTek Multimedia cannot promise a response to inquiries; about this program and does not 'officially' support it.; Email: steve@gantekmultimedia.com m5 2{D45FD31B-5C6E-11D1-9EC1-00C04FD7081F}t t msagent.exe*y   3?E O [a #m; Identify the Agent control's class ID{D45FD31B-5C6E-11D1-9EC1-00C04FD7081F}; Check to see if the class ID is installed.!!; If the return value stored in the custom variable; ActiveXerror is 0, the control needs to be installed.; Run the MS Agent installer. (Change the path preceding "msagent.exe"; if you opt to put the installer in a separate or sub folder.)* 0 + !*y!t #msagent.exe- *; NOTE: We recommend using a utility like BudAPI.u32 (www.mods.com.au); to run the installer as it allows you to pass command line parameters.; The line below runs the installer quietly (in the background) so that; the user is not faced with lots of dialogs.; baRunProgram(FileLocation^"msagent.exe /Q:A /R:I","Normal",TRUE)%%   5 ?44{B8F2846E-CE36-11D0-AC83-00C04FD97575}t t tv_enua.exe*y   3?E O [a #m; Identify the Class ID for the text to speech engine. Below is ; the TruVoice American English engine's ID.{B8F2846E-CE36-11D0-AC83-00C04FD97575}; Check to see if the class ID is installed.!!; If the return value stored in the custom variable, ActiveXerror,; is 0, the TTS engine control needs to be installed. Again, change; the path to the engine if need be, depending on how you distribute; the installation files.* 0 + !*y!t #tv_enua.exe- *; NOTE: We recommend using a utility like BudAPI.u32 (www.mods.com.au); to run the installer as it allows you to pass command line parameters.; The line below runs the installer quietly (in the background) so that; the user is not faced with lots of dialogs.; baRunProgram(FileLocation^"tv_enua.exe /Q:A /R:I","Normal",TRUE)%%   5 ?&& {0C7F3F20-8BAB-11d2-9432-00C04F8EF48F} t t spchapi.exe*y   3?E O [a #m; Identify the Class ID for the speech recognition engine. Below ; is Microsoft's SR engine ID. {0C7F3F20-8BAB-11d2-9432-00C04F8EF48F}; Check to see if the class ID is installed.!! ; If the return value stored in the custom variable, ActiveXerror,; is 0, the SR engine control needs to be installed. Again, change; the path to the engine if need be, depending on how you distribute; the installation files.* 0 + !*y!t #spchapi.exe- *; NOTE: We recommend using a utility like BudAPI.u32 (www.mods.com.au); to run the installer as it allows you to pass command line parameters.; The line below runs the installer quietly (in the background) so that; the user is not faced with lots of dialogs.; baRunProgram(FileLocation^"spchapi.exe /Q:A /R:I","Normal",TRUE)%%   #KFkJActiveXOPLUUUU_n\O OOActivateInput string CharacterID -- DeactivateInput string CharacterID -- Click string CharacterID,integer Button,integer Shift,integer x,integer y -- DblClick string CharacterID,integer Button,integer Shift,integer x,integer y -- DragStart string CharacterID,integer Button,integer Shift,integer x,integer y -- DragComplete string CharacterID,integer Button,integer Shift,integer x,integer y -- Show string CharacterID,integer Cause -- Hide string CharacterID,integer Cause -- RequestStart string Request -- RequestComplete string Request -- Restart -- Shutdown -- Bookmark integer BookmarkID -- Command string UserInput -- IdleStart string CharacterID -- IdleComplete string CharacterID -- Move string CharacterID,integer x,integer y,integer Cause -- Size string CharacterID,integer Width,integer Height -- BalloonShow string CharacterID -- BalloonHide string CharacterID -- HelpComplete string CharacterID,string Name,integer Cause -- ListenStart string CharacterID -- ListenComplete string CharacterID,integer Cause -- DefaultCharacterChange string GUID -- AgentPropertyChange -- ActiveClientChange string CharacterID,integer Active -- 5 ZDNUU,  ; Set sprite title KDC5 CS%Z  Connectedy  RaiseRequestErrorsy(8>DW; Activate the Agent control.!y! & "Connected"& 1; In order to prevent the Agent server from showing; error messages (and in some cases, crashing Authorware!); we'll disable error messages.!y! & "RaiseRequestErrors"& 0o5 B2e4 q q \\q q 2y$y \\ 2y$y msagent\chars F{y,y uy ay.acs1y .acs3y y z, 3y"[].y`y !' +  /;AJPT  Xdj #  x      #1##   L  I  J-" &28  <BKW]  agqw  { ; Get the system folder by removing "\A6W_Data\" from RecordsLocation !$y!q & 1& !2y!\\&q 1 !$y! & 1& !2y!\\& ; Now make a note of the default Agent characters directory  #msagent\chars; Now get a list of all files with a .ACS extension in the characters directory !,y!!{y! & F 56. 2  1 3 !uy!  !ay! &  $!1y!.acs&&  5 6!3y!.acs&&- .; Sort the list of character names!y! ; Convert list into a string!z! !3y!, &  & ; Remove extraneous characters left over when list was a linear list!.y!"[]& ; And finally, capitalize the names in the list!`y!5 Cg^ ListBoxClickEventFontNameArialFontSizeItems ((x  )/8>HN Wagsy; The code below creates a simple list box. The list box; is located at 40,40 and is 120 pixels wide by 130 pixels; tall. The items in the list are presented in Arial 10 pt.!!40&40&120&130&ListBox&ClickEvent!!& FontName& Arial!!& FontSize& 10; Now we'll put the list of characters into our list box.!!& Items& 5 CMemoFontNameArialFontSizeScrollBarsVertical 8(  !*0:@ ISYdm; Here, we create a memo field to accept a few lines of; text from the user that the character can speak.!!187&56&262&40&Memo!!& FontName& Arial!!& FontSize& 10; Now let's add a little scroll bar.!!& ScrollBars& Vertical5 pASpinEditFontNameArialFontSizeMinMax SpinEditFontNameArialFontSizeMinMax  >2  %.4>D MW]akq{ ->2  ; The code below creates two spinners via the WinCtrls.u32; to enable the user to adjust the character's screen location.; HORIZONTAL PIXEL LOCATION SPINNER; The code below creates an editable spin control. The; control is located at 495,62 and is 50 pixels wide by 25; pixels tall. The value will be presented in Arial 10 pt.!!495&62&50&25&SpinEdit!!& FontName& Arial!!& FontSize& 10; Let's set a minimum and maximum value for the horizontal control; based on your current display settings.!!& Min& 0!!& Max&  ; VERTICAL PIXEL LOCATION SPINNER; The code below creates an editable spin control. The; control is located at 557,62 and is 50 pixels wide by 25; pixels tall. The value will be presented in Arial 10 pt.!!557&62&50&25&SpinEdit!!& FontName& Arial!!& FontSize& 10; Let's set a minimum and maximum value for the horizontal control; based on your current display settings.!!& Min& 0!!& Max&  5 o.p"p" Acknowledge Alert Announce Blink Confused Congratulate Decline DoMagic1 DoMagic2 DontRecognize Explain GestureDown GestureLeft GestureRight GestureUp GetAttention GetAttentionContinued GetAttentionReturn Greet Hearing1 Hearing2 Hide Idle1_1 Idle1_2 Idle2_1 Idle2_2 Idle3_1 Idle3_2 LookDown LookLeft LookRight LookUp MoveDown MoveLeft MoveRight MoveUp Pleased Process Processing Read ReadContinued ReadReturn Reading RestPose Sad Search Searching Show StartListening StopListening Suggest Surprised Think Uncertain Wave Write WriteContinued WriteReturn WritingListBoxAnimClickEventFontNameArialFontSizeItemsEnabled   #  *0 #6 #  <HN #W #  ]io #u #  { # #   # #   # #   # #   # #  #/5 #C #  IU[ #c #  iu{ # #   # #   # #   # #    # #  )/ #E #  KW] #p #  v # #   # #   # #   # #   #  #  % #- #  3?E #M #  S_e #m #  s # #   # #   # #   # #   # #  #) #0 #  6BH #Q #  Wci #r #  x # #   # #   # #   # #    # #  (. #3 #  9EK #Y #  _kq #| #   # #   # #   # #   # #    # #  ,2 #7 #  =IO #^ #  dpv # #   # #   # #   # #   # #   ## #  )5; #A #  GSY #h #  nz # #   #      #-3;; We want to create a list box containing all of the animations; for the selected character. Unfortunately, this code:; ; String:="Characters.Character('"^CharName^"').AnimationNames"; AnimList:=CallSprite(@AgentSprite, #CallString, String); ; ...doesn't work because the return type is not one of the data; types Authorware can handle (e.g. string, real, list, etc.); Therefore, we will just hard code the 'Standard Animation Set' here.; For your own application, since you'll likely know the character; you're going to use with your application, just use the animation ; names for that character. Again, keep in mind that many characters; have far fewer animations than those identified in the Standard; Animation Set and some include many more.; Build a string containing the default animation list.  Acknowledge #     # Alert #     # Announce #     # Blink #     # Confused #     # Congratulate #     # Decline #     # DoMagic1 #     # DoMagic2 #     # DontRecognize #     # Explain #     # GestureDown #     # GestureLeft #     # GestureRight #     # GestureUp #     # GetAttention #     # GetAttentionContinued #     # GetAttentionReturn #     # Greet #     # Hearing1 #     # Hearing2 #     # Hide #     # Idle1_1 #     # Idle1_2 #     # Idle2_1 #     # Idle2_2 #     # Idle3_1 #     # Idle3_2 #     # LookDown #     # LookLeft #     # LookRight #     # LookUp #     # MoveDown #     # MoveLeft #     # MoveRight #     # MoveUp #     # Pleased #     # Process #     # Processing #     # Read #     # ReadContinued #     # ReadReturn #     # Reading #     # RestPose #     # Sad #     # Search #     # Searching #     # Show #     # StartListening #     # StopListening #     # Suggest #     # Surprised #     # Think #     # Uncertain #     # Wave #     # Write #     # WriteContinued #     # WriteReturn #     # Writing; The code below creates a simple list box. The list box; is located at 186,154 and is 266 pixels wide by 226 pixels; tall. The items in the list are presented in Arial 10 pt.!!186&154&266&226&ListBox&AnimClickEvent!!& FontName& Arial!!& FontSize& 10; Now we'll put the list of characters into our list box.!!& Items& ; Oh, and we also better disable the list until the user clicks ; a character, right?!!!& Enabled& 0 Return :Zz :Z:}jp ˏ:GJ: 5 Cgq**Characters('').Show  CallStringy   # # 39?PV; Build the Show stringCharacters('##').Show; Show the character!y! & "CallString"& 44(    5 P?''-HText'3yCharacters.Character('').Speak('')  CallStringy   !')17 AG $ HNe #k #v #| # ; Get the text entered into our memo field.!!& Text; Adjust for the apostrophe (single quote); (You can include the ' symbol; the workaround isn't shown in this demo.) !3y!'& & ; If SpeakText isn't empty then have the character speak what was typed.*   + Characters.Character('##').Speak('##') !y! & "CallString"& - *t44(    5 C}}/HValueValueCharacters.Character('').MoveTo('','','1000')  CallStringy   ".4:  >D[ #a #m #s #w #} # ; Get the coordinates entered/selected!!& Value!!& Value; Create the string needed to pass to the spriteCharacters.Character('##').MoveTo('##','##','1000')!y! & "CallString"& 44(    5 Cgq@@Characters('').StopAll  CallStringy   # # 6<BSY; Build the Stop stringCharacters('##').StopAll; Stop the character in its tracks!!y! & "CallString"& 44(    5 Cgq**Characters('').Hide  CallStringy   # # 39?PV; Build the Hide stringCharacters('##').Hide; Hide the character!y! & "CallString"& 44(    5 ++PropertySheet.Visible('1')  CallStringy  39?PV; Build the PropertySheet Visible stringPropertySheet.Visible('1'); Show the Property Sheet!y! & "CallString"& 44(    ""   F""  5 dd$TextCharacters.Character('').Play('')  CallStringy   !'> #D #N #T #  Wiou ; Get the name of the animation to play!!& Text; Build the animation string to PlayCharacters.Character('##').Play('##'); Call the sprite and check for an error if the selected animation; is not valid for the chosen character.!y! & "CallString"& 5 TvvCharacters.Unload('')  CallStringy   - #3 # BHN_e; Unload the previous character, if applicable.*   + Characters.Unload('##') !y! & "CallString"& - *5 p lText.acs   !-3 # ; Get the name of the selected character!!& Text#.acs5 ~RRCharacters.Load('','')  CallStringy   #$ #( #. # =CIZ`; Build the Load stringCharacters.Load('##','##'); Load the character!y! & "CallString"& 5 CgLL#Characters('').Show  CallStringyEnabledEnabled   # # 39?PV`fn x~; Build the Show stringCharacters('##').Show; Show the character!y! & "CallString"& ; Since a character has now been selected, we can ; enable the animation list if it isn't already enabled.$!!& Enabled0& !!& Enabled& 15 1++Characters.Character('').MoveTo(' ','s ')  CallStringy  # #) #5  #; #?  #E # TZ`qw; Create the string needed to move the character to the lower left; based on the position of this demo's application window.Characters.Character('##').MoveTo('# 20#','#s 250#'); Call the sprite to move the character!y! & "CallString"& xcaa``;Q<4c``XQ-352{mwË '/\8"hF:*eKhn)O[TRpQ^[xMQIN@\yFd>$Gi%G!|7 G&KR]= ѝJj'XCOj:6 l7 JQ_FMl!pVS5!f- %toU O[Y,._(IRhi{&>{V9W'Is05l)òx)ਬ:p&*&b[*RNr#ʰS%OrN}qѨBt]X/G5%wqN뿍kސJ7%w7pG ^nixm7@ ׈t !$u1Ōm7b2D^•?x^-\Z҉ޱ ,#93+dD^K'xcdd(Ov,.It+)aebT%攦2001YD nɥũ)0X%ePԢJ4%ActiveXControlQueryxcd0a`d```b b<璢bRc#^B>V/}V@, V1f1!A1%ez@ x%"6 XActiveXpx``ag`eҼ`JCiV -4%x;R@D{?J2[BD܊\ o@H3}=Z)k: t^>}^cCWGX_pc|w- ڡ=:r7Ӑdm=aŒ{C;ww{xkrbދn-% e2ײ_̘:{:%f%~b/f`"L0&V&:C6Zڐ#Y_ov~Q} R]_/xUK @LFF/~z!= 7.~o騯z0c_1h$ qԘO'/Ȯw1Gk ܘaV(cfd9YPI5l` ;8@ dnA^xcfb`B& Ł$#' h''xcdH``d`0 0``b\ j3@&@e @+X LrI fIV( '͐3X;xTmkAAE_jcThO *~iP?􃛽Ito&M?%Z <xۢ }LؖAJk:pc' e`ڝ+M&kХC3b3X?>8ebX )` aGhS6h;#Yt{)p]܎=ʑ M>"Ce(-jGzc5[rsw\{MhEǪ:LM+awR*ɭL^T7We"&dbm/SV&PQZ'wQ9N ~_f##|RT`^DmmxPu*]jl܋z*bLGaߙ*T`4Y1 ӻ,8Ωtl z^uj0 Jcdj{:ӆ*DPx#t I3 Fߏj:>WԼ ~e)܂:uBcѭP~@ۋN܆\%?𔜔w]Q.$*|+W+Mhʼn+?45އiM}F{^h; 6 L:5e%Ek@ +[/IȤ:GM=Jo?4xl3>"1֔< 3ѰIH |/_bفQIYTxι 0Do \;nwD7tF6_j 7O$hJ }+tC&]PK78ҍutC%]v+uxxg`E˥QY!-6:+,@.KFױ"j`]]b*|&wڻ̭Ȩd2xp(e"2ZJzZ*I6m-WZZB/nڤmft̘&Ł,x,`x,`2X0 X0} LU`X._tp`>t:8`@ 0X0 Σ DX0 dt`S@ i ,M X0,`A 0tp`7A L!vbˀny 0 ~Ltp`X0B B%%O+=2z<(vV6hFiD>>>WjK-rpI؁H;LVh&hl6K{{Jss455Icc444H>9^NX>oe 7A0f$ 2ٲ\yEeUu}7 .pu,K4,,;pA˯J+W1CV]m5\ku]o nQƛ >b6b䖣=flӸ[ovNve&sw89'qQG3?ēN>N?̳>ο‹.]zW\yՔvuӮ֛nnλ=ȣm=ēO=̳x‹/ʫƛoλlY~'~/o~_~~}'lދC1/3$_e""IŲc^Ӓ;ku<)uϬ2Nmt6jdW}؝0Š0}a.W(k^Gbz&UQyW^Tӧ4_u]KQ|[> I6 (3рbY[k0/DfuE }rm #n-GQ,]Ζd^JjOg.ճh(W7*5` IZew(aMjRO^#e-IkYGReڸ@+ͤ3D4ֹ-ͤg=ͮ]ivΛN3墔fwfդG%gkTO0xu|Eߞ$x)@ڴ8E:K(:hR KPwhx ۽ܥ~337o{Ȩ2e KJDfeka~dm%qAggtS%0JX0" :8`G -:8`$4QM0̳}YB :8`Eā,8l&6 F D<X0@`A8`ā,)ʆF͂ D,`s,Ă, \ X01L>F̀hB2,`A 1  NI>ʊ&O+=2z<(hٵZN-JKeДkz56MC]SIP5, Ao/"im &YCڤUIrteɼF%F3}t_o%tUu&; XwXpAu /b7-RK/3x_aŕVbk묻 p7>e6b䖣zֱvwqnO{xzmGL<򨣏9vRqǟpI'riqYgsy_pE_r+\{ݔpM7rmq]ws}?C~:ɧ~瞟Bŗ^~^ͷ~ޟ3?O?Y_~7~}?/?; S"C9mofopN"aMM^xߙHw1I[V,e6Ul$]~9 ~&DaU~*$c[&HEsI~-y j#$?ݡtzTdqUɒW=3Q_o /^P{'qO6Dܓ05)?&IDIUEtd j<^I 4*l$l_6>:Y/~ilǙpQk#k2K*VXgJ㺊^+G@Gfï:}\xS⼼ ֻ E*ĶPU [*+Bo*lU(sTh)BW8ϔŬrB;x×xxE[lسF!D!` cW^Qc.+#Q]c?E]7wK@}|rs3ߔ}NdDP<\}IȔ>2GKZ|_[(hd$3##]&K6āA6,8`A8tp`% D5A  Y2-ː_tp`y D&:8`D3p`E H, )@ 0<L ,X0 P@Vtp`$tp`I0X0@|t; 3a1 [ X|,L>.F>`)tp`?)Ɇ0-Zt#CnnnnnnnZjZvm-i)!a"0:Z K[:;;CZ[[EAkV y¯syf ҋȱċɲUR'r Hu/1QTORb{4/GKm1'= ?++j'ksC+vPW*X|ߞ_^\MwL ڜB?1Iq^z8.'YPb#Y=:/\<$^DKz$1?}6ϣVQJe,SzMIe59~Y65xS{η{}~Gj_][]JڑvPƹ% @xw|EKT$VRla:+X],{wwĮxDw}u}Kn/wʾ쉌j.GJc/\%=zS*mڢŅ^tttHǬ9M a(, tС (E 0X0 X0/0Ua|@ X0dNr`X0 L 8`@ 0(JC]ehB!LN.tp`&,?)DNltݭLtp`X0,S NI!JDnGM=ztuu;uttkt4rW4"C%}Ԃ>.:.9MMR)*---$ R]]-]sB:e ﱾa}oOZ e oҙl"_Y5ϼ ` ."_l%\ae]n+ʫZƚkκ뭿mR3 ?YH:&\3ȒK5JHMe-ee|H8?QY{(Kc-cKm.'[.W.I&]R˓.5t߉NJYj Z%xw|E%XIņ=`hbAv0Fl{kTDarvŵw%k쫨]ˡ${{77of#d|(ilDDWJ_ R^w-H[[6M&̬t͜&A  X0@#:8`Ytp`IdQ0|P >| htp`,`0Q'z9`@],4``,>t.`@B N]Ltp`&,?_Dw+B:8`,`2 0PSU1DӣJ= źuU5 Zr-R˦%ru$VՖZMb"0:Z 3%NViii&ihhjvc}#O>c$ce%L,^*]R:r|\U -ȢCjj[|%jXze[~ +*nZkzoFdӦ61y-z6nؖqaǝve&Ǟ{M{~pAraO:֣&}̱?O:SO;3:s; /K/]qUW_smu0i7|Kǭ~ǝw}Ͻ?zx#>x'zg{//ʫƛoλO>/o~_~??DT*2q ~dofи=kIm*Hߴeǝӏtu{ҏ0dU~N';ϧ4r^Sz9zc"VG,ЊKǚΛӡ޻SNϯc^X{TX}O*riT' TI(~2pdP$'sQXfS幖ɬ0TtGN/FEW"YVwXG̞4*qɘ3{;_sfV0_l~W1\EFEUx%U* gXi԰Fxw|E^Khb {^(Ă({؈:֨5^]qމb*}r{{o;;791#eBhil\D:rqTeZ[$A%?+/3:$"q`@D h$C pDX0@gtp`&h`@tUmM_tp`>4:8`,3Q'z8`@],4``,>WC]ah"\ 蜺 /Lp :8`?.+Nl|]  ?::8`,] wIWnՒ[Mntuu9uttitZ^-MKЩ4uJj_-Ż%Mb"]0:Z TeNimmijj9Lko9':m|ϓF2Nyɛ;qx~+ʪ R= ,CkjYtŗhXrYvr˯J+jk:뮷hM69yͷrVcf츖nvi]&&=k}oYb-OI^}M[>>.,WmfX3)zU2*?J,9tφ9,yWhyBֳqyJ_B??/ϯí1bBؽ9I(~yVP*YTJV^ )y)Zer% Q/*xQzؑ_tvEͿZ e8PtLLd$/V&9OW&QJ+hIter%J2x6=g^ EZtuxexEޛJР`gZEJMSCq'kpw4@)ܥHp(+ wP`yoG93ODF.GV_D;#ſfV$³'qЋBOOꑾ$0JX0@# :8`Ztp`IhacC薣IN0X0tp`,#> &D/ QZ ,2:X0)| htp`l ,P+p`tp`X0  (X0hgr]Dw+$C:8`,`2 0Pn)EY1DQcGFvbN:*MWSii:tL]WjK-tpqȁH/Lw:ڠ?I>^ioo6iiizԮ.c}'F5}X/7fdɪթt&[3nA7 .4yE]l%\je,+ʭ*f誫ƚkκ뭿 7jx#Fn[rV[>n6n;]vmvI{>t!q#>˯ǟ~_Dwq/57oHN^ZU6G${>7)CY:D)g?ͤٯ(&QL5Ĵ QϯD3rrXz&B˩ =ӱ%_S1_<ܾ< ^{DА'5rBŲ$%?wO&!IV25Zuk*4{uEOURe3J2O{K*𯱑kl"{GNrX1 eP.&rSW榤rSJ)ܔsS2O~S:^#jNE/qQxw|ETତbÞuW4 X{/^Qc ++Qc_E]o7\.77ODF5q#ї2V-=2+՚r#mmq7LF2335cdPX0fCɂ $#,`88`bј 0K, %+CX0@tBqp`AX0@1Q%z9`@T]HX0  A8X0(t  PzY0 P*p`88` BX0 pd#%6 VC88`!,`2 R|E$b"5zGM=ztuu;uttktrWT"C%|TNwttVh&hϔ7-!"MMM tZ2X0ѓOſK$RUͿ .".6~%\je]nʫfkκ뭿mɰM7k|#jmFn;jGi;nwy]w}{Ͼ|ȡ~đG:q1w N#Ӧ?Od|g}^RW^}7|w}>dz>gW_wcO?oל7 S"C_Lk0#z~3 I4a-F$״ugCrZ'C(9gkyvzR{A:jA R} :(9AYs*1ż~Uз^E'j_"z u j}6t){BI"j֨/o>/uϷ&o\ޙ`ƘK.pGªM;|ܬO>sԅ+ ̉]mK홹ܼUxn~fm[.^ʻO7ξ̿vpҚ֦o{<#_~3r}KF/:; !ӊFƬv'ޢd^KanzzZZYqE=Ee*c64bO>ʉ΄e&j翛eڧꮸ2VUfLVAX%2;5"|n)}kNEʶ/lֆnh=4Ϻ;rrrɴ骒STN1R{ ZRu'*T fw';9"9:Y݃.zӕb뎄ݙCBΒ<ɳ;N;R;'yD[b̪}tmJZ6ia~~T0҈+O&Mw/C6eTr{-Qek鍫aN's~T!Rb* Tbˁ ߦ_*ue̢^Tݧ۷FB(ZmgόӰQO'FCyjjQKN~d]3w(jt ~;jg$I} [yNl*xc`@BF.g2@Qj$@ @@8`@%@rr&@WBz @2kz @`v{ @\x{ @Y| @\0s| @|@*B|@ }@~@!,~@~@s~ @66@_4@, f4@ 4@ 4@ #4@m 4@P %4@X u4@x ͡!@bE"@DV (@"E!4@"@o4+acR3V$C_b x~d[{L[G5<nma~={gJy}obsW-Wky+,?/z}*L[\(a}<@gg"`gg"gg"gg"gg"gg"hP edlQ  PcToprRstPeSiw PaPomnqPtP ehl Pcfoyr DstPeCiv PaGoknMPtP edlQ  Pcbopr ,