ࡱ> 6345`!\o;MY|l:Rxcdd`` @c112BYL%bpu @c112BYL%bpumiOlc0CT:lLSh|2RMnZ\ViP $qzN[/[S{LBԆy-eƛ2MxSf)3Ho$7 ㍄Fb'Px@?'y_LҸLx}w ýUg&b'9W=̻nc09Ar.p 4 0y{iI)$5d.P"CD<b@3Xڮ`!`&P\MzEΏ z@` 0.xcdd``dd``baV d,FYzP1n:&! KA?H1Zq00sC0&dT20ͤ `[YB2sSRsn\NScej1J.-*J+ ,Ry02@M`SX@&n >=BܤwOpb#f\0#t] `p021)W2ePdk-υ Ye`!i8)i-"*  7xcdd``ed``baV d,FYzP1n:&&v! KA?H1 ㆪaM,,He`0 01d++&1ܘ!+(|-–&T T0^ct0^惼I9 ٸ<a>#d ؞mp{@|[80@Cܡ;Zٸ\pF;0Ю䂆*8C``㊑I)$5Ad.P"CXR`iN`!g1FY ./@ |Txcdd``dd``baV d,FYzP1n:&B@?b 8 ㆪaM,,He` @201d++&1ܘ!+(|-ĖT T 4kHkM%ׄ71pD=$? d+ܞ7, Y%P 27)?a۔B8F;@FlcBQ˞:6.C +ڕ\p4BVN3LLJ% s: `K!t?1e҃|`!;q.oq7*   xcdd``> @c112BYL%bpu#x}LGܢ@|xcdd`` @c112BYL%bpu UXRY7&meabM-VK-WMc1sC VPZnȕT T01tfVBk3AyI9 \_> 0DdD`%oo cFm=0bdbR ,.Iepԡ_`~ aMT`!zn2C6wA   XJHxcdd``Ned``baV d,FYzP1n:&&v! KA?H1Z ㆪaM,,He` @201d++&1ܘ!+(|-ŖT T@Z5+a, F%? 6װ݌$b.# \aӰ +ss|ظ<"Vb ws=ظp߄:8e `pZbdbR ,.Ieԡ"6b@3X?f`!!-닞>F:Rxcdd`` @c112BYL%bpu @c112BYL%bpudKF&&\ s: @2!K`!;n;*hXVd   xcdd``> @c112BYL%bpu 1ܘ!+(|-OLg*F\ & \P[.a Cv;#RpeqIj.<E.N/B ; 3X?)L9`!F]"i@|xڝP;N@}3ۑb\$X(A NAa@J$]$:*FBЀXfFf͛C`wV$B^"&Zh.yM>JV[:2=JDM"&dz~y#ƪ#e9x(|qxioWW뜔zk9ml{`E@PDA  @c112BYL%bpu @c112BYL%bpudKF&&\! @ ] @\v] `I`!!I!=LCn):Rxcdd`` @c112BYL%bpu`!buB pd`` 00xcdd``dd``baV d,FYzP1n:! KA?H1Z  l@P5< %! `3);aV&br<??bYt`0zIOᆊ1YɥEEy%P{g#6dk) J Ma`2N@a2bw)4!6b;'LLJ% s:@ĆB ~b"h`!_Kmn0U; `0rxcdd``nbd``baV d,FYzP1n:^! KA?H1 @P5< %! `3);aV&br<??bmiXt9< !>dn?b~? $?Yh'd^*L;H ďC9>+ #`^6PK0@penR~7̌BDH Ȉ@ְXQV̨8M \NSv0o8221)W2LC Z 13X/`!VB:QoJ&,v@8 $xcdd``ed``baV d,FYzP1n:&&6! KA?H1:10 UXRY7S?&,e`abM-VK-WMc1sC VPZŝVT TXAZ5+ak F%.fMu0@${X@F'[ {IF=`qc]+ippAPF&&\= @ ]` [b8`!WL N. b;1]@8 %xcdd``ed``baV d,FYzP1n:&&6! KA?H1:10 UXRY7S?&,e`abM-VK-WMc1sC VPZϝT TXAZ5+ak F%.fMa`p 5y!|Fɞ(p{Fnip{@|J.h(rC\0``㆑I)$5dP"CXx%ĀGf~``!zfLԟ`EŞ   XJHxcdd``Ned``baV d,FYzP1n:&&v! KA?H1Z ㆪaM,,He` @201d++&1ܘ!+(|-oNsbF\ l 0n_b~gd\akXnF 1@V p0iI9 M\Ov'X.n.yb8l7a+Nƹ;+KRs@0u(2t5B ~b `!O>MfW@8 Hxcdd``~ @c112BYL%bpu `+|+b?gdX8dk%Šw`F1@` 1 `Cp{~`Ab񣱹 +ssqqe<": UXRY7&meabM-VK-WMc1sC VPZ.6NHq=`c̬f؃@+ss>|( @c112BYL%bpu&.}s^@Hxcdd``^ @c112BYL%bpuFnF5&0sF_$ b# \* W&rpQH70K`%4v1h0y{qĤ\Y\0 d.P"CD|b@3XzQ`!h%FlY#|r  pXJ6xcdd``dd``baV d,FYzP1n:&&V! KA?H1ZX ㆪaM,,He` @201d++&1ܘ!+(|-HKʠ TsY@Z5+a &_7a5*!)'>Fn # +as>IFށR%P 27)?;+)υtpVrAc `ƍ;LLJ% s: `K!t?0ez`!gw7o*:eSMIr`@S|5xcdd``dd``baV d,FYzP1n:&V! KA?H1Z @eπqC0&dT20$ KXB2sSRsn\quUsi#Ƶ, 0~0g#(^J#/F?>f .X‹ +ssT8b|" ;X.p 7 `p321)W2tePdh/B ~`x`!#mӧoP3E Hxcdd``> @c112BYL%bpudKF&&\ s: @2fM`!gLQ,Egrr XJ5xcdd``dd``baV d,FYzP1n:&V! KA?H1Z@eǀqC0&dT20 KXB2sSRsn\ObO;T TjV5L okTBSO} j`{*a>IF$A&Tb /& Ma`0jQH70K`%4v1h0y{qĤ\Y\pd.P"CD|b@3X|`!g&0d}u-+r`@S|5xcdd``dd``baV d,FYzP1n:&V! KA?H1Z @eπqC0&dT20$ KXB2sSRsn\_dOfF\ KY@Z5+a<&_7a5*!)'>FnFAƕ0F_$ b#\ \* W&00(smQH70K`%4v1h0y{qĤ\Y\` 2C 1,tzt`!"YȊZ! :Rxcdd`` @c112BYL%bpu @c112BYL%bpu @c112BYL%bpu @c112BYL%bpu @c112BYL%bpu UXRY7&meabM-VK-WMc1sC VPZʞ&T T01tfVBk3AyI9 \S 0DdD`%oo cFm=0bdbR ,.Ieԡ^ 1,tL`!W9u5ƅrlK`8%xڝ=hQeowcﴐCdc!9L 1&2F=Q| Y\!b4,RҋX\eC`cͼYV@{j@W^:BX%02e׫5NMTC;ԝT @c112BYL%bpup{:Rxcdd`` @c112BYL%bpu?i`2w`0! W&dbQ? 0vJ.hqCl:.v0o8.+KRsA2u(2t5/B ~bb`!H__yG-+[V8 `0 xcdd`` @c112BYL%bpu Equation Equation.30,Microsoft Equation 3.00:#Equation Equation.30,Microsoft Equation 3.00B$Equation Equation.30,Microsoft Equation 3.00&Equation Equation.30,Microsoft Equation 3.00D*Equation Equation.30,Microsoft Equation 3.00+Equation Equation.30,Microsoft Equation 3.00F,Equation Equation.30,Microsoft Equation 3.00-Equation Equation.30,Microsoft Equation 3.00H.Equation Equation.30,Microsoft Equation 3.00S1Equation Equation.30,Microsoft Equation 3.00V2Equation Equation.30,Microsoft Equation 3.004Equation Equation.30,Microsoft Equation 3.005Equation Equation.30,Microsoft Equation 3.006Equation Equation.30,Microsoft Equation 3.00j9Equation Equation.30,Microsoft Equation 3.00k:Equation Equation.30,Microsoft Equation 3.00;Equation Equation.30,Microsoft Equation 3.00q<Equation Equation.30,Microsoft Equation 3.00r=Equation Equation.30,Microsoft Equation 3.00 >Equation Equation.30,Microsoft Equation 3.00 ?Equation Equation.30,Microsoft Equation 3.00HEquation Equation.30,Microsoft Equation 3.00IEquation Equation.30,Microsoft Equation 3.00KEquation Equation.30,Microsoft Equation 3.00LEquation Equation.30,Microsoft Equation 3.00MEquation Equation.30,Microsoft Equation 3.00OEquation Equation.30,Microsoft Equation 3.00PEquation Equation.30,Microsoft Equation 3.00 QEquation Equation.30,Microsoft Equation 3.00TEquation Equation.30,Microsoft Equation 3.00UEquation Equation.30,Microsoft Equation 3.00VEquation Equation.30,Microsoft Equation 3.00WEquation Equation.30,Microsoft Equation 3.00XEquation Equation.30,Microsoft Equation 3.00YEquation Equation.30,Microsoft Equation 3.00` Equation Equation.30,Microsoft Equation 3.00*a Equation Equation.30,Microsoft Equation 3.00,b Equation Equation.30,Microsoft Equation 3.00.c Equation Equation.30,Microsoft Equation 3.00/dEquation Equation.30,Microsoft Equation 3.002eEquation Equation.30,Microsoft Equation 3.00BfEquation Equation.30,Microsoft Equation 3.00:gEquation Equation.30,Microsoft Equation 3.00@hEquation Equation.30,Microsoft Equation 3.00CiEquation Equation.30,Microsoft Equation 3.00FjEquation Equation.30,Microsoft Equation 3.00kEquation Equation.30,Microsoft Equation 3.00HsEquation Equation.30,Microsoft Equation 3.00MtEquation Equation.30,Microsoft Equation 3.0L/ 0|DTimes New Roman\˸0Wo 0DArialNew Roman\˸0Wo 0" DWingdingsRoman\˸0Wo 00DSymbolgsRoman\˸0Wo 0@DMS Shell Dlgan\˸0Wo 0c(.2  @n?" dd@  @@`` p-'  @       !$$% 5 ("# 2$\o;MY|l2$N{0Yw {NA2$3y?Ϟ[2$%Ƨbgu2$rR/4<t2$.ޓT09vمI2$ViڭX  2$ @呡U{_(GJ 2$4'TL!QwVǥ 2$&P\MzEΏ zh 2$8)i-"q2$g1FY ./`2$q.oq7*C2$b;yy12$mc]\^\4be2$i.1 2$!G>#x}LGK/2$n2C6wAz2$!-닞>F2$4GCo0Y4M,2$n;*hXVdCB2$qW jM2$]"iN2$bORE}4gv2$:@4 B~ PV-c!2$ƆkMJ_r/05d-"2$!I!=LCn)#2$x$ HlOi$2$~^@5-bD!gv@&2$_zVxIJA'2$uB pdj(2$_Kmn0U;:*2$B:QoJ&,v^+2$L N. b;1]_D-2$fLԟ`EŞ.2$>MfWW%02$$l,]f?|12$һ (.DK 32$=p)9ͩ6==U42$a>&.}s/52$z 3v[7vw{f62$ոu0(yGnO82$%FlY#|p92$w7o*:eSMIo-;2$mӧoP3E +<2$LQ,Egro=2$&0d}u-+o6?2$"YȊZ! @2$qxEr|8`W*-A2$^?scN"b"-B2$Uݍ<-(Wh#-D2$ўǝG6 BBFE2${C&C[P KF2$9u5ƅrlK_G2$^=Q5GPBK@=2J2$p{oK2$rƷB'߂\[L2$__yG-+[V8 PMc $0e0e     A@ AjJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||@!Rʚ;2Nʚ;g4AdAd0ppp@ <4!d!d 0LH̸<4dddd 0LH̸ 0___PPT10 ~___PPT9`X ?D$ 0Essential Math for GamesO =+o# &Jason Clark (jason@essentialmath.com) ' @            Inverse KinematicsActors are animated in game. Animations are independent of the world Want to have more realistic response to what the Actors are interacting with. Need a mechanism for reacting to goals specified during the game. KinematicsHave a hierarchical skeleton structure Each joint is defined local to its parent Rotation Constant Translation defines set for entire structure. Is the global position of end jointR'* K'*K\  Kinematics#Consider the kinematic chain below. Inverse KinematicsAnimations can be thought of as driving the kinematics in a game Want reaction to world. I.e. Position a limb based on a goal defined by game situation. Need method given goal position to update to achieve it. Inverse KinematicsZKinematics. Therefore Inverse Kinematics is. As a general problem this is hard.Types of solutionsAnalytical Equation that can be directly solved Preferred, practically impossible as a general solution Numerical Expensive In-accurate Unfortunately only practical option for general solver. T ] O ] OThree Common MethodscJacobian (Numerical) Cyclic Coordinate Descent. (Numerical) Anthropomorphic. (Analytical? Depends) The JacobianWhat is it? A linear approximation to Matrix of partial derivatives of entire system. In this case, defined relative to Defines how changes relative to instantaneous changes in the system._" The JacobianLinear approximation J The Jacobian.Limiting discussion to positional goals only. N The Jacobian Not quite rightJacobian defines changes in relative to changes in Want to know how a desired change in maps to changes in Recall that the equation of inverse kinematics is defined as Therefore we need  Inverse Jacobian ProblemsTypically system is over specified (under defined) Ameliorate problem by limiting joints. E.g. Specify elbow as a 1DOF joint. No guarantee it is invertible. Typically not a square matrix. Singularities.&// Cheat. Pseudo Inverse_ Square so can be inverted. But why is it okay to use this? Principle of Virtual Work Principle of Virtual WorkTends towards the right solution. (I.e. It s the right idea, if not completely accurate) Take small steps to minimize error. Calculate error, and if too large adjust step size, or size of Error = ^!Calculating the JacobianGiven angle and axis of rotation is relative to as defined by Velocity of relative to change in Gives one column of Jacobian!  AlgorithmOnly considering positional goals. Define the following variables  end effector  ith Joint position  ith Joint axis of rotation,[)  AlgorithmzCalculate the Jacobian Calculate: Calculate: Determine error = If error > tolerance then repeat 4 till within tolerance.{" {/ AlgorithmPCalculate: Apply to entire system Repeat until Or max steps is reached. Q" Q0AddendumMinimizes joint angle rates. Configuration produced may not be natural looking Add gain values for each joint. Add  stiffness I.e. Bias which joints are moved Add constraints, Clamp joint angles. Both these ideas slow down convergence of the algorithm. Need more steps as force. transforms to internal velocities JZJ3One last thing-As stated previously, the Jacobian is a linear approximation to the problem. Using the pseudo inverse is an approximation to solve for intractability of the problem. So already cheating, why not cheat more? Can simply use as approximation. Slower convergence, but much cheaper to compute than..7Cyclic Coordinate DescentThe Jacobian is hard. It deals with entire system as a whole. Good results, more complicated to code, and expensive. That s too much work, lets deal with each joint individually. Heuristic only. Not as mathematically grounded as the Jacobian.Z8CCD>Reduce problem to local consideration at each joint. Start at leaf and move up. Calculate change in joint needed to minimize  error . Error = Calculate @CCDCalculate rotation necessary to align into Modify current joint by and adjust entire chain below. This is important. Move up chain and repeat. Repeat over entire chain till. Done!AAddendumPretty easy. Much simpler than the Jacobian. Problems. Takes more updates of chain and steps than Jacobian does. Simpler individual steps, need more of them.BAddendumMoves end joints first. Heuristic inherently favors them. Local minima problem Results in unnatural configurations. E.g Wrist bent oddly to reach goal. Worse than Jacobian about this. Basically Gauss-Seidel. SOR can help. v%Demo2Snake From Jeff Lander darwin3d.com/gdm/1998.htm 6,,CAnthropomorphicOther 2 solutions are general purpose solutions Most games have people. We know something about them. Standard principle of computer science. Use knowledge of problem domain to simplify problemDRainbow 6: LockdownLeave wrist alone. Inaccurate, but good enough and difficult to get right. Treat elbow as a 1DOF joint. Not precisely accurate. But good enough. Treat the shoulder as 3DOF joint with no constraints. Again, not entirely true but good enough.u$Rainbow 6: LockdownLeg can be run through same algorithm as Arm. (mostly) Knee can be simulated as a 1DOF joint. (Elbow) Hip can be simulated as a 3DOF joint (Shoulder) Have second pass to fix Ankle.E AlgorithmhElbow defines the distance between the shoulder and the end effector. Simple Trig problem Law of CosinesihG AlgorithmAfter that, simply run one step of the CCD algorithm on the shoulder. Done! Simple, accurate within a tolerable margin, and cheap.F ReferencesjWelman, Chris,  Inverse Kinematics and Geometric Constraints for Articulated Figure Manipulation , Simon Fraser University. 1993. Meredith, Michael and Maddock, Steve,  Real-Time Inverse Kinematics: The Return of the Jacobian University of Sheffield Tolani, Goswami, and Badler,  Real-Time Inverse Kinematics Techniques for Anthropomorphic Limbs , University of Pennsylvania. 2000 Blow, Jonathan,  Oh My God! I Inverted Kine . Game Developer. September 1998 Parent, Rick,  Computer Animation: Algorithms and Techniques , Morgan-Kaufmann, San Francisco, 2001. 6QG:7D41-*      9                     $  fR Questions? /rL  ` f33` 3f3` ___>?" dd@,?" dd@  " @ `"  n?" dd@   @@``PR    @ ` ` p>> ,$ (     NDgֳgֳ ?"P  X Click to edit Master title style!!  @  HGgֳgֳ ?"  RClick to edit Master text styles Second level Third level Fourth level Fifth level!    S    ZtL1 ?"``  `* 2    Z@R1 ?"`   X*( 2      ZV1 ?"`   Z*( 2   N  6޽h? ? 33 GDC 0 `*(    0p P    X* 2    0\     Z*( 2  d  c $ ?    0  @  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S  6 `P   X* 2    6& `   Z*( 2  H  0޽h ? ̙3380___PPT10.a#BY8  X(    0@r P   w F* 2   0Ľr    r H*( 2   6r `P  r F* 2   6 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||W@ !"F p   2 `  ~B  NDo?J  2  TjJ?x [ 2  TjJ?p  F <  0  3 ` j0 t B  T[Do?k 2  ZjJ?< g 2  ZjJ?  0 |2 & TjJ? $  ( TL`w jJ?y 9  9G 2 ) Tcw jJ? I  9E 2|B * TDjJ?)  B , ZMDjJ?  y |B - TDjJ? q  . T'w jJ?   XD1: 2  / T4lw jJ?I   XD2: 2  0 Tpw jJ?  XD3: 2 F   8  t B 5 TfDo?B ! Z 2 6 ZjJ? @ Q 2 7 ZjJ? 8 pB : HD1? j pB ; HD1?  vB < ND1?^   = T$ww jJ? &y  XQ1: 2  > T<|w jJ?  XQ2: 2  ? Tw jJ? *   XQ3: 2 H  0޽h ? 33  $(  r  S @w P  w r  S Sw  w H  0޽h ? 33   $(   r  S ( P   r  S Sw   H  0޽h ? 33  |t$ (  $r $ S Pw P  w r $ S w  w r $ 6A  ?? @` r $ 6A$  ??  p r $ 6A  ?? h8  r $ 6A  ??h Xx  H $ 0޽h ? 33_  '(  r  S (w P  w r  S w  w    0e0e    BCWDEF > 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||W@XY2 L p   # 7&[  xB  HDo?J  ~2  NjJ?x [ ~2  NjJ?p  F <  0     p6  ~B  N[Do?k 2   TjJ?< g 2   TjJ?  0   Tw jJ?` o  9E 2L   # = : ~B  NfDo?B ! Z 2  TjJ? @ Q 2  TjJ? 8    0e0e    BCYDEF o 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||Y@ yP  " c z0e0e    BCDE4F A@  o 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E|| +8R>D_Vzv @    D  $ Tw jJ?` @6  LLinear Approximation 2 % Tw jJ?P `  >Actual 2H  0޽h ? 33  x(  xr x S w P  w r x S w  w r x 6A%  ??h l  r x 6A   ??   H x 0޽h ? 33  |$(  |r | S w P  w r | 6A  ?? H | 0޽h ? 33  ph ((  (r ( S w P  w r ( S w  w r ( 6A  z?? h zr ( 6A  |??x  |r ( 6A  <?? X @ <r ( 6A  :??X   :r ( 6A  ??`0 r  ( 6A  ??p  H ( 0޽h ? 33   ,$(  ,r , S w P  w r , S w  w H , 0޽h ? 33  00(  0r 0 S w P   r 0 S w  w r 0 6A   %?? ` %r 0 6A  (??0pp (H 0 0޽h ? 33  @4(  4r 4 S w P  w r 4 S w  w r 4 6A)  @??  @ @r 4 6A'  >??p  >H 4 0޽h ? 33  1)P4(  r  S w P  w r  S w  w    0e0e    BCWDEF > 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||W@ GL p   # 7&p p* xB  HDo?J  ~2  NjJ?x [ ~2  NjJ?p  F <  0     ) ~B  N[Do?k 2   TjJ?< g 2   TjJ?  0   T4Zr jJ?0 `   9E 2   0e0e    BCDEF jJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||@ g  " T8\r jJ? G 4 H  XN1: 2  # Tar jJ?  XN2: 2  %  0e0e    BCYDEF jJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||Y@ h   &  0e0e    BCDEF jJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||@P `  * Tfr jJ?`  XV1: 2     + T\kr jJ?  XV2: 2    r - 6A1  /?? ` /r . 6A4  2??pS 2r / 6A9  B??0 Br 0 6A7  :??8' :r 2 6A5  @?? l @r 3 6A4  C??} Cr 4 6A8  F??`( FH  0޽h ? 33R  `8(  8r 8 S w P  w r 8 S w  w r 8 6A3  *??^  *r 8 6A0  ,??  ,r 8 6A2  .?? :  .H 8 0޽h ? 33\   p<(  <r < S T r P    < S r  r "p`Ppr < 6A   :??  :r < 6A   B??P   Br < 6A  ??   r < 6A  D?? PP  Dr < 6A  ??0X H < 0޽h ? 33h  @(  @r @ S r P  r  @ S \r  r "p`Ppr @ 6A   F??h ` Fr @ 6A  ??`  r @ 6A  H??0 xx  HH @ 0޽h ? 33  D(  Dr D S 4w P  w r D S w  w r D 6A7  H??7 Z  Hr D 6A:  M??   MH D 0޽h ? 33  H(  Hr H S pr P   r H S r  r r H 6A  S??  Sr H 6A  V?? @  VH H 0޽h ? 33  L$(  Lr L S 3r P  r r L S ?r  r H L 0޽h ? 33R  P(  Pr P S xw P  w r P S (w  w r P 6A   ??   r P 6A  ??  P  r P 6A  ?? t  H P 0޽h ? 33v  & T(  Tr T S Pr P  r r T S |Qr  r  T TA j? jJ?( t  j T TA k? jJ?( t  kr T 6A  ??  r T 6A  q??p  qr T 6A  r??(` rr  T 6A&   ?? 0   r  T 6A   ?? HP   H T 0޽h ? 33|  ,$X(  Xr X S dr P  r r X S  r  r  X TA(  ? jJ?8 h   H X 0޽h ? 33m   \$(  \r \ S ` P   r \ S    H \ 0޽h ? 33y___PPT10Y+D=' = @B +}  $(  r  S l'r P  r r  S Xr  r H  0޽h ? 33___PPT10i.a#Na+D=' = @B +m  `$(  `r ` S r P  r r ` S w?{&;!hƘjy~7h8bS  S6 0 LѠRSL`U.Wco-O&:ZTSN`@q,O!?B;X$;qn`~E $J<j~akUȻE/jc2{< *Xxo;0sf3K[f\knÜ.ԏ:i|<_xN!+i' `b"Y{f'R* [gI{FbR\^xM3jwIUjY&Z윿HE$?sSuɚَmκN7w>;LS{,]ׅXӬ"ߴPnO:H3.{zQ>&}L|]YCE !<{8]@zE؅kĵ"C.P9\9ÔtC q!=!e1_eK 2jtt6?z&~$Q57`Pߍ jxV;LSa[ F+! !⢉(FL l -VlЀv0.FL\u3:ࠃ2]b11Q`l=skù9qwۅ'7o7.LB:UK;]ZU%_Y; g&ON"WQ#1[/%嚗@ 5?{ߞ4,)0xE^!ǯ0F8~a|%'r?ο|hUi0\'M#/ֿW`B3B6>'IJ+M|LӉL}4$өh[K+jyPB3:աl"zv7&+l"ĥkgO01XdxJ@t/fe\//y[xU9ɚ;ӧ!9Xu@ȓ˿ 2G^pcF)֌i‘f3f}G-W3s3"bjbj+(8p֓(cY˟`ty__({YgOOjmB1xVkAf6&"1=!h kӓJB#ͯ&5x(ɣACQŃxxԓfvvFE2{37ޛ}l{ut(4a:jjnw{ _۴)TiBe] ~^΋zrٿ w]M $WOF֔ӘC'N/JvR&(/̕y1*+= [9$c#E-5>ja="Ԣةsoƒ|t's/L/WBJrbl%Ge(z}2\%9G ^8y%Pco(b"YQaJN qZBJIW}o^ $FB!&iMhĺƜs5f*I/ oϩ1],V&ߴ*\|hSOM=R 2''ؕxuvЇOڥ;5X}|s6 8ܖ<C_xim]ې5 x(φq?ky*GT!`Pqq흉n-b*sN턅g1CqLJ(89Ss擘ǐKj_ZREv=߅Y}rM7^kh\~>* B: GC'ƚ6xouY;W:{Ǐ%fPkOg7z%.y%P#A&<@5 o_3Eqr![Gˬ_ aZH'Qԫ0(Lg Io\7#d@bv*v yq4ΝZ13',"ٞ/ E$&_0X8+Y@7&O̬ر$5v-DH ʶƘto&O"5dU,Z SKn/@@,3Wv7q!xe+4&IsSSbtF O8e[+%kTG(Nm(fi:sSN0뉃%"1dCiOV2CxVkAf6&"1=CD)xhzSI0$MV<{у zA^m%1GW ^8y%Pc)'Hs1F Hw䨈oKN qZBJ S}aw^3I:ԷqsM&s2F̉`:W4g/RHO|XxS~N8b)_5[)xy}ce}l̄ !am&;0viL3ogryx]r.pxcH .ϔ<͔]ԡpF0fZ=_BH5 *.2oMtSS? ;CrGJZTcә_O\+_Q )TEV_E{j_3{_{3xVMLQv)nD r0pњp%j1PC6{#ћbDDWImyvS -!~ٝ7?7#lA΁jj$0JZu-(Bjg7  Xdv})+AT+.םKs"rS_VݚrlJg-4뎂Ec7_GT'i~J\?;oB dkHq<77P hG:AZtR\&s'oO?hNq|M-Yy+U0bbHtHń'mDG9I/ N^ ; +4^1J]bGn慸vӁN9&{9CsB0,ڋX䦄|XxWN³錙7fɘ2,dK`jdNNіY"@KlTvȿZݝ|&LvݬI̳$<{QwNؙ9k`%?"n^jP;Xvy蛶5yB8â<8KqCUIz9?h0O EH͟{0qٺV6pk-S5x4qSlrПF\˜4oSxy )*x">~g'i|bWΥ jxVMHTQ}o G"馠0E G gF။AEv"Ue"RKZE37s=ׯW=nYg`TC"n]Ǟ7*5ڇ!-c0,=yE3phBM%E>/_Vs#o#/A"ws%L"Q&8t!4H1\"~MAsm|9t'8*s:@T;w`ik:{?LL6Mx>]C>D6:i/KD g%fQhmZ$8!zU\eVWX'u?CX B%ԣ?v( HXRޒ!p*ٱD̦UXb_ ɂ5KOKd&;SH&mwЙJ.7brqo >,olB샊+^:>Q9X:!-PX'c-Ϳ *P 9!$r×qJrqɽEM&9cQ`4`v?Y2:O¾vb9Kk/8f1O82gRwy[3Ksnbw<#_|x[OE5"n0f0뷕5ϳA})̊}~ Xs]͚DxYL!A7݃iխne6ѝO<,^&zD;qϭsxV=hSQ}IM^"MK; (ZBO;tд$4&MZt( "Vp!:8hZJq $/(Jwwν^5,yд*bɏ:GE"p.Jrwi[ _xzuEd!v;:ax+1/eA q q~O B)ȋ/r;w0uofC S^uWgjp,3I"ىx.IGڢ1itwj6|:0d H7gգI @ŕCzAebO \eUQ,jYF/j~3՞S'Ay*='xn$_tQixI8B@f돖,6D%YMH-x.1y"sU@\X82'~]!c9u1TVI zu]n72+JfsΌlܟrJk|r[_\\.ߓroDzqx]y_y1۸3S3`vk,zrbqSt?K.#|bDw3%jxVMhQ66֦l{SBkbшYL%&i԰A,Y/b/A='" b֙o5@ [&;fwEA3Ƥke9V-o(Jj` JxU$f}+-< {wlK~$S0٦8Ѐ3o<~яm_G~_~Z:ƓB ~DsQ tte\6Z~a({&KRb$2|h$"1^O 9v] ? &(W8a&+"1KfW1iBvp:u}5G:슡5=0\6 r` pM ٲVR!Sw>UP s[b̮*Ϥث f^Y)Swz8Ǐrmdqg\{ȏ `ҏm-bڷo:E|#&*6WHBg"Ci\`8uAiS1 #gp+,t1i!~W@_!~- |=X.z+'~|F~|i2F/'km:xV?hawɵ6 Cp "8TX1m nb*LiI-%b'7qNꠃ N$nAi+)B~ǻ{߿{߽}Z0-8 >P$ zѰ)B3W|?`JTA$fk)+"urE3kdrLA~cה0F[:g]lюYk[S $9swހ =OրbuynvS-Ѕԍc?AAڇ+ׄ䷃ f]`pu1<}Eb5k2qT)zra)[͗hbX҉'n$FۑG ^ eXy%c0a1dQt9+cE. p]a9$YCs0^1XBOR,)~<3QSƲ>]*d $]Xir2*-4LKƿgb?;z;bڴے$!ߧ`,̖ΨZǰkCo{JRl؁q1}S&O]]KwPT"YHU~!0lc 1mCiPvCIX%͟{)ٺVq뉋%"[n&Dw{Y?&d{qb'~ <#8IJ K~xVAkQ6&bj"C^q]x> uPYq[=eOZPxL-3{%7G.X'3ƇI'SJO^Hф543fx3\:&( 01ONҀg<,&я1_G|YLq)S~d_Sz[rQY?FV1@ynZ^DoE'M]W4{嵿oL:5fD:ettT:9bX}4D r,7k1':JqY*@Cʰ0<\*fhKA 7E#;`4;1' q_Ԑuz("d,ccp:Mۻ_g g5cQe؛._)}¿'O€iwoŭ ~;kD]%?3j?iYWhL':Us^A_|gVDžSn2#35}*GX!&6l, 9fup>_CyL NkLUFxJNj}S빬&XGBkt\ 8fa#tz^f\k7tC o~?L DsP ρa]Tfyg3uh; 9ЃxVkAf664h-Aۃi^F49z0DMӤ$V.zC=xlO o~$D*%oy}f{}n gaR ƴHjZkvVAҥЧf Q]Ӝ ~~tc^5}=6t~%3DQ)1TKnmyQ'suza9P_O2OΧPĨ|c@k_uRw@=$~=$A=nv`oC'?H쵅|1.YbXdT҅xMW'7KT,|3U^ J^>г2x*&}F4WY'zUB"l@5/F$"}e*bĘ L™$7-[{wJdsK|.i-R~O¾L sMbS9YKO. u ⱪ46I ԻfB{'AqdN˳`;R*[Y00h?!f]|8v>v ھ{w.BO(fsɼ˵q{qlh0f0!W&`SJL—?4|w{?Kiy^g.od xdRx]Qڡy-; Z0S.<Ī, 8+s?'a㘅uħH9yŧqis$| 20(!UOYI:^@=ՏͨV9?$u]ag<9 hܵO+KL:5h6NJ禝1A/ Dc$ut68CG$wMܶ*&q\BXC5;|ouA5GK,o̪hL~ܤWVwCh&eH,gL%j_swx+ϬQ?=ZV!v`w㳪eqi#/*q8'g[AV̉#/!N~1JpnLew{`|*BBwal, .unF?;'#g"c.קP SaLa=_8(A$h&,2D˟` "һl zy? 6\2ѣTP5b_Evpd  _?C3'@1zآ)K/wjvxVMhQ6]MlEkI{ 4+E4BFi^M%&4!PPZwIԃ'PAƃI<( b۷a][HQ*ffgfu3Һ(.?5&@y˝>v'lS`UP"ݭnS?௸X_:϶J_3&Sd{tBΜx>O(s03t>'e.B鿯~lm^@=A~ fcQ03=wEbF͢1CΤk=MeoKr" p6=dcb2mɪbGB 5fpj5JqPQG@ Lz%]/a oz۲`qlHfkƬYϵ 񥶮FɿIf(M/U/̙ MUyo}r=*>kz d , OELz-(n17`nq14r}K u \"Fq/]@wW{s_QH!7*̾dydh}Ƴ7|dSl>ghK1tb~Vp%8<יAS薼<`畴C>dbN];Y,ZlXsCؤ&m՚vJSy*rq*O0iGdlm'}]!5oKCLB0,+xw* TJdzɜ[xLK w]Q+zꔐ\Y2&rZĽg]6sJ>I^H~:`T6543cu ZNA1+ =xx9Yvu?OGe0VG׌޺xE=u+'>8gOi(xVMhQ6ݤԦRz -? xP+Kۃ)SmRC0Hi'h x=^D Xg޾ݦ+ ,;f~3oZ?FPƘT!!.bTKu) ߡ94Y0^ n6hpju{|BWLA{gs00EAOcIX8faj|RN^i~\\?; û}USkaPP 5ڌz@k]jW'vxC(=wDR:g sq9MSpҙigLvaƢ7|%>+{ NQ.t;]bz#-bV?kcMμ #j tȚJD 7fU D4{y&MnR`+E+[w!4H2F$3h A5jO1&{l4@aYUL8~Ztp>w~@-zxO! jl3! .>X 4[nS?oXߕ7zmw碉i:=6:p߿;Jxe;0'd\#oCtmDs]  bRa5xk^?;fUܪYr-]ǚMLT_쮉(YvY?R>@֕8A\㴇M w'.e(dӌq|%ظZ u ᙐ 0L8{b/A.+l XzkK6-UkCd)_Vʮ[iuã}^hɿ8oXs*4WTlUJ[uɳ3&0o7gz?/b0~syuy.<'}_]]E[ye/7dU.BxM?۟L菁vHn>0)d(=Scb11&[I9Q 31sk5%Λf";5AZ" eAo<ރRں[?>F0NGaP uxVMHTQ}1GTDA  B]F4 0?M.BAUѮUTڴE-e"t{78νs9˵;7P0P6#cZ$JZuQFҠa@+٧];L"OW6}V[ty .Wv}K3ĺ Q&8pOSY̒3Ho">u?G'@.~kF&Y[/z$M$g }Spxc rD|OBAJSL/g? ^~ǔi0kF GLo掦XhRg]zŵ UF6t I{NJT&Yjr+VQޔT6Qc=sxuSiĶ?^c"Ldļ̠x4Rvx\?k&g@uy>@+A+ɈCoc'XxVMhA~36dXȶbO"FP<4F&5,zًxxPP ^U<^$&}ovvIR*,J!vߛo{o'[Ѕ3@O["nZ-Ǿo=Rouo0 *C \ap9O}>v=4zeՔ+ 8ۡg8}Xqpg~ ONi|F\OC&CWVbMynVS-0E1 A|'$}O03ށ8?fuadʅLEVSl!OE&E(]Hm",#2?N?-9'^`X+⬷ԇGE/E[Ť1S-†d۠=UC'25jQt܍㇙Tei(b[ܿxirqesOWB.WPtg?S"&{W ˾&{0[ǯ6&w9?Yc[= Sz,uȢO]ѦUϾθIջns/_MRCR >c^3N?A`n~+&g[璙ۧRih8Szԓ`[WxnkF CrJoV1-ԨW鹺]- 7]\φp+m1]pf)Fb ID&D֎%L*{IlT+wL5y\oɨ#N]q'5vfB'OyZ䙔/vas~ =OՄ^Q= xޕk):qS@ɣJc6Xllڏh*/k۶+-XiQcCCB.zאkVF`4Rr4t٘jDݘob%= fu!9, N_$}? 끾6IG@r!a@T(ixVkAlZ&`H,m=5[0#M4[ŋ9ă C"MEPAw}3; of&7ޛ<~}p0e-5 ք\G^\rը8vRr=!SG1$X >ی/ye<䕲C]b 9Ǒl܆twBHP XJ$JҘKt%E ݣ0s.%fxm?k+9ϸK\r^'e@yoW7?qϫ/49vo<L/ʺ:=*K W\&|'Jɵsĺ[ ʇ 4ǤK+ }I2'7u^kiLgFZ7Cye$O=浡FEqH, oW1\'J7XF}3 U6x]pxhq땺xVkAlMMXJk"HKhEkKF&1z(-I\3M`5+<mq:3?nO#Gm_@[~?t@+@aǀj߬@^/w f^M|21:nGBMH/c|4 ?5ࣲUGy'OgOU$@w%8q%FfN];ak5Xh U'_ FI T?kJ\Xr冊[K#(3t¡>I,c0`!𸝙fsA}hm_vILBOpz_ǜ0({K%מ t&3s$crݾT쮲krGl]yCx-ׄq=n ]Q-N~7qw'$.&U/\Oo:؉NoK]cLc:3VFic{}KQUJplc9RBMX)+IdI@t^}F,$Ɍkշz+Rϗ{0xZ8P@N4YH=_IzgLz434 xVAOAf V)98ICd#%@%ЃG .PvJz#p/xEO<Jc F7~gB_'(,[^{ퟣb/KZd_t'c*c*Fr^g^t]}JGd8Ȱ*!5˙ MW1kBJK3km96݋ASs lQtK]1L6XTWɭ*5uPF$\+ioݝ ">i6}'y?YvuA-Z9oɊ5 >t6Ήr4|=⍟x)}`ו؇\ 5dEUwFvӈq|٨ v!> aL\}>0b&Y|cܢuYCdP4jzʨsbo~o{~dvMW7?=Yh}T9Z5Jk-bl֟2.*;*Ӗғ;]W$(.;]yWL<' KVA4授NT|ADQ3"lp̞4Y%RS{'h.I]'cb00iP 8DAk КɎYiT(%SZkZ3ZhA*`AO%5O'^|ޏr0D{'SxVMhQ4MѦREDb"K[zTImZrbO`Or%B^O9<-q6„}n/<si\n"~NP~ѺgQB[jz=&U{vI@ILl3 O20k}3_̔sNHT:3>x<y9CpJC]EƠ92*j3=*=ͭbքW(-)XSN"p=5iHlҭa$S4Q&7H[ O ْ.cN!SIl'ܚbY'0il9g: .w\u1:=!exT<ẀΜ-4lluSs$czN`B0U)A,S FC!kת9HaЗ?G"HkJM7 HMhOc;U& xVMhQy۴nɢ! ==o=T`,=6 $ڤEHxsK1jz9(GkN]O 8%e]_0)k/Pʔ .u+Vuq=Λ_ {!JM/.i)><>4x$M~f˓WP ݰ8)nIcH$,mlIwMqassi5Ѭσ6`HpMK{8$~lqU3nj`T!<Ϻ_M {IT pNΨ̸NMTwcjôRqxsK1jz9(GkN]O 8%e]_0)k/Pʔ .u+Vuq=Λ_ {!JM/.i)><>4x$M~f˓WP ݰ8)nIcH$,mlIwMqassi5Ѭσ6`HpMK{8$~lqU3nj`T!<Ϻ_M {IT pNΨ̸NMTwcjôRqJz>(G"cJCmp&(WQqJA q2!4R}Fk^䷸Iҁ K IKm#cdziڛ"7#pKdq$mP5:XkPϵQ  ',ś[C{AYwx+1oZv{P?,Gѡp'e=bJ.xD؏zqЗGwȞʞHg<đ543G6`0 neAe,"O'M`JThIN~mٛ-vUqOxVMhAf6ɦdZBobA(ZƒX75d&<=xœ? MTē '1캍lDJ7?{/%6&'يǔJ\VnueWwCԕ'iT`b _@(r^e>ejs [sk9/:8o/\EZE\ ~QE8AvB# .*PbT!o濨! F [Wa5E6 >N;g=Dnv.ي9Vf*9`&GGCg>D6rql>3:ۏ9':GKLI^@D'"b d7d.P/͏9}T.O׊T䊒7Uޒ!t.o͔h|>/nHfNN7XHz1o<%6 wqP<{8+V nz?pp1"Sq\]IF+~\oݳ븾ӘΌ ~(Ys@F^Drm 9D;q^nfH cبO>, J-ie',D/*2t,w@JM_O8db@OncxV=hSQ}iM^MRP,KZccL4$mZh'q(n*nCthTtKu"&󞯩8;w}^t>[EF3N*% po4Mg-[Jvwm{B l$PT[KCe.Ǘu{^2C $mqzg^/`q淈_@_~>\?B'E/@b/u!o俨 x.5N}0L{C?L\Ul/ "4u|CN'>N{YXfwE]蓼"Py%%db"xN\\Ţ8AVutޓӕc)*ruސX-윝*EinԶ] քf}f o{xLGw$xԻ7DqEem3aV˕lkWT=~&^`ٻbN ɣɓn\]r^\o>pe.ci0f0Yq] ajeny̽Snm\Yk #0O?'lMpVgԪHӤz5`F©>CYY"ie3,_H`H͟{HIݻV{o=a"3〟>]?-[xVkAf6fhJZjob{Q4Fm4DWlӤKAGo8xU' "hNl.iDAQ}of}f{ko?iǡFTH\-un]Mj}FԳß lj0Fp:KOD_\zg>ڗZbP4C8ۡv¾>)Z*Hbw_QPK- ǽy6<w t1 Mb36m]\vf+Ke͉84t:!F&ؓJ8~+9/: ש=`b"Y{ e'RJa ~$ʹ𚤇hG2Ss.: T$7n<-Y#Y|ݜK2RoP3f+4GGuM-|{AuJvӋO1o OJ+ot!x Y+rcYZ˗vz0X75pl ) ch_" Xufs dwyK$ FP֌L*%~?HzI"=$1=`Cp"p c3k"7Wv+gJլsXbTV ÷/J9?:t9 dX0"aˑMbք)-3r"TC:5iIlJ303%*rKuS!x&Wp*vYB.oӱ1inanYpnI ٹj=ͳZ;k@\wzxTi÷;yx+O n9f޸Gx&C<ūwτRW xDH92]xN+Rbjہa&xr~@0'%mZ!)x@?L~e}$Y<{PBYst@Z[6y^Opgޡ[~ ˇ[xUkAlZMuZjؓ=[(ml0bM5z=xMԓEЃ+<ڣ7A= AT-/G{o76|tr }8ahj(X0d8bWˈÜnl;p :H/e=o߈k7(_zW$5n3 dA$:َ10JU e>y-L/;&kޒ@=,cփ?G!^ڵWmVpfJ(ԅ O:|=_x!+e{oXfI9A;feEY,5J4 uEdv|t&uYk^卪,Jp}EQE7-XsRvzX[{P]8'OWhNyvLbB&#T/$ıN+|Gq3|FALq}Jr[66t nbᢉUT;-ޭL÷'Y89qކA6v3O:XaZxUkAlZMuZjؓD-xhQ64dfky-L/;&뺐ޒ@=,cփ?G!^柹UWmUpfJ(Ņ O:|=_x!+e{oXΐs߃twJHϋDXj$x hBzuf>Lꜳ׬f9UY zMs`iEQE7-XsbvzX[Y.INR̫4u;f1osX*vBxu@'+Qܡ |sj?S\'~DR'jܫ!+ 2$.yhb ~k68B˺w3ӫIND3aP CbxV?LQwGi*mE$ hhIPC@pġAd&ʠh09`\MEc޽ +!._}?i- 4+lLD+c4EC>s\M !GG&byV(hq{^KRh2Y+p;dt?%8 !%)]|Ado#U͉JX%)a*VnU`<7&7.m熪Ҫ)L%F4` gR40-,&E|{U}X7E{|4>űsE_S~1ۦi&Gi5O%~5#3(|b^׼G<$17NOH>5[S®g.8J|_yjUPuId$wcByH>K,n\u.>Q=gچDD%u ((k_543~Ɨ `J ]Ȇ^5Vc\ H\X c/I4 wu+3h76C+sji+ zxWOlE3ߟv۲R˪ERQ,[nM1mZRZ(K6i8x/xmdbfxЃ]L)v}3ͺoin/;7{3fvM|iM'b2 !|X,juqC+{hⷅ{ADCw YLݐ ֔&=5.\mbc0 rF`go3G8q ^9~;P̩~0lpq`:zio_ᾭt\خ"Cԃ M ԚnQ[en ZIă#|vD+b06N!CDB܅NDI ^Vsf~r/yqz;xڥ|ѡ|$B&IK!g|#X7)O7?|!'%H{n/ hS6Mj?hPq'|OѺjS{Oڡ!'o|XGi>y3Ǿ='o|Xp?K|30fG3._J1Ui&s˵%?SSV9w+%yħ۬rdRtO9'j[]T;r^X7#9(P9py-L/;&kޒ@=,cփ?G!^ڵWmVpfJ(ԅ O:|=_x!+e{oXfI9A;feEY,5J4 uEdv|t&uYk^卪,Jp}EQE7-XsRvzX[{P]8'OWhNyvLbB&#T/$ıN+|Gq3|FALq}Jr[66t nbᢉUT;-ޭL÷'Y89qކA6v3O:Xa[xUkAlZMuZjؓ=[(ml0bM5z=xMԓEЃ+<ڣ7A= AT-/G{o76|tr }8ahj(X0d8bWˈÜnl;p :H/e=o߈k7(_zW$5n3 dA$:َ10JU e>y-L/;&kޒ@=,cփ?G!^ڵWmVpfJ(ԅ O:|=_x!+e{oXfI9A;feEY,5J4 uEdv|t&uYk^卪,Jp}EQE7-XsRvzX[{P]8'OWhNyvLbB&#T/$ıN+|Gq3|FALq}Jr[66t nbᢉUT;-ޭL÷'Y89qކA6v3O:Xa  xp^RЀ3ÿ lHbP  LPÄ!?(f(9 !K\tC%zQ1<<`:?vCV{`^QFf ہ V30d'2B!Vfy*C1$Ae ORZ222$C>yxʈ 2ĚP?h@ *١rj$ML2 L 8F'0gY'4N& @,F&`T s ;4h;sC0&dTL .v@penR~e/!??b