fansi/0000755000176200001440000000000015107351022011346 5ustar liggesusersfansi/tests/0000755000176200001440000000000015107200322012504 5ustar liggesusersfansi/tests/unitizer/0000755000176200001440000000000015107101207014357 5ustar liggesusersfansi/tests/unitizer/strip.unitizer/0000755000176200001440000000000014213626056017403 5ustar liggesusersfansi/tests/unitizer/strip.unitizer/data.rds0000644000176200001440000002207014213626056021027 0ustar liggesuserssu7 .A"48yDEhd21m,FYsXqn'+8ĕIĎR|sٱ%GRɗTt}t,8ZawuO{}λ t =`^a';uCTu_r8-NLGw0 0%jBϐ` +x+_sdW$YqknJna컭x"i] &~߱(X*}$_p|u?SNCXgºfl`#ro$+XTBjJߚ{ލc:hؒUuƪl cz񪤐ֵxI\_(&8P%ZqvDD,ijcQVʒ{]޾{+JH37nQەjG6qUҤ޷!xu#_R*sɪI* *h`".K)^\ݱ5"pvffaӻX*NJ< $E1"H>+*~#.ZA;iK(lt۷<Q%.t;'VР4HIS]CӯUJt eu~Jn"ZZM.oP6=G6 s*э&k!;վjC /%WN0c8K3$.:1=nT} mt%uh+][ͼ7Z%]0L1Y%B0V_ \' K > C^P$k"/꒾>bv&+h2VM^YdU6`{i0j);PCKU7YztqY6~W6:*cu|GZ, EKvjpkZUMTpz4E Fe`I/,\Ρh~]|?ijI,:=uwZԵ ;Z,T 3aW;N[Swe*5vuoC߯Q tzTSE;XiF;<ð$!FmKvMGkr*WA(1y\0^Hn+ RⰑE:.":gD3D9F$t2¿ _H2vϴh^HR/F7}ɰ<\uGhfԛ(쾩*I Waw6\sL"r]C_xNaVֳ:iiĞ4@ٺilK͹;HћMݒ6)#_s y=RfƣY)&sMlgd7hht;0AFM`p)͆@``3d(́{fV8\*$-)?&a&K&2$!y3t3u &6!<'ƴP( פu6򵌸pD @sP<  L>d{||w<|,tGl呪/%jjW5Ʋ"aQY[HS[rg Uszk,H:ޮFYO%ѐzDjr$D#t'y- X-yiZJR@f k-fBFjG333O(?Fx+BؼW 'lnwe~33 VƧϭ8D|gr6T*1TT*aT> TƇ+Ѽ_$sy@Z4*rxMUl %YRa&9l:/|>N"TMr``(U`h& ' u8̅NC鎁!*X$4 p+HV2KID<ץT -bs cUj8]Mpv![Ci>y)_.@7gDzeL<}۝ u5rqTNK ~v1{] 5T\$-Yb8&wX,HW^Јvrw m ' i#[K䏪7JUX5uzؾZ<{~sdܺ{Z.7X} L 0!:nζſW6؇>6nō%UO#U@g:PĒنAFbi[Lax >שC3f(#/%p辤K%],|!Mmm xޑl6-% pM\fkµ^R+|^6^+= W*\)\㻚5>US phZc`.^WR+|^6^_ ̛? VS Ēm֚r*5Z W~JW6^G+**VS x;,mQXZӴeM#_X: GCХh_`Pf POd(ŶJ ؍h 47GlӘ?wf7=]$ٞ<*huT մ.S}jXȰ[0<NM(j.Փb &]&t=փѡе t%& lfB<].@=нL4ڞn t}ׅlC .}vӇcc$bR1:g:4'fk%ZZo%\qtq[ p{zZ)C@/76z9'6ۚnjw}D蛲% | p|"o\3 ̢Y N-xII"U 0  0e ?i ;eDzYËgt&{ߴ7V^`o;m[[? |lFQT5TIB~"/W0Y?ݙX2`Xm,xD\Ӹ|$. 2Ȝ(2m2mrI4Y4^7Ku2$6YLax?r1.`ZH^@o{+zG#<`?m_ԃZq{0tv@y  N_6oL`Ca~bĉ"GMb/5 T1|a 0~5u 8 0Hn6}qStۋײ[G0N1xÀb@qQzQ|.ɷ&v^ܙ.wq 1P8Ym {nu.$7ci^m1N08@ap)|/n1Rc  T&)']  VA6P|Rs3p6DGW_ lq]"NMKV\\Ǥ5M10,27 ۅW<H€lZeȭzs %sXS^ňVJvټ*s{=-ߍV[xL7W[ !z:paH 4>c!Xy(gtk6>߀wp422#v:p<>'ցt\g?i[g/\ɩ`֣6 _4x Do#эʈ8)vs'UyURj*f`39l~lf9qmǙ*r!} e@:V ts P?g1gS>ImO=X$[OY?kkj?i`C`5ՈeI &GXBy'zƴ$uj UEAZ&貾tbYG@;=hB 7?( ]yDAcCp⡬ ElOF_M"MD`.aͧӐ,6p8΂j98u"sO:k MF$ym4:c2y$ɊBp*V a\/0 {ـ*m,E0˗6[E#]v T-cD O)ɪ%M/""*>L$EV4J.c0[U%"UQARQ w$]ʍs!H[ZB2&]IC-mةu/楶B0`]& X  ϐJm#*#:d劂߱_ ;#MG2l)#dƘTTAS 1~:fU/5oKIXۘxxjn~ybMbf8N\0=V _,CmQe-l{M{ueivTl.JUk:bnd :^-;hdowʣNvs OoO\e{-}FY&ן7 NāO=ߌw&0iTΒ5;lpt,Dzp G{c rgG-g ]C@t&摢%U\hn{asnNmDbk}՜Iz4冷c 񓖈JDŽBOL~)~i}qnarI1(Am7G`Tt؎dm'!|&: lyty"m21FB WK8}ar`dYm<yW6ÞFP;c! 7;)f T9PN@ŤC)`s"g7Z>6V1I3B` ރޘ-t*Su'W7iȤ!r NDG-_mғN#!|Y:Esyx^x~繿DvU|3AWBhQ({e^^{!rߌc?w57޸νǷ=< Fb)As6OHd'MXȣ|LrG 3A}U&9o衑,r0"Fz6t{mȈF)xn궮k:vE2L<4 b$; H 1Ceũ58{Ls5- n&*>Ml S3pG6 WFV|h*ֳHD T1qT/KEtGTMq-惻U۵+.K Gͨ:k;m %ї8,lu&RS~5pb{7m }dݧ,`V#}RCUg<=s_%BhRZ *"^ 'YURvIi]b-+g |# >]yң:MkC}E,sZXi00ߥ,4Ec}TEӣ#Vq n?*!r?ؽǿa9J#q{^P\yY;b|=1 \  :;STɊK=+._2Ugff*FXfUlI1.y)*Ye ?ɒ%_!' kc9:yļ0O)sT3B ~D tAT46ɻ˹(W"X59R<ߟCt1ܯ`d. OϔM%|jUGؔdBV M޳T=ڱx qZ˔9X ߭):RUQG5:N h4*s@ו9{jnyɉ.K_6_D#/P@;ߍ "A~} D{4vvb\<z{#=\d"+}IE'>0m^w[Xbyw\7] kB uӱIG7J?ͤ+ WQJPovNK>JUmnr2T_6l(3w߷(l |/z?BG@)ſGe MN[!л v.M( _r RePKCkvv4M.!ųוJ G?xK>- 萪-O?o?^8܋ ;wx~lC 8BCL`0=y@y\<YI.*RC  p/` w@j~G;>w߂ 7g : `t@:~  p/`0@~%G9.P>=u>t'}UyAG_=Rw:H.Vd4gj:nj:qȉlVW+*$ R ϸA#im\ Zr{\U6}I$/s @H^@؝;w~7ٻÚukMyI n.W"[L&i>Ԕ㔏==˞ւD~ oacۆ[i%Ź-w]Ǖ Zy#ӤڗR :h}W^{|ήi I=Ʈl"ŝM 떓ǎU.boGKIo2o؞9d6}0ig /K-"AXq x7ܜU%(r5e=ϒ膯[ s,apq h{]Kw1i9!g4X.mFԚwA^KOאIE]Gg[Y福naH_EFR_fRU^rLۧM!mut/ir\w aI[,G&h0ַ #E$|1N5,sdKNrz`@ j)s8t y ꡦ#a 2P:s=d -h_'gY3h'Il ֘nsZƔ1o]ֱs~>\RG;ܟ Z}./P/T}Rm_4`_MX*2p(_4i_ PR8H) &`'Aț*R<'Rnz瘙Sh q"I͗g\Hxy0aD&z$6U2,QTZp4$p w7qy'deNm C7Үkn|1fffuə}hxQ36ƮHՂ!J&#'RvYZY ھXhZ2ۆъ&U~RUQU]}Zu(k9#n}" ;7鸨H ő. [å;ClcװefѢŶA$!^/)fE%Za[)ߠ @$.b4D>V^VǍ!iAiMB=/[ )A,~;7O2˙{WH@<"DXLRik.)7Irf/,.ޣm4n}2vfyuƝ2}gG+:"}NNiSGLjsW-A|MNnoo;$+{/(0Lt|@VE,z))Й0S"ACKmv\,+}EbӔS,5H@nܟ#_RW˶oν'3/$bOa#6lA/~A~N)gAR=g?j9H[*pd5WiykG5^%C zΘ{.)JPUSrVyJ4ˊVqJp9]+[\ ^9WtR)WIzַt-IMj+gka%\%{X.W: 6߭Jwz=L+TyXzym!CÔ Cc[B(z K8xg8^ C$S=,|^ (öof +c8B8@[ &9'OCo.ߙ @!@5pRjPMGs-eVfqe &0"R*KFZ[jHGvJҏG{"s K<6t|*P7@YzgR...6|RpwZ5<9l&&&6rR`s.lJԳEe Y Ȫ:)zQd]썫$UUUUU@=6 э]2j%R YYYYy'Yfa)/W\ ]ΞߖWI0RiAytt}>jP\nS1v0I?Jڝ~+a~QO]ب]>!v*((ӵB?S9ZƖD25̺;i5-bT욵3Z dTD@֓g;]sfRѢN¾]ܥhfN N-2wl|qnL;{ cЯ`"/+'iw"S";q9u]7XL/"BңD:!1];s5G$H3TȌ[ˮ=-ejvM/pkz'8`iiBv0wfEa[6]8Զ65;{LiNuY^AL)u2Gs>|ή^E0\C^þ̻?5S23£GiKMvlhFXؘQޒѰ(_"O,Gcm,xR Oa <N;Mttz%kUFFTuoK%Uk!R;@t/w=CYvjm'?wP*۵T91t!B=iow<k ~ט~JYw[h_KḥQzu;SwVo]z`|}v}wW ;z&)B[bOLc1s7}仆Y*Q~d;6}p Ÿ[5 p@;nޯw<#`5 |7.]{Vv,/)v=NWeMTvwx5nt]CDo T4q-x2Ɓ v P&H0F/Y8GZOfT\T\`Yc׸G՘ #36N^ ,i͜#Y,YxbKy@R̩e ߯pMܪSz]C;`2 Ʈ&ۭZaM11K+(bMRhGw_Ѫ)MWVv7<-1$b䑈| ,jꐅjvk2];"[U1 .Q8 \BE3379|:kZbPv&ep<w?3f{mF*C$q_ ӣj[ Sۦ_@L>)0ܟCFF79PUDAhOT'Py={E¼ DwP S|"0pk¢z_AxONl$$kɚH{8,lkY(' /5"zTGt"6G:lGV>\n ^koVVw VV}zXLV:}Q.00kZbLv斳@uYf3?m>ZpQJU#mBH*G$|g ec'x`²k/384<{G}F=[s ڭº/@b$և7'a`k!qRD/8"N u|ϟ6C]^GoZkO֢jf/u"0">؝ֺu;;E1۶2@6@6@ qlIZȞ ;EN ^o^^^`>xu? bvj_h h h h}BкKo@kMK $HvvMrp+`mBr@<_1 ʑ yKZ-{ ;<)&oKvd m }4`DojA~k0~qn@@-@m6~B PwJ3q7El!-!*=mpq% ]Qd/-R!ԈgKw]kEJ)ϥ.iv0XQVX2&KS곉. ,׌4Xc1J~ǥ({&杕5,KUq Et), /!-w uPM̍upLnPˉ0mڥ2CѾY}}™lY_ E`vR ϏRLKE =7:&saO*ܒIr/Y 0ktGcUŮ\Ln>}8>Rb Ei+ Ʈ Tف-d!J~; ~ʜmT\gP@I=ƥ:L/){L2C M)18@6rKӖ̩TKqv:dhNd7Ҕ*k tt'7Ɖd\V { n;^ a䟧:﯎) h~i[k2vqľAc[h˰aa\|A-oM XmXaǵ5M(NA_Y'Uv}C %SQ5dU3pC nNnxiOQZʬGSuAcJk8 Ӏ]5+jA؞oqt~@\FNť-+Jx+ٍv/AwҋM]tfvX dN %idN 2;4C 3e`pdpikt/]ڀ)֦0``mM(YۏfmԀw.0v2F~vT[m;&iV7TqN5%uN'GŚۨEi[ҧ$q-f~]Dꑴx"Աx ;-dxLLjR@#D"W'CNS9r N?iew@$QҩTt ?uxU]]$՞<+xMvw'NɣGjqF8 #opc.4 5G\RNR3(^OǙ܈qKCW! N(ϝ8D%ciO[;lcRIF/4N㳋h1X3n:x8 }%ܘe5؄qJ*]j8WMN; Hȴ2(#PAוq]RCl +Nb&(L!9/nl"Im{UkuP#W^?yZ ˑen%4 N8ܬ[?TlTUչf> Vk~n|oK}A%'+!R7փ*hc׻?=w@帆,Bws3DՌe# ;p-!iq.qDΚ 7)l)˴!+;cz/^/dŋN#6vS)T4(D8mMO릝w޺p9 }m욾ok!{E`)B@Sß#ly.V və&HbǔAD18H838yF`zb"g,΄ʴׂ{ 9WW <:(Be%JO)x3)W_֤~-(jO FPL62b&Q&?[% *Ú|9k/ohͽxb ̷t7M,—`5Y j\}xr FP=!Ag:]{Na$gx2&FS" xE$Jן(K!r?!BjJo9tl9i8:PUj{e\C.7,%ZW-R;SSSrĴW%FeaQt^+!SNR}ϋL?_gqoh py-cZїahz?,C9+5a?-t4T 2/-% kB.&F5`u"'eEGu=)أ.[sxG `zՊzy9#OfcXK9og5> !ا/4#WIfR~bӽo*[eOl !룂B8@rVûMCdczB\=N=rCq[9PJ-W@- 4:4 eU9gyp^pqQ/,Işa0<3hCX+'akE=~~ xh 0L<`M<jL<-&QԼaZ8d捉T=Is\V$a咿g%RMEGoOQB-8U.HƄv!ƨ$fansi/tests/unitizer/trimws.R0000644000176200001440000000310714533476156016054 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. library(fansi) unitizer_sect("Equivalence", { txt1 <- c( "", "hello", " \t \n\r he\nl\tl\r o \r\t\n", "he\nl\tl\r o \r\t\n ", " \t \n\r he\nl\tl\r o", " ", " \r\n" ) identical(trimws(txt1), trimws_ctl(txt1)) identical(trimws(txt1, which='left'), trimws_ctl(txt1, which='left')) identical(trimws(txt1, which='right'), trimws_ctl(txt1, which='right')) }) unitizer_sect("Controls", { txt2 <- c( "\033[31m he\033[42;1m llo \033[49m\n\t ", " \033]8;;https://x.yz\033\\\tLINK\033[45m hello \033]8;;\033\\ \033[31m" ) trimws_ctl(txt2) trimws_ctl(txt2, which='left') trimws_ctl(txt2, which='right') trimws_ctl(txt2, ctl=c("all", "url", "osc")) trimws_ctl(txt2, ctl=c("all", "sgr", "csi")) # A control isn't a control trimws_ctl(" \r\a A \a\t ", ctl=c("all", "c0")) }) unitizer_sect("Errors / Corner caess", { trimws_ctl(character()) trimws_ctl("hello", which="top") trimws_ctl("hello", whitespace=" ") }) fansi/tests/unitizer/tohtml.R0000644000176200001440000002034114533476156016035 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. library(unitizer) library(fansi) unitizer_sect('colors', { style <- "width: 16px; height: 16px; display: inline-block;" span <- '' colors.8 <- fansi:::esc_color_code_to_html(rbind(c(0:7), 0L, 0L, 0L, 0L)) colors.8 # error fansi:::esc_color_code_to_html(matrix(c(9L, 0L, 0L, 0L, 0L))) colors.255 <- fansi:::esc_color_code_to_html(rbind(8L, 5L, 0:255, 0L, 0L)) colors.255 # Small sampling of tru color colors vals <- c(0L, 127L, 255L) colors.tru <- fansi:::esc_color_code_to_html( do.call(rbind, c(list(8L, 2L), expand.grid(vals, vals, vals))) ) colors.tru # ## The following is some code to display all the colors in an HTML page for # ## review # cells.8 <- sprintf(span, colors.8, style) # cells.255 <- sprintf(span, colors.255, style) # cells.255.color <- sapply( # split(head(tail(cells.255, -16), 216), rep(1:6, each=36)), # function(x) sprintf('
%s
', paste0(x, collapse="")) # ) # vals <- as.integer(255 / 15 * 0:15) # vals.tru.raw <- expand.grid(vals, vals, vals) # vals.tru.raw <- vals.tru.raw[with(vals.tru.raw, order(Var1, Var2, Var3)),] # vals.tru.mx <- do.call(rbind, c(list(8L, 2L), vals.tru.raw)) # colors.tru <- fansi:::esc_color_code_to_html(vals.tru.mx) # cells.tru <- sprintf(span, colors.tru, style) # cells.tru.rows <- sapply( # split(cells.tru, rep(1:64, each=64)), # function(x) sprintf('
%s
', paste0(x, collapse="")) # ) # tmp <- tempfile() # writeLines( # c( # '', # '

8 colors

', # '
', paste0(cells.8, collapse=""), '
', # '

255 colors

', # '
', paste0(cells.255[1:16], collapse=""), '
', # cells.255.color, # '
', paste0(cells.255[(256-23):256], collapse=""), '
', # '

True Color

', # cells.tru.rows, # '' # ), # tmp # ) # browseURL(tmp) }) unitizer_sect("simple html conversion", { as_html_page <- function(x) { # note this will clutter temp directory, but needed so we can examine source tmp <- tempfile() writeLines(c("
", as.character(x), "
"), tmp) browseURL(tmp) } sgr_to_html("hello \033[31;42;1mworld\033[0m") sgr_to_html("hello \033[31;48;5;23;1mworld\033[m") # this turned out to be a good corner case, italic is not actually # italicized sgr_to_html( "\033[1mbold\033[22m \033[2mfaint\033[22m \033[mitalic\033[24m\n" ) # similarly, we mistakenly seem to have thought below that 24 turns off # italic, when it actually doesn't. csi_string <- c( "\033[1mbold\033[22m \033[2mfaint\033[22m \033[3mitalic\033[24m", "\033[4munderline\033[24m \033[5mslow-blink\033[25m", "\033[6mfast-blink\033[25m", "\033[31;42mred-fg-green-bg\033[7minverse \033[7minverse-off\033[39;49m", "\033[8mconceal\033[28m reveal \033[9mcrossed-out\033[29mclear\033[m", "\033[1;41mbold\033[22m \033[2;42mfaint\033[22m \033[3;43mitalic\033[23m", "\033[4;44munderline\033[24m \033[5;45mslow-blink\033[25m", "\033[6;46mfast-blink\033[25m", "\033[31;42mred-fg-green-bg\033[7minverse \033[7minverse-off\033[39;49m", "\033[8mconceal\033[28m reveal \033[9mcrossed-out\033[29mclear\033[m", "\033[3mitalic again\033[24m not italic?\033[m" ) html_string <- sgr_to_html(csi_string) html_string # tmp <- tempfile() # writeLines(c("
", html_string, "
")) }) unitizer_sect("Bright Colors", { sgr_to_html("hello\033[94;101m world\033[39m yow\033[49mza") # oob color (!98 %in% 90:97) sgr_to_html("hello\033[98;101m world\033[39m yow\033[49mza") }) unitizer_sect("Corner cases", { sgr_to_html("hello\033[0m") sgr_to_html("hello\033[31m") # A string that shrinks; multiple repeated SGRs reduced to a single span sgrs <- paste0(rep("\033[31m", 20), collapse="") sgr_to_html(sprintf("%shello world\033[m", sgrs)) # non character inputs sgr_to_html(1:3) # Sequential escape sequences sgr_to_html("\033[31mhello\033[m\033[42m world\033[m") # Sequences in various spots sgr_to_html("\033[33mhello") sgr_to_html("he\033[33mllo") sgr_to_html("hello\033[33m") sgr_to_html(c("\033[33mhello", "world")) sgr_to_html(c("\033[33mhello", "\033[44mworld")) sgr_to_html(c("\033[33mhello", "wor\033[44mld")) sgr_to_html(c("\033[33mhello", "world\033[44m")) sgr_to_html(c("he\033[33mllo", "world")) sgr_to_html(c("he\033[33mllo", "\033[44mworld")) sgr_to_html(c("he\033[33mllo", "wor\033[44mld")) sgr_to_html(c("he\033[33mllo", "world\033[44m")) sgr_to_html(c("hello\033[33m", "world")) sgr_to_html(c("hello\033[33m", "\033[44mworld")) sgr_to_html(c("hello\033[33m", "wor\033[44mld")) sgr_to_html(c("hello\033[33m", "world\033[44m")) }) unitizer_sect("Bad inputs", { fansi:::esc_color_code_to_html(matrix(1:12, 4)) sgr_to_html(1:3) sgr_to_html("a", warn=1:3) sgr_to_html("a", term.cap=1:3) sgr_to_html("a", term.cap="hello") }) unitizer_sect("issue54", { string <- c("\033[31m", "\033[39m") fansi::sgr_to_html(string) string1 <- c("\033[31mhello", "world\033[39m moon") fansi::sgr_to_html(string1) string2 <- c("\033[3mhello\033[24m", "world\033[23m moon") fansi::sgr_to_html(string2) }) unitizer_sect("Colors as classes (#65)", { sgr_to_html("\033[94mhello\033[31;42;1mworld\033[m", classes=TRUE) class.8 <- do.call(paste, c(expand.grid(c("fg", "bg"), 0:7), sep="-")) class.16 <- do.call(paste, c(expand.grid(c("fg", "bg"), 0:15), sep="-")) class.256 <- do.call(paste, c(expand.grid(c("fg", "bg"), 0:255), sep="-")) x <- c( "\033[94mhe\033[107mllo\033[31;42;1mworld\033[m", "\033[48;5;11;38;5;70mgood\033[7mbye\033[39;49m super \033[48;2;235;0;20mmoon\033[m", NULL ) term.cap <- c('bright', '256', 'truecolor') sgr_to_html(x, classes=class.8, term.cap=term.cap) sgr_to_html(x, classes=class.16, term.cap=term.cap) sgr_to_html(x, classes=class.256, term.cap=term.cap) make_styles(class.8) make_styles(class.8, matrix(c(0,1,0,0,0,1,1,0,0), 3)) # shift channels # in_html(sgr_to_html(sgr_256())) sgr_to_html(sgr_256()) # in_html(sgr_to_html(sgr_256(), classes=make_styles(class.256))) sgr_to_html(sgr_256(), classes=class.256) # errors sgr_to_html("\033[31mhello\033[31m", classes=NULL) sgr_to_html("\033[31mhello\033[31m", classes=character(7L)) sgr_to_html("\033[31mhello\033[31m", classes=rep(NA_character_, 16)) sgr_to_html("\033[31mhello\033[31m", classes=rep("bad class", 16)) make_styles(class.8, c(1,1,0,0,0,1,1,0,0)) make_styles(class.8, matrix(c(0,1,0,0,0,1,1,0,NA), 3)) make_styles(class.8, "hello") make_styles(letters, matrix(c(0,1,0,0,0,1,1,0,0), 3)) make_styles(NULL) ## see examples for visual testing }) unitizer_sect("chars to escape", { str.esc <- c("A\033[45mB","A\033[43m&B") # warning to_html(str.esc) # no warnings sgr_to_html(str.esc) to_html(str.esc, warn=FALSE) to_html(html_esc(str.esc)) str.esc2 <- c("A\033[45mB","A\033[201mB") to_html(str.esc2) to_html(str.esc2, warn=FALSE) }) unitizer_sect("helpers", { html <- sgr_to_html("\033[42mHello") f <- in_html(html, css="span {background-color: #CCC;}", display=FALSE) readLines(f) unlink(f) in_html(html, css="span {background-color: #CCC;}", display=FALSE, clean=TRUE) }) unitizer_sect("carry", { string.2 <- c("A\33[44m", "B\033[49m", "C", "\033[39mD") to_html(string.2) to_html(string.2, carry=FALSE) to_html(string.2, carry="\033[33m") to_html(string.2, carry="\033[33m\033]8;;https://w.z\033\\") ## NA propagation string.3 <- c("A\33[44m", "\033[31mC", NA, "\033[39mD") to_html(string.3) to_html(string.3, carry=FALSE) }) fansi/tests/unitizer/tabs.unitizer/0000755000176200001440000000000014213626056017173 5ustar liggesusersfansi/tests/unitizer/tabs.unitizer/data.rds0000644000176200001440000000742314213626056020624 0ustar liggesusersw۶a=lK~&qkOY,ulMGΖu85CScT N)m;fv/;;'@|D9v,1->..H|Z@!x`@ BW#Z]]\"Ws>1aBto၆[&]o#4 kt8%^M뮦DGw4Uh\U~˗>]?uб}c]Äi\5,UfQío6W7*lبYȨxSiZk*ԇ\xKVW]d(i6j.SUsUj\6'A]s7xcco{C 20g8to5panPA3/@íaӚj0ڰ %Ei>"ݣhe)"֞`wh{"LvWZjky55Dj 64xwSUD3pM3fه.o)^b̗>x"%_8XvDMkF#WXpQOO)b4!+n[5\Oźa6.\"K7ň֠ͅ5ӊ[r+WZ<'>"Yzuʫ.p:B:pn"0 x)"@ƹgَ@Br$3כn:-f'I5`9Z;5G*K/ ;qߥF8 a_OBP cd?q4|ӏc⾁\ǰR\o,޿|z+Cz#]CMs<_@TsIC!5oY<&\p=yNo=x@wZjB(H Oq-IM5\־"j` \c AՆGj'Ǘnf]8TԚ@2z ұ1hVͮȬ&۲G:uAA K_f]ߧ>0ؗ }YYY_misnyYug"eN+(5A;H/%k3=e] NqfyAqT>I[yc-UU=cAu[␷ M| v^&dcь?Kٿ"f O9E+Nl! xSxAY{*LeKb\]X勏3H%߲Do1d&TEBɷ·c\p^:M+ĭ5R\m"^bۿ(|_wK5[|| |Wyei^YWn+G.*!~c2HJ YY?hGV!PP} D {= aCK0hGh/q, 6(pbU"[YN4Uf$)yݷM&&ۛmpj;7 pa g|<֮$R"USgpy +ȸP?j#Ӱ`r8_J|.D T\i8g ^PN be}>Pyn}mgV_04=4-K~Bؽ4u{{,b)~*N#w8vN+a}=az: (ȡ|VtE vG<$0u۱󫱋b`5^l3u6#ͱ/cwYpRRRp̡Zd?zOV7ono>z#÷- u1DT:E1\SoF{}b3Sk7pOYG3. @UgI&2V+&r4M[4(%yʛ$a(! _NwN Q.|ҍ*eߠB[cilT6+US NQ1!,,-TL}d]߽a:[Wz16=)BN-S,z@ T~6Ak Q>Q}r#3(eWà-LcMp9H^ .=Yݸ}"^=]Hő ?s d/tt< o]~ q ¸o8*\.2veF.zlXD-;L>|ȳ#}td*L5(C!l!BJ0#ٕˮ7l>g<,P?</(z?"~3*f?fu1nuu0lak ڎg^'p.D~ceUE&nER^ifE+c T6}E-"=RxN^xú]'JŢ&mx~*Ar.e\AR%4h:(?ɺk3ep}zo&oPTfګ }^S9Bإ)#GE"ᤇRKPM͌?vm ӑA\,wH7wtL`\İ 5.K}ԊUiD7jEòyOU(u[V" GGCi{tGx$1Eȥ,1%R n#ABaN% AkZdё-J `%Yw#o(hCp?ΑSPeO C=g6̘xqpŸS3g,"Hd^3ty$J j . X^4Md|A/{|!@AAA$+4nGAbJt.- 5@ּlS%F<(q fansi/tests/unitizer/wrap.unitizer/0000755000176200001440000000000014214076017017210 5ustar liggesusersfansi/tests/unitizer/wrap.unitizer/data.rds0000644000176200001440000007106514214076017020644 0ustar liggesusers V)6EJ3g4OC[,/6)Rj(Q83M.BWaJ͖׳ڵכ;Nk]_:$#'Sy=xB }|1(e^EP}!|َnYriT^)GBPrrkRM5JM{Xk}{> M5j"-TP"R,\~1TS )յj;.jF{y{ug%g=ϡ,pbOakD&(ذM<.4iG~HY-#G"ωPd9Cڪ5{\t ދ.HS3 4IyѦeu6uUdXn5~j4e?̠V{M^CJ]TP[ ̰k8-RTHy2p J@'ڵWpk[}!mnn6лkq=aIb4X. ڲ:꺃#v\feƖ~1뚍HCX_k{٪w^CWf:RqQG.|&z@EKBscb )uP:M/|j4UiS7 TP6:FŴcaН+-DwnXvgqulƨچU9e#k\r뛤,^u͛ݏo5t}ƭ+o_]߾q㛗K9$Wop<=yk1\uusD`!Bo5]9ujssduXr,qE"Ym][`JQiڪ'eej94= 4%0U T2iԯ"?8~w!Oo>QV?+BK\%V 뻷:V? E(\IWI8h]kڪZgOV6n2x뜇X꺭;Ɩ9]Z{$;){L<4Iʱ~{m =\u'D jn0ׄ n1|87g,ʧn:.xq8'yBƂ'x>EHy$Nјr WX!Xޖ""oT 'ӽz(y19|&%|6[0nz.֓r|7,j{6Ѫ\ asQv[dڥ.^blo؞b$譓Џ zH9^f -dZcN08sb}@M%17ġÿ60%3ȳ*!QFD[58hg"J0ڮZkd$ I7 {'R*ٻ/A1s)ɑ,5טee*M69T-y aRS؊<=ɻedR?u }RI u+/=' {TE^|i ]wtd@[Y@ Rlj mI|HBHꯧK1;= s$? Ӽ\V =Ns蹜/=syS UƧaQ=y6s g^ĂK u>!й@绶7P@+|{|KHv3g s&*ABkߍONi<]I #q$a>.& W7U#RCt?$=0ckvCV ,0]U7yYYZkZs5f]{05iuCxp_3͛nyݵ7/? sn6-į[l傄mDQSn~$d91}QM6t̵蛧oVnG('_]Gʩ(_EGVȖjDx߈f!Ӳ[܊BM۱P$!'`Fw{ <4b8Յv6!yW Զɧ><wG؟8{ tPx*~+Y,X=d7)"ڹzSD4B`~{(0)oλDByLb%$qLKR h/HIqE"ŧLC{l߫w K)Ɇ7` }˜aAiZ)d ku9%S\Bh9%XBZ9q%$UJ93%LQ<9$tSN.9$JwCމ lqwb\ Nz0 V| q' %p^ B|'A|Ҏ 2J)0lh8%AC) ƅ~BtHB4w]hqnD~}xnÓEC8D ~dQT-2&8V" X}\ h\>0NX-_>hN}wm/." vD~5n2l@g&*Ƅ? -M{x<3m# sΤ"&H?2n+~Mn$IHJ$*`i +eXI_p9 dfkCA0no/GQ.5hO!& 3ik5]5P~ Vjhx6mD!A?x[.ўDpS;×(Cp?sr0 OTD/ ;PA^gq??LUF2~;tW{c` h 3/X~!A,E-Y1Ix}hu5^W~:^xF~5lt]\2n3ND5E*B؀]XΙXV$bTίqm rܸ!EPDyk2Zs3#8h>wdGH#OqdUS}iFؙ\mfj^HOnc>.pF}D?nD0* @˼S$ H,IQ)G1XŞ#iX3ET^ܧa6/Ƞ;{wXP?χxT_EgЉ v`w IߡJj҆n.,N2\yo+˚ 赇PɬH`!vHΙ<DŽ)Kgz0E^@ Ad^(e3ai<^?'6>+5J2㠌|we|FPa2 EDL1Bgsìp4wNY|FT1PClڣ&_ НO &<ййU@玤s{"r5xtsݵ7/K(@ywu*HU{pT !FL<|%^j^j==]NH*qe,;j[f-$mE ɮe_cydkšG%Z Z"TVS~9E=oWQ! rV7Ri`"_Lm&A?25H~MV'$,P}ڍe B]ދ[9<Ө??H qu;|hӽ4Ki⟠43zotS%i`X}l>.2}\L!s68p@pKpp@pH ۈﭫ=FjVe-욎iGukq,^gfPͰT>0 U^kbU^UɉӾ= R^Afc8cܗBȟ Tst2) |òV.M|Wq9)IuTת.٩ĕُfa㮃En~K 6DayB5,1.V؇Xnx|WG~^xece]p,dR ֿ|ܿEsGt^TKUU|$KH戳3%n ]8">bUx^w*;Ebxx#=t?\w{siCC^3kM \RPVX$oΠ#W} 0G Fc~rDd%ROeQP~lЂZ1J}aԪH{m eK}aAf~u~_/i@yϟafqxH{{O Ks2 G:ޯ_W e.O`1 OeT4*_BK+ , Z^@hB~R, H/Eoer^AOEN/^2sʸ`.~NV=Vp-iY"*˾"lPTbKa?A;jf7:T)Z<"2O^y7/"ͩm yTv]{L4e? 펉qOꤑv&8joFx3M &ouAnA^..G]zk]z"׻"_ҋҋҋҋҋҥo:"J >OC>#2.!WGoi;}㪧`E3D8؟Bd&Mlz99s;m0jֶ~{]_%?g(S|eP|v[-~T>P}Ҩ >P}zq>3|_Js%7W q7wXHP@ a{hMauuLuJiQDҽw?DX-X޺qDK_~P]PmV#O7Ho;[rtzuu;52äZoqu iziYu;a'gztQEZ ͥk6Lyk8rcG-WjL6v Ԭ#_A*?z|$u>FZ3ھ}K^k(=1mq;qp:BcB񮉝"ck3ݑ*HA?a $&] P@ͶUgÒo|r1Fm kϡ]Kȹ"&(y3@."A :ATH LI'D 4#@{YuǪ)|NFcgG(ŋƔ4?S/ <'D+?Z%*Iğ^c$hpP^hO3iNL0 7KB}g Gi5(G={ s3X^)c7/jybT˙W-s H۸j.H8p &Qt U<1| @́x1֤K&NʋEF9rS9B@,YYHdY%^VXF=V;32yrgoe0̟ܺcե{>F?C0&-85;j7?3 %,H&.("('LQHE(dEEt{(&jm!;:4C#'9$(lʑIٔ3irHa<($WfޙQI5!$SL$ M"Rbxpˤ޹yT ,{) '7N& 17 :u-u`CbChd0Bٲ _ɱ -@dSKbqǪ}|NF 061EFyߢļW@^1,b-`*<< Fk x@QsRHST ˨],lNoW[w]*-qέD'Y ߨmU4c,c$C쨺QL#A#8eX~L* 'R+ ~!A FH'y&Kw, ?¬JfM0~8/PyZw?okA>az"UЫ9qsWˉz\TU,G)|׈2jKB^nxG(p t)ȉ;I@`!=^ &P P2@9qsjj'evtu"CQoLQ$dUy s^!!鮯tQW"<xblջ xBQB!lܦj>t+{u.F]Ysܱ.,>R-Բ/e!l,$75>߮W;VG-G^4ұvl"EnSCMf; ֩=4H*j~XK-/ l9!mCWMjHwH?ܴ𿳷=V4QqFxrt>TRS1#4x^l@*Ji6mMt2I<֚7UM#-۪alEmuUiզq}`5MtTECSţVf jKVa$.`cn赇V{EtA7 t i([Ȳqu.%2u[kURK4bkq%\^i!HFZE!M\0ܵCdyӰqil=tea 6Ll' 6n9<fl5,Suji$?$F6w5 *-zuqKi5Rֆn;n Kwn#[-ޯT@jn=aWe{]/44[I>${ib_tx9"ZS[^ӭMcԱ28TLXX^x7Y-zH=,E<*.菼fy`o&:l=$7Ct^׌jGs]͈޵^=၍S?yB11k8koچjZZćTe~ɓR̸=ĝ*YI5L$yHkfgE⊱ѭm\nyCT8uC£C՚z }K HK^EA3GR>݊i)橲ԺbN!袧#m $O˪{ic!$$X"ţwpFB魫AAs3=`Rev=]P A`!PPYt(X\gK /d!- /J~ (~H(EO BzM(T/AP~)Ij't( kCTx4"h% h #U Ȓ{Mqb~"8.)+>/\CAП )@g^2{Q); =!O#Y&W1OQ*DA)dV{ttWaS 'ڜmڸjO %u^8 HdCHT(bJ-z;$U'9EތW3$ ;=؎\)hPS}R8oFȔ0 ɔ艒F^#ZIŽMA’I:N8Z1&m{v`^8~N>^ow$<0Şj{_j}־:ڧUӦY\Np& T^knDN̠4px H#DgW3 D &AL̛| OLbNg8,b$sO/;~2WD Z!o @M]t6 o3Tk-5k &I}0b%3"jMlICIZlnf6"~jm*>||N;eݺ=/dݘ86qU+z Ni7IK7kH4ts[ mG../kS\^H+"{Y9;Z56ɊyLyNP@$HeHDX`o6؝9!YkH`Bw9{ŋ,pa!۱%>d"_0Cls{(ǽ=b! `nUg0.]njlmP(R4azLe^*,-ޛ |Łv&@`/ @`/ @`/ @HM -mC@7+43\)}]_"/8hQfl/8ͥ  e:\N֞+4<-IHGA㣍#O8 j|ߦRJe\-͘Z%䍚`H# >x1Z9%iF=$0rh 6&RZFۘJe-͘ w:-ē߮FJ*HxPި )U9+194Z9crHj3jrrp ;+195|8%Yf#Cs[BK&fClr#,M-/Q^rPQJI ;?Vʱ>8J{.Tdi7Nf 7jmwFyǹo*334igȰYDxэJ6// ,,v(^!#(`~ 7 zcI/I錈OGQ1 Y=&_IYQ.oIu&nY4i,oΓ *43A4S@])iiKI Lm`S:)Z=ESf{XĞ71 iسwJIAZ{>@; (-L_2S8$ @L9o}U2ą ۵, Ͳξ>@TnlxD-T{{`L9=2r_ 8gR F8khl9 l9jjPi7FfI5)m9wR$>:?k"!W3ϒOl?  @L9<1;N9:o~ߤ59] ;TD05M|w@Ryz.eZˍ9P%+ֵȶ>TF_=-v;EZuJ^!V׻"7"7ca/խ..']z>[jaD/jG|>xB?PFr'"0x> ij1>ɩuo=<α"Йi21$I)pH vsHbvd.'8$qkܞtAg pz@hsO=`]!~굏 }@3˦/utB<{78~$p|@ϴCB8)TdpG"?DL?z@z%KAqІ`)66*@6m2ڬ]w]OuB7d͡9B7z0XrO tQc{ŀk4L_L0} &&@N iвZW3?8v 8gpΔps6OJ=B hlQ/,[T-pمEU-na:bkXBO{cZuUH?6&aV晎1?[W,sQqVg3:&L7(PO C8ÉyK gӠ֣|HQRDfJ5p,bF2hfmںcp\bEa n8fٶVs@H%__Dt6b$CiW#&`D84Dc+{7}!mn{B[dZ.r:eΪ[^jx>לMvX{>9q5b^!]r> * `z}񞄨!_-fjNep%2c@8ͷ1`1FDhٲ6?S QUIkZ6"9{-]b9vE*rşɽ=m`* "7xہhDq #bBKW|lQ:m' ay}|Acgu.]ݑLؠty ˾oG/x s:M9.'C:GPYdImvAreY |yE0c nA9W !lp?? .3rUr m! :",8U 8I}őZo_q'ďhCe('x:0L:bZ|dg>^ `MgNN= Mx]J97uzUF@o7@}@=zxt8Bq 㓆Y؃"Gh7d%YGd*@{Ao?Z{}<\+[ViL #S) S@n%#ZS`?X4 XioZaC``;!&00E il~3S]D}3m܊Dp?Lor Ba:eӔ1A1bT{3 xjNOuG$|7v0j<00` ِC8$aj?:#GɒgE$L==?r>練bGt%+hePJZ4N!ˠ%[Ԧe5-:[짿Y'DY3Ub(a=Cz,Z DŽżV{]z>\`aɞSS(TDD 'êXx+wp" d~%>)AY+? 0X/D[s{O).A%} #Bz9Rt BG|u#] ɰtiXH"xW+T$yW{< O&t:tn|/X_ZoLI(i+COځ- $ZHwC/7::`, tXw);k'NE Ν}#Y }|ly>>klY2 ,jd-9Ş%ύiI\~ ,?cBb^3x=Fgzx5+0&A)#h|Ã&{,7QuĀsRsxo~N1 ;Wv>[v|w$C<5*<fyH+rZ+L4DYoj(j-8E7CYPԀ<<Ofប́9 p̜d'aE ܚ UMIe) ?a)KLI!SR%%>/ ѯ 遣_B2 3LgZ><'|UڂļFMm=FMm=FMm=FMm=.Jz{]M @HNrSXCy-F bw|0p O!JC Kq;!xm0! `^[!>X>X>XNk[2V wzpe7cvr?inZݴ<iy܉e' Oau{ KE܍n맸c7E=fM3iLr;~ȍa~14xŕ~吠gꐟHn$g48??aZ` HV`?ōZ ,X`Ƣ`X+-SiP9 t_j2lEϋr6-x7v*lpzQ-[y[` \[ouiH\f;a&404h'hl2W$ E N&MkwzL&Vή],]M(ʦ]2$?iI\H߈Y„"L(pϣpW$  @6Hx8_T s6YaZnf$@ky@k5l9Dkua LavvOIn+BI|RYLQ%E^H^(nxёB,K=){Jh,ۧYz΍\'4؇,Ϋט{J<;qm ~om-[JHMV_t6NyCst[{)&Ϥ,L㸨!aHCNM5T8B]dkX\YV A8ZCD\#ٗ0]"yٶ-Uܩ=v҂٫AxM _ҐR*SX]:I4GV* c+_lgX3(s6ZC0򼁧 QB\r (;*L_~Ud* 0 ktGToo"I"1Kylo ;~2IC+) ެė$;JL~)*&򫀉QɆC&2'[\D^TMuAЭ/I)a7gN*_VKgߖpꎷ)\dh*@eɬV +"iqT{џ=}P4h>+hW44 7h~6S~bѠ x?%7z`tnK9?  z6ɀidA^ }.S`E.7!DD 7ko]TZs6c7`wE;Nḣ7QL&?x^郛ŊBcZ7-LQ2,U.jY25Tr5D$Yn`龰QZ< 3 -B Bps haYꖆ5eR8Ha|p-3ō ?N -_\DX%qT$?i s _V߯O/nzOW^[{iR@!(x=xFE|+V V`E `Eps8a8 FM5ϓ'y:Wgi!k=fw2Yǽio{8JDD;X De짩rr3<|q^ ^ps{O$}rM]_(FoEQ,bT^k33薆!NK}nwcpL~Эk~6Ӵ:F$ȈETmEGwmUDzq a0bJ#䗄68FڱV:wwo6JNݓ?d잜'g._cwE׻"7"7"""t({{= x|gGBdcH !ؾ6?.2.r72?fM3Cwo Q@}(@}dÝ41NY>H<րo-EXƎF6%ã-C% _-xg1VP|4ӫ".*jb =?,aJ] _7~`Da7WaЧЗ wRA߲,>9Os9s9l9slxEjvK7@7'Axtt&CwaXx\fo<xN<x.tx<xnP<SˆC<'925]*mR$xtJ[SˆC~'Uķcħė 7OMy)! @>|;~ @> @l9|r#`~ >@|v 6@|@|%Ts|1SˆCWz/o000_6b>Į,ķc?O/n߫ Fy@ysޗEp\-^^ 7x퍐3,,..^mA,7^gf-[ձkxnXXljuT"p>V=|Vgc<:+]$~ǘ%bƧkhQm\gfEUM ]:&|au\Z6yJ:"$f=#/ŏςA fRH5$HT$H̆CXl Snq@e <rU;5a^d3gg13g 3gps Y#*fYkbj׽ZFܜǼ˓]M̩ 4`5 7xx V[ 5?5onֶ5\-:@(A ldTf xX9jK}50"7Go /y4; b_Qa[@`S8O h,F(=ux )x x l9)UD/YXh@vYAv ; l9Dv7΃havm-E#Y:g gnj!/8Yo\@ 2s֑n;.' 1c 1cpsfD0ƇUmuI6$cO>ۯx 5`aV,,DغD.x.G]zk]z"׻"_ҋҋҋҋҋҥ_R}ܫט{ ,SP㸨!?Z)oa0O}{@%2V֩T/۶5~M5,x/ڔs*P7α"ZnЋ{"K X4Xw`=zɆCfosm>ZCKϾ<5AjqZ$lGڞ&#Z9FߔE\";q6o<SEmᑆ UcNdkX U^)ݤ^WAE6a,w(KB B : t@e!;!'t>]F u8j (]ť8wo/CR.{ : u@e!+!u'e;GIyJE~.=% !P~.;GHS9w;7h?P h~Sn =l?~]6򻄽E|!< ({?`)?`p'GtY2Q7u }1'hd"iQ$&5&Zg8' DJ^"GQ  J@(QʆCܰVDtu`J15?NqN%Jj?)ߥ,YY# % K@,e!YJflSMW%THphZ9Wݿ|xǑ"]zuEKua[q܏0yw׮޼܇L|:6{KV0<6Զ)18%,}sEmޜGW6& llU6l,nq9s5UĹ搐d]M=#ghL;EJ,z> |i֧D9?"h7XX,LX.? , XX6V&)H敋UqT:%ELc abEFG#_#%>vaMrdK[o|Tv]y mwlBFO2qV԰lf2LwE:zc@%a A9"D @ "9AĿg^9WEZLq\Y )Y{d-㒄Ƶ ?Uq+nWٸ/r(W%ƍZH50{v@ԋ<*!:vUgQt\TU<`kW [gwѼqu2;;k)[6iP)sx؏9BCTMC6ßP?!nÛiBYBbm{/[mbܦ a=Ҍc󭺺U,wPBP@ZtT,ȀI I||N+9&p,Y)|_K0-ys_+SVV+6s!cmgW^+j[ޏ"R:De[òNjhHĠڧ#ULJH*܏bARSX̣Pb0gW:l?, XV6)`#X` N(='3֗_?*Tɠ2Z*T Pl92IF%BҝvPi'?'KK6viv)[ic+,ixl?<xH6 i?V  !C ?y-!e_lY 5VOb؍ +iu:2-,AV)Xyf!x~? 7?iKZ/iC溚H|!@>a]2*>v̽܏{יnUm`@U!j>p]?eMs ~J(!>.*4u:%>N&+VW\̿: wo}-tfeJ%AA|4X#\:ջnvjm ֯= @, ~w@I\6kV]7`wH]i @N)D7facxm.cEU{>iH`5HچNjP_*!5uNQ<ug{b(ǻ]z{bDZ8|یEUTSMoB^ij,oNV:Rpy#r5 hSM|EN9vSDcQ̨ݷCIH6HD'[5 yLdɵ5K`Cׁ Ne-q:4psҺD,C)z" D D!BQ7NbDo%1dZ0tSEJ¯_ϖ%- >+ϰC UqR&$}6=2>Гa|Mqdwc%3XcANKoT3Yb/6TӓY{9zhӲ:rx4d#Buuز?/O"gq%J#r$*Awm/ITdI,1A< S]_" DQK!ye/Ȣ,Wi#(HIے,׸$E$BUWE@Zؖؾ 5Blo+\j9e#Ug(Ջ@[lfO:~&šzOe·Om#^ N.̉Aָ& G 5Mڲ:ȵ]64IVL,&Kw$- ˬiӶL\ͮҼJ .R "%x!XYMdZ~Pϴ+sѴ~d tk&% iG=d+ {y3;SMH 5y'XFn}c+wQ6'b2qi-[oj*FUJuO;z]w'O.%(ȇL0*y|TrP5<*BYRe5- gW  (Ā.$.d|=!뫫T ,,s߳I3 ^1ߋ򂅻j2gнR6恤ݠᾴ^wDF5މGp:B(RDcoMlO8b3,PL<™x \<3G#J_>m,+m[;y: Q_L1m(|og;>ȧX ,MAS-$:D)>&)c jB#$}$7BWM1|hmv \rC'=_mxͪ *>NQj*z̵߆6p'㧎O?^|m#gO]:{:fi~A?`6FX8,qU+z7i( @[eNЭLХiyR.k< Dz}W56խhˇg%ynp_]S8: P#GcO>>Z(+299sd&IB8dU41&$>*3_fIEһ oҫR^< \AMy2'r(hSp.S=κG`M#rCo5DÅg+gg+gkTEm?N}C Ѧ2g sR KC,k*K~ _"81b`nGCSBĉ K嬏,}BײtqHTXѲE+Z^(? CP$Q쌷620:SP#t"bZT^zIxڴK[?>!B$|ϽI^E-3'z^x&zB!B%'zI%Gӳ/akwM`_ʒz,PgI^RwKOKD`]sUEzfH6BųwC>1ۋo E៳j,K|j74RFfuA_y-{IX&]=_S'7baBuh߇T(ż~}.+"Ddg!2u/ٳY5T:RiOy^ ߽BxV{XBS'sۑ. 1Y%޶<ϰ|IB`$_aIAɤaN_w䳵[1xMx|]Y}[L^s}Fɒ( (/(މnpf@w^gIn*Ä.۶j9 "ZR}KX!b$@6H:z3QjW|^xx;wgz5сwP^A `c۫x Uyt @;ZvLNG>&NMm^z& @~@=@0`PJ@=$P/:N;q3SPkA `$d۫HđH1MtE!6@6`P@0  j2q4@C{;ddA(ǶW P(>r0 8@0( ? 8ql{8Ʊ7qLdMˮÇ/^ޡ`xǶW I3O۪! 0  ` G `O3ʴ"#Vl6LJJ5`EVؗgbOlX Y}pD6[N%c-Q>㲣5*ҚrPuV5Ѯ3yw?؏Xc*M~n-5J噲f:; =u4|(fUPL% .;()7$cNKݵ(q֕.NJL" 0 "q2#UΪ1^&<$<26Xe%41]Ы ظѴM7.ˢa#+l`Zaފv7Z]7B=!-!T)l _sЦRx3J4IMЫ{;c$.NL5L]Y7ӎp$Ӏ;d4|wDZ$d Q;LZT?)e(d\F˔+gQ>1y$uAS˦b; wzoQcfNknSݫh~}eLbtW4{&T Q -ph1J;[$c6 ϛ/Ҿbbc4uHwyi&2vm t`4QEёE2,7mdN=dG.5*6]Èoݢ҃ۏ]cSfYS+ZB4g2Ɏ&C5a;_ZDX%MED/e.GjSkrUN 5)6ӾiQ»MmT"94蓭COJ~Z$iD%7GTRєe!{ֿCRֶm=͝t#H*WUӉ)Β]54ح&)9b܂wsUp-v叡KV1w)STOzF<f]Uo>f.ĸP!g5{.\ym@';i@rK6Ysyۋ8M??[r.82+CeY9SkE@|˷n_ (8b>+3a\ ӰӞǍ7Es. d>1qK)WŤ=lZott0/Ga@[@#44 4Kk|AF꠱`AcX t.`fZ0rHYq$1htt t:\2tIt{@3j@g?BDڡ3%CA':)t#t:ŕlۘ;iCsn>V| Ti3N[; z au2@նV`GA PPQU VVV^H ~7ub}XV+*j4jIJ=`#}'VyvSA=N; K1v<8e[S=zLtd>N ';],l4l{]NmXXXc؋c<؏NƮQMƮ1O>u!l„S9!0! Z_`+iB]gqֳ(&]tgE^IlDD&v,,;,&X8,/nmƀ~i!ۦN_0}2l[-l+֝ X'y'-M}:@wT_ +0]H!5E fѴPŨr=Z0vu}^2FAa@vD:(z90ǎԃq3ErP_pX|6\Ni93sD08%Yz]A5;ns4oxRgw.f_Ųi(U&믥 $};*Y -W׋r+b>[犅b!S,dO q48mQPz>8O~t#D^i2+s%e',=K^pɕ;z8qovA'YUMݰh욻Yu7V<=ʳ<0r$n^Yu ײL,S+^/+OQ-ZZ|=M7W5\}R&Y['37J&FCu\3駖 uT+jP c yLbܵvC<zA .hhN"xQ\{'+/Ig@(Z5t#-xVwYtY #Hr훪mc)*^ͦ2j6Iolr PɟaϞڿb5P2u鋧$mE -v?obѾj׈fcjcXUW4&[I= tciMTQtԴUj[wJv6"@vԑ&92nиn>k tz7|c#5'HW=fWM:1:λ/~VNz$#큽0U:v Oc8kݿ0Bԟ_ztD qöt ذ A,G/lțrO[1wL̕7(p/via>m A_I^)R!'|r? f9n.aӲt "0s{ ~l\6Gp>.y3[_xuS̈́WWIv{ 0Hn"8OҏL& H`V&&o0'6AXvb8_7Ҙ]p}}_~3h5˖m:zu_<VjGX{S~%/p?$;Es=K ft -?*0<Ŗ搞e:$-r"$Qf)SgՖ >c&MrSKlm?8Z/VjT8}h\ZZ#R)H2ŋEKV,j(,Zk R;R}hUIj ɵQ=R!+dVGe#iG:Nqr\8B:IpI|9_ d⮘s.r63E&En4AǾ҇xN}bIp'u4wr6\'wrE YcܫϨz {Q6Z1F1Q^uqs;ѽ TQ gQ=I0.B h%Bb|-} Ohyҧ34*kM SFݡsݡp[H= Y|cJ1S3j~M1ɴ^7(':C2R=BWnmZE`,J;:~[᜻ n .%x<1 ؤ`{'FU6Q2d7yh|TvTL <> KT`_I_wdy~14-M,?;8sN#c>g;B0P2f|ft?PϽجp&6|R8p'h~B+ oݔExpb֞|NP'[= y?8a`'''^NHeIuaJ\* ôP oG)0Bmsq&ۀpՋ\5S%qM2WW W_Wpppp spE\Xg5ql=E5qZH[->Y| ^?`J u000_0׃K 99yw4o@^]s:sl`U=g{v͏ мGyh5nVC;_  VۭvkI@al}܃##}#+#"T;$h+4pGO9Q;x C7߄n2P_ iQ6oLP%:]*Q!XfIJwe)RKbz߼_ab4l*[;IO(ْ;3d!.Sj'TZb;P%T Ic;@]HThR\FK[Z וJ +^);Q3lIrKcJ/].RnRo*"(y{n^ڶJ1ZB1W3*=$w!ҷ)ޙvk)[IdgirGxZ^̐S_b>W,, b![,}R[zS)zUUǓ>BOrn1^垞hu6rhwU* S\URrfy/ %yWE $/Cft/^ͦ7 kTȉSxEy)n\6_l⊡b`d8`J\4%.Gv]C~:u!cS<)"q7і^u8ʪu]# %C&8G˅G89;Gpi$?`4J06z$.B' RxA ?C Ũ 8q@c81h6M U*[  p2p  > Ë>ePNhm C| >$|Y H]1|\¦iR*WL]g`7  @^M@b=C +LC```",G1KW;=jW:ZDP ]"kgL5:0 <6(^W1YfzsLgv: ,hD8Ey7^Zs4 (fXh\&BI("-0<.Ǡĉ5c.*?ce{Ͻe|)L h6= P X0fؠ/0abr7 ӵ/uلfy/Ina;fpHb#k1eސ"2qTzΆ n>Ć#D;-LX߅CW@ӡ+0ijP[׈ ^E:7=j{v V  PIGiGvzQf' ⠠愦?M={O"k.cr\mL5y{W0<,Nwz1+92=Li'{x ,n *VANbD68bD1@7\ &ӖHe* *:7:ad"n&*nx:Z;j _7 IItx]. BOv&X )@383ӣRnإyը @9Z­z ot$%Gs}T?]|䋍' OOOBxEּ$\%("&A0TR JO J/~ J聥DL%J0``*kHSE ќk@B+ן^_nB|xce fŪxt|jZRz.T*71/jZ}b[*BD,r!( X%^䱰 I} *G 'r5xԺmymwKߡ|dDpl )g2Dޏ_+bdU‚1_xZ^]^MHTs3V`/8\|63Et2;;gƽ(x/N]d&c(3StsŜCboy'e Evj=#E4lW>6yL.DW1OkN;yO3,hַ7Ktu Jy9@ } Csm54j*UphYc}`mk{cx6ڎZ x .㫆UwU$^h2DԸ,iL2K##wbq42͖ G?750p;jK9L>9C}3)' dٌnR `N0L7p]ClJʏ"a4s<1/(`)O L)ipqV 1]sF}?H# `.r @E#qC/ ݇.Q zCFχIvK 64]/b t:'O߶<>zx()J7CPKإ7Jz55Υ;?Iw^<<ׇ;`h/QtYℕQBb!嫣Sy'(u۱K5J89ss1c҂_yvKgEҢ}yCX7" s.)>lhigh&hjRmA2PpCd^*怒b_(SIx9D`h|8.-md+Ox 4IK h0rr)%œ>'O nX*w2i{@OvtȎg)xz1(Pw-w3 BMyv" -> qy硅G[_6t#]qNIqr'geꤷ޶/^Ïhn~%xI= Rz[Tp\GayQJA{/&t}#*]C<1Nyк:^9}|:e!1⑶+a~2>/AxNI-cʑIĄ3\qE z]2o^!+k"h[|4B J=rܠǍ(Ft p[:{HP$PQ0y8h2N}0M-ZDj-ׄДG 8/3I7 ^ZRDBIdPTbEʎ#;D.E(4K"b;N9/_'\R//b|X̒ Jx{3f7}>_0+X>|2’f,FhoҾeG[[C2ax"|U>_1!"-<`.1G;{͐0cѾX,s(/)=. 'ԡ3rV2>޷J{!fwm J`0dizc446G=u5fG㭃Hx&iXsWR,^5k:NHZpudLӼй)2(DTMbA7X/q ')B>(YSrt bcMV<%Ӹ'$9&֭!3aXh`-鏆f$-zmc %FG[GaEq ² FthLkl1zzH" #<0F1MĂ334d? %VM LӈGJNc,:b"FIGԓ FcF?8 1#1dq_@q&d9 f$nꁪiQ)G#cԀ 3H|aP:=Vޒ1=Q7`#PtF0H1C!iP3k"M$ct#h6n6n:v]$cІ #$ƨZRtx߱HkCnVcg_o18u`C]njǏ=һŠ9WJzƱ5cd;eR5QcP"1:::BEK4vůGfrC̵8O*Gqm<y-) ǦR1*-)vQr)gR9#>etjJB+#D02vJ[Ko҂ C0; ۓ뾹X@1v-.e܃eѰڏ`Lw.++^Դa%b֎ zj.R5Rеw09(VSgJ\fYJIsnԥ%<].m~L-k&aO8:.FktͩyM uv&fJ8sk'ֳUp9RR8p[;w\1y7˥~f}Lǽy\q|4-BOpk5fhbFvF cs4Vش&.o8=ޔR{]O5shvpkrYM\x;c.֮#e_+4"|k]vD>A;; R4]N7Y=֔Mz}s_޷^St=_zwoe~%M}=yiM&SsysU~}|բm;I䆣:{p}ҟڹRw7^\<=OO]w>z6OI,֞q.LC*. |$;|o9֮z0v.^OEc+i\ŕoqdx_No~ޮ,y%J;\J=I1O~-{R잌*z-V{nq'3^:lm}ƞtbNmZ=/ ^^|{6^zg0BN5Kͱ%}3 /%nčg,fۘ<ʲuqgڕmre;7̐U${iNWu۬+IYRotjmuZhl4EӁSPt$4|9s2'ܺ<>B^m"qKɕ"1A2gg<*VrK|3Շ-ݗ+xfb})Y"x{hba/xyknwV]W48tU<ۭ)Cqv8  qp+7;!3BIgсHPfv鴏FsGttL89֣×*j'*+79X*oVߤ16ϟ?>ߧk\|~4o 4$sbP2gu4홻ma4`x8Ӽ^)pEv ^gE|º|Ɋvʟ&DBmaN@2,2-_d 'vDm+ԒT R#9)6^v0K6og Xdq(VtֲMWZ;).βH {hJ4LCZbϋUst]bϗgrXaAbR[ B; 9\3TG2壴G .`۽zEK"V$ Bt/I]9=F66yrT=3w@pqwEEg5u&sUU6bs姭xs<{ޮYV`'|C ~QFɸroݡ 8_vMqgbhDBM#>rFժQ3NF``P7[GCј17`¸m$N;2 $qSi ǂTOm#gOL $JFP4n-U.|%-hㅳ~. kʩ,Z󭯦 hY\ j)}_byuB{Gc3F(.ڗnyrf,vsV7EG;N5a=HؤMI0ϑ[5fDU FG⡱`F/+g6tc0E\ K!1 E#`_%_8~9O]_){rv<ޮYw~ׯYD(/!~sË ^Lȵً ٽlgyE\p⽽8>knyrvy.9rϑ{s)oyrn_CC!w4Cёߪ)_Ԏ{G+2n6bCX?Cwދ ^TH꺸Ev\DTB}8"\w%sӟ69v_oKͅ.<^Y]zs#y#?oWٕpùehUPOp F "f9tx]9"@Ǧ[sG.{ܷoTmsywz]9{W{&cVXvm=]vny>oWάmFcH،$&t/YO05t^`V5u_r//UW#UѤ"~Yogi](7vVSw('>]XY_.H'W`uIj|㓙`|4.Ƀ='hqXUWk=j^N(I''2ćOjc4eLE,:΄5 w]H-Qq<'D^f4T x7-5јd>eJ;qZ8Ibg~e_,!1EO2g$ =s_,MP̉LJZcHT+}ˍd璅ƭӤ~Dù[ohTw^J(O%{qq^N8 y9yrfsE.=w%fݰQ&CrX_f$N*T)HZiDPC9܅HeLW$ޫiw2IR-ITz%)ʨ&ʪL]Uؙ SB>eOF@%.Y9!tp 0|QAKK3Bag VLalgvޛatfҟaStP?}BBl6Lr2NO.C/9W%WxyrfH-:SÞ=IM:yvJ60쯆_yi\vibk\u3R`zŤ.4vV,^9{+m}xzVuz+g6j({&5%]^)/iMYNa5yyDK^"vޮDaD]~rIk~<˸qPLA!0Χk#ƞ;g٘vxVnە3(7;dg/'6yyٙyٙy呝i.ٙϗ+vO[rZXؽEݹeߺޣ>;Շ6fpЪ#8uCaӶpt>r[t#|,׮S[է7~mb|>$YUoTBw|W**[[OO?$[6G--zˢ2|޲3PVQ=,:hDC{;RS߸IHnxJN#H?j}`=c zxIbK+Mss3~y4y"elb\ 3[W):RW) yMr;RYeGa:۪jCݥ"{\M\O68 D5R>U*N>,"qɻi; x1 ͗HI{tqD:AҚOI|[Ll3.~%X#s.CēN7)w D{tju ? ջPP%gBG?xzlW'Ղ+7[掰}dUq_vyBv֞J޵oG-kߓ:xˉ !/߯ iOnv.1d)BDw㛗&̃4/MHr8RK"Q(U>^Rm6QP'*xORl߃@-;5m߃4ADc+n]Ky* Ko$+ $|W9`dz#ԫ3ͼ&s>kL+c>\IP'Ȇ.f!8|&.;@^e9' P-7Yrj"S JZAӽ<ѱ~yb"KKLb%&)Y8Ka<Rw8V$XY3yq uNu% тy. 펄ƙ`4Wټnp3x*e,M/tLmYHe^f:2ӽ^f | w<^I[ކ vh׷HLΥ5y_cc2ɋȀ6cg ck7AQc޲g3=G vvRFWOHtO^|4xl T:#ylY&s fNgvꈬ^EdE`~\ʼnѨDXh@wLcHP;f,YW0\|kS| d9ԻD%}lħq]н!m~DMCw^(  8?`%uUޜus1%GV}ݘ$ӘQy}{^.uOϲߌ؜=}w=+?lݞOܾ=?s)Yv]̕ϥe뢑~F D0l# Čh`Lg)w.H F8:I' M?$ELY/AĽދ)񹊸_qeqE\/z׋^ĝgqS~ Br\/γ{ )9 S ^Br;BnrSsp]9 qA@"!!9ß*2u.Ҙ'1gNMP38sHx2e3xRsxxd'3Q/" gg {{Nj<^Ivҋ<,"OJ|#φl"OO&|$Nr66[Ð0KoœONOch i˸j_yZYx3 ŭٶ}˦ԛ k*6v*+IiLnTka;yoCq?߆h QeN[prN|3D+'ߊehaeh)iJ"Ν;OǂgL~֎p(ac? ϑ&hmhk_.EX's旍3yJ|yM:J?q[wO#4|J|*(YREʑWë=)99p7z<%>uḰΧWR= &}s[?yq|q% |gwi|]|ϗvF q;.w)h]:?fdڪufB$;<”?] [?LP\.\u#.ʧэ{/N6y`͗z0],W mi<_L3z.}O1ar$fz9뮱#]#n~wk$m5p0їf֟|> 'iOt&cҚ<$`y1_,dL-9xՓ s}l='}i:iI8y[<%3WgݦɪU̓Iߦs2ٸ0~D^5_i~Cӑ\<xtzE(_`2vîyZA(|vyȋFL/y:^4mzħrü&]0^m޵X^.-`7>çu|RL:y.}q꥟NZ#[z3{~Ǐ2vqSm02`3(4Sif$2 u]Xt҆1'V*DH"FtpH D+69oe85QiS漘V/ȏ}_/Ɵo՟=δRwzنmRq6l÷_&߿m/M)ͣ`Mf= yċ&iѤ?._w7.W]˪̣W9-))ͨr;q)%/.O1.Mx7/(yRz Pn|~?i%|R 4;ӧn^!p{~N+ 4k 4^i&}" T&vhË?^ɥ|K1{sw.sXwox|9>6;ޭ^`jxo]Nxgw/7B &^0 F\ϗvfۇ #"ѓH:m4*Wה 7v:y侞Α=Ko[I“-RBjnI6%ͦn:I{$޻ѬڼXOfo߱-]GOƺ1zk}߸ B:~,eGy+J6l|jd |q<3i-V8ws>K.9KHz02S#}izc4D{x}ztjx5} ʤ.ʊBSpF;:< JMvM@  UFkոԻ)}`ubED#X4dʎVi&bjoW|!C?O51 R<:P:v&7F1sb`,xz$A=I{j-W?8VLms&>9n0#f,2C# PTM|0N~գ^?Jj@͆$>f5cqltM`[2FG3fTEiCj0FqTP3k"M$ct#h6nV'𱮞wLb(Jyִ5}q]K;}Iv9x`j,59ftG>~qGz4窓rucAkȈ&mCLT j׻[q2::BODcgZY]jKat8h&g9Ĝ, bc`I\;Fa7Xok 5xDw縚E#{TsANZFf[-ض,U&Eql>'cl@. :K{~|d}vt3sE6E0B*ޭ0dGy@gbq(n7Sؙfmb|è39~#UX;}ꆨ E#e*F"6 ! {Ōh3|:銎ԧermu[h[t#|,)l p:V5|\}E[&M0# }Ksp] ',5$Bj– Nncw䲠6-qwKQZ :DOguOK?VҠ;.b{?$߃؛';23%g6t 5_#sYj/mr9ӷDu-w$DmEmsƱ˲B"6G;V}ܾiwYHLn43EI!]=]'SϏ۳<-Y32hv0?oI x=uq/ϭ$@ IUhtb[JN[_RrXa+iB.U&|8~P*SK}oe0Fb!uX ^:-]o$1zB.np 0&cmn3eq8[6Ø;m=1KMJUvjOk'b+'d_`?\+[;^#ֻaߛv:l a$0?N&kYf:ƻNZ,wr?oBElBZ,rC v)JIHP*]c6_}IT{f%jSxSJMSy U=g l[g"Q/++x-g=UuGeQʼ٣s7=T47%*S_PGԆ_]߽y[?38z+bc7M9ޒ}7*cWw;n 3i9ov U ϙ=Q3ņi p*kmkPx…/D /`^a%2_/gybb_| R_Vk/cފ/c^ W0ZW3_ɼV[[ǼyobƗmD۫ c~sF |#5OFJr.CӾ+/UwS2Ȝy5Ռ_k||JWϚk~>멮|-PE4菀2@ߨ~@>%2U2?77/ȋ18?wR}rwEwʽ^Z@i)gPyeY3fT:~ 'Py=yЗ9^맖y~^J!Tާg2*/Eb߇]Eˁ5 {Wkx5c_|7jxF_(|=#oy;k7RTe}E^._n}~WG|~>Jy1y}XG/ݷ.~E^?<Ρ里(ۮ3.@/"/_<-.xg+e;]EVڀ߮?wXJ]E1x?#ħk_["/PThx?uCTkxh*W9F**@5q~nr}"/OPw) /@P_(M*^2@zFn~ #T"^u~E#OV3ڱ~Fq}sT^cqIn_ڝ.y7K~ܫE^|gjxL_(|=#7eF? o\yBa^!Qy1xjEW|9Wp}Gy `WRy5ׯ{51{=7r}3#-@[wE^]c[3ȿG q}|I#/?ˇ|}?"/? @9/^kODg|VËς2@i×x~otW|e~F7yu8?ߠ-_(K~F{^_(HG^_ψ~N^ _(痚7~2ֱ~~G\_($_ψTžr~ TEo (:@onYY~>~7y/ O~)2 /+uҿr70BJog@Kj _{= }o`^!?4k|NJ@>UĶU|~߮k3a?\o@.OOLoiv[4k]c_;yorؗBv^IF^o+]\PE^~ PVË _ (w_(QٯE~_(_ψz @_È0 /uҿ#o`D |vF_ǩܨ7r~ܤY)={;ɼܷ$gߤӾAR6*!/a,T! Sr}*ȋ(پaJsq曙Wr'c.N0/ 'SQNA{]ESy?',d!|*sP>F^|5|~9.AW*!oۯ1Sy)e|/:R2_ ({E^ ZF~_J /:@Y_Ҍ~̷;&*oz?Tȋ_͈{+sb@\EہeD{4ȿq/>j@O`_ /c.Q1>|c~?M3\}ʿkEgf,sb@\E灯e2hx J rFoP--*M2vGc~8k~21?_\O*ȋ'T~ž?u?JË@P5q~ j@o0+M2pQc߿nc~[jU?j@1k^ >}J#\(!yaD^;?cOQy2=jFߟ9_ (D^ uW_ΈI\ P[.ok{<{W'ח1c*ȋPQ)W hEO3~? ow_S PE^0S#~Gf+}=F+4Ռp 쇋ŀl<yo=EZF8 hx/:@ipV* F8 ɖ5\ Pگv [ V@1 jxi)[XY;A~BsayRNTx@#/fGp/u뀯elIË&7_+e~ۀ7qQ.Qy'͌~+o;q߅;5wJwq/J^Oҿ= =ݚ{=B{B" /cU(8^1E8ov};q~ j@o0b^*M2s_c+βQ)(K\^∯‹ +y*_z?(ȋ/_/Q 7E^uN1Bߤm}43VC߸P]yo/}*?"_(%DË|-)u_Ÿ+*&@YvF3MO/ 矘cϱB\_(|yiq}?PwykxW\R~ _T@O1TËRe1*WUVE Pگq/~co ҿZ2nQ,,~hfYq>μB/Z+_DLz_DF^_Q5?ʆPE^o~9w  /- _(P\m+ȯۀ7:@Y_;yjr׷J]W.@w3^ \h|}y}ļB\< qreSRtF^??ţ\_("/P{3'hxJ'_ (OR9E)_(M~=#3T\(Kw0 P~7`(a /|PwÌGTix9P1qWS<{WjEӁ3BU *@3]E_(^E/ϧ /_򵀢1bRWgW1b P\k{Y'|T^U~^Gyz~@M\_(} e~F^wP{5/_LjCaW1q}QyǀĈ ($[1Okxi Py}-k*22W|eʟ4ׁ3b *:@oȋoPoTE{ _(;+EHË*@c F_~ :@Y_?~=#/?Ko"/%]ҿ~7`o5[;]M,s}QF^x?_E /_@_(Jk^ Pw4_LjP_ňeE^#b^?:/7WWR o~5jEo_(3 Pt*ȋggL*E2r~ ʼb/R2ח21_NܗK_PW|+e+ɯȋ2?LƗN\P./b\ K{\ P&*?̀.GaR9/?s?~*+*Հ.7al("/|s/T Eȋ}ZYEy֯dFO*\ȋb?gc%^z|-}F^~#/1="/ǀ_Έ{e~(דy_(Wc5 t<Cy1w|W_(_(ʋ4"oXcOf^aT^~@|@#/_ |5"k_"/_|-#of /o:@i-/g}e~ ]Tޭ-2x~a~Ǹ(Q*ȋ_͈q*pb@'\E#2~ʣ^:@i3/ge~Q]? o'_K&@c|o3]3I?)>Հ2;keE^pDËO@~Sa/7e7kk /57Fc}2Ov/W+5a r@ȋW]E/ե$_[V[VF?S)?%jGY{/ ZZe  !>\-z? ܲyi)Հl9~ yѿlul%ׯ]"/W/ i~+OoԌo+~M_(/+fwUR볅J| n@Oc-ۦE6 (BN^OeAU(֕] .ki>PrQN*ŀbwȋw_ ({?hx/?2@Q*c P>$e| 򨆗= e|F3?۱~B\T~_ר|}"/|-;TE P7S?倢`_3)ix@~3kϯx<8֏>ܸT#/|5#?R3/E^ZF>ZMË@P; v*y~_ؔ_9 4({8}>Qy W[5%0~)~ ]EC/eDBË+@~J?2~#Sy7Qco}/p;e~Eynkq~C}\P^y>2~ʇ5J}u8B^I()q~?"3ʿcJ\_ (5*?K_TKt~)#Q2@i߁g!ke:пSO /O(_oeUQS~‹P_‹2u}/\>_k4/W35uE^ eJ^.gnSAXQr!. ƚ}* /\WQ~PS~dTKb+ OE_/d?C\V,RFR+u/W ˁ_Ȉ+Vr @ yi%j\(\E#;|IWN@Moeҗj6ixioE˘c}P_+RF\[` }*r@YWQ7jh,;~1yi'𵌫ATzP{~/av:*s})# h_O\\Px~rW{\#bDR9ؿE^䅿r_TNq})#W0O_O\E/dD2+.?QAy /|WXK1* /a,e"NyџPg(WRyP#/Gd];~ Ϙ\P?E^QU֊kx:ȷJQT'*qn@Y_qnԬ+,+^D4%eQ\W|=y5 o*^ e~v/~1UT^E P 7Pyo7Koq;wp@YowߣYȿ+WT>>|c/> |>q> BF>Q1*%2?w?RƕSTU2?v_jrT*0ש|+?|w573>E;^俣яwe^!}/aT~QPixF??yP3S/ȋ_Ϩ9_r}  |% >M\_(ϯ\E_ΈoW߹ȋ?S ]E_o`>ׯ.1KX{ ?WJ/e\Y|#*+/^'~!RO>EjJ_2F~NنRy+ȋEcdJKms4C~\Q㧱TҿFyi- /|72ןc+ח2|c  ~62l+ž.~'%>J(Wܯ;_Ie7׷Jwȋ3A;etȋ= (__+Z70B~QGF/a8!#27Q+eOeP#/o Tne2'\E-3STNs}OE^֌ A}{+ kS s@oK5? BF?TF s@oE^ *#^G@P? r@'4 Ed< 8Wy/Y)TK|cYJ |6?QyWJ~;n߃_({W3vAhx @~/Ԝ{@|eUW:/Y߿|@iog^!|\IH囸(? k4MW3ZO*e~"/ @%νwwSy/1R=T |)O]חO y>H\_ (0uAǩ<.W2 o~MA3;Wg+q}5W|W#/| S&/E^S{r?e|ߧ52R1/#yc1J|W? /WRc8fP{rykg_(3P71N^ȯ?j U*~#csU䣪45y}*y}TUK5xh-T-.}^Œ\_ (㣵Pլ+aQPepr@^?U]E FZ @Y__(Z; ^e~4_>S._uX#/;Tq@ѿuyѿ ?^j;ׯE^o~5fKT]E*oq;U{~oWc?~Qq (jw'~K_?7Pj@cTjE/5ʍ\Pȋ_Ȉ&*7sJ@ǻȋ_͈V*O"DoOˆ맟;e~\}Sc?\?Aҿۀx/#wqo^w4o?ȟAn*Oz??ڣW=]#/|5 gUOr/Jϻȋ{5t߇c|ϦCye|Qyke"/~!Oz>^ Fj}ʋ4"7e~^?'\4W3WQy /E^F>Go}8*oz?T>ov*e"/ |=\R> FZ/7U@~5l1o oR,0r|U׿>Cߢ? "F9?K'PT*+>_~5"S {%T匕S>^U|bKeP7_([/6r}=q?_(> jxi P#[? PS _~F\sy/θkwJ~nkC\(\_(GÀr~"E|~?¼B?vU|/O?gJ~1ח~?BS_\$N#/˙^\gd_?:50_gW/WCy}k(S&@_"/2iߧ}iO/E_ F+6r@"/=A?տ7&yѿGy| %?Pkr Vۀ_(_or6yi ?Sɗwkx uU/g\hxѿUUͿq /ױP%"_> @c_)?A%O{_K%?E#tpysJ[)*F^/e|i*^47_`^!ܿrWRC#/oPs;0W\EX>8Yfǀ_7ʈ# _W'cTj@Tw_(ʓ~y$M  K JϠ,/bL*iE/egSyh#1?ϥ<yK5y}O\P.q~^ 0oq_x'κEJ^KFxg!5\f=WݬB˧'=Bbڒ#t>.#N?wHC+д,4 4H򠍺)Qwd޾qͺ 6ܵAۭC=xgv9nB ]dל3WiJcRfc>'+~#w|>u63^<}wnzfn;7/~3jC6OKTK`=j9rreM2tbޘ1ycۂϷݛry&,edj¤66H.yry^.v)MB.R7p3'G:ԛهٹ=r+N2D]d+e&tQlv&[ݭ5Te90aKߛłgFSF0ĢA8a>6!` Lp8KAa0-FWOARIĢ!׼cČFh fX0r?OxC8= U14ұ3qRxz$A=I@k4fcȀ3C0cpq@8:r:7H4U2Ӣn?SUzG(5fq֌aP:=Vޒ1=Q7`#PtF0H1C!iP3k"M$ct#h6n6n:v]$k5mp(H 8bHbzʊ%E뾎$"k% VDfd:ᦫ!>rQz^〼U:MF{~&niT0?Jt<4 !::펫ݭp\,:Yd4Uݖ{^ijF};`nj虖LvۨX`a%wRC UmNqH#._ʁwsֻJ^NZOͭ:Asx*w9Eh{uUGxNnnVS-/9ߎaL4:Q_HK 4Dy&hw::6)sg]71S464n]̐. $5{[lH4,2yWU Q^Nd<&_ujڜmUgyf3NF``B?ƌX4lXJ_m$NH &f">n}Wl9Bz# b}/+CѸ̂&Y`,PO+ո_tc.`}Xqм+d$L9F"j炴fDU FG⡱uKkyHCْu6do%^"E!?/,r|/B}o]ehW'rTckAFb~jnzπd`ȹ~f:h;'Afj6lVl_85/;^왝!gk9 K n˧nN.i+wO.rʭ+0fl 44\3]4|3]bMC a5Z훁&MaT6dv4 |E)' x֗'L2.➛H$dIV<{-'0gr^ ç'ɩsZp48G79p]uuYE2tMhKd'+,6ןi}f6O✚i<)/W+ GYFO>q1;cć`Д 8=I,eA~Zs`Sl8{}x.iXz qtXQU)Q_L`9]_l}_-R@U@TV~@r?MZ?A0}?bZaMU˸<:yTP4dY}6?7ƭ" <.BX>֦}UyH|qwrZ]w;[ԓܩQ&^`65bį/cTHO\2X8N{~4.?DZ>΋([0|ұMp eW Nuհ`䕊#}2g'K쀆kZ>W 4K6C@P呇:y7˥~7vҡi` >~2}y?}`kt k5:6˷5\"? uc讅=wxtQzzӤg5k]5iFM"}ԮDu|)K7;H lƓF?tśIa"nR-[v]+SSs9cS l%|Xg~lRc{n:h\<6]Opqi5Lq?]J)=i?K{8%n Ik2!5<opZCy&81PIqaڂAz3SǺcz k8d=eZqf6S׌D982_" 4aP/Ls ->_1{ןM=Q?&-*#LMiRoޘsIz.^~اq?JsAkA6nr149}o$٢{P֮8~q{2Oon\9EYAq^5̭}5]نmNҶI~iP @(o0{X8n?ɺqEnZkB9orɡ<˱KS6iĚfct3?V*C'osE>&$dZ ^;imf>{fVS|)u1nplf#3E}t&^Cj$[}qTQnп\Qxtpdu܆ O٦ \rI une%*2Y[ߘĤF|PdEn־cDTVgⰵBxg'./".Q۹%gvc[t["t ] ߝSoZ ;6j`yߕnT|T=UĦnQ}hO>nO>SPfI}uh}&T%ҴqT 5p<<=vpţ AinT.6Ar G.&dSG ʱRWٹ#igEӇCUf 9qgLmiK .=jN:8mLꋔp`g?OK8&T=K]}y+wq҅ kPY[O7I?:2-#m/?y5иd|y%Jn Bc|01_:J/Bֵ`WyS9HOGyN<α_jaLnL+z*&oRmƗ9ҏjGKITL=,}Ӣ?i1궈>ڟ췼Kn˿`yf{^Ğ(yx"g$t 9 QGW1?1x{o1fܞc˞CFYo^M^l{xs c{\{블y80 [$.L:J)(SҦzGRKMQf>_9c:<bۃ3h̜qdc+[ErM0u!pi h:&/Z-t: Z9JS}3P_gfܩe$2HfR{ԇPt@˺FP4X"ǩWQﷶtf)w5%>po=xf3g,Y for copies of the licenses. library(unitizer) library(fansi) unitizer_sect("term_cap_test", { tct <- term_cap_test() tct fansi_lines(LETTERS, step=6) # should only be one warning at index 1 local({ tc <- getOption('fansi.term.cap') col <- Sys.getenv('COLORTERM', unset=NA) on.exit({ options(fansi.term.cap=tc) if(is.na(col)) suppressWarnings(Sys.unsetenv("COLORTERM")) else Sys.setenv(COLORTERM=col) }) options(fansi.term.cap=NULL) suppressWarnings(Sys.unsetenv("COLORTERM")) string <- "a\033[38;2;50;50;50m" substr_ctl(c(string, ""), 1, 10) Sys.setenv(COLORTERM="truecolor") substr_ctl(c("", string), 1, 10) }) }) unitizer_sect("add_int", { fansi:::add_int(1, 1) fansi:::add_int(2^31 - 1, 1) fansi:::add_int(2^31 - 1, 0) fansi:::add_int(-2^31 + 1, 0) fansi:::add_int(-2^31 + 1, -1) }) unitizer_sect("unhandled", { # example string.0 <- c( "\033[41mhello world\033[m", "foo\033[22>m", "\033[999mbar", "baz \033[31#3m", "a\033[31k", "hello\033m world" ) unhandled_ctl(string.0) # some more interesting cases string.1 <- c( "foo\033[22>mhello\033[9999m", "a\033[31k", "hello\033m \033[180mworld \033" ) unhandled_ctl(string.1) # A malformed ESCape unhandled_ctl("hello\033\033\033[45p wor\ald") # Specifying term cap unhandled_ctl("\033[38;5;220mworld\033[m", "bright") unhandled_ctl("\033[38;2;10;20;30mworld\033[m", "bright") unhandled_ctl("\033[38;2;10;20;30mworld\033[m", "bri") unhandled_ctl("\033[38;2;10;20;30mworld\033[m", NULL) # Malformed in sequences unhandled_ctl("AB\033[34m\033]9\033\\\033[1m\033[2LCD") # Unterminated OSC consumes everything unhandled_ctl("AB\033[34m\033]9\033[1m\033[2LCD") # Non-SGR and SGR bad tokens unhandled_ctl("A\033[45#1pB\033[256pC\033[256mD") # Abruptly ending 256/truecolor unhandled_ctl("\033[38m") }) unitizer_sect("strtrim", { strtrim_ctl(" hello world", 7) strtrim_ctl("\033[42m hello world\033[m", 7) strtrim_ctl(" hello\nworld", 7) strtrim_ctl("\033[42m hello\nworld\033[m", 7) strtrim_ctl("\nhello\nworld", 7) strtrim_ctl("\033[42m\nhello\nworld\033[m", 7) strtrim_ctl("\thello\rworld foobar", 12) strtrim_ctl("\033[42m\thello\rworld\033[m foobar", 12) strtrim2_ctl("\033[42m\thello world\033[m foobar", 12, tabs.as.spaces=TRUE) strtrim_sgr("\033[42m\the\allo world\033[m foobar", 12, warn=FALSE) strtrim2_sgr( "\033[42m\the\allo world\033[m foobar", 12, tabs.as.spaces=TRUE, warn=FALSE, tab.stops=2 ) # NA handling identical( strtrim_ctl(c("AB", NA_character_, "CD"), 1), strtrim(c("AB", NA_character_, "CD"), 1) ) strtrim_ctl(c("AB", NA_character_, "CD"), 1, carry=TRUE) # bad args hello2.0 <- "\033[42m\thello world\033[m foobar" strtrim_ctl(1:3, width=10) strtrim_ctl(hello2.0, width="35") strtrim_ctl(hello2.0, width=NA_integer_) strtrim_ctl(hello2.0, width=10, warn=NULL) strtrim_ctl(hello2.0, width=10, ctl=0) strtrim_ctl(hello2.0, width=10, ctl='bananas') strtrim2_ctl(1:3, width=10) strtrim2_ctl(hello2.0, width="35") strtrim2_ctl(hello2.0, width=NA_integer_) strtrim2_ctl(hello2.0, width=10, warn=NULL) strtrim2_ctl(hello2.0, width=10, tabs.as.spaces=NA) strtrim2_ctl(hello2.0, width=10, tabs.as.spaces=1:3) strtrim2_ctl(hello2.0, width=10, tab.stops=-(1:3)) strtrim2_ctl(hello2.0, width=10, tab.stops=0) strtrim2_ctl(hello2.0, width=10, ctl=0) strtrim2_ctl(hello2.0, width=10, ctl='bananas') }) unitizer_sect("enc check", { x <- y <- "He\x9f" Encoding(x) <- "latin1" fansi:::check_enc(x, 1) Encoding(y) <- "bytes" fansi:::check_enc(y, 1) fansi:::check_enc("hello", 1) }) unitizer_sect("what as int", { fansi:::ctl_as_int(c(1, 2, 3, 4, 5)) fansi:::ctl_as_int(c(2, 3, 4, 5)) fansi:::ctl_as_int(c(1, 2, 3, 9)) fansi:::ctl_as_int(c(2, 3, 9)) }) unitizer_sect("HTML helper", { html_esc(character()) html_esc(1:10) html_esc(NA_character_) html_esc("") html_esc("ow&wo") html_esc(c("hello", "wors", NA, "")) html_esc(c("he'l\"lo", "wors", NA, "")) html_esc("<<<<") html_esc("<123hello>") txt <- c( "day > night", "hello world" ) html_code_block(character()) html_code_block(txt) html_code_block(1:10) html_code_block(txt, class=c('not-fansi', 'plain')) html_code_block(txt, class=NULL) html_esc(c("h&e'l\"lo", "wors", NA, ""), "<>") html_esc(c("h&e'l\"lo", "wors", NA, ""), "><") html_esc(c("h&e'l\"lo", "wors", NA, ""), "<&>") html_esc(c("h&e'l\"lo", "wors", NA, ""), "'<&>") html_esc(c("h&e'l\"lo", "wors", NA, ""), "'<&>\"") html_esc(c("h&e'l\"lo", "wors", NA, ""), "'&>\"<") html_esc(c("h&e'l\"lo", "wors", NA, ""), "") ## repeated chars okay html_esc(c("h&e'l\"lo", "wors", NA, ""), "'<&>\"<") ## Errors html_esc(c("h&e'l\"lo", "wors", NA, ""), character()) html_esc(c("h&e'l\"lo", "wors", NA, ""), NA_character_) html_esc(c("h&e'l\"lo", "wors", NA, ""), 1:5) html_esc(c("h&e'l\"lo", "wors", NA, ""), "'<&><") html_esc(c("h&e'l\"lo", "wors", NA, ""), "'x><") }) unitizer_sect("hooks", { h.1 <- list( set=function(...) cat("Set hooks: ", names(list(...)), "\n"), get=function(...) function(...) "old.hook" ) h.2 <- list( set=function(...) cat("Set hooks: ", names(list(...)), "\n"), get=function(...) "not a function" ) h.3 <- list( set=function(...) cat("Set hooks: ", names(list(...)), "\n"), get=function(...) stop("error in get") ) h.4 <- list( set=function(...) stop("error in set"), get=function(...) function() "old.hook" ) ## Works set_knit_hooks(list(1, 2)) set_knit_hooks(list(function() NULL, function() NULL)) res1 <- set_knit_hooks(h.1, .test=TRUE) res1[['new.hooks']][['output']]("hello") res1[['new.hooks']][['output']]("hello\033[31m world") ## split.nl works res1a <- set_knit_hooks(h.1, split.nl=TRUE, .test=TRUE) res1a[['new.hooks']][['output']]("hello\033[31m wo\nrld") p.f.2 <- function(x, y) NULL p.f.3 <- function(x, class) sprintf("new proc fun, '%s'", class) p.f.4 <- function(x, class) stop("new proc fun") ## bad inputs set_knit_hooks(h.1, split.nl='banana') set_knit_hooks(h.1, proc.fun=p.f.2) set_knit_hooks(h.1, which="hello") set_knit_hooks(h.1, which=NULL) ## works res2 <- set_knit_hooks( h.1, which=c('output', 'message'), class=c('f-output', 'f-message'), proc.fun=p.f.3, .test=TRUE ) res2[['new.hooks']][['message']]("hello") res2[['new.hooks']][['message']]("hello\033[31m world") res2[['new.hooks']][['output']]("hello\033[31m world") ## error in proc.fun res3 <- set_knit_hooks( h.1, which=c('message', 'warning'), proc.fun=p.f.4, .test=TRUE ) res3[['new.hooks']][['warning']]("hello") res3[['new.hooks']][['warning']]("hello\033[31mworld") ## hook errors set_knit_hooks(h.2) set_knit_hooks(h.3) set_knit_hooks(h.4) ## Other errors set_knit_hooks(h.1, style=NULL) set_knit_hooks(h.1, class=1:10) set_knit_hooks(h.1, class=letters) set_knit_hooks(h.1, which=c('output', 'message', 'output')) }) unitizer_sect("output funs", { fansi_lines(1:3) fansi_lines(1:3, step='hello') capture.output(fwl("\033[43mhello")) }) unitizer_sect("validation", { fansi:::VAL_IN_ENV(booboo="error") }) unitizer_sect("unicode version", { grepl("^([0-9]+)?(\\.[0-9])*$", fansi_unicode_version()) }) fansi/tests/unitizer/wrap.R0000644000176200001440000003505414533476156015506 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. library(unitizer) library(fansi) unitizer_sect("Basic wrap", { # We do not want to use `base::strwrap` because it triggers the pcre valgrind # error on heap allocations (this is not a fansi problem) hello.0 <- "hello world this is a lovely day" # identical(strwrap_ctl(hello.0, width=10), strwrap(hello.0, width=10)) strwrap_ctl(hello.0, width=10) hello.1 <- "hello world this is. a lovely day." # identical(strwrap_ctl(hello.1, width=10), strwrap(hello.1, width=10)) strwrap_ctl(hello.1, width=10) hello.2 <- "hello\rworld\rthis is. a lovely day." # identical(strwrap(hello.2, width=10), strwrap_ctl(hello.2, width=10)) strwrap_ctl(hello.2, width=10) hello.3 <- "hello\rworld\nthis is. a lovely\n day." # identical(strwrap(hello.3, width=10), strwrap_ctl(hello.3, width=10)) strwrap_ctl(hello.3, width=10) hello.4 <- " hello world this is a lovely day." # identical(strwrap(hello.4, width=10), strwrap_ctl(hello.4, width=10)) strwrap_ctl(hello.4, width=10) hello.5 <- "hello.\n\n\nworld" # identical(strwrap(hello.5, width=10), strwrap_ctl(hello.5, width=10)) strwrap_ctl(hello.5, width=10) hello.5a <- "hello.\n \n \nworld" # identical(strwrap(hello.5a, width=10), strwrap_ctl(hello.5a, width=10)) strwrap_ctl(hello.5a, width=10) # special preserve of double space hello.6a <- 'hello." there' # identical(strwrap(hello.6a, width=40), strwrap_ctl(hello.6a, width=40)) strwrap_ctl(hello.6a, width=40) hello.6b <- 'hello.\' there' # identical(strwrap(hello.6b, width=40), strwrap_ctl(hello.6b, width=40)) strwrap_ctl(hello.6b, width=40) hello.6c <- 'hello.) there' # identical(strwrap(hello.6c, width=40), strwrap_ctl(hello.6c, width=40)) strwrap_ctl(hello.6c, width=40) }) unitizer_sect("Basic Ansi", { hello2.0 <- paste0("hello ", red, "world ", grn.bg, " this is a lovely", end, "day.") strwrap_ctl(hello2.0, 10) # identical( # strwrap_ctl(strip_ctl(hello2.0, "sgr"), 10), # strwrap(strip_ctl(hello2.0, "sgr"), 10) # ) strwrap_ctl(strip_ctl(hello2.0, "sgr"), 10) # turn off tag generic hello2.1 <- paste0("hello \033[41mworld\033[m how are you today") hello2.2 <- paste0("hello \033[41mworld\033[0m how are you today") strwrap_ctl(hello2.1, 15) # Specific turn off tags - turn off bold and faint hello.bold.faint <- paste0( "hello \033[1mbolded once upon a time\033[22m ", "normal \033[2mfainting in faintness oh no\033[22m normal" ) strwrap_ctl(hello.bold.faint, 10) # Specific turn off tags - blinking hello.blinky <- paste0( "hello \033[5mbliking slowly oh my\033[25m ", "normal \033[6mblinking quickly oh my\033[25m normal" ) strwrap_ctl(hello.blinky, 10) strwrap_ctl(hello.blinky, 10, terminate=FALSE) # simplify hello2.3 <- c(hello2.1, hello2.2) strwrap_ctl(hello2.3, 10, simplify=FALSE) strwrap2_ctl(hello2.3, 10, simplify=FALSE) # closed at end strwrap_ctl("aliquip \033[31mex ea commodo consequat\033[0m\n", 25) }) unitizer_sect("Long Wrap", { # wrap.nrm <- strwrap(strip_ctl(lorem.r.thanks, "sgr"), 40) wrap.csi <- strwrap_ctl(lorem.r.thanks, 40) # # this would take forever under valgrind # identical( # strwrap(strip_ctl(lorem.r.thanks, "sgr"), 40), # strip_ctl(strwrap_ctl(lorem.r.thanks, 40), "sgr") # ) # If this changes run the `identical` check above! nchar(strip_ctl(wrap.csi, "sgr")) # If this changes run the `identical` check above! nchar(wrap.csi) }) unitizer_sect("Other Escapes", { strwrap_ctl("hello \033kworld yohoo", 12) strwrap_ctl("hello \033\nworld yohoo", 12) # c0 escapes should be treated as zero width c0 <- "hello\x1F\x1F\x1F\x1F\x1F\x1F world yohoo" Encoding(c0) <- "UTF-8" strwrap_ctl(c0, 12) # Various different types of warnings strwrap_ctl("hello \033[999mworld", 6) strwrap_ctl("hello \033[31#31mworld", 6) strwrap_ctl("hello \033[999nworld", 6) strwrap_ctl("hello \033[999mworld", 6, warn=FALSE) strwrap_ctl("hello \033[31#31mworld", 6, warn=FALSE) strwrap_ctl("hello \033[999nworld", 6, warn=FALSE) }) unitizer_sect("prefix / initial simple", { # a version of lorem with paragraphs lorem.sentence <- unlist(strsplit_ctl(lorem, "[.]\\K ", perl=TRUE)) lorem.sentence <- gsub(",", ",\n", lorem.sentence, fixed=TRUE) lorem.para <- c( paste0(lorem.sentence[1:2], collapse="\n\n"), paste0(lorem.sentence[3:4], collapse="\n\t\n\t \n") ) # identical( # strwrap_ctl(lorem.para, indent=2), strwrap(lorem.para, indent=2) # ) # identical( # strwrap_ctl(lorem.para, exdent=2), strwrap(lorem.para, exdent=2) # ) # identical( # strwrap_ctl(lorem.para, indent=4, exdent=2), # strwrap(lorem.para, indent=4, exdent=2) # ) strwrap_ctl(lorem.para, indent=2) strwrap_ctl(lorem.para, exdent=2) strwrap_ctl(lorem.para, indent=4, exdent=2) }) unitizer_sect("prefix / initial with ESC", { pre <- "\033[32m+ \033[0m" ini <- "\033[33m> \033[0m" hello.8a <- "hello world yohoo" wrap.csi.2 <- strwrap_ctl(hello.8a, 14, prefix=pre, initial=ini) wrap.csi.2 # wrap.nrm.2 <- strwrap(hello.8a, 14, prefix="+ ", initial="> ") # identical(strip_ctl(wrap.csi.2, "sgr"), wrap.nrm.2) hello.8b <- c(hello.8a, "oh my this has 2 elements") wrap.csi.3 <- strwrap_ctl(hello.8b, 14, prefix=pre, initial=ini) wrap.csi.3 # wrap.nrm.3 <- strwrap(hello.8b, 14, prefix="+ ", initial="> ") # identical(strip_ctl(wrap.csi.3, "sgr"), wrap.nrm.3) }) unitizer_sect("wrap2", { # Examples hello.9a <- "hello\t\033[41mred\033[49m\tworld" strwrap2_ctl(hello.9a, 12) strwrap2_ctl(hello.9a, 12, tabs.as.spaces=TRUE) strwrap2_ctl(hello.9a, 13, tabs.as.spaces=TRUE) strwrap2_ctl(hello.9a, 12, tabs.as.spaces=TRUE, tab.stops=c(6, 12)) r.thanks <- lorem.r.thanks.2 ## Generate colors from the 256 color palette bg <- ceiling(seq_along(r.thanks) / length(r.thanks) * 215) + 16 fg <- ifelse((((bg - 16) %/% 18) %% 2), 30, 37) tpl <- "\033[%d;48;5;%dm%s\033[49m" ## Apply colors to strings and collapse nz <- nzchar(r.thanks) r.thanks[nz] <- sprintf(tpl, fg[nz], bg[nz], r.thanks[nz]) r.col <- paste0(r.thanks, collapse="\n") ## Wrap and display r.wrap <- strwrap2_ctl(r.col, 35, pad.end=" ", wrap.always=TRUE) # writeLines(c("", paste(" ", r.wrap[1:27], " ", r.wrap[28:54]), "")) r.wrap ## Pad paragraph break line when it is colored hello.9b <- "\033[41mhello\n\nworld." strwrap2_ctl(hello.9b, 8, pad.end=" ") strwrap2_ctl(hello.9b, 8, pad.end=0) ## Leading spaces hello.9b <- " \033[41mhello world." strwrap2_ctl(hello.9b, 8, strip.spaces=FALSE) hello.9c <- "\033[41m hello world." ## complex white-space ws.0 <- "hello worldza" ws.1 <- "hello \t worldza" ws.2 <- "hello \n worldza" strwrap2_sgr(ws.0, 7, strip.spaces=FALSE) strwrap2_sgr(ws.0, 7, strip.spaces=FALSE, wrap.always=TRUE) strwrap2_sgr(ws.0, 6, strip.spaces=FALSE) strwrap2_sgr(ws.0, 6, strip.spaces=FALSE, wrap.always=TRUE) strwrap2_sgr(ws.1, 7, strip.spaces=FALSE) strwrap2_sgr(ws.1, 7, strip.spaces=FALSE, wrap.always=TRUE) strwrap2_sgr(ws.1, 6, strip.spaces=FALSE) strwrap2_sgr(ws.1, 6, strip.spaces=FALSE, wrap.always=TRUE) strwrap2_sgr(" hello world ", 7, strip.spaces=FALSE) strwrap2_sgr("\thello\tworld\t", 7, strip.spaces=FALSE) strwrap2_sgr("\nhello\nworld\n", 7, strip.spaces=FALSE) }) unitizer_sect("_sgr", { hello.9e <- c( "hello\t\033[91mworld\033[m\t\033[38;2;31;42;4mworld boohaythere", "asdfasdfasdfasdf" ) ## primarily testing that all args are used correctly. strwrap_sgr(hello.9e, 12, term.cap='256') hello.9f <- "hello \033[91mworld boohaythereyowza" strwrap2_sgr( hello.9f, 12, prefix="++", initial=">>", wrap.always=TRUE, pad.end="~", strip.spaces=FALSE ) strwrap2_sgr( hello.9e, 12, tabs.as.spaces=TRUE, tab.stops=c(6, 12), warn=FALSE, indent=2, exdent=1, prefix="++", initial=">>", term.cap="256", wrap.always=TRUE, simplify=FALSE, pad.end="~", strip.spaces=FALSE ) strwrap_sgr( hello.9e, 12, warn=FALSE, indent=2, exdent=1, prefix="++", initial=">>", term.cap="256", simplify=FALSE ) strwrap_sgr( hello.9e, 12, indent=2, exdent=1, prefix="++", initial=">>", term.cap="256", simplify=FALSE ) }) unitizer_sect("long words", { hello.long <- "\033[31mhelloworld\033[mlongword" strwrap_ctl(hello.long, 8) strwrap2_ctl(hello.long, 8, wrap.always=TRUE) }) unitizer_sect("rare escapes", { hello.border <- c( "hello \033[51mworld woohoo\033[54m woohoo", "hello \033[52mworld woohoo\033[54m woohoo", "hello \033[53mworld woohoo\033[55m woohoo" ) strwrap_ctl(hello.border, 12) strwrap_ctl(hello.border, 12, terminate=FALSE) hello.ideogram <- c( "hello \033[60mworld woohoo\033[65m woohoo", "hello \033[61mworld woohoo\033[65m woohoo", "hello \033[62mworld woohoo\033[65m woohoo", "hello \033[63mworld woohoo\033[65m woohoo", "hello \033[64mworld woohoo\033[65m woohoo" ) strwrap_ctl(hello.ideogram, 12, terminate=FALSE) hello.font <- c( "hello \033[10mworld woohoo\033[10m woohoo", "hello \033[11mworld woohoo\033[10m woohoo", "hello \033[12mworld woohoo\033[10m woohoo", "hello \033[13mworld woohoo\033[10m woohoo", "hello \033[14mworld woohoo\033[10m woohoo", "hello \033[15mworld woohoo\033[10m woohoo", "hello \033[16mworld woohoo\033[10m woohoo", "hello \033[17mworld woohoo\033[10m woohoo", "hello \033[18mworld woohoo\033[10m woohoo", "hello \033[19mworld woohoo\033[10m woohoo" ) strwrap_ctl(hello.font, 12, terminate=FALSE) }) unitizer_sect("term cap and bright", { # default term cap should recognize bright and 256, but not true color. getOption('fansi.term.cap', dflt_term_cap()) hello.bright <- '\033[42mhello \033[103mworld wowza\033[49m' strwrap_ctl(hello.bright, 13) strwrap_ctl(hello.bright, 13, term.cap=character()) hello.255 <- '\033[42mhello \033[48;5;47mworld wowza\033[49m' strwrap_ctl(hello.255, 13) strwrap_ctl(hello.255, 13, term.cap=character()) hello.tru <- '\033[42mhello \033[48;2;7;41;4mworld wowza\033[m' strwrap_ctl(hello.tru, 13, term.cap='truecolor') strwrap_ctl(hello.tru, 13) }) unitizer_sect("corner cases", { strwrap_ctl("a", -1) strwrap2_ctl("a", -1) strwrap2_ctl("a", Inf) strwrap2_ctl("a", NA_real_) strwrap2_ctl("a", NA_integer_) strwrap2_ctl("a", -1, wrap.always=TRUE) strwrap2_ctl("a", 0, wrap.always=TRUE) strwrap2_ctl("a", 1, wrap.always=TRUE) tryCatch( strwrap_ctl("hello world", 6, prefix="\033p"), warning=conditionMessage ) suppressWarnings(strwrap_ctl("hello world", 6, prefix="\033p")) # Invalid inputs (checks in C) tryCatch( strwrap2_ctl("hello world", 8, pad.end='\t'), error=conditionMessage ) tryCatch( strwrap2_ctl("hello world", 8, pad.end=' '), error=conditionMessage ) strwrap2_ctl("goodbye moon", 8, indent=5, prefix='> hello >') strwrap2_ctl( "goodbye moon", 16, indent=5, prefix='> hello >', wrap.always=TRUE ) tryCatch( strwrap2_ctl( "goodbye moon", 15, indent=5, prefix='> hello >', wrap.always=TRUE ), error=conditionMessage ) ## Test mixing of SGR with non SGR escapes; non-SGR should not be ## dropped, and _trailing_ SGR should be dropped. strwrap_ctl("hello world\033[31m\033A", 12) strwrap_ctl("hello world\033A\033[31m", 12) # Islanded SGR escape sequence strwrap_ctl("hello \033[44m world", 5) strwrap_ctl("hello \033[44m world", 6) strwrap_ctl("hello \033[44m world", 5, terminate=FALSE) strwrap_ctl("hello \033[44m world", 6, terminate=FALSE) strwrap_ctl("hello\n\033[44m\nworld", 5) strwrap_ctl("hello \n\033[44m\n world", 5) strwrap_ctl("hello \n \033[44m\n world", 5) strwrap_ctl("hello \n \n\033[44mworld", 5) strwrap_ctl("hello \n \n\033[44m world", 5) strwrap_ctl("hello \n \n\033[44m\nworld", 5) strwrap_ctl("hello \033[44m\n\n world", 5) strwrap("hello \n\n world", 5) ## Trailing SGR followed by word break strwrap_ctl("\033[33mAB\033[44m CD", 3) ## New paragraph with wrap.always and trailing SGR strwrap2_ctl("AB\033[44m\n\nCD", 3, wrap.always=TRUE) strwrap2_ctl("AB\033[44m\n\nCD", 3, wrap.always=TRUE, pad.end="#") strwrap2_ctl("AB\033[44m\n\nCD", 3, wrap.always=TRUE, terminate=FALSE) ## Don't omit trail SGR when there is padding strwrap2_ctl("AB\033[44m CD", 4, pad.end="#") strwrap2_ctl("AB\033[44m CD", 3, pad.end="#") ## Combine Leading SGR without stripping spaces strwrap2_sgr("\033[43mAB \033[34mCD", strip.spaces=FALSE, 4) ## Nothing bug sgrs strwrap_ctl("\033[31m\033[43m", 5) ## Hard wrap with trailing SGR strwrap2_ctl("a\033[31mb", 2, wrap.always = TRUE) ## Correctly strip trailing space strwrap_ctl("A \033[31mB\033[39m", 3) ## Don't double warn w/ leading strip strwrap2_ctl("\033[35phello \033[35p world", 5, strip.spaces=FALSE) ## NA treatment identical( strwrap(c(NA, "a b"), 4, prefix=">"), strwrap_ctl(c(NA, "a b"), 4, prefix=">") ) identical(strwrap("a b", 4, prefix=NA), strwrap_ctl("a b", 4, prefix=NA)) }) unitizer_sect("bad inputs", { strwrap_ctl(1:3) strwrap_ctl(hello2.0, width="35") strwrap_ctl(hello2.0, width=NA_integer_) strwrap_ctl(hello2.0, indent=NA_integer_) strwrap_ctl(hello2.0, indent=-3) strwrap_ctl(hello2.0, exdent=-3) strwrap_ctl(hello2.0, exdent=1:3) strwrap_ctl(hello2.0, prefix=1:3) strwrap_ctl(hello2.0, initial=1:3) strwrap_ctl(hello2.0, warn=NULL) strwrap_ctl(hello2.0, term.cap=1:3) strwrap_ctl(hello2.0, term.cap="bananas") strwrap_ctl(hello2.0, ctl=1:3) strwrap_ctl(hello2.0, ctl="bananas") strwrap2_ctl(hello2.0, wrap.always=1:3) strwrap2_ctl(hello2.0, wrap.always=NA) strwrap2_ctl(hello2.0, tabs.as.spaces=NA) strwrap2_ctl(hello2.0, tabs.as.spaces=1) strwrap2_ctl(hello2.0, tab.stops=-(1:3)) strwrap2_ctl(hello2.0, tab.stops=0) strwrap2_ctl(hello2.0, strip.spaces=1:3) strwrap2_ctl(hello2.0, tabs.as.spaces=TRUE, strip.spaces=TRUE) strwrap2_ctl(hello2.0, pad.end=letters) bytes <- "\xf0\xe3" Encoding(bytes) <- "bytes" strwrap_ctl(hello2.0, prefix=bytes) strwrap_ctl(hello2.0, initial=bytes) strwrap2_ctl(hello2.0, pad.end=bytes) strwrap_ctl(c(hello2.0, bytes)) }) fansi/tests/unitizer/normalize.R0000644000176200001440000000746114533476156016536 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. library(fansi) unitizer_sect("no expansion", { normalize_state("A\033[31mB") normalize_state("\033[31mAB") normalize_state("AB\033[31m") normalize_state(c("A\033[31mB", "AB")) normalize_state(c("\033[31mAB", "AB")) normalize_state(c("AB\033[31m", "AB")) }) unitizer_sect("simple expansion", { normalize_state(c("A\033[31;42mB", "AB")) normalize_state(c("\033[31;42mAB", "AB")) normalize_state(c("AB\033[31;42m", "AB")) normalize_state(c("A\033[31;42mB", "A\033[39;4mB")) normalize_state(c("A\033[31;42mB", "\033[39;4mAB")) normalize_state(c("AB\033[31;42m", "A\033[39;4mB")) normalize_state(c("AB\033[31;42m", "A\033[0;4mB")) normalize_state(c("AB\033[31;42m", "AB\033[0;4m")) normalize_state(c("AB\033[31;42m", "\033[0;4mAB")) # NA carry normalize_state(c("AB\033[31;42m", NA, "\033[0;4mAB")) normalize_state(c("AB\033[31;42m", NA, "\033[0;4mAB"), carry=TRUE) }) unitizer_sect("superflous codes", { normalize_state(c("A\033[31;44;38;5;226;36mBC\033[mD")) normalize_state(c("A\033[31;44;38;5;226;36m\033[0mBCD")) }) unitizer_sect("broad code test", { normalize_state(c("A\033[33;44mB\033[1;3;4mCD\033[mE")) normalize_state( "A\033[33;44mB\033[1;2;3;4;5;6;7;8;9;11;21;26;51;52;53;60;61;62;63;64mC\033[m" ) ## Are we somehow producing bad SGR (we did once) unhandled_ctl( normalize_state( "A\033[33;44mB\033[1;2;3;4;5;6;7;8;9;11;21;26;51;52;53;60;61;62;63;64mC\033[m" ) ) normalize_state( "A\033[33;44mB\033[1;2;3;4;5;6;7;8;9;11;21;26;51;52;53;60;61;62;63;64m\033[mC" ) normalize_state( "A\033[33;44mB\033[1;2;3;4;5;6;7;8;9;11;21;26;51;52;53;60;61;62;63;64mC\033[mD" ) }) unitizer_sect("errors and warnings", { normalize_state(list(1, 2, 3)) x <- c("A\033[38;2;100;150;3;36mBC\033[mD") ## warning, and also note 100 is _not_ written as bright not supported normalize_state(x, term.cap=c('old')) normalize_state(x, term.cap=c('bright', 'old')) ## '36' just overwrites all previous codes, but still get warning normalize_state(x, term.cap=character()) normalize_state(x, term.cap=c('bright')) ## no warning normalize_state(x, term.cap=c('bright', '256', 'truecolor')) substr_ctl(x, 1, 2, normalize="yeah baby") substr_ctl(x, 1, 2, normalize=NA) }) unitizer_sect("in functions", { string1 <- "hello \033[33;44mblue world" string2 <- "\033[4;1mgoodbye\033[7m white \033[mmoon" string3 <- c(string1, string2) strwrap_ctl(string1, 11, normalize=TRUE) strwrap_ctl(string2, 11, normalize=TRUE) strwrap_ctl(string3, 11, normalize=TRUE) strwrap_ctl(string3, 11, normalize=TRUE, simplify=FALSE) strwrap2_ctl(string3, 11, normalize=TRUE, pad.end=" ") strwrap_sgr(string3, 11, normalize=TRUE) strwrap2_sgr(string3, 11, normalize=TRUE, pad.end=" ") strtrim_sgr(string3, 8, normalize=TRUE); strtrim_sgr(string3, 8, normalize=TRUE); substr_ctl("\033[33;44mhello\033[m world", 3, 8, normalize=TRUE) substr2_ctl("\033[33;44mhello\033[m world", 3, 8, normalize=TRUE) substr_sgr("\033[33;44mhello\033[m world", 3, 8, normalize=TRUE) substr2_sgr("\033[33;44mhello\033[m world", 3, 8, normalize=TRUE) substr_ctl(string3, c(3, 3), c(8, 15), normalize=TRUE) strsplit_ctl(string3, " ", normalize=TRUE) }) fansi/tests/unitizer/strsplit.unitizer/0000755000176200001440000000000014213626056020126 5ustar liggesusersfansi/tests/unitizer/strsplit.unitizer/data.rds0000644000176200001440000001576714213626056021571 0ustar liggesusers]kwܸy7_8RVnvjmQ:vm 4ØCΒJƽ4mMzg3گڞKO)$#<923! y%$` C `=Ao9-. Rc3h _"Ψ g;߷Lf6.MdUȪ繞H&Hu1+ MyBJ~KCRf?Cl-;NرldnEڭnn}>oӡ3r%7m+062ߓ4,=&}#_#"Uΰ(62q\:$/=ylLrRU$w`!5|+#mvGݨAkjt-' Mdzƅ#;0n(\vkaɁ4+zi< # j*8RŴmߨ,9[ :TL)d;CI1(`e0 d*<K_gj5X3ۘ/QO ֘A&is⭫Npu[Ays٥Yv$ ( uvzh~c$ۤHJ|lPrkKC1N"BM@Jbw z}'$zlN+94d5I8:R=㹻Ope;I0b%ajLBI(*) Qp8 '$Um=ۛ 6+Fv,!)Cȶ]z64\ZCR=WUF9 s Yzgn¥E?ܪmӷ}α_8v!Ѿ <@wy3vϵE\5=rjVˡR7=)bCN@P¢ʭ$Sw=,'do*`PGw'%7Ai;mUUAk@B:2Ύ$Ejjo84h" f5Z̍T?U:n\ZM_wu3 mڵllheϱVpN8 >{K͕/uLCFaVpt=\S'8V7o\tm}mKҖ[k[[pY^qw}e޹yU>'6 cXՐҲY#0pz4+󻻻w4 ׫ͳk4Ê۴P6g2L*dɇFc*WGx*r]'Jq-֍$JU~Zbn%xڗkQHP,&.D0N%kEꪞ,,w^QWa uL8q0H;+zJBSTO,U2S,Qq8όU{YB X=/u@?h ?㱂/g_Q ^xʦu^bj; 2z^S D1,Wi>mkR20NiIIW'Ml;0]:}3a`9o<tw޼:aKVA`kYaƬXF(] <5x4y %xSO q g`1|3B(.NPb{ ~`XPҿ7(hB4m| EI )P){ y'?:BC  SSf 0DA>U|>rt` IaDt  4tb+I:z6;Gև@^[m4z.(ޝ cl~wϡ߻$'-qFn.'J 4h) Xf(|`L.*^ݣ+\b"|;ÍHJ0d7BT +GCW͏Av Ea1ŏAnuqj 9Kyycanzf%@C.Lz{Tb˅8L?VME~xٮ>> s:n1 `1xC2 0XqK>o?4@|^MdBnΦ.&" 3Hnrn`NA5n1d3^Փ1fmh;Q5M MOkNB0`FF?4xAAɭ5Mn)rCn6 0 b:jĦ5"$fr1_&7yւ!R%kۇ (_D1s~(~#o)=|%fť.J=u)ދ5ߋ<R`]>v :TspΣ5+F͊ϊ:+.r'0@FKب k8:Y)nN['tQe6HPZN S3L( ;U; baUCUUϙնYmM2"%W 2"F#^LJ#\HGo_T(RERaX J/bǐm6-S$F٬W/_D4~k~~~S 3ɥ%HkAx}[:`[_0fNc k֐![Cv j~|?6JQ<(#-L2P~) i˲_,ӶʱKm˚4i6 F'f $) zy/@tUTJx%8GTՉQ$7]RopL*ؿB\:ΪSqSn1)qqMƵ5s6<AGc" LA#ٔVZ&/,%Z8*/Vm<\BRPkKûP5 y*O80m<x,N"YT*m9S^49[BDUN *z Rx`$ݺU^fwN(4@*"pFN-wj )Tԑ UOLR`_zN9&MX2wDM B3A}> Z>Qq.c4O3MɁ}>cɔ_gj״_ڟմ Nd]e辋5d=@-+@Ax+T[cN>0\i>-ӵhJz$Athh J ρ@js?9> +܃cEKꟘv U4=ʃO|v^̸rGy?FKy]ٳjZx|^ U\ȅkW\ј:Bf)WL1buМz4[j} \*eW}ڿgGL"A= ލwd{r5tVM)F[*F1PFjF4QiJ tƝNޣ8ޣe>0cȱaDʟx6:ԔD9^t!ęoekGP- jy4fl\iEI!uNE)yth#A+\Z*u^+\ ; *$B~P0!0d6Z F\*!5Ӌ@gl)2Y5Q M%HN>)%~Iw|E+8rb)HttZM/*4USł?K]7EwANmb<g0r).,5Ch(C,jgʘE}e5L`tS:x.٥l[$<'G ULooft|kR!gqWj[-!p]zaV9KVIG AY:d`E}A r< 21g: "Be@o4@\@aDF+'^&El$ 6YUi98h0Lut֪EケxAnk`z5D<&v/B~S )$.D6>ICj$η@lяc '0fO{ #eB5m62&y_4B@H, B8!)m[kuZ?~-qhgq<pM,XTbŒxfӥc>Io+4rgGгH h* 籲[ xjG+ `hUW040h`-myhC[q:򨸞S{˗Xso[V__ۿ LJtj/혖Mu \kXMqW?.C I"'UyfoѦXg`-==UvW8*pfansi/tests/unitizer/_pre/0000755000176200001440000000000015107200322015302 5ustar liggesusersfansi/tests/unitizer/_pre/lorem.data/0000755000176200001440000000000014160423174017342 5ustar liggesusersfansi/tests/unitizer/_pre/lorem.data/lorem.cn.phrases.RDS0000644000176200001440000000127414160423174023101 0ustar liggesusersmSNPJeUw]UThPYV꺟ѕ C18ljos_qPsf̜4-Ŗ,ǖqFڲaݟnCAH(T?˰Jcfansi/tests/unitizer/_pre/lorem.R0000644000176200001440000002426414213626056016570 0ustar liggesusers lorem <- "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." Encoding(lorem) <- "UTF-8" # lorem.phrases <- unlist(strsplit(lorem, "[.,]\\K ", perl=TRUE)) # From the Stalin russian wiki page: # # # # Licensed under GNU Free Documentation License since it is from before 2009 # lorem.ru <- "Родился 6 (18) декабря 1878 года (по записи в метрической книге Горийской Успенской соборной церкви[6]Это подлинная дата рождения Сталина. Позже она подтверждалась в уведомлении Санкт-Петербургского жандармского управления и самим Сталиным в ответе на анкету шведской газеты «Folkets Dagblad Politiken» в 1920 г.[7]) в Грузии в городе Гори, хотя начиная с 1929 года[источник?] днём его рождения официально считалось 9 (21) декабря 1879. Был третьим сыном в семье, первые двое умерли в младенчестве. Его родным языком был грузинский, русский язык Сталин выучил позже, но всегда говорил с заметным грузинским акцентом [8]. Согласно утверждениям дочери Светланы, Сталин, однако, пел по-русски практически без акцента." # Encoding(lorem.ru) <- "UTF-8" # lorem.ru.phrases <- unlist(strsplit(lorem.ru, "[.,]\\K ", perl=TRUE)) # From the Stalin turkish wiki page: # # # # Licensed under GNU Free Documentation License since it is from before 2009 # lorem.tr <- "Bu tartışmalı tarihsel dönemle ilgili olarak, Stalin'e düşman veya Stalin'den yana olan her iki tarafın da farklı tezleri vardır. Stalin karşıtlarının tezlerine göre, Hitlerle aralarındaki açıklanmayan gizli protokole bağlı olarak Finlandiya, Estonya, Letonya, Litvanya, Romanya ve Polonya'nin Naziler veya Sovyetler tarafından işgalinin yolu açılmıştır. Stalin'in doğru yaptığını savunanlara göre ise, 1937'deki Münih görüşmelerinde açıkça ortaya çıktığı gibi, İngiliz ve Fransız emperyalistleri ve dolaylı olarak da Amerikalılar, Nazileri kışkırtıyorlardı ve onların Sovyetler Birliği'ne saldırısının önünü açmaya çalışıyorlardı. Bu amaçla Avusturya'nın Almanya'ya katılmasına (Anschluss) ve Çekoslovakya'nın işgaline göz yummuş ve onaylamışlardı.Ne var ki, özellikle Çekoslovakya'nın işgalinden sonra Sovyetler Birliği'nin İngiltere ve Fransa ile ilişki kurma çabalarına rağmen bu iki ülke Nazi tehdidini birlikte ortadan kaldırma girişimini reddetti. Böylece Sovyetler Birliği, kendi sınırlarını güvence altına almak için bu protokolü imzaladı. Stalin'in amaçlarına göre, Polonya ve Baltık ülkelerinde oluşturulacak tampon bölgeler, Nazilerin Sovyetler Birliği'ne ulaşmasını engelleyecekti. Böylece 1939 yılında Nazi işgalinden sonra Sovyetler Polonya'nın kalan yarısını işgal edip Estonya, Litvanya ve Letonya'yı sınırlarına kattı. Finlandiya'ya saldırdı ve büyük kayıplar vermesine rağmen Mart 1940'da \"kış savaşı' olarak bilinen bu savaşı da kazandı. 1941'de Hitler'in Sovyetlere saldırması üzerine Stalin bu sefer müttefiklerin yanında yer aldı. II. Dünya Savaşı'nın en ağır bedeli ödeyen güç olarak (24 milyon ölü) müttefiklerin yanında Nazi Almanyası'na karşı kazandığı zafer uluslararası alanda gücünü artırdı." # Encoding(lorem.tr) <- "UTF-8" # lorem.tr.phrases <- unlist(strsplit(lorem.tr, "[.,]\\K ", perl=TRUE)) # Emoji from Unicode Site # emoji <- c( # "\U0001f600", "\U0001f619", "\U0001f61a", "\U0001f642", "\U0001f92f", # "\U0001f62c", "\U0001f630", "\U0001f631", "\U0001f633", "\U0001f92a", # "\U0001f635", "\U0001f637", "\U0001f912", "\U0001f915", "\U0001f922", # "\U0001f92e", "\U0001f927", "\U0001f607", "\U0001f920", "\U0001f921", # "\U0001f925", "\U0001f92b", "\U0001f92d", "\U0001f9d0", "\U0001f913", # "\U0001f608", "\U0001f4a9", "\U0001f63e", # "\U0001f469\U0001f3ff\U0000200d\U0001f3eb", # "\U0001f468\U0001f3fb\U0000200d\U00002696\U0000FE0F", "\U0001f46b", # "\U0001f469\U0000200D\U00002764\U0000200d\U0001f48b\U0000200d\U0001f468", # "\U0001f468\U0000200d\U0001f468\U0000200d\U0001f467", # "\U0001f468\U0000200d\U0001f468\U0000200d\U0001f467\U0000200d\U0001f466", # "\U0001f984", "\U0001f36b", "\U0001f1e6\U0001f1f7", "\U0001f1ed\U0001f1f0", # "\U0001f1ef\U0001f1f5", "\U0001f1f0\U0001f1f5", "\U0001f1fa\U0001f1f8", # "\U0001f3f4" # ) # Encoding(emoji) <- "UTF-8" # lorem.emo <- paste( # sample( # c(emoji, rep(", ", 3), rep(". ", 3), rep(" ", 40)), 450, replace=TRUE # ), # collapse="" # ) # lorem.emo.phrases <- unlist(strsplit(lorem.emo, "[,.]\\K", perl=TRUE)) # From readLines(file.path(R.home("doc"), "THANKS")) lorem.r.thanks <- "\033[31mMany\033[39m more, too numerous to mention here, have contributed by sending bug reports and suggesting various improvements.\n\n\033[7m\033[31mSimon\033[39m \033[31mDavies\033[39m whilst at the \033[31mUniversity\033[39m of \033[31mAuckland\033[39m wrote the original version of glm().\033[27m\n\n\033[31mJulian\033[39m \033[31mHarris\033[39m and \033[31mWing\033[39m \033[31mKwong\033[39m (\033[31mTiki\033[39m) \033[31mWan\033[39m whilst at the \033[31mUniversity\033[39m of \033[31mAuckland\033[39m assisted \033[31mRoss\033[39m \033[31mIhaka\033[39m with the original \033[31mMacintosh\033[39m port.\n\n\033[7m\033[31mR\033[39m was inspired by the \033[31mS\033[39m environment which has been principally developed by \033[31mJohn\033[39m \033[31mChambers\033[39m, with substantial input from \033[31mDouglas\033[39m \033[31mBates\033[39m, \033[31mRick\033[39m \033[31mBecker\033[39m, \033[31mBill\033[39m \033[31mCleveland\033[39m, \033[31mTrevor\033[39m \033[31mHastie\033[39m, \033[31mDaryl\033[39m \033[31mPregibon\033[39m and \033[31mAllan\033[39m \033[31mWilks\033[39m.\033[27m\n\n\033[31mA\033[39m special debt is owed to \033[31mJohn\033[39m \033[31mChambers\033[39m who has graciously contributed advice and encouragement in the early days of \033[31mR\033[39m and later became a member of the core team.\n\n\033[7m\033[31mThe\033[39m \033[31mR\033[39m \033[31mFoundation\033[39m may decide to give out @\033[31mR\033[39m-project.org email addresses to contributors to the \033[31mR\033[39m \033[31mProject\033[39m (even without making them members of the \033[31mR\033[39m \033[31mFoundation\033[39m) when in the view of the \033[31mR\033[39m \033[31mFoundation\033[39m this would help advance the \033[31mR\033[39m project.\033[27m\n\n\033[31mThe\033[39m \033[31mR\033[39m \033[31mCore\033[39m \033[31mGroup\033[39m, \033[31mRoger\033[39m \033[31mBivand\033[39m, \033[31mJennifer\033[39m \033[31mBryan\033[39m, \033[31mDi\033[39m \033[31mCook\033[39m, \033[31mDirk\033[39m \033[31mEddelbuettel\033[39m, \033[31mJohn\033[39m \033[31mFox\033[39m, \033[31mBettina\033[39m \033[31mGrün\033[39m, \033[31mFrank\033[39m \033[31mHarrell\033[39m, \033[31mTorsten\033[39m \033[31mHothorn\033[39m, \033[31mStefano\033[39m \033[31mIacus\033[39m, \033[31mJulie\033[39m \033[31mJosse\033[39m, \033[31mBalasubramanian\033[39m \033[31mNarasimhan\033[39m, \033[31mMarc\033[39m \033[31mSchwartz\033[39m, \033[31mHeather\033[39m \033[31mTurner\033[39m, \033[31mBill\033[39m \033[31mVenables\033[39m, \033[31mHadley\033[39m \033[31mWickham\033[39m and \033[31mAchim\033[39m \033[31mZeileis\033[39m are the ordinary members of the \033[31mR\033[39m \033[31mFoundation\033[39m. \033[31mIn\033[39m addition, \033[31mDavid\033[39m \033[31mMeyer\033[39m and \033[31mSimon\033[39m \033[31mWood\033[39m are also e-addressable by <\033[31mFirstname\033[39m>.<\033[31mLastname\033[39m>@\033[31mR\033[39m-project.org." Encoding(lorem.r.thanks) <- "UTF-8" # From readLines(file.path(R.home("doc"), "THANKS")) lorem.r.thanks.2 <- c( "Many more, too numerous to mention here, have contributed by sending bug", "reports and suggesting various improvements.", "", "Simon Davies whilst at the University of Auckland wrote the original", "version of glm().", "", "Julian Harris and Wing Kwong (Tiki) Wan whilst at the University of", "Auckland assisted Ross Ihaka with the original Macintosh port.", "", "R was inspired by the S environment which has been principally", "developed by John Chambers, with substantial input from Douglas Bates,", "Rick Becker, Bill Cleveland, Trevor Hastie, Daryl Pregibon and", "Allan Wilks.", "", "A special debt is owed to John Chambers who has graciously contributed", "advice and encouragement in the early days of R and later became a", "member of the core team.", "", "", "", "The R Foundation may decide to give out @R-project.org", "email addresses to contributors to the R Project (even without making them", "members of the R Foundation) when in the view of the R Foundation this", "would help advance the R project.", "", "The R Core Group, Roger Bivand, Jennifer Bryan, Di Cook, Dirk Eddelbuettel,", "John Fox, Bettina Grün, Frank Harrell, Torsten Hothorn, Stefano Iacus,", "Julie Josse, Balasubramanian Narasimhan, Marc Schwartz, Heather Turner,", "Bill Venables, Hadley Wickham and Achim Zeileis are the ordinary members of", "the R Foundation.", "In addition, David Meyer and Simon Wood are also e-addressable by", ".@R-project.org." ) Encoding(lorem.r.thanks.2) <- "UTF-8" fansi/tests/unitizer/_pre/strings.R0000644000176200001440000000030514160423174017126 0ustar liggesusers# Test strings for use end <- "\033[0m" red <- "\033[31m" inv <- "\033[7m" grn.bg <- "\033[42m" rgb.und <- "\033[4;38;2;0;120;200m" rgb.und.256 <- "\033[4;38;5;141m" rgb.256 <- "\033[48;5;141m" fansi/tests/unitizer/_pre/funs.R0000644000176200001440000000045414213626056016420 0ustar liggesusers## Helpers to extract the condition message only due to instability in ## C level error/warning in displaying the call or not tce <- function(x) tryCatch(x, error=conditionMessage) tcw <- function(x) tryCatch(x, warning=conditionMessage) ## writeLines! wl <- function(x) writeLines(c(x, "\033[m")) fansi/tests/unitizer/tabs.R0000644000176200001440000000270314533476156015461 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. library(unitizer) library(fansi) unitizer_sect('simple tabs', { string <- '1\t12\t123\t1234\t12345678' tabs_as_spaces(string) tabs_as_spaces(string, c(2, 3, 4, 5, 8)) tabs_as_spaces(string, c(2, 8)) tabs_as_spaces(1:3) }) unitizer_sect('newlines', { string.n <- paste0( '1\t12\t123\t1234\t12345678\n', '1\t12\t123\t1234\t12345678' ) tabs_as_spaces(string.n) tabs_as_spaces(string.n, c(2, 3, 4, 8)) tabs_as_spaces(string.n, c(2, 8)) }) unitizer_sect('corner cases', { tabs_as_spaces('') tabs_as_spaces('\t') tabs_as_spaces('\n') tabs_as_spaces(c(string, string, string)) tabs_as_spaces('\t\t') }) unitizer_sect('bad inputs', { tabs_as_spaces(string, warn=1:3) tabs_as_spaces(string, tab.stops='hello') tabs_as_spaces(string, ctl='hello') tabs_as_spaces(string, ctl=0) }) fansi/tests/unitizer/has.unitizer/0000755000176200001440000000000014213626056017015 5ustar liggesusersfansi/tests/unitizer/has.unitizer/data.rds0000644000176200001440000001121714213626056020442 0ustar liggesuserswF^{mImQ:4&&GMB!NCK[lY;J[Ik7>-O 'x/2#Hh׻J;_wF{WBQ(A#h M9!_֗/KGF*̠/%S}V8Kg>~۰l]Xû%\fwE;2+o*KJҵ+5_wMbZQ[ZѸ^w-']E3ySB1~Wvűf2F<**{nTkz QM&Vva&ֻ^3ꬥr+O%Ba۾^uy] 9z8}TSf)Bw7Ҕ,1IJHN23v@)htX i䉈cuf)%eyL)qrndn#7>,.5\/<-QP4=NgR324wlRjv9 Zh1Rxu"]Nc;c긞B8vrQԛctNq>OBT"kwhȌ<4C.CxiY9/,RIIB(}flS(I:j[[=^Oa'h%3Z ;AXN6`(f)TiD!0'*7Y l&.}q%8xҩit{k~B99>[5 l\!碞nWLi׍`[rz4~ұ]{d9UlyFKQy?N٭QJèrk?asja"(^Y]DF*xJ"5g^f6֮ g7({$<@]ww^[KMTkd۰\ZT560^x]6&Z[/")x׭z(@zv/f߰ 0'`N֜ݜ,GlIh5&E%8@ n71숻Ľr-  (r92Qee*+GDN3 q"9Og˚Zx_.qfeS\ , hCqC%Sg* P%j.T P ;귆 L\~@*xfVӀ61X/jk+ ]#$[[gl.gOqF|>t2x8f=,N Gg9W0q G9|i߀(M* ܛTPIP>-TszZ.]kw+ϟW59J/._14a1h:@̖|lc3Cٓ=C-%d&ȢAl_WF> ͥ식 eQPvsf?LEBYpf]^2;{DYe <@c:Msl%d&ȢA,@~ @ٽS\RRDYpe { 1d.!0A deͥÄWa@zKׯ*ka@X 엁k uBXv ?&ТA-\)iRҎw@s9K ̮` zSriQPDݵ;k\# d6Bș2K6'%2EkkHj zpf8U;\Bդq?p)x>YP~mMpQZW9Fd%Ѳw<u;@uϓkF(c¶9+raYst>} {Y>$g6Xؑy a?</.AU-DHqzW>rmC2yC^lK /ds+U(ݹOⴷ&4?b> Kh*gJ+tUU_L LWWlna~96ڵW/o % aYGf#T,֙ьč<^2*uXóp5?~9϶y:W~d2v(Se*Km2fLݾb\\W͊]fwPgjN#"n~&f2vsH'J#->Ξt"$v*115ΌKO=cS!~H|.v\,r G*UVLX*eD䢍j2^\,1X-ڥtDe(R%MF /T+%+oTJ$ ~Y_,*=_ )vDacUs;ȫFe3q=>gr V@UI->Dɑ" 2OϤPH(qѫL #!/5-,$SBb5\⫿a4XYӦB'!COB^wyQ21~˙~몎Jʎ-o,kh'O>ݴ+ W݉Vydoۅm4y]#^E3/Y)#L+DVpq@@oe׻C<9ؠA p/PGD ; 8ɉ;&Au4<`<>b_f )H.>OQj]zޕ։=̈ iQ<|d9pg+eq6o4QwB4⫼ma'Z,^K랒K~eik\dжxb3ۖӏ%N&TJ#+I}>k8v[Ogr9M0afӐ#_S+5tv۲aϗj٫d^^z >gީ.>Ttͪ[]֔lM+NwZ޾rWOJC3NɪQ=EΩZ5xf0o{r /`#gj]uh6*2iMy=a'f4`IeFߺzu״9c*l6uku_wxd+ )ٞjŗkݜ ҫR7*Tٷ%9YZjTSmhU$ZcYCQe>{!+^!t[xGz]R)rZVl_τ$$VFdݪ)CV Œta1+ id6|ЬEiF+պ}{1|g'Qe|aǮK}Xd ;VyTZl4Mvrq^9rI-GZXVL\]{A=ݧM-iOKIvIQj7[ǭRJ+kW V#o4A/*_]W5]1C(kzfz\PX;=N{V%`Vl7ɷ1IX~e1e ' ֫bU_U˸I;qET {x'+Z$הx'ʼ'C3 V|*Oy;:PuE5]Wi56&P!W( V*l:ku:F@!o"m hբixjZ P>h->u0.5UzT ,[:Ś(LY5QYVT Kb"YtT__5Պ#sCAuq-tYQ]ZVˊj(H% k J,K8;%Rv% / ב%a3݃J6dӃjJ jZsZ9mлWn֭l]\YY~peX7jU|vFo]\Yzox+7#ro@ZAŕWn]]\AoZysRHFS8FĊ`\!hk0Ξ:>Xd5}:Ͱ5skwYg2Uh+KL 6ܭF F.f%RyKp*n]y}$s=O29ݕ0JAEkMլ5+eʊ!h EنlnpgxurÃG0a%VB/6pXWvExg|DZ"s`5xƪW#5v~˽>/r/pZ\syKzr<7y97)]lrt2lyom}gwrצ.\LY^AIؠTp?x߶qyQδ2?SŹ-,fq*>ߪ!"gb&g/MX- nhoy¯oqQJ]4%-P9_+hʵJ )tl&etͻ|L9q;WO&=w;>)p'73C~S XmkwWA:5+)>#NھQ/.99AQMR|PNP(ݪX9s8ly*'V$ nƒjjG5f, TҰL5o%zZ)h<@JNxp<)' /FQ5_6?uMĆY 2A!I e2ँ3EΧ2hu]͖ElSFgU9p_n=dFL/e_e{?zS)k5ksv/` XKEܮ_"\ 3 B[(ruʉJ' bng!1P%TT2'*O,iǔIaY' GSF.K59ۑ|f|>TQd:4441ƚ( 4q,D={A<˾ꞏQԵk%+(TSH} xכ^^ {.> 7 'RePA4FnzOPu.$Ex<‹ckpDD8"|DX$YfP ʟs> æ"/`I븿7Im~p9Z[~A#A# "uD GKοùgucw;Ѵ#!j/IHh+DgoM94}m4)-gԇANZK>{zs[XF}Әհa:/׷S;I.c!=6bfiS{=+&VSmpb\i7B]A8n+OK?"x9im[}NoV9 OhS>K{|1Xc37}042Fhd,D{{o@4O/ȹ;P }<"1A? o٩gs!GT:݁L;?uM6li*0A)sJZSdM\O d}Nt}Pk rTLf/#8Ab5O'_4qq`2~Y3ӵ @NH<~_Hi;Z:±)ohA0&gSTgӏnl3oTꞵ63\6H&nz] #|z3\s$uD>- 렭  a~\28Ρ+. }8bՏtpS40)8FyJΞ5h~D[TEg8gnu&a|Z[æRRUX*%MWeCE=$(4E>Ȣ L=, By1t2L-O4S~wXD CBukOffE͖q]ސukarʺARџGӒII$I!g8Iap}={>ٿˀQXu;j"GhA(:(zl}=1>(z}]JL:9y\< z=?-s;z=@5ssss.z=?-AouyyN>zITԭse/'IEN]ewׁu3Qس:PvPvPvGe){*?U6mH[37@Ac鳠]&D~xTWi!{|mU3 TUM]4J6QYS2Vor-2wqP6|+qCu,kZC>X@N?cezҌҝֿzL\׸$}} 9 IHG[4 Zk5_Se3FMyJU]g?9W PنωR^S|ݝćN9/ܐs9 *1gRjI-dM~VeaV7CgqCt= z9tI/AVda="0`3G(f w,\-\:$,Jx#`79)AD@AٷYA윬~(;(;(;(;Yw=~Sv]iL:od*o7f2<9A"b#3;%Gww]W E1 X8}g{5aSIzc;k ;g|PF: IX~ 8wÅk1H8^FCl6ue2do[/UcE/d ^ӈIq$뢱o8?k D=ml뾘QJy2%jdbAW8MM]E'?B)$hSl \ǥTE#/0ZLTp#|.…ׁ ǥpU~*<%4(LaH-Lqd;4F{ 2̍nM(D#; t%i-wM# **ǥ@LX<_u= w%4*d(4LƲQIY~2MG$)gPݣFBn⢾ެ+>0#LHFN߸n\!ųVZ޺9ZQ" ^ꆬVjJ hSkbUQߒWELCgn(kE#+y}m t.5`ݧ銉Pxc~޾r/QS.Y Yrg"ջ+:.~_7/\.--fLךjŷ[/ R{)*٫RUͫn~p3+]v>R֮ ֜IyiÍ4$OG'}ɹ}/?o&y0bvwwٟ/h^ou@{YcfG"RBKoEۈ=Cmxb6m<svހ4$&'7?0l>p8`qv/kq8NgNg q)!Nd3ғ`uVv[e:ǥX`Q[S[Y8:vL(.kZTtm-A`d. :. 8 {c=e3Ⱛ8NgN8RBNpltƶVX:i`ulչ V縔)2-mu?֗t0Xc[h3i*teZW g?t[b-)N<3ƌ7ǥ!aF@#3$h-448.%R/ :K?p8Cp I6R~Hޥ\LY`q~FfQ?0@$r F ZUpx# g3F+t0 zTPyCV5MNN7;;5os7QC={[9K":y;Њ0A_ɺIFFWn] RU9D*9VEVQKIg^LC7vl*6L`?wwxEρ“itE-kd.& ?cta>6ݧ.4T؄"فȡힹ3Mfns .#zÑz0dǀys1";v+ؙۙ`ge̩vu:s88p8p7$-p82 /Ka40vF'1cvǼ >[ >H} ;K *5M@AT/qrFVJ]/r_QQu 5dV+W\]׀+ tE3m\Q1Qz1.`sTSdajs\AeL+ xB^B[+آۢE2腠-j3cq@RzwH1p4л6lؘ̎`cѐ6sPxg<@ 5;kn 5]W3 gԊќtجΘXL2qiq[bv"n(5Lo6ֵZO/Zla8AHx$".xp- (qą KAq qAç 2hHsh(O/`*\_̠rj*?G$8GhLwb]t{/Ƕ[O)N԰|I* p2ȷG_պIzWn"?GH}"L$/? E\xqx-ȋ xap[& H\hJP(`%e)1&{Y(IO4^]0E3l9N4zVA **)IV Lhmb!kM] +rez\M#k20lXr4~©۹z 4JssTܲVG^*A_b4 M7!6ٻWj0/楇ڒ wk\=t^3mQ[-hȨ߶j8jԔ8Z6uhvqa d ݂{[XeӹNyN9uf St? % 4PWz0PCa3SN*IN FJ* QM6*/g% wB82[&`XwhL ?ΊQXȓ:/ <Tےo~sq5WC\ S_SLu >!uj7FA ?P`EkV n@V~ފ-60D8!6dh n@dt3r9U@ˈ t﷊~#?ΎA#(=G q.D:#u;gׇ&ۋeVĆ&b(X?+VL}sI69-4Vk)J XOz^I?C4x4jʺ\C3]PeSTvSMi:N֍%PZUǒK4drq#7xP2hL!XcorSWb`I|@|1?GK=mzhϸ]8OHZج: Vqf suetw8BJ D:z8O5Uk^Hx PUrZxgq+'?D4;38^ڇ&n;I'w+-;Dob])DA8řޚFfapl*ZTSpXBW6t\5 tU'Jp՘QN'h&i7I8?#6(0D)Q>EW*sV *OyLs8,a瓐g(yUz !r B(";LL00) wuFM""!$Ҝ Y* T2 # }kt-|J\nqi(S=ppL0$v8~f xsqhzR8F`IX]Ò\?2l|FCo_g}!'CS}Lw;?_\:\"sr?#}K#i?7oF1j$Qt7Lo"?l&kD@o $y~<_s dl~~Ǵn3$_Dr;1A7o)[n)X t^8Vr~{6ALJL%?DF%G*Ѯ({ 4t_U+Y{;!{+vRLkZ7S"&,KAR%oC%A_G2A4x]ZFvt]`oʮ@9ve3Y}xяh| }j9^vq-N-+0Vq0Vծ7V תv+nN %o"MmGrc~eDz:+ٛWeQٝ+n66WC _`xA׀!GYIb?0IA`ZuWצhϯmcK./.w./J 6&w쐛8eY!Xeo.35 Nq kŭKP>h"+H6q*CAt|SݐJM^û hSkPQPs/K*l*>XHlRCp89o0;03_cn?8/|'pGLCz!VUsvbҫ&ĥ죸RBqJQ\`@Ȋ 퉵W%@ä+$I='XRx~ŕD$$## :ӖD{8I4q;Q$`0+`0aD'qitb`uh?y!#{ NG8'NϋOqv=nOkWD7l 4~ j#*uaܑ fJ5)Ҋ8vHg GJCͪػKF%܂G#!n氧-_Vs1|U@2Ku_r_ÿ;߉en{{߇on v{y3Z53Yy2r\\([};iHYorm!n[m%Skп,NW|+of:ym6f8sspNΉ;mӁ8:'0H0H`I&_2Hm` AA0H $0Hݑ[9된.f!C sH :<7  v8C!I<SzbWp!"̡צQjr*=)Sڽ#K Mߥ!pͷjGX[n뛝ώB#?4Х&&4Az_K  K>@5(kǜ n(cQ5nV+؝Vq\0y5Mߝ$5JzzTMI@k'tѩ{VJ vGƷ|}@0F+.q0b3K`tȈ!q^8{|#tJ@Q@%JlO[bi&cp0p \.uK.zԬY)=jI$`_Ln'y'ʤ$`0 &˓߈sX..K%\.V+̈́280 L&uI]0)A#%2II$`_LnCD&Z1Q`0 LI&h7!șݲMtTWd,}M r߇d}} J<2y\Wy؛djbU~-Iooj}I}}{$2bJ|#΅˾dGG k|Dxj 746hz@~ǀ@ iQhOhL#v} ڱ?B/I\y#_@r/#Ʌ߾gig)]'AO12$?ˏ":e\4ǮQrj>pjpj{ߪ'zbx{`0 c`vV"ȷߐX8v%0рh$vhф/@4 mM4!D$>/xq7E0 dqr$,H|c1vB ڹ  c2ΎAAwH%V~lEA~̹@HDXv̖4(4V4m'+~rOW+g\ipi9A( (r (?1\p<'@9x @9PnRN4C('I39/b}ɀPrFvȘYA)IN!BpY)f;0tt=FîYx*(VS  ' aWr%P9P9PU9Ir6DͽОZ*?\q_Q{>V>U]c)ձ27A'/@ O9@$V!W. ^;uDP:ntڐJ/n7b!ܔ$MnSX9*fP5_jb췊~ ;tAWqBX_Q';a؏IBNr ͓Q@5T?*g2t87-^G8JLɭ( X/I+G5;33ub_G$* gW)DGD:MA7QVeI%l[ԑ6C8VW@wk#WKw]y7  -]N&mpppW8Ip9DគncmlYI[d{>V>h]'?-z?X}gy9<3qb_f3,f#1RB]Ωac7M>& V'>"{0G5`*0ib|LXWV@+hV@4\tBW Oz'wMsuqE, :}Gl6>.i#~ duF*mI]X, `&4dVذ찁8QLDKҿ,:M#Y,tt |j`BB˜:A#4dUܒ-sY,@ ;m,@iɂ;8 aaD;8q\FOӿ<:M#Y<=6'绪k3C琵G:ʐNzn4}CrK8l=H4Mh 4uFhbRKs#WP+8IjZRS[XP,~wf-WUjW\*piRO\ Y6>44D8M 4:M#Y4Dhjl]Hչa3!@HҟH@8*OOHtwbh:' T)wC*I˸_r˝p%)}ZzOb-צQ $ͰKL}ҲHT[*Iht]O΅bg)clR_w4Y78r^슈K ޱ ^x? !QHTrV#)ˁIOGw׬~9&7Ar9Ct-W]QMTSusw^?џޯǁ={:9wPku})"B?g\81>>CSYԔQrt(z#b.y6`{ۀ!v#l^{a]ł "vφ_u}ʭOz-fgj:Z=UDk CX%QUEjRS҃JZSȸd]A`ͪy"g6!HSRAZ12C?jD=)B&<&MM#p&Mo&Z?a\}۽{Nh-J\&M6 ƀ,n-1DRR(8Lx{ ~{(cZ v!Vv.]"zv!AY&x#=1{7u.{<w#KGi{tf[e. Sϲ)U0[]OWN34a?Nw^Q@RBgΐq6NHWѤC,B77qeYul. T:ـZ'"#CEt>1 CMIZEvD<1p88pDq%sĜ:\Җ=OD][cOҘ]1CByp;{9b: NduuXzɻV5u3Lkz&?R;Y&o.xxe'UUώyϴwl |n]')2Wmx||N JPGK=@\NBl-[q9[+_]H2xAR=>>y=ey^?y?zcև#mi.$]blZM;Y&_GM8l1پ~>vb$N wL Yw/ f3[irNL@%( Axm(߮` !&@Zh߮%.*tO[glh_RRZ*Uua@x\ݴZR<FodUAʜ@~exe[ʾ%22вԲ7ZvVe33䋙$"f/EO硧wPΎ}E랏/DAl׽Ydrl\驩Q[}n^O -1;Zdrƈ L2,tDΔIPxo?T5)?Jn #@ e!.>F:$1l$P( (O2o,'oup8Z-ax0P]ŭu(O2o(3lq8@?U8@N+j֬(j =PTd(5lbWnt=&n&pM.KI P`u|oP,=SXtUђl0^231"0-LHUQYU\:(Ο@ɶ~E?yUG_bZD M'gX#:nn&uaXJQǡZU,"(jAF@Vc5ufrU]FUI+ZUユ!P #ىM7-)nzPx2>r&x'Ks717x@y|— ˑ(/}Bzq>8L ?"} }oW"P(kP(e)?+FzL #FIo0)8 O

a|yac6݁@8@/H7tH0_x]9g;NO9Aij(Tz0p?1|P>-/p L[0J;WZtCу+qv c-\uM7z z&K.7 tsE間6=i&k%qڈ6#C.)ܩooO}&kjMIEZ!&pJ:K^zV+ G:;11uj$uST񇪚w5ydm _MVҩE oų4i/=Y+_9<-[ߩ+4 : KWS*D)7 cmjMTU4t[hkw+H s+I2AIfMSYjʺ\ ͠h&IIe:2p0;`ڈ`$iHg-SR Yy*/fPߌ)v٫,^mR"Gi|hCV+]GAPg 1 @GFB; G9`9ȸ4Œtm?^ ν mƥy-k6:."p饤`1/yAR@&(BbI#zJ|$E(Ҳ(ڈKybl7R0r yvh;@*ג@GC: ?pr9;,#JG&]oq#*PҴwʝN&5sa *r@/"@ԖA=mGUqVW0k5#[Qn(V6#>ZtYߜ\U:eSڒhU\LQN4V9i ]dPU6|ʕIU맃_)-'|_dOOViq.hM$IW7PDZhu]͖VT^6UU9VW C͒8YzS)k5MOUc['_9$͠bκSV3x[BWx[I9uĶgƢZnQg =IYğ6\8?_I23h6&?rl7Kߐ SMڷeVgN)ԺUJ b7=5Me JZSdM\wZҔ 4?[B'MΜɺLdde#k4d,ݰ6~ۛuD)鼨)rꥵ#.OIRC~mQyC2>SVbpjOY[MH)+jel6uʪElzJi9C>K(:ں=_ǭ>vip%LS,8Q%34 ۅJz| ƍ~(޺׳>-x:4N/m[\%*-ѫa[na-7icU:˝a9% C2".<Ä(A*Ϊ0I>c,Nn.R(UL;e]W[&qWSt3[cEL$u>5>mud"ȡ v/d2Tgp)eLA$zwGN\ _jIz)V9j٫3ET~E$ږh6rprϥ[1%,oLtin൪ƹ)!+\4hxݻVR=\Z@k#He^Pr~9Q!':jra* ;5,tB)v8[eXdybk'aLs&-6f.kZl2=?분WnokMbu??W#nt 7hL6/&Uc]wDu7;0Ra?%آZkfwo/õZ&é5ݪ=|gk`x"Oô*X>SgZ)iO@>Ksks'KOf%'׳\1˕;dsv)aG~[Q [^V_Fs3OsK=t@R|4qҗIi;r Q2m6ڛՊղ\<|5|5O=dMd gӔ$;}}?>O-i"֌R5k=ͻ]|svXe,<ŒTrsq뜕q23Wu 3}Y7I ;d_mMuܟ$=w,-_LE:I@Z qF@ZwYk܃ݭɔ@KߌV{(Wy ker^ w^IIN=[胖4%2d4OE3Xg;:LZesW73Zo-AI`V 'TMLXm~gq-¥:I0,=$~9J,UY6PHX-Թ ;Оl}޺AYXF(p WXߴx_=كFQ{\'Y[}NhwsG{{l]nHNݑя__`4:<p?dI Q!j:vD! N\FE_SusC &YKG<*Cg>@ b+qES]s (AK=zLղMmo$.ïz<;_۹m;"|uOzHP{EvJ<}|vk\Q+N;J=_sǕt#Ʈ66peH䧣}Ks|\ [Vcv9z as;)Wa.dUIq_U>h򴔛a^겧 <آ4zƌ,N*ȧ 9#EBB|zA iI*UP9 ZZDTKG4l:|Y c, +^st mZ1֙Q7jֳF+?`-Zk11s@9ך5:]w{ q;. ;[+ c!c0@"8VC"{O{O!#>`8;"< Cr##!DZJF+H1r <x |H > x@1t`I Y_ 0uH : x@1tQ#!Qwf.ҕl*T5&{H`4hрDaa0@"@@\QF?hV5E-Cj1abW C̆ G=bH`1b@ 0p? {@1jcbBb~< ^! B^-$$l k󬮬erêQ$;j~w:=؇߱CHƘaʦUny;IE|/ӱ5$nr^U]ajҥǁOpىdz֎/5/4pu, 3\nXedը4l}{}Kb0rبGjY14j-KE6eCqr?sCcMSi .f Y|TVZ-I=DC@@@@@@@@t SX/ҧjͺbzʍ/^=+ 8E+1| '+tsQρ򆬮*wbCyM֔]f ۓj~ngۻ]k=95]o6̶ߐ #-G]E#Kq_>YU+LN$h?>Cfansi/tests/unitizer/url.R0000644000176200001440000001230114533476156015325 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. library(fansi) unitizer_sect("wrap", { # two ways to terminate OSC, with an ST, or with a BELL (\a) txt <- "This is a link" base.st <- '%s\033]8;%s;%s\033\\%s\033]8;;\033\\%s' base.a <- '%s\033]8;%s;%s\a%s\033]8;;\a%s' url <- "https://x.yz" u0 <- sprintf(base.st, "", "", url, txt, "") u1 <- sprintf(base.a, "", "", url, txt, "") strtrim_ctl(u0, 5) strwrap_ctl(u0, 5) strwrap_ctl(u0, 8) strwrap_ctl(u1, 5) u2 <- sprintf(base.st, "", "id=one", url, txt, "") u2a <- sprintf(base.st, "", "id=", url, txt, "") u2b <- sprintf(base.st, "", "id", url, txt, "") u3 <- sprintf(base.st, "", "title=ab:id=one", url, txt, "") u4 <- sprintf(base.st, "", "id=one:title=ba", url, txt, "") u6 <- sprintf(base.st, "", "id=one~title=ba", url, txt, "") strwrap_ctl(u2, 5) strwrap_ctl(u3, 5) strwrap_ctl(u4, 5) strwrap_ctl(u6, 5) u7 <- sprintf(base.st, "AB", "id=one", url, txt, "CD") strwrap_ctl(u7, 8) # Mixed SGR txt2 <- "This\033[34m is a link\033[49m" u8 <- sprintf(base.st, "A\033[43mB", "", url, txt2, "CD") strwrap_ctl(u8, 7) # Too many semicolons url2 <- ";wow;https://x.yz" u9 <- sprintf(base.st, "", "", url2, txt, "") strwrap_ctl(u9, 5) # OOB char for OSC u10 <- sprintf(base.st, "", "\x07", url, txt, "") # not good u11 <- sprintf(base.st, "", "\x0e", url, txt, "") # 0x08-0x20 okayish Encoding(u10) <- "UTF-8" Encoding(u11) <- "UTF-8" # Unsupported parameter (only id supported), questionable whether # this should be allowed to carry or not. u11a <- sprintf(base.st, "", "hello", url, txt, "") strwrap_ctl(u10, 5) strwrap_ctl(u11, 5) strwrap_ctl(u11a, 5) nchar_ctl(c(u10, u11, u11a)) # OOB chars for URL u12 <- sprintf(base.st, "", "", "\x08", txt, "") u12a <- sprintf(base.st, "", "", "\x80", txt, "") Encoding(u12) <- "UTF-8" Encoding(u12a) <- "UTF-8" strwrap_ctl(u12, 5) strwrap_ctl(u12a, 5) nchar_ctl(c(u12, u12a)) nchar_ctl(c(u12, u12a), allowNA=TRUE) # Unterminated, gets consumed, not shown if we're terminating. u13 <- "a\033]8;;THE END" u13a <- "a\033];;THE END" u14 <- "a\033]8;;THE END\033]8;;NO?" u15 <- "a\033]8;;THE END\033]8;;\033[" strwrap_ctl(u13, 5); strwrap_ctl(u13, 5, terminate=FALSE); strwrap_ctl(u13a, 5); strwrap_ctl(u14, 5); strwrap_ctl(u15, 5); nchar_ctl(c(u13, u13a, u14, u15)) # Empty Fields u16 <- sprintf(base.st, "", "", "", txt, "") u17 <- sprintf(base.st, "", "", "", "", "") strwrap_ctl(u16, 5) strwrap_ctl(u17, 5) # Terminate strwrap_ctl(u0, 5, terminate=FALSE) # Carry open <- '\033]8;;ab.c\033\\' u21 <- c('he\033[44mllo \033]8;;de.f\033\\world', 'night moon') strwrap_ctl(u21, 5, carry="\033[33m") strwrap_ctl(u21, 5, carry=paste0(open, "\033[33m")) }) unitizer_sect('normalize', { # Adjacent URLs with same ID should be merged u18 <- "A\033]8;id=a;x.yz\033\\B\033]8;id=a;x.yz\033\\C\033]8;;\033\\D" normalize_state(u18) # Merge even when URL fully closed u18a <- "A\033]8;id=a;x.yz\033\\B\033]8;;\033\\\033]8;id=a;x.yz\033\\C\033]8;;\033\\D" normalize_state(u18a) # Abutting URLs with no intervening content: last wins u18b <- "A\033]8;id=a;x.yz\033\\\033]8;id=b;x.yz\033\\C\033]8;;\033\\D" normalize_state(u18b) # These two should not merge u19 <- "A\033]8;id=a;x.yz\033\\B\033]8;id=b;x.yz\033\\C\033]8;;\033\\D" u20 <- "A\033]8;id=a;x.yz\033\\B\033]8;id=a;w.yz\033\\C\033]8;;\033\\D" normalize_state(u19) normalize_state(u20) }) unitizer_sect('substr', { substr_ctl(u0, 6, 9) substr_ctl(u0, 6, 9, terminate=FALSE) substr_ctl("hello world", 3, 8, carry="\033]8;;a.b\033\\") # corner cases with bad/non-portable bytes np.bytes <- c( "A\033]8;a=\x0d:id=c;x.y\033\\B", "A\033]8;a=c:id=\x0d;x.y\033\\B", "A\033]8;a=c:id=d;x.\x0d\033\\B", "A\033]8;a=c:id=d;x.\x80\033\\B" ) Encoding(np.bytes) <- "UTF-8" substr_ctl(np.bytes[1:3], 2, 2) substr_ctl(np.bytes[4], 2, 2) }) unitizer_sect('tohtml', { to_html(u0) to_html("A\033[44mB\033]8;;x.y\033\\C\033[33m\033]8;;\033\\D") to_html("A\033[44mB\033]8;;x.y\033\\C\033[33m\033]8;;w.z\033\\D") u23 <- c( "A \033[44mB \033]8;;x.y\033\\C \033[33m\033]8;;w.z\033\\D", "E \033]8;;www.z.com\033\\F \033[4mG", "H \033]8;;\033\\\033[48;5;67m I" ) to_html(u23) to_html(strwrap_ctl(u23, 4)) }) unitizer_sect('osc', { # Non-URL OSC nchar_ctl("\033]hello \aworld") nchar_ctl("\033]hello \033\\world") # but don't support OSC (interpret as 2 char ESC) nchar_ctl("\033]hello \033\\world", ctl=c('all', 'osc')) x <- "\033]hello\x80\033\\world" Encoding(x) <- "UTF-8" nchar_ctl(x) nchar_ctl("\033]hello world") }) fansi/tests/unitizer/overflow.R0000644000176200001440000001117514533476156016376 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. library(fansi) ## remember that when reviewing these int_max will be reset to ## the original value old_max <- fansi:::set_int_max(15) unitizer_sect('tabs', { tabs_as_spaces("\t1234567") tryCatch(tabs_as_spaces("\t12345678"), error=conditionMessage) # we're trying to trigger the failover allocation mode for # FANSI_size_buff, where double the requested size is over the max size invisible(fansi:::set_int_max(12)) tabs_as_spaces(c("\t", "\t123")) }) unitizer_sect('wrap', { invisible(fansi:::set_int_max(15)) string <- '0123456789' strwrap_ctl(string, 16) strwrap2_ctl(string, 16, pad.end=' ') tce(strwrap2_ctl(string, 17, pad.end=' ')) strwrap_ctl(string, 16, prefix='-----') tce(strwrap_ctl(string, 16, prefix='------')) strwrap_ctl(string, 16, indent=5) tce(strwrap_ctl(string, 16, indent=6)) strwrap_ctl(string, 16, indent=2, prefix='---') tce(strwrap_ctl(string, 16, indent=3, prefix='---')) string2 <- '012345678901234' string3 <- '0123456789012345' strwrap_ctl(string2, 16) tce(strwrap_ctl(string3, 16)) string4 <- '\033[31m0123456789' tce(strwrap_ctl(string4, 16)) ## Overflow when wrap adds a closing tag invisible(fansi:::set_int_max(9)) tce(strwrap_ctl("A\033[31m a", 5)) }) unitizer_sect('html', { invisible(fansi:::set_int_max(38)) sgr_to_html("\033[31ma") # whole string over tce(sgr_to_html("\033[31mab")) # Sequences alone over tce(sgr_to_html("\033[31m\033[42mhello")) # Over due to classes invisible(fansi:::set_int_max(57)) tce(sgr_to_html("\033[31m\033[42mhello", classes=TRUE)) # Fits exactly invisible(fansi:::set_int_max(58)) (x <- sgr_to_html("\033[31m\033[42mhello", classes=TRUE)) nchar(x) # Over invisible(fansi:::set_int_max(4)) tce(sgr_to_html("hello")); tce(html_esc("hello")); tce(html_esc("<")); tce(html_esc(" for copies of the licenses. library(fansi) unitizer_sect("Simple", { str01 <- sprintf("hello %sworld%s how", red, inv); substr_ctl(str01, 1, 7) substr_ctl(str01, 7, 11) substr_ctl(str01, 8, 10) substr_ctl(str01, 8, 14) str02 <- sprintf( "%shello world %sit's a %scrazy world%s out there %sisn't it%s%s right?", grn.bg, red, end, rgb.und, inv, end, rgb.256 ) # enable truecolor as not enabled by default term.cap <- c('bright', '256', 'truecolor') substr_ctl(str02, 1, 7) substr_ctl(str02, 10, 20) substr_ctl(str02, 15, 40, term.cap=term.cap) substr_ctl(str02, 35, 60, term.cap=term.cap) str03 <-sprintf("hello %sworld", rgb.und) substr_ctl(str03, 1, 12, term.cap=term.cap) str04 <- sprintf("hello%s%s world%s%s yowza", red, inv, grn.bg, rgb.und) substr_ctl(str04, 5, 7, term.cap=term.cap) substr_ctl(str04, 5, 13, term.cap=term.cap) }) unitizer_sect("Multi-line", { str.m.0 <- paste0( "\033[44m", c("hello world", rep("goodbye \033[45mmoon", 2), "yowza bombastic"), "\033[m" ) substr_ctl(str.m.0, (1:4) * 2, (3:8) * 2) }) unitizer_sect("tabs", { substr2_ctl("yo\tworld", 1, 8, tabs.as.spaces=TRUE) }) unitizer_sect("Corner cases", { substr_ctl("hello", 0, -1) substr_ctl("hello", 0, 0) substr_ctl(rep("hello", 2), c(1, 0), c(1, 1)) substr_ctl(character(), 1, 1) substr_ctl(list("hello", list("goodbye", "there")), 1, 2) substr_ctl(structure(list(list("goodbye", "there")), class="foo"), 1, 2) str.0 <- "\033[31mred\033[m" str.1 <- "\033[31mred\033[42m" str.2 <- c(str.0, str.1) substr_ctl(str.2, 0, 0) substr_ctl(str.2, 1, 1) substr_ctl(str.2, 3, 3) substr_ctl(str.2, 4, 4) substr_ctl(str.2, 3, 4) substr_ctl(str.2, 3, 5) substr_ctl(str.2, 3, 4, terminate=FALSE) substr_ctl(str.2, 3, 5, terminate=FALSE) substr_ctl(str.2, -1, 2) substr_ctl(str.2, -2, -1) substr_ctl(str.2, 4, 1) substr_ctl(str.2, 4, 1, terminate=FALSE) substr_ctl(str.2, 4, 1, carry="\033[44m") substr_ctl(str.2, 4, 1, carry="\033[44m", terminate=FALSE) substr_ctl("hello", 5, 5) substr_ctl("hello", 6, 6) substr_ctl("hello", 7, 6) substr_ctl("hello", 6, 7) substr_ctl("hello", 7, 5) substr_ctl("hello", 0, 6) substr_ctl("hello", 0, 5) substr_ctl("hello", 1, 6) substr_ctl("hello", "1", 1) substr_ctl("hello", 1, "1") substr_ctl("hello", "a", "b") substr_ctl("hello", 1, NA_integer_) substr_ctl("hello", NA_integer_, 1) # Nested substr_ctl(rep("\033[31mhello\033[m", 3), c(3,2,1), c(3,4,5)) # Preserve attributes str.3 <- structure("fu\033[42mba\033[0mr", class="foo", at="bar") substr_ctl(str.3, 2, 3) # Turn off sgr substr_ctl(str.2, 2, 6, ctl=c('all', 'sgr')) substr_ctl(str.2, 8, 10, ctl=c('all', 'sgr')) # Make sure things stay in order substr2_ctl(rep("o\033[31m ", 2), 1:2, 1:2) # bad sequence at beginning or end substr_ctl("hello\033[41b", 1, 5) substr_ctl("hello\033[41b", 1, 6) substr_ctl("\033[1p\033[31mA", 1, 1) substr_ctl("\033[1p\033[31mA", 0, 1) substr_ctl("\033[1p\033[31mA", -1, 1) # Good/bad sequence at beginning substr_ctl("\033[31m\033[1pA", 1, 1) substr_ctl("\033[31m\033[1pA", 0, 1) substr_ctl("\033[31m\033[1pA", -1, 1) # Good good (test re-emission) substr_ctl("\033[41m\033[1mA", 1, 1) substr_ctl("\033[41m\033[1mA", 0, 1) substr_ctl("\033[41m\033[1mA", -1, 1) # Re-issue when state change out of substring str.4 <- c("A\033[45mB", "A") substr_ctl(str.4, 1, 1, carry=TRUE, terminate=FALSE) # Incomplete sequences substr_ctl("a\033[42", 1, 1) substr_ctl("a\033[42", 1, 2) substr_ctl("a\033[42", 1, 2, terminate=FALSE) substr_ctl("a\033]8;;END", 1, 1) # Incomplete, but we know it's a URL, so we remove it even if past end substr_ctl("a\033]8;;END", 1, 2) # But leave it if not terminating substr_ctl("a\033]8;;END", 1, 2, terminate=FALSE) substr_ctl("a\033];;END", 1, 1) substr_ctl("a\033];;END", 1, 2) substr_ctl("a\033[38;5mb", 1, 2, term.cap="all") substr_ctl("a\033[38;2mb", 1, 2, term.cap="all") substr_ctl("a\033[38;2;255mb", 1, 2, term.cap="all") substr_ctl("a\033[38;2;255;255mb", 1, 2, term.cap="all") # Select leading controls substr_ctl("\033[45pA", 1, 1, warn=FALSE) substr_ctl("\033[45pA", 0, 1, warn=FALSE) # NA handling substr_ctl(c("AB", NA, "CD"), 1, 2) substr_ctl(c("AB", NA, "CD"), 1, 2, carry=TRUE) substr_ctl(c("AB", "CD"), c(NA, 1), 2) substr_ctl(c("AB", "CD"), c(NA, 1), 2, carry=TRUE) # Old vs new term.cap behavior (almost certainly captured already, but adding # specific tests). substr_ctl("\033[38;5;4mA", 1, 1, term.cap="bright") substr_ctl("\033[38;5;4mA", 1, 1, term.cap=c("bright", "old")) substr_ctl("\033[38;5;4mA", 1, 1, term.cap=c("all", "256")) substr_ctl("\033[38;5;4mA", 1, 1, term.cap=c("all", "256", "old")) substr_ctl("\033[38;5;4mA", 1, 1, term.cap=c("256")) substr_ctl("\033[38;5;4mA", 1, 1, term.cap=c("256", "old")) substr_ctl("\033[38;2;1;1;1mA", 1, 1, term.cap="bright") substr_ctl("\033[38;2;1;1;1mA", 1, 1, term.cap=c("bright", "old")) substr_ctl("\033[38;2;1;1;1mA", 1, 1, term.cap=c("all", "truecolor")) substr_ctl("\033[38;2;1;1;1mA", 1, 1, term.cap=c("all", "truecolor", "old")) substr_ctl("\033[38;2;1;1;1mA", 1, 1, term.cap=c("truecolor")) substr_ctl("\033[38;2;1;1;1mA", 1, 1, term.cap=c("truecolor", "old")) substr_ctl("\033[107mA", 1, 1, term.cap="256") substr_ctl("\033[107mA", 1, 1, term.cap=c("256", "old")) substr_ctl("\033[107mA", 1, 1, term.cap=c("all", "bright")) substr_ctl("\033[107mA", 1, 1, term.cap=c("all", "bright", "old")) substr_ctl("\033[107mA", 1, 1, term.cap=c("bright")) substr_ctl("\033[107mA", 1, 1, term.cap=c("bright", "old")) # Detect changes in last truecolor byte str.5 <- c("\033[48;2;100;100;100mAB", "\033[48;2;100;100;100mCD") substr_ctl(str.5, 2, 2, terminate=FALSE, carry=TRUE, term.cap="all") str.5a <- c("\033[48;2;100;100;100mAB", "\033[48;2;100;100;101mCD") substr_ctl(str.5a, 2, 2, terminate=FALSE, carry=TRUE, term.cap="all") }) unitizer_sect("Obscure escapes", { # illegal 38/48 tryCatch( substr_ctl("\033[38;6;31mworld\033[m", 2, 3), warning=conditionMessage ) suppressWarnings(substr_ctl("\033[38;6;31mworld\033[m", 2, 3)) # illegal colors leave prior color unchanged tryCatch( substr_ctl("\033[31mhello\033[38;5;256m world\033[m", 7, 8), warning=conditionMessage ) suppressWarnings(substr_ctl("\033[31mhello\033[38;5;256m world\033[m", 7, 8)) # fraktur and double underline and prop spacing, and other odd ones substr_ctl("\033[20mworld\033[m", 2, 3) substr_ctl("\033[21mworld\033[m", 2, 3) substr_ctl(rep("\033[26mhello \033[50mworld\033[m", 2), c(2, 8), c(3, 10)) substr_ctl(rep("\033[61mwor\033[65mld\033[m", 2), c(2, 4), c(3, 5)) # unknown tokens tryCatch( substr_ctl("\033[56mworld\033[m", 2, 3), warning=conditionMessage ) suppressWarnings(substr_ctl("\033[56mworld\033[m", 2, 3)) tryCatch( substr_ctl("\033[66mworld\033[m", 2, 3), warning=conditionMessage ) tryCatch( substr_ctl("\033[200mworld\033[m", 2, 3), warning=conditionMessage ) # bright colors substr_ctl(rep("\033[91mwor\033[101mld\033[m", 2), c(2, 4), c(3, 5)) }) unitizer_sect('bad args', { # bad args hello2.0 <- "\033[42m\thello world\033[m foobar" substr2_ctl(hello2.0, 1, 2, warn=NULL) substr2_ctl(hello2.0, 1, 2, tabs.as.spaces=1) substr2_ctl(hello2.0, 1, 2, tabs.as.spaces=NA) substr2_ctl(hello2.0, 1, 2, tab.stops=-(1:3)) substr2_ctl(hello2.0, 1, 2, tab.stops=0) substr2_ctl(hello2.0, 1, 2, round='bananas') substr2_ctl(hello2.0, 1, 2, term.cap=0) substr2_ctl(hello2.0, 1, 2, term.cap='bananas') substr2_ctl(hello2.0, 1, 2, type='bananas') substr2_ctl(hello2.0, 1, 2, ctl='bananas') substr2_ctl(hello2.0, 1, 2, ctl=0) }) unitizer_sect('`ctl` related issues', { # Make sure SGR end properly detected substr_sgr("\033[31;42mhello world", 2, 4) # Repeated SGR substr_sgr("\033[31m\033[42mhello world", 2, 4) # Intermediate byte (this is not an SGR!); tryCatch due to inconsistency # on whether call is included in condition message tryCatch( substr_sgr("\033[31;42!mhello world", 2, 4), warning=function(x) conditionMessage(x) ) # non-SGR CSI mixed with SGR when not parsing non-SGR CSI substr_sgr("\033[55;38l\033[31mhello world", 2, 4, warn=FALSE) substr_sgr("\033[31m\033[55;38lhello world", 2, 4, warn=FALSE) substr_sgr("hello \033[31m\033[55;38lworld", 7, 9, warn=FALSE) # Mix of escapes substr_ctl("\033[55;38l\033[31mhello world", 2, 4, warn=FALSE) substr_ctl("\033[31m\033[55;38lhello world", 2, 4, warn=FALSE) substr_ctl("hello \033[31m\033[55;38lworld", 7, 9, warn=FALSE) substr_ctl("hello\033[55;38l \033[31mworld", 4, 7, warn=FALSE) # C0 / nl substr_sgr("ab\n\tcd\n", 3, 6, warn=FALSE) substr_sgr("ab\n\033[31m\tcd\n", 3, 6, warn=FALSE) substr_ctl("ab\n\033[31m\tcd\n", 3, 6, warn=FALSE, ctl=c('all', 'nl')) substr_ctl("ab\n\033[31m\tcd\n", 3, 6, warn=FALSE, ctl=c('all', 'nl', 'c0')) # Index reporting substr_sgr(c("\a", "b", "c"), 1, 1) substr_sgr(c("a", "\b", "c"), 1, 1) substr_sgr(c("a", "b", "\ac"), 1, 1) }) unitizer_sect("Rep Funs - Equivalence", { txt0 <- "ABCD" ## Basic equivalence identical(`substr_ctl<-`(txt0, 2, 2, value="#"), `substr<-`(txt0, 2, 2, "#")) identical(`substr_ctl<-`(txt0, 2, 2, value="#?"), `substr<-`(txt0, 2, 2, "#?")) identical(`substr_ctl<-`(txt0, 2, 3, value="#?-"), `substr<-`(txt0, 2, 3, "#?-")) identical(`substr_ctl<-`(txt0, 0, 0, value="#"), `substr<-`(txt0, 0, 0, "#")) identical(`substr_ctl<-`(txt0, 2, 1, value="#"), `substr<-`(txt0, 2, 1, "#")) identical(`substr_ctl<-`(txt0, 10, 12, value="#"), `substr<-`(txt0, 10, 12, "#")) identical(`substr_ctl<-`(txt0, 2, 3, value="#"), `substr<-`(txt0, 2, 3, "#")) identical(`substr_ctl<-`(txt0, 1, 5, value="#"), `substr<-`(txt0, 1, 5, "#")) identical(`substr_ctl<-`(txt0, 0, 5, value="#"), `substr<-`(txt0, 0, 5, "#")) ## Bug in R means we can't use identical `substr_ctl<-`(txt0, 0, -1, value="#") ## Recycling rep1 <- c("_", "_.") rep2 <- c("_", "_.", "...") identical(`substr_ctl<-`(txt0, 2, 3, value=rep1), `substr<-`(txt0, 2, 3, rep1)) identical(`substr_ctl<-`(txt0, 2, 3, value=rep2), `substr<-`(txt0, 2, 3, rep2)) txt1 <- c("AB", "CDE") identical(`substr_ctl<-`(txt1, 2, 3, value='_'), `substr<-`(txt1, 2, 3, '_')) identical(`substr_ctl<-`(txt1, 2, 3, value=rep1), `substr<-`(txt1, 2, 3, rep1)) identical(`substr_ctl<-`(txt1, 2, 3, value=rep2), `substr<-`(txt1, 2, 3, rep2)) txt2 <- c("AB", "CDE", "EFGH") identical(`substr_ctl<-`(txt2, 2, 3, value='_'), `substr<-`(txt2, 2, 3, '_')) identical(`substr_ctl<-`(txt2, 2, 3, value=rep1), `substr<-`(txt2, 2, 3, rep1)) identical(`substr_ctl<-`(txt2, 2, 3, value=rep2), `substr<-`(txt2, 2, 3, rep2)) txt3a <- txt3b <- c("ABC", "ABC") substr(txt3a[2], 2, 2) <- "_" substr_ctl(txt3b[2], 2, 2) <- "_" identical(txt3a, txt3b) ## NA handling identical( `substr_ctl<-`(txt0, 2, 3, value=NA_character_), `substr<-`(txt0, 2, 3, NA_character_) ) txt.na <- NA_character_ identical(`substr_ctl<-`(txt.na, 1, 2, value="AB"),`substr<-`(txt.na, 1, 2, "AB")) }) unitizer_sect("Rep Funs - SGR", { txt1 <- "\033[33mABCD" txt2 <- "\033[33mA\033[44mBCD" txt3 <- "\033[33mA\033[44mBC\033[1mD" `substr_ctl<-`(txt1, 2, 2, value="#") `substr_ctl<-`(txt1, 2, 3, value="#?-") `substr_ctl<-`(txt1, 2, 3, value="#\033[32m?-") `substr_ctl<-`(txt1, 2, 3, value="#\033[32m?-\033[0m") `substr_ctl<-`(txt1, 2, 3, value="#\033[0m?-") `substr_ctl<-`(txt2, 2, 3, value="#\033[32m?-") `substr_ctl<-`(txt2, 2, 3, value="#\033[32m?-\033[0m") `substr_ctl<-`(txt2, 2, 3, value="#\033[0m?-") `substr_ctl<-`(txt3, 2, 3, value="#\033[32m?-") `substr_ctl<-`(txt3, 2, 3, value="#\033[32m?-\033[0m") `substr_ctl<-`(txt3, 2, 3, value="#\033[0m?-") ## Terminate `substr_ctl<-`(txt2, 2, 2, terminate=FALSE, value="#") `substr_ctl<-`(txt2, 2, 3, terminate=FALSE, value="#\033[32m?-") `substr_ctl<-`(txt2, 2, 3, terminate=FALSE, value="#\033[32m?-\033[0m") `substr_ctl<-`(txt2, 2, 3, terminate=FALSE, value="#\033[0m?-") `substr_ctl<-`(txt1, 2, 3, terminate=FALSE, value="#\033[0m?\033[45m-") `substr_ctl<-`(txt1, 2, 3, terminate=FALSE, value="#\033[0m\033[45m?-") txt4 <- c(txt2, txt0, "\033[39mABCD") ## Different lengths `substr_ctl<-`(txt4, 2, 3, value="#") `substr_ctl<-`(txt4, 2, 3, value=c("#", "?")) `substr_ctl<-`(txt4, 2, 3, value=c("#", "?", "$")) ## Lengths + Carry; note sequences in middle of `value` boundary are treated ## differently than on the ends. `substr_ctl<-`(txt4, 2, 2, carry=TRUE, value="#") `substr_ctl<-`(txt4, 2, 3, carry=TRUE, value="#\033[32m?-") `substr_ctl<-`(txt4, 2, 3, carry=TRUE, value="#\033[42m?-\033[0m") `substr_ctl<-`(txt4, 2, 3, carry=TRUE, value="#\033[0m?-") ## Weirdness here because the 39 in `value` causes re-issue of 45. This is ## correct; a consequence of the mess of termintate=FALSE in replace mode. rep4 <- c("\033[32m_\033[45m", ".-", "\033[39m__") `substr_ctl<-`(txt4, 2, 3, carry=TRUE, value=rep4) ## Lengths + Terminate + Carry `substr_ctl<-`(txt4, 2, 2, terminate=FALSE, carry=TRUE, value="#") `substr_ctl<-`(txt4, 2, 3, terminate=FALSE, carry=TRUE, value="#\033[32m?-") `substr_ctl<-`(txt4, 2, 3, terminate=FALSE, carry=TRUE, value="#\033[35m?-\033[0m") `substr_ctl<-`(txt4, 2, 3, terminate=FALSE, carry=TRUE, value="#\033[0m?-") `substr_ctl<-`(txt4, 2, 3, terminate=FALSE, carry=TRUE, value=rep4) ## Reference for bridge against end of prior `value` substring txt5 <- c("ABD", "DFG") `substr_ctl<-`(txt5, 2, 2, value=".\033[45m", carry=TRUE, terminate=FALSE) ## Tabs txt6 <- "A123456789B" `substr2_ctl<-`(txt6, 2, 9, value="\t", tabs.as.spaces=TRUE) `substr2_ctl<-`(txt6, 2, 3, value="\t", tabs.as.spaces=TRUE) `substr2_ctl<-`(txt6, 2, 10, value="\t", tabs.as.spaces=TRUE) ## Encodings txt7a <- "\u0160os" txt7b <- "sos" txt7c <- "so\u0160" val.scar <- "\u0161" Encoding(`substr_ctl<-`(txt7a, 1, 1, value=val.scar)) Encoding(`substr_ctl<-`(txt7a, 1, 1, value="s")) Encoding(`substr_ctl<-`(txt7a, 2, 2, value=val.scar)) Encoding(`substr_ctl<-`(txt7a, 2, 2, value="s")) Encoding(`substr_ctl<-`(txt7b, 2, 2, value=val.scar)) Encoding(`substr_ctl<-`(txt7b, 2, 2, value="s")) Encoding(`substr_ctl<-`(txt7c, 3, 3, value=val.scar)) Encoding(`substr_ctl<-`(txt7c, 3, 3, value="s")) }) unitizer_sect("Rep Funs - Corner Cases", { ## Include trail when selecting past end of `value` `substr_ctl<-`(txt2, 1, 3, terminate=FALSE, value="#\033[32m?\033[0m") ## Only portions of string that are replaced are modified; leading and ## trailing controls remain, possibly causing redundant sequences when the ## lead and trail sequences are zero width, particularly with terminate=T. txt8 <- "\033[32mAB\033[45m" `substr_ctl<-`(txt8, 1, 2, value="12") `substr_ctl<-`(txt8, 1, 2, value="12", terminate=FALSE) `substr_ctl<-`(txt8, 1, 3, value="12") `substr_ctl<-`(txt8, 1, 3, value="1") `substr_ctl<-`(txt8, 1, 3, value="") `substr_ctl<-`(txt8, 1, 3, value="123") `substr_ctl<-`(txt8, 0, 2, value="12") `substr_ctl<-`(txt8, 0, 3, value="12") ## Zero width gets inserted `substr_ctl<-`(txt8, 1, 3, value="\033[1m", terminate=FALSE) ## Errors tce(`substr_ctl<-`(txt8, 1, 3, value="A", carry="\033[41m")) lat <- "fa\xe7ile" Encoding(lat) <- "latin1" tce(`substr_ctl<-`(lat, 1, 3, value="ABC")) ## NA handling txt.na2 <- c("AB", NA, "BC") `substr_ctl<-`(txt.na2, 1, 1, value="#") txt.nona <- c("AB", "BC", "CD") `substr_ctl<-`(txt.nona, 1, 1, value=c("#", NA), carry=TRUE) }) fansi/tests/unitizer/tohtml.unitizer/0000755000176200001440000000000014213626165017552 5ustar liggesusersfansi/tests/unitizer/tohtml.unitizer/data.rds0000644000176200001440000013172114213626165021202 0ustar liggesusers} `\GyJ%K%s8*Dvߞl'k7q8G u{(+ G8J)B[Pz@/ЖB -P(PRB7dɖYy7||3}̛7]@5]o-uN;ZJTdItwx(: BaƪUV*lum ?!M{:k+t=Į{ [u&u'm孪5˥<#}:;YI?$0XCV,5'}` 7 W %Gf=Msyk(_4ClR~`U8xGR\2<-Vrv/9p4[-䇎zrXg㇪nzj| ;禲7ym$CPʲV ҙB|v#'n|iW'rv:].<"f2[:74W.͔-oR57aw1^V2TdC"/ܱ~q!P*_S͕r*RC:34}v"huʭTޛPv\8<-)ʒhyZsԆ]o3ti~N,DB twZ, #|;t1e)MrE6.rm/]kFIa>s)֖|n-_:}Mz!Usϝ3flr|¨+sEkΌ5ӆRС$dEm(#VIh-mYW=# [n͔Kũ=vF]1tB*V!/](0 3d @4|0㳹YAfFiH9v1.V˥qzt#u.[cr8cdv_}B-,˖eTJUcԸP7&8|jdSåQ`ş@1U6|BuqUټD>7iMZŊedY xLe֚2&]^cP"#*+4hX9/0G4L(!_Hj]6li`6[u: ˘XAbCqOO=:r1FSeV`sMc0ϱ X=b+)01eÇ?9tcnjG@C'8y!Ѱ3>u}1MZIX\:KZ[ҜӸ9֖sIre\}n6J>-m)%'()!ĽcVMb1t\4>xΘ&Ղcvy뗌ICsv|;cq fIڽSpڐę&rAWv$O T&PđʖŚGGTh^r)y { }Ժ_O;/5M帤%栄vYtZVcXjVcM,ػ.xJo+vgB+[ިv]zX՝VwZݭ-u~#́<{:::jU&O)tto /OS:iqM}AKk>/3ڦwx)ۉ:'r\nPVvGL$DbuzCi-;wy8jdb zE!`79{v}b`EM{Nx8+|/>]"7Mvm\S g 0sv>K(6чjNBjhG]yj_BKvAKd]ΐ5zdc;(d]uapwՊ.D.L"6L"mR%!'"LƓ/ X'dZropV0dBMtBU HD9Iش8'b$b"VLDlZ SbSbSbSbSbSbbbbbb OzJL 3b3b;!X™ߦDlZ oc"V, ~goۘ8 }ߦE9%9%9%9%9%9%9-9-9-9-9-9-9#9#9#9#9#Y\T&o g~i+pX7mZ oc"V, ~XXXXXXXXXXXXXXXXXfoDFJ)QoDFJ)QoDFJ)QoDFJ)QoDFJ)QoDFJ)QoDFJ)QoDFJ)QoDFJ)QoEFZiQoEFZiQoEFZiQoEFZiQoEFZiQoEFZiQoEFZiQoEFZiQoEFZiQoxތ72Ȉz## FFQodDFFQodDFFQodDFFQodDFFQodDFFQodDᙘdDFFQox)ɽ v;[3HnSϽڿAƒϽ?65()ގD_ M;{{qڥmvj+.-&n駲vzr~v*V,A~t JunVey.EE/ vyK҆zR^KyWѫzRիV^[zIo%իV^[zIo%իxb닆}!"^9s'.t%t쪋_pHqt_;qxLu1bŊԈ)!Winxr 4O 8siqȁ+,JqNSPr Rn\ڍܹ&"Sps1!!!J Ε {vːvːvP}͝+B٧\ rV-Ldݙڼ>b3a+䀭P9x#lgbW[ӎ+!!![l:Wv+p^Sps1!![!g*y%c9d2d2`+8FqN;ޙ."L+lgjW^982r .9`+8S@B Μ/u2{rːrːrˀp8JeHeHeHeVpoΕ :12n2nRXp&g6/ߧL*!l;A1 )w,ܱL8hܧ] rHeHeVHcEټ9222`+ܱL8Xqːqːqːqːq%̅8pAxrnrVp;6SpXHc!펅; 畈A iw,ݱvǂ3iἒSpv1!![!g^yN=rȸeȸeȸeȸȸg`-v&27LWG wJBW~i5aښ0oVQiaq{fR-qb{ZsE?y;Wlehr6[NV23hsa;Yp |7,W'NsQ;K;%&Fӓ߭>M<vQ 7QSp^tlf8_\z5/"`R*X/"З .'>v\o{'2vMlY<7~ ۸Hp̸ pl '=`=#d$94ff̖Ãߴ0ٜBvi 9fݤ f$py`{~u;WnbE ţޅIf 8Cs2[{.{r|=AD'Axl I҈ a%Zҁ{,;NGSrxTn=fdY;^kwX*wqfoņtXsϺl7Հ/ +i<`0N_!}FT&3HC-CÄ鐎EGjL1M˜y'd4R,*%N eXT*_^xǢ#5w)EՂ֕uXt-;B 33L`pw 0͸6=O~~7|pVlc] >=8: FMCGF ƅ9K4GƮ\q1I 4+|^:x*ޠ̖ث"ae7e@wre]|5ǝ <[Yv쮣`8?nf2_a)3uvCw-hDi 86ZA;ߺ5/S4\M櫕YG#^7+zk5)dXa%=Rդ]pZ,<k1|6[Ε+LwA۶N':=O'ylW6S2 $^8%4Q'J(,'/es\< ?f'+~5]z^d@Mnv9]A#S4jErg\eY>ƐTn.(H W[(.à2UA4ZAR!7CagㆱPbsVds2}w!s36Wg6]2bcDiMN=y߾GOV2sKf\ٳ._٣ L@3\3|{աßv _{sGu~!`ua jYݮJ"YLJyGּKV2ᓆ#.ӃF8r*܂#/ڠwM} i GRN6۞-8[i|HN+<>bgI_p6Wg +6YĠ"֪3k"p6C,uяAHeG|0b9oJ+51F;p2\3|}-Bs+m֩ jpVmBxQBǘnjwY(Sٻ^yO<);.ʾqIXT"씳n4MZ~o8SzLrEǪoΖF5-I==fziZla#&xQԼ$vӹ`7M$Trl)4zaY8[3-a "9J/Z2dx7,On&Q3ҹb@=W8;%JT\iJ?Y=lqѭnءgLV1hr_r-:jĚ8]{Z:*p@7M[SGsO昩}|Wh|3I-l rxŏ+l%uo {GC.v{x3 w-Qzw; &o U >x[(.Cxl5Y3 uGr q }q;B.Ă q[伸+葿) ynԏ|/o 7¸%NHpۯGwH!qwyy[ =baz ={|,tJ?$X(C|@ce1ȟOH< <9 9 yO/##~|\R~JlIG "QQ?=G,XG/& D?AwL/c<9?@ $_k%xZB!x OJIBؾo =pK ҿ{ 9Ϋ(A]x~{ @9Dw~'9D,7~Mhj=FX>L " ݄oO  _cK"c},|NBODX} ! ~`#>,#0 >0J) }@qO/X?IGDIcJo >q|:o9~a@o#x!l, o0xo=Pd5wP6E[g!~@!@= 1?zݿIH=B$ ~CWGK[8l?A _-m':q-S?0Cg6e ]b{g[J+@-$"5zAxcOG>7c!0[2 g -wI1a& i  laA =7 ~&D%x^~ fZF%x?J:Ÿ;%x'6 _J"(.} د6VZ~FB~ _-GZ~O[g'!~@O<_^c,"q^+O&[|d@?OW#gUbf@,)^!G$%ODP#,x}6>&X~@ ooh,$x#7YLD~A|%@wy&[e%zCa}gY8Q|<f?J ? /; yH"; %}R"~q<@ ҿR?ZO~E'm #= ًBX@x򧀏>)'</|ғ_~8A?1h#~G~}ߗn'sK; ?@m4Ӟ]AO}sx wû 7SV\mx5#ʧ^Q? xgFo@V x).َ熈88~[ z'}!/>2XB|`[/v  SX z"9 Ϯ~Zvίoecuo /c{~@~uCNQ~=ս5D7&3}|GkmeC\au;ϭLW$(3}ܺ"ڮ =K Do'wHO)q' g$GL C@a딄"QGw&ӭpg! =?JCbdz ?G'$C~!Q>?F&;|O;oH9@ "4@\c3Xg)13}`<Ծ_<Z-G 7b)yI[ P?<-!'zHI??^=/ {DJ ,C|_G"Bgx,< =b›%I~odA|@(%7C~ 5K? Oy,y7 +z7X`sP{V(({=#=sHw~Ys?IsHG! Yme׶$XQ ~+(6mFB?)\|~@Gx & O7?B k=OÛ><")?xW >+<f_>W+͟Ͽ GDR#oYp?_,| OA30H/ ?>)|^l66&0>:=6ؾmLm{D zEsHKm|}6A˥*@z__^u CL?fM psՏml.vD[6 @ 6擷 Ho듼~Q(.I? ?}z"m! C@__,G g._vl@?+ &q"J7" [D% ~+N ߖ#wd~+, qSAEA!moHH~&E w~7!(o{?2>0L,|MTc?$&X?)#9 =s >  %|MVA?-mEDȟοsxM/ b}I1%^q|ھ 27 ~ YE;w'b#^ rGzȟӺ^;>1BdȿM?Y_8~/%޺;!~3#; ~ @⿭K0`P#q'bsԏqn#6BU}dC ,$K @c,JI,< }O)3 >0DO0aQ z?%8ΕI IO'Հ}e=,DB+K p7Yx%-icbW# " >L zL z3}I D} ZӾocC ,|PBA"_a]@N~OBE[U~ }߭GFA߂QU#ߒԏ#@> :O  =?I|/#, o&#?!-i) x@lߏ) >0D  aQT#ԏ߿!3 D+?zӾ_`KC ,|WBD"`+@e%G_!-i~x@l߯)?| m߯ W=~}Eg-?mBӾ @0^ =SAf2. =?m vA E=.>z!>L z=oԏ/ǹ3 D8}?-m,lAb6 =N",\ DWKB!-Io:=IAgi  =YR?b9ΕV8}7xwf᠄@o&N =},! 7Gq ,0(1=+w"Dt}Oz B|({XxDB%^a@f},## mYxb>GO# @ھ'Xx:ć D?GOԏI"?@D}}#i)!@z?M"r@?Y =}B }(iαP0(Gȿ,m߳D~&D}Asy}+GzV17G<C|/ گ#|/@|?+Xx$ z*@Ne+yς9 |?I/ Ao#x,íM@ >p7kB|?HW%?=7IHp ;AY C [$o%a1v NCyD!B" 7 ,{=>"G#^Q>g<3?b>o!IC~+(?<}3X8 _#O|/@?o_@V_`|9 %oX[ g4$JzNR~J9Ig==bK m!~+GLWD_O  b|1[#"Df;<7I)J C! ?ߟC 2z `(J E=.*B'2hoPc6HC_r-O߶o]yc@o!@ۓz;De4ۣGC-?G!~ؿ" zo'%Qh_/T#I귗_"/ſWjW|@ڿ_Em3\@lC ^_OmO|<GHp[ 9 gGC0}!kzw.';]:w__z/{ c%^1Rbw >N w> p6y?A o>@wg8S=z  Y$o$/F =$oW^dS@l߿R#OUb?g!~;X0 =,h!fX"gG  ߐ#/- _~QG_&!!~C "aFaq~Hȟڿ&?[GDw%x]B%_SI@o@ >p$Pӏ ~@Џm@_Gi}s?wD?A7z7!>y3]Ա 7Du0]o{|tU@;K ѿװpo%Gǵ z_E %; N E;#w4k; f?$ȿ":n>?KtD$V ѿc D+v1 CR#aI8W~b&c:F$xp!$o(c9?){%x俗D쓔/r| > +w&x'p/A =^~2$? Ow?#_p77II=iH gz7& ~+? z?AWfaa z?K;33Y,TB|@g}" KoHoG!@?Jws?D zNR?'&l /#x1ě}G"  DŒ' 2W^Qau'X*; dDOJSG?zo;G,į_d%~8C|'8‡$](Eǯ. z.9|DG>"&V>=G~HyϋCxY(oHGazQ%ǟ1L ?e%c5ٟAb}BAwK>S8HB|FA?+O/i?"/U!+,@BJb  Doۇ%k D Ao,;L z,߿|Ho'?0B]Q=IQ=G>! sZK on3 zF[%a_fR>f6tC|@,_M m&=|Lm1lتm8 7@|?6\BTBo ^~7`@fQ7)葿A[q _K _G|; ~X z$?#~wp{J!Hw !~ؿU# H`(H i,ABM"c,x@K @nxKHtB$ #?) "ID,LJJ ""Yr<~~@_d$#@?G,Kc,<.# ?L K>D  D/f'$x$K$$/';B #^+#8XI?o -A ?)ѿ BDĆ=}VR,{D6#{n';!~WXx&. Մݤ|&s-q"O<} gz ʗ͗6|w$C5(?S)50_?! DO > \ADTcׯx-?{,|{;.?G>cϳ@+i/0>_!@\hg5 A'<& ߂QtK Y@w? ~@ >0I,Goc~@?d%x_B@l俷Fqn#8?G'˝!@Og7 z俑{vbBQ#^HG6&GUh3[y5G3[yw5GYt^+#>E :&\& Dǐ /C ?wC|(֝%{iB| zo|?@?L tM(G3]y7JQI.w߫G>@X\ qK7N"KwK} ( !@1(G  YH G M##[D%]"e$x{V~7,|HG""?  F (N gOH~@g@;JGED"aY?CC"|I= _}@_?~q* 3 "#! |_~q~K.ѿdlWw>C 3z w>CA  zC g|~r[ &A>|QJ9~D?s-OS:YA~]]ϔ#nH׵仃@_&=!kص FXxHB"D,]WCA gu:"GWbeVGk }@uG gIG7[D"]$x俋J w-]G~ C,%x&M@tiWBG B?H O^I"'a%x?NC"4 DwpHGI {$Wsw@,#w"#|/@Oz /x@/T#|@NgAvj,n<^/J1|(W*%J"G"q,o =-6Yxo'AA$AIŸyďM[$Gw|| H+, }' c"n[mׯAVQ>V#_O{~<zD,kO)@tgX`>XAjn ~}%= ~(,#jdP7OJ z$||Ax(߇X8 |sz7$Yx&=¼?7F,_E G?K;Rd~&a!bfXx@bxw?K,I?D G%wKşπ緼<³!~#y?7A|X*$B߿_@NX`'!@_z$w{) /n~/S#K}5z@O^OC|Xb$  ^7F%ד zF _?GWM <Yy=>p)/~|LwD?_?zЧ 3!U@,߻ 0I~_|N oH+ D~ ⑞lǷ _G?oC1 q|HG  ? b!?gx !Od ~#@2K%{ D}oJ~,|wo< _~+6d}7 {D_Q#0@0{u%ǿ(%C)-x}C߃.#|7@:C$[X n.~.ڸUB9H귑vF ȿD]`?6vNtM<濉Bl [A=gt5E ʟ6#k ?Ɲ@u z俓#o<q3 }@oPAȇ̏9Ζwogaw2+G{  !F XAC ##?򏳐 z,_R"Z]7 Y 7$#)7Zz.%۟e7 gsэzoHFnwXA#i,~Q=?F$6>gHH B?H $7b4ď z}qA]B\YZ)aE8UkKwl.+++++++++v[ +Yܚ+x&"ZY ]τ4'W펂^r^JJA+R]սq ߝ,%Pw7twmmvSu+ySJD\*Q]&cڭzI[%\_K ɲb["6V-XC,nE)P+teWwr? [_;J@PVҭ^;JKw=ꇗiOt+{L,j}qT[  /cˣꥼxѽuBЊxt稗Srik%R 6AqrYa"WĔXWWn3Ksʹ٪?>`!3lʥeܕHWG\Ř-ljtX{ԑcb\ǬGee˖qZg|q++A\4Sxe2**1j\(٢QrpbJR5ũR(O_ j8eeTro:r¸*Zlx`~"4&b2<2kM.q /1()1Y^A1|8k+0 V̇|> urSFhϖX fU^s|ޘ5=N)ƉO?tOgѣ#c4Zg-c0ϱ X=b+)01eÇ?9tcnjG@C'8y!-3ԑbLSV5W9j;[UFϝ;7Td,k:T* ~di.g&2iK?\n/檹,[-&D#.0VevOrGyˠ'Akz!oݻǓ.<Ύ1cXg/=䙱*s٢2oN)Ǯɨ2BpannE.%9 rnVeMNWKgWp(\qJ-JLhIx1N6gk𲣼P+zV\Do/d;hY~]8}] W35hLRwZ|Te[c,3,v̜N_Av6kJ 5aUde_n1Ud2SWV>[:Q)m\h69)#|:AȈϰD4s'3?R*XoS"7xw羏Ì}_.ʹlY >c3W,icT^6z@0u0$b8l8;7-0|?keR {Aô/[s8³"l;9ivpK{T]dTPy\.,q[ x!̚\F8ffF1" P9{^qF$;''?OcΦ:fAoG$NRs01i0A!GWc}Fr&aFgINi*g_S[Y]G+$a^@9 <#Zʨ^\mw&y·#?諓o y[C؇Lk&ڣVT]3I"&wyZp''F87_,-ao+(w7Nj)2c=,0nOûTutn^Of˹|҂ %8%Z\"KpJ*N۬&".O s-Wx1Y+0@]pɋ)U+O6W+'- (2d3[}b^>t1/O.ռgc@v <Ƴ˴MH鎶M/WhC-ɗEn&`V==8-pm[rǿ lΝ_U*V,x/zy4&i~O47$ /ʽQY輸BSTjd $Z#\حYz<$e(q%U*d>[X/XAX^-E9:ɫ?z`# 8uT7g/)kͫ{08=6pEln&ڂ{fip\7Zþ=Ɨ:2c$M$~Pk"zy6JÜo& "&BN\c]2?g $2Hl,4f 6Z5ʩ]x6잰7*CZ %{w%/^Ӱj ӘQBu.mѢ_iVWfju|Iu>KRƓ{_>2ǘŢ徟qs+:IY7pwc4!S6YbgHwrV~B^-yr[o!B9!PYYΆ[-ɲRՠ֋MGR VuV\v'ST.YL1 ˬWYk=Ha\_jvIYE͏eMM}}}9>&l2UR%hxK gklWXbr o XaeNnha"[4)Aj>PD (`mL `%'y/> \:[2Cfz m ޢh [ 37g5޲] '|~vα VGNP+Idi Q*dΒⱣ-?tAf]@&.4MD==b3EqEs=8 z8qrvSu-cͼDYh6p݌%!\8c(OX;ӣٛb_kZn򚮄xFH26 o\T!&^Q/*v >y1vs=Z(%]U zVB႓Zo%j' #j~Wy5< ZT,rܼG-@{ }@E6c^X9y!eÛn'D)*«8kƵ:q%nZܕ/MdX[7:T匧qr&umbUUkaEH[i^n%]z@ҫQ8qmi6)O2" ;g"15+q7Y_܉t{5|E"+ D>Dv(LVyCeƼ֚CTmN0@!/!YEŚtXg:wY{(đctXs΁懰of^-:>eW.m4 Ы-_f `ֳss`;v7 3\y2"-D"i$mEX"!eHG²A%*6rºx[4LsP'3C{h)_j19.8X&Q+k[$&q$ýTֆ4{<_ihV~nBA3:) |/<^%+ZcE.d/˦-x{Ol_BYrgN>܈3e1W62j]tkBMkwBơmŪܻxN.%,{)2AxHM Î7Fk($ȧZYҲU202oenl2Ͽ6.ڷ TMQfHyl:U/>۸6LR/E))͈.g.y"u&tijewSi{BR͚3S./ŒC͑&mNpzwNtw}[wRư%]-<[)wvl 8Dw<)\;]kIyn]@SԚDJW0nq;wz}Nŭ+,|-bnzI=k|)p+a%Ajv=J6UVu~jUU]@)T]?ynL5OwR*'f4DY/%VĪX^bKuuUL]6}XH t ju'MW'sd$YJoK1 F\eo@&X3}pMK"m&W]dL4!^1$lJ 2Ipd2Vlt \+~L9`\ }R+UT`;d%xy-kcLFd2mz#F 4eW"c%V됛؟3ojk۵5 k\5|t%ZC}F4u7$].c$4:*YG韦3669xTlbdccw5*֣rYcxX:7?ጐ5?6n^`\\ 6g)Ȳyhq:ϟ [yl8NOV󏌱:ǐW8a}#|:ߝ7YC$n茧sEIn2 7)~,p֋缈|˔8^|~[g&Xmh(oZt}Xn hcBִ b 8?hw,vEFW1ekeDuiO}ۡ 7T}! .e[o׸XIuc͢ک[Z?utZVο^%JV8)}٫(~ Еq3j]e+U+_ݏ 34096ge+<L|';UX#WVap}K/O|GVMl۔p,DbXpCEpءl%4 F=g%cj.7mbNXdH]Sf>$ m[1zm q=w%۸Ʊwݞ͖sQ+-j|oS(uTcg$fGcvnfGZhxfy+.ŤZj5)KmRVIQnHWXk&EoֆqE!on҆@ ].j A{==H7wQxZ1 P Yjb5>XbLL[c m -Xs$D jKm֣ pF#B\lڿŧM6+4ެMעid4Pg5t@36`ϯ,l&KkKb,qP[bQK -ZiK[rdؒiK&Uhɼ u` ؘ-B2j S[UfnLЂyb> ድ%{*>0\ i|]4 p- BFPpi~`-, pZ _-^n˭ڒbK[[2BK`H_6'ך׼q>RNӴqi~m 1NtMc%6O[gZzlM[=Oo)LOO5jdoFVk6x5md^Fj۵ 3RMl*m,nLãasЈl+VjuCC{/(Q7w|;?7~7GBf!G*\6tvIg Vj NI)Z (@ nV@Ɠt#6㶞OMLnMPxQ=q`LC5&Q"x2粕 ƶ 9Ů-ٹY<cc߼4yNsy9 l*)j`ШZdvE1V*Vՠᝰz] iL53|QYr쵫={z ͯ`_ ~JVi^` ld gIy5Ӛw0iie8La*tn023kiF􊆥${( fYfg] LS\l/S=z#d H@ۗ09=MarP1dF=G A5O0=ҳ붓W3Wy'h=Zx@c =i\`ڰ`r MLb޲Ӈ!.{Q#Ws)D1ժFTӈbQN%Nh3P\n64am{Z5%Hx,j Yv4m%ӯ\MD9=Qvř9w{O(lB2v&31bؽ[0,sԘ(Vi/& kEثmhd+]6WP@@PP+s krݳ| o4_跏a&:L97wheGzx/* Ok&;͌-/r=1;OCV'Ý'qn|hr,6E8L 3K(L\HYeNkXh Zb#o^5苬 r$>LMo(8O$Oy' DŽ)&L1&ŘD)&J11QLb$)&I1#Ce`RT&Ie`RT&Ie`RT&Ie`RT&Ie`RT&Ie2PD "T*A Be2PD "T*A Be2PD "TQ*(A Je2RD TQ*(A Je2RD TQ*(A Je2QĨ bT1*A Fe2QĨ bT1*A Fe2QĨ bTq*8A Ne2Sĩ Tq*8A Ne2Sĩ Tq*8A Ne2HP$ T *A Ae2HP$ T *A Ae2HP$ TI*$A Ie2HR$ TI*$A Ie2HR$ TI*$A Ie0Be0Be0Be0Be0Be0Be0Be0Be0Be0Be0Be0Be0Be0Be0Be0Be0Be0Be0Be޴>ֻ}Bqap3\DE\TE\L\\\B%\R%܈b r1\LA. S)b r1\LA. S)b r1\LA.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.QA.QA.QA.QA.QA.QA.QA.QA.QA.QA.QA.QA.QA.QA.QA.QA.QA.QA.QA.QA.1A.1A.1A.1A.1A.1A.1A.1A.1A.1A.1A.1A.1A.1A.1A.1A.1A.1A.1A.1A.qA.qA.qA.qA.qA.qA.qA.qA.qA.qA.qA.qA.qA.qA.qA.qA.qA.qA.qA.qA. A. A. A. A. A. A. A. A. A. A. A. A. A. A. A. A. A. A. A. A.IA.IA.IA.IA.IA.IA.IA.IA.IA.IA.IA.IA.IA.IA.IA.IA.IA.IA.IA.IA.#\Fr2"eDˈ A.#\Fr2"eDˈ A.#\Fr]SwM5]SwM5]SwM5]SwM5]SwM5]SwM5]SwM5]SwM5]SwM5]SwM5]SwM5]SwM5]SwM5]SwM5]SwM5]SwM5]SwM5]SwM5]SwM5]SwM5]SwM5]SwM5]SwM5]SwM5]SwM5]SwM5]SwM5]SwM5mpYZx,m%A{J+Sڧ=%)]O)S J8TLC5.wX2 4}f" {{cov+ ĺkdOm뙒å.z*[+hK;X+گ,`]+bYZ낗M"d8&)Գ2\&+t9[ ]6hG,ڊpq.vqsU!{:m˾EZq_6ٿ:84a%lOJQ()a2JJDI#SQQ((QTQ(Q(&(Q\Q\)#/DxRFn7lO݅&:}8vNgWsv1`'~vgvgWpv#N2 )$Ϯ)$CϮ)$ϮK^~~IAems?4h FDwD}Fe67]5&gŢDG]ʽ7k~wUDSockW" rD6юR9jߵ~W8jP:JG] G]Y G]=+?0ҎvԯC3f_恿k%{7b ,%;#)ũly <(^s'e~܅Hx >a..a1GR2wlU,cbL}| e{0PpZ39 ^wwX@4x^0g,<}Rj/r *̟#S`Y4Js|%N ΢ATj/XW,N΢ATj/Xc,N[ƒM-Sj #O V9O "9O VD9O e{J{0gR{5gR{J9gR{z=gR{S΢QgEީ^h; p zR{$΢ATj/x5JO8SgѠw73'@{ͦv%վW }pBR{ ן!$վW }pBR{ ן!$վW }pBR{ ן!$վW }pBR{ ן!$վW }pBR{ <Uj^j+W~ŤJ_1R{WL}^j+W~ŤJ_1R{cM}{՟!ԾWbj+^g1v}3JWBL{]߫ !ҮUS^i?C}{՟!ԾW *WW}{߯S^i_1ҮUbL{]߫~ŘJW1v}cj+^#MG3x@yRo2XO+YouXO+YoY2= Em E# Eo>X8-R"bHh/~ExMZATj ^f^Hީ^yUҌSλ ,&6x2~E~cI5y,=8y,=i3l~O:6E'I?Gbv~[Lj!z.;ca2}so0ÉHmx񦨖ݘJtZg .2SLuù &ܮ+j C9dz6 Z{DX1n۱b͊قU$[Hz bh}‰ZBbgh̘Sa2|B^.;]-}_?0}۩@/5z wX]V-g䊵+=c_VpU$Qe#k̯;w[nr\3{1cbfOH`o44|iz$K>M BOR,Oɗ4П4c2?&9&Ggrړ2 4Ӟܘy{-M>eKS9T#q4 $Uȑ}$?VrdKS9Taz;F-̭Wȭ WiLnռDN[r=$r[5I$ӒܪyR%OK%vV{j-cܪyO<%VV{)IH<ZJ9O璒DQȑx"?[$r$O%'bAI"G≸P; zƧ:F-̭OȭZ"ǨUIj&I4Mș@q=/$r&PܤyO$ h3/I"g TKș@q{=$r&PdJș@'k"*.I9ЈHȑ8_II5?$r$TN{r=ԁrړ4 4ӞܨyfiIB-cܪyW V{I4&j3H"-U@9bksH"G|M{Ii{* 5mi$#r=o$gO dHi{ 5ک*0jI"#j7I" UO9mȭ|iCnռߓDNr}Þ$rڐ[5;$ӆܪyߒ'6VO OOOOO5"y×/'^ K^2%/LSE+М&v)|}bDqvy_d?/QRݗhDݛ`-Daɞt_"Sܗ("UKl%}>1lgՒ=Hn,r\x8W.lS^O'i'Mog׿2N־'Uz%Cy%XsYo5Xﳋ{uֿc}6& =W֏ٸ o5XMxh;Ioߓɭ$ʓZ~sN9"ޜٓt}VKߥY1=}6,:7~RWd{u^7H~Ni2޴٨^տc}6YuսXVٸl}V`^o0}l@Ӭi^49~˹J匩V[|KL [+-g3SLx^oIc՜ee(mE|p\P |0J?|8 V>_› K>jQ }U.~6ao@u4;]9Wً$;FZN^t^t= .:_tjY3X56y(WƄe?zࠑI>@ldl9;ƒq֚C5!)?:kxҕje)lDVjtd66w\a.o=GEn:)ʰ"$Ì}O3rE\ƹlȮ84P5}Ԫ ƨe3jNYGLGbΚv֖YKkgM;kWY۷@gէefJ/u^Z;I x;H9ٝ#|֚r(UgQԱCUAC|aF2*cܬU4)c8'Kek|KOeמ8^؅%oE jWP,ڊpҮv+hgӶA%4ؿ|^ >QtAb-a];_ݸ@`qKq5+L rkOF8V97il7媳FdI-bڥw/v%MPOՙ\LNv*ŢnTj 8Zћ!2>4"2wV)BUz$oy$vz¹Mw76RQ.F_^mZjT{k3==S^FO{VI+ޮb@{k].pqwqp@iF{0kԃG{0ڃ>pݝ/ !V瓠wo\mMo˾GV{=Ēhi>~eޏͦD&E[nMnpP7QqTWH".DK՚X.ټ%MPNv ꓾v  -7MT64{<ڣ& ʤw1LFcF mpC_F-/@ݐ{^g4ʍ7V6aM 6Jv0lF/qTj`(;gi&5z@Shmy*1e>h_$f=i:샎y /2ra733|qj5GBv{MSO B! ؿЬ\f:pf6 9O^/:Vdʸ}ʜ5ɒlM)bYm>f\(x7>GΗFiz=R-XI>@Nmf$OemjY+dbĖ|Di.A{NFi WP񵠖AY c%Re5d)LOrM艑U,4(kjE=+sݤ>Y-d-5bsjHF5_F5Z9эȝsK+I hHCV??r…wwH Z[12|_n3h,ݳ@6ehehkI{HWCC z5m7C!a ; ijodN)HLV{݌VZ}%{*Ukh[Ӭc|;W*\UE-&xIFiɖ#OCfM-W|B:jTG@7_=WFsMNLLGt.o%Ptz2x-i(d5#zC1k#h'ֺŸw\{Иh\e. |VZj`@T(+nԛ[]o;ѽZڽ'ؿEۺe+;u8W*Kgn\]{s=p]WһvGlAN.seȹ &:lحSaE[l? zɗp gl!4Y5lԌ8z&5#sbQ'go'Mz$AFSp7cy3ֺv~hIP c2oeGOɏ]$OC7cpCYv7GЯ_ҏ+fgGp_2ZWw'֤ Hݏ)XԻFcPU>D^݌ \/ۍtvL\iIE<囖j1cl^Y}ȏ?H/Nimi+aOj3B*4ӆL:>ZYAD L =#ږY]mETN[巢k+B*VVr#+ZXkVaj;':%NSR 7v3_-F96%zslɴ1Җ3v,nY@/SB*tp7px*966[UF =ƣ~XZ|ܛ5fݤ7gg99p>MnŢ:S'm'Y%Kۮ kZKlZ֞V''ۄL'anBK69v<\ώT{Ѐ 85#P%vqUE#PryYzzUT?P:LQK7^km["ĬE ,Ⱦ)<gvc]*/|Ugy1:sD\zyKG;鮄3v3p:ލbSf)8#@Z޻o˱XbAРrChG!suW8Pٚ_B MYsr6,(g z1-VrArrSQ#;?fZ*q Fcȗ&όǨ=9 :*c,<܏8Ags7::<ǏjcϕYv]#le3GqjPt0(UGQx@p,?΀'cQs,\8W*cPc13"(&J4 0bd!WsNdp~ãqxXA,L |=ꉳ*UE\([S{g̔-gb$ Y0CSFcq]|I+wrKu:Ut%cdgܺKUA#%Խ;: Fm`FF ƅ9<lpd^(K zj\/_&%˧zLh6S/Oϧzpsex4lцP٠u8!%n.(>w(w:{>7I纵P*k*ULkvuNsxK۪{feN3ѱ-mŲlOLG`!y\15ۧ (jo3apf==~$X/%_FDp.y9+u] 3i{`NyO4irJY㿰{˚?axkV~{+D8'ª1o h6WwL#w$uu]8<34M7VR_\I ~+oUܿP&GK1V{cw~z)z-f7Z!1w'YW ?Bcl^PH(f,o5j = ~CS !ZN9ۉXakh.[N?:k` ڔn9qamἶ]#OtrH*[ ,]|7Iz`l*V6bFC@fݵ'OnvKy8S ՞Us<>[q/S=;j65d %O[P]7mr*Pka!5, CEgmghqRnIf<"h~%r}4?Ё,#_=+EE@+U(M܊a9@zD(6Q/A8e>-Xk45mCab>>3_jJqw=Jtl;q9yv~|] CڵxzЊA+C9C99Gbα+-~\=Y=%s^jhW#ДvsV Z1hŠ z z&曃l:`&`0#׊iŠzbS57خzl/V٘V,=v0gb~Z1虇y,Xc<+f]SF87_^hBzЊA+wyDzE;ܼ]1U*V,'ڷhBzҡC@+ӊAO:cŢ'knұC1yVc= ѾF@ГZ1V z'!.= Ys IH/XŨ 2CchCO>bh@~Z1ɇ|,XcM>T{tZ9Knо-o'b~Z1It,XcM:TOT 9hGU[. aBg% Ljj sQm-`>?uwʗ&\qXTݠIq50]CNg!9V5gCѡplh$ @l:[4b7!#gٹ$oŧI2_}\lrb|Ζ035_-KY7b;`Ԭ!KץeV\7˕KG7 ?XHpٚ+Um g Og)?ʉ@@ o ?xuLf3F\ޚ2B6𬖄@Q 9uNjÄs for copies of the licenses. library(fansi) unitizer_sect("has", { has_ctl(paste0(red, "hello", end)) has_ctl(paste0("hello", end)) has_ctl(paste0("hello")) in.middle <- c("world", paste0("hello", red), "wow") in.end <- c("world", "wow", paste0("hello", red)) in.start <- c(paste0("hello", red), "wow", "world") has_ctl(in.middle) has_ctl(in.end) has_ctl(in.start) has_ctl(c(in.start, NA)) has_ctl("hello\nworld") has_sgr("hello\nworld") has_sgr(in.end) # no warning from has_ctl has_ctl("hello\033p world") }) unitizer_sect("corner cases", { has_ctl("hello\033[31#0mworld") suppressWarnings(has_ctl("hello\033[31#0mworld")) has_ctl("hello world", ctl=c('sgr', 'sgr')) has_ctl("hello\033[31#0") }) unitizer_sect("select ctl", { has_ctl("hello\033[31mworld", ctl=c('sgr')) has_ctl("hello\033[31mworld", ctl=c('csi')) has_ctl("hello\033[31!mworld", ctl=c('sgr')) has_ctl("hello\033[31!mworld", ctl=c('csi')) has_ctl("hello\033[31lworld", ctl=c('csi')) has_ctl("hello\nworld", ctl=c('all', 'nl')) has_ctl("hello\nworld", ctl=c('all', 'c0')) has_ctl("hello\tworld", ctl=c('all', 'c0')) has_ctl("hello\tworld", ctl=c('c0')) has_ctl("hello\033pworld", ctl=c('esc')) has_ctl("hello\033pworld", ctl=c('all', 'esc')) }) unitizer_sect("bad inputs", { has_ctl("hello world", warn=NULL) has_ctl("hello world", ctl=1:3) has_ctl("hello world", ctl="bananas") has_ctl("hello world", ctl=NA_character_) has_ctl(c("\033[31mhello", "wo\nrld"), ctl=character()) }) unitizer_sect("deprecation", { has_ctl("hello world", which="sgr") }) fansi/tests/unitizer/overflow.unitizer/0000755000176200001440000000000014213626056020105 5ustar liggesusersfansi/tests/unitizer/overflow.unitizer/data.rds0000644000176200001440000002220614213626056021532 0ustar liggesusers}sHf>\>\vUuuugQejZDRml.*$1U=Lꘫ=1;=3=01nlF47$@R)z }H|:DÃ{0۱bٚiПGSʂZ_q؊NFh2rB2:9 G-~?Q5 &N#eZR#9#uO9LDUm〕xez:w:u 2=UsY+{NIp{cS/=|us룍9L{nO5lm:seCs4ZœIݞn*R@v=V;&yъ\ KynpEum#uE286^`_7wYCJNs∬ !E[1H#҅nTqkkUvdjÚ.Ǎ &Ke0Wi,t8%5O^; }+Ek*PNu[ɓj٢,Yk1; RI{%.yH O hn*,buj?Jf(y3^H=OE N ޘAkj[F( h]4LCQʎ\:請偄ܟ8T]vuB^ kFvhެ41 mVk|rQWG u?R ߈ 1 "aAdm0W}'dTfH k|^\A^AXg,"4$_gQL3$4/6ɱqRE(- 3e8%ZWtmRkybdydz$JlҜY,Mkj ?2Kǖ_pp4NϧS?̼FSբ\SSM]l[ 6p +4cñLolC"x˱4c?)n_ډKOG +b"XfT[$4ݲCk`ϙ.FX)Lmsfe;O7^ ]]u-G `ր $wEvOhv,V-^#ĤA3hӘ(#+5~jX3D[PP֦CM.e ͉mыmOV67W6?{q `x9jŒh;,piMyF4g>)Wmdm{cuk ?h+k^l/6`笒p|y1ļgju20c{)Kss5Ku} in9u~NqбT0ë6K4!0T'=.ǧAz;}SVQPp*Y>i V> IyztEõWaKvl89s/G숡q&+(%)zgK^֗IfS8F6y܎kƩKA"J }:u0A_Ρ~/~T̹nE5YfM7hyx+XJV과iQE>Tq:'E97].dgp2l繤>"ERu >5¸FoDGjcvޤH3ϊHHPlV Xz,v, s|)b߯2|߫G bp/G֕m҇@Oi$s(=#ܫ*P&^$,HC!g_Q`ק٭.B'ȎMGnyoo%X,SMXR͢L]pseX<_0 > ~aX"9F3# ?! ^\S8H_\ puP k6>seuk=En|_ ~ȇxMڻ7UWP-5˾ 1sQ m~q›8fP0 7=۫[<@kZ^xhMc>.F7| l.m4 i)B_73Kå6h@m wg@ˁb Vc+ !M>~uo_Z =-5Ԅ)5)e6\0<}OV8c8~qjQ8 G333gpĝ" Ѱ?-`3yjx|6ڑ>#26⡽ms8 ^Pwd0:ƛqQ/"௯+{Ha:.J;pR'ƾS(S=37`AߌyBл7=^p/33bg7%df)[Jv8[r><`_0`2`rǨ1,^y* _###_V,Kuri }3sT 0mo?~ߙvؒuWdѠX{yMY6V}r}`Q:!Ċ`51C/x5@9@ykzZ7uN~эW\p:l_,ط+7;l$j9[ɐ߻g(cܿ3uZSӿo=Pͱz g]r\l^(:f+`n!:w#?a} Q f/7LƎ?~~!ZNhOiyO+tq bi>fSts ohR#`!F`":[1U (}v /O9]m1- !}}Q~|VwfXx{j?Hpqo1qGY".߿:^Oaow[\k_g(2hɑsc`ѻQ-dü~[g[IdhzQW7@ HFq-p<`?ۀwfbRC\ܠ\'S1Ph.n` Qq/EF+'H:v~ .j}Zb}߫f \>ٞ\)Wd | 7C\ ZnX V "-~Ow81 qov u ߍ~[3bW--eBV/rH nyoSL/l~WKxPfpv:?YZc*t#J=CՉ m~΁ȿi=~߬GyΩ% ]"9'qFQ,/?= i655`k9ؚ[F[l ؚ5QwdTA(,WiN jS:_NiӽY\Rm'-RJ&` 0"`o䐟Tt 3Az^BP Az^`=/nPϝwO$ Hy s1$ M[o3'Ap/\m_-7m}dæurgp*}CWz=<^XB^L0V$m)f&X i/l7Y )Xv}e ŢzEs%!V>~ġW _!A)yhVzYۜXkTHB!f`}+TfRllЁpr(U*^i~_ /+ͫGe#R3褲}"B9Zui UmF@1uͪARJ"XP24_EݺÞknY65ĸfJ%b+(K B&weS D>2 յ$ 6( . 潨 /KwS\-OK2omZ _/]sզV2b;ܬ~w,̱4&8{pEl,TO ^&x^#{A/5rP x^3/׼{ p&,\Dl^ŭaii%\F_wP}b\b^'TĴ)aLKb59n <,v ĦRSBjc~u5 ucMǂVm?kOe׿Esa װe:;d[ щp,yXX4 JvLl|7k4Qԕ3{sf(jyyfݽEXuBU(ۿy|y0یSu*ݧ'L6FM&1hOPU44.i J%fp=`UճUR*"M #M4dyv`]| S9o=.rrrr;rC@n@n@n@nt;+EER1fh!7777Nf7777zQ޵Z>fO(xv}2^=4@/rrrr@_z Yܿ }{  7BIٝK5_j%/><~]E%|}̸̸]ޥz9z2|&BR"}ϦSlޞec,B ]\Tl $u'A5ؗS,m)U!4gx^9YmL`m6~ ;:Q~"p+!*y߾e"'m,!k5*||!VQɩ4o:|x0oT,ZY].^N%׫e<]ZSh=kh0k`M#ǝQhϞ*kےGݵV뿨0uғ(OOV67"zEXe{uhyD ,y)G/6GH):1>UW7$1Z)DZGXoe(:賺_=20򖋒vh3 vT2-B6r);XufNM+8JsoY^Wt?[w?t˲6"/ # }ov͒gf@z@ m=x%Y^,yط6,d)uMQ 6 9Ł3\dU3@8⪣Gdg^a^ރ X ~^ _@|1AI0#?Zjk! Dkǖq_%_0GH&ȁp4 iw_]SWq'ZN7zKV;^MIXnMۗZ ˓ʆ9:?pKp{i 8#yxmfR,J¯0"n!Y ARO0 9wmq%,09t3&dGw[M/}Je%FV&VҀߒч+[>E6wW7vȂA|ka!JȞ(Q(b>gn=k{[o1kFo#|?1_@f#ծP ~c70>wc0Y>2c Zt1qj%6r>PB2=4@hg t vr$cPZaHu)b/~ƽquʻǫ܁չ VgNZTc3K;t0߬OVFar#$OQ} ]D쪨g ͽHCTԦ lJڔtcRlhTߌISVJ 1+`V׬4i^תiYL,R=9=`A-SPϘ&%`Ojӂ=9=9tyBXb"{ VZ6lp+kֱh[%6j*+$ߖ"ˎuHurd vϼ)J_59V[-01lY_gZ>wB졥g=Zoi .yy5,Vtrf:TIϲ?@!V˙KntGF^ ulZߘ;MI.*{_\+J&+ެD:8މhƕB4-]2*By5Xnu*ȹ%VDXea6;i2w|7}k1w NQISn[fn`hJy+vBmzӳ:{ۗd38Mlզ g)lT+yd. ߪiL!vkgKgލM^[/TḤOZDF**4u]-لMuQRPN#;LrV!qD \Ano/DͼМi ӷ;{q~u?맞eɫ@ժA/Vr2iV@+Dvŷ+Be:64v",-~ ():NZ{)RRu-Ү\O*N*MJ)59ǯ [V~ݗ?{Xȼ'|lڝට@姸,qSpELn_9GRMrd(bXK|@!B#++ ֑jė 2QQo#T* K#ݹ]ʏn7mp"G%{ (E?Ȳ;'pNwCpF(X(s(ܩgP wm6.%J-K;^6'\YU!yMMgҟ]_ZX40 bxRU}  @,.:000xq8m x !xmW x}q\8؍q@@,X qvwH1? n  !nmW }vZu)p<_ /`@ ?p6XB8/Prx<QtOi#cjӾxmKux !!ƃ"Zj)&reKNCђj5RGS8;6 @͕ۃjtfansi/tests/unitizer/misc.unitizer/0000755000176200001440000000000015106721057017174 5ustar liggesusersfansi/tests/unitizer/misc.unitizer/data.rds0000644000176200001440000014157215106721057020631 0ustar liggesusers}`DZu%HKE5[,9I@(EюNシ8'/'/{ىӜ)*Y^\Ӵ|(O/дVyyZVY˲+]O[[2aq<H5J3%)panx~ 1N9`1Ţ1`XInpP E]KqoD.Z5l,bHk\9nCn7bQKg%.J(6h5 '`P}Á13F֡@$j5ͦu,J@zH(w.4.@ͼT*?1jPJ#oYK?) iJ#ynvyGO96sHMFPP,:Rªpt?Wy<cD]nn/HIlI͞eœ9h~تFC誧q8FP]皮"jM6@|RG.TzFV.w p?hbq]|Gqi; -^,!-MKTX% KYE 3e, _V`04ȷ`X\#E":ʯ՜uИA F#0N-mѱXd⟁hrL\ĴpH΄Z>r2K\d'D"Fj2K+\bB1BO3rS $j*.1#yHYB"ј>vn|6բJYDvZkNP&uL VǦya Kp E`^\0^FP؉QdZ(G~|\ͪ bD#Yk{'fВLZTOXpBէFߝwvlٺKhުX&\Ύm.#ؘ1zPE5fGG'.4oŢ!C&(?1"hԁ’УCό5haIĢaϸmLL-w/ E"})!fU CGB}":œP%% =lhXdЈaC8`$.+I#bap( H6w CE}"PDu#xLǝޡC:>O>I ꡈ? OpX014nFI x077?{;'1 +;:Kbhd4 v&&(h/gGYG野{{8'__1E9bAkLa! 'Db4u||k] kEq=`t4dأFiN_ (Y-0^$LLsQU#`l"MDv85E1'r-y)1k%-lsmL^5wED[E4ӨXp?H w7:j ~n<;?dB^+`fFGg0MfCRs1LJSwm Gc{'9~c&̹-3ʪ)"+e,^d^%K-qL( "[J6cFᤴVI`Ʃ->3Ju"G7q`۶\޶IG c.'\g1c~xV#fڷI$z2j+r<[$V_2mHxgŧTn,+n,?7 vs 3FfНɷ޺޲GOuvf(|:]-ɸ2t>兕/\txu@81G8qx_On}+ڐpԹrUbѹ ZH/ճgD쓠m=j96rлΑCiОkѭ#z׻}pt##w{o{:AGJ6Kw\yT;G;GFNsd:g407{kMm#7u<چG8Sx݉g2̮@DmJy5Fgnɢjup+۬@`"l8uYoY%FGͿ:MȠYѬ;'Rr_d/5;vOi$&8-˨5rP+CG.V(wxŸ+qÎ[:+2"1%m ZV+әfU.1y-[0ZW9yWyI~Z4{C,}Έ Fl(HXB<aά"`BpY̰p|vҒ@:0%i.8f]O a֛:F { v5usky,a戧vLj'lpqImZպ>zٕIkv7999_v;5nk[έ]ԶGpW{\v-VmZ[T2d ץq-sC.ӝ-N%f<1ɉ/+4n=NB~ΡIT'Eϓdg0gE~ECiIKJn0 -6qeѺo}dx44F|ͺo(5cm=32={}Y l?/0KO= g=gةػbծ>EДAgV=r'nH횂WcG͜Հƾ ^7.P>î86e-cjY+&YiQ`ăF<9|H?Lހ7[*(tGAv~d7ViFb|r)fk&8;nޞ &lV=Şj%VPY;'_˶ }x v2]N'n6b?e{[3 z۵䓺ںYnn5kjgu^GG /FgIGѹޞv˖Yv5)k=~jKU ,|']z<m;;vvfEsqfiզծviXr3=iګR5ZRyz7bI׻Yd|XD[UIgfAV&ɳŠl#9c:6K]XӳԼZgb|4Jw=| {=LMjyLU,<ԷZ eGkD<>65Q+סVz"zވ\f둥|:'͌ђ,hhQOaڞp64ܽ m^=)ތTHـ#tn=8g{jaRֲ(JXbsŮQ.Vb[ĹjO\h)]/taUq9K#OZhntEuFKYfsͮSnVfx7ݦ xМ"3=|x7$ElU̫q9Kqc3NX7f}q( C.ޔ!qOYhn}v> xȓS\9o}U!ai̽K戤ܰr× If7iIu|(jo)J] ?m3/ v]-)7N3Rsgȋ @R\]nѝ[y̶M괁py@\<+l(UdFF&"5ƕhÍxBۢ/k]8QetPkocq&g2v%uЏݧ: u_r5*۫nt>_gϛwVO *XW-x>jnV;Y< X8ߏ8̙ PP1#a Qm(|`YI>86^>\1P0fzcf:U0^NX%==棺P- uoU xV )F^1qSj ҦZy9c'ӵOE%|.mj j ooL+2.T uN`ί7@U@nGnW< UlUl-yU 0F8jF mSN5Lo8*p 4&9 w@2 _'*-rB"@g1*fq4fxI1pG*hqԫyt%ekf^l\,VAR;K9,BImr! bz kabC7_byH:R,PV.˒V2rLIX5/@ե⯬,1.Ы󟊖4-]HeHeӍtT+ VAΌ>R_M7^yxsžRFNѕ -%I`[UpUpЙ'H>7, *}s+\_Fb=_8bHc7f8JQE= 5ɓD=<MKZ g*4aC~WåaJqaʢ}Bwqbϐ/5 yQ-(Ykxv`g pi4Үv^O:";06225Es\esc ^WNqS^~0nbÁD(<&;SL4;pgŗrEwUl[ytF}i]Vfq&>us(vaN~Tvv6ĪD:;i J3[m}"s 8yHˆEa"Q#0u9&JBv A={0y/z;aZdǙ;e/}|p;vGr b1ʮlkyEɛE*iVqbbԈYacNgvA_/IvO汐wOɓvKYXNn2}%.2=r3d~|X 6KM¿i29ګK> %66^ㄭ~/NFFwB7K/nyp˾V:GAgQ9::y<*_h^ *Y\ɇOa\uGcƒ{h/]BqŚ"G5@AoRXIcZә[|ɝ(|"YQ /[i_:P7llo|X[n5I_RVX NuIY ֈY#Uk n>P4_^s00#s qaGvAH^Tٵ@m.MUj)U-8ܰ]rYrsS?Y\zLm:.6Kf5^chsep 3o%F=;ppϮV$Pn|[utRNK;cosQVf.q[Ќ$hxG>0graK N%B-D\M%b{xm!,9=(b>/%L:\'/=̩7'5|GiwKyf@-DsO ͌fk>[X[Gn]VAM$r%9VMėv%9zɲl&64ce]{|gl{ *?N<[<7pǽzvN-9_aME#i)ި(kS,fȴ&| yB|eZ$"(HhZ-{~Z-jp: H\EZ$4m,w[,Ur|=B^)ZiZ)JѧV M핢+cB[*ЕzqIkѐJB+7Z5D!Pk55O|n"˒|3bX=璒vYQKZZrhi9M˵E,+WKZZҢܠM-E|a-*襤 m. ] &/lUP Zrd!Q-6 _I7_^̄Ai=P[Q+Zy\+MjѴ^yzZy̤Kc>*w-7BSŚI~^8 6)48~6rh+7'3fp <3z 2G {*+dU{/H+GB3Ofn,Q@Hq 4mY藄_Bˡ6*HH(L( p\ F8E8kۏUD)hyqVW6me쏥zv1u"2jѴ\{| |XCwFBN{gty4eУ+P"{޾;[,{l[|}ܚјzN|8=vdIjw9,$BӒ֍ZP{/ࢄp^aEi }>4 ` `8=ߡ<5hr" BNGc8'/ qSh=(\c*G{{K{(6ix-5|Х'Z1c4o5?:Ӛ0≸p("洐Gz}tt"&L7oŢ!C&F Cá.z#Gҭ-zѾ 2Ezqۘ z8U3Ccaܗ"?U CGB}":ѡ!k%% q4hh,2hİÂ1\s~1b~@8ԏߋ =-9acP q@`<$Zԇ-EA~@tY7B 0>!NSzOksbAQOpXʎōp3JIxĵNѸYޣ'n <(Ò(T" XiP^t}>qˡ';?qx#OXAc.IAQ+I!s@,xn Q=w 'X V#GcZQ\|)0 (#Ѵq bD#&:!4&NP{OXT00/x; ]I%I^4u~s69x}z=6$5jm%)TԻϪkD3=xc2#-mU:O^/cOl"1 c;3PZ8zh4wq?Aû"4Qʎ׈Svbc X ءAV۳c^4څ́3\RLK\FrV:Ftz%~:"5xdHsE*h #| |rYLwy()ӪIO&w-C*HӬ'q„̺'<~id\,Y6xtEP>[h kRdIYfY<H]1jګtDHʘ׮f@Px`p)ZdJm⎬jm&epE9rDNױ4ӡp(];:aCNX\jnqFl; -=S@6gUa *_뚚R-mtJ-Se 0fۚ=3(2"t۔JduSIvҞ!Cxo/ ҃F<[E1M'̹zqbG~FQ4^l2 1C ӡޯ`&,I #VЄDzYA+ֹt #f&6[P(am լw71$-EQ[p]TO+)7v'y\2Oۛ+nḐ, v a ^e1Gǣ/']\c&#E?bZ>g7`Ei6aOJ [DҖsWOۛ:l»NOdDf4|غ3 z%f_Zf3ҳQsּ{!κN[enۧm{z"'Ew{2OI)y?}0wcX"vg)B:b>7cRLZEx.o^daWK1׼eRO㺩uٌdwfNSپYkfy|)ɀLvuZK-Prwۺm"oKd\l,iF/Еh|5ט ?oRs㓕auYweBnji.9`ͺ_\Kڥ^e1:1>Μ?cѱ513%(Ww:n' Ȫ#B\2&}'RRRftf7uW) I]^LbRZ\c*X<"WrSL-YiLE~~aglPҕTJs;$s`-F'lhbP8%ГU0=PKX-M5L"ud1{ r.3o;Ot,:b_XPO@x5] F~kgjIC˄"WKomK%vnOؙrW_gV̼FZ<'&F<(h V{K! VIy(v̥ xG9Ҷ׃P)M UEи}9ھ]C]Jyz> (H[_،]OLc`+T[Kϙ-MW7>77]ZJ@(1CFZ]q%cxDVnh*K`Q| ~u7} dSlRn5LT@hV}H(WC CQcnLQؓ֝v#gEZg<_x3= /t#^ٷLk0 b~# EqA1|1⥚xKR/;e} _8)T^AqA2|=╈ ptn}F\ oDZGy@[Z;QQVa~^rm:0Q!KLv~![7ɬso]_(o'~eHXvC'WKf~M,f~$W3J{|?5s/͚"BV3uHk c(χ<}_gQ?Z 1J4ˑV3~0Q,J}cx-EL?E-96XO $*FINk&o@73J3 ?v0߂dҏ%$; BGsw!}f=~}IW3Ǭ{%#^3Կ~/^_(ך, ×#+[?o@Z9;H~~O|}@sD "FEiG./I/f 'I\?6 .([? pۀ#'l8ZW!]_^1W3'װ1C^ye/c:_gը.a_2J_W/'K &d-|H>䭓 zZ4~!o%'$Q^V_G\P?%hCM_ra71) k,lFew^̯aƷRw0QkU^71JaM'' _t9VH1m'N{#B 5'{$[}Lkg8_#0ϻҵ_uFIa3'G?Ocه qA}f̯a&H~3k}s _(S /!݂$IrFɾ>Q[ }KrH?S1J3JUbߌ5d__k ;1J]0׌0)0)2T?`yE%/%8,0 dbR~ 7`﷐j?bKp= #2J_$8cA0ׂ˱/EaW 7c>+0hy _(o~>Q/auJp2_(g~×!]C*$dT_:ͯv-5>J N hUsjc_/sĿg7 N+~ 7K2_ ~1T?`=Q_%mh%|eg,2Jːrpf N73~!>X71ՌR ^" _(oDiԍu@$댒}wI /`L?ߍ8;'q"u' qA,ZHjFi~n&'`x R:?U'1| ?aͺϰ)]?se'!݈Hu $FI7Az#I{3'HI6\[4[0_g{ƃpV& 1J$Hf!݊{%!~+]?A0QHaRFI?ɿˑn` cQ3|#n&_c1QwzǺ ˾plZ}?ݚs/QAz:t>-=+?݃?CR?/mC\P_ Nj!+rHS/ex ߗAz2J}9wJI+kTRn1Jj~oDg1Q~F#+Y0Jv~\#~?7n5~̯e>.'`xR>?>ØQb~5?俐5Hb{`FI/'/ax ?R+Q߫$coCϥ?؟% {%$ AJWmQ[=I3J{{%870J{{Q'? >Ռ`^y ?0kaG } %}ԃ~FI) Nb>-۟ IOb~5?@O} 1='_gFI߂m Nf>FIߑ\O0QB5H~ (g$ oekH(﷒1?nDF`_̯fgM+̓0&! 73J?61=_boI%0S7!~S %_(K$$5H;B*.FQe$[h;F (꯰V?G#h-B `~ ? %$ krZZ%')_=72R5(&_˨a^HZX,}͌:Fi|[$F\P>?@=_(/𨄟0i_Y.fӃb6t"R'^(տ;a{W3J{ "=PxXS3>B(h_(/ē{G!g7aFI7zނ30VF[ގïf7H B2$8` !ޏ<^oRDS"Qj_uHWQj_A }f'Q]K8?GNY] .(#!=+$HߓSOF<Ԓ n̯e? [%$n1J _(:WKI3)]%y?6W"T!@ fF2)ۿ1QyS//fO Ծ0Q!A706FoO+vF}oC|^HJFɾ ~] b{1QH2"6_($ _ ??}RcF iodST%kd41J÷0J JpU(khb .`τal??_(ߏY~? a/b~-$'2f? _(=I/i=@'2RH@?D<|F}ex BzHQ/!Se6(WEy ߊi_Q> ͿQoQľ#30₢UQ5!e7-J"E%Tb egIp_&[UKEjFqA,[*'k^(ZH$8VTYTu| N70E$ _twW2JUHHU꿊a{d|EԍՌ\.: ' ќw9[3JO3|%R%t%fz E{1QԾC`È]#0QaH7KI#^匒x)QqG׋ T 4>'%aL >?컋1Q-.HI~?kr4%"G\q;`~5dw@z?5H} qQc=I)'2|'1|=RnO N?o`T#tof 70J{&gIpj߳#dϖ? ̴(Q}K1Q@WO_>^Q=I+)0|`z>^ u( G (- o@ڪ9[!?kch!~t}>5}җ$$ eAHX1Q?E@'e _}4W#]HTgZF>>'v!s }koH+'_gx-RRo@W0J?ɿ᫐.3Jut"!72J?ld]9_b~ _@zPOZ\_($7 _ _( בMa' Noa~~x ?x¥@zk%IIC E/ΟOf*L _(꿸: aIp_`6Qlq17"m`+gx#Ծ 7!Xŕ$80Q\-?v~(0>. ~!>aWa~ hŰKI*"eQ >x-`ƃe8gc}R71䴳51QjU DsYS7d-fh㈏oF>B:.'^vH;0~᫐rf^He>F)C `w ;] V| f? N0]'i??* ?yqA}&̯aFH~krW04' )~g,u>$8?}R ߈'Ѿs oa7p?yV1oeVHqocwRXS+ %ax$?)*I~w2J=*i?翍ᭌ8O$?!/7_&pL .(?wBz0JXH/1)?wAz`$ _ϟ0|=dOeϟA[Sw3~{)?bx Ծg3(9+}e31J 7"e RፌR^ N71JN?31?ea̯aC!'fx-Rn1_($c _'Q#iHTgQjg)/2Qjߗވ q2b~;4_U2~ ǝ((.6ף '~E~>Ծi?N?ߏE\Pv}'~Ռ}TJ ?k!W1J ~KaT\,-gPDi~0i1l*RFI!ݏH+?AzPOgxRvY"/P?wwiCb!̯`/'1Q߿ =U}ۃ?,٧JJ0i3>% _oH3 ^}<ₖ|_hC"%,`xT2T?`%1 8~% _(O 謤1փc Fq}(%$8/c+E(Yjd%B_(֢$$ᕌ`*ٌUR7y͒}VҊ5Hk5Ǿ0|Rҿm1~ N@~ܾaWҍH}w2).0d?/ao+×2J R/c{?}GƿQ^pߏ Oq0#_ @H0јQu _/wQ1~zcI N'zFI70hS(b% Nq (p_,+ A:Ռ f^O3)0aoăGQJbxnԿܾ1)1W J N՘QE/cO@3JCz꿃+%Fɝd+y,W3J?a?%0%wKp7_(ɿ%ςl N}0|#$^(I &Fi~H2˘}mf_q܃|1)?gxR>S|2J&/c[19HSoe FiW2JQNH$] $ _(?HpƿQAo`$81Jq3JfxÉhOG\Pn_5/E+ @ /`8XQf2FI!}3J߀; ?M`>Hߒ-ƿQo3|5$~ IFIQ~"IOzFIOQ/Η~%IQ_KƇ3JgxÉ~g .(!Kr++r NV2J/carF!௑Sb Fif+%djFQ~)褴P|kEE _(/T.I~9_(OiDl"0{|tF '%hD)]8*E~>Tjp⧾< qAJ&̯fbOKI& eRJ1 4 $M)Ȩ5R{6_Pv>UԆRZ!Sm Di;N_(UO;Q. ?۷Q&~%0SA9.] +tDO{^(}KpZ̯bTԿ FZtHCQ5sk%esKC:~f ??J̿A:!_(~v~&0CyԏRn4$' DJ¿4G0W0J?q ?3"?qŌR"$?*? &0QEH/ W2Jo̯b B ? ëb}/e֟z1|9R"'cFI_>_5_(ُ8俆ᕌ:̯bG$$u FJ14~o'od*L[!72JOHaBz'w2FFw1*[X(=HƧa(~3E 3>|W%$s DZ#oQR?_?{1/v F߄ ?ɿH` F'ߑ`^EX ?3/AZ[%$g /gsH FIW ?%/z_沏_C-/bo^1J'uY.0Fծ^l5/bkbf ?_ŌXPV?`e>_(o1|)eLzH':_(w'?3_/e͘Q/e%$ዑr1O[)_qlY'2*p{Y1J 3J 逄ڷ:R-ioaOw0i'^bj~Wҿ.`fG7? :H0nc _c2FI')Q)?e7AYS73~GKî7e0Qҿ~?JFI9H!̯bCz^τ )+=O _t#? )%y^ KpgMRi3kc =[%Ӄd|J`=mHz*1Qj<%3_ _( }HOJFI %_-{俈H~쥘QKDZ̯b^|ex5Rfg*1%$_gjwf(O73)roĿ71J73p)Fɾ=p(oېnc i7ogڷ˃- E3r?̯`_JFIUÐ~W#HHaJFIG?^ _( }IOᕌ|د %ϕ俉HPV_([-}؃d|/6~F}`x}9aY~sa₢}'qoc~d߂?$T^(a~$1)߇C_(/ ?`O /־%9ށl~UW`~ؿbH~ ?/ax%$R9W1J KI~9ëUm +'U _ͯ:H1$?_l~U,B (տ[Uzoab?տ^2>l~ N}ކt뿰& NnFWIs7ߋ! F>;!KI~+%ݐa~$+%$ër_SW2J';)=b&FI$/r?'Q÷ HG0QGzSG$z6~F}bxn$SΨ/Fw0Jot'73NFI?vP`{'d`~4?!=CO W2J c~$KI0ëtW2J??HB 71JG=Im o@ /0&FqoAFɾO)>( oC)=Ճ>Lra~dυA ?+%χB̯bJI ^ W2J? W# HMWzW1)Bz'1&F3| RnoVoa-T[%?mHwCz/oe~hFDEs?KO$3RKK~>p4~₢󐾈Ռ^/2R_q_(ϗ=IWQ/|{QaboMH}`V ~[ /G'WՌ$$}漟>K /CZ{pʯc#/B _(0|9ҕL??3_(S/~~H}/1Q_x_2*~B2J?HIIކ=?b~$*'dx7R%OOwfQ7~l`_ ߅jgŒP{+<~b{^컗Ql_edq2߯Y[P6+^(!] +7`~h?u _E _(o1×#]ꇲ1Su>Vr3J`8%h&Jk8?Z&__&7;O&p PKZ*aT6c~ R~UBT9.' /G֯J*[1Q?k嘄"!CZ}3Q!_Wyu1|Rn _(V/G֯Ju;0T?3~F֯ʝvc~#_vy )[*WUVF  oC֯a~$ $$ûH1;4~zÒ%0=K`w0J]Hu#1/TMT3̾{",֬-(K=23A %f"|~Q߭ _t3Rר %k?'D2 ~|\ۍQ>1_G?H{a~54> ?z?沟3Q'0 )'B=ዐry2×2J/GׇAW1J II?0|5R><31Q'dUH\HVFσZ ?>ې^]Bz俈HbH/ăTR?_^(D?|}x-Fi^]H&HoRo" ̾{dq{gXEH~/K>!՜ v0Q0|R>?𥌒>Hq cQ]g$1| &6w'0*F}O?!*rLON'~¿Z_pBK^>/AׯorR*'1)_w0QoCb ?z?%^(^Vs[ዐr×2Jc/G!W3Jo$2| RnԾ{_Hֿ-Dw S᥌>2|| x>1J ! ×2J+×#3GspQOna+uFL?0<ݿ2 T?.K?}?9'UϱUE_( ~W5HE '9KŐb2FI>JOO2|9B>{ȪZ.9_(ί _(ɇ9]V5h?U$[}Lk%z0~:FFi}0Û}b}JpQjފ b)w#Hpjgd;Xph>|1)_Uߓ3) HaRF?|Ӄew%[O19REHu@o`?#%0Xo1Q?cF;X闘Q_xSdx'h_@\Pn_!~84?JKoMbFI?aRF?A/c_Q;W2JW#=_/_)'%c&Ljȫ.2l|7HI~+>V똿Q/e[]eT1|5kdzt  ͌Rk ~jހ:H1'ԿE$1w#e >z%cƒ䯔o2UJp]b?߀yrcːr]W DtZ0J𥌒}51|4~W1|Rn _(O #ôOY1Qj~O;7"mԅR:=I~og;%]h?F\͎ϫ{.2t-1Jҍ~Z/BJÐK%x?$×#C1g#[ a~#4=}}%s3_(4a"\@:K%{ _% בha(?oXQG.Ba~~)/e'c _t50Jk; ݉%?ƃwD?||?pɐuE~T/B4H`RFIw{{)Qos =WSeyD?P?B\Pv}₲:/EʮOT$T^]~=7bJFiw~FWOoV/e-$ /GZ?^(;^(^H:Fq ?] _~7b*F'eB0obC$Òqq͌RH|Lϧ(gg糐>|ҷ$3 i } w0J?w!= 1Fi|ۃ]ҿk-kh^(^togO/Eg _( _#q6 HT/_0Jk#nrgHb~ Rv}/-'2 )>TWH%o$ _(K>v}H`5Ř )>T0W Y' bK~k>F '~j1Q?5% ߈*505嘿Q2~j_ -ɾj`,̾j`kHI!eUc]0J]O3|)ĿZ>f_لː2YHu~5:o`_O 1J^p%Hh?Ț&aуobx'뗈RKvH_W~2ܾ m%~=IV/ewH  )] _ߢ!]:T~jo`3X1JuHEj팒}]O_O8ݟk97vGVK!݌H&HϔS73)<i_(KIiO/AHg1Qj=IY#eA0SZFC1Q9Hc~j0!MWy_(V~knbn͌z$1Fބ ogw 1?=Hw={=W#;"y'Kp/bFi|_]ۍ?1_P?y__υ2 ?ː^K%~B/e_*i_y/Cׯ3|R^_O>F /`8V6̯g)MQ7zSobx'mh_@Z};1){!}PO2ܾ=Q=I{Q}ܾ$/CC _Tg0bFxSeQ N|%7"ѧ!}3J~ /`O Z9#h }}ҏ%Tw);߯.cRF'ߗؿ?#gW~ _(gOOEHy`?T+_($Wy!ݏuRj.'3|R?w_0)Կ?{H;﯈ii#wZȫ-:F0kH~k㋐ׂ-bT[OK)>U[5bT[HuENkFqjk%aCp|n*̯c{ ?_EHAWk1)5$-×#5} _(ƯnT?`MQmbz:/ I~(oI2>||矈5:FiaOQOO;).H[1)4$+×#㿃kHY={0#Ծ=ld>C?!Hb~k k)aHOH1| Q a:F|hHOcz[ H7`~$7!mg 4w0JOy B? iw1J'b݌sϣ} yt'`QfÉ0"?Q?%p⿀t}SՌ}K~ %#8_(c=IQ/DHb0aW 驘_()'Fiz%8V,̯e{^(:gHp ƿQgJ%?>-0SO"H/jFI/6 ? k$8Vj̯er1JG$dKX^zD^s uFiO{d|t% eH:/w2|%L :ԖnH0|ҍL~P['foCm臯5~|'E'Zw]ycR>_P{|~u eGj>_P{}Ӄ׏B=YO |ҏ0)ݿ0)2>jKj _Ǘ52|-R~gѡ}ԃ30~-tLCƇp=_!o~/‰"ċ\WHj~w aP~Obϡ{g%BQ~Cu%~_xR_HŘԿ"~_zXaUbv9WW#' q(O]!0};jJ/a׼׭@Ɨp___lu]I8-B^=^ BHq"zވ5s-=p\wu?t{b и8#X,v&Y!;G(;q}'rͲr w4HUq}}9:3MʠMa5K_rN#b=y]3ѥ[eL9LZ,lyo4P^$/bEQei"̡ALnYYh}ѓGd; dRA2[kte³fZrtz;g6+i82XY^{?G9xpF!]ˡk-kP*ɂG'z6C2SZ\Z˼,Pvϝ\ \WeJ369sԜs+˂U9kT<.9999Y(g㺝Vv+ܺ\^`+eܺn"gOї.i#uy(.mksr\Sr*Ká/^L|݇93+@j]!}^ WӲڊξ}ba;l~>7SMy6aEUw L\n^8W U }E_<f_,}yan\Wrx~F.%e6^^YioίLpIJJJJJJJ Usүү=wW/AR(C+hT1 +{}a}X%$o<|c'Ohܬ{x7pPaI CP#$&(h/gGYG野{{8'__14PN+I!s@F" SusXꉨk8hmZ@W?;׊{LhȰG9. bi^#АEBͪ&W-CAE攘JJUxɪ FFB~sT*U=-n#r⊆ǎ;jKEc0nEtKq1m8wM-yZDuRdgSCCnE?)S FGcF<~eM#c5e{r8TUfWVj& [qTͺ.G$SՑCP7#8ysΎmG|c ?GA/$))<7u' ooJ%dDlƦl%ií)"gW[SϨKd1HBRRc(8&Rw']gߙR{zz7ػ|i7톷L[ѕԓϢ^ffo,2 ;18/׍ RQjD?DBiW}dx44F<[RF2{3 bj}uknWAuy2|f7D/S.TlpҭYn]{] am b MI#f&mKSΕhn6bjsT>%z>Ec#Ơ~o`ȪN(r:,F`hhBu'Lά 8 сjb•)ۗYth9Q$1׍!6ׯ 6xϪ}V+F=cZiknXNSds~RP$ N*׃116v6.f׏F#-}ºA==oD4'u}լԍY^f 66OFdPLt`lw>Ykd݌$G\;zPYd-sTϤ5t虇#3Su trttXeit2vuj/K_N'JcV1S`4=e1j79}N 4ёݭ/T:q|4,e)'fW7'Anwѡ#}S6|:F єR7)꽺H:1EYhЈ$Bid2wExhop8 !T/%3h laj:~1{HHQ0s.g5z#L6^ݛtQ:R &ݪkwsV̥eֲ@򾁌¶9l6gl6 );형9;G "lx6o.l9M-VD7QҗC|훹kF$,3"u+ڄ'T8}g+nTZq*/PݫRe*A)SZSwq".&F|z81NjN9Q%AT?O{S>EYm^'=V3K̎bO}';" ާt.Ng3OMٷ)+(3~f\K]5ll'g ꔲJ|KmS8hlWxpOBƌdrrfFFCo~ط ] Wvwt9$.z?*``BߣGnI9].OuoWA p4x~6}Ou15y?SY3ΦmZ0h=!M3E% @(2m&F"etu ަ7yݍsj 8{fcΗvmpE9RE)Aez5hEף MehS~(`,.y(c7iMyrQb:+h=bp4z޻WkC<:Vy-@N!|ӏ{T 93هSqS0:VƑQDz@'GF.e.wxg0Z<.d- x-#~3s3Ka[tc4v~sRL泹H;d&4&ǻgFä{K*\~Жգ6:B+"Ƹi Wgܢ҆Xbt,9.KGOugr:p(ᏄmEڲYR7#s/CC E)֣ `J"l6C1iSrfK_+uUV(f2= \Nyu&!4)fEá`mƙ.'ր̮7ip/7oG2km>&Kne S_P02E+*HHo*^SGdvYe)Sw.=v7ll[3?1ܚX<2 0Dk}5K̉JT ti{z{!ufvy0wRZJF"aĦ̏.%w|ƞeZ f\3L% z &bR |HHfʬB >r O{GopR(?EUv U :}.fz -Zzlii骍rZfx%=d~pR3?Sdl4񰕒 ,ǂD(`C1UvQ!/fJQm vmajt~;_c2/f-Xsȼr/.-(\Py/tԏ߆ߙ;ofSSʺ_J׻,,Y˗_jEf9Ž`O_l2!T{^C3蟒dgV?TS0J{3!NARs!vc!~{%U*3GzXo2f`NvM1.~OZu7S2A-f?VfE+-e7䳕D+VbmZ^JvȫaCc##VUn8_KjVrWVLvJWyy^ F#!GqE6 .y4:0F-6q+v&x5^"+W}<a4s@›ҹkс@0^)tul~gɍKFvMKY3cYv$|$o -VLe|Z8[BUNV94J] 'ƗYymlݒ/@ةjF<ێ~{Ƥuo&(ԬOtIomZ1$S*O< S⎠[TRSr!y˳ [w.G'p_G.(|||'<|bsp~v:?&kt a_/ypEq:>.+"?m*+mo;F؏%{k1bkZ(}4gsYsc#F$59Fn[~V$cӠ~GKL e3$鯩Ԗ$K0]fV@כ!A_)d^,g\6MmE1A!v~0J5BzfWBϯz#Ywe*ni^v+tՓ]Fj_f]{tބު+Y܈t+zI5x yrGԞRu*_q4:iZB;OqkCڬuĝ$M+b>X4/=3z'2y^.r0H)[=mmm11 S\>~X'I-Bz`(aX8Vn.xt;+Ƥ<ĊՓG]煴 7QcՈ"F,]\iv(i+d:!{P~VMX|H`%VZN1ŗϠIn6 _Ǹ_NRSk.'iQWH4qV#eU] 㖘·Gb:dcyrIQ/ɹ吿/"utJ1Tᑪ1RGZ VMV"M;M6+]c KƤ8MbͦtM{ 3z ' mծM~D/ژ't$D(/N&Sа`/.JZOJ(tI,L\3TEZ" #։4Vn^쪃h|}MC/[ h8ۡv6챔Uڳd ̗'l.?L!%9=#*QkZmCk%9ѝ^7Ji7NѼ:L* Z|qiܒ3~i8,,}[=+H3-,JqIo7>[o;6wzziuɍ{\2%{Ze{X2w랕Wej{S=)3u/JG><MW/DB^,5AԍuAT :cunU7D QuA4MR/ДȚW.;s/3/$9[+άrL~ߍS<˪7bfFL::15uRauQ: SGa: ˠ(L0uQX=gAQ ;(ʽàPJ%.U+--ݡ-W'^ -S _h[%,*e6?++du\[*e2ƥe#ySI:N%\M-mrYM5un*rstQ.\sSunM?unAչ:7UT[)rnw7GcxzzԺPF_ A='朕j*ro33|= wU3f2% cweh#ɯC[2ZvV= ×m/8_TYxQtdZS3SܿlcҴ$/5gf?3yPxƋD~#{4|TPPZsS!Ь]:ZVbI~;};=g&6K}{͙jzJ"X]uq!FYoksiǺ<:vvF݁7Ks.GpIcrͭUvjYZgY-ey&e34oG)|y.tf^>/Mvx>㔏Ӕ>N>vIDҞ?i|.%k茮wY^x۾o ]lY_Pdt,ᾈ-,X~=i<RlU?htƞG }0? Gc#}x^HtϺR+ .ˠ;*⡑Ѱq=R|UYθ̐ڐY`lS}06a}^뙎\>:lx(Ljݞu;@ẽIVPpz:g.S]g)R+{VQ";c>J ;fG.FzPH={ gY'1VKZ8T|i)S\\0#Ws~2y~lPpXlRMy}zCM-}8YL8Ap8 `5KBm(@ẍEiKFց @`#ݎڬ.WsZ*R4HEi#t*5*IU0\: \EW Pʥ+W*6*6y~F9T`n:z&MgOP|%ݼO{,|.A!tv6by-Wr vD(סY+荤ԃv"btZ'd?j,HCg4"\}˫ջw->#uǀPkJؔ'yPJ-GBݛ5'JĊV)7M¿%/J^b+O%?|ΛL]w=$7y1ӗ43})c/cz 㜾|1ӗ.zlq_8IKg%D!ѫ3x%Lel&7gVj^zl7ks7g7777W{(}le|՛5q zfc{r1XYJ7&io6 eb>cc4򬘨;| İ?q_m6;`tf]t.&3?„[R擋] ]YjvYJOq}T0}I,2]%o[;-yU>4ؿla1M&\6:L0ufS`L0uXÞsiFuؓaO}N{4MuڣN{iOT=)N{i?uړAi:Q=GӞ|C!wȐW alCi) N M򪒤'}h{MC?ɏ/#\:`ߋogGGn1fp (cPvCz8s7cR+~3VɤiZl1;nHj} I5""Ah>V~ͭfu.JhFqF: \jZrrU\mXj"[J7zbPkZqJӒ&xkgAçŷω> 5ኅ bG/gLWq8=o>"">k7fzSl7z;7fzӫͮ3}&>">ͬ3ukG><qWGB^,5zčdzD=Y2cd,QO'Kԓ%dz$MOؓ}&̺2]l2C,Y: spuY: 0uYXY: Sga ,,͹eE:sFTusu}Թ:ɰG8Թ:}2:Q>Gh/y~)W䘃OgqWPWMOmqo-,6{5w bi.~f-HvL .FJK֚I+څ2IoK{]j^|S,a?,Q,%V/ZSײ:Nuz:VZSW^kuzN?c::::#+ij먶j^LʕF|S|I}=P^UV}_<=_>,V>0>>z^u(HȽa=3)E*_.~eW/¤fmgKsObzXWkF83 }bNAs:piɬ1^k:ӉEE<426'*CK6FyG?>>h/6p _9Iߡ':m+WnNR1\*$T!̆TH}(8C){mכGĖ_@-}xD=nq`i5Xm H4ĂN}&>(}v~/&%]F@Se47&=z@z~5OW<6Z=yH׹{Q"J`}D@9gz,bRe*2h\EFGD *2DFi9P $fGbIH^bsMڶ~y >12h¿ F@ӅNV(D] T% :P%}3Ч4A-ٽO 5:]`@쏢%\Z\6tTȕ{4/ 8 j`%/:*OZeҫU'0W_0j%w:QfudԷ9//jw/ u|-'iG= zB]=P'Y,y uvٟPmћ'w}\ˤè8RHB1>+b%`n |[)ff͙5EP VXFNۛxb\n]bn`MXZ; $ڕfz8Sq+%^;zY}d, =8 c־aSR+&'H#pvslԇCyU0*X>HXh}ש}G{$X؞QT`jѣ?;oF;o(Y.L՝ѱX0Β_0 X3æȹİvJmnpl/Ѭ3irGTs{ڨ&iKq$gb;T}3cfH/KŸPKnt;3VhکE, -`y XTq[9M'>.u.>'f6I"7nu*fiqE9¸4LSt:뒵# k& CApS@ẍNOl1y4-7XL ) 5ݨيvN.<rGPAYƮem&*>KUgwL,G Zp(bw>4k>\AurSvvmٽ}H;ճgDtxm#6hmI*2̞0:"xܚb^{R+ӱCc>^9c8Gݵ>[Q`LkI˫z޻W~:p7ByX-PhJsoPִg;ƨs'c@S!O88  q@lƹٻTi5o_^Q:94}r0դN61]!T}3Chb,f-84n6]#0%aiS |Weq>6o=x솙}WkW]wK5+G׮L.3߱c G?xƁh/}s#km! ei|uQluܥ"zZya"nnval .^hp! cxinħגՔw0e׼ %ﯧu;ŭu96@\Ut}TIes1c6ӷ4jk9ӧ嶺664/#Ir`>D,kvLlO?y05h7:ڍZtFR6<$1c/B۸ y< bD#kBӋQ2X`]-:}#hˆ' e:~'/lE_и; DPH>g$oYxUAF}Mf`4,MPԈ\h?vq:cn^x47.XcJ7&KD.Cq$55Qθx߬(k>DmP Jy5|5Y$fH t Xlٱ@`"l8uYoYkD3=N[1b3`όG}ѽut?qW{;bX&1b:!mT9UyLj.O6zӑ-iDcTz2SK_*<|dU:fM.ch R^KU:z"0Տ /Bbz?K 8T[uH-6J}*, l H"$b ⠘9bf4F,:dvIBTێ,hփXl¥6:O0 FG^ykxh0!iz^q :9}U%c_:OR9lpz DGFqOkf6&J-Shu 5mˀ-e@ La7*HNS۳|"^ynT̘%<]Snœw/ Z~0qy/6p8Em찿+m \q ~1xZpiw783#Qͺ"4`2Ҹa.Vv̌E(xH£T%U>:)*tHpM'irG-V 6D(kG"fWA#Z8F%݀Ò U]v\"PJ3b>#*>X:R?.͖YeDϋ*Dt{/pX\1俭nkL8#)U1<-!ϘGv1Sג^2n2H_⛩LfP٨Tܥe/:ʵ1RǖQHITlڕW#֭߸m[=H' r<4N$v_IYwnYfksˏXsXJ9 (濣Ȼ]v,m81/Q0) yP/A9&L¿YS.Zv+dtri)rj\KX=J=EZ;.eV%Ul>iGMJ7?*P0T1h1(Ǡj롶jzyl=J10Pb [Mr r r jӡ6Xp*MGLvBSх.ԶC9M9O9PێYWv,m:mG Em:TlBjӡtMǬEm:ܦcQfDBPх ]mr r r jۡXpG+Ƈ =ճ*P/C9M9?CmcДcpSAm>cբ6das-vFq0ϔkT8T4G#ReNesY$T@GqgWWb'u~\jkс@D,<KDc4M/G |~⃑ ~8gj .GNņx,ߚTd-)1,J`qiy.)?`\[X"N2H-Gptzp4`gnhwބ+T׎Wxv<SPQQI֌\֓q#oČ֘1ZkVܵ;j¿*ꁱ̗7FӖg4phVp r ?mf֤RbwݻSG^RRY0&,X<SJ*ޏ=Ja$$0bz $,1fansi/tests/unitizer/interactions.R0000644000176200001440000001604414533476156017235 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. library(fansi) unitizer_sect("substr", { str.0 <- c("\033[44mhello", "world") substr_ctl(str.0, 2, 4) substr_ctl(str.0, 2, 4, carry=TRUE) substr_ctl(str.0, 2, 4, carry="\033[33m") substr2_ctl(str.0, 2, 4, carry="\033[33m") substr_sgr(str.0, 2, 4, carry="\033[33m") substr2_sgr(str.0, 2, 4, carry="\033[33m") str.1 <- c("hello", "\033[44mworld", "barrow") substr_ctl(str.1, 2, 4) substr_ctl(str.1, 2, 4, carry=TRUE) substr_ctl(str.1, 2, 4, carry="\033[33m") str.2 <- c("\033[33mA\033[44mBCD", "ABCD", "\033[39mABCD") substr_ctl(str.2, 2, 2) substr_ctl(str.2, 2, 2, carry=TRUE) substr_ctl(str.2, 2, 2, carry=TRUE, terminate=FALSE) ## End background should be kept str.3 <- c("\033[35mA\033[42mB", "\033[49mCD") substr_ctl(str.3, 2, 2, carry=TRUE, terminate=FALSE) }) wrp.0 <- c( "once upon \033[44ma time in a land far away over ", "the mountains and \033[7m sea lived a fair creature ", "with \033[4mdark itentions and a yappy dog." ) unitizer_sect("wrap/trim", { strwrap_ctl(wrp.0, 20) strwrap_ctl(wrp.0, 20, carry=TRUE) strwrap_ctl(wrp.0, 20, carry="\033[33m") strwrap_sgr(wrp.0, 20, carry="\033[33m") strwrap2_ctl(wrp.0, 20, carry="\033[33m") strwrap2_sgr(wrp.0, 20, carry="\033[33m") strtrim_ctl(wrp.0, 20, carry="\033[33m") strtrim_sgr(wrp.0, 20, carry="\033[33m") strtrim2_ctl(wrp.0, 20, carry="\033[33m") strtrim2_sgr(wrp.0, 20, carry="\033[33m") wrp.1 <- c( "once upon \033[44ma time in a land far away over ", "the mountains and \033[7m sea lived a \033[32mfair creature ", "with \033[4mdark itentions and a yappy dog." ) strtrim_ctl(wrp.0, 20, carry="\033[33m") wrp.2 <- c("hello \033[42mworld", "goodnight\033[49m moon", "oh \033[39mboy") strwrap_ctl(wrp.2, 10, carry="\033[35m", simplify=FALSE) strwrap_ctl(wrp.2, 10, carry="\033[35m", simplify=FALSE, terminate=FALSE) }) unitizer_sect("normalize", { str.2 <- c("\033[44mhello", "wo\033[mrld", "barrow") normalize_state(str.2) normalize_state(str.2, carry=TRUE) # unlike substr/wrap normalize does not add the color from carry, # it just accounts for its presence from prior strings in e.g. computing # the close string. normalize_state(str.2, carry="\033[33m") }) unitizer_sect("carry corner cases", { substr_ctl("", 2, 3, carry="\033[33m") # Empty, because carry is presumed to exist open previously. substr_ctl("", 2, 3, carry="\033[33m", terminate=FALSE) # This requires a close substr_ctl("\033[39m", 2, 3, carry="\033[33m", terminate=FALSE) # This requires a close substr_ctl("\033[39m", 2, 3, carry="\033[33m", terminate=FALSE, normalize=TRUE) substr_ctl("", 0, 1, carry="\033[33m") substr_ctl("", 0, 1, carry="\033[33m", terminate=FALSE) # Should close because we do request one character substr_ctl("\033[39m", 0, 1, carry="\033[33m", terminate=FALSE) substr_ctl("\033[39m", 0, 1, carry="\033[33m", terminate=FALSE, normalize=TRUE) substr_ctl("", 0, 0, carry="\033[33m") substr_ctl("", 0, 0, carry="\033[33m", terminate=FALSE) # No close because we read nothing at all substr_ctl("\033[39m", 0, 0, carry="\033[33m", terminate=FALSE) substr_ctl(character(), 2, 4, carry="\033[33m") substr_ctl(NA, 2, 4, carry="\033[33m") substr_ctl(environment(), 2, 4, carry="\033[33m") substr_ctl("hello", 2, 4, carry=c("\033[33m", "\033[44m")) substr_ctl(str.0, 2, 4, carry=NA_character_) substr_ctl(str.0, 2, 4, carry=character()) substr_ctl(str.0, 2, 4, carry=1) substr_ctl(str.0, 2, 4, carry=Inf) ## Carrying of other SGRs sgrs <- c( "A\033[31mB", "C\033[1mD", "E\033[4mF", "G\033[13mH", "I\033[62mJ", "K\033[39mL", "M\033[52mN", "O\033[65mP", "Q\033[22mR", "S\033[24mT", "T\033[54mU", "V\033[10mW" ) substr_ctl(sgrs, 2, 2, carry=TRUE) normalize_state(str.2, carry=NA_character_) normalize_state(str.2, carry=character()) normalize_state(str.2, carry=1) normalize_state(str.2, carry=Inf) strwrap_ctl(wrp.0, 20, carry=NA_character_) strwrap_sgr(wrp.0, 20, carry=character()) strwrap2_ctl(wrp.0, 20, carry=1) strwrap2_sgr(wrp.0, 20, carry=Inf) ## leading SGR consumed and merged with carry strwrap_ctl(c("\033[33mA \033[4mB", "\033[44mC D"), carry=TRUE, 2) }) unitizer_sect("terminate", { str.0 <- c("hel\033[33m", "wo\033[44mrld") substr_ctl(str.0, 2, 5, terminate=FALSE) substr_sgr(str.0, 2, 5, terminate=FALSE) substr2_ctl(str.0, 2, 5, terminate=FALSE) substr2_sgr(str.0, 2, 5, terminate=FALSE) strwrap_ctl(wrp.0, 20, terminate=FALSE) strwrap_sgr(wrp.0, 20, terminate=FALSE) strwrap2_ctl(wrp.0, 20, terminate=FALSE) strwrap2_sgr(wrp.0, 20, terminate=FALSE) strtrim_ctl(wrp.0, 20, terminate=FALSE) strtrim_sgr(wrp.0, 20, terminate=FALSE) strtrim2_ctl(wrp.0, 20, terminate=FALSE) strtrim2_sgr(wrp.0, 20, terminate=FALSE) ## Error strtrim2_sgr(wrp.0, 20, terminate=NA) }) unitizer_sect("bridge", { fansi:::bridge("\033[42m", "\033[31m") fansi:::bridge("\033[42m", "\033[31m", normalize=TRUE) fansi:::bridge("", "\033[31m") fansi:::bridge("\033[42m", "") fansi:::bridge("\033[42m", "\033[42m") end <- c("\033[31", "\033[41m", NA_character_, "\033[44m") restart <- c("", NA_character_, "\033[45m", "\033[45m") fansi:::bridge(end, restart) # this is unterminated URL base.st <- '%s\033]8;%s;%s\033\\' url <- "https://x.yz" u0 <- sprintf(base.st, "", "", url) fansi:::bridge(paste0("\033[42m", u0), "\033[31m") fansi:::bridge("\033[31m", paste0("\033[42m", u0)) # in replace txt <- c("A\033[31mBC", "D\033[39mE\033[42mF") `substr_ctl<-`(txt, 2, 2, value="?", normalize=TRUE, carry=TRUE) }) unitizer_sect("at end / close", { x <- c("a\033[31mb", "c", "\033[42md") state_at_end(x) state_at_end(x, carry=TRUE) state_at_end(x, carry=TRUE, normalize=TRUE) state_at_end("a\033[pb") state_at_end("a\033[pb", warn=FALSE) state_at_end(c("\033[42mA", NA_character_, "\033[31mA")) state_at_end(c("\033[42mA", NA_character_, "\033[31mA"), carry=TRUE) close_state(x) close_state(x, normalize=TRUE) close_state("a\033[pb") close_state("a\033[pb", warn=FALSE) # test warnings/errors without arg specified state_no_arg <- function(x) { fansi:::VAL_IN_ENV(x=x, warn=TRUE, term.cap="all", ctl="all", carry=TRUE) tcw( tce( .Call( fansi:::FANSI_state_at_end, x, WARN.INT, TERM.CAP.INT, CTL.INT, TRUE, carry, NA_character_, FALSE ) ) ) } x <- "\xf0" Encoding(x) <- "UTF-8" state_no_arg(x) y <- "\033[45phello" state_no_arg(y) }) fansi/tests/unitizer/strsplit.R0000644000176200001440000000572414533476156016422 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. library(fansi) unitizer_sect("basic splits", { str.0 <- c("hello world", "goodbye moon") identical(strsplit(str.0[1], " "), strsplit_ctl(str.0[1], " ")) identical(strsplit(str.0, "h"), strsplit_ctl(str.0, "h")) identical(strsplit(str.0, "m"), strsplit_ctl(str.0, "m")) identical(strsplit(str.0, "g"), strsplit_ctl(str.0, "g")) str.1 <- "hello\033[31m world" str.2 <- "\033[42m hello\033[m world, Goodbye Moon" strsplit_ctl(str.1, " ") strsplit_ctl(str.1, "hello") strsplit_ctl(str.2, ", ") strsplit_ctl(c(str.1, "hello world", str.2), "hello") }) unitizer_sect("corner cases", { strsplit_ctl("hello\033[31m world", "") strsplit_ctl("hello\033[31m world", "[", fixed=TRUE) strsplit_ctl("hello\033[31m world", NA_character_) strsplit_ctl("hello\033[31m world", character()) strsplit_ctl("hello\033[31m world", letters) splits <- c('h', 'e', 'o', 'llo', 'x', 'hello') str.spl1 <- strsplit_ctl(rep("hello", 6), splits) str.spl2 <- strsplit(rep("hello", 6), splits) identical(str.spl1, str.spl2) str.spl3 <- strsplit_ctl(rep("\033[31mhello\033[39m", 6), splits) str.spl3 identical(lapply(str.spl3, strip_ctl), str.spl2) strsplit_ctl("", " ") strsplit_ctl("", "") strsplit_ctl(c("\033[31mab\033[0m", ""), "") strsplit_ctl("hello", NULL) # split by escape str.sp14 <- c("\033[31mhello\nworld", "\ngoodbye\nmoon") strsplit_ctl(str.sp14, "\n") strsplit_sgr(str.sp14, "\n") strsplit_ctl(str.sp14, "\n", ctl=c('all', 'nl')) }) unitizer_sect('bad intputs', { str.bytes <- "\xDE" Encoding(str.bytes) <- "bytes" strsplit_ctl(str.bytes, "") strsplit_ctl(str.2, NA) strsplit_ctl(str.2, "", warn=NULL) strsplit_ctl(str.2, "", fixed=NA_integer_) strsplit_ctl(str.2, "", perl=NA_integer_) strsplit_ctl(str.2, "", useBytes=NA_integer_) strsplit_ctl(str.2, "", term.cap=1:3) strsplit_ctl(str.2, "", term.cap="bananas") strsplit_ctl(str.2, "", ctl=1:3) strsplit_ctl(str.2, "", ctl="bananas") strsplit_ctl("a b", str.bytes) }) unitizer_sect('issue 55', { # can't work, ideally would issue a warning, but detecting stripped # escape sequences in regular expression will be complicated strsplit_ctl("hello\nworld", "\n") strsplit_sgr("hello\033[31mworld", "\033[31m", fixed=TRUE) # should work strsplit_ctl("a\nb", "\n", ctl=c('all', 'nl')) strsplit_sgr("hello\nworld", "\n") }) fansi/tests/unitizer/strip.R0000644000176200001440000001430214533476156015667 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. library(fansi) unitizer_sect("Strip ansi", { strip_ctl(sprintf("hello %sworld%s", red, end)) strip_ctl(sprintf("he%sllo %sworld", red, end)) strip_ctl(sprintf("%shello %sworld%s", grn.bg, red, end)) strip_ctl(sprintf("%s%shello %sworld%s", grn.bg, inv, red, end)) string <- paste("string", format(1:10)) string[c(2,4,6)] <- paste0(red, string[c(2,4,6)], end) strip_ctl(string) strip_sgr(string) strip_sgr(1:3) }) unitizer_sect("Corner cases", { # Even partially recognized escapes are stripped assuming that they could be # recognized at all (with the special exception that a single leading ESC will # be stripped if any control is active). strip_ctl("hello\033") strip_ctl("hello\033", ctl=c('nl', 'c0')) strip_ctl("hello\033[") strip_ctl("hello\033[42") strip_ctl("hello\033[42", ctl=c('all', 'csi', 'sgr')) # illegal sequence strip_ctl("hello\033[31##3m illegal") strip_ctl("hello\033[31##m legal") # non-char inputs; really should just coerce to char and move on since we know # these can't contain the sequences (actually, only true of numerics; other # objects e.g. Diff can produce chars with sequences) strip_ctl(1:3) }) unitizer_sect("Whitespace", { fansi:::process('hello world') fansi:::process('hello. world') fansi:::process(c('hello world', 'hello. world')) fansi:::process('hello. world? moon! wow.') fansi:::process(' hello') fansi:::process(' hello\n world') fansi:::process(' hello \n world') fansi:::process(' hello world\n ') fansi:::process('hello. ') fansi:::process('hello! ') fansi:::process('hello? ') fansi:::process('hello? ') # Tabs / ctrl; newlines remain fansi:::process(' \t hello') fansi:::process(' \t\a\r hello') fansi:::process(' \t\a\r hello', ctl=c("all", "c0")) # interactiong between punct and ctrl fansi:::process('hello. \r world.') # CSIs fansi:::process('hello. \033[31m world.\033[0m') # Make sure we are not inadvertently changing SXPs str1 <- c("hello ", " world") fansi:::process(str1) str1 # Paragraphs and so on fansi:::process('hello.\n\nworld') fansi:::process('hello.\n\n\nworld') fansi:::process('hello.\n\n\n\nworld') fansi:::process('hello.\n \nworld') fansi:::process('hello.\n\t\nworld') fansi:::process('hello.\n\t\n\tworld') fansi:::process('hello.\n \t \n \t world') fansi:::process('hello.\n\nworld\n\n') fansi:::process('hello.\n\nworld\n\n ') fansi:::process('\n\nhello.\n\t\n\tworld\n\t\n woohoo\n ') fansi:::process('\n \t\nhello.\n\t\n\tworld\n\t\n woohoo\n ') # corner cases fansi:::process('hello.\n\033[44m\nworld') fansi:::process('hello.\n\033[44m\n \t\nworld') fansi:::process('hello.\033[44m\n\n \t\nworld') fansi:::process('hello.\n\n \t\n\033[44mworld') fansi:::process('hello.\n\n\033[44m \t\nworld') fansi:::process('hello \033[44m world') fansi:::process("hello. \033[44m world") fansi:::process('hello\033[44m\033[31m world') fansi:::process('hello\033[44m\033[31m\n\nworld') fansi:::process('hello\n\033[44m\033[31m\nworld') fansi:::process('hello\n\n\033[44m\033[31mworld') fansi:::process('hello\033[44m\033[31d world') fansi:::process('hello \033[44m\033[31d world') fansi:::process('hello \033[44m \033[31d world') fansi:::process('hello\033[44m\033[31d world', ctl=c("all", "csi")) fansi:::process('hello \033[44m\033[31d world', ctl=c("all", "csi")) fansi:::process('hello \033[44m \033[31d world', ctl=c("all", "csi")) fansi:::process('hello\033[44m\a world', ctl=c("all")) fansi:::process('hello\033[44m\a world', ctl=c("all", "c0")) fansi:::process('hello. \033[44m\a world', ctl=c("all")) fansi:::process('hello. \033[44m\a world', ctl=c("all", "c0")) fansi:::process('hello. \033[44m \a world', ctl=c("all")) fansi:::process('hello. \033[44m \a world', ctl=c("all", "c0")) fansi:::process('hello.\n\033[44m \a world', ctl=c("all")) fansi:::process('hello.\n\033[44m \a world', ctl=c("all", "c0")) fansi:::process('hello.\n\033[44m\n\a world', ctl=c("all")) fansi:::process('hello.\n\033[44m\n\a world', ctl=c("all", "c0")) fansi:::process('hello.\n\033[44m\a\n world', ctl=c("all")) fansi:::process('hello.\n\033[44m\a\n world', ctl=c("all", "c0")) }) unitizer_sect("Selective stripping", { string.0 <- "hello\033k\033[45p world\n\033[31mgoodbye\a moon" strip_ctl(string.0) strip_ctl(string.0, "sgr") strip_ctl(string.0, c("nl", "c0", "sgr", "csi", "esc")) strip_ctl(string.0, "all") # equivalently # this breaks CSIs strip_ctl(string.0, c("c0", "esc")) strip_ctl(string.0, c("nl")) # don't strip anything (null op) strip_ctl(string.0, character()) # negations strip_ctl(string.0, c("all", "c0", "esc")) strip_ctl(string.0, c("all", "sgr")) # add some illegal sequences string.1 <- "hello\033\033[45p world\n\033[31#3mgoodbye\a moon" strip_ctl(string.1, c("nl", "sgr", "esc")) strip_ctl(string.1, c("csi")) strip_ctl(string.1, "all") strip_ctl(string.1, c("c0", "nl")) strip_ctl(string.1, c("all", "sgr")) strip_sgr(string.1) # longer vec strip_ctl(c(string.0, string.1, "hello"), warn=FALSE) # possible corner cases string.2 <- "\033k\033[45p\a\n\033[31mgoodbye moon" strip_ctl(string.2) strip_ctl(string.2, "sgr") string.3 <- "hello world\033k\033[45p\a\n\033[31m" strip_ctl(string.3) strip_ctl(string.3, "sgr") }) unitizer_sect("Bad Inputs", { strip_ctl("hello\033[41mworld", warn=1:3) strip_ctl("hello\033[41mworld", ctl=1:3) strip_ctl("hello\033[41mworld", ctl="bananas") strip_ctl("hello\033[41mworld", strip="sgr") strip_sgr("hello\033[41mworld", warn=1:3) }) fansi/tests/unitizer/nchar.R0000644000176200001440000001032014533476156015615 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. library(fansi) unitizer_sect('basic tests', { nchar_ctl(c('hello', 'world')) nchar_ctl(c('hello', 'world'), type='width') nchar_ctl(c('hello', 'world'), type='wi') # partial match # Keep NA na.world <- c('hello', NA, 'world', '') identical(nchar_ctl(na.world), nchar(na.world)) identical( nchar_ctl(na.world, keepNA=FALSE), nchar(na.world, keepNA=FALSE) ) identical( nchar_ctl(na.world, keepNA=NA, type='width'), nchar(na.world, keepNA=NA, type='width') ) identical( nchar_ctl(na.world, keepNA=TRUE, type='width'), nchar(na.world, keepNA=TRUE, type='width') ) identical(nzchar_ctl(na.world), nzchar(na.world)) identical(nzchar_ctl(na.world, keepNA=TRUE), nzchar(na.world, keepNA=TRUE)) identical(nzchar_ctl(na.world, keepNA=NA), nzchar(na.world, keepNA=NA)) identical(nchar_ctl(na.world, type='bytes'), nchar(na.world, type='bytes')) identical( nchar_ctl(na.world, keepNA=FALSE, type='bytes'), nchar(na.world, keepNA=FALSE, type='bytes') ) identical( nchar_ctl(na.world, keepNA=TRUE, type='bytes'), nchar(na.world, keepNA=TRUE, type='bytes') ) w.names <- c(a='hello', b='world') identical(nchar_ctl(w.names), nchar(w.names)) w.dim <- matrix( letters[1:6], 2, 3, dimnames=list(X=LETTERS[2:3], Y=LETTERS[24:26]) ) identical(nchar_ctl(w.dim), nchar(w.dim)) # Strip equivalence hw.sgr <- c( 'hello', 'wo\033[42mrld', '\033[31m', 'mo\non', 'star\033[p', 'link: \033]8;;xy.z\033\\hello\033]8;;\033\\ world' ) identical(nchar_ctl(hw.sgr), nchar(strip_ctl(hw.sgr))) # Bad encoding x <- "\xf0" if(isTRUE(l10n_info()[['UTF-8']])) { # don't translate unknown in UTF-8 locale inherits(try(nchar_ctl(x), silent=TRUE), "try-error") } else TRUE Encoding(x) <- "UTF-8" identical(nzchar_ctl(x), nzchar(x)) nchar_ctl(x) nchar_ctl(c("", x)) identical(nchar_ctl(x, allowNA=TRUE), nchar(x, allowNA=TRUE)) }) unitizer_sect('with escapes', { esc.2 <- "\n\r\033P\033[31m\a" nchar_ctl(esc.2) nchar_ctl(esc.2, warn=FALSE) nzchar_ctl(esc.2) nzchar_ctl(esc.2, warn=FALSE) # not an SGR nchar_ctl("\033[31#mworld", ctl="sgr") nchar_ctl("\033[31#mworld", ctl="csi") }) unitizer_sect('ctl', { esc.3 <- "\n\t\033[31m\033[41!m\033p" nzchar_ctl(esc.3, warn=FALSE) nzchar_ctl(sprintf("%sa", esc.3), warn=FALSE) nzchar_ctl(esc.3, ctl=c('sgr', 'csi', 'esc'), warn=FALSE) nzchar_ctl(esc.3, ctl=c('c0', 'nl'), warn=FALSE) nzchar_ctl("\n\t\n", ctl=c('nl'), warn=FALSE) nzchar_ctl("\t\n", ctl=c('nl'), warn=FALSE) }) unitizer_sect('corner cases', { ## Bad byte in ESC, generally okay as they are not emitted, saving to ## variables to avoid issues with parse/deparse in unitizer < 1.4.18 ncbad <- c( "\033\x80", "\033[31;\x80m", "\033[31;\x80p", "\033]8;\x80;a.b\033\\", "\033];\x80;a.b\033\\" ) Encoding(ncbad) <- "UTF-8" nchar_ctl(ncbad) ## Old R version behavior fansi:::set_rver(numeric_version("3.2.1")) nzchar_ctl(c("\033[31mA", "\033[31m")) nchar_ctl(c("\033[31mA", "\033[31m")) fansi:::set_rver() }) unitizer_sect('bad inputs', { nchar_ctl(9:10, warn=1:3) nchar_ctl("hello\033[31m world", allowNA=1:3) nchar_ctl("hello\033[31m world", keepNA=1:3) nchar_ctl("hello\033[31m world", strip=1:3) nchar_ctl("hello\033[31m world", ctl="bananas") nchar_ctl("hello\033[31m world", type=NA_character_) nchar_ctl("hello\033[31m world", type=1) nchar_ctl("hello\033[31m world", type="bananas") nzchar_ctl(9:10, warn=1:3) nzchar_ctl("hello\033[31m world", keepNA=1:3) nzchar_ctl("hello\033[31m world", ctl=1) nzchar_ctl("hello\033[31m world", ctl="bananas") }) fansi/tests/unitizer/url.unitizer/0000755000176200001440000000000014214076017017041 5ustar liggesusersfansi/tests/unitizer/url.unitizer/data.rds0000644000176200001440000002713414214076017020473 0ustar liggesusers}YpIz^ $cf0GNcH3` 3Xq@gvD̒tUuڀlٺV+9be* Eز]_ xClK+n_pĶ32B1̬̯G~Dԇ1r~)kzAU3'xFf"B4d!<~KH%]ߗB}XyvEِsEMS5!#"ǛM)kPǂI򒦊XfީO୳dMl"orffHM}͒O=^\]{2pJ˪>))za:SR0 $)S+WR\[]uL~zy69v3/qɈeKUrG3$i/=oÇ}UT3 }g4)GRԒPb#z^ݎ5uK>?BNfM5^0WCǑ rJࡸk+_;jA1hQCkX\mwbI>ϷT6wsZ]n?0e%Inn nktL-T@"b@%.:@Zh8hffD:E}cù7BJ(((1u 9pۑ^V=;888K8686i&(e0ı!07[pGfo @!6ā-c3|-Zf$w.rv׶j}spmHfhҳQ7Zқ{ak=K&1>.=c;; <ډ DMpSD >Ͼ|. ˷{ OS5кI B+`8g&q+Ût<RlĺhSaNp t0 J~W8Jqq=8y(s)3*r)M L ySnl;8B7g;R>#܎FFj<'hI̔$#ĘbЎq؇8Iz'aYَHl jM 'O+qqqSqSDՂ8@8@8@Fӽpf:@;@;@F3vFN@;@;@FzCoڡ;v'9cvͲGSy0R;<um+7O6-øwU[ʻm]IAE ޕb~Fpmk Ѐ֙f;xub;ԔY&wP>sږIwcBtTPZev0k ySy ͌nk%vcu[Ҕ;Ks[ܛML]i6z;Uhv]8n};}Vn. C4\ KY7 $]3H}* (v#7DAZNEGg)%~CtJL}LQT$s_-d%!B9 T& gC<8ß.&=?9KȐ#,xR wY3cw!_$2gܰLb|8ƽ>A$>$I|$S1Qx$1H6J'7RU/\RY˥-\R+\Rm)գ\R5(\xRu&\ZRI%#(FPb<ѩ(+1kjcz`@c~\fTDbG`Noֺb߅Dȃr]wݼon>l{A^m !~|s`,k-m$6X$ @@1bt83FG$F!E7{nVh\8^_ndW4 ,cn0,1nuȒ(0.:a\8Mk/KUnݙY͉sc Ҹް0ٛ(MJ&̑!9w4j@>hx8g#L)`%DuJi΄7d@T82rO9 ulH;䐌~x*@@i9k[ϾyBh$>TL扒wx{jp0x^9ź/Ȯ}7D!aڵSf2nns`Tkq!& k3/~LN[>4 TaCRy;;=ټMyÊj-U5%?aI:FA:% ֠Dz8 )ÉN*nAE pJVv ku3("eJP(((Q(: eUj U6aύ'A%x\UÎ$)4LQyȓdcؠÊz^59DrM4Tl~@kՈv1| s:۴ȚqfghC_tyVr߳okZ&=+ R}rjx3i0Ά E[ȠՅ)DAֳRYi5B]^#F(daP h_u}u@uQO'X zkR2xzilRnAɃ|o-^jyRUqV%(gx +[X%⨳+;yXRHM^AyNR@kքAwANN :ժ.FP -4sָ(m^3 )$Q7)R7pr@:FJ!y2F4n&S57mdb^70iN ?LcG~+!y9ߏQMN5X?B(YbQޒsk 8k4+$OBqQTW#Z"kAVڨqOsi~✲ [r.@ځk ]'Ej]H \HuHTvj M|{ rXPU Tu%&MW鰾d1[]  eݠϤ\yr63ojڰqM̾\}ܻVVV _;.+} ;:HMZ ;5DOoZ |hIb8F A.4+~!m . V' )E~(*D9l%b-<-ZZlAZDû(~^eh;zњFY55ʞ2S pLEg2]zoc6m=ǟj`!HfZqs;66@))(׺(ke:E?}R&eO~M`^}8h\B'FyOP"LBѧӥbQV$999j7pI+%;NJcxAҴݦ ;:L|v<rܧjt)C^݋ZE@ň{A0[Ew@C㵊^k[Ͼn#2G^񌕥`Yjz|6ӥ6rf(j>Mu%EKN^-"{xlF?(].c}M-V!!E%T9c[ =]/4m@IuBÍ%q*kDY 91N;[VtbT_t,ڇƹdiנWԗ2zNzT?H~0׊aQGQ%׉Q%9sy^o&g9 rw4|{/g"Ѵ"a7#rbn]эy{M^stc'u]0X'ma=ȸ$k[r)u'ᮢc" \Г\`! Qn0y7ohFz {9ќ_,"DoZoh`) _>Ս6aaat/ Ba}FpKj2bfvүI{fD]"Рa;75o(#{l JM!,'#f4]-:I`$! !{Hq &^ٍv= 7"BZ 'e9XN`9+2rZ aHPoXNtJ)Sr4g*Fh.e,p7NfRt} eLàۗW[ۗ: eŸn fBד !e6 &M^)~#TeJf;M7D4X0.ZR5eR0p&Bg kҐF )B !G5m!%1y<6aeou&c[հ5E `z9 tF{FRxo7B#? $ ّث;dʀAj<7pm+;7a9`͉kP4s?bF7מTſR%tZ `@́ :-kiFnftCsNӹ>ݶ8״@a7hmuE14Cv/eSz(_#WfQxK >0=0}0 0=0}d.ez,?+=gC@=fo&2nu1CNe{ Zf(D ysq#]%rҝ V!w'Kg=ꞥ8^#~6H,뀡WDNX]CYҝbF77@#5haG t۳ZpVY#|lRTjY )S1+ad+BKtiE% 8 e'KWgbU~ʾ5 0 Zh~υ Gn 66@o4ƛ5V"߳o~!L﹆4y+$Nm_;K[-+qqgA.}5v@^i[f|繵)TPt,ᅵev7MYX-ZͩR*rخ*"THX;iԔ.Ǧ\Q|>wUe 6u-ik96TlMlXPWoW_3kc9E*XuC-#vD?%=%1ǿC"z --=vϸ'kKG{R:_x4xhcL.ғ);T/< TPZ!7ֿxHd[1$8*h/D ڋ9U#40BӃм4B3AlwP;qZHdÍ۵}wNћY{?"?a'd6L=;ˊ߿Q?i:Wk/] ` .Tt%򲵌 'ltQT-s%웦UZ8 Ot~ {۬x=x2' Y(T?jGu%;Wܯ]/蘾8)n шI$A՝o5* ^ $@/^#(r `tz4I6{NMT?5OnebxnQs%#e_lYfբc 7??{)CȤm8N',=IT$؛1FAO=^FPO͵_ՐT$vy4NYu] -BdBη4ߗ;ltkߔc MYd{YbQӽ9`63{m^=0NK#bKsx.]=rip`{~sdb?}0{GlԕuIN@-j9xj}k}p{R@KIgD*$_z5O{ loMQ/g}ļt@1cC1䬪ITēږLR*CKnjȵsKuRњ=Z;_#gy u:fx܋Ou; y `\#h-0ж5lΓJO E70D僳v#f)vпޥ"eo2Ys+nu2QtnԬ M[3$՞ׂ.T{y(u^wӍ)mݵ/|^;22+WeVPV{J6/e)`},Xhh8r 'qMZu Q{y~@ճ@ $<+r ɏ4E7=NNN?N \#s$&}E*'cA493srYZ[P5SV^\[hQ#F!"/n}Udw'qBdPjy"އϭN%j%9g"v>Sf9ּ bT?:Qw*tL^pz۟%a뿺v2שu 9T2GouLԠ*#*غln8ɛq Sz<'%MY4ϘSBFMI <0ќsN3!ky5/ ,̓~h+⠐+T q5˻(*8i&^l|MXuv;pI_vZd.շk$]aRf*8UCr fАpSD] lL2 FQ#en9]2RhE:Qx"~PP.͇½\pqj:itڛ,9g4/<ZY7(5n۳AUf5Un*umy5%C̋=3c~d{)[HHү{1 4O N-cR_OL$2FV?R] TE**R譊T;EM3icLt`/܋ϕGs䵚~:ܨvDHJ(RFK#TgZ N\N{k9MkFkE@:1i&k>9?c'$KqtɧjTtįމ4gm[c3d;ec:_yJwjL)l \RU)/%e%M%jy/K!'i'ayf"SH Itt|(8bIEu$ԸCQFrxRܥJz7bZWZ7FҺo 7v+ ts"-bsGfj(`^;Fgu(<刟 -<Y8x&=W%poO_NbY)' oӂ'9h҆ӌXsuQl3; mym\_آ1V#G㫃"Tf#+ә@Gu9Ku䙖pO0wW^Nq/eI#I ,buK_@eoxq>@\mS އs!:T Ly&j4Xd|:H$%?_6LՌ4֠yzUiZsU;2XV#Lvȕda@]7s 9TЩ% }Y\)]ߟT( Ǯݳ}+q KؽBOThb1\9V,?dqsRq#~,{UPg䝲&:}ܖ v: C5qm3߶<Y>C>Lϑ꧙|y@D\'aH&XXucT^pO R̦c凮ʾ4g#?3(EDf>nW~*W怷QQ9D&T߁U'P-A2ꃣM|lөVwb={'?cVJ!‚ū.,@ `qXq<8,9u`̎0;z1;e`s@ -@Z\ `sq6GCa6xo9 -H !40006`sԝnF t]5e`p 08 _5×^@#!Yty[8judߋ%}ᷯ{zOnXפ싂fbWc{qEvy>^T^;I-Otm0Y'X~$w4/P3&,Z=uiнXH~/F^LC-s= "4.0.4" && identical(pattern, pat.all)) { writeLines("Emoji Tests") unitize('special/emo-graph.R', state='suggested') } } fansi/tests/special/0000755000176200001440000000000015107101207014126 5ustar liggesusersfansi/tests/special/emo-graph.unitizer/0000755000176200001440000000000014213626165017671 5ustar liggesusersfansi/tests/special/emo-graph.unitizer/data.rds0000644000176200001440000002466014213626165021324 0ustar liggesusers{ǙߛH$$RRi2 `puLÖLL&\';qM6'r$yz$x_7/C1qnѴ )ᇸDѡuǑ/FI|k8p (_m%>\(tY . M(%9l>j!zF|ޮ6!Xg`u{#~zsF JV!tNM*Uؙ~⍛ׯ-^qru1Yәv*`i\Nze5w#~;m_k1r(pwRi{O\ ,DسdYʺv]}ʮp7X)YKDF*Z!g^$.V9T ;V-W?dF1k]iij7\\vr&I74?l-XE"3W ӥ[9嚿k=DNy_e]cE/,kMf_'^uS-{mއ^}~yF>w(Xқ,Ir%N;~88bq&7+K2KuoSJ;(|w)k,,S5 :CE2s2Q6~RFM\HτÉ_9~V< Wr{ KIǃdC+ !hq7v7ptHq-#zm[ xA91\^UǜdV/HhN]tr LJv0jF]3IQP6e|>nw㽂[jjIF^F#}ထ;#;vE`$0c{G09g;%ǵgOI"//gQA7D'%!F箾 0 Yj V/.j-Y)tY*kQoUKE- .Y6Q=STS=; Q1n~3L@/Aze: 6%_s[SLظ2!W>!/SXÍ SJiSrz;nܾ8E4frt^_ݙ/ayC uGG̔!ڠ P "hj\6Wۑ`?̔3 P V FS89wrTFF-<^ c>' !)0$>P )bPi^x O\7 aԦׇ0Das<@ ` ^} =@s]ɕn>l2d_|W 6`4ˁe%}"Kt%`KGk`  ؀TNGuڏ|om9i(!ע!2\EN ):lM]ǵ**^rx4OWn dteANٳ )(kbj5-@ Z9K(;׆9{)F:{@Yl:(Nv(ۮ o#ff;졝6%K=~xxWh{$@[0n;&m0V{ K D`ݥjZSM0lfa>/?SN̜?( oȡ ,id\q C Z'~G?޹C1Pa Q%*A@deǽ_(m/ZU & r~g(xS[@5/cPm{vߩ43g lH@> ړK4w[[%L!vt eޓ}7)T FCxZp$Ԉғw$m| 3y wF͘dZ-/ ?cF'R9ri&r!9-Ņlej^u\װ5Z@yu4.zp}p "ppgu a9Mh>h4NFڻ;K?7~R@3Cw=h} t#~нEnsWO=nVj@7;~н >cy f7!;fw;7Y f8<](P (?:lshihh"Zg[/1Z{Q{gs:.Xd/ӛ<)v` 0`E6!B[{=FW}Ŀ+=Нt"t'Cw tOtkZt䜓;n ?_3Qr; 'M;#lsZcEs>)>oVƦMs_2Ve0V,5qD^q<8ӭtZ-WuqT;B#R2ITB_uOzE.)Ll"RhY$f" gReuL cb{nL|I}>oۀm~`D+aSٸ2Tlt'GeE9`hd"LGً$h:Ytmۏ@ޣd G;yC7јH)QKtU]x&ї5sҦP@饚Wѭ/NntBܝԉ^a9:D8Da?J蝙r!w_p܋f:q$ɪ,Bfei<:*KhHY!偳WR H'_Y(_I/)M9f*ZRU Aj cz1̔Z;;0S }83Ki'B-FNHTM%gِ,zO|i(|>XC5XU 鿈q},E F=zq=.&u ǩn;3[ٮծmv3v={zִkKO>vOґhfu1s]BvcM+8) 7('X.~GaȾ\հKP",;EW-"hŎ`- ւ ]4 #c3X+`?R=;#S'ۉ+ftc`V b*~٢ԇ # # # #ee`JF vMY!-K ]3 ڲ r/%vK-MGMXe񎁬tA+1iۻ jgoAG]]E-(+Y-CQ {w#bXIftiaЭ.U#y©{fn\]V Z|z1)0j '<"ʙut*oSq6T&p*t](=+X΢R-cE3 !u~-z^ …t9igO!ct. [UTMDE~MW}Zȭ&醨}mݤj#BUNK2Ȯ*״a:xwЋ#s =KNNwrNEgw@|Vs*Tn?a3 ~'/`(7bM OZ<)lm6mKռm{s}Ƨ Zya]W ;nc8cGqi ۄ %6Ybi<lm` ֲ 憷lC  L.02obrYfUoV] ̪8*v#` O͆z:n ֛R G` +0ʰ4V/YVό+>eH zJm+vѲVհaR%m\ZjUKEDjꆍdhɶj&Zҗy,"%aI~#,qI 1|W pEel$! ФrZ5D_.B!ݖµ,q޹5 -WK%t֥L m2O wʿb!/rY^UlA ]=)~/?Ok`jjiJfVRa0S[rc5u\M. FY[,?*W l٘8a&s"Gj0[Ab.#xBJJF{UoK(J'ÛYZ&iR&=4 19mzĪ._Չ?91yzs0 FBHF4j3 f~ɽO}^c@KAKӧ_--ҷOiV d d d+ud d+NuE<'\?劶 P.P8:H2LF'E.]BAG-וjIQVp/ 0 M˂QSSp O4D]m2"ssNg{-邵$ d d]] !#dZ]x Okt.^DQNt' })naEN t!|mۘzF>Y-V--2Zv\x߹+}o7?d<-}~ᅤe?I֒xi 3L x_eH2\eeH o ;->պթ?Ɯʿ7zcXѪZ +}6((VbŊ(>_cRFdݠ'@,qc%`%(([훠ll+[k)ۿIi(`u[T+n蘦qhC:]V ݣ M*xMxJ{Fֶ$qI,uq,0?nՈ^-CmP.$X(ROOFelӀ{0$}F;@ "O'`m[_aOL] GSVyW5\D+U^ҋw5OzmAzln 4 t2=9+B)fqkRUx>Dږ6Z]S$:ė9PS.S؝pH_wNiZiYykK(-kNkY@x5`֌V|tfi#a~ʡ&z.6k_72X]&Z]76S?PQX9O5jCitC[)Zsh<,!7LͲQ,07{:WV MX6rVj1}'}8H@r w}2גy '^`B 7݄{v-|nZb6zC9Ƶc^P-Wy ڛm|aohTbiĖ=]&gqP<NwU~Lia\sH(@HmejPH3Cx*g'y16x2k!r g|rl+j 4a65uXczҪn }MKEQiǵD[c;'t5_ƲHį#CfBwńK~|_l"/7DB{|ܗKűâB**tWHT&~ij×֐H _Ax$ .48qVv,50W_Kyiko6Q#+8!rU @ѣᰛ 3-k⢳ 9T16ߦUP-j9 Ւh 'RH:euJw$WտLn7?iH=N&dƒ}.PD`c<c|hp>s>^q>FIvuu 0nǦW }vdb܎F@ ¿nh\pA{'#o qJ+pF8gZhC_}#}1\{ nw  sk-n>zU<Eb{EPyBe6h%yWd0 3S ~EN:.> ?V?~?dRfP*tR{]=eGUtan&rjZzC ݿҰK{VR/޸yiW,gU4)'D'R.G݅U\!UQsY7J(3)@A.W0MS-X]MTtlj řWQ{A+hv/ +L̒8rfansi/tests/special/cps.unitizer/0000755000176200001440000000000015107077105016574 5ustar liggesusersfansi/tests/special/cps.unitizer/data.rds0000644000176200001440002245401415107077106020234 0ustar liggesusersw wVcf`Ā+o2ȂE5=5CVU76*7ZVOM}5sʊ̌u?GG?_~𣏾~}c˟~׾ ?~ǿ~_۟~?۟|;G=G_7O>vOۧ>g??웟}7~'_?ӏ?_O{O{?f{9|k}7_/>׾_Wi]?>P?g'}3?٧?|/ϿW?>˟|]~__Ǿk?ă~w3|{=O?D>o~㫟u~7~/G?ʗ׿_| Wt}ȟ}}7?٧'ǿ_k_~K\}_Dŗ?%_?ߐ#-G~uǿ~'o}k_%?ӿ_N{~H>OܾvS'_Kܧ_(!'3<諟|3~>xǿ$W~B'Z/~fWˏ}ħ}Uc}~|KtK?=k?җ>o|~0?'?k[w>o|/k?|['W~Ͽ~_?o~ݷ/>/{Чߖso_II_{(/ *M}ּ )>g>Uc>_o|_闿^_U?_S~.~>~O҃' nRů3+^eiЗ??._>/|E9 /яWP**_~KO7|k?'y+rn?{_>9/AR{?*?|qZo7|omG~i9_ܿ/'76~#rM9qy;ԍt#7ߑ{7NtUH?OSL( r69C)syr>9\@.( Er1\B.)Ker9ܙܹ܅ܥܕܵ\A(W+Ur5\C)גkur=@n(7Mr3Bn)[mr;X?#wW}r={"Tsr/^ɽ{#V{r؍!3rQ$'Ir-?r J_or;OQ$_[]!-Fޓ}dHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHdoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoHoH>K{/^K{/^K{/^K{/^K{/^K{/^K{/^K{/^K{/^K{/^K{/^K{/^K{/^K{/^K{/^K{/^K{/^K{/^K{/^K{/^K{/^K{/^K{/^K{/^K{/^K{/^K{/^K{ m/^K{/^K{/^K{/^K{/ҿ:I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OI?I'$OV?w|t+㓯/|/~w| ~+7|oݎ7ʏ܎_s;~vkoǯ?q;oOގp;~oov[oov܎vmo;ou;܎v}voߎv{o?r;~Go?v;O܎;Oݎv3㟽ގv ݎ?|;_vK_v+O܎?y;Woǟvnǿv;oǿq;oݎv;߽v{ӷ㫷ɿrx_s/ގݎvq_܎n}ow?vG?Oov;/|1~?]6]v]]N].]n]]^]>]~]]A]!]a]]Q]1]q] ]I])]i]]Y]9]y]gu]uZWAWQWIWYWEWUWMW]WCWSWKW[WGWWWOW_@PHXDTL\BRJZFVvQwwGQwwGQwwGQwwGQwwGQwwGQwwGQwwGQwwGQwwGQwwGQwwGQwwGQwwGQwwGQwwGUw]wWUw]wWUw]wWUw]wWUw]wWUw]wWUw]wWUw]wWUw]wWUw]wWUw]wWUw]wWUw]wWUw]wWUw]wWUw]wWS=wOS=wOS=wOS=wOS=wOS=wOS=wOS=wOS=wOS=wOS=wOS=wOS=wOS=wOS=wOS=wOW}w_W}w_W}w_W}w_W}w_W}w_W}w_W}w_W}w_W}w_W}w_W}w_W}w_W}w_W}w_W}w_=P@=P@=P@=P@=P@=P@=P@=P@=P@=P@=P@=P@=P@=P@=P@=P@=TCP=TCP=TCP=TCP=TCP=TCP=TCP=TCP=TCP=TCP=TCP=TCP=TCP=TCP=TCP=TCP=R#H=R#H=R#H=R#H=R#H=R#H=R#H=R#H=R#H=R#H=R#H=R#H=R#H=R#H=R#H=R#H=VcX=VcX=VcX=VcX=VcX=VcX=VcX=VcX=VcX=VcX=VcX=VcX=VcX=VcX=VcX=VcX=QOD=QOD=QOD=QOD=QOD=QOD=QOD=QOD=QOD=QOD=QOD=QOD=QOD=QOD=QOD=QOD=UOST=UOST=UOST=UOST=UOST=UOST=UOST=UOST=UOST=UOST=UOST=UOST=UOST=UOST=UOST=UOST=S3L=S3L=S3L=S3L=S3L=S3L=S3L=S3L=S3L=S3L=S3L=S3L=S3L=S3L=S3L=S3L=Ws\=Ws\=Ws\=Ws\=Ws\=Ws\=Ws\=Ws\=Ws\=Ws\=Ws\=Ws\=Ws\=Ws\=Ws\=Ws\P/ BP/ BP/ BP/ BP/ BP/ BP/ BP/ BP/ BP/ BP/ BP/ BP/ BP/ BP/ BP/ BT/KRT/KRT/KRT/KRT/KRT/KRT/KRT/KRT/KRT/KRT/KRT/KRT/KRT/KRT/KRT/KRR+JR+JR+JR+JR+JR+JR+JR+JR+JR+JR+JR+JR+JR+JR+JR+JVkZVkZVkZVkZVkZVkZVkZVkZVkZVkZVkZVkZVkZVkZVkZVkZQoFQoFQoFQoFQoFQoFQoFQoFQoFQoFQoFQoFQoFQoFQoFQoFUo[VUo[VUo[VUo[VUo[VUo[VUo[VUo[VUo[VUo[VUo[VUo[VUo[VUo[VUo[VUo[VS;NS;NS;NS;NS;NS;NS;NS;NS;NS;NS;NS;NS;NS;NS;NS;NW{^W{^W{^W{^W{^W{^W{^W{^W{^W{^W{^W{^W{^W{^W{^W{^}PA}PA}PA}PA}PA}PA}PA}PA}PA}PA}PA}PA}PA}PA}PA}PAݨwnߍQ7FݨwnߍQ7FݨwnߍQ7FݨwnߍQ7FݨwnߍQ7FݨwnߍQ7FݨwnߍQ7FݨwnߍQ7FP3ԟ g?CP3ԟ g?CP3ԟ g?CP3ԟ g?CP3ԟ g?CP3ԟ g?CP3ԟ g?CP3ԟ g?C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^T3՟Lg?ST3՟Lg?ST3՟Lg?ST3՟Lg?ST3՟Lg?ST3՟Lg?ST3՟Lg?ST3՟Lg?SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYRԟ,g?KYRԟ,g?KYRԟ,g?KYRԟ,g?KYRԟ,g?KYRԟ,g?KYRԟ,g?KYRԟ,g?KQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII׿1Lt1L13 13ʌ13L1 3139yɼb^3 ",3+*Ƭ3&l3;.3!s3')sƜ3%s\37-[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[oE[oE[oE[oE[oE[oE[oE[oE[oE[oE[oE[oE[oE[oE[oE[oE[o%[o %[o %[o %[o %[o %[o %[o %[o %[o %[o %[o %[o %[o %[o %[o %[o e[oe[oe[oe[oe[oe[oe[oe[oe[oe[oe[oe[oe[oe[oe[oe[oV[oV[oV[oV[oV[oV[oV[oV[oV[oV[oV[oV[oV[oV[oV[oV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[o5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o u[ou[ou[ou[ou[ou[ou[ou[ou[ou[ou[ou[ou[ou[ou[ou[o 6o 6o 6o 6o 6o 6o 6o 6o 6o 6o 6o 6o 6o 6o 6o 6oM6oM6oM6oM6oM6oM6oM6oM6oM6oM6oM6oM6oM6oM6oM6oM6o-o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o momomomomomomomomomomomomomomomovovovovovovovovovovovovovovovovo]vo]vo]vo]vo]vo]vo]vo]vo]vo]vo]vo]vo]vo]vo]vo]vo=o=o=o=o=o=o=o=o=o=o=o=o=o=o=o=o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o;;;;;;;;;;;;;;;;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;#;#;#;#;#;#;#;#;#;#;#;#;#;#;#;#;c;c;c;c;c;c;c;c;c;c;c;c;c;c;c;c;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;SN;SN;SN;SN;SN;SN;SN;SN;SN;SN;SN;SN;SN;SN;SN;SN;3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s; . . . . . . . . . . . . . . . .K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.+ + + + + + + + + + + + + + + + kkkkkkkkkkkkkkkknnnnnnnnnnnnnnnn[n[n[n[n[n[n[n[n[n[n[n[n[n[n[n[n;;;;;;;;;;;;;;;;N Lt0L0L 03̌03L0303s2G1sœ2g9s\2W5s2kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯv::::::::::::::::įN:įN:įN:įN:įN:įN:įN:įN:įN:įN:įN:įN:įN:įN:įN:įN:¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .ƯnƯnƯnƯnƯnƯnƯnƯnƯnƯnƯnƯnƯnƯnƯnƯnzzzzzzzzzzzzzzzzů^zů^zů^zů^zů^zů^zů^zů^zů^zů^zů^zů^zů^zů^zů^zů^zï>ï>ï>ï>ï>ï>ï>ï>ï>ï>ï>ï>ï>ï>ï>ï>ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~oooooooooooooooooAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAo!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!oaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoQFoQFoQFoQFoQFoQFoQFoQFoQFoQFoQFoQFoQFoQFoQFoQFo 1o 1o 1o 1o 1o 1o 1o 1o 1o 1o 1o 1o 1o 1o 1o 1oqoqoqoqoqoqoqoqoqoqoqoqoqoqoqoqo &o &o &o &o &o &o &o &o &o &o &o &o &o &o &o &oI&oI&oI&oI&oI&oI&oI&oI&oI&oI&oI&oI&oI&oI&oI&oI&o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )oioioioioioioioioioioioioioioioiofofofofofofofofofofofofofofofofoYfoYfoYfoYfoYfoYfoYfoYfoYfoYfoYfoYfoYfoYfoYfoYfo9o9o9o9o9o9o9o9o9o9o9o9o9o9o9o9oyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoy{3 g=~{3 g=~{3 g=~{3 g=~{3 g=~{3 g=~{3 g=~{3 g=~{s=9~{s=9~{s=9~{s=9~{s=9~{s=9~{s=9~{s=9~{ ^~/{ ^~/{ ^~/{ ^~/{ ^~/{ ^~/{ ^~/{ ^~/{K^%~/{K^%~/{K^%~/{K^%~/{K^%~/{K^%~/{K^%~/{K^%~/{+^ W~{+^ W~{+^ W~{+^ W~{+^ W~{+^ W~{+^ W~{+^ W~{k^5~{k^5~{k^5~{k^5~{k^5~{k^5~{k^5~{k^5~[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[oE[oE[oE[oE[oE[oE[oE[oE[oE[oE[oE[oE[oE[oE[oE[oE[o %[o %[o %[o %[o %[o %[o %[o %[o %[o %[o %[o %[o %[o %[o %[o %[oe[oe[oe[oe[oe[oe[oe[oe[oe[oe[oe[oe[oe[oe[oe[oe[oV[oV[oV[oV[oV[oV[oV[oV[oV[oV[oV[oV[oV[oV[oV[oV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[ou[ou[ou[ou[ou[ou[ou[ou[ou[ou[ou[ou[ou[ou[ou[ouo 6o 6o 6o 6o 6o 6o 6o 6o 6o 6o 6o 6o 6o 6o 6o 6oM6oM6oM6oM6oM6oM6oM6oM6oM6oM6oM6oM6oM6oM6oM6oM6o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -omomomomomomomomomomomomomomomomovovovovovovovovovovovovovovovovo]vo]vo]vo]vo]vo]vo]vo]vo]vo]vo]vo]vo]vo]vo]vo]vo=o=o=o=o=o=o=o=o=o=o=o=o=o=o=o=o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o};;;;;;;;;;;;;;;;;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;#;#;#;#;#;#;#;#;#;#;#;#;#;#;#;#;c;c;c;c;c;c;c;c;c;c;c;c;c;c;c;c;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;SN;SN;SN;SN;SN;SN;SN;SN;SN;SN;SN;SN;SN;SN;SN;SN; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s . . . . . . . . . . . . . . . .K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K. + + + + + + + + + + + + + + + +kkkkkkkkkkkkkkkknnnnnnnnnnnnnnnn[n[n[n[n[n[n[n[n[n[n[n[n[n[n[n[n;;;;;;;;;;;;;;;; 1Lt1L13 13ʌ13L1 3139yɼb^3 ",3+*Ƭ3&l3;.3!s3')sƜ3%s\37-6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï vkǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯ::::::::::::::::N:įN:įN:įN:įN:įN:įN:įN:įN:įN:įN:įN:įN:įN:įN:įN:į.¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ nƯnƯnƯnƯnƯnƯnƯnƯnƯnƯnƯnƯnƯnƯnƯnƯzzzzzzzzzzzzzzzz^zů^zů^zů^zů^zů^zů^zů^zů^zů^zů^zů^zů^zů^zů^zů^zů>ï>ï>ï>ï>ï>ï>ï>ï>ï>ï>ï>ï>ï>ï>ï>ï~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯooooooooooooooooAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAo!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!oaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoQFoQFoQFoQFoQFoQFoQFoQFoQFoQFoQFoQFoQFoQFoQFoQFo1o 1o 1o 1o 1o 1o 1o 1o 1o 1o 1o 1o 1o 1o 1o 1o qoqoqoqoqoqoqoqoqoqoqoqoqoqoqoqo &o &o &o &o &o &o &o &o &o &o &o &o &o &o &o &oI&oI&oI&oI&oI&oI&oI&oI&oI&oI&oI&oI&oI&oI&oI&oI&o)o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o ioioioioioioioioioioioioioioioiofofofofofofofofofofofofofofofofoYfoYfoYfoYfoYfoYfoYfoYfoYfoYfoYfoYfoYfoYfoYfoYfo9o9o9o9o9o9o9o9o9o9o9o9o9o9o9o9oyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyog=~{3 g=~{3 g=~{3 g=~{3 g=~{3 g=~{3 g=~{3 g=~{3 =9~{s=9~{s=9~{s=9~{s=9~{s=9~{s=9~{s=9~{s~/{ ^~/{ ^~/{ ^~/{ ^~/{ ^~/{ ^~/{ ^~/{ ^%~/{K^%~/{K^%~/{K^%~/{K^%~/{K^%~/{K^%~/{K^%~/{K^W~{+^ W~{+^ W~{+^ W~{+^ W~{+^ W~{+^ W~{+^ W~{+^ 5~{k^5~{k^5~{k^5~{k^5~{k^5~{k^5~{k^5~{k^[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[oE[oE[oE[oE[oE[oE[oE[oE[oE[oE[oE[oE[oE[oE[oE[oE[o%[o %[o %[o %[o %[o %[o %[o %[o %[o %[o %[o %[o %[o %[o %[o %[o e[oe[oe[oe[oe[oe[oe[oe[oe[oe[oe[oe[oe[oe[oe[oe[oV[oV[oV[oV[oV[oV[oV[oV[oV[oV[oV[oV[oV[oV[oV[oV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[oUV[o5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o 5[o u[ou[ou[ou[ou[ou[ou[ou[ou[ou[ou[ou[ou[ou[ou[ou[o 6o 6o 6o 6o 6o 6o 6o 6o 6o 6o 6o 6o 6o 6o 6o 6oM6oM6oM6oM6oM6oM6oM6oM6oM6oM6oM6oM6oM6oM6oM6oM6o-o -o -o -o -o -o -o -o -o -o -o -o -o -o -o -o momomomomomomomomomomomomomomomovovovovovovovovovovovovovovovovo]vo]vo]vo]vo]vo]vo]vo]vo]vo]vo]vo]vo]vo]vo]vo]vo=o=o=o=o=o=o=o=o=o=o=o=o=o=o=o=o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o;;;;;;;;;;;;;;;;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;#;#;#;#;#;#;#;#;#;#;#;#;#;#;#;#;c;c;c;c;c;c;c;c;c;c;c;c;c;c;c;c;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;N;SN;SN;SN;SN;SN;SN;SN;SN;SN;SN;SN;SN;SN;SN;SN;SN;3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s; . . . . . . . . . . . . . . . .K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.+ + + + + + + + + + + + + + + + kkkkkkkkkkkkkkkknnnnnnnnnnnnnnnn[n[n[n[n[n[n[n[n[n[n[n[n[n[n[n[n;;;;;;;;;;;;;;;;N׿ Lt0L0L 03̌03L0303s2G1sœ2g9s\2W5s2kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kï 6kǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯvkǯv::::::::::::::::įN:įN:įN:įN:įN:įN:įN:įN:įN:įN:įN:įN:įN:įN:įN:įN:¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .¯ .ƯnƯnƯnƯnƯnƯnƯnƯnƯnƯnƯnƯnƯnƯnƯnƯnzzzzzzzzzzzzzzzzů^zů^zů^zů^zů^zů^zů^zů^zů^zů^zů^zů^zů^zů^zů^zů^zï>ï>ï>ï>ï>ï>ï>ï>ï>ï>ï>ï>ï>ï>ï>ï>ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~ǯ~oooooooooooooooooAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAo!o!o!o!o!o!o!o!o!o!o!o!o!o!o!o!oaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoQFoQFoQFoQFoQFoQFoQFoQFoQFoQFoQFoQFoQFoQFoQFoQFo 1o 1o 1o 1o 1o 1o 1o 1o 1o 1o 1o 1o 1o 1o 1o 1oqoqoqoqoqoqoqoqoqoqoqoqoqoqoqoqo &o &o &o &o &o &o &o &o &o &o &o &o &o &o &o &oI&oI&oI&oI&oI&oI&oI&oI&oI&oI&oI&oI&oI&oI&oI&oI&o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )o )oioioioioioioioioioioioioioioioiofofofofofofofofofofofofofofofofoYfoYfoYfoYfoYfoYfoYfoYfoYfoYfoYfoYfoYfoYfoYfoYfo9o9o9o9o9o9o9o9o9o9o9o9o9o9o9o9oyoyoyoyoyoyoyoyoyoyo"@XcfffffܥV?M6moߦM6moߦM6moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[mo߶mmo߶mmo߶mmo߶mmo߶mmo߶mmo߶mmo߶mmoߎ;voߎ;voߎ;voߎ;voߎ;voߎ;voߎ;voߎ;vo߮]vo߮]vo߮]vo߮]vo߮]vo߮]vo߮]vo߮]voߞ={oߞ={oߞ={oߞ={oߞ={oߞ={oߞ={oߞ={o߾}o߾}o߾}o߾}o߾}o߾}o߾}o߾}w߁;w߁;w߁;w߁;w߁;w߁;w߁;w߁;wߡC;wߡC;wߡC;wߡC;wߡC;wߡC;wߡC;wߡC;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;w߱c;w߱c;w߱c;w߱c;w߱c;w߱c;w߱c;w߱c;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;w߹s;w߹s;w߹s;w߹s;w߹s;w߹s;w߹s;w߹s;w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߵk]wߵk]wߵk]wߵk]wߵk]wߵk]wߵk]wߵk]wߍ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ7nw߭[nw߭[nw߭[nw߭[nw߭[nw߭[nw߭[nw߭[nwߝ;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;ww߽{w߽{w߽{w߽{w߽{w߽{w߽{w߽{߃={߃={߃={߃={߃={߃={߃={߃={ߣG={ߣG={ߣG={ߣG={ߣG={ߣG={ߣG={ߣG={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={߳g={߳g={߳g={߳g={߳g={߳g={߳g={߳g={ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{߫W^{߫W^{߫W^{߫W^{߫W^{߫W^{߫W^{߫W^{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{߻w{߻w{߻w{߻w{߻w{߻w{߻w{߻w{߇>}߇>}߇>}߇>}߇>}߇>}߇>}߇>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}߷o}߷o}߷o}߷o}߷o}߷o}߷o}߷o}ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~߯_~߯_~߯_~߯_~߯_~߯_~߯_~߯_~ߟ?ߟ?ߟ?ߟ?ߟ?ߟ?ߟ?ߟ?? 0b $0bX"b &b8!p %px# ' 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7o߀A 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߠ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐa 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߰#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈QF7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߨ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘq7o߸q7o߸q7o߸q7o߸q7o߸q7o߸q7o߸q7o߸ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄I&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌYf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜy7o߼y7o߼y7o߼y7o߼y7o߼y7o߼y7o߼y7o߼ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂E-[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߢ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒe-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[o߲+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚu[oߺu[oߺu[oߺu[oߺu[oߺu[oߺu[oߺu[oߺ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆M6moߦM6moߦM6moߦM6moߦM6moߦM6moߦM6moߦM6moߦ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖmmo߶mmo߶mmo߶mmo߶mmo߶mmo߶mmo߶mmo߶;voߎ;voߎ;voߎ;voߎ;voߎ;voߎ;voߎ;voߎ]vo߮]vo߮]vo߮]vo߮]vo߮]vo߮]vo߮]vo߮={oߞ={oߞ={oߞ={oߞ={oߞ={oߞ={oߞ={oߞ}o߾}o߾}o߾}o߾}o߾}o߾}o߾}o߾;w߁;w߁;w߁;w߁;w߁;w߁;w߁;w߁C;wߡC;wߡC;wߡC;wߡC;wߡC;wߡC;wߡC;wߡ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑc;w߱c;w߱c;w߱c;w߱c;w߱c;w߱c;w߱c;w߱'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉SN;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߩ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙs;w߹s;w߹s;w߹s;w߹s;w߹s;w߹s;w߹s;w߹ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅K.]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߥ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕk]wߵk]wߵk]wߵk]wߵk]wߵk]wߵk]wߵk]wߵ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ[nw߭[nw߭[nw߭[nw߭[nw߭[nw߭[nw߭[nw߭;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ{w߽{w߽{w߽{w߽{w߽{w߽{w߽{w߽={߃={߃={߃={߃={߃={߃={߃={߃G={ߣG={ߣG={ߣG={ߣG={ߣG={ߣG={ߣG={ߣ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓg={߳g={߳g={߳g={߳g={߳g={߳g={߳g={߳/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋW^{߫W^{߫W^{߫W^{߫W^{߫W^{߫W^{߫W^{߫7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛw{߻w{߻w{߻w{߻w{߻w{߻w{߻w{߻>}߇>}߇>}߇>}߇>}߇>}߇>}߇>}߇O>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߧ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗo}߷o}߷o}߷o}߷o}߷o}߷o}߷o}߷?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ_~߯_~߯_~߯_~߯_~߯_~߯_~߯_~߯?ߟ?ߟ?ߟ?ߟ?ߟ?ߟ?ߟ?߿ b(0 Lb Ә,0,b X*ְ lb .8)p \ ׸-p< x+| /7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7o߸q7o߸q7o߸q7o߸q7o߸q7o߸q7o߸q7o߸q7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7o߼y7o߼y7o߼y7o߼y7o߼y7o߼y7o߼y7o߼y[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߺu[oߺu[oߺu[oߺu[oߺu[oߺu[oߺu[oߺuo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6moߦM6moߦM6moߦM6moߦM6moߦM6moߦM6moߦM6moߦM6moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[mo߶mmo߶mmo߶mmo߶mmo߶mmo߶mmo߶mmo߶mmoߎ;voߎ;voߎ;voߎ;voߎ;voߎ;voߎ;voߎ;vo߮]vo߮]vo߮]vo߮]vo߮]vo߮]vo߮]vo߮]voߞ={oߞ={oߞ={oߞ={oߞ={oߞ={oߞ={oߞ={o߾}o߾}o߾}o߾}o߾}o߾}o߾}o߾};w߁;w߁;w߁;w߁;w߁;w߁;w߁;w߁;wߡC;wߡC;wߡC;wߡC;wߡC;wߡC;wߡC;wߡC;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;w߱c;w߱c;w߱c;w߱c;w߱c;w߱c;w߱c;w߱c;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;w߹s;w߹s;w߹s;w߹s;w߹s;w߹s;w߹s;w߹sw߅ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߵk]wߵk]wߵk]wߵk]wߵk]wߵk]wߵk]wߵk]wߍ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ7nw߭[nw߭[nw߭[nw߭[nw߭[nw߭[nw߭[nw߭[nwߝ;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;ww߽{w߽{w߽{w߽{w߽{w߽{w߽{w߽{{߃={߃={߃={߃={߃={߃={߃={߃={ߣG={ߣG={ߣG={ߣG={ߣG={ߣG={ߣG={ߣG={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={߳g={߳g={߳g={߳g={߳g={߳g={߳g={߳g={ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{߫W^{߫W^{߫W^{߫W^{߫W^{߫W^{߫W^{߫W^{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{߻w{߻w{߻w{߻w{߻w{߻w{߻w{߻w߇>}߇>}߇>}߇>}߇>}߇>}߇>}߇>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}߷o}߷o}߷o}߷o}߷o}߷o}߷o}߷o}ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~߯_~߯_~߯_~߯_~߯_~߯_~߯_~߯_~ߟ?ߟ?ߟ?ߟ?ߟ?ߟ?ߟ?ߟ? 0b $0bX"b &b8!p %px# ' 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7o߀A 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߠ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐa 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߰#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈QF7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߨ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘq7o߸q7o߸q7o߸q7o߸q7o߸q7o߸q7o߸q7o߸ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄I&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌYf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜy7o߼y7o߼y7o߼y7o߼y7o߼y7o߼y7o߼y7o߼ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂E-[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߢ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒe-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[o߲+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚu[oߺu[oߺu[oߺu[oߺu[oߺu[oߺu[oߺu[oߺ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆M6moߦM6moߦM6moߦM6moߦM6moߦM6moߦM6moߦM6moߦ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖmmo߶mmo߶mmo߶mmo߶mmo߶mmo߶mmo߶mmo߶;voߎ;voߎ;voߎ;voߎ;voߎ;voߎ;voߎ;voߎ]vo߮]vo߮]vo߮]vo߮]vo߮]vo߮]vo߮]vo߮={oߞ={oߞ={oߞ={oߞ={oߞ={oߞ={oߞ={oߞ}o߾}o߾}o߾}o߾}o߾}o߾}o߾}o߾;w߁;w߁;w߁;w߁;w߁;w߁;w߁;w߁C;wߡC;wߡC;wߡC;wߡC;wߡC;wߡC;wߡC;wߡ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑc;w߱c;w߱c;w߱c;w߱c;w߱c;w߱c;w߱c;w߱'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉SN;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߩ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙs;w߹s;w߹s;w߹s;w߹s;w߹s;w߹s;w߹s;w߹ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅K.]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߥ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕk]wߵk]wߵk]wߵk]wߵk]wߵk]wߵk]wߵk]wߵ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ[nw߭[nw߭[nw߭[nw߭[nw߭[nw߭[nw߭[nw߭;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ{w߽{w߽{w߽{w߽{w߽{w߽{w߽{w߽={߃={߃={߃={߃={߃={߃={߃={߃G={ߣG={ߣG={ߣG={ߣG={ߣG={ߣG={ߣG={ߣ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓg={߳g={߳g={߳g={߳g={߳g={߳g={߳g={߳/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋW^{߫W^{߫W^{߫W^{߫W^{߫W^{߫W^{߫W^{߫7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛw{߻w{߻w{߻w{߻w{߻w{߻w{߻w{߻>}߇>}߇>}߇>}߇>}߇>}߇>}߇>}߇O>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߧ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗo}߷o}߷o}߷o}߷o}߷o}߷o}߷o}߷?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ_~߯_~߯_~߯_~߯_~߯_~߯_~߯_~߯?ߟ?ߟ?ߟ?ߟ?ߟ?ߟ?ߟ?߿1a`c&1i`se`kX6m`{qcg8.qkwgox>o 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7o߸q7o߸q7o߸q7o߸q7o߸q7o߸q7o߸q7o߸qM7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴi7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7o߼y7o߼y7o߼y7o߼y7o߼y7o߼y7o߼y7o߼y-[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߺu[oߺu[oߺu[oߺu[oߺu[oߺu[oߺu[oߺumo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6moߦM6moߦM6moߦM6moߦM6moߦM6G$]8k}l4oߦM6moߦM6moߦM6moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[mo߶mmo߶mmo߶mmo߶mmo߶mmo߶mmo߶mmo߶mmoߎ;voߎ;voߎ;voߎ;voߎ;voߎ;voߎ;voߎ;vo߮]vo߮]vo߮]vo߮]vo߮]vo߮]vo߮]vo߮]voߞ={oߞ={oߞ={oߞ={oߞ={oߞ={oߞ={oߞ={o߾}o߾}o߾}o߾}o߾}o߾}o߾}o߾}߁;w߁;w߁;w߁;w߁;w߁;w߁;w߁;wߡC;wߡC;wߡC;wߡC;wߡC;wߡC;wߡC;wߡC;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;w߱c;w߱c;w߱c;w߱c;w߱c;w߱c;w߱c;w߱c;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;w߹s;w߹s;w߹s;w߹s;w߹s;w߹s;w߹s;w߹s;w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߵk]wߵk]wߵk]wߵk]wߵk]wߵk]wߵk]wߵk]wߍ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ7nw߭[nw߭[nw߭[nw߭[nw߭[nw߭[nw߭[nw߭[nwߝ;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;ww߽{w߽{w߽{w߽{w߽{w߽{w߽{w߽{w߃={߃={߃={߃={߃={߃={߃={߃={ߣG={ߣG={ߣG={ߣG={ߣG={ߣG={ߣG={ߣG={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={߳g={߳g={߳g={߳g={߳g={߳g={߳g={߳g={ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{߫W^{߫W^{߫W^{߫W^{߫W^{߫W^{߫W^{߫W^{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{߻w{߻w{߻w{߻w{߻w{߻w{߻w{߻w{߇>}߇>}߇>}߇>}߇>}߇>}߇>}߇>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}߷o}߷o}߷o}߷o}߷o}߷o}߷o}߷o}ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~߯_~߯_~߯_~߯_~߯_~߯_~߯_~߯_~ߟ?ߟ?ߟ?ߟ?ߟ?ߟ?ߟ?ߟ?0A a#1ILa3汀E,a+XֱMla;qC'8qK\7G</xO|?E 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߠAC 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ! 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈F7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߨQc7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ17o߸q7o߸q7o߸q7o߸q7o߸q7o߸q7o߸q7o߸q&M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤISM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)M7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴi3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Ys7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ97o߼y7o߼y7o߼y7o߼y7o߼y7o߼y7o߼y7o߼y -[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂-[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߢEK-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUk[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5[oߺu[oߺu[oߺu[oߺu[oߺu[oߺu[oߺu[oߺu6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6moߦM6moߦM6moߦM6moߦM6moߦM6moߦM6moߦM6moߦM[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-mo߶mmo߶mmo߶mmo߶mmo߶mmo߶mmo߶mmo߶m;voߎ;voߎ;voߎ;voߎ;voߎ;voߎ;voߎ;voߎvo߮]vo߮]vo߮]vo߮]vo߮]vo߮]vo߮]vo߮]{oߞ={oߞ={oߞ={oߞ={oߞ={oߞ={oߞ={oߞ=o߾}o߾}o߾}o߾}o߾}o߾}o߾}o߾};w߁;w߁;w߁;w߁;w߁;w߁;w߁;w߁;wߡC;wߡC;wߡC;wߡC;wߡC;wߡC;wߡC;wߡCG;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#;w߱c;w߱c;w߱c;w߱c;w߱c;w߱c;w߱c;w߱c'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉N;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߩSg;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3;w߹s;w߹s;w߹s;w߹s;w߹s;w߹s;w߹s;w߹s.]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߥKW]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+]wߵk]wߵk]wߵk]wߵk]wߵk]wߵk]wߵk]wߵk7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍnw߭[nw߭[nw߭[nw߭[nw߭[nw߭[nw߭[nw߭[wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;w߽{w߽{w߽{w߽{w߽{w߽{w߽{w߽{={߃={߃={߃={߃={߃={߃={߃={߃={ߣG={ߣG={ߣG={ߣG={ߣG={ߣG={ߣG={ߣGO={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'={߳g={߳g={߳g={߳g={߳g={߳g={߳g={߳g/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ^{߫W^{߫W^{߫W^{߫W^{߫W^{߫W^{߫W^{߫Wo{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7{߻w{߻w{߻w{߻w{߻w{߻w{߻w{߻w>}߇>}߇>}߇>}߇>}߇>}߇>}߇>}߇>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/}߷o}߷o}߷o}߷o}߷o}߷o}߷o}߷o?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ~߯_~߯_~߯_~߯_~߯_~߯_~߯_~߯_ߟ?ߟ?ߟ?ߟ?ߟ?ߟ?ߟ?ߟ1Qa1Ya XUa]a8qSq[xW_7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7o߸q7o߸q7o߸q7o߸q7o߸q7o߸q7o߸q7o߸q7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7o߼y7o߼y7o߼y7o߼y7o߼y7o߼y7o߼y7o߼yo߂ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߺu[oߺu[oߺu[oߺu[oߺu[oߺu[oߺu[oߺu[o߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6moߦM6moߦM6moߦM6moߦM6moߦM6moߦM6moߦM6moߦM6moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[mo߶mmo߶mmo߶mmo߶mmo߶mmo߶mmo߶mmo߶mmoߎ;voߎ;voߎ;voߎ;voߎ;voߎ;voߎ;voߎ;vo߮]vo߮]vo߮]vo߮]vo߮]vo߮]vo߮]vo߮]voߞ={oߞ={oߞ={oߞ={oߞ={oߞ={oߞ={oߞ={o߾}o߾}o߾}o߾}o߾}o߾}o߾}o߾}w߁;w߁;w߁;w߁;w߁;w߁;w߁;w߁;wߡC;wߡC;wߡC;wߡC;wߡC;wߡC;wߡC;wߡC;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;w߱c;w߱c;w߱c;w߱c;w߱c;w߱c;w߱c;w߱c;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;w߹s;w߹s;w߹s;w߹s;w߹s;w߹s;w߹s;w߹s;w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߵk]wߵk]wߵk]wߵk]wߵk]wߵk]wߵk]wߵk]wߍ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ7nw߭[nw߭[nw߭[nw߭[nw߭[nw߭[nw߭[nw߭[nwߝ;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;ww߽{w߽{w߽{w߽{w߽{w߽{w߽{w߽{߃={߃={߃={߃={߃={߃={߃={߃={ߣG={ߣG={ߣG={ߣG={ߣG={ߣG={ߣG={ߣG={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={߳g={߳g={߳g={߳g={߳g={߳g={߳g={߳g={ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{߫W^{߫W^{߫W^{߫W^{߫W^{߫W^{߫W^{߫W^{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{߻w{߻w{߻w{߻w{߻w{߻w{߻w{߻w{߇>}߇>}߇>}߇>}߇>}߇>}߇>}߇>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}߷o}߷o}߷o}߷o}߷o}߷o}߷o}߷o}ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~߯_~߯_~߯_~߯_~߯_~߯_~߯_~߯_~ߟ?ߟ?ߟ?ߟ?ߟ?ߟ?ߟ?ߟ?0A a#1ILa3汀E,a+XֱMla;qC'8qK\7G</xO|?E 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߠAC 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ! 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈F7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߨQc7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ17o߸q7o߸q7o߸q7o߸q7o߸q7o߸q7o߸q7o߸q&M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤISM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)M7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴi3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Ys7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ97o߼y7o߼y7o߼y7o߼y7o߼y7o߼y7o߼y7o߼y -[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂-[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߢEK-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUk[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5[oߺu[oߺu[oߺu[oߺu[oߺu[oߺu[oߺu[oߺu6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6moߦM6moߦM6moߦM6moߦM6moߦM6moߦM6moߦM6moߦM[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-[moߖ-mo߶mmo߶mmo߶mmo߶mmo߶mmo߶mmo߶mmo߶m;voߎ;voߎ;voߎ;voߎ;voߎ;voߎ;voߎ;voߎvo߮]vo߮]vo߮]vo߮]vo߮]vo߮]vo߮]vo߮]{oߞ={oߞ={oߞ={oߞ={oߞ={oߞ={oߞ={oߞ=o߾}o߾}o߾}o߾}o߾}o߾}o߾}o߾};w߁;w߁;w߁;w߁;w߁;w߁;w߁;w߁;wߡC;wߡC;wߡC;wߡC;wߡC;wߡC;wߡC;wߡCG;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#G;wߑ#;w߱c;w߱c;w߱c;w߱c;w߱c;w߱c;w߱c;w߱c'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉'N;w߉N;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߩSN;wߩSg;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3g;wߙ3;w߹s;w߹s;w߹s;w߹s;w߹s;w߹s;w߹s;w߹s.]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]w߅ .]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߥK.]wߥKW]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+W]wߕ+]wߵk]wߵk]wߵk]wߵk]wߵk]wߵk]wߵk]wߵk7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍ7nwߍnw߭[nw߭[nw߭[nw߭[nw߭[nw߭[nw߭[nw߭[wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;wwߝ;w߽{w߽{w߽{w߽{w߽{w߽{w߽{w߽{={߃={߃={߃={߃={߃={߃={߃={߃={ߣG={ߣG={ߣG={ߣG={ߣG={ߣG={ߣG={ߣGO={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'O={ߓ'={߳g={߳g={߳g={߳g={߳g={߳g={߳g={߳g/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ/^{ߋ^{߫W^{߫W^{߫W^{߫W^{߫W^{߫W^{߫W^{߫Wo{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7o{ߛ7{߻w{߻w{߻w{߻w{߻w{߻w{߻w{߻w>}߇>}߇>}߇>}߇>}߇>}߇>}߇>}߇>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO>}ߧO_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/_}ߗ/}߷o}߷o}߷o}߷o}߷o}߷o}߷o}߷o?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ?~ߏ~߯_~߯_~߯_~߯_~߯_~߯_~߯_~߯_ߟ?ߟ?ߟ?ߟ?ߟ?ߟ?ߟ?ߟ b(0 Lb Ә,0,b X*ְ lb .8)p \ ׸-p< x+| /7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7o߀ 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߠA 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7oߐ!C 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߰a 7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7o߈#F7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߨQF7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7oߘ1c7o߸q7o߸q7o߸q7o߸q7o߸q7o߸q7o߸q7o߸q7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7o߄ &M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߤI&M7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߔ)SM7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߴiM7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7oߌ3f7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7o߬Yf7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7oߜ9s7o߼y7o߼y7o߼y7o߼y7o߼y7o߼y7o߼y7o߼y[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[o߂ -[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߢE-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[oߒ%K-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[o߲e-[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߊ+V[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߪUV[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߚ5k[oߺu[oߺu[oߺu[oߺu[oߺu[oߺu[oߺu[oߺuo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6mo߆ 6moߦM6moߦM6moߦM6moߦM6moߦM}$@s4OzoUo`w:u~[o:u~[o:u~[o:u~6mo ~6mo ~6mo ~6mo ~6mo ~6mo ~6mo ~6mo ~6mo&M~6mo&M~6mo&M~6mo&M~6mo&M~6mo&M~6mo&M~6mo&M~[mo-~[mo-~[mo-~[mo-~[mo-~[mo-~[mo-~[mo-~mo6m~mo6m~mo6m~mo6m~mo6m~mo6m~mo6m~mo6m~;vo~;vo~;vo~;vo~;vo~;vo~;vo~;vo~vo.]~vo.]~vo.]~vo.]~vo.]~vo.]~vo.]~vo.]~{o=~{o=~{o=~{o=~{o=~{o=~{o=~{o=~o>}~o>}~o>}~o>}~o>}~o>}~o>}~o>}~;w~;w~;w~;w~;w~;w~;w~;w~;w!C~;w!C~;w!C~;w!C~;w!C~;w!C~;w!C~;w!C~G;w#~G;w#~G;w#~G;w#~G;w#~G;w#~G;w#~G;w#~;w1c~;w1c~;w1c~;w1c~;w1c~;w1c~;w1c~;w1c~'N;w ~'N;w ~'N;w ~'N;w ~'N;w ~'N;w ~'N;w ~'N;w ~N;w)S~N;w)S~N;w)S~N;w)S~N;w)S~N;w)S~N;w)S~N;w)S~g;w3~g;w3~g;w3~g;w3~g;w3~g;w3~g;w3~g;w3~;w9s~;w9s~;w9s~;w9s~;w9s~;w9s~;w9s~;w9s~.]w ~.]w ~.]w ~.]w ~.]w ~.]w ~.]w ~.]w ~.]w%K~.]w%K~.]w%K~.]w%K~.]w%K~.]w%K~.]w%K~.]w%K~W]w+~W]w+~W]w+~W]w+~W]w+~W]w+~W]w+~W]w+~]w5k~]w5k~]w5k~]w5k~]w5k~]w5k~]w5k~]w5k~7nw ~7nw ~7nw ~7nw ~7nw ~7nw ~7nw ~7nw ~nw-[~nw-[~nw-[~nw-[~nw-[~nw-[~nw-[~nw-[~ww;~ww;~ww;~ww;~ww;~ww;~ww;~ww;~w={~w={~w={~w={~w={~w={~w={~w={~={~={~={~={~={~={~={~={~={#G~={#G~={#G~={#G~={#G~={#G~={#G~={#G~O={'~O={'~O={'~O={'~O={'~O={'~O={'~O={'~={3g~={3g~={3g~={3g~={3g~={3g~={3g~={3g~/^{ ~/^{ ~/^{ ~/^{ ~/^{ ~/^{ ~/^{ ~/^{ ~^{+W~^{+W~^{+W~^{+W~^{+W~^{+W~^{+W~^{+W~o{7~o{7~o{7~o{7~o{7~o{7~o{7~o{7~{;w~{;w~{;w~{;w~{;w~{;w~{;w~{;w~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~o~o~o~o~o~o~o~o~o~o~o~o~o~o~o~o~~~~~~~~~~~~~~~~~_~_~_~_~_~_~_~_~_~_~_~_~_~_~_~_~?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~߿ϿA&dRL'2+s2/_dA|%.?,ˊʚˆlʖlˎʞˁʑˉʙ˅\ʕ\ˍʝ˃<ʓ<ˋʛ/-~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}7o ~&M7o ~&M7o ~&M7o ~&M7o ~&M7o ~&M7o ~&M7o ~&M7o$I~&M7o$I~&M7o$I~&M7o$I~&M7o$I~&M7o$I~&M7o$I~&M7o$I~&M7o)~SM7o)~SM7o)~SM7o)~SM7o)~SM7o)~SM7o)~SM7o)~SMG~}G~}G~}G~}G~}G~}G~}G~}G~}G~}G~}G~}G~}G~}G~}G~}7o4i~M7o4i~M7o4i~M7o4i~M7o4i~M7o4i~M7o4i~M7o4i~M'~}'~}'~}'~}'~}'~}'~}'~}'~}'~}'~}'~}'~}'~}'~}'~}7o ~3f7o ~3f7o ~3f7o ~3f7o ~3f7o ~3f7o ~3f7o ~3fg~}g~}g~}g~}g~}g~}g~}g~}g~}g~}g~}g~}g~}g~}g~}g~}7o,Y~f7o,Y~f7o,Y~f7o,Y~f7o,Y~f7o,Y~f7o,Y~f7o,Y~f7o9~s7o9~s7o9~s7o9~s7o9~s7o9~s7o9~s7o9~s7o}~o>}~o>}~o>}~o>}~o>}~o>}~o>}~w~;w~;w~;w~;w~;w~;w~;w~;w!C~;w!C~;w!C~;w!C~;w!C~;w!C~;w!C~;w!C~;w#~G;w#~G;w#~G;w#~G;w#~G;w#~G;w#~G;w#~G;w1c~;w1c~;w1c~;w1c~;w1c~;w1c~;w1c~;w1c~;w ~'N;w ~'N;w ~'N;w ~'N;w ~'N;w ~'N;w ~'N;w ~'N;w)S~N;w)S~N;w)S~N;w)S~N;w)S~N;w)S~N;w)S~N;w)S~N;w3~g;w3~g;w3~g;w3~g;w3~g;w3~g;w3~g;w3~g;w9s~;w9s~;w9s~;w9s~;w9s~;w9s~;w9s~;w9s~;w ~.]w ~.]w ~.]w ~.]w ~.]w ~.]w ~.]w ~.]w%K~.]w%K~.]w%K~.]w%K~.]w%K~.]w%K~.]w%K~.]w%K~.]w+~W]w+~W]w+~W]w+~W]w+~W]w+~W]w+~W]w+~W]w5k~]w5k~]w5k~]w5k~]w5k~]w5k~]w5k~]w5k~]w ~7nw ~7nw ~7nw ~7nw ~7nw ~7nw ~7nw ~7nw-[~nw-[~nw-[~nw-[~nw-[~nw-[~nw-[~nw-[~nw;~ww;~ww;~ww;~ww;~ww;~ww;~ww;~ww={~w={~w={~w={~w={~w={~w={~w={~~={~={~={~={~={~={~={~={#G~={#G~={#G~={#G~={#G~={#G~={#G~={#G~={'~O={'~O={'~O={'~O={'~O={'~O={'~O={'~O={3g~={3g~={3g~={3g~={3g~={3g~={3g~={3g~={ ~/^{ ~/^{ ~/^{ ~/^{ ~/^{ ~/^{ ~/^{ ~/^{+W~^{+W~^{+W~^{+W~^{+W~^{+W~^{+W~^{+W~^{7~o{7~o{7~o{7~o{7~o{7~o{7~o{7~o{;w~{;w~{;w~{;w~{;w~{;w~{;w~{;w~{/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~o~o~o~o~o~o~o~o~o~o~o~o~o~o~o~o~~~~~~~~~~~~~~~~~_~_~_~_~_~_~_~_~_~_~_~_~_~_~_~_~?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~O>ȄLʔ|i$3YfeN,Ȣ|o$eYUYuِMْmّ]ٓ}9C9c9S9sKk[{yGygyWyw%>>>>>>>>>>>>>>>>&M7o ~&M7o ~&M7o ~&M7o ~&M7o ~&M7o ~&M7o ~&M7o ~&M7o$I~&M7o$I~&M7o$I~&M7o$I~&M7o$I~&M7o$I~&M7o$I~&M7o$I~M7o)~SM7o)~SM7o)~SM7o)~SM7o)~SM7o)~SM7o)~SM7o)~S>#>#>#>#>#>#>#>#>#>#>#>#>#>#>#>#M7o4i~M7o4i~M7o4i~M7o4i~M7o4i~M7o4i~M7o4i~M7o4i~>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>Of7o ~3f7o ~3f7o ~3f7o ~3f7o ~3f7o ~3f7o ~3f7o ~3>3>3>3>3>3>3>3>3>3>3>3>3>3>3>3>3f7o,Y~f7o,Y~f7o,Y~f7o,Y~f7o,Y~f7o,Y~f7o,Y~f7o,Y~7o9~s7o9~s7o9~s7o9~s7o9~s7o9~s7o9~s7o9~s7o O~7777777777777777777777777777777̯ooooooooooooooooooooooooooooooooT *Q77777777777777777777777777777777oooooooooooooooooooooooooooooooF_ h-~7777777777777777777777777777777ͯoooooooooooooooooooooooooooooooot ?.]~vo.]~vo.]~vo.]~vo.]~vo.]~vo.]~vo.]~vo=~{o=~{o=~{o=~{o=~{o=~{o=~{o=~{o>}~o>}~o>}~o>}~o>}~o>}~o>}~o>}~o~;w~;w~;w~;w~;w~;w~;w~;w!C~;w!C~;w!C~;w!C~;w!C~;w!C~;w!C~;w!C~;w#~G;w#~G;w#~G;w#~G;w#~G;w#~G;w#~G;w#~G;w1c~;w1c~;w1c~;w1c~;w1c~;w1c~;w1c~;w1c~;w ~'N;w ~'N;w ~'N;w ~'N;w ~'N;w ~'N;w ~'N;w ~'N;w)S~N;w)S~N;w)S~N;w)S~N;w)S~N;w)S~N;w)S~N;w)S~N;w3~g;w3~g;w3~g;w3~g;w3~g;w3~g;w3~g;w3~g;w9s~;w9s~;w9s~;w9s~;w9s~;w9s~;w9s~;w9s~;w ~.]w ~.]w ~.]w ~.]w ~.]w ~.]w ~.]w ~.]w%K~.]w%K~.]w%K~.]w%K~.]w%K~.]w%K~.]w%K~.]w%K~.]w+~W]w+~W]w+~W]w+~W]w+~W]w+~W]w+~W]w+~W]w5k~]w5k~]w5k~]w5k~]w5k~]w5k~]w5k~]w5k~]w ~7nw ~7nw ~7nw ~7nw ~7nw ~7nw ~7nw ~7nw-[~nw-[~nw-[~nw-[~nw-[~nw-[~nw-[~nw-[~nw;~ww;~ww;~ww;~ww;~ww;~ww;~ww;~ww={~w={~w={~w={~w={~w={~w={~w={~w~={~={~={~={~={~={~={~={#G~={#G~={#G~={#G~={#G~={#G~={#G~={#G~={'~O={'~O={'~O={'~O={'~O={'~O={'~O={'~O={3g~={3g~={3g~={3g~={3g~={3g~={3g~={3g~={ ~/^{ ~/^{ ~/^{ ~/^{ ~/^{ ~/^{ ~/^{ ~/^{+W~^{+W~^{+W~^{+W~^{+W~^{+W~^{+W~^{+W~^{7~o{7~o{7~o{7~o{7~o{7~o{7~o{7~o{;w~{;w~{;w~{;w~{;w~{;w~{;w~{;w~{/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~o~o~o~o~o~o~o~o~o~o~o~o~o~o~o~o~~~~~~~~~~~~~~~~~_~_~_~_~_~_~_~_~_~_~_~_~_~_~_~_~?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~?~?? 2)SQg9/ Uɒ|SeEVeMeC6eKeGveO@HDNLB.JFnNAIE^M?W>>>>>>>>>>>>>>>>7o ~&M7o ~&M7o ~&M7o ~&M7o ~&M7o ~&M7o ~&M7o ~&M7o$I~&M7o$I~&M7o$I~&M7o$I~&M7o$I~&M7o$I~&M7o$I~&M7o$I~&M7o)~SM7o)~SM7o)~SM7o)~SM7o)~SM7o)~SM7o)~SM7o)~SM#>#>#>#>#>#>#>#>#>#>#>#>#>#>#>#>7o4i~M7o4i~M7o4i~M7o4i~M7o4i~M7o4i~M7o4i~M7o4i~MO>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>7o ~3f7o ~3f7o ~3f7o ~3f7o ~3f7o ~3f7o ~3f7o ~3f3>3>3>3>3>3>3>3>3>3>3>3>3>3>3>3>7o,Y~f7o,Y~f7o,Y~f7o,Y~f7o,Y~f7o,Y~f7o,Y~f7o,Y~f7o9~s7o9~s7o9~s7o9~s7o9~s7o9~s7o9~s7o9~s7o}~o>}~o>}~o>}~o>}~o>}~o>}~o>}~;w~;w~;w~;w~;w~;w~;w~;w~;w!C~;w!C~;w!C~;w!C~;w!C~;w!C~;w!C~;w!C~;w#~G;w#~G;w#~G;w#~G;w#~G;w#~G;w#~G;w#~G;w1c~;w1c~;w1c~;w1c~;w1c~;w1c~;w1c~;w1c~;w ~'N;w ~'N;w ~'N;w ~'N;w ~'N;w ~'N;w ~'N;w ~'N;w)S~N;w)S~N;w)S~N;w)S~N;w)S~N;w)S~N;w)S~N;w)S~N;w3~g;w3~g;w3~g;w3~g;w3~g;w3~g;w3~g;w3~g;w9s~;w9s~;w9s~;w9s~;w9s~;w9s~;w9s~;w9s~w ~.]w ~.]w ~.]w ~.]w ~.]w ~.]w ~.]w ~.]w%K~.]w%K~.]w%K~.]w%K~.]w%K~.]w%K~.]w%K~.]w%K~.]w+~W]w+~W]w+~W]w+~W]w+~W]w+~W]w+~W]w+~W]w5k~]w5k~]w5k~]w5k~]w5k~]w5k~]w5k~]w5k~]w ~7nw ~7nw ~7nw ~7nw ~7nw ~7nw ~7nw ~7nw-[~nw-[~nw-[~nw-[~nw-[~nw-[~nw-[~nw-[~nw;~ww;~ww;~ww;~ww;~ww;~ww;~ww;~ww={~w={~w={~w={~w={~w={~w={~w={~{~={~={~={~={~={~={~={~={#G~={#G~={#G~={#G~={#G~={#G~={#G~={#G~={'~O={'~O={'~O={'~O={'~O={'~O={'~O={'~O={3g~={3g~={3g~={3g~={3g~={3g~={3g~={3g~={ ~/^{ ~/^{ ~/^{ ~/^{ ~/^{ ~/^{ ~/^{ ~/^{+W~^{+W~^{+W~^{+W~^{+W~^{+W~^{+W~^{+W~^{7~o{7~o{7~o{7~o{7~o{7~o{7~o{7~o{;w~{;w~{;w~{;w~{e\ 5ٷRFHgu@}>}>}>}~_}~_}~_}~_}~_}~_}~_}~_}߿}߿}߿}߿}߿}߿}߿}߿~~?~~?~~?~~?~~?~~?~~?~~?~~~~~~~~7 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????/8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????~NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????ҿ88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?LÁ#7mv=o~S''''''''________________7777777777777777????????????????////////////////_!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////WpqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////տ?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;'''''''LÁ#7mv=o~S!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????oNN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????[88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?$=8l}c۶m'7 '''''''''________________7777777777777777????????????????////////////////pqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''$=8l}c۶m'7̓O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?LÁ#7mv=o~S'''''''''''________________7777777777777777????????????????////////////////?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////?!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////pqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''LÁ#7mv=o~S> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?$=8l}c۶m'7 '''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////opqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''$=8l}c۶m'7̓O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________?????????????????NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww?????????????????O?O?LÁ#7mv=o~S'''''''''''''________________7777777777777777????????????????////////////////!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////_pqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////׿?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''LÁ#7mv=o~S!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????_88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?$=8l}c۶m'7 ''''''''''''''________________7777777777777777????????????????////////////////pqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;'$]8 k}lt|L'''''''''''''''________________7777777777777777????????????????////////////////88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________?????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww??????????????????&`۶m;i7)`'''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////GpqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;cm۶y?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________?????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????ONN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww???????????????cm۶y''''''''''''''''________________7777777777777777????????????????////////////////!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////gpqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ٿ?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;?&`۶m;i7)`?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????/NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????K88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww???????????????&`۶m;i7)`''''''''''''''''________________7777777777777777????????????????////////////////pqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////_!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;cm۶y???O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????oNN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????cm۶y''''''''''''''''________________7777777777777777????????????????////////////////?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////pqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;?&`۶m;i7)`????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????&`۶m;i7)`''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////?!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////OpqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;cm۶y??????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????_NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww??????????cm۶y''''''''''''''''________________7777777777777777????????????????////////////////!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////opqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ۿ?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;?&`۶m;i7)`??????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________?????????????????NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????O88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww??????????&`۶m;i7)`''''''''''''''''________________7777777777777777????????????????////////////////pqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;cm۶y????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww???????cm۶y''''''''''''''''________________7777777777777777????????????????////////////////?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////pqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;?&Xcfffff_e*@''''''''''''''''________________7777777777777777????????????????//////////////// 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________?????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????NN .. nn ^^ >> ~~b0???????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;Iz8pƶmNZo ??????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________?????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????c88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww??????Iz8pƶmNZo ''''''''''''''''________________7777777777777777????????????????////////////////pqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;Gol۶{???????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________?????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????Gol۶{y''''''''''''''''________________7777777777777777????????????????////////////////?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////_!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////pqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;Iz8pƶmNZo ?????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????/NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????+88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww???Iz8pƶmNZo ''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////7pqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;Gol۶{??????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww??Gol۶{y''''''''''''''''________________7777777777777777????????????????////////////////!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////pqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ÿ?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;Iz8pƶmNZo ???????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????g88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww?Iz8pƶmNZo ''''''''''''''''________________7777777777777777????????????????////////////////pqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;Gol۶{????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwwGol۶{;''''''''''''''''________________7777777777777777????????????????////////////////?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////pqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;Iz8pƶmNZo w????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________?????????????????NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????/88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwIz8pƶmNZo ;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////?pqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;Gol۶{www?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwkG`~www????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________?????????????????AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////pqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;$=8l}c۶m'7̝wwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________?????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwLÁ#7mv=o~S;;;;;''''''''''''''''________________7777777777777777????????????????////////////////?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////pqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;LÁ#7mv=o~Swwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????ONN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????388888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________?????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwww$=8l}c۶m'7 ;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////_!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////pqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;$=8l}c۶m'7̝wwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwLÁ#7mv=o~S;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////_!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////7pqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////Ϳ?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;LÁ#7mv=o~Swwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????{88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwww$=8l}c۶m'7 ;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////pqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////?!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;$=8l}c۶m'7̝wwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwLÁ#7mv=o~S;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////pqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;LÁ#7mv=o~Swwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????_NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????788888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwww$=8l}c۶m'7 ;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////pqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;$=8l}c۶m'7̝wwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwLÁ#7mv=o~S;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////?pqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////Ͽ?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;LÁ#7mv=o~Swwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777www$]8 k}l7u|Lwwwwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////pqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////߿?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;?&`۶m;i7)`wwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777wwwwwwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????#88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________?????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777w?&`۶m;i7)`;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////ppGpp'ppgppppWpp7ppwppO/o_?????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////!1 )9\%\\5\ -=<#<<3< +;|'||7|/????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3 / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////'pqqGq q'q qgqqq qWq q7q qwqO / o _ ? 1????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C??0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#??(?(?(?(?(?(?(?(?(?(?(?(?(?(?(?(c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c??8?8?8?8?8?8?8?8?8?8?8?8?8?8?8?8O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$O?$SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?4O?43? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? 3? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s??>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ))))))))))))))))gggggggggggggggg9999999999999999_________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W__5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_57 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ----------------wwwwwwwwwwwwwwww================?????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O??3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3/ / / / / / / / / / / / / / / / ++++++++++++++++oooooooooooooooo;;;;;;;;;;;;;;;;''''''''''''''''________________7777777777777777????????????????////////////////?AaQqIiYy\E\e\U\uMm]}>>>>>>>>>>>>>>>!!!!!!!!!!!!!!!!GGGGGGGGGGGGGGGG1111111111111111 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '))))))))))))))))gggggggggggggggg9999999999999999________________%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7----------------wwwwwwwwwwwwwwww================????????????????#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3? / / / / / / / / / / / / / / / /++++++++++++++++oooooooooooooooo;cm۶ywwwwwwwwwwwwwwww?????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O////////////////oooooooooooooooo________________???????????????88888888󸀋˸븁۸xxxxxxxxAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________???????????????? 0(8N$N4,<.".2*:n&n6.>!1)9^%^5-=>#>3+;~'~7/AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________?????????????????8C8#8c88S838s8 K+k[;{xGx'xgxxWx7xwxO/o_?AAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQG1111111111111111qqqqqqqqqqqqqqqq ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'))))))))))))))))iiiiiiiiiiiiiiiiggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgYg9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/++++++++++++++++kkkkkkkkkkkkkkkkoooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7777777777777777wwwwwwwwwwwwwwww????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?////////////////oooooooooooooooo________________????????????????NN .. nn ^^ >> ~~bAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!aaaaaaaaaaaaaaaaGGGGGGGGGGGGGGGGGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQGQ1111111111111111qqqqqqqqqqqqqqqq' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I'I))))))))))))))))iiiiiiiiiiiiiiiigggggggggggggggggYgYgYgYgYgYgYgYgYgYgYgYgYgYgYgY9999999999999999yyyyyyyyyyyyyyyy_________________E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_%_e_e_e_e_e_e_e_e_e_e_e_e_e_e_e_eW_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M7M----------------mmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]================}}}}}}}}}}}}}}}}?????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/ / / / / / / / / / / / / / / / /K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K++++++++++++++++kkkkkkkkkkkkkkkkooooooooooooooooo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGG''''''''''''''''gggggggggggggggg_________________W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7777777777777777c/86nffffffffffffF̜lKΩ8fc{뜻#{G~`?~`?~`?~`?~`?~`?~`?~`?a`0? a`0? a`0? a`0? a`0? a`0? a`0? a`0? q`8?q`8?q`8?q`8?q`8?q`8?q`8?q`8?iO`4? iO`4? iO`4? iO`4? iO`4? iO`4? iO`4? iO`4? yσ`cm~mɏu~~ݷ^{6ǦV_5ݛtm}m/[\_?o 7mÏq=yx~yS[oL oP:yoswL/,?{s:~}Џ~c>}wozo޿kRRǾ~o}?燮o/6s{ow~{M?p=~h'=o7co{z}t>w~o}x}}[K3?}1=SZc;]y^:oq}c ?ϭ_}CS||?c%3=6ߗ/ϯ~~9)?$l}}ޣ~ol{Əs~?M\{K2xs'\|s9>_:]s?ֹ΁?Lz~u9|kǾ_?t>}~yyݟ_?K&=>_+/V~mCgT_{z/ǯ_ߺ?toOxG[}[?1ηc1?'\ Ss}[O}ysxs1[?s1[{i}u{c\>_W?S^[Orqww?}uyK:n\o:=극L^>.珍~1??==:s/~y~q||Cymw a[#l={x}7~_я_ӯo:~ӏqr16CwC;~5kCK}=n~y>o}Mc[_~7Lz[o}No>_w1}|+K?@O;s? S]|=~_1slK=~{LۼZyN~*c~4o}z[|6wOu??WkcZ> ߿_ x~|=|x~?~c= ?lHh?T|۟G??p^uZ-ul}ͷ~_?W?%sy}z;~?ğ{k\S\~_S[7Fo}Om⧽{oze?s6 lgֿ.]Mc<~~}[:~_#~V5&oX[1mo=ޖoo:~j׿o&ӿoWGGO2Kfg+^1s1s53q? 'ʟ8I'˟<)ʟ:i˟>gʟ9Yg˟=9ʟ;y˟?_8E_<%_:e_>W_9UW_=5_;u_? 78M7<-:m>w]w-=+}/?(C?,#?*c?.O?)SO?-3?+s?/ /̿(K/Ϳ,+̿*kͿ.o̿)[oͿ-χ|̧|Η|ͷ;̿+{Ϳ/(G,'*g._)W_-7+w/?(O?,/*o.)_-DjTG?QjTG?ڧG?QjTG?zG?G?QTG?QTRG?QTG?QQTG?QTGG?QTG?QTATG?QTG?!?QTG?QTG?QTG?QOHTG?QTG?QTG?QTG?QTG?QTG?QTG?QTG?QTG?QTG?QTG?QTG?QTG?QTG7?q\?q\?q\?q\?q\?q\?q\?q\?q\?q\?q\?q\?q\?q\?q\?q\?q\?q\?q\?q\?q\?q\?q\?q\?q\?q\?q\?q\?q\?q\?q\?q?'?;'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'?IOR'՟I}bZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ?iOZ1KKK|_?g?YYVg?YVg?YVg?YVg?YVg?YVg?YVg?YVg?YVg?YVg?YVg?YVg?YVg?YVg?YVg?YVg?YVg?YVg?YVg?YVg?YVg?YVg?YVg?YVg?YVg?YVg?YVg?YVg?YVg?YVg?YVg?ٯޛ?y^?y^?y^?y^?y^?y^?y^?y^?y^?y^?y^?y^?y^?y^?y^?y^?y^?y^?y^?y^?y^?y^?y^?y^?y^?y^?y^?y^?y^?y^?y^?_E/QE/Q_E/Q_E/Q_E/Q_E/Q_E/Q_E/Q_E/Q_E/Q_E/Q_E/Q_E/Q_E/Q_E/Q_E/Q_E/Q_E/Q_E/Q_E/Q_E/Q_E/Q_E/Q_E/Q_E/Q_E/Q_E/Q_E/Q_E/Q_E/Q_E/Q_E/Q_,Y_e/{вe/Y_e/Y_e/Y_e/Y_e/Y_e/Y_e/Y_e/Y_e/Y_e/Y_e/Y_e/Y_e/Y_e/Y_e/Y_e/Y_e/Y_e/Y_e/Y_e/Y_e/Y_e/Y_e/Y_e/Y_e/Y_e/Y_e/Y_e/Y_e/Y_e/Y_e/?WVUU_Wꁫ_WUU_WUU_WUU_WUU_WUU_WUU_WUU_WUU_WUU_WUU_WUU_WUU_WUU_WUU_WUU_WUU_WUU_WUU_WUU_WUU_WUU_WUU_WUU_WUU_WUU_WUU_WUU_WUU_WUU_WUU_W_u]_]_u]_u]_u]_u]_u]_u]_u]_u]_u]_u]_u]_u]_u]_u]_u]_u]_u]_u]_u]_u]_u]_u]_u]_u]_u]_u]_u]_u]_u]_u]_UMoS7MoSMoS7MoS7MoS7MoS7MoS7MoS7MoS7MoS7MoS7MoS7MoS7MoS7MoS7MoS7MoS7MoS7MoS7MoS7MoS7MoS7MoS7MoS7MoS7MoS7MoS7MoS7MoS7MoS7MoS7MoS7Mo~G϶mo[mo{Ҷmo[mo[mo[mo[mo[mo[mo[mo[mo[mo[mo[mo[mo[mo[mo[mo[mo[mo[mo[mo[mo[mo[mo[mo[mo[mo[mo[mo[mo[mo[_______{kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk af______________________________________________________________________________Ww]Wwɻw]Ww]Ww]Ww]Ww]Ww]Ww]Ww]Ww]Ww]Ww]Ww]Ww]Ww]Ww]Ww]Ww]Ww]Ww]Ww]Ww]Ww]Ww]Ww]Ww]Ww]Ww]Ww]Ww]Ww]?O}_}_}_}_}_}_}_}_}_}_}_}_}_}_}_}_}_}_}_}_}_}_}_}_}_}_}_}_}_}_}_}?m;CP?CP?ȡCP?CP?CP?CP?CP?CP?CP?CP?CP?CP?CP?CP?CP?CP?CP?CP?CP?CP?CP?CP?CP?CP?CP?CP?CP?CP?CP?CP?CP?C?-{cX?cX?셎cX?cX?cX?cX?cX?cX?cX?cX?cX?cX?cX?cX?cX?cX?cX?cX?cX?cX?cX?cX?cX?cX?cX?cX?cX?cX?cX?cX?cX?c?NST?OST?OS/vST?OST?OST?OST?OST?OST?OST?OST?OST?OST?OST?OST?OST?OST?OST?OST?OST?OST?OST?OST?OST?OST?OST?OST?OST?OST?OST?OST?OST?OS?s\?s\?s{s\?s\?s\?s\?s\?s\?s\?s\?s\?s\?s\?s\?s\?s\?s\?s\?s\?s\?s\?s\?s\?s\?s\?s\?s\?s\?s\?s\?s\?s?m:/K_R/K_R/K_ҋ^R/K_R/K_R/K_R/K_R/K_R/K_R/K_R/K_R/K_R/K_R/K_R/K_R/K_R/K_R/K_R/K_R/K_R/K_R/K_R/K_R/K_R/K_R/K_R/K_R/K_R/K_R/K_R/K_R/K_?-zk_Zk_Zk_Z^Zk_Zk_Zk_Zk_Zk_Zk_Zk_Zk_Zk_Zk_Zk_Zk_Zk_Zk_Zk_Zk_Zk_Zk_Zk_Zk_Zk_Zk_Zk_Zk_Zk_Zk_Zk_Zk_Zk_?o[Vo[Vo[Vo[Vo[Vo[Vo[Vo[Vo[Vo[Vo[Vo[Vo[Vo[Vo[Vo[Vo[Vo[Vo[Vo[Vo[Vo[Vo[Vo[Vo[Vo[Vo[Vo[Vo[Vo[Vo[Vo[?{^{^{^/p{^{^{^{^{^{^{^{^{^{^{^{^{^{^{^{^{^{^{^{^{^{^{^{^{^{^{^{^{^r}>}>}>}>}>}>};>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}qo?????????????????????????????????!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C1o#G?#G?#G?#G?#G?#G?#G?#G>#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G??1c?1c?1c?1c?1c?1c?1c??1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?D'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?o)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO??3g?3g?3g?3g?3g?3g?3g?3g?SČ3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g7?9s?9s?9s?9s?9s?9s?9s?9s+c9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s /_ /_ /_ /_ /_ /_ /_ /_ / /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_So%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%KJY%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_[+W_+W_+W_+W_+W_+W_+W_+W_+Ŭ_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W7_5k_5k_5k_5k_5k_5k_5k_5k_r_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k 7o 7o 7o 7o 7o 7o 7o 7o 7oFA7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oo-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o߬;w;w;w;w;w;w;w;w;wSԎ;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w7={={={={={={={={={+k={={={={={={={={={={={={={={={={={={={={={={={?????????v??????????????????????S#G?#G?#G?#G?#G?#G?#G?#G?#G?#GJ;#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?ߌ;'O?'O?'O?'O?'O?'O?'O?'O?'O?'ŝ?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O7?3g?3g?3g?3g?3g?3g?3g?3g?3g??3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_l7o7o7o7o7o7o7o7o7o7oS7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7;w;w;w;w;w;w;w;w;w;w+;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w????????????????????????????????S'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'OJ}'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?L{/_/_/_/_/_/_/_/_/_/_/ž/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_77o7o7o7o7o7o7o7o7o7or7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o???????????G?????????????????????/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_,???????????S?????????????????????7?????????c\A ='mv/uW?????????????????????????????????????????_???????????????????????????????? ? A? A? A? A? A? A? A? A? A? A? A?у? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?d!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?/0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a_~E?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#K(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?G?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG??1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c/?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q;#8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q_ 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? I? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?K?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?S'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I')SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?/4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO;'4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO_^e? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3K,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?g?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?Y?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s/?U_ +W_ +W_ +W_ +W_ +W_ +W_ +W_ +W_ +W_ +W_ +W_ +W_ +W_ +_ +W_ +W_ +W_ +W_ +W_ +W_ +W_ +W_ +W_ +W_ +W_ +W_ +W_ +W_ +W_ +W_ +W_ +K*UW_*UW_*UW_*UW_*UW_*UW_*UW_*UW_*UW_*UW_*UW_*UW_*UW_*UW_W_*UW_*UW_*UW_*UW_*UW_*UW_*UW_*UW_*UW_*UW_*UW_*UW_*UW_*UW_*UW_*UW_*UW_W5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k/_:u_:u_:u_:u_:u_:u_:u_:u_:u_:u_:u_:u_:u_:u;:u_:u_:u_:u_:u_:u_:u_:u_:u_:u_:u_:u_:u_:u_:u_:u_:u_:u_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o m 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oTk&M7o&M7o&M7o&M7o&M7o&M7o&M7o&M7o&M7o&M7o&M7o&M7o&M7o&M7oS7o&M7o&M7o&M7o&M7o&M7o&M7o&M7o&M7o&M7o&M7o&M7o&M7o&M7o&M7o&M7o&M7o&M7-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o6mo6mo6mo6mo6mo6mo6mo6mo6mo6mo6mo6mo6mo6mo6mo;6mo6mo6mo6mo6mo6mo6mo6mo6mo6mo6mo6mo6mo6mo6mo6mo6mo_u;w;w;w;w;w;w;w;w;w;w;w;w;w;w;;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;K.]w.]w.]w.]w.]w.]w.]w.]w.]w.]w.]w.]w.]w.]w.]ww.]w.]w.]w.]w.]w.]w.]w.]w.]w.]w.]w.]w.]w.]w.]w.]wY={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={/>}>}>}>}>}>}>}>}>}>}>}>}>}>}>};>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}߀?????????????????????????????????!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?Ӈ?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?o1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c;1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?M? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? '? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? ')SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?73g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?&3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9sa9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s߂ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ X /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_[%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_(/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/w+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_%+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_.o5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_c5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_߽m 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[oHo-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w';w;w;w;w;w;w;w;w;w;w;w;w;w;w;w={={={={={={={={={={={={={={={={={ߋe={={={={={={={={={={={={={={={߁?????????????????9??????????????+;#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?h?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#Gw'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?$'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?.3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?}] /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ / /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W__+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_w7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o&7o7o7o7o7o7o7o7o7o7o7o7o7o7o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w߃??????????????????z?????????????{'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O??'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?w/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_%/_/_/_/_/_/_/_/_/_/_/_/_/_.7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o=}????????????????????????????????/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_Ⱦ/_/_/_/_/_/_/_/_/_/_/_/_???????????????????'?????????????????????? Ձ+I߅3333㯤Ȇ]t'????????????????????????????????????????????????????????? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A. A? A? A? A? A? A? A? A? A? A? A? A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C^!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?,0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a??#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G0#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#GoG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(Q"?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(Q_1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?ƿ?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?.8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q7 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O2 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?/$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$IL?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'OO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?0SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)S4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?-4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g4 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3gog?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Y"?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Y_9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?Ps?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?ǿI?}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}/>}>}>}>}>}>}>}>}>}7???????????????????????~????????o!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C? ?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?G?#G?#G?#G?#G?#G?#G?#G?#G1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?,1c?1c?1c?1c?1c?1c?1c?1c?7 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O0 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'OwSO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?g73g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Œ3g?3g?3g?3g?3g?3g?3g?3gws?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9sa?9s?9s?9s?9s?9s?9s?9s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /wK/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_b%K/_%K/_%K/_%K/_%K/_%K/_%K/_g+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W`_+W_+W_+W_+W_+W_+W_+Wwk_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7ow[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[Ho-[o-[o-[o-[o-[o-[og;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;wʎ;w;w;w;w;w;w;ww{={={={={={={={={={={={={={={={={={={={={={={={={={a={={={={={={w?????????????????????????0??????wG?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?gw'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'Owg?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_]+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_!+W_+W_+W_+W_+W_+W=7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7n7o7o7o7o7oƿ'w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w????????????????????????????????ߓ'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?z'O?'O?'O?'O?'O?3{/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/^/_/_/_/_/_{o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o????????????????????????????????}/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_!/_/_/_/_}????????????????????????????????ǿO?????????)(5mԶm۶mڶm۶mmuw%Oͼkg%?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G;Oc?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c91c?1c?1c?Gi 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'PN? 'O? 'O? 'O?M?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)S3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?ƿ?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_Z%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_u%K/_%K/_%K+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_ſqZ5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o@ 7o 7oÿ1-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[po-[o-[;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;wǿ={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={????????????????????????????????m:#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O0?'O?Ŀ:3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g[ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_@} /_¿e+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W[7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7oƿ;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w????????????????????????????????'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O? 'O?џ^/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o>???????????????????????????????/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_wӏ????????????????????????????????|oAVDQWBIVFYWAETVEUTWCMVG]@C //K//+鯬鯮k鯭鯯oo[oo;﬿﮿{ﭿG'韬韮gg럣y_E_e_UW_uߠM7ߢmߡ]wߣ}?C?c?SO?s뿠K/뿢k뿡[o뿣{GgW_wO?o_FkfkVZkv렣N:뢫n롧^z룯????????????????????????????????? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?G?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(Qc?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$ISO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)O?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4i3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? g?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Ys?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9?}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}?????????????????????????????????!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!CtUu Dﺻa#D ={={{={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________???????????????????????????????????????????`lثm۶??????????????????????????????????????????????????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?AC?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?Qc?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?ISO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)O?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?i3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Ys?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_EK/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_Uk_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomom;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;ww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]{={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={=}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?CG?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?Sg?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_KW_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7oo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{?????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?GO?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/__W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_Wo7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww?????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/oooooooooooooooooooooooooooooooo????????????????????????????????________________________________?????????????????????????????????????????az0pW۶mE>!?????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________?????????????????????????????????????????An mm۶m۾m۶mnm|~33#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={????????????????????????????????#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w????????????????????????????????'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o????????????????????????????????/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_????????????????????????????????SOR@ ))J))*jꩯC_XE_\ %_Ze_^W_YUW_] 5_[u__ 7XM7\ -Zm^wY]w]=[}_?XC?\#?Zc?^O?YSO?] 3ҟ?G\׿@B/ֿDR/׿BJֿFZ׿AFoֿEVo׿CNֿG^@ADQBIFYAE_EU_CMG]@C?DS?BKF[AGEWCOG_4DS4BKF[AGtEWtCOG_????????????????????????????????; z? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}????????????????????????????????!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?G`\m۶?????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?aG?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?Q?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?IO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?ig?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Y?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_eW_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oMo-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomw;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_ko7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{?????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww?????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________????????????????????????????????????????? U5@"DﺻD 0??????????????????????????????????????????????????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}g}}w}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{?????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________??????????????????????????????????????????b ?նmnOvȟ????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________??????????????????????????????????????????)% %۶۶m۶}c۶m۶lVFk>U?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={????????????????????????????????#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w????????????????????????????????'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o????????????????????????????????/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_????????????????????????????????ПOXES\ %RZeS^URYUUS] 5R[uS_  /"/K/2/ +ꯤ*ꯦkꯥ:ꯧo&o[o6o;錄.樂{勵>刺!G1 '꟤)꟦g꟥?럭韯__W__7߬߮w߭߯??O??/鿬鿮o鿭鿯_?iiZii:鬋鮇z魏????????????????????????????????? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A9B>!A ?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}????????????????????????????????!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C??????????????????????????????????????? Ӄ#amv?????????????????????????????????????????????????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________??????????????????????????????????????????`lثm۶???????????????????????????????????????????????????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?qO? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?i?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_uo 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomom;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{?????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________????????????????????????????????????????? U5@"D 6860???????????????????????????????????????????????????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?qO? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?i?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_uo 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomom;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}?}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_ko7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{?????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww?????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________?????????????????????????????????????????SOAhIE7׶۶m۶=m۶mNm++uj3#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={?????????????????????????????????#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w????????????????????????????????'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o????????????????????????????????/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_????????????????????????????????~ O (/b+RJ+rʫJ*jZjzk_@A_DQ_BI_FY_AEW_EUW_CM_G]@C7DS7BKF[AGwEWwCOG_?@@?DP?BH?FX?ADO?ETO?CLg?WP!T1R)V9_Q%_U5S-W=?P#?T3R+V;Q'U7S/W#5T3͵R+V;uQ'uU7S/W????????????????????????????????? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C ;–A ?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}????????????????????????????????!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?????????????????????????????????????`lm۶;|C???????????????????????????????????????????????????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?AC?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?Qc?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?ISO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)O?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?i3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Ys?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_EK/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_Uk_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomom;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;ww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]{={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={=}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?CG?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?Sg?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_KW_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7oo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{?????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?GO?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/__W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_Wo7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww?????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/oooooooooooooooooooooooooooooooo????????????????????????????????________________________________???????????????????????????????????????? Ӄ#amv~C???????????????????????????????????????????????????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?qO? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?i?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_uo 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomom;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{?????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________?????????????????????????????????????????G`qm۶_????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________?????????????????????????????????????????SOAhIE7׶۶m۶=m۶mNm++uj#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={????????????????????????????????#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w????????????????????????????????'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o????????????????????????????????/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_????????????????????????????????ȟ )*J*2* **j:ꪧ_HaE_Lq%_Jie_NyW_IeUW_Mu5_Kmu_O} 7HcM7Ls-JkmN{wIg]wMw=Ko}O?H`C?Lp#?Jhc?NxO?IdSO?Mt3?K?[s?_ /ҿXK/ӿ\ +ҿZkӿ^oҿY[oӿ];ҿ[{ӿ_XG\ 'Zg^_YW_] 7[w_?XO?\ /Zo^Y_]?[5XM5\ -Zm^uY]u]=[}???????????????????????????????? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?>@BF"G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8qO? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4i? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}?????????????????????????????????!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C??????????????????????????????????? Ӄ#amv????????????????????????????????????????????????????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?AC?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?Qc?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?ISO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)O?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?i3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Ys?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_EK/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_Uk_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomom;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;ww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]{={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={=}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?CG?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?Sg?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_KW_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7oo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{?????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?GO?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/__W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_Wo7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww?????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/oooooooooooooooooooooooooooooooo????????????????????????????????________________________________????????????????????????????????????????G`^m۶d????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________??????????????????????????????????????????`l9mv|C????????????????????????????????????????????????????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?AC?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?Qc?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?ISO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)O?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?i3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Ys?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_EK/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_Uk_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomom;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;ww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]{={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={=}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?CG?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?Sg?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_KW_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7oo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{?????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?GO?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/__W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_Wo7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww?????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/oooooooooooooooooooooooooooooooo????????????????????????????????________________________________?????????????????????????????????????????DPtsmxm۶m۶m۶ڶRW>#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={????????????????????????????????#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w????????????????????????????????'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o????????????????????????????????/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_????????????????????????????????ӟPP!WBIVFYWAETVEUTWCMVG]@C //K//+鯬鯮k鯭鯯oo[oo;﬿﮿{ﭿG'韬韮gg럣y_E_e_UW_uߠM7ߢmߡ]wߣ}?C?c?SO?s뿠K/뿢k뿡[o뿣{GgW_wO?o_FkfkVZkv렣N:뢫n롧^z룯????????????????????????????????? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?ʿ@A(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?43g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>????????????????????????????????C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!c  sm۶Ovȟ????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________???????????????????????????????????????? Ӄ#amv~C????????????????????????????????????????????????????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________????????????????????????????????????????0=8m۶"?????????????????????????????????????????????????????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?qO? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?i?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_uo 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomom;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{?????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________????????????????????????????????????????SZ@͵mŶm۶mOl۶m۶kJ_?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1cO? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)S?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5ko 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={?????????????????????????????????#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w?????????????????????????????????'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o????????????????????????????????/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_?????????????????????????????????'THaEŕPR)QV9UPQ%UQU5PS-QW=5P/B /b/RK/r믠J+믢j믡Zk믣zoFofoV[ovN;n^{~AaQGq럠I'럢i럡Y蟫__W__7ߨߪwߩ߫??O??/迨迪o迩迫_?ƚhZhh:訓κ誛z詗+????????????????????????????????? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? AC?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?G?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(Qc߇ (Y 1X1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}????????????????????????????????!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C??0W۶mwd?????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?aG?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?Q?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?IO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?ig?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Y?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_eW_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oMo-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomw;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_ko7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{?????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww?????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________????????????????????????????????????????g  {m۶_?????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________????????????????????????????????????????g ?նmnOv????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________?????????????????????????????????????????DPtsmxm۶m۶m۶ڶR_>#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)Sg?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%KW_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={?????????????????????????????????#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#GO?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ _+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+Wo7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w?????????????????????????????????'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o????????????????????????????????/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_???????????????????????????????ߟ *"*K((*ʪjꨫh?_P!_T1_R)_V9W_Q%W_U5_S-_W=7P#7T3R+V;wQ'wU7S/W??P ?T0?R(?V8O?Q$O?U4?S,Yls?O| /ԿHbK/տLr+ԿJjkտNzoԿIf[oտMv;ԿKn{տO~HaGLq'JigNy_IeW_Mu7KmwO}?HcO?Ls/JkoN{Ig_Mw?KoHcM4Ls-JkmN{tIg]tMw=Ko}????????????????????????????????A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? !C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?qߧ 0[q8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}????????????????????????????????!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?az0p6նmn>!?????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________???????????????????????????????????????az0p6նmnOv?????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________???????????????????????????????????????0=8m۶"??????????????????????????????????????????????????????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________????????????????????????????????????????(Вnm/m۶m{b۶m۶\VVՇ#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1cO? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)S?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5ko 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={?????????????????????????????????#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w?????????????????????????????????'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o????????????????????????????????/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_?????????????????????????????????%'THaEULq_R)QV9UPQ%UQU5PS-QW=5P/B /b/RK/r믠J+믢j믡Zk믣zoFofoV[ovN;n^{~AaQGq럠I'럢i럡Y蟫__W__7ߨߪwߩ߫??O??/迨迪o迩迫_?ƚhZhh:訓κ誛z詗+????????????????????????????????? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? AC?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?G?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(Qc?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q'O? aA$ %'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}????????????????????????????????!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C???????????????????????????????0=8j۶m??????????????????????????????????????????????????????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?AC?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?Qc?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?ISO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)O?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?i3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Ys?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_EK/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_Uk_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomom;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;ww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]{={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={=}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?CG?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?Sg?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_KW_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7oo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{?????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?GO?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/__W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_Wo7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww?????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/oooooooooooooooooooooooooooooooo????????????????????????????????________________________________???????????????????????????????????????g  {m۶_????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________?????????????????????????????????????????`l9mv|C??????????????????????????????????????????????????????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________???????????????????????????????????????Oq?Q%\6^l۶mĶm۶m;ԩ׿ψ#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={????????????????????????????????#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w????????????????????????????????'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o????????????????????????????????/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_????????????????????????????????ӟPP!QT1ŕVFYWAETVEUTWCMVG]@C //K//+鯬鯮k鯭鯯oo[oo;﬿﮿{ﭿG'韬韮gg럣y_E_e_UW_uߠM7ߢmߡ]wߣ}?C?c?SO?s뿠K/뿢k뿡[o뿣{GgW_wO?o_FkfkVZkv렣N:뢫n롧^z룯????????????????????????????????? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8qO? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?$I$IK"i0?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$ISO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)O?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4i3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? g?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Ys?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9?}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}?????????????????????????????????!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C0=8j۶m???????????????????????????????????????????????????????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________???????????????????????????????????????ذW۶mE?!????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________???????????????????????????????????????G`qm۶_?????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________???????????????????????????????????????(Вnm/m۶m{b۶m۶\VVՇ#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={????????????????????????????????#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w????????????????????????????????'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o????????????????????????????????/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_????????????????????????????????ԟ ))2* **j:ꪧ_HaE_Lq%_Jie_NyW_IeUW_Mu5_Kmu_O} 7HcM7Ls-JkmN{wIg]wMw=Ko}O?H`C?Lp#?Jhc?NxO?IdSO?Mt3?K?[s?_ /ҿXK/ӿ\ +ҿZkӿ^oҿY[oӿ];ҿ[{ӿ_XG\ 'Zg^_YW_] 7[w_?XO?\ /Zo^Y_]?[5XM5\ -Zm^uY]u]=[}???????????????????????????????? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?)SO?ſBʑ(RS)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}?????????????????????????????????!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!Caz0p6նmn>!?????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________??????????????????????????????????????ذW۶mE?!?????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________??????????????????????????????????????az0pW۶mE>!????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________????????????????????????????????????????DPtsmxm۶m۶m۶ڶRg>#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={?????????????????????????????????#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w????????????????????????????????'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o????????????????????????????????/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_????????????????????????????????~JO (Š(J(/rʫJ*jZjzk_@A_DQ_BI_FY_AEW_EUW_CM_G]@C7DS7BKF[AGwEWwCOG_?@@?DP?BH?FX?ADO?ETO?CLg?WP!T1R)V9_Q%_U5S-W=?P#?T3R+V;Q'U7S/W#5T3͵R+V;uQ'uU7S/W????????????????????????????????? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0aG?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(Q?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$IO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?4iIH;ҖE@:4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?43g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>????????????????????????????????C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!?0W۶mwd?????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?aG?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?Q?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?IO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?ig?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Y?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_eW_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oMo-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomw;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_ko7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{?????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww?????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________??????????????????????????????????????az0p6նmnOv????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________???????????????????????????????????????3Lj۶m';???????????????????????????????????????????????????????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________??????????????????????????????????????)- ڶb۶m۶'m۶mɵmeN\]}?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9 /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_57o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o [o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={=????????????????????????????????G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7ow;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;????????????????????????????????O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7????????????????????????????????_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/????????????????????????????????O?IRXES\ %RZUNyTTIeUTUMu5TKmuUO} 4 //K//+诨诪k诩诫oo[oo;憎謹{奔﫿G'蟨蟪g蟩9꟧_%_W_5_ 7ߤ-ߦwߥ=ߧ?#?O?3? /꿤+꿦o꿥;꿧'_7?/?j&jZj6j:ꤳ.ꦻzꥷ>???????????????????????????????? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO? 3g? }21? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}????????????????????????????????!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?1Lڶm';?????????????????????????????????????????????????????????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?qO? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?i?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_uo 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomom;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{?????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________??????????????????????????????????????ذW۶mE?!????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________?????????????????????????????????????? Ӄ#ڶm/?????????????????????????????????????????????????????????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?qO? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?i?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_uo 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomom;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{?????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________??????????????????????????????????????Oq?Q%\6^l۶mĶm۶m;ԩٟψ#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={????????????????????????????????#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w????????????????????????????????'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o????????????????????????????????/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_????????????????????????????????SOR@AVDQWBIVFS^URYUUS] 5R[uS_  /"/K/2/ +ꯤ*ꯦkꯥ:ꯧo&o[o6o;錄.樂{勵>刺!G1 '꟤)꟦g꟥?럭韯__W__7߬߮w߭߯??O??/鿬鿮o鿭鿯_?iiZii:鬋鮇z魏????????????????????????????????? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g?,Yg?,> YCf?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}?????????????????????????????????!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C???????????????????????`lm۶;|C?????????????????????????????????????????????????????????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?qO? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?i?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_uo 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomom;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{?????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________??????????????????????????????????????ذW۶mE?!?????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________?????????????????????????????????????s\m۶d????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________??????????????????????????????????????)- ڶb۶m۶'m۶mɵmeN\]}?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={????????????????????????????????#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w????????????????????????????????'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o????????????????????????????????/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_????????????????????????????????)?)B +b+RJ+/*jꩯC_XE_\ %_Ze_^W_YUW_] 5_[u__ 7XM7\ -Zm^wY]w]=[}_?XC?\#?Zc?^O?YSO?] 3ҟ?G\׿@B/ֿDR/׿BJֿFZ׿AFoֿEVo׿CNֿG^@ADQBIFYAE_EU_CMG]@C?DS?BKF[AGEWCOG_4DS4BKF[AGtEWtCOG_????????????????????????????????? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?9s?> 9GC?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}?????????????????????????????????!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!Cc  sm۶Ov????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________??????????????????????????????????????g  {m۶_?????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________?????????????????????????????????????s\m۶d?????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________??????????????????????????????????????DPtsmxm۶m۶m۶ڶRo>#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={????????????????????????????????#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w????????????????????????????????'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o????????????????????????????????/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_????????????????????????????????)?)B +b+RJ+r*jꩯC_XE_\ %_Ze_^W_YUW_] 5_[u__ 7XM7\ -Zm^wY]w]=[}_?XC?\#?Zc?^O?YSO?] 3ҟ?G\׿@B/ֿDR/׿BJֿFZ׿AFoֿEVo׿CNֿG^@ADQBIFYAE_EU_CMG]@C?DS?BKF[AGEWCOG_4DS4BKF[AGtEWtCOG_????????????????????????????????? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A? A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?0a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?(QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q?8q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?$I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO?4iO? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g? 3g?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?,Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}>}?????????????????????????????????!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?????????????????????1Lڶm';???????????????????????????????????????????????????????????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?AC?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?Qc?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?ISO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)O?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?i3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Ys?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_EK/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_Uk_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomom;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;ww]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]{={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={=}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?CG?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?Sg?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_KW_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7oo[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{?????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?GO?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/__W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_Wo7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww?????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/oooooooooooooooooooooooooooooooo????????????????????????????????________________________________??????????????????????????????????????`lثm۶??????????????????????????????????????????????????????????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_ 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomo;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s? /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________?????????????????????????????????????G`qm۶_?????????????????????????????????A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?A?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?!C?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?aG?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?QG?Q?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?1c?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q?q'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O? 'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?I'O?IO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?)SO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?iO?ig?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Yg?Y?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?9s?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y?y/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_E/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_%K/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_e/_eW_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_UW_U_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_5k_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7o 7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oM7oMo-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[o-[omomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomomw;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]w]={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={={}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}?????????????????????????????????C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?#G?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?c?cO?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?SO?S?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?3g?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s?s/_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_ /_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K/_K_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_+W_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_k_ko7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[o[;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{?????????????????????????????????G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?'O?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g?g_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W_W7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7o7owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww?????????????????????????????????O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O?O/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_oooooooooooooooooooooooooooooooo????????????????????????????????________________________________?????????????????????????????????????ν>_A_IlI쐄(-(ZRp1㤊 ʵFiW+ o7NhgGKAΜs~駟Ϸ9???????????????????????????CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC################################################################################################################################################################################################################################################################ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo߸>c7~/ye}~s_[.o{/ܧ[o3G{;ۓ{|T_E|Q36맾޻Pw?xkOgK}z:Og5|៲_|{~{ԫ}yoW}|ƿ>ί>݃|iyy?|'O_][~wzG}24~'o{o{/Ͽ};ExλzO/ܫ}wwɳ>mo?mzo_o??]wᓏ{W KK#O7jT^f⺾y_?)ˆߴ/޿H?xюϿg˧>|ir?ŷ3OK4Ero/jo_~}TJ}bm{D|ż"?Fɟ%c9ZϘ+2j nIjWOe)lѧ,i~cT}_ ~w~~7~Ϳw~?zh??xOo{?xmQhW/_ۯu``{eo'OӸ{y#uG#ۿucφɇxWW_7W/^QQ_zϒ~o/2|o?y?y~uN|?|w= w|oo~}yb{{cG%gKφ'ϔ^4pyaߜ}4g^\b+ߺҊ7!?h$a÷Or+O1Ӷ!o|?*| }ܳu}y?/^}D oKԛO74kK_yW__7?Q7y[?[_7>xa¡ŝ_z^쯾Eu?ʭM;k>Yx<(3~g9e*ww?x|~Ӽm"E[?ԋ5>)w`|So?y[?WD|M?'η?xGg=F<_Ӗ~YGO(gI@'/Neȟ#$?{%^_Ҡ^-  w2J/|r:i}Ǽ?u篻ӺW^w˟Kj~?Pϼ(}tW|;?~//.!cW?>x'O4~u0ן@^y G'W^^RV}whzɿxJK~}~!/ Ov|yeť>Zϧ[ՄX͛_.*(2_y^[/x_/(_x7싉z;_1~nIvdĞRfansi/tests/special/utf8.unitizer/0000755000176200001440000000000014214076017016674 5ustar liggesusersfansi/tests/special/utf8.unitizer/data.rds0000644000176200001440000005736314214076017020335 0ustar liggesusers |}&xu@@s8 EVD2CjLh{C^^J"۲;8%~؎7{uv7yw8Ҿ佟/Yͫ 3diX3UuvH4(mI-! H8zA1LU=蝙T>HJӾ3vYi)Ӓ)IC%I\PJ&t3lʲqXJ4𩷞>qP*ypAL :͊RP0zؗ&\Wߵ)K-+UN[LRx^7$)J_'l˲ A`g`,kR( lgIH' Ni?Ւ[?(PQ-d1隠-zժT-qsq^&< uZW+W,\@XMysx'&ERZzVk#}h;PdPꢦ)s;YD w=Y=4'@0rިwӈoweL2W/~.TR AVD'xJj]UR X{ ![2@QАhyC]\Pvl(zPZb]TAKRԘ$FZ%5|6)>ŗK/~xמ~q^~iuDy_}w}YG>ϖz87y8{8}8MΦ嵧^|OܓkK_~s[g~_y7_3}}^}ϦPJUioR""7ϱ~Qyğ?񣣔SQؓEh<վ[X_hVKo %/cL*c_w1}{yyqrY,K?9AgNL"Wl!KG]-"4Uk UJeYKvjR-?ZL>Hn"Jd' $H9n0+j36m~B5(rc3M9't*-;Yw 9QEJGZ%8?X)7ATd֒l_^a77JfY7WTQ5[UNC֊znq6VT(bU (o-x_tgͽ(Zi5u}s}uޚEUϺ,wYyٗ7 Xv؎/љE{cKုR?Oi6GGhID%'-,z Ȧ1ȇg3&]?}⢡pcq>U͋0 0 0_0at{[F2h%b Mh'hv^&' XXX_X߱Z2-"ô(00&Ƥc[xylrgn buS#o&5nVî"* vG}`F8$~==|=静vC|-D>v=uv7˕6{$Or9&Ob'?y%Υs9DGfOp27;7E&L&3Eӥ ЎYc I8D=q<;=1;qlzN4:'ygdzHC$;E̹sX$IS7ͥiE9N{i%RIO-:4•@֒b('l4Eo8 €wiuI'3+Ş$x'9]flꉧZM[6`j4o^LԇjAzPv;Y|&mܰC C7pO!K W\.^D% JW-㨨.*V '8'Lp׀h~ף{ *pr@;9' h h :C~Ѻ+(V-ZK) nnnng Icq1)vضg xf]W~T: ̓,r[+yv# !\#&6ѭowzg+k:xlۚjQ,)nE!Ăx[;~@nBk`mt*۸ho%>n7g7gVp?p?ps/$e/x<$m0 "̏$?1O;xxRm0SH:$Ze>/]0 {;_W78~88Vߌc1)Ǯ 1NE;uѠ%wO4V!*\ Re/53S$ń/ YXn NNw^'RwxHͼHun>'8{+`vbPC488#d\&< "e׹cu%<ۊt#ukQ׋tc3L BPuTß5B6D9<\\FntqJ.XUTZA]ЭuTW-m݆S:Wp@ ЋbPV,qGC{>* ßZ@|dyr6ţ=.& rAѐV-+Nr!B ]pu@xx}6`Ыh=A@7@7@>@ϥ$~±[v#ʲy@0@0 ,& ح!YXƮk.UU*\eZ?xqncycj"U  h\BߛKzTD Y} 2ڨj ZMd-Hh22Uml敂\5H:cx\FPI'g%ٴZV12$deX,ẳUSi17ʵ3̈́&x$S4ipG?Y7UչjaS] {ۯw׽с/JYhhhAр U4rЫXFyZ ȝNu\AfG*"M_Ʋ-<+II5&3B,TkKǚRQuh.NMh贤;Syߡs9-ҒSA2'}[葜\՗ʼnv>e%f&X)y8)[2f"x8ãtтj&Vb[.}`Ы.=\PIC> ` ` `,0&!0~<ㅍLf;2NznlLlϷe;g˕V w7f>zcCm(^~V+snUxOVޯlmY17߷9nvW#b rv:IiCL R^ $6+O~*NiC%5~fDȎVeI{<'OH)WFyWQL$>ѻ*4b)Խ^ҷzn|dH/d3-Ω7M^m]#kXȬV*a!R!,& zQ)bqaڢ.:{w/Xo%8j> V[ pf pzugw%BlWKm0nYlw+1AfQuF{He(qq?94`X)Va  jBՒjC/TR.(%t^1 8 dEŲqqGBU+d"#X-+_E%!YpO#U**ݛwyItrRLŅ~.s4Y"GW37M%"?{葿 \]Z6j!:ZSfKkY.hRUkaҩ w~V;hA'7td250gտr3w~͸pg[<<<xv ǭ@$Q& lll1C6) 77_jQaWifpE^ tL-WA!ϜD{؀o lpAOzv]!q8V=tM9szdى?sh" a&I$TSd'TWL"OQ'Y9jZX- vYp)*ycbc3c5`3``3`XhUT&ăn:\B4< !8Id:0/1"tA&]S 6Dt67L؇LK`Kktctta )tK@t"N D7eD罳NSpO%Y+'}|yIвBCU+eX,)$VRWPaI6u-᳹L嗞>.Dž>y.ˑcfOr$tX|at4&|Z73O.|*E&}Akq>5ńFowWboo p27;44)hh044&F֙}p_Ը0pp_Doݩ4-L  \\e.<\\.d3߸ܣ@@ţ@@qw-'\8\\.dk \\(\\.py MSJBF\\e... 6/ B߸----ƁL *"""b{8Zl4Fۣ@@q&khqh& g #…1FSTkI1b!̯::2Ƅ $6C5::tt:l2ssO[)՟ \w:ຘp]Q\O``Љ:::>tt:l2Iy::'4v GnG>qj6&Y$&W{\ @!d!Jnu8|DM-]],:rJk_f$;nvf|vޯ>,Nv#O! >ϖz87y8{8}8MΦ嵧^|OܓkK_~s[g~_y7_3}}^}uj>3?0Wdb(b\ #} 4DI*nM >fttG97iS RS3 B7p6pX8Q0[8YPuۓ{FDVZA;¡<`h2?&&& ӍAOEY2wWccP+Xǀ[[7.[_2nAJbtD}>0%F%+IAsM·ШM׭\- T9'΋s͵IEM]\PY׵D=~‹%J]׎pXj xa]p{׌nh )`{ܿr[IkJObkR͇ڍչl^`A+ 8"ol ;f[:{Dq {) Ҝ9҆~B*%g/.5.J35_f$#LKHGe[Fx ŸGot,0 I*R sugj1p9 Ԛ[R\-8q.j֥oh6ӾWY򼙒͔Y)f}i>|"/OKSnU #?3'|1UR4wR'fORmMqN~n;Jn~{@5c>U8=m,Vˊf#,YL$#pOSQd*OT BVT."(}UmI֊%H[Qk}I7]uq?Oᅪᅢᅨjkn(jʋxh r!1rnN~lլWت2U1sGТnі_׍ @ыI( OB'`D^^5\6`eˠX2 ưqvxZ(Jfʯr%5J^N]vWƛfJA61"!ъzUU@^FBH[ rwݴUPFSɏBEIo:`tT51YʌlΣy (kIAđj& Qav#卥lp|l>ZVLK2>CTLORRIb̯N`:i$\xk>}-+ jq8櫦aC2.FZYN)lZRHUw RY:-6R@ڸ (ׯ b%h44.pw/0qSep.5J# qjv  3@f8q"3$'&yneZsma0SYg&KW)H}j\*ecP2*. eGQH67ށv@MDؿDrvk/|*zEդT[ AhBxObvWYMcLx[cmгNv 5%O4Tt.w69|.N%U9O Igc m&Y"*ǜl(Gq?*ynAd-HΧ01sh 8` &${~'[mE`W֧Ԛ\#Z=S^n(͑bv)WYͭ0fZI @eL5eGrK'gYWH0o%ώ'-ͼ2k3O84Jʢ\B>5@*,t?ki/tAX 5*t+֎tk^J|+BEi\CJ%3Hx5+Hg A:w}"%C*̧ܷl#gϤƧpxl)2T13%"w h#84w(H~%la/lX|7į>)~8Kע%A&5.IJTRd2za';t Y-J+AIOj(;`.\#M5ZC:pDm#nfpEҊXRQ7vЇqƺ$K5KmQjC}N浟~,B* @@Q T ڔuZeCZv‖{Be娄}G˙@Z΄׀% e娄}G.Z Z:222в$@@Q 󁴜o---o4Zkв$yNMa0LȜ^b0{sMP9D 3$/&iM$=ä&l~0'ԭgsv>#0.5BV/LULܷYK}aڊXeRM7kbQ&m}BCNIAAF:̺R7aoGW{Lw wcݻbw۶=xk񯦦r“- Q@Tt",* D DE?e *"ӛEſ j\_P- i+JI;5uRhh5@kD:?Z}SJ+@@֑cH֣W{&w(A_wcލޑ-vw}Dl+N>  E>o*,߄E6װ|0m$#aHt 90g,㟁OXkhF_@4`免?tC~sFLF s'N4w yHV|4!!?2dHʐ&:¿7]ӥK:[ . f vqj7}0ɧ m'҆ փ,VXcqFy) ^&W<&;c{Fl*35!?O[eb my\Q*Ə|_?Ox ud5>6eE&|KV5ɨ,9WV!۞CT\Dg&qWՖdXRΧX{ZV#M$4JkQ׫>mʋ@+*㝦ZY L(m 2x>Xׇo٣QtzS8:fSΠd10{xx_ޏߢkHEARPQWL dzBjR w2e(&{ÙlKD yhb|.OvM)S4ML͢?/3G6JlkaAϖ_W^Z>7?ظ:rvbzQ)"!u` vq@_wڸ՞KE2xUhhhe4!hhyʸreq/m=" wL{a3]#i7ŅSrx+OOƘZZ[ɎPnix$~= >>~_~9?'ڿ3VkhǘqC{U?ڢ R`&L @y;~Es2zNNԣH<ڱ{!:skx0 /0~&Q.V`]L8q {bVdI$` K$KeQ47}{Sڝ70n6 4Bc`+58J gI[(AweD|PTÞXhw":>gy$b[ kB7v[ USb0M) BYZ 8>:1xx 7"uKܝv]e7a\xhw`@UDHU< T *ds`Ho-:Z.}%:Dܭl̃4Be4>L~)a4,T@5"}?0###hT-XU+H6VDSdfR%Ld/-OTT 7J9+ӇA\4$#I$Ci0_8b˦ecI WeÆw*)m#qG{QFhAcՃUDJy^).bضP.оh\na```YL _|'7.N:{=D %Za*GkίAbJFJhJM.foP$|$sVL*Mm Jԋ?gcu\* V"@խQsNzSʹÞm-_zg$S D CZ֒b#U]Xh ojKޖ"O/̳d{D v*N5`5+Xdc Kc-]MH^H+c9p] qm #>"~ t'r riA7JykNK+( sRc#ap&o7c=] lu-"}*.͊a膸t^2Ea/۱i7vMǫWݿjWKЫUA3;;$|B hyI.bE%E[\IX025/*IOX^RdRkIM$_PHv"f&S.~@ : bb>9-jVU\{],Љ\G^{xRdeY^Kj1Sfٟ '(1<^l%fq #x4$tN=FiAex]f\eRҎӎ;u=K#6Os6K -mRT'͉k;佶iW||sb˧d4|~uA =)EPnq7q#]t]"Ra uś\Vn-$>C4iiC:t gCt$y8lR_dG%e8Tũ*VRA-# ZRP&} *J[Xn`X{jdGں*]0ZT뽧s!WxֶͭYLM1 î*Uѱ9nWlN}8j j@ IC5p3"ג"w(uIg N@:ICurY7zy(GsFF~ Z e\jǣ]$ʯ轒t^_P_L}؇|h}؇|؇|>kC?Wck# ^fe~>o؇|?Ϳ6?ÿ?˿.?ǿ_h a|zXB/GXYHv6IAtUE+(H,X%q٥|*Z5[1ҘbS;63|1ď4r̺lڳݖ,}`% _G0T &F/&GYdAY+%#ͦ`tt}R!I'@4}h(z=T1>;n˖Gaˉz ήfUS>˕l NN饖Ր_9MlȕTT!"+w>ğ~}{gS]3L4ղnl)h& 븹>k'% hI6a'յ$N߼j-!KG7J 5 (`64)Hm0 }hy\hoyt Jvr\ZY.^_c9jKvp@6@6@B/md+   F@/;n#U6/ nv ZxFоFgP@chhh} h׿4d m# W7QȶpgP3-Dеb !2cI^eA+I2R`RIwY6ƟMAت:QF.-s%BTuEϕ QUe4"(ՐtIψ_x(*ټ^vt>kܔ8J$<dzS g8UdȖZDq4KD."$O)bF=aO%Дs5!>uuicZ_[vqӆP: jz$'"ei$)k/徲zضnF1h&L6MԘ_ɵ95FjŬQQǿ8F>˖V?ǿ{_X{嗞_п O}}mlssla|ZEfJ"[ ZQ VJ$b%uWRɗÙXYQfY/"ܥ+;7ZA-ŪfJwn|hjEk\?岷,U>?TtܯE\T&n''\.TiD Se헿^S׿EWSW?Mܯo<>|U_3OKKϽu*"T-VjW)2e|ܤA[Hm1?8H#% ( kW,WDVDf@<i!U~u1Qb? {BIbtl:p. U}Q6EDsuO o:gKri:rfX:}l syNi860?9C4"DLfcS4t9 ʉ<"yߙeݹ1|fVjqOupm' yН,𙓁g?:γ4>&̱ccI1e's=s*X%=@ 6v:9gbNPLoIe~,LW;>;7牘:j6?Q=lfSIRއfHՏcdء pt|"}] 0 _Ι6nL W{ cW@%b7t8i>e3s93FceK/c`xK8)&9" Ȑ:2DHla՘ÞV^zć^xg}7׺a~%ڦ؆pRzjA.F082 $E#$B`"c}mY^ಶ rr9}ɉs1>]0\,q Kߘ҉s$pU5"3ag9O"Ҳbgf;/F5;\ŬWyDg۲kL:Exq;W;4Ǩ?wrz8f#7g=xĹY[qgC $c.N`Fr7h % %%)pNC=#7gs0dl|I1Enɥ,0(ȕ/,kW6WN"C1%+3 Jg&=$tAXh,]^PV#$/_))tzڜo-5Gb!()ҭ%@iVX&qn%\J=DU -E%դK *Vr#(jacO8 L’llyRSϲ Ep)XEFt,|^\>>#`.`5/_B`v‚_ OvӋ *WYdձԺ{AL{E1K0Zk_4g0#fE&/]))G)YCy{Zu#9HjZ5=v/Rjdf>gEP)hHиETfN.g,Z\LOmr܏#gg)xxÇ`Jt8p[A?%O{癢e}edB DcaĮ,%Mg(0ݼّ|&p5vFDzΎb'HņZy^4|vI\aQ)|NäBNCvFkvx-)rTMT{HYd::d*{`=dG=Y$F"%TԒ2ߣ^27 RNbFI^I`n+p ) KF,ܮAl*g>1jAUj;Q beЈbaes.55ߩ?Jf z?=c^0uǼl߶*KF,\eVTY z4 E{+၌Ex$W6؇|X}\}kC㟫ǵq~SUl{GW)z[WQ(]#17*Q⩐WkCDU%Y+"Y>t>Ej_zf _ n>PS^ޜMT!JI%\?۲e|H?OME{Et]LR F$L#$*dTȒ/-н{׃Ñ{!Aڃ_Xi/IR=[.ֽqTоL煬].VRнo8J9TIL}R~?qp3%~H AѰ'ޕ|+ cxОU\M,U)Kt2cY7S&~r&Jr`TQqqSf@D@ꃫtLT[̟Vb# I /Il^^, ]+1^k^G?S{?ؠOK$ef7D-8aiN6#&nq|eٶTrrPReTQpU͋]#jm@z/Ֆ\)LpӶQ0/TL쥤4~$֔Y]dMJjgVH+f&xkkj(pF Koغ iجaGv~78.F^kٶZ\4:c_eat]%etkZ(dӺeh-%s^;6zT>G]=j"LYqz>Xwq˅4N8"KlaͭʝiUNӆmPPMF ! -i7i镆ޘq7o/}'j i؜PU*( X.D|~_BdlNӱB׌Hr"t krs WO[=$*w-2_kI<bYC[D+7'3ISx:*E6_˲y󵒁*.hA ՁZUd<-JZ=tbkĺknĠ'N8a,;lÌ2j5̨怴n=&VF-`ۓu4@ըʫIW;$0& \%TMHfEw9a&y6'G@d yM2Kǧ>ғKh863z]AO  D#' Kq=dnjH׌4vt\YRXSler^aMƶso.5X1ЈOwpBMMp5s^&,[NhcAa'O`|w*:{hQ׋knvqneydv LB&-1S5:.<cezӓ% RYJvGIgp4e0R|8=QcvY$&s@uh/E>~&=7NCt= )I}Yry Z|^ĶA60ld3ȴAQ[} -f EQGP5koϕ o;*0h|8pk$puDE*NLɿ5ӏ5HJKW?%A!ɜҸ֥,X:{ zKm3bjv~8fxk-피lnpgpzsu S$^5aP)ߛTI$_'+l qOyDa2AlCF@ y@&+d"qM򓹼Mcs=ccsMLQ@q%4K'n/Kw<A7Jk rf:'jf\χ(h+ytb-N^xmL̚yN2ivFRc*]\y7pjd_9K\Vٻ7È{'?*-AKH8f UNHYg#(is6?VA/DoMu ;(Ϣ2wZ^[)ny7(( +(# zH]޲DZ4_~O?+Bt74MY;5"dz {%8"ɲxNQp6?a&Y$#c\jZ̷dF(\ijuSo #dv˖Gn5p˕?Aձi4^ޗ{k6%Dd4)hMRɂwFt>givaU rxg<}o8tqdE,de,m2?ATTH(f =Fy\NE*krRrN ~A)Ttzr ξ[v@l Vay6IIWvqeyWq|cQ^]bpf EL.Icj?&?m{+;c''õ|MrS]{UTݼW,{?I#;X\Hz?(F<& [f?xs8fd_!`t_zː\_!|?=3681sefֿ^y+wiˏhm~W<P=Vرh3Oܙ]+lU|}|6S)Rdkg/$~\%TdC!;&% "=/lNœ@@R ;fKJbhHU)_EŒՒ)y3: zTʳdC UmX.X;,xፚIS! dcQ!uըeRin QyV[MnJl)*Is-OCa3Ub5ߠb)"\:Th_ꁐ۱R% l{\9UU:w@kqg@3&<V5W^x^׻t5y8M\"5NC ٖIrCrzQg_[e쐼xToE= x*?O;B,j݂;ctӚjs-bQh8`|-#{((?Ok`M`;39佩h,jgr?4KPLC~Ųis{]>Wtrv]W﯊VϽ+3P6ŎN{7w8V 4@Zil l9gsbsl+9n`uq VX=o: :v%K=`wyJ /```;zfZj0B @$X `Y; X ftCS TMK<@`h v`y000X`yHqG屙n &( ( 09$`rY;cKɱ~.$P.`\ `vf̎!f6BIq!qV`7 X}gu*aT2@e?P`~0 `~Y;cs1L͏eZ"[)I$kE4{j  `0H ?0Dy!wHآ]iV4G }, X=o< <-YeB>[Ÿ]!yl))MYvvu#g}|w |xKIK -tCRu`@ M<<+xVcTU{E1hB&Oe&R>FlALI2nq " D5NqZPL.UK-R-TܯeZҋ"ztKlG ql _km^xxh|Y6X4DAa (93zZṼ>|'O4nvH1ª'qSXTn-,"nrR;pAV醣.ӓje;eJYɉ^ Z"f]w63J;kmXH957 for copies of the licenses. # Test Emoji separate to avoid problems with older versions of R that may not # support them in the same way library(fansi) unitizer_sect("Emoji combining", { flags <- "\U0001f1e6\U0001f1f7\U0001f1e6\U0001f1f4\U0001f1e6\U0001f1ee" nchar(flags, type='chars') nchar(flags, type='width') nchar_ctl(flags, type='chars') nchar_ctl(flags, type='width') # can't lest stuff above BMP output as windows can get messed up by that, # otherwise we wouldn't have to use nchar below nchar(substr2_ctl(flags, 1, 2)) nchar(substr2_ctl(flags, 1, 2, type='width')) }) unitizer_sect("graphemes", { # Flags flags <- paste0( rep("\U0001F1E6\U0001F1FF\U0001F1E7\U0001F1FE\U0001F1E8\U0001F1FD", 2), collapse="" ) strwrap2_ctl(flags, 6, wrap.always=TRUE, pad.end=' ', carry="\033[44m") strwrap2_ctl(flags, 7, wrap.always=TRUE, pad.end=' ', carry="\033[44m") flags.1 <- paste0("a", flags) strwrap2_ctl(flags.1, 7, wrap.always=TRUE, pad.end=' ', carry="\033[44m") substr2_ctl(flags, 1, 1, type='width') substr2_ctl(flags, 1, 1, type='width', round='stop') substr2_ctl(flags, 1, 2, type='width', round='neither') substr2_ctl(flags, 2, 3, type='width', round='stop') substr2_ctl(flags, 2, 3, type='width', round='start') substr2_ctl(flags, 2, 3, type='width', round='both') substr2_ctl(flags, 2, 3, type='width', round='neither') # Emoji sequences emo.0 <- "\U0001F476\U0001F3FD\U0001F468\U0001F3FF\U0001F46E\U0001F3FF" emo.1 <- "A_\U0001F468\U0001F3FE\U000200D\U0001F9B3_B" emo.2 <- "\U0001F468\U0001F3FE\U000200D\U0001F9B3" emo.2a <- paste0("_", emo.2, "^", emo.2) # nchar nchar_ctl(c(emo.0, emo.1, emo.2), type='width') nchar_ctl(c(emo.0, emo.1, emo.2), type='graphemes') substr2_ctl(emo.0, 1, 1, type='width') substr2_ctl(emo.0, 1, 1, type='width', round='stop') substr2_ctl(emo.0, 1, 2, type='width', round='stop') substr2_ctl(emo.0, 2, 3, type='width', round='stop') substr2_ctl(emo.0, 2, 3, type='width', round='start') substr2_ctl(emo.0, 2, 3, type='width', round='both') substr2_ctl(emo.0, 2, 3, type='width', round='neither') substr2_ctl(emo.1, 1, 3, type='width') substr2_ctl(emo.1, 1, 3, type='width', round='stop') substr2_ctl(emo.1, 3, 5, type='width') substr2_ctl(emo.1, 4, 5, type='width') emo.3 <- "\U0001F469\U0001F3FD\u200D\u2708\uFE0F" emo.4 <- "\U0001F468\u200D\U0001F469\u200D\U0001F467\u200D\U0001F466" emo.big <- rep( sprintf( paste0( "once upon a time %s there was a humpty %s%s dumpty %s on the wall %s", "and he had %s a %s big fall %s oh no %s" ), flags, emo.0, emo.0, emo.1, emo.2, emo.3, emo.4, emo.3, emo.2 ), 2 ) strwrap2_ctl(emo.big, 10, wrap.always=TRUE, carry="\033[44m", pad.end=" ") # More grapheme tests emo.6 <- c(emo.0, emo.2a, emo.4) substr2_ctl(emo.6, 1, 2, type='graphemes') substr2_ctl(emo.6, 1, 3, type='graphemes') substr2_ctl(emo.6, 2, 3, type='graphemes') substr2_ctl(emo.6, 3, 3, type='graphemes') # Corner cases, effect of SGRs in emo-sequences, on OS X term they are # excluded from flow so don't interrupt sequences. emo.5 <- "\xf0\x9f\x91\xb6\033[43m\xf0\x9f\x8f\xbd###\033[m" Encoding(emo.5) <- "UTF-8" substr2_ctl(emo.5, 1, 2, type='width') substr2_ctl(emo.5, 2, 3, type='width') nchar_ctl(emo.5, type='width') nchar_ctl(emo.5, type='grapheme') # Lead/Trail controls emo.0.1 <- paste0( "\033[33m", substr2_ctl(emo.0, 1, 1, type='graphemes'), "\033[45m" ) substr2_ctl(emo.0.1, 2, 2, type='width') substr2_ctl(emo.0.1, 2, 2, type='width', terminate=FALSE) substr2_ctl(emo.0.1, 1, 1, type='width', round='stop') substr2_ctl(emo.0.1, 1, 3, type='width') substr2_ctl(emo.0.1, 1, 3, type='width', terminate=FALSE) substr2_ctl(emo.0.1, 1, 3, type='width', round='stop') # keep some trailing SGR because a non-special control intercedes emo.0.2 <- paste0(emo.0.1, "\a") substr2_ctl(emo.0.2, 1, 3, type='width', round='start') emo.0.3 <- paste0(emo.0.1, "\a\033]8;;x.yz\033\\") substr2_ctl(emo.0.3, 1, 3, type='width', round='start') # Lead/Trail OSC emo.0.4 <- paste0( "\033]8;;x.yz\033\\", substr2_ctl(emo.0, 1, 1, type='graphemes'), "\033]8;;w.ww\033\\", "\a", "\033[42m" ) substr2_ctl(emo.0.4, 1, 3, type='width') substr2_ctl(emo.0.4, 1, 3, type='width', terminate=FALSE) substr2_ctl(emo.0.4, 1, 2, type='width', terminate=FALSE) substr2_ctl(emo.0.4, 1, 2, type='width') }) unitizer_sect("replacement and width", { # weird, but correct, should be white haired light brown baby, but at least # on tested terminal can't merge white hair onto baby. This is b/c we are # replacing two full UTF8 chars of person-brown with baby-brown, but the third # hair color remains. `substr2_ctl<-`(emo.1, 3, 4, value=emo.0) # Makes much more sense with width mode so the whole grapheme is replaced `substr2_ctl<-`(emo.1, 3, 4, value=emo.0, type='width') # This one cannot replace with an emoji because either the emoji is not # selected at all ("neither"), or it is selected in both the `value` and `end` `substr2_ctl<-`(emo.1, 4, 4, value=emo.0, type='width') `substr2_ctl<-`(emo.1, 4, 4, value=emo.0, type='width', round='stop') `substr2_ctl<-`(emo.1, 4, 4, value=emo.0, type='width', round='neither') # But we can replace with a regular 1-width character `substr2_ctl<-`(emo.1, 4, 4, value="#", type='width') # Or an emoji if it its fully in 'value' `substr2_ctl<-`(emo.1, 4, 5, value=emo.0, type='width') # Test scooching where we fill in from back x <- "ABCDEF" `substr2_ctl<-`(x, 2, 4, value=emo.0, type='width') `substr2_ctl<-`(x, 2, 4, value=emo.0, type='width', round='stop') `substr2_ctl<-`(x, 2, 5, value=emo.0, type='width') # Rounding on both sides `substr2_ctl<-`(emo.1, 3, 4, value=emo.0, type='width', round='both') `substr2_ctl<-`(emo.1, 4, 4, value=emo.0, type='width', round='both') # Mixed good/bad lengths a <- c(rep(emo.1, 4), rep(x, 2)) b <- c(emo.0, "#", rep(emo.0, 4)) starts <- c(3, 4, 4, 4, 2, 2) stops <- c(4, 4, 4, 5, 4, 5) x <- a # writeLines(c(paste0(c(1:6,0),collapse=""),paste(x,starts,stops))) substr2_ctl(x, starts, stops, type='width') <- b x # Replace in the middle of three emojis in a row (or should be five or more # complexity). starts <- c(3, 4, 2, 3, 4, 2) ends <- c(8, 9, 7, 7, 8, 6) emo.3 <- rep( paste0("\U0001F467\U0001F3FF\U0001F9D4\U0001F3FF", emo.0), length(starts) ) emo.4 <- "\U0001F469\u200D\U0001F9B1\U0001F937\U0001F469\u200D\u2695\uFE0F" x0 <- x1 <- emo.3 # writeLines(c(paste0(c(1:9,0),collapse=""),paste(c(x0,x1),starts,ends))) substr2_ctl(x0, starts, ends, type='width') <- emo.4 x0 substr2_ctl(x1, starts, ends, type='width', round='stop') <- emo.4 x1 # Can't reduce size of replacement to fit emo.7 <- "\U0001F600_\U0001F600" emo.7a <- "\U0001F600" `substr2_ctl<-`(emo.7, 3, 3, type='width', round='stop', value=emo.7a) # Here we can `substr2_ctl<-`(emo.7, 3, 3, type='width', round='stop', value="##") # Corner case `substr2_ctl<-`(emo.7a, 2, 1, type='width', round='both', value=emo.7a) }) fansi/tests/special/utf8.R0000644000176200001440000003557015107101152015150 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. # Test UTF-8, separate to avoid issues with platforms that don't support it library(fansi) unitizer_sect("substr", { term.cap <- c('bright', '256', 'truecolor') lorem.cn.pieces <- substr(rep(lorem.cn, 5), c(1, 11, 21, 31), c(10, 15, 22, 45)) lorem.cn.col.1 <- paste0( red, lorem.cn.pieces[1], inv, lorem.cn.pieces[2], grn.bg, lorem.cn.pieces[3], rgb.und, lorem.cn.pieces[4], end ) lor.cn.c.1.5 <- rep(lorem.cn.col.1, 5) starts <- seq(1, 17, 4) ends <- starts + 3 substr2_ctl(lor.cn.c.1.5, starts, ends, term.cap=term.cap) # These are all six chars wide, but look different due to different width # characters lorem.cn.col.2 <- paste0( red, lorem.cn.pieces[1], "hello", inv, lorem.cn.pieces[2], " there ", grn.bg, lorem.cn.pieces[3], rgb.und, lorem.cn.pieces[4], end ) lor.cn.c.2.5 <- rep(lorem.cn.col.2, 5) starts <- seq(1, by=6, length.out=5) ends <- starts + 5 substr2_ctl(lor.cn.c.2.5, starts, ends, term.cap=term.cap) substr2_sgr(lor.cn.c.2.5, starts, ends, term.cap=term.cap) starts <- seq(1, by=12, length.out=5) ends <- starts + 11 substr2_ctl(lor.cn.c.2.5, starts, ends, type='width', term.cap=term.cap) # with colors that actually work on an OSX terminal lorem.cn.col.4 <- paste0( red, lorem.cn.pieces[1], "hello", inv, lorem.cn.pieces[2], " there ", grn.bg, lorem.cn.pieces[3], rgb.und.256, lorem.cn.pieces[4], end ) lor.cn.c.4.5 <- rep(lorem.cn.col.4, 5) substr2_ctl(lor.cn.c.4.5, starts, ends, type='width') # All wide characters even number of chars apart lorem.cn.col.3 <- paste0( red, lorem.cn.pieces[1], "helloo", inv, lorem.cn.pieces[2], " world! ", grn.bg, lorem.cn.pieces[3], rgb.und, lorem.cn.pieces[4], end ) lor.cn.c.3.5 <- rep(lorem.cn.col.3, 5) starts <- seq(1, by=12, length.out=5) ends <- starts + 10 ends[2] <- 24 # This is a bit of an accidental one, but it should be the case that the # second line has two extra single width characters because all the others are # losing the last character b/c we're ending in the middle, width wise substr2_ctl(lor.cn.c.3.5, starts, ends, type='width', term.cap=term.cap) # and now we grab those missing chars by allowing the round to happen substr2_ctl( lor.cn.c.3.5, starts, ends, type='width', round='both', term.cap=term.cap ) # jagged first one leads short, second long starts <- seq(1, by=7, length.out=5) ends <- starts + 8 substr2_ctl(lor.cn.c.1.5, starts, ends, type='width', term.cap=term.cap) substr2_ctl( lor.cn.c.1.5, starts, ends, type='width', round='stop', term.cap=term.cap ) # don't support byte encoded strings bytes <- "\xC0\xB1\xF0\xB1\xC0\xB1\xC0\xB1" Encoding(bytes) <- "bytes" # need trycatch due to instability from C level `error` call in getting the # function call tce(substr_ctl(bytes, 2, 3)) # Let's try a latin one string latin <- "H\xE9llo W\xD6rld!" Encoding(latin) <- "latin1" latin.utf8 <- substr_ctl(latin, 1, 9) latin.utf8 Encoding(latin.utf8) # Start/Stop rounding - examples rnd.1 <- "MnW" Encoding(rnd.1) <- "UTF-8" substr2_ctl(rnd.1, 2, 4, type='width', round='start') substr2_ctl(rnd.1, 2, 4, type='width', round='stop') substr2_ctl(rnd.1, 2, 4, type='width', round='neither') substr2_ctl(rnd.1, 2, 4, type='width', round='both') # Start/Stop rounding - end edge cases rnd.2 <- "MW" Encoding(rnd.2) <- "UTF-8" substr2_ctl(rnd.2, 2, 3, type='width', round='start') substr2_ctl(rnd.2, 2, 3, type='width', round='stop') substr2_ctl(rnd.2, 1, 2, type='width', round='start') substr2_ctl(rnd.2, 1, 2, type='width', round='stop') substr2_ctl(rnd.2, 3, 4, type='width', round='start') substr2_ctl(rnd.2, 3, 4, type='width', round='stop') }) unitizer_sect("rounding", { # handling of subsetting when we end up in middle of wide display characters substr2_ctl(lorem.cn.col.2, 1, 2, type='width') substr2_ctl(lorem.cn.col.2, 1, 3, type='width') substr2_ctl(lorem.cn.col.2, 2, 3, type='width') substr2_ctl(lorem.cn.col.2, 2, 4, type='width') substr2_ctl(lorem.cn.col.2, 3, 4, type='width') substr2_ctl(lorem.cn.col.2, 1, 2, type='width', round='stop') substr2_ctl(lorem.cn.col.2, 1, 3, type='width', round='stop') substr2_ctl(lorem.cn.col.2, 2, 3, type='width', round='stop') substr2_ctl(lorem.cn.col.2, 2, 4, type='width', round='stop') substr2_ctl(lorem.cn.col.2, 3, 4, type='width', round='stop') substr2_ctl(lorem.cn.col.2, 1, 2, type='width', round='both') substr2_ctl(lorem.cn.col.2, 1, 3, type='width', round='both') substr2_ctl(lorem.cn.col.2, 2, 3, type='width', round='both') substr2_ctl(lorem.cn.col.2, 2, 4, type='width', round='both') substr2_ctl(lorem.cn.col.2, 3, 4, type='width', round='both') substr2_ctl(lorem.cn.col.2, 1, 2, type='width', round='neither') substr2_ctl(lorem.cn.col.2, 1, 3, type='width', round='neither') substr2_ctl(lorem.cn.col.2, 2, 3, type='width', round='neither') substr2_ctl(lorem.cn.col.2, 2, 4, type='width', round='neither') substr2_ctl(lorem.cn.col.2, 3, 4, type='width', round='neither') substr2_ctl(lorem.cn.col.2, 2, 3, type='width', round='neither', terminate=FALSE) }) unitizer_sect("multi-elem", { # Due to preservation of state issues, need to make sure works well with # more than one value lor.cn.2.2 <- rep(lorem.cn.col.2, 2) substr2_ctl(lor.cn.2.2, c(1,3), c(2,4), type='width') substr2_ctl(lor.cn.2.2, c(2,4), c(2,4), type='width') }) unitizer_sect("zero width combining", { combo <- "hello\u0300\u035c world" Encoding(combo) <- "UTF-8" substr2_ctl(combo, 1, 5, type='width') substr2_ctl(combo, 5, 8, type='width') substr2_ctl(rep(combo, 2), c(1, 5), c(5, 8), type='width') nchar_ctl(combo, type='width') nchar_ctl(combo, type='graphemes') # zero width with double width combo3 <- paste0(substr(lorem.cn.pieces[1], 1, 2), '\u0300') Encoding(combo3) <- "UTF-8" substr2_ctl(combo3, 3, 4, type='width') substr2_ctl(combo3, 2, 4, type='width') substr2_ctl(combo3, 4, 4, type='width') substr2_ctl(combo3, 4, 5, type='width') # start with diacritic combo4 <- paste0('\u0300hello') substr2_ctl(combo4, 1, 1, type='width') # no diacritic substr2_ctl(combo4, 1, 1) # diacritic only substr2_ctl(combo4, 0, 1, type='width') # with diacritic substr2_ctl(combo4, 0, 0, type='width') # empty }) unitizer_sect("Corner cases", { utf8.bad <- "hello \xF0 world, goodnight moon" Encoding(utf8.bad) <- 'UTF-8' substr_ctl(utf8.bad, 1, 7) substr_ctl(utf8.bad, 5, 10) # Need to use `tryCatch` because the warnings vascillate for no rhyme or # reason between showing the call and not. Seems to be triggered by # re-installing package. now we're stuck with the try business to circumvent # that variability. tce(substr2_ctl(utf8.bad, 1, 7, type='width')) # # need to remove for changes in R3.6.0 # substr2_ctl(utf8.bad, 1, 7, type='width', warn=FALSE) tce(substr2_ctl(utf8.bad, 5, 10, type='width')) # # need to remove for changes in R3.6.0 # substr2_ctl(utf8.bad, 5, 10, type='width', warn=FALSE) # ends early chrs.2 <- "hello\xee" Encoding(chrs.2) <- "UTF-8" tce(substr2_ctl(chrs.2, 1, 10, type='width')) # # need to remove for changes in R3.6.0 # substr2_ctl(chrs.2, 1, 10, type='width', warn=FALSE) # bad utf8 in SGR and CSI bad.u <- c("A\033[31;\x80mB", "A\033[31;\x80pB") Encoding(bad.u) <- "UTF-8" substr_ctl(bad.u[1], 0, 3) substr_ctl(bad.u[2], 0, 3) # boundaries b.test <- c( "\uc0f6\ubed9", "\u0301a\ubed9", # leading diacritic "\ubed9\u0301a", # trailing diacritic "\ubed9a\u0301" # really trailing diacritic ) identical(substr_ctl(b.test, 0, 3), substr(b.test, 0, 3)) identical(substr_ctl(b.test, 0, 2), substr(b.test, 0, 2)) identical(substr_ctl(b.test, 1, 2), substr(b.test, 1, 2)) identical(substr_ctl(b.test, 0, 4), substr(b.test, 0, 4)) identical(substr_ctl(b.test, 4, 4), substr(b.test, 4, 4)) b.t.c <- sprintf("\033[43m%s\033[49m", b.test) substr_ctl(b.t.c, 0, 0) substr_ctl(b.t.c, 0, 2) substr_ctl(b.t.c, 1, 2) substr_ctl(b.t.c, 0, 4) substr_ctl(b.t.c, 4, 4) substr2_ctl(b.t.c, 0, 0, type='width') substr2_ctl(b.t.c, 0, 2, type='width') substr2_ctl(b.t.c, 1, 4, type='width') substr2_ctl(b.t.c, 0, 5, type='width') substr2_ctl(b.t.c, 5, 5, type='width') substr_ctl(b.t.c, 0, 4, terminate=FALSE) substr2_ctl(b.t.c, 1, 4, terminate=FALSE, type='width') }) unitizer_sect("nchar", { chr.dia <- 'A\u030A' nchar_ctl(chr.dia) nchar(chr.dia) # for reference, base gets it wrong too nchar_ctl(chr.dia, type='width') # Wide chars w1 <- "\u4E00\u4E01\u4E03" w2 <- "\u4E00\u4E01\u4E03" nchar_ctl(w1) nchar_ctl(w2, type='width') nchar_ctl(w2, type='graphemes') nchar_ctl(w2, type='bytes') # Allow NA for illegal sequences hello.illegal <- c("hello", "\xF0", "\xF0aaaa") Encoding(hello.illegal) <- 'UTF-8' nchar_ctl(hello.illegal) nchar_ctl(hello.illegal, allowNA=TRUE) # nzchar doesn't care about multi-byte illegal nzchar_ctl(hello.illegal) # escapes mixed in esc.1 <- sprintf( "hello \033[31mworld\033[m%s\033[48;5;123m blahs \033[m%s", "\u76F4\u8349", "\u56FA\u55F0\u5F8C" ) Encoding(esc.1) <- 'UTF-8' nchar_ctl(esc.1) nchar_ctl(esc.1, type='width') nchar_ctl(esc.1, type='bytes') nzchar_ctl(esc.1) esc.2 <- "\n\r\033P\033[31m\a" nchar_ctl(c(esc.1, esc.2, 'hello'), warn=FALSE) # _sgr esc.4 <- c(sprintf("\033[31m%shello", w1), NA, hello.illegal) nchar_sgr(esc.4, type='width', keepNA=FALSE, warn=FALSE, allowNA=TRUE) nzchar_sgr(esc.4, keepNA=FALSE, warn=FALSE) # _sgr does not strip C0; note R behavior on width of C0-C1 # fluctuating around R4.1 transition so can't test directly. nchar_sgr("\033[31m\thello", type='width') >= nchar_ctl("\033[31m\thello", type='width') # nchar doesn't care about bad bits embedded in escapes ncb <- c("123\033[31\x80m123", "123\033\x80123") Encoding(ncb) <- "UTF-8" nchar_ctl(ncb) }) unitizer_sect("unhandled", { # a bad utf8 string and other bad stuff utf8.bad.0 <- "hello\033\033\033[45p \xF0how wor\ald" Encoding(utf8.bad.0) <- "UTF-8" unhandled_ctl(utf8.bad.0) utf8.bad.1 <- "hello \xF0ho" Encoding(utf8.bad.1) <- "UTF-8" unhandled_ctl(utf8.bad.1) }) unitizer_sect("utf8clen", { # Can't test directly, but we can check what character lenght we get back from # nchar and infer whether things have changed or not # # These tests are designed to start failing if behavior of utf8clen changes # # See src/main/valid_utf8.h # U+0000..U+007F | 00..7F | # U+0080..U+07FF | C2..DF | 80..BF # U+0800..U+0FFF | E0 |*A0..BF*| 80..BF # U+1000..U+CFFF | E1..EC | 80..BF | 80..BF # U+D000..U+D7FF | ED |*80..9F*| 80..BF # U+E000..U+FFFF | EE..EF | 80..BF | 80..BF # U+10000..U+3FFFF | F0 |*90..BF*| 80..BF | 80..BF # U+40000..U+FFFFF | F1..F3 | 80..BF | 80..BF | 80..BF # U+100000..U+10FFFF | F4 |*80..8F*| 80..BF | 80..BF chrs <- c( "\xc2\x80", "\xDF\xBF", "\xe0\xA0\x80", "\xE0\xBF\xBF", "\xe1\x80\x80", "\xeC\xbf\xbf", "\xed\x80\x80", "\xed\x9f\xbf", "\xee\x90\x80", "\xef\xbf\xbf", "\xf0\x90\x80\x80", "\xf4\x8f\xbf\xbf", "\xf8\x80\x80\x80\x80", "\xfb\x80\x80\x80\x80", "\xfc\x80\x80\x80\x80\x80", "\xff\x80\x80\x80\x80\x80" ) Encoding(chrs) <- "UTF-8" nchar(chrs, allowNA=TRUE) nchar_ctl(chrs, allowNA=TRUE) # Of the 10xxxxxx variety utf8.bad.2 <- "\xBFaaaaaa" Encoding(utf8.bad.2) <- "UTF-8" nchar(utf8.bad.2, allowNA=TRUE) nchar_ctl(utf8.bad.2, allowNA=TRUE) ## remove for changes in R3.6.0 substr_ctl(utf8.bad.2, 1, 1) }) unitizer_sect("wrap corner cases", { # With UTF8 pre.2 <- "\x1b[32m\xd0\x9f \x1b[0m" ini.2 <- "\x1b[33m\xd1\x80 \x1b[0m" hello.8c <- "hello Привет world" Encoding(pre.2) <- "UTF-8" Encoding(ini.2) <- "UTF-8" Encoding(hello.8c) <- "UTF-8" pre.3 <- "\xd0\x9f " ini.3 <- "\xd1\x80 " Encoding(pre.3) <- "UTF-8" Encoding(ini.3) <- "UTF-8" wrap.csi.4 <- strwrap_ctl(hello.8c, 15, prefix=pre.2, initial=ini.2) wrap.csi.4 utf8.chr <- "\u76F4" strwrap2_ctl(utf8.chr, 1, wrap.always=TRUE) strwrap2_ctl(utf8.chr, 2, wrap.always=TRUE) strwrap2_ctl(utf8.chr, 3, wrap.always=TRUE) strwrap_ctl("lovelyday.", 10) strwrap2_ctl("lovelyday.", 10, wrap.always=TRUE) utf8.bad <- "hello \xF0 world, goodnight moon" Encoding(utf8.bad) <- "UTF-8" strwrap_ctl(utf8.bad, 10) # bad prefix values utf8.bad.2 <- "\xF0" Encoding(utf8.bad.2) <- "UTF-8" tcw(strwrap_ctl("hello world", 6, prefix=utf8.bad.2)) suppressWarnings(strwrap_ctl("hello world", 6, prefix=utf8.bad.2)) # Byte encoded strings not allowed bytes <- "\xC0\xB1\xF0\xB1\xC0\xB1\xC0\xB1" Encoding(bytes) <- "bytes" tce(strwrap_ctl(bytes)) # Encoding captured correctly encstrings <- c("hell\u00F8 world", "hello w\u00F8rld") Encoding(strwrap_ctl(encstrings, 5)) # Caused an infinite loop in one case str.inf <- "\U1F600 \U1F600" strwrap2_ctl(str.inf, 2) }) unitizer_sect("wrap with wide UTF8 and ESC", { wrap.mix <- strwrap_ctl(lorem.mix, 25) wrap.mix # identical( # strwrap(strip_ctl(lorem.mix, "sgr"), 25), strip_ctl(wrap.mix, "sgr") # ) string <- "\033[37;48;5;32m國官方認定的民族現有56個\033[39;49m" Encoding(string) <- "UTF-8" strwrap2_ctl(string, 24, wrap.always=TRUE, pad.end=" ") }) unitizer_sect("issue 54 ctd", { # other issu54 tests are in tohtml.R, but had to move this one here due to the # ellipsis utf-8 character. string3 <- c( "\033[38;5;246m# … with 5 more variables: total_time \033[3m\033[38;5;246m\033[38;5;246m\033[23m, result \033[3m\033[38;5;246m\033[38;5;246m\033[23m, memory \033[3m\033[38;5;246m\033[38;5;246m\033[23m,", "# time \033[3m\033[38;5;246m\033[38;5;246m\033[23m, gc \033[3m\033[38;5;246m\033[38;5;246m\033[23m\033[39m" ) Encoding(string3) <- "UTF-8" fansi::sgr_to_html(html_esc(string3)) # head <- "

"
  # f <- paste0(tempfile(), ".html")
  # writeLines(c(head, fansi::sgr_to_html(string3), "
"), f) # browseURL(f) # unlink(f) # trigger warnings/errors string4 <- c( "wow \033[31m then", "hello\033[\x80;wow", "yo \033[m there", "boom \033[41m" ) Encoding(string4) <- "UTF-8" sgr_to_html(string4) }) unitizer_sect("html_esc", { x <- "\U0001F600" html_esc(c("h&e'l\"lo", "wors", NA, ""), x) }) fansi/tests/special/_pre/0000755000176200001440000000000015106720676015073 5ustar liggesusersfansi/tests/special/_pre/strings.R0000644000176200001440000000152714533476156016720 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. # Test strings for use end <- "\033[0m" red <- "\033[31m" inv <- "\033[7m" grn.bg <- "\033[42m" rgb.und <- "\033[4;38;2;0;120;200m" rgb.und.256 <- "\033[4;38;5;141m" rgb.256 <- "\033[48;5;141m" fansi/tests/special/_pre/funs.R0000644000176200001440000000222014533476156016171 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. ## Helpers to extract the condition message only due to instability in ## C level error/warning in displaying the call or not. ## ## This seems to be related to whether functions are byte compiled or not, with ## non-bc ones not getting the call. Possible we stopped seeing issues with the ## advent of always byte compiling packages. tce <- function(x) tryCatch(x, error=conditionMessage) tcw <- function(x) tryCatch(x, warning=conditionMessage) ## writeLines! wl <- function(x) writeLines(c(x, "\033[m")) fansi/tests/special/_pre/lorem-utf8.R0000644000176200001440000000667214533476156017237 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. lorem <- "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." Encoding(lorem) <- "UTF-8" # From the PRC chinese wiki page: # # # # Licensed under GNU Free Documentation License since it is from before 2009 lorem.cn <- "中華人民共和國是單一制的多民族國家。全國劃分為23個省(其中台灣省并沒有實際管辖)、5個自治區、4個直轄市和2個根據一國兩制設立的特別行政區,均直屬於中央人民政府。中华人民共和国跨越五个地理时区,但全国均使用北京时间(UTC+8,东八区)作为标准时间。中華人民共和國官方認定的民族現有56個,其中最大民族汉族佔總人口的91.59%,其餘55族統稱為少数民族,所有民族統稱為中華民族;除回族外,其他54個少数民族如壮族、维吾尔族、滿族、蒙古族、藏族、朝鲜族等也多使用自己的語言與文字。主要宗教有佛教、道教、基督教(多指新教)、天主教和伊斯兰教等,但過半人口無特定宗教信仰。中华人民共和国的通用语言是汉语普通話,當中在中國大陸通行的漢字為簡體字,而在港澳台地區通行的漢字則為繁體字。" Encoding(lorem.cn) <- "UTF-8" # cn.split <- "[、。]\\K" # Encoding(cn.split) <- "UTF-8" # lorem.cn.phrases <- unlist(strsplit(lorem.cn, cn.split, perl=TRUE)) # saveRDS(lorem.cn.phrases, 'unitizer/_pre/lorem.data/lorem.cn.phrases.RDS') lorem.cn.phrases <- readRDS('unitizer/_pre/lorem.data/lorem.cn.phrases.RDS') # mix of wide and normal characters and colors and styles lorem.cn.phrases.2 <- gsub("\\d", "", lorem.cn.phrases) lorem.cn.words <- substr( lorem.cn.phrases.2, 1, pmin(nchar(lorem.cn.phrases.2) - 1, c(2,3,4,5)) ) # not a grep split, so okay lorem.words <- unlist(strsplit(tolower(lorem), "[^a-z]+")) p0 <- function(...) paste0(..., collapse=' ') lorem.mix <- paste0( c( p0(lorem.words[1:3]), " ", '\033[32m', p0(lorem.cn.words[4:6]), " ", '\033[7;1m', p0(lorem.words[4:10]),'\n\n\033[38;5;105m', p0(lorem.words[11:20]), '\n\n', '\033[m', p0(lorem.cn.words[3:1]), " ", '\033[34;43m', p0(lorem.words[21:25]), "\033[49m", p0(lorem.words[26:30]), '\033[39;4m', " ", p0(lorem.cn.words[7:9]), "\n\n", p0(lorem.cn.words[10:12]), " ", p0(lorem.words[31:36]), "\033[0m", "\n" ), collapse="" ) fansi/tests/special/cps.R0000644000176200001440000000204015107101130015025 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. library(unitizer) library(fansi) unitizer_sect('Test all Code Points', { SURROGATE_START <- 0xD800 SURROGATE_END <- 0xDFFF surrogate_range <- SURROGATE_START:SURROGATE_END all_codepoints <- setdiff(0:0x10FFFF, c(surrogate_range, 0x1B)) all_chars <- intToUtf8(all_codepoints, multiple = TRUE) fansi_widths <- nchar_ctl(all_chars, type = 'width') table(fansi_widths, useNA='ifany') }) fansi/tests/Rprof.out0000644000176200001440000034377714213626056014367 0ustar liggesuserssample.interval=20000 "structure" "" "mapply" "create_fields" "read_dcf" "idesc_create_text" "idesc_create_file" "idesc_create" "initialize" "description$new" "desc::desc_get" "rr" "file" "base::readLines" "read_lines" "ignore_files" "package_files" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_title" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_node" "xml_document" "read_xml.raw" "read_xml.character" "xml2::read_xml" "md_to_mdxml" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_title" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_node" "xml_document" "read_xml.raw" "read_xml.character" "xml2::read_xml" "md_to_mdxml" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_description" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_description" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "read_xml.raw" "read_xml.character" "xml2::read_xml" "md_to_mdxml" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_description" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_description" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "read_xml.raw" "read_xml.character" "xml2::read_xml" "md_to_mdxml" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "NextMethod" "nodeset_apply.xml_document" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "NextMethod" "nodeset_apply.xml_document" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" "mdxml_list" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "mdxml_item" ".f" "map_chr" "mdxml_children_to_rd" "paste0" "mdxml_list" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "mdxml_item" ".f" "map_chr" "mdxml_children_to_rd" "paste0" "mdxml_list" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" "mdxml_item" ".f" "map_chr" "mdxml_children_to_rd" "paste0" "mdxml_list" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" "mdxml_item" ".f" "map_chr" "mdxml_children_to_rd" "paste0" "mdxml_list" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_contents" "mdxml_link" ".f" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "NextMethod" "nodeset_apply.xml_document" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "NextMethod" "nodeset_apply.xml_document" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "NextMethod" "nodeset_apply.xml_document" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" "mdxml_list" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" "mdxml_item" ".f" "map_chr" "mdxml_children_to_rd" "paste0" "mdxml_list" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "getwd" "srcfilecopy" "parse" "as.list" "FUN" "lapply" "map" "chr_parse_exprs" "parse_exprs" "parse_expr" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "can_parse" "mdxml_code" ".f" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_node" "xml_document" "read_xml.raw" "read_xml.character" "xml2::read_xml" "md_to_mdxml" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "read_xml.raw" "read_xml.character" "xml2::read_xml" "md_to_mdxml" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_node" "xml_document" "read_xml.raw" "read_xml.character" "xml2::read_xml" "md_to_mdxml" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "NextMethod" "nodeset_apply.xml_document" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "FUN" "lapply" "nodeset_apply.xml_nodeset" "nodeset_apply" "xml_contents" "parse_link" "mdxml_link" ".f" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "read_xml.raw" "read_xml.character" "xml2::read_xml" "md_to_mdxml" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "NextMethod" "nodeset_apply.xml_document" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "NextMethod" "nodeset_apply.xml_document" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" "mdxml_list" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" "mdxml_item" ".f" "map_chr" "mdxml_children_to_rd" "paste0" "mdxml_list" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" "mdxml_item" ".f" "map_chr" "mdxml_children_to_rd" "paste0" "mdxml_list" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_contents" "mdxml_link" ".f" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_node" "xml_document" "read_xml.raw" "read_xml.character" "xml2::read_xml" "md_to_mdxml" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "read_xml.raw" "read_xml.character" "xml2::read_xml" "md_to_mdxml" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_type.xml_node" "xml_type" "%in%" ".f" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "nodeset_apply.xml_node" "NextMethod" "nodeset_apply.xml_document" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "FUN" "lapply" "nodeset_apply.xml_nodeset" "nodeset_apply" "xml_contents" "parse_link" "mdxml_link" ".f" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "close.connection" "close" "readRDS" "index.search" "utils::help" "basename" "find_topic_in_package" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "try_find_topic_in_package" "find_topic_filename" "parse_link" "mdxml_link" ".f" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_section" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_node" "xml_document" "read_xml.raw" "read_xml.character" "xml2::read_xml" "md_to_mdxml" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_title" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_title" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_title" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_description" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_description" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "NextMethod" "nodeset_apply.xml_document" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_description" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "read_xml.raw" "read_xml.character" "xml2::read_xml" "md_to_mdxml" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "NextMethod" "nodeset_apply.xml_document" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_note" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_note" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_note" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_note" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_note" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "NextMethod" "nodeset_apply.xml_document" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_note" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_note" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_note" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_node" "xml_document" "read_xml.raw" "read_xml.character" "xml2::read_xml" "md_to_mdxml" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_two_part" "tag_name_description" "roxy_tag_parse.roxy_tag_param" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_two_part" "tag_name_description" "roxy_tag_parse.roxy_tag_param" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_two_part" "tag_name_description" "roxy_tag_parse.roxy_tag_param" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_two_part" "tag_name_description" "roxy_tag_parse.roxy_tag_param" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_return" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_return" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_return" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "NextMethod" "nodeset_apply.xml_document" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_return" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "getwd" "srcfilecopy" "parse" "as.list" "FUN" "lapply" "map" "chr_parse_exprs" "parse_exprs" "parse_expr" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "can_parse" "mdxml_code" ".f" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_return" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_title" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "names" "names" "data.frame" "find_all_tag_names" "find_all_rd_tags" "find_fragile_rd_tags" "escape_rd_for_md" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_title" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_title" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_description" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_description" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_node" "xml_document" "read_xml.raw" "read_xml.character" "xml2::read_xml" "md_to_mdxml" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_description" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_description" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "NextMethod" "nodeset_apply.xml_document" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "nodeset_apply.xml_node" "NextMethod" "nodeset_apply.xml_document" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" "mdxml_list" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "mdxml_item" ".f" "map_chr" "mdxml_children_to_rd" "paste0" "mdxml_list" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_details" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_node" "xml_document" "read_xml.raw" "read_xml.character" "xml2::read_xml" "md_to_mdxml" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_return" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_return" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_node" "xml_document" "read_xml.raw" "read_xml.character" "xml2::read_xml" "md_to_mdxml" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_return" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "read_xml.raw" "read_xml.character" "xml2::read_xml" "md_to_mdxml" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_title" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_title" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "NextMethod" "nodeset_apply.xml_document" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_title" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_description" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_description" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "read_xml.raw" "read_xml.character" "xml2::read_xml" "md_to_mdxml" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_description" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_description" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_two_part" "tag_name_description" "roxy_tag_parse.roxy_tag_param" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_two_part" "tag_name_description" "roxy_tag_parse.roxy_tag_param" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "structure" "xml_nodeset" "nodeset_apply.xml_node" "NextMethod" "nodeset_apply.xml_document" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_two_part" "tag_name_description" "roxy_tag_parse.roxy_tag_param" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_two_part" "tag_name_description" "roxy_tag_parse.roxy_tag_param" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_two_part" "tag_name_description" "roxy_tag_parse.roxy_tag_param" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "NextMethod" "nodeset_apply.xml_document" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_two_part" "tag_name_description" "roxy_tag_parse.roxy_tag_param" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_node" "xml_document" "read_xml.raw" "read_xml.character" "xml2::read_xml" "md_to_mdxml" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_return" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_return" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "NextMethod" "nodeset_apply.xml_document" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_return" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_node" "xml_document" "read_xml.raw" "read_xml.character" "xml2::read_xml" "md_to_mdxml" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_title" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_title" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "sys.call" "%in%" "[[.data.frame" "[[" "[.data.frame" "[" "find_fragile_rd_tags" "escape_rd_for_md" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_title" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_title" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_description" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_description" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_description" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_description" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "NextMethod" "nodeset_apply.xml_document" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_description" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_description" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd" "paste0" ".f" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown_with_sections" "roxy_tag_parse.roxy_tag_description" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_node" "xml_document" "read_xml.raw" "read_xml.character" "xml2::read_xml" "md_to_mdxml" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_family" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_family" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "fun" "nodeset_apply.xml_node" "NextMethod" "nodeset_apply.xml_document" "nodeset_apply" "xml_children" "map_chr" "mdxml_children_to_rd_top" "markdown_pass2" "markdown" "markdown_if_active" "tag_markdown" "roxy_tag_parse.roxy_tag_family" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_two_part" "tag_name_description" "roxy_tag_parse.roxy_tag_param" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_two_part" "tag_name_description" "roxy_tag_parse.roxy_tag_param" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_node" "xml_document" "read_xml.raw" "read_xml.character" "xml2::read_xml" "md_to_mdxml" "markdown_pass2" "markdown" "markdown_if_active" "tag_two_part" "tag_name_description" "roxy_tag_parse.roxy_tag_param" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_two_part" "tag_name_description" "roxy_tag_parse.roxy_tag_param" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_two_part" "tag_name_description" "roxy_tag_parse.roxy_tag_param" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_two_part" "tag_name_description" "roxy_tag_parse.roxy_tag_param" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_two_part" "tag_name_description" "roxy_tag_parse.roxy_tag_param" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" "xml_find_all.xml_node" "xml_find_all" "xml_ns_strip" "markdown_pass1" "doTryCatch" "tryCatchOne" "tryCatchList" "tryCatch" "markdown" "markdown_if_active" "tag_two_part" "tag_name_description" "roxy_tag_parse.roxy_tag_param" "FUN" "lapply" "compact" "parse_tags" ".f" "purrr::pmap" "FUN" "lapply" "parse_package" "rr" fansi/MD50000644000176200001440000001553415107351022011666 0ustar liggesusers14bb4b0300c099f37920c7d8b4f95964 *COPYING 7c535f8f6add2299be4dcdf558e42ddf *DESCRIPTION 9d84821edc4b6c7f10e2544b3c62926c *NAMESPACE 3d678df56163527862b2b2b4817e0ebf *NEWS.md a1915fec613ccf0cd80de7849299e565 *R/constants.R 0a4557ee6c40e8085f78d19ad94daca1 *R/fansi-package.R 138541d54621918996fcdcba6870cd25 *R/internal.R a35f356575f29b5959184bde04abc95d *R/load.R 44c4ca7f01e4855d2114105f34509ece *R/misc.R 403b2a5ffb4aeaf2bf11fda8b7e9cb7d *R/nchar.R 34e6c64dc7c2a2702d9d54091a12b3b2 *R/normalize.R 49e8d922d49794cf1d0f2797983dc400 *R/sgr.R c140e57fa23107c698a9b13d35481778 *R/strsplit.R 33f160fd11debbcf2f3752a89eedc0fa *R/strtrim.R a7f0d6e3d82d89d94a91f3fcfdb242b1 *R/strwrap.R 17198b378c3ddb6630079bff0134aeef *R/substr2.R 8f47c5dde7697dfcbcb80a484df8391e *R/tohtml.R 38a06554f6076eeb984bca1adcf85c18 *R/trimws.R 9ef5ef71445b6f7725b452e4f815b084 *R/unhandled.R 7ef3ac8ea33d170dbbbd5361e865d9d8 *README.md dbe3d291cd194af6fadda7428a6ec3a0 *build/vignette.rds b480e15610ca6aaa30974cdf0a5e77ce *inst/doc/sgr-in-rmd.R 368576ff676a26fbc5395f1aeb364cb6 *inst/doc/sgr-in-rmd.Rmd 092fc1b17ac1541e2346a7f5db3141d6 *inst/doc/sgr-in-rmd.html 79ad5279091252bcffb795bac32cf70e *man/dflt_term_cap.Rd 2e1342705a0c946407ac56d2ff5f36f5 *man/fansi.Rd 09b9afefad88c42caa18f6bdeff4be2c *man/fansi_lines.Rd 62d96888d5876cc08aae5fe9e5e38c6f *man/fansi_unicode_version.Rd 029c21cc1a83767f8452b233ff8b1753 *man/fwl.Rd e99a86f74d92da1720131933fd7c6ed8 *man/has_ctl.Rd b16bf4d8d95bcfedfb82b79383b34661 *man/has_sgr.Rd edd2ae1ba1df57748fed3d5d12d6ac2c *man/html_code_block.Rd b0eb7ce61beaadeede8d17039fd7fe86 *man/html_esc.Rd 175aa96f8dad7b5547df86c89676baa1 *man/in_html.Rd ae801c8adf0625dd46d8b4fb43fa5039 *man/make_styles.Rd 29d5ee3466fe99ac84966fb698e955f6 *man/nchar_ctl.Rd b35bc63015cab5f09b8172c065f9510f *man/nchar_sgr.Rd 41bba2079e33a4f682ee2201524e3111 *man/normalize_state.Rd ed5687c4bbe0e68c7a0c9370f8dfd963 *man/set_knit_hooks.Rd 5e08be7234d5a2b78cd9d17f4a076803 *man/sgr_256.Rd 53e08f28961b5b64a58104ace02d3a1c *man/sgr_to_html.Rd 754f8a2fd1beb3731c57f815a5e588b2 *man/state_at_end.Rd 61b5f7c7b058fd5440cfbde681389ee4 *man/strip_ctl.Rd b746f9565205da591cb57ba3577cec6c *man/strip_sgr.Rd 0218bc0e080b3fcd5709006452699921 *man/strsplit_ctl.Rd 8cbaf0eefcc3c95f18fb55d550f61e12 *man/strsplit_sgr.Rd ce3d32ce0a469a0789cbfec6c31c2744 *man/strtrim_ctl.Rd 50f04ca5e30b07432cce4a8f00254c04 *man/strtrim_sgr.Rd 0ffe1c22ea207a9a721b9820685fa341 *man/strwrap_ctl.Rd a66ea6f569660a40c59b71c34364e0ed *man/strwrap_sgr.Rd 833e6607d8d41aa2e7d58b9bdf65fbf6 *man/substr_ctl.Rd 5bf6b296a894899a66b1fa08cc159676 *man/substr_sgr.Rd 37ed615a6c4cce008aecb5c77122248d *man/tabs_as_spaces.Rd b75c259163919eb1a0dd3487456fbfec *man/term_cap_test.Rd 61cdc7c7a0a09b485f32267203a25afd *man/to_html.Rd ab702fd5558722d9ebb036926e313fbc *man/trimws_ctl.Rd 6bb0e66426a2132365e0c8d1bd7be860 *man/unhandled_ctl.Rd 4a6ee9d66b62b2838b5d54e20f04f8b0 *src/Makevars 3aab85ebdb0924f3081ba6ebcb71c405 *src/assumptions.c 33df5ed09c6142a7c45f8c6d7d03b1f2 *src/carry.c 361540aedcb086efc89acaa44053919c *src/fansi-cnst.h 63c40d3112aa609cb79fbe73501d0eb5 *src/fansi-ext.h 9d778f3390c476d0266e42a0036b3806 *src/fansi-struct.h dba9773adbae7e3ba07d4e2fa5664171 *src/fansi-win.def 53756c28cd7f02537fe20d959dbd8855 *src/fansi.h cfd18b26c12e0cc52d50a2d1be9de4ca *src/has.c df5b4b56d445a7b34ac0e84bd93b0f9b *src/init.c fc385906eccfbdae0db1d59af2fa8adb *src/nchar.c d60274206deae16dcb2cefec848e3711 *src/normalize.c 56ee6313f26b391323ceb5f6e4ad9d2c *src/read.c 7f25d220352d30b7c8c4bc36cafd8abc *src/state.c 0279c381057625099607cf992c31b1fc *src/strip.c 3cb1020bfe988008987ac4c3234ca14b *src/substr.c 3fc68f4f2360c9504e49e7e7d3b38a9f *src/tabs.c 46d1eb2067265581a41bae57bf58e2ed *src/tohtml.c f75d1a33f0c7350ae19127511393ef16 *src/trimws.c 7f621b0cbeeb17f539d4161aca129cd6 *src/unhandled.c c0cc89c6a3ed72587e82dd797ab795ef *src/utf8.c db85d844edded6faa7a1c9814723245c *src/utf8clen.h 5b7aa41c22bb506e4a6d4143a57af5e1 *src/utils.c 2a5787259377894bffa330813be884a1 *src/width.c 7507bb4781e3065f09c73fcb93c35dc4 *src/wrap.c 13231f929758ef31712c300abdf2dc3a *src/write.c 5667947b8f95f7b16c0bc1c9552192e0 *tests/Rprof.out 9e96c3c07ff2f14ce3f41a80aea4c10c *tests/run.R 87a1e315ff0016470efff476efea6eb1 *tests/special/_pre/funs.R 430eed4d3b63a95533d10dbf1566b602 *tests/special/_pre/lorem-utf8.R 6a8fb67b50bfb19f5f68d2a6404095eb *tests/special/_pre/strings.R 55314cca595aec97a3363e50252989e6 *tests/special/cps.R 3dfce9ac2b82c5ef9ea34a4ea0be37a3 *tests/special/cps.unitizer/data.rds 06f6199fbf6a9d0b856fb1523626b149 *tests/special/emo-graph.R cb74a32c2b659399fc774a5c7e67c982 *tests/special/emo-graph.unitizer/data.rds 5072fef4e6392492e25de9ee5ef3a806 *tests/special/utf8.R ca9c3755ab8ad61a7646ce5d52a5870c *tests/special/utf8.unitizer/data.rds dd3bd2c1ece09879b53ddb6687500798 *tests/unitizer/_pre/funs.R ba82c5fd6275d7b6f0f3bf1efd6fdbd6 *tests/unitizer/_pre/lorem.R a75d0df3c8bac48c6069dfe78774570e *tests/unitizer/_pre/lorem.data/lorem.cn.phrases.RDS a8eaee7d7eb3d494b11a0d0e5564f962 *tests/unitizer/_pre/strings.R b0d00cfe78acd175bee35b82e0e3d28a *tests/unitizer/has.R c8c0c175900565a6755c1225cc6f9b7c *tests/unitizer/has.unitizer/data.rds 6d87b1d167dcf8afdaa117d0e14ab818 *tests/unitizer/interactions.R 2dc43c9a8b9709593226d05cee8ffbba *tests/unitizer/interactions.unitizer/data.rds a112770c3dffcc27281539fd7dea4e8b *tests/unitizer/misc.R fb740e6751da1f1a430c678ca04ccd0b *tests/unitizer/misc.unitizer/data.rds 47eb83baf9f733428bb9830279d9affb *tests/unitizer/nchar.R 9266b3d825e4f053a0abe71ab3ce887d *tests/unitizer/nchar.unitizer/data.rds ae24c511e8d998e575da37c538c17386 *tests/unitizer/normalize.R eef53fd21e84b20678d8c8ac440015b9 *tests/unitizer/normalize.unitizer/data.rds d09ba5073a646fae37d0aca6e895875a *tests/unitizer/overflow.R 162168a40b4695b388e2d71026386236 *tests/unitizer/overflow.unitizer/data.rds fcfb224948a1afb53fa791d35cc74fd7 *tests/unitizer/strip.R 15ba4765eaf7b30b372e8c9f1255041c *tests/unitizer/strip.unitizer/data.rds 54e54f69461b9f0ccd09df8b7db4d1a2 *tests/unitizer/strsplit.R 441c2a390951a76deb028d02788483fe *tests/unitizer/strsplit.unitizer/data.rds 44453730f30cf544dc1d98333f2b7740 *tests/unitizer/substr.R b7d8f2d24288e0083d7b436a0bb315fb *tests/unitizer/substr.unitizer/data.rds 3845fa0319a1ab4f6cf3b659a022bd6b *tests/unitizer/tabs.R 3940bca8582d8d8c317e3ded4b3d57ae *tests/unitizer/tabs.unitizer/data.rds 98122bf796550ccee6b5b6eb1ffb0c46 *tests/unitizer/tohtml.R 93ef1c3dc089e7c99f8528cb3e1847c6 *tests/unitizer/tohtml.unitizer/data.rds 949e7990e73dbe0df0430ab9797e44f6 *tests/unitizer/trimws.R 527e3bcd165dc19c5e684511e51ccbaf *tests/unitizer/trimws.unitizer/data.rds 86f06897eee9a2cf771af27ebea001fb *tests/unitizer/url.R ee5e060a76fb915e4cb8e0a5832d9e10 *tests/unitizer/url.unitizer/data.rds cf7b2aaceec9e907cf2e57383c46248a *tests/unitizer/wrap.R 0612f2adf3150bab6bb7ec211994f50e *tests/unitizer/wrap.unitizer/data.rds 368576ff676a26fbc5395f1aeb364cb6 *vignettes/sgr-in-rmd.Rmd b35b7d6227ab84772153a7c06e2f8dcc *vignettes/styles.css fansi/R/0000755000176200001440000000000015107200322011543 5ustar liggesusersfansi/R/internal.R0000644000176200001440000002245514533476156013540 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. ## Internal environment (mostly just to store version) FANSI.ENV <- new.env() ## Global variables utils::globalVariables( c("TERM.CAP.INT", "WARN.INT", "CTL.INT", "TYPE.INT", "ROUND.INT", "X.LEN") ) ## Internal functions, used primarily for testing ## Testing interface for color code to HTML conversion esc_color_code_to_html <- function(x) { if(!is.matrix(x) || !is.integer(x) || nrow(x) != 5) stop("Argument `x` must be a five row integer matrix.") .Call(FANSI_color_to_html, as.integer(x)) } check_assumptions <- function() .Call(FANSI_check_assumptions) # nocov add_int <- function(x, y) .Call(FANSI_add_int, as.integer(x), as.integer(y)) ## testing interface for low overhead versions of R funs set_int_max <- function(x) .Call(FANSI_set_int_max, as.integer(x)[1]) get_int_max <- function(x) .Call(FANSI_get_int_max) # nocov for debug only set_rlent_max <- function(x) .Call(FANSI_set_rlent_max, as.integer(x)[1]) reset_limits <- function(x) .Call(FANSI_reset_limits) get_warn_all <- function() .Call(FANSI_get_warn_all) get_warn_mangled <- function() .Call(FANSI_get_warn_mangled) get_warn_utf8 <- function() .Call(FANSI_get_warn_utf8) get_warn_worst <- function() bitwOr(get_warn_mangled(), get_warn_utf8()) get_warn_error <- function() .Call(FANSI_get_warn_error) ## For testing version specific code set_rver <- function(x=getRversion()) { old <- FANSI.ENV[['r.ver']] FANSI.ENV[['r.ver']] <- x invisible(old) } ## exposed internals for testing check_enc <- function(x, i) .Call(FANSI_check_enc, x, as.integer(i)[1]) ## make sure `ctl` compression working ctl_as_int <- function(x) .Call(FANSI_ctl_as_int, as.integer(x)) ## testing interface for bridging bridge <- function( end, restart, term.cap=getOption("fansi.term.cap", dflt_term_cap()), normalize=getOption('fansi.normalize', FALSE) ) { VAL_IN_ENV(term.cap=term.cap) .Call(FANSI_bridge_state, end, restart, TERM.CAP.INT, normalize) } ## Common argument validation and conversion. Missing args okay. ## ## Converts common arguments to standardized forms if needed. ## ## DANGER: will modify values in calling environment! Also may add variables ## such as CTL.INT, X.LEN, etc. (these should all be in caps). VAL_IN_ENV <- function( ..., valid.types=c('chars', 'width', 'graphemes'), warn.mask=get_warn_all() ) { call <- sys.call(-1) par.env <- parent.frame() stop2 <- function(...) stop(simpleError(paste0(..., collapse=""), call)) args <- list(...) argnm <- names(args) if( !all( argnm %in% c( 'x', 'warn', 'term.cap', 'ctl', 'normalize', 'carry', 'terminate', 'tab.stops', 'tabs.as.spaces', 'strip.spaces', 'round', 'type', 'start', 'stop', 'keepNA', 'allowNA', 'value', # meta parameters (i.e. internal parameters) 'valid.types' # nchar and substr allow different things ) ) ) stop("Internal Error: some arguments to validate unknown") if('x' %in% argnm) { x <- args[['x']] if(!is.character(x)) x <- as.character(args[['x']]) enc <- Encoding(x) x <- enc_to_utf8(x, enc) if(length(which.byte <- which(enc == "bytes"))) stop2( "Argument `x` contains a \"bytes\" encoded string at index [", which.byte[1],"]", if(length(which.byte) > 1) "and others, " else ", ", "which is disallowed." ) args[['x']] <- x } if('warn' %in% argnm) { warn <- args[['warn']] if(!is.logical(warn)) warn <- as.logical(args[['warn']]) if(length(warn) != 1L || is.na(warn)) stop2("Argument `warn` must be TRUE or FALSE.") args[['warn']] <- warn args[['WARN.INT']] <- if(warn) warn.mask else bitwAnd(warn.mask, get_warn_error()) } if('normalize' %in% argnm) { normalize <- as.logical(args[['normalize']]) if(!isTRUE(normalize %in% c(FALSE, TRUE))) stop2("Argument `normalize` must be TRUE or FALSE.") args[['normalize']] <- as.logical(normalize) } if('term.cap' %in% argnm) { term.cap <- args[['term.cap']] if(!is.character(term.cap)) stop2("Argument `term.cap` must be character.") if(anyNA(term.cap.int <- match(term.cap, VALID.TERM.CAP))) stop2( "Argument `term.cap` may only contain values in ", deparse(VALID.TERM.CAP) ) args[['TERM.CAP.INT']] <- term.cap.int } if('ctl' %in% argnm) { ctl <- args[['ctl']] if(!is.character(ctl)) stop2("Argument `ctl` must be character.") ctl.int <- integer() if(length(ctl)) { # duplicate values in `ctl` are okay, so save a call to `unique` here if(anyNA(ctl.int <- match(ctl, VALID.CTL))) stop2( "Argument `ctl` may contain only values in `", deparse(VALID.CTL), "`" ) } args[['CTL.INT']] <- ctl.int } if('carry' %in% argnm) { carry <- args[['carry']] if(length(carry) != 1L) stop2("Argument `carry` must be scalar.") if(!is.logical(carry) && !is.character(carry)) stop2("Argument `carry` must be logical or character.") if(is.na(carry)) stop2("Argument `carry` may not be NA.") if('value' %in% argnm && !is.logical(carry)) stop2("Argument `carry` must be TRUE or FALSE in replacement mode.") if(is.logical(carry)) if(carry) carry <- "" else carry = NA_character_ args[['carry']] <- carry } if('terminate' %in% argnm) { terminate <- as.logical(args[['terminate']]) if(!isTRUE(terminate %in% c(TRUE, FALSE))) stop2("Argument `terminate` must be TRUE or FALSE") terminate <- as.logical(terminate) } if('tab.stops' %in% argnm) { tab.stops <- args[['tab.stops']] if( !is.numeric(tab.stops) || !length(tab.stops) || any(tab.stops < 1) || anyNA(tab.stops) ) stop2( "Argument `tab.stops` must be numeric, strictly positive, and ", "representable as an integer." ) args[['tab.stops']] <- as.integer(tab.stops) } if('tabs.as.spaces' %in% argnm) { tabs.as.spaces <- args[['tabs.as.spaces']] if(!is.logical(tabs.as.spaces)) tabs.as.spaces <- as.logical(tabs.as.spaces) if(length(tabs.as.spaces) != 1L || is.na(tabs.as.spaces)) stop2("Argument `tabs.as.spaces` must be TRUE or FALSE.") args[['tabs.as.spaces']] <- tabs.as.spaces } if('strip.spaces' %in% argnm) { strip.spaces <- args[['strip.spaces']] if(!is.logical(strip.spaces)) strip.spaces <- as.logical(strip.spaces) if(length(strip.spaces) != 1L || is.na(strip.spaces)) stop2("Argument `strip.spaces` must be TRUE or FALSE.") args[['strip.spaces']] <- strip.spaces } if('round' %in% argnm) { # be sure to update FANSI_RND_* defines in C code if this changes valid.round <- c('start', 'stop', 'both', 'neither') round <- args[['round']] if( !is.character(round) || length(round) != 1 || is.na(round.int <- pmatch(round, valid.round)) ) stop2("Argument `round` must partial match one of ", deparse(valid.round)) args[['round']] <- valid.round[round.int] args[['ROUND.INT']] <- round.int } if('type' %in% argnm) { type <- args[['type']] if( !is.character(type) || length(type) != 1 || is.na(type) || is.na(type.int <- pmatch(type, valid.types)) ) stop2("Argument `type` must partial match one of ", deparse(valid.types)) args[['type']] <- valid.types[type.int] args[['TYPE.INT']] <- type.int - 1L } if('start' %in% argnm || 'stop' %in% argnm) { x.len <- length(args[['x']]) # Silently recycle start/stop like substr does. Coercion to integer # should be done ahead of VAL_IN_ENV so warnings are reported # correctly start <- rep(as.integer(args[['start']]), length.out=x.len) stop <- rep(as.integer(args[['stop']]), length.out=x.len) args[['start']] <- start args[['stop']] <- stop args[['X.LEN']] <- x.len } if('keepNA' %in% argnm) { keepNA <- as.logical(args[['keepNA']]) if(length(keepNA) != 1L) stop2("Argument `keepNA` must be interpretable as a scalar logical.") args[['keepNA']] <- keepNA } if('allowNA' %in% argnm) { allowNA <- as.logical(args[['allowNA']]) if(length(allowNA) != 1L) stop2("Argument `allowNA` must be interpretable as a scalar logical.") args[['allowNA']] <- isTRUE(allowNA) } # we might not have validated all, so we should be careful list2env(args, par.env) } ## Encode to UTF-8 If needed ## ## Problem is that if native is UTF-8, unknown vectors are re-encoded, ## which will include escaping of bad encoding which hides errors. ## ## Assumes char input enc_to_utf8 <- function(x, enc=Encoding(x)) { if(isTRUE(l10n_info()[['UTF-8']])) { # in theory just "latin1", but just in case other encs added translate <- enc != "unknown" & enc != "UTF-8" x[translate] <- enc2utf8(x[translate]) x } else enc2utf8(x) # nocov tested manually } fansi/R/trimws.R0000644000176200001440000000415514533476156013246 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. #' Control Sequence Aware Version of trimws #' #' Removes any whitespace before the first and/or after the last non-_Control #' Sequence_ character. Unlike with the [`base::trimws`], only the default #' `whitespace` specification is supported. #' #' @export #' @inheritSection substr_ctl Control and Special Sequences #' @inheritSection substr_ctl Output Stability #' @inheritParams base::trimws #' @inheritParams substr_ctl #' @param whitespace must be set to the default value, in the future it may #' become possible to change this parameter. #' @return The input with white space removed as described. #' @examples #' trimws_ctl(" \033[31m\thello world\t\033[39m ") trimws_ctl <- function( x, which = c("both", "left", "right"), whitespace = "[ \t\r\n]", warn=getOption('fansi.warn', TRUE), term.cap=getOption('fansi.term.cap', dflt_term_cap()), ctl='all', normalize=getOption('fansi.normalize', FALSE) ) { if(!identical(whitespace, "[ \t\r\n]")) stop("Argument `whitespace` may only be set to \"[ \\t\\r\\n]\".") # modifies/adds vars in env VAL_IN_ENV(x=x, ctl=ctl, warn=warn, term.cap=term.cap, normalize=normalize); valid.which <- c("both", "left", "right") if( !is.character(which) || length(which[1]) != 1 || is.na(which.int <- pmatch(which[1], valid.which)) ) stop( "Argument `which` must partial match one of ", deparse(valid.which), "." ) .Call( FANSI_trimws, x, which.int - 1L, WARN.INT, TERM.CAP.INT, CTL.INT, normalize ) } fansi/R/unhandled.R0000644000176200001440000001304614533476156013662 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. #' Identify Unhandled Control Sequences #' #' Will return position and types of unhandled _Control Sequences_ in a #' character vector. Unhandled sequences may cause `fansi` to interpret strings #' in a way different to your display. See [fansi] for details. Functions that #' interpret _Special Sequences_ (CSI SGR or OSC hyperlinks) might omit bad #' _Special Sequences_ or some of their components in output substrings, #' particularly if they are leading or trailing. Some functions are more #' tolerant of bad inputs than others. For example [`nchar_ctl`] will not #' report unsupported colors because it only cares about counts or widths. #' `unhandled_ctl` will report all potentially problematic sequences. #' #' To work around tabs present in input, you can use [`tabs_as_spaces`] or the #' `tabs.as.spaces` parameter on functions that have it, or the [`strip_ctl`] #' function to remove the troublesome sequences. Alternatively, you can use #' `warn=FALSE` to suppress the warnings. #' #' This is a debugging function that is not optimized for speed and the precise #' output of which might change with `fansi` versions. #' #' The return value is a data frame with five columns: #' #' * index: integer the index in `x` with the unhandled sequence #' * start: integer the start position of the sequence (in characters) #' * stop: integer the end of the sequence (in characters), but note that if #' there are multiple ESC sequences abutting each other they will all be #' treated as one, even if some of those sequences are valid. #' * error: the reason why the sequence was not handled: #' * unknown-substring: SGR substring with a value that does not correspond #' to a known SGR code or OSC hyperlink with unsupported parameters. #' * invalid-substr: SGR contains uncommon characters in ":<=>", #' intermediate bytes, other invalid characters, or there is an invalid #' subsequence (e.g. "ESC[38;2m" which should specify an RGB triplet #' but does not). OSCs contain invalid bytes, or OSC hyperlinks contain #' otherwise valid OSC bytes in 0x08-0x0d. #' * exceed-term-cap: contains color codes not supported by the terminal #' (see [term_cap_test]). Bright colors with color codes in the 90-97 and #' 100-107 range in terminals that do not support them are not considered #' errors, whereas 256 or truecolor codes in terminals that do not support #' them are. This is because the latter are often misinterpreted by #' terminals that do not support them, whereas the former are typically #' silently ignored. #' * CSI/OSC: a non-SGR CSI sequence, or non-hyperlink OSC sequence. #' * CSI/OSC-bad-substr: a CSI or OSC sequence containing invalid #' characters. #' * malformed-CSI/OSC: a malformed CSI or OSC sequence, typically one that #' never encounters its closing sequence before the end of a string. #' * non-CSI/OSC: a non-CSI or non-OSC escape sequence, i.e. one where the #' ESC is followed by something other than "[" or "]". Since we #' assume all non-CSI sequences are only 2 characters long include the #' ESC, this type of sequence is the most likely to cause problems as some #' are not actually two characters long. #' * malformed-ESC: a malformed two byte ESC sequence (i.e. one not ending #' in 0x40-0x7e). #' * C0: a "C0" control character (e.g. tab, bell, etc.). #' * malformed-UTF8: illegal UTF8 encoding. #' * non-ASCII: non-ASCII bytes in escape sequences. #' * translated: whether the string was translated to UTF-8, might be helpful in #' odd cases were character offsets change depending on encoding. You should #' only worry about this if you cannot tie out the `start`/`stop` values to #' the escape sequence shown. #' * esc: character the unhandled escape sequence #' #' @note Non-ASCII strings are converted to UTF-8 encoding. #' @export #' @inherit has_ctl seealso #' @param x character vector #' @inheritParams substr_ctl #' @return Data frame with as many rows as there are unhandled escape #' sequences and columns containing useful information for debugging the #' problem. See details. #' #' @examples #' string <- c( #' "\033[41mhello world\033[m", "foo\033[22>m", "\033[999mbar", #' "baz \033[31#3m", "a\033[31k", "hello\033m world" #' ) #' unhandled_ctl(string) unhandled_ctl <- function( x, term.cap=getOption('fansi.term.cap', dflt_term_cap()) ) { ## modifies / creates NEW VARS in fun env VAL_IN_ENV(x=x, term.cap=term.cap) res <- .Call(FANSI_unhandled_esc, x, TERM.CAP.INT) names(res) <- c("index", "start", "stop", "error", "translated", "esc") errors <- c( 'unknown-substr', 'invalid-substr', 'exceed-term-cap', 'non-SGR/hyperlink', 'CSI/OSC-bad-substr', 'malformed-CSI/OSC', 'non-CSI/OSC', 'malformed-ESC', 'C0', 'malformed-UTF8', 'non-ASCII' ) res[['error']] <- errors[res[['error']]] as.data.frame(res, stringsAsFactors=FALSE) } fansi/R/constants.R0000644000176200001440000000255414533476156013736 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. ## Order of these is important as typically we convert them to integer codes ## with `match` ## Valid values for the `term.cap` argument VALID.TERM.CAP <- c('all', 'bright', '256', 'truecolor', 'old') ## Valid values for the `ctl` argument, ## ## * nl: newlines ## * c0: other c0, including del ## * sgr: SGR ANSI CSI ## * csi: ANSI CSI, excluding SGR ## * esc: other \033 escape sequences, we assume they are two long ## ## These will eventually encoded in an integer as powers of 2, except for `all` ## which acts as a negation (see FANSI_ctl_as_int), so "nl" is 2^0, "c0" is 2^1, ## and so on. ## ## REMEMBER TO UPDATE CTL_ALL CONSTANT IF WE MODIFY THIS VALID.CTL <- c("all", "nl", "c0", "sgr", "csi", "esc", "url", "osc") fansi/R/tohtml.R0000644000176200001440000003420014533476156013222 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. #' Convert Control Sequences to HTML Equivalents #' #' Interprets CSI SGR sequences and OSC hyperlinks to produce strings with #' the state reproduced with SPAN elements, inline CSS styles, and A anchors. #' Optionally for colors, the SPAN elements may be assigned classes instead of #' inline styles, in which case it is the user's responsibility to provide a #' style sheet. Input that contains special HTML characters ("<", ">", "&", #' "'", and "\"") likely should be escaped with [`html_esc`], and `to_html` will #' warn if it encounters the first two. #' #' Only "observable" formats are translated. These include colors, #' background-colors, and basic styles (CSI SGR codes 1-6, 8, 9). Style 7, the #' "inverse" style, is implemented by explicitly switching foreground and #' background colors, if there are any. Styles 5-6 (blink) are rendered as #' "text-decoration" but likely will do nothing in the browser. Style 8 #' (conceal) sets the color to transparent. #' #' Parameters in OSC sequences are not copied over as they might have different #' semantics in the OSC sequences than they would in HTML (e.g. the "id" #' parameter is intended to be non-unique in OSC). #' #' Each element of the input vector is translated into a stand-alone valid HTML #' string. In particular, any open tags generated by `fansi` are closed at the #' end of an element and re-opened on the subsequent element with the same #' style. This allows safe combination of HTML translated strings, for example #' by [`paste`]ing them together. The trade-off is that there may be redundant #' HTML produced. To reduce redundancy you can first collapse the input vector #' into one string, being mindful that very large strings may exceed maximum #' string size when converted to HTML. #' #' `fansi`-opened tags are closed and new ones open anytime the "observable" #' state changes. `to_html` never produces nested tags, even if at times #' that might produce more compact output. While it would be possible to #' match a CSI/OSC encoded state with nested tags, it would increase the #' complexity of the code substantially for little gain. #' #' @note Non-ASCII strings are converted to and returned in UTF-8 encoding. #' @export #' @family HTML functions #' @inheritParams substr_ctl #' @inherit substr_ctl seealso #' @param classes FALSE (default), TRUE, or character vector of either 16, #' 32, or 512 class names. Character strings may only contain ASCII #' characters corresponding to letters, numbers, the hyphen, or the #' underscore. It is the user's responsibility to provide values that are #' legal class names. #' #' * FALSE: All colors rendered as inline CSS styles. #' * TRUE: Each of the 256 basic colors is mapped to a class in form #' "fansi-color-###" (or "fansi-bgcol-###" for background colors) #' where "###" is a zero padded three digit number in 0:255. Basic colors #' specified with SGR codes 30-37 (or 40-47) map to 000:007, and bright ones #' specified with 90-97 (or 100-107) map to 008:015. 8 bit colors specified #' with SGR codes 38;5;### or 48;5;### map directly based on the value of #' "###". Implicitly, this maps the 8 bit colors in 0:7 to the basic #' colors, and those in 8:15 to the bright ones even though these are not #' exactly the same when using inline styles. "truecolor"s specified with #' 38;2;#;#;# or 48;2;#;#;# do not map to classes and are rendered as inline #' styles. #' * character(16): The eight basic colors are mapped to the string values in #' the vector, all others are rendered as inline CSS styles. Basic colors #' are mapped irrespective of whether they are encoded as the basic colors #' or as 8-bit colors. Sixteen elements are needed because there must be #' eight classes for foreground colors, and eight classes for background #' colors. Classes should be ordered in ascending order of color number, #' with foreground and background classes alternating starting with #' foreground (see examples). #' * character(32): Like character(16), except the basic and bright colors are #' mapped. #' * character(512): Like character(16), except the basic, bright, and all #' other 8-bit colors are mapped. #' #' @return A character vector of the same length as `x` with all escape #' sequences removed and any basic ANSI CSI SGR escape sequences applied via #' SPAN HTML tags. #' @note `to_html` always terminates as not doing so produces #' invalid HTML. If you wish for the last active SPAN to bleed into #' subsequent text you may do so with e.g. `sub("(?:)?$", "", x)` #' or similar. Additionally, unlike other functions, the default is #' `carry = TRUE` for compatibility with semantics of prior versions of #' `fansi`. #' @examples #' to_html("hello\033[31;42;1mworld\033[m") #' to_html("hello\033[31;42;1mworld\033[m", classes=TRUE) #' #' ## Input contains HTML special chars #' x <- " 255] <- 255 color.vals[color.vals < 0] <- 0 colors.hex <- rgb(color.vals, maxColorValue=255) } paste0( ".", classes, " {", c("color", "background-color"), ": ", colors.hex, ";}" ) } check_classes <- function(classes) { class.len <- length(classes) if(!class.len %in% c(16L, 32L, 512L)) { stop( "Argument `classes` must be length 16, 32, or 512 if it is a ", "character vector (is ", class.len, ")." ) } if(anyNA(classes)) stop("Argument `classes` contains NA values.") if(!all(grepl("^[0-9a-zA-Z_\\-]*$", classes))) stop( "Argument `classes` contains charcters other than ASCII letters, ", "numbers, the hyphen, and underscore." ) classes } #' Frame HTML in a Web Page And Display #' #' Helper function that assembles user provided HTML and CSS into a temporary #' text file, and by default displays it in the browser. Intended for use in #' examples. #' #' @export #' @importFrom utils browseURL #' @family HTML functions #' @param x character vector of html encoded strings. #' @param css character vector of css styles. #' @param display TRUE or FALSE, whether to display the resulting page in a #' browser window. If TRUE, will sleep for one second before returning, and #' will delete the temporary file used to store the HTML. #' @param clean TRUE or FALSE, if TRUE and `display == TRUE`, will delete the #' temporary file used for the web page, otherwise will leave it. #' @param pre TRUE (default) or FALSE, whether to wrap `x` in PRE tags. #' @return character(1L) the file location of the page, invisibly, but keep in #' mind it will have been deleted if `clean=TRUE`. #' @seealso [make_styles()]. #' @examples #' txt <- "\033[31;42mHello \033[7mWorld\033[m" #' writeLines(txt) #' html <- to_html(txt) #' \dontrun{ #' in_html(html) # spawns a browser window #' } #' writeLines(readLines(in_html(html, display=FALSE))) #' css <- "SPAN {text-decoration: underline;}" #' writeLines(readLines(in_html(html, css=css, display=FALSE))) #' \dontrun{ #' in_html(html, css) #' } in_html <- function(x, css=character(), pre=TRUE, display=TRUE, clean=display) { html <- c( "", "", if(any(nzchar(css))) c(""), "", if(pre) "
",
    x,
    if(pre) "
", "", "" ) f <- paste0(tempfile(), ".html") writeLines(html, f) if(display) browseURL(f) # nocov, can't do this in tests if(clean) { Sys.sleep(1) unlink(f) } invisible(f) } FANSI.CLASSES <- do.call( paste, c( expand.grid('fansi', c('color', 'bgcol'), sprintf("%03d", 0:255)), sep="-" ) ) fansi/R/fansi-package.R0000644000176200001440000003152415106721052014373 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. #' Details About Manipulation of Strings Containing Control Sequences #' #' Counterparts to R string manipulation functions that account for #' the effects of some ANSI X3.64 (a.k.a. ECMA-48, ISO-6429) control sequences. #' #' @section Control Characters and Sequences: #' #' Control characters and sequences are non-printing inline characters or #' sequences initiated by them that can be used to modify terminal display and #' behavior, for example by changing text color or cursor position. #' #' We will refer to X3.64/ECMA-48/ISO-6429 control characters and sequences as #' "_Control Sequences_" hereafter. #' #' There are four types of _Control Sequences_ that `fansi` can treat #' specially: #' #' * "C0" control characters, such as tabs and carriage returns (we include #' delete in this set, even though technically it is not part of it). #' * Sequences starting in "ESC[", also known as Control Sequence #' Introducer (CSI) sequences, of which the Select Graphic Rendition (SGR) #' sequences used to format terminal output are a subset. #' * Sequences starting in "ESC]", also known as Operating System #' Commands (OSC), of which the subset beginning with "8" is used to encode #' URI based hyperlinks. #' * Sequences starting in "ESC" and followed by something other than "[" or #' "]". #' #' _Control Sequences_ starting with ESC are assumed to be two characters #' long (including the ESC) unless they are of the CSI or OSC variety, in which #' case their length is computed as per the [ECMA-48 #' specification](https://ecma-international.org/publications-and-standards/standards/ecma-48/), #' with the exception that [OSC hyperlinks](#osc-hyperlinks) may be terminated #' with BEL ("\\a") in addition to ST ("ESC\\"). `fansi` handles most common #' _Control Sequences_ in its parsing algorithms, but it is not a conforming #' implementation of ECMA-48. For example, there are non-CSI/OSC escape #' sequences that may be longer than two characters, but `fansi` will #' (incorrectly) treat them as if they were two characters long. There are many #' more unimplemented ECMA-48 specifications. #' #' In theory it is possible to encode CSI sequences with a single byte #' introducing character in the 0x40-0x5F range instead of the traditional #' "ESC[". Since this is rare and it conflicts with UTF-8 encoding, `fansi` #' does not support it. #' #' Within _Control Sequences_, `fansi` further distinguishes CSI SGR and OSC #' hyperlinks by recording format specification and URIs into string state, and #' applying the same to any output strings according to the semantics of the #' functions in use. CSI SGR and OSC hyperlinks are known together as _Special #' Sequences_. See the following sections for details. #' #' Additionally, all _Control Sequences_, whether special or not, #' do not count as characters, graphemes, or display width. You can cause #' `fansi` to treat particular _Control Sequences_ as regular characters with #' the `ctl` parameter. #' #' @section CSI SGR Control Sequences: #' #' **NOTE**: not all displays support CSI SGR sequences; run #' [`term_cap_test`] to see whether your display supports them. #' #' CSI SGR Control Sequences are the subset of CSI sequences that can be #' used to change text appearance (e.g. color). These sequences begin with #' "ESC[" and end in "m". `fansi` interprets these sequences and writes new #' ones to the output strings in such a way that the original formatting is #' preserved. In most cases this should be transparent to the user. #' #' Occasionally there may be mismatches between how `fansi` and a display #' interpret the CSI SGR sequences, which may produce display artifacts. The #' most likely source of artifacts are _Control Sequences_ that move #' the cursor or change the display, or that `fansi` otherwise fails to #' interpret, such as: #' #' * Unknown SGR substrings. #' * "C0" control characters like tabs and carriage returns. #' * Other escape sequences. #' #' Another possible source of problems is that different displays parse #' and interpret control sequences differently. The common CSI SGR sequences #' that you are likely to encounter in formatted text tend to be treated #' consistently, but less common ones are not. `fansi` tries to hew by the #' ECMA-48 specification **for CSI SGR control sequences**, but not all #' terminals do. #' #' The most likely source of problems will be 24-bit CSI SGR sequences. #' For example, a 24-bit color sequence such as "ESC[38;2;31;42;4" is a #' single foreground color to a terminal that supports it, or separate #' foreground, background, faint, and underline specifications for one that does #' not. `fansi` will always interpret the sequences according to ECMA-48, but #' it will warn you if encountered sequences exceed those specified by #' the `term.cap` parameter or the "fansi.term.cap" global option. #' #' `fansi` will will also warn if it encounters _Control Sequences_ that it #' cannot interpret. You can turn off warnings via the `warn` parameter, which #' can be set globally via the "fansi.warn" option. You can work around "C0" #' tabs characters by turning them into spaces first with [`tabs_as_spaces`] or #' with the `tabs.as.spaces` parameter available in some of the `fansi` #' functions #' #' `fansi` interprets CSI SGR sequences in cumulative "Graphic Rendition #' Combination Mode". This means new SGR sequences add to rather than replace #' previous ones, although in some cases the effect is the same as replacement #' (e.g. if you have a color active and pick another one). #' #' @section OSC Hyperlinks: #' #' Operating System Commands are interpreted by terminal emulators typically to #' engage actions external to the display of text proper, such as setting a #' window title or changing the active color palette. #' #' [Some terminals](https://iterm2.com/documentation-escape-codes.html) have #' added support for associating URIs to text with OSCs in a similar way to #' anchors in HTML, so `fansi` interprets them and outputs or terminates them as #' needed. For example: #' #' ``` #' "\033]8;;xy.z\033\\LINK\033]8;;\033\\" #' ``` #' #' Might be interpreted as link to the URI "x.z". To make the encoding pattern #' clearer, we replace "\033]" with "<OSC>" and "\033\\\\" with #' "<ST>" below: #' #' ``` #' 8;;URILINK TEXT8;; #' ``` #' #' @section State Interactions: #' #' The cumulative nature of state as specified by SGR or OSC hyperlinks means #' that unterminated strings that are spliced will interact with each other. #' By extension, a substring does not inherently contain all the information #' required to recreate its state as it appeared in the source document. The #' default `fansi` configuration terminates extracted substrings and prepends #' original state to them so they present on a stand-alone basis as they did as #' part of the original string. #' #' To allow state in substrings to affect subsequent strings set `terminate = #' FALSE`, but you will need to manually terminate them or deal with the #' consequences of not doing so (see "Terminal Quirks"). #' #' By default, `fansi` assumes that each element in an input character vector is #' independent, but this is incorrect if the input is a single document with #' each element a line in it. In that situation state from each line should #' bleed into subsequent ones. Setting `carry = TRUE` enables the "single #' document" interpretation. #' #' To most closely approximate what `writeLines(x)` produces on your terminal, #' where `x` is a stateful string, use `writeLines(fansi_fun(x, carry=TRUE, #' terminate=FALSE))`. `fansi_fun` is a stand-in for any of the `fansi` string #' manipulation functions. Note that even with a seeming "null-op" such as #' `substr_ctl(x, 1, nchar_ctl(x), carry=TRUE, terminate=FALSE)` the output #' control sequences may not match the input ones, but the output _should_ look #' the same if displayed to the terminal. #' #' `fansi` strings will be affected by any active state in strings they are #' appended to. There are no parameters to control what happens in this case, #' but `fansi` provides functions that can help the user get the desired #' behavior. `state_at_end` computes the active state the end of a string, #' which can then be prepended onto the _input_ of `fansi` functions so that #' they are aware of the active style at the beginning of the string. #' Alternatively, one could use `close_state(state_at_end(...))` and pre-pend #' that to the _output_ of `fansi` functions so they are unaffected by preceding #' SGR. One could also just prepend "ESC[0m", but in some cases as #' described in [`?normalize_state`][normalize_state] that is sub-optimal. #' #' If you intend to combine stateful `fansi` manipulated strings with your own, #' it may be best to set `normalize = TRUE` for improved compatibility (see #' [`?normalize_state`][normalize_state].) #' #' @section Terminal Quirks: #' #' Some terminals (e.g. OS X terminal, ITerm2) will pre-paint the entirety of a #' new line with the currently active background before writing the contents of #' the line. If there is a non-default active background color, any unwritten #' columns in the new line will keep the prior background color even if the new #' line changes the background color. To avoid this be sure to use `terminate = #' TRUE` or to manually terminate each line with e.g. "ESC[0m". The #' problem manifests as: #' #' ``` #' " " = default background #' "#" = new background #' ">" = start new background #' "!" = restore default background #' #' +-----------+ #' | abc\n | #' |>###\n | #' |!abc\n#####| <- trailing "#" after newline are from pre-paint #' | abc | #' +-----------+ #' ``` #' #' The simplest way to avoid this problem is to split input strings by any #' newlines they contain, and use `terminate = TRUE` (the default). A more #' complex solution is to pad with spaces to the terminal window width before #' emitting the newline to ensure the pre-paint is overpainted with the current #' line's prevailing background color. #' #' @section Encodings / UTF-8: #' #' `fansi` will convert any non-ASCII strings to UTF-8 before processing them, #' and `fansi` functions that return strings will return them encoded in UTF-8. #' In some cases this will be different to what base R does. For example, #' `substr` re-encodes substrings to their original encoding. #' #' Interpretation of UTF-8 strings is intended to be consistent with base R. #' There are three ways things may not work out exactly as desired: #' #' 1. `fansi`, despite its best intentions, handles a UTF-8 sequence differently #' to the way R does. #' 2. R incorrectly handles a UTF-8 sequence. #' 3. Your display incorrectly handles a UTF-8 sequence. #' #' These issues are most likely to occur with invalid UTF-8 sequences, #' combining character sequences, and emoji. For example, whether special #' characters such as emoji are considered one or two wide evolves as software #' implements newer versions the Unicode databases. #' #' Internally, `fansi` computes the width of most UTF-8 character sequences #' outside of the ASCII range loosely based on the Unicode databases. Because #' `fansi` implements its own internal UTF-8 parsing and may use a #' different Unicode database version than R (see [`fansi_unicode_version()`]), #' it is possible that you will see results different from those that R produces #' even on strings without _Control Sequences_. #' #' @section Overflow: #' #' The maximum length of input character vector elements allowed by `fansi` is #' the 32 bit INT_MAX, excluding the terminating NULL. As of R4.1 this is the #' limit for R character vector elements generally, but is enforced at the C #' level by `fansi` nonetheless. #' #' It is possible that during processing strings that are shorter than INT_MAX #' would become longer than that. `fansi` checks for that overflow and will #' stop with an error if that happens. A work-around for this situation is to #' break up large strings into smaller ones. The limit is on each element of a #' character vector, not on the vector as a whole. `fansi` will also error on #' your system if `R_len_t`, the R type used to measure string lengths, is less #' than the processed length of the string. #' #' @useDynLib fansi, .registration=TRUE, .fixes="FANSI_" #' @aliases fansi-package #' @name fansi "_PACKAGE" fansi/R/strtrim.R0000644000176200001440000001025614533476156013424 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. #' Control Sequence Aware Version of strtrim #' #' A drop in replacement for [`base::strtrim`], with the difference that all #' C0 control characters such as newlines, carriage returns, etc., are always #' treated as zero width, whereas in base it may vary with platform / R version. #' #' `strtrim2_ctl` adds the option of converting tabs to spaces before trimming. #' This is the only difference between `strtrim_ctl` and `strtrim2_ctl`. #' #' @export #' @note Non-ASCII strings are converted to and returned in UTF-8 encoding. #' Width calculations will not work properly in R < 3.2.2. #' @inheritParams base::strtrim #' @inheritParams strwrap_ctl #' @inherit substr_ctl seealso #' @return Like [`base::strtrim`], except that _Control Sequences_ are treated #' as zero width. #' @examples #' strtrim_ctl("\033[42mHello world\033[m", 6) strtrim_ctl <- function( x, width, warn=getOption('fansi.warn', TRUE), ctl='all', normalize=getOption('fansi.normalize', FALSE), carry=getOption('fansi.carry', FALSE), terminate=getOption('fansi.terminate', TRUE) ) { strtrim2_ctl( x=x, width=width, warn=warn, ctl=ctl, normalize=normalize, carry=carry, terminate=terminate ) } #' @export #' @rdname strtrim_ctl strtrim2_ctl <- function( x, width, warn=getOption('fansi.warn', TRUE), tabs.as.spaces=getOption('fansi.tabs.as.spaces', FALSE), tab.stops=getOption('fansi.tab.stops', 8L), ctl='all', normalize=getOption('fansi.normalize', FALSE), carry=getOption('fansi.carry', FALSE), terminate=getOption('fansi.terminate', TRUE) ) { ## modifies / creates NEW VARS in fun env VAL_IN_ENV( x=x, warn=warn, ctl=ctl, tabs.as.spaces=tabs.as.spaces, tab.stops=tab.stops, normalize=normalize, carry=carry, terminate=terminate ) if(!is.numeric(width) || length(width) != 1L || is.na(width) || width < 0) stop( "Argument `width` must be a positive scalar numeric representable ", "as an integer." ) # can assume all term cap available for these purposes term.cap.int <- 1L width <- as.integer(width) tab.stops <- as.integer(tab.stops) # a bit inefficient to rely on strwrap, but oh well res <- .Call( FANSI_strwrap_csi, x, width, 0L, 0L, # indent, exdent "", "", # prefix, initial TRUE, "", # wrap always FALSE, # strip spaces tabs.as.spaces, tab.stops, WARN.INT, term.cap.int, TRUE, # first only CTL.INT, normalize, carry, terminate ) if(normalize) normalize_state(res, warn=FALSE) else res } #' Control Sequence Aware Version of strtrim #' #' These functions are deprecated in favor of the [`strtrim_ctl`] flavors. #' #' @inheritParams strtrim_ctl #' @inherit strtrim_ctl return #' @keywords internal #' @export strtrim_sgr <- function( x, width, warn=getOption('fansi.warn', TRUE), normalize=getOption('fansi.normalize', FALSE), carry=getOption('fansi.carry', FALSE), terminate=getOption('fansi.terminate', TRUE) ) strtrim_ctl( x=x, width=width, warn=warn, ctl='sgr', normalize=normalize, carry=carry, terminate=terminate ) #' @export #' @rdname strtrim_sgr strtrim2_sgr <- function(x, width, warn=getOption('fansi.warn', TRUE), tabs.as.spaces=getOption('fansi.tabs.as.spaces', FALSE), tab.stops=getOption('fansi.tab.stops', 8L), normalize=getOption('fansi.normalize', FALSE), carry=getOption('fansi.carry', FALSE), terminate=getOption('fansi.terminate', TRUE) ) strtrim2_ctl( x=x, width=width, warn=warn, tabs.as.spaces=tabs.as.spaces, tab.stops=tab.stops, ctl='sgr', normalize=normalize, carry=carry, terminate=terminate ) fansi/R/misc.R0000644000176200001440000004630215106721052012635 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. #' Replace Tabs With Spaces #' #' Finds horizontal tab characters (0x09) in a string and replaces them with the #' spaces that produce the same horizontal offset. #' #' Since we do not know of a reliable cross platform means of detecting tab #' stops you will need to provide them yourself if you are using anything #' outside of the standard tab stop every 8 characters that is the default. #' #' @note Non-ASCII strings are converted to and returned in UTF-8 encoding. The #' `ctl` parameter only affects which _Control Sequences_ are considered zero #' width. Tabs will always be converted to spaces, irrespective of the `ctl` #' setting. #' @inherit has_ctl seealso #' @export #' @inheritParams substr_ctl #' @param x character vector or object coercible to character; any tabs therein #' will be replaced. #' @return character, `x` with tabs replaced by spaces, with elements #' possibly converted to UTF-8. #' @examples #' string <- '1\t12\t123\t1234\t12345678' #' tabs_as_spaces(string) #' writeLines( #' c( #' '-------|-------|-------|-------|-------|', #' tabs_as_spaces(string) #' ) ) #' writeLines( #' c( #' '-|--|--|--|--|--|--|--|--|--|--|', #' tabs_as_spaces(string, tab.stops=c(2, 3)) #' ) ) #' writeLines( #' c( #' '-|--|-------|-------|-------|', #' tabs_as_spaces(string, tab.stops=c(2, 3, 8)) #' ) ) tabs_as_spaces <- function( x, tab.stops=getOption('fansi.tab.stops', 8L), warn=getOption('fansi.warn', TRUE), ctl='all' ) { ## modifies / creates NEW VARS in fun env VAL_IN_ENV( x=x, warn=warn, ctl=ctl, warn.mask=get_warn_worst(), tab.stops=tab.stops ) term.cap.int <- 1L .Call( FANSI_tabs_as_spaces, x, tab.stops, WARN.INT, term.cap.int, CTL.INT ) } #' Test Terminal Capabilities #' #' Outputs ANSI CSI SGR formatted text to screen so that you may visually #' inspect what color capabilities your terminal supports. #' #' The three tested terminal capabilities are: #' #' * "bright" for bright colors with SGR codes in 90-97 and 100-107 #' * "256" for colors defined by "38;5;x" and "48;5;x" where x is in 0-255 #' * "truecolor" for colors defined by "38;2;x;y;z" and "48;x;y;x" where x, y, #' and z are in 0-255 #' #' Each of the color capabilities your terminal supports should be displayed #' with a blue background and a red foreground. For reference the corresponding #' CSI SGR sequences are displayed as well. #' #' You should compare the screen output from this function to #' `getOption('fansi.term.cap', dflt_term_cap)` to ensure that they are self #' consistent. #' #' By default `fansi` assumes terminals support bright and 256 color #' modes, and also tests for truecolor support via the $COLORTERM system #' variable. #' #' Functions with the `term.cap` parameter like `substr_ctl` will warn if they #' encounter 256 or true color SGR sequences and `term.cap` indicates they are #' unsupported as such a terminal may misinterpret those sequences. Bright #' codes and OSC hyperlinks in terminals that do not support them will likely be #' silently ignored, so `fansi` functions do not warn about those. #' #' @seealso [`dflt_term_cap`], [`has_ctl`]. #' @export #' @return character the test vector, invisibly #' @examples #' term_cap_test() term_cap_test <- function() { types <- format(c("bright", "256", "truecolor")) res <- paste0( c( "\033[91;104m", "\033[38;5;196;48;5;21m", "\033[38;2;255;0;0;48;2;0;0;255m" ), types, "\033[0m" ) res.esc <- gsub("\033", "\\033", res, fixed=TRUE) res.fin <- paste0(res, " -> ", format(res.esc)) writeLines(res.fin) invisible(res) } #' Colorize Character Vectors #' #' Color each element in input with one of the "256 color" ANSI CSI SGR codes. #' This is intended for testing and demo purposes. #' #' @export #' @param txt character vector or object that can be coerced to character vector #' @param step integer(1L) how quickly to step through the color palette #' @return character vector with each element colored #' @examples #' NEWS <- readLines(file.path(R.home('doc'), 'NEWS')) #' writeLines(fansi_lines(NEWS[1:20])) #' writeLines(fansi_lines(NEWS[1:20], step=8)) fansi_lines <- function(txt, step=1) { if(!is.character(txt)) txt <- as.character(txt) if(!is.numeric(step) || length(step) != 1 || is.na(step) || step < 1) stop("Argument `step` must be a strictly positive scalar integer.") step <- as.integer(step) txt.c <- txt bg <- ceiling((seq_along(txt) * step) %% 215 + 1) + 16 fg <- ifelse((((bg - 16) %/% 18) %% 2), 30, 37) tpl <- "\033[%d;48;5;%dm%s\033[39;49m" ## Apply colors to strings and collapse nz <- nzchar(txt) txt.c[nz] <- sprintf(tpl, fg[nz], bg[nz], txt[nz]) txt.c } #' Escape Characters With Special HTML Meaning #' #' Arbitrary text may contain characters with special meaning in HTML, which may #' cause HTML display to be corrupted if they are included unescaped in a web #' page. This function escapes those special characters so they do not #' interfere with the HTML markup generated by e.g. [`to_html`]. #' #' @export #' @family HTML functions #' @param x character vector #' @param what character(1) containing any combination of ASCII characters #' "<", ">", "&", "'", or "\"". These characters are special in HTML contexts #' and will be substituted by their HTML entity code. By default, all #' special characters are escaped, but in many cases "<>&" or even "<>" might #' be sufficient. #' @return `x`, but with the `what` characters replaced by their HTML entity #' codes. #' @note Non-ASCII strings are converted to and returned in UTF-8 encoding. #' @examples #' html_esc("day > night") #' html_esc("hello world") html_esc <- function(x, what=getOption("fansi.html.esc", "<>&'\"")) { if(!is.character(x)) stop("Argument `x` must be character, is ", typeof(x), ".") if(!is.character(what)) stop("Argument `what` must be character, is ", typeof(what), ".") .Call(FANSI_esc_html, enc_to_utf8(x), what) } #' Format Character Vector for Display as Code in HTML #' #' This simulates what `rmarkdown` / `knitr` do to the output of an R markdown #' chunk, at least as of `rmarkdown` 1.10. It is useful when we override the #' `knitr` output hooks so that we can have a result that still looks as if it #' was run by `knitr`. #' #' @export #' @param x character vector #' @param class character vectors of classes to apply to the PRE HTML tags. It #' is the users responsibility to ensure the classes are valid CSS class #' names. #' @return character(1L) `x`, with <PRE> and <CODE> HTML tags #' applied and collapsed into one line with newlines as the line separator. #' @examples #' html_code_block(c("hello world")) #' html_code_block(c("hello world"), class="pretty") html_code_block <- function(x, class='fansi-output') { if(!is.character(x)) stop("Argument `x` must be character, is ", typeof(x), ".") if(!is.character(class)) stop("Argument `class` must be character, is ", typeof(class), ".") class.all <- sprintf("class=\"%s\"", paste0(class, collapse=" ")) sprintf( "
%s
", class.all, paste0(x, collapse='\n') ) } #' Set an Output Hook Convert Control Sequences to HTML in Rmarkdown #' #' This is a convenience function designed for use within an `rmarkdown` #' document. It overrides the `knitr` output hooks by using #' `knitr::knit_hooks$set`. It replaces the hooks with ones that convert #' _Control Sequences_ into HTML. In addition to replacing the hook functions, #' this will output a <STYLE> HTML block to stdout. These two actions are #' side effects as a result of which R chunks in the `rmarkdown` document that #' contain CSI SGR are shown in their HTML equivalent form. #' #' The replacement hook function tests for the presence of CSI SGR #' sequences in chunk output with [`has_ctl`], and if it is detected then #' processes it with the user provided `proc.fun`. Chunks that do not contain #' CSI SGR are passed off to the previously set hook function. The default #' `proc.fun` will run the output through [`html_esc`], [`to_html`], and #' finally [`html_code_block`]. #' #' If you require more control than this function provides you can set the #' `knitr` hooks manually with `knitr::knit_hooks$set`. If you are seeing your #' output gaining extra line breaks, look at the `split.nl` option. #' #' @note Since we do not formally import the `knitr` functions we do not #' guarantee that this function will always work properly with `knitr` / #' `rmarkdown`. #' #' @export #' @seealso [`has_ctl`], [`to_html`], [`html_esc`], [`html_code_block`], #' [`knitr` output hooks](https://yihui.org/knitr/hooks/#output-hooks), #' [embedding CSS in #' Rmd](https://bookdown.org/yihui/rmarkdown/language-engines.html#javascript-and-css), #' and the vignette `vignette(package='fansi', 'sgr-in-rmd')`. #' @param hooks list, this should the be `knitr::knit_hooks` object; we #' require you pass this to avoid a run-time dependency on `knitr`. #' @param which character vector with the names of the hooks that should be #' replaced, defaults to 'output', but can also contain values #' 'message', 'warning', and 'error'. #' @param class character the CSS class to give the output chunks. Each type of #' output chunk specified in `which` will be matched position-wise to the #' classes specified here. This vector should be the same length as `which`. #' @param proc.fun function that will be applied to output that contains #' CSI SGR sequences. Should accept parameters `x` and `class`, where `x` is #' the output, and `class` is the CSS class that should be applied to #' the <PRE><CODE> blocks the output will be placed in. #' @param style character a vector of CSS styles; these will be output inside #' HTML >STYLE< tags as a side effect. The default value is designed to #' ensure that there is no visible gap in background color with lines with #' height 1.5 (as is the default setting in `rmarkdown` documents v1.1). #' @param split.nl TRUE or FALSE (default), set to TRUE to split input strings #' by any newlines they may contain to avoid any newlines inside SPAN tags #' created by [to_html()]. Some markdown->html renders can be configured #' to convert embedded newlines into line breaks, which may lead to a doubling #' of line breaks. With the default `proc.fun` the split strings are #' recombined by [html_code_block()], but if you provide your own `proc.fun` #' you'll need to account for the possibility that the character vector it #' receives will have a different number of elements than the chunk output. #' This argument only has an effect if chunk output contains CSI SGR #' sequences. #' @param .test TRUE or FALSE, for internal testing use only. #' @return named list with the prior output hooks for each of `which`. #' @examples #' \dontrun{ #' ## The following should be done within an `rmarkdown` document chunk with #' ## chunk option `results` set to 'asis' and the chunk option `comment` set #' ## to ''. #' #' ```{r comment="", results='asis', echo=FALSE} #' ## Change the "output" hook to handle ANSI CSI SGR #' #' old.hooks <- set_knit_hooks(knitr::knit_hooks) #' #' ## Do the same with the warning, error, and message, and add styles for #' ## them (alternatively we could have done output as part of this call too) #' #' styles <- c( #' getOption('fansi.style', dflt_css()), # default style #' "PRE.fansi CODE {background-color: transparent;}", #' "PRE.fansi-error {background-color: #DD5555;}", #' "PRE.fansi-warning {background-color: #DDDD55;}", #' "PRE.fansi-message {background-color: #EEEEEE;}" #' ) #' old.hooks <- c( #' old.hooks, #' fansi::set_knit_hooks( #' knitr::knit_hooks, #' which=c('warning', 'error', 'message'), #' style=styles #' ) ) #' ``` #' ## You may restore old hooks with the following chunk #' #' ## Restore Hooks #' ```{r} #' do.call(knitr::knit_hooks$set, old.hooks) #' ``` #' } set_knit_hooks <- function( hooks, which='output', proc.fun=function(x, class) html_code_block(to_html(html_esc(x)), class=class), class=sprintf("fansi fansi-%s", which), style=getOption("fansi.css", dflt_css()), split.nl=FALSE, .test=FALSE ) { if( !is.list(hooks) || !all(c('get', 'set') %in% names(hooks)) || !is.function(hooks[['get']]) || !is.function(hooks[['set']]) ) stop("Argument `hooks` does not appear to be `knitr::knit_hooks`.") which.vals <- c('output', 'warning', 'error', 'message') if(!is.character(which) || !all(which %in% which.vals)) stop( "Argument `which` must be character containing values in ", deparse(which.vals) ) if(anyDuplicated(which)) stop( "Argument `which` may not contain duplicate values (", which[anyDuplicated(which)], ")." ) if( !is.function(proc.fun) || !all(c('x', 'class') %in% names(formals(proc.fun))) ) stop( "Argument `proc.fun` must be a function with formals named ", "`x` and `class`." ) if(!is.character(class) || (length(class) != length(which))) stop( "Argument `class` should be a character vector the same length as ", "`which`." ) if(!is.character(style)) stop("Argument `style` must be character.") if(!isTRUE(split.nl %in% c(TRUE, FALSE))) stop("Argument `split.n` must be TRUE or FALSE") old.hook.list <- vector('list', length(which)) names(old.hook.list) <- which new.hook.list <- vector('list', length(which)) names(new.hook.list) <- which base.err <- "are you sure you passed `knitr::knit_hooks` as the `hooks` argument?" make_hook <- function(old.hook, class, split.nl) { force(old.hook) force(class) force(split.nl) function(x, options) { # If the output has SGR in it, then convert to HTML and wrap # in PRE/CODE tags if(any(has_ctl(x, c('sgr', 'url')))) { if(split.nl) x <- unlist(strsplit_sgr(x, '\n', fixed=TRUE)) res <- try(proc.fun(x=x, class=class)) if(inherits(res, "try-error")) stop( "Argument `proc.fun` for `set_knit_hooks` caused an error when ", "processing output; see prior error." ) res } # If output doesn't have SGR, then use the default hook else old.hook(x, options) } } for(i in seq_along(which)) { hook.name <- which[i] old.hook <- try(hooks$get(hook.name)) base.err.2 <- sprintf(" Quitting after setting %d/%d hooks", (i - 1), length(which)) if(inherits(old.hook, 'try-error')) { warning( "Failed retrieving '", hook.name, "' hook from the knit hooks; ", base.err, base.err.2 ) break } if(!is.function(old.hook)) { warning( "Retrieved '", hook.name, "' hook is not a function; ", base.err, base.err.2 ) break } new.hook.list[[i]] <- make_hook(old.hook, class[[i]], split.nl) old.hook.list[[i]] <- old.hook } if( inherits( set.res <- try(do.call(hooks[['set']], new.hook.list)), 'try-error' ) ) warning("Failure while trying to set hooks; see prior error; ", base.err) writeLines(c("")) if(.test) list(old.hooks=old.hook.list, new.hooks=new.hook.list, res=set.res) else old.hook.list } #' Show 8 Bit CSI SGR Colors #' #' Generates text with each 8 bit SGR code (e.g. the "###" in "38;5;###") with #' the background colored by itself, and the foreground in a contrasting color #' and interesting color (we sacrifice some contrast for interest as this is #' intended for demo rather than reference purposes). #' #' @seealso [make_styles()]. #' @export #' @return character vector with SGR codes with background color set as #' themselves. #' @examples #' writeLines(sgr_256()) sgr_256 <- function() { tpl <- "\033[38;5;%d;48;5;%dm%s\033[m" # Basic, bright, grayscale basic <- paste0(sprintf(tpl, 15, 0:7, format(0:7, width=3)), collapse=" ") bright <- paste0(sprintf(tpl, 0, 8:15, format(8:15, width=3)), collapse=" ") gs1 <- paste0(sprintf(tpl, 15, 232:243, format(232:243, width=3)), collapse=" ") gs2 <- paste0(sprintf(tpl, 0, 244:255, format(244:255, width=3)), collapse=" ") # Color parts fg <- 231:16 bg <- rev(fg) # reverse fg/bg so we can read the numbers } table <- matrix(sprintf(tpl, fg, bg, format(bg)), 36) part.a <- do.call(paste0, c(split(table[1:18,], row(table[1:18,])))) part.b <- do.call(paste0, c(split(table[-(1:18),], row(table[-(1:18),])))) ## Output c( "Standard", basic, "", "High-Intensity", bright, "", "216 Colors (Dark)", part.a, "", "216 Colors (Light)", part.b, "", "Grayscale", gs1, gs2 ) } # To test growable buffer. size_buff <- function(x) .Call(FANSI_size_buff, x) size_buff_prot_test <- function() { raw <- .Call(FANSI_size_buff_prot_test) res <- raw[-1L] names(res) <- c('n', 'prev', 'self') res <- as.data.frame(res) # stringsAsFactors issues res[['prev']] <- as.character(res[['prev']]) res[['self']] <- as.character(res[['self']]) rownames(res) <- raw[[1L]] # remap the addresses so they are consistent across different runs addresses <- do.call(rbind, res[c('prev', 'self')]) res[['prev']] <- match(res[['prev']], addresses) res[['self']] <- match(res[['self']], addresses) res } #' Display Strings to Terminal #' #' Shortcut for [`writeLines`] with an additional terminating "ESC[0m". #' #' @keywords internal #' @export #' @param ... character vectors to display. #' @param end character what to output after the primary inputs. #' @return whatever writeLines returns fwl <- function(..., end='\033[0m') { writeLines(c(..., end)) } #' Default Arg Helper Funs #' #' Terminal capabilities are assumed to include bright and 256 color SGR codes. #' 24 bit color support is detected based on the `COLORTERM` environment #' variable. #' #' Default CSS may exceed or fail to cover the interline distance when two lines #' have background colors. To ensure lines are exactly touching use #' inline-block, although that has its own issues. Otherwise specify your own #' CSS. #' #' @seealso [`term_cap_test`]. #' @export #' @return character to use as default value for `fansi` parameter. dflt_term_cap <- function() { c( if(isTRUE(Sys.getenv('COLORTERM') %in% c('truecolor', '24bit'))) 'truecolor', 'bright', '256' ) } #' @rdname dflt_term_cap #' @export dflt_css <- function() { "PRE.fansi SPAN {padding-top: .25em; padding-bottom: .25em};" } #' Report Unicode Database Version In-use #' #' Corresponds to the database used to generate character display width look-up #' tables by `fansi`. #' #' @export #' @return a string of the Unicode version. #' @examples #' fansi_unicode_version() fansi_unicode_version <- function() { .Call(FANSI_unicode_version) } fansi/R/normalize.R0000644000176200001440000001052714533476156013721 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. #' Normalize CSI and OSC Sequences #' #' Re-encodes SGR and OSC encoded URL sequences into a unique decomposed form. #' Strings containing semantically identical SGR and OSC sequences that are #' encoded differently should compare equal after normalization. #' #' Each compound SGR sequence is broken up into individual tokens, superfluous #' tokens are removed, and the SGR reset sequence "ESC[0m" (or "ESC[m") #' is replaced by the closing codes for whatever SGR styles are active at the #' point in the string in which it appears. #' #' Unrecognized SGR codes will be dropped from the output with a warning. The #' specific order of SGR codes associated with any given SGR sequence is not #' guaranteed to remain the same across different versions of `fansi`, but #' should remain unchanged except for the addition of previously uninterpreted #' codes to the list of interpretable codes. There is no special significance #' to the order the SGR codes are emitted in other than it should be consistent #' for any given SGR state. URLs adjacent to SGR codes are always emitted after #' the SGR codes irrespective of what side they were on originally. #' #' OSC encoded URL sequences are always terminated by "ESC]\\", and those #' between abutting URLs are omitted. Identical abutting URLs are merged. In #' order for URLs to be considered identical both the URL and the "id" parameter #' must be specified and be the same. OSC URL parameters other than "id" are #' dropped with a warning. #' #' The underlying assumption is that each element in the vector is #' unaffected by SGR or OSC URLs in any other element or elsewhere. This may #' lead to surprising outcomes if these assumptions are untrue (see examples). #' You may adjust this assumption with the `carry` parameter. #' #' Normalization was implemented primarily for better compatibility with #' [`crayon`][1] which emits SGR codes individually and assumes that each #' opening code is paired up with its specific closing code, but it can also be #' used to reduce the probability that strings processed with future versions of #' `fansi` will produce different results than the current version. #' #' [1]: https://cran.r-project.org/package=crayon #' #' @export #' @inheritParams substr_ctl #' @inherit has_ctl seealso #' @return `x`, with all SGRs normalized. #' @examples #' normalize_state("hello\033[42;33m world") #' normalize_state("hello\033[42;33m world\033[m") #' normalize_state("\033[4mhello\033[42;33m world\033[m") #' #' ## Superflous codes removed #' normalize_state("\033[31;32mhello\033[m") # only last color prevails #' normalize_state("\033[31\033[32mhello\033[m") # only last color prevails #' normalize_state("\033[31mhe\033[49mllo\033[m") # unused closing #' #' ## Equivalent normalized sequences compare identical #' identical( #' normalize_state("\033[31;32mhello\033[m"), #' normalize_state("\033[31mhe\033[49mllo\033[m") #' ) #' ## External SGR will defeat normalization, unless we `carry` it #' red <- "\033[41m" #' writeLines( #' c( #' paste(red, "he\033[0mllo", "\033[0m"), #' paste(red, normalize_state("he\033[0mllo"), "\033[0m"), #' paste(red, normalize_state("he\033[0mllo", carry=red), "\033[0m") #' ) ) normalize_state <- function( x, warn=getOption('fansi.warn', TRUE), term.cap=getOption('fansi.term.cap', dflt_term_cap()), carry=getOption('fansi.carry', FALSE) ) { ## modifies / creates NEW VARS in fun env VAL_IN_ENV(x=x, warn=warn, term.cap=term.cap, carry=carry) .Call(FANSI_normalize_state, x, WARN.INT, TERM.CAP.INT, carry) } # To reduce overhead of applying this in `strwrap_ctl` normalize_state_list <- function(x, warn.int, term.cap.int, carry) .Call(FANSI_normalize_state_list, x, warn.int, term.cap.int, carry) fansi/R/substr2.R0000644000176200001440000005231015107200070013273 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. #' Control Sequence Aware Version of substr #' #' `substr_ctl` is a drop-in replacement for `substr`. Performance is #' slightly slower than `substr`, and more so for `type = 'width'`. Special #' _Control Sequences_ will be included in the substrings to reflect their format #' when as it was when part of the source string. `substr2_ctl` adds the #' ability to extract substrings based on grapheme count or display width in #' addition to the normal character width, as well as several other options. #' #' @section Control and Special Sequences: #' #' _Control Sequences_ are non-printing characters or sequences of characters. #' _Special Sequences_ are a subset of the _Control Sequences_, and include CSI #' SGR sequences which can be used to change rendered appearance of text, and #' OSC hyperlinks. See [`fansi`] for details. #' #' @section Position Semantics: #' #' When computing substrings, _Normal_ (non-control) characters are considered #' to occupy positions in strings, whereas _Control Sequences_ occupy the #' interstices between them. The string: #' #' ``` #' "hello-\033[31mworld\033[m!" #' ``` #' #' is interpreted as: #' #' ``` #' 1 1 1 #' 1 2 3 4 5 6 7 8 9 0 1 2 #' h e l l o -|w o r l d|! #' ^ ^ #' \033[31m \033[m #' ``` #' #' `start` and `stop` reference character positions so they never explicitly #' select for the interstitial _Control Sequences_. The latter are implicitly #' selected if they appear in interstices after the first character and before #' the last. Additionally, because _Special Sequences_ (CSI SGR and OSC #' hyperlinks) affect all subsequent characters in a string, any active _Special #' Sequence_, whether opened just before a character or much before, will be #' reflected in the state `fansi` prepends to the beginning of each substring. #' #' It is possible to select _Control Sequences_ at the end of a string by #' specifying `stop` values past the end of the string, although for _Special #' Sequences_ this only produces visible results if `terminate` is set to #' `FALSE`. Similarly, it is possible to select _Control Sequences_ preceding #' the beginning of a string by specifying `start` values less than one, #' although as noted earlier this is unnecessary for _Special Sequences_ as #' those are output by `fansi` before each substring. #' #' Because exact substrings on anything other than character count cannot be #' guaranteed (e.g. as a result of multi-byte encodings, or double display-width #' characters) `substr2_ctl` must make assumptions on how to resolve provided #' `start`/`stop` values that are infeasible and does so via the `round` #' parameter. #' #' If we use "start" as the `round` value, then any time the `start` #' value corresponds to the middle of a multi-byte or a wide character, then #' that character is included in the substring, while any similar partially #' included character via the `stop` is left out. The converse is true if we #' use "stop" as the `round` value. "neither" would cause all partial #' characters to be dropped irrespective whether they correspond to `start` or #' `stop`, and "both" could cause all of them to be included. See examples. #' #' A number of _Normal_ characters such as combining diacritic marks have #' reported width of zero. These are typically displayed overlaid on top of the #' preceding glyph, as in the case of `"e\u301"` forming "e" with an acute #' accent. Unlike _Control Sequences_, which also have reported width of zero, #' `fansi` groups zero-width _Normal_ characters with the last preceding #' non-zero width _Normal_ character. This is incorrect for some rare #' zero-width _Normal_ characters such as prepending marks (see "Output #' Stability" and "Graphemes"). #' #' @section Output Stability: #' #' Several factors could affect the exact output produced by `fansi` #' functions across versions of `fansi`, `R`, and/or across systems. #' **In general it is best not to rely on exact `fansi` output, e.g. by #' embedding it in tests**. #' #' Width and grapheme calculations depend on Unicode database version (see #' [`fansi_unicode_version`], and grapheme processing logic among other #' things (see "Graphemes"). Individual character width are intended to match #' R4.5.1 definitions in an English locale, except for differences introduced by #' Unicode Database Version updates and grapheme processing. #' #' How a particular display format is encoded in _Control Sequences_ is #' not guaranteed to be stable across `fansi` versions. Additionally, which #' _Special Sequences_ are re-encoded vs transcribed untouched may change. #' In general we will strive to keep the rendered appearance stable. #' #' To maximize the odds of getting stable output set `normalize_state` to #' `TRUE` and `type` to `"chars"` in functions that allow it, and #' set `term.cap` to a specific set of capabilities. #' #' @section Replacement Functions: #' #' Semantics for replacement functions have the additional requirement that the #' result appear as if it is the input modified in place between the positions #' designated by `start` and `stop`. `terminate` only affects the boundaries #' between the original substring and the spliced one, `normalize` only affects #' the same boundaries, and `tabs.as.spaces` only affects `value`, and `x` must #' be ASCII only or marked "UTF-8". #' #' `terminate = FALSE` only makes sense in replacement mode if only one of `x` #' or `value` contains _Control Sequences_. `fansi` will not account for any #' interactions of state in `x` and `value`. #' #' The `carry` parameter causes state to carry within the original string and #' the replacement values independently, as if they were columns of text cut #' from different pages and pasted together. String values for `carry` are #' disallowed in replacement mode as it is ambiguous which of `x` or `value` #' they would modify (see examples). #' #' When in `type = 'width'` mode, it is only guaranteed that the result will be #' no wider than the original `x`. Narrower strings may result if a mixture #' of narrow and wide graphemes cannot be replaced exactly with the same `width` #' value, possibly because the provided `start` and `stop` values (or the #' implicit ones generated for `value`) do not align with grapheme boundaries. #' #' @section Graphemes: #' #' `fansi` approximates grapheme widths and counts by using heuristics for #' grapheme breaks that work for most common graphemes, including emoji #' combining sequences. The heuristic is known to work incorrectly with #' invalid combining sequences, prepending marks, and sequence interruptors. #' The [`utf8`](https://cran.r-project.org/package=utf8) package provides a #' conforming grapheme parsing implementation. #' #' @section Bidirectional Text: #' #' `fansi` is unaware of text directionality and operates as if all strings are #' left to right (LTR). Using `fansi` function with strings that contain mixed #' direction scripts (i.e. both LTR and RTL) may produce undesirable results. #' #' @note Non-ASCII strings are converted to and returned in UTF-8 encoding. #' Width calculations will not work properly in R < 3.2.2. #' @note If `stop` < `start`, the return value is always an empty string. #' @export #' @seealso [`?fansi`][fansi] for details on how _Control Sequences_ are #' interpreted, particularly if you are getting unexpected results, #' [`normalize_state`] for more details on what the `normalize` parameter does, #' [`state_at_end`] to compute active state at the end of strings, #' [`close_state`] to compute the sequence required to close active state. #' @param x a character vector or object that can be coerced to such. #' @param start integer. The first element to be extracted or replaced. #' @param stop integer. The first element to be extracted or replaced. #' @param type character(1L) partial matching #' `c("chars", "width", "graphemes")`. See [`?nchar`][base::nchar], as well #' as the corresponding documentation sections on this page. #' @param round character(1L) partial matching #' `c("start", "stop", "both", "neither")`, controls how to resolve #' ambiguities when a `start` or `stop` value in "width" `type` mode falls #' within a wide display character. See details. #' @param tabs.as.spaces FALSE (default) or TRUE, whether to convert tabs to #' spaces (and supress tab related warnings). This can only be set to TRUE if #' `strip.spaces` is FALSE. #' @param tab.stops integer(1:n) indicating position of tab stops to use #' when converting tabs to spaces. If there are more tabs in a line than #' defined tab stops the last tab stop is re-used. For the purposes of #' applying tab stops, each input line is considered a line and the character #' count begins from the beginning of the input line. #' @param ctl character, which _Control Sequences_ should be treated #' specially. Special treatment is context dependent, and may include #' detecting them and/or computing their display/character width as zero. For #' the SGR subset of the ANSI CSI sequences, and OSC hyperlinks, `fansi` #' will also parse, interpret, and reapply the sequences as needed. You can #' modify whether a _Control Sequence_ is treated specially with the `ctl` #' parameter. #' #' * "nl": newlines. #' * "c0": all other "C0" control characters (i.e. 0x01-0x1f, 0x7F), except #' for newlines and the actual ESC (0x1B) character. #' * "sgr": ANSI CSI SGR sequences. #' * "csi": all non-SGR ANSI CSI sequences. #' * "url": OSC hyperlinks #' * "osc": all non-OSC-hyperlink OSC sequences. #' * "esc": all other escape sequences. #' * "all": all of the above, except when used in combination with any of the #' above, in which case it means "all but". #' @param warn TRUE (default) or FALSE, whether to warn when potentially #' problematic _Control Sequences_ are encountered. These could cause the #' assumptions `fansi` makes about how strings are rendered on your display #' to be incorrect, for example by moving the cursor (see [`?fansi`][fansi]). #' At most one warning will be issued per element in each input vector. Will #' also warn about some badly encoded UTF-8 strings, but a lack of UTF-8 #' warnings is not a guarantee of correct encoding (use [`validUTF8`] for #' that). #' @param term.cap character a vector of the capabilities of the terminal, can #' be any combination of "bright" (SGR codes 90-97, 100-107), "256" (SGR codes #' starting with "38;5" or "48;5"), "truecolor" (SGR codes starting with #' "38;2" or "48;2"), and "all". "all" behaves as it does for the `ctl` #' parameter: "all" combined with any other value means all terminal #' capabilities except that one. `fansi` will warn if it encounters SGR codes #' that exceed the terminal capabilities specified (see [`term_cap_test`] #' for details). In versions prior to 1.0, `fansi` would also skip exceeding #' SGRs entirely instead of interpreting them. You may add the string "old" #' to any otherwise valid `term.cap` spec to restore the pre 1.0 behavior. #' "old" will not interact with "all" the way other valid values for this #' parameter do. #' @param normalize TRUE or FALSE (default) whether SGR sequence should be #' normalized out such that there is one distinct sequence for each SGR code. #' normalized strings will occupy more space (e.g. "\033[31;42m" becomes #' "\033[31m\033[42m"), but will work better with code that assumes each SGR #' code will be in its own escape as `crayon` does. #' @param carry TRUE, FALSE (default), or a scalar string, controls whether to #' interpret the character vector as a "single document" (TRUE or string) or #' as independent elements (FALSE). In "single document" mode, active state #' at the end of an input element is considered active at the beginning of the #' next vector element, simulating what happens with a document with active #' state at the end of a line. If FALSE each vector element is interpreted as #' if there were no active state when it begins. If character, then the #' active state at the end of the `carry` string is carried into the first #' element of `x` (see "Replacement Functions" for differences there). The #' carried state is injected in the interstice between an imaginary zeroeth #' character and the first character of a vector element. See the "Position #' Semantics" section of [`substr_ctl`] and the "State Interactions" section #' of [`?fansi`][fansi] for details. Except for [`strwrap_ctl`] where `NA` is #' treated as the string `"NA"`, `carry` will cause `NA`s in inputs to #' propagate through the remaining vector elements. #' @param terminate TRUE (default) or FALSE whether substrings should have #' active state closed to avoid it bleeding into other strings they may be #' prepended onto. This does not stop state from carrying if `carry = TRUE`. #' See the "State Interactions" section of [`?fansi`][fansi] for details. #' @param value a character vector or object that can be coerced to such. #' @return A character vector of the same length and with the same attributes as #' x (after possible coercion and re-encoding to UTF-8). #' @examples #' substr_ctl("\033[42mhello\033[m world", 1, 9) #' substr_ctl("\033[42mhello\033[m world", 3, 9) #' #' ## Positions 2 and 4 are in the middle of the full width W (\uFF37) for #' ## the `start` and `stop` positions respectively. Use `round` #' ## to control result: #' x <- "\uFF37n\uFF37" #' x #' substr2_ctl(x, 2, 4, type='width', round='start') #' substr2_ctl(x, 2, 4, type='width', round='stop') #' substr2_ctl(x, 2, 4, type='width', round='neither') #' substr2_ctl(x, 2, 4, type='width', round='both') #' #' ## We can specify which escapes are considered special: #' substr_ctl("\033[31mhello\tworld", 1, 6, ctl='sgr', warn=FALSE) #' substr_ctl("\033[31mhello\tworld", 1, 6, ctl=c('all', 'c0'), warn=FALSE) #' #' ## `carry` allows SGR to carry from one element to the next #' substr_ctl(c("\033[33mhello", "world"), 1, 3) #' substr_ctl(c("\033[33mhello", "world"), 1, 3, carry=TRUE) #' substr_ctl(c("\033[33mhello", "world"), 1, 3, carry="\033[44m") #' #' ## We can omit the termination #' bleed <- substr_ctl(c("\033[41mhello", "world"), 1, 3, terminate=FALSE) #' writeLines(bleed) # Style will bleed out of string #' end <- "\033[0m\n" #' writeLines(end) # Stanch bleeding #' #' ## Trailing sequences omitted unless `stop` past end. #' substr_ctl("ABC\033[42m", 1, 3, terminate=FALSE) #' substr_ctl("ABC\033[42m", 1, 4, terminate=FALSE) #' #' ## Replacement functions #' x0<- x1 <- x2 <- x3 <- c("\033[42mABC", "\033[34mDEF") #' substr_ctl(x1, 2, 2) <- "_" #' substr_ctl(x2, 2, 2) <- "\033[m_" #' substr_ctl(x3, 2, 2) <- "\033[45m_" #' writeLines(c(x0, end, x1, end, x2, end, x3, end)) #' #' ## With `carry = TRUE` strings look like original #' x0<- x1 <- x2 <- x3 <- c("\033[42mABC", "\033[34mDEF") #' substr_ctl(x0, 2, 2, carry=TRUE) <- "_" #' substr_ctl(x1, 2, 2, carry=TRUE) <- "\033[m_" #' substr_ctl(x2, 2, 2, carry=TRUE) <- "\033[45m_" #' writeLines(c(x0, end, x1, end, x2, end, x3, end)) #' #' ## Work-around to specify carry strings in replacement mode #' x <- c("ABC", "DEF") #' val <- "#" #' x2 <- c("\033[42m", x) #' val2 <- c("\033[45m", rep_len(val, length(x))) #' substr_ctl(x2, 2, 2, carry=TRUE) <- val2 #' (x <- x[-1]) substr_ctl <- function( x, start, stop, warn=getOption('fansi.warn', TRUE), term.cap=getOption('fansi.term.cap', dflt_term_cap()), ctl='all', normalize=getOption('fansi.normalize', FALSE), carry=getOption('fansi.carry', FALSE), terminate=getOption('fansi.terminate', TRUE) ) substr2_ctl( x=x, start=start, stop=stop, warn=warn, term.cap=term.cap, ctl=ctl, normalize=normalize, carry=carry, terminate=terminate ) #' @rdname substr_ctl #' @export substr2_ctl <- function( x, start, stop, type='chars', round='start', tabs.as.spaces=getOption('fansi.tabs.as.spaces', FALSE), tab.stops=getOption('fansi.tab.stops', 8L), warn=getOption('fansi.warn', TRUE), term.cap=getOption('fansi.term.cap', dflt_term_cap()), ctl='all', normalize=getOption('fansi.normalize', FALSE), carry=getOption('fansi.carry', FALSE), terminate=getOption('fansi.terminate', TRUE) ) { ## So warning are issues here start <- as.integer(start) stop <- as.integer(stop) ## modifies / creates NEW VARS in fun env VAL_IN_ENV( x=x, warn=warn, term.cap=term.cap, ctl=ctl, normalize=normalize, carry=carry, terminate=terminate, tab.stops=tab.stops, tabs.as.spaces=tabs.as.spaces, type=type, round=round, start=start, stop=stop ) res <- x res[] <- substr_ctl_internal( x, start=start, stop=stop, type.int=TYPE.INT, tabs.as.spaces=tabs.as.spaces, tab.stops=tab.stops, warn.int=WARN.INT, term.cap.int=TERM.CAP.INT, round.int=ROUND.INT, x.len=X.LEN, ctl.int=CTL.INT, normalize=normalize, carry=carry, terminate=terminate ) res } #' @rdname substr_ctl #' @export `substr_ctl<-` <- function( x, start, stop, warn=getOption('fansi.warn', TRUE), term.cap=getOption('fansi.term.cap', dflt_term_cap()), ctl='all', normalize=getOption('fansi.normalize', FALSE), carry=getOption('fansi.carry', FALSE), terminate=getOption('fansi.terminate', TRUE), value ) { substr2_ctl( x=x, start=start, stop=stop, warn=warn, term.cap=term.cap, ctl=ctl, normalize=normalize, carry=carry, terminate=terminate ) <- value x } #' @rdname substr_ctl #' @export `substr2_ctl<-` <- function( x, start, stop, type='chars', round='start', tabs.as.spaces=getOption('fansi.tabs.as.spaces', FALSE), tab.stops=getOption('fansi.tab.stops', 8L), warn=getOption('fansi.warn', TRUE), term.cap=getOption('fansi.term.cap', dflt_term_cap()), ctl='all', normalize=getOption('fansi.normalize', FALSE), carry=getOption('fansi.carry', FALSE), terminate=getOption('fansi.terminate', TRUE), value ) { # So warning are issued here start <- as.integer(start) stop <- as.integer(stop) # modifies / creates NEW VARS in fun env x0 <- x VAL_IN_ENV( x=x, warn=warn, term.cap=term.cap, ctl=ctl, normalize=normalize, tab.stops=tab.stops, tabs.as.spaces=tabs.as.spaces, round=round, start=start, stop=stop, type=type, carry=carry, value=value ) # In replace mode we shouldn't change the encoding if(!all(enc.diff <- Encoding(x) == Encoding(x0))) stop( "`x` may only contain ASCII or marked UTF-8 encoded strings; ", "you can use `enc2utf8` to convert `x` prior to use with ", "`substr_ctl<-` (replacement form). Illegal value at position [", min(which(!enc.diff)), "]." ) value <- as.character(value) if(tabs.as.spaces) value <- .Call( FANSI_tabs_as_spaces, value, tab.stops, 0L, # turn off warning, will be reported later TERM.CAP.INT, CTL.INT ) value <- rep_len(enc_to_utf8(value), X.LEN) res <- .Call(FANSI_substr, x, start, stop, value, TYPE.INT, ROUND.INT, WARN.INT, TERM.CAP.INT, CTL.INT, normalize, carry, terminate ) attributes(res) <- attributes(x) res } #' SGR Control Sequence Aware Version of substr #' #' These functions are deprecated in favor of the [`substr_ctl`] flavors. #' #' @keywords internal #' @inheritParams substr_ctl #' @inherit substr_ctl return #' @export substr_sgr <- function( x, start, stop, warn=getOption('fansi.warn', TRUE), term.cap=getOption('fansi.term.cap', dflt_term_cap()), normalize=getOption('fansi.normalize', FALSE), carry=getOption('fansi.carry', FALSE), terminate=getOption('fansi.terminate', TRUE) ) substr2_ctl( x=x, start=start, stop=stop, warn=warn, term.cap=term.cap, ctl='sgr', normalize=normalize, carry=carry, terminate=terminate ) #' @rdname substr_sgr #' @export substr2_sgr <- function( x, start, stop, type='chars', round='start', tabs.as.spaces=getOption('fansi.tabs.as.spaces', FALSE), tab.stops=getOption('fansi.tab.stops', 8L), warn=getOption('fansi.warn', TRUE), term.cap=getOption('fansi.term.cap', dflt_term_cap()), normalize=getOption('fansi.normalize', FALSE), carry=getOption('fansi.carry', FALSE), terminate=getOption('fansi.terminate', TRUE) ) substr2_ctl( x=x, start=start, stop=stop, type=type, round=round, tabs.as.spaces=tabs.as.spaces, tab.stops=tab.stops, warn=warn, term.cap=term.cap, ctl=c('sgr', 'url'), normalize=normalize, carry=carry, terminate=terminate ) substr_ctl_internal <- function( x, start, stop, type.int, round.int, tabs.as.spaces, tab.stops, warn.int, term.cap.int, x.len, ctl.int, normalize, carry, terminate ) { if(tabs.as.spaces) x <- .Call( FANSI_tabs_as_spaces, x, tab.stops, 0L, # turn off warning, will be reported later term.cap.int, ctl.int ) .Call(FANSI_substr, x, start, stop, NULL, type.int, round.int, warn.int, term.cap.int, ctl.int, normalize, carry, terminate ) } fansi/R/sgr.R0000644000176200001440000001641414533476156012515 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. #' Strip Control Sequences #' #' Removes _Control Sequences_ from strings. By default it will #' strip all known _Control Sequences_, including CSI/OSC sequences, two #' character sequences starting with ESC, and all C0 control characters, #' including newlines. You can fine tune this behavior with the `ctl` #' parameter. #' #' The `ctl` value contains the names of **non-overlapping** subsets of the #' known _Control Sequences_ (e.g. "csi" does not contain "sgr", and "c0" does #' not contain newlines). The one exception is "all" which means strip every #' known sequence. If you combine "all" with any other options then everything #' **but** those options will be stripped. #' #' @note Non-ASCII strings are converted to and returned in UTF-8 encoding. #' @inheritParams substr_ctl #' @inherit has_ctl seealso #' @export #' @param ctl character, any combination of the following values (see details): #' * "nl": strip newlines. #' * "c0": strip all other "C0" control characters (i.e. x01-x1f, x7F), #' except for newlines and the actual ESC character. #' * "sgr": strip ANSI CSI SGR sequences. #' * "csi": strip all non-SGR csi sequences. #' * "esc": strip all other escape sequences. #' * "all": all of the above, except when used in combination with any of the #' above, in which case it means "all but" (see details). #' @param strip character, deprecated in favor of `ctl`. #' @return character vector of same length as x with ANSI escape sequences #' stripped #' @examples #' string <- "hello\033k\033[45p world\n\033[31mgoodbye\a moon" #' strip_ctl(string) #' strip_ctl(string, c("nl", "c0", "sgr", "csi", "esc")) # equivalently #' strip_ctl(string, "sgr") #' strip_ctl(string, c("c0", "esc")) #' #' ## everything but C0 controls, we need to specify "nl" #' ## in addition to "c0" since "nl" is not part of "c0" #' ## as far as the `strip` argument is concerned #' strip_ctl(string, c("all", "nl", "c0")) strip_ctl <- function(x, ctl='all', warn=getOption('fansi.warn', TRUE), strip) { if(!missing(strip)) { message("Parameter `strip` has been deprecated; use `ctl` instead.") ctl <- strip } ## modifies / creates NEW VARS in fun env VAL_IN_ENV(x=x, ctl=ctl, warn=warn, warn.mask=get_warn_worst()) if(length(ctl)) .Call(FANSI_strip_csi, x, CTL.INT, WARN.INT) else x } #' Strip Control Sequences #' #' This function is deprecated in favor of the [`strip_ctl`]. It #' strips CSI SGR and OSC hyperlink sequences. #' #' @inheritParams strip_ctl #' @inherit strip_ctl return #' @keywords internal #' @export #' @examples #' ## convenience function, same as `strip_ctl(ctl=c('sgr', 'url'))` #' string <- "hello\033k\033[45p world\n\033[31mgoodbye\a moon" #' strip_sgr(string) strip_sgr <- function(x, warn=getOption('fansi.warn', TRUE)) { ## modifies / creates NEW VARS in fun env VAL_IN_ENV(x=x, warn=warn, warn.mask=get_warn_worst()) ctl.int <- match(c("sgr", "url"), VALID.CTL) .Call(FANSI_strip_csi, x, ctl.int, WARN.INT) } #' Check for Presence of Control Sequences #' #' `has_ctl` checks for any _Control Sequence_. You can check for different #' types of sequences with the `ctl` parameter. Warnings are only emitted for #' malformed CSI or OSC sequences. #' #' @export #' @seealso [`?fansi`][fansi] for details on how _Control Sequences_ are #' interpreted, particularly if you are getting unexpected results, #' [`unhandled_ctl`] for detecting bad control sequences. #' @inheritParams substr_ctl #' @inheritParams strip_ctl #' @param which character, deprecated in favor of `ctl`. #' @return logical of same length as `x`; NA values in `x` result in NA values #' in return #' @examples #' has_ctl("hello world") #' has_ctl("hello\nworld") #' has_ctl("hello\nworld", "sgr") #' has_ctl("hello\033[31mworld\033[m", "sgr") has_ctl <- function(x, ctl='all', warn=getOption('fansi.warn', TRUE), which) { if(!missing(which)) { message("Parameter `which` has been deprecated; use `ctl` instead.") ctl <- which } ## modifies / creates NEW VARS in fun env VAL_IN_ENV(x=x, ctl=ctl, warn=warn, warn.mask=get_warn_mangled()) if(length(CTL.INT)) { .Call(FANSI_has_csi, x, CTL.INT, WARN.INT) } else rep(FALSE, length(x)) } #' Check for Presence of Control Sequences #' #' This function is deprecated in favor of the [`has_ctl`]. It #' checks for CSI SGR and OSC hyperlink sequences. #' #' @inheritParams has_ctl #' @inherit has_ctl return #' @keywords internal #' @export has_sgr <- function(x, warn=getOption('fansi.warn', TRUE)) has_ctl(x, ctl=c("sgr", "url"), warn=warn) #' Utilities for Managing CSI and OSC State In Strings #' #' `state_at_end` reads through strings computing the accumulated SGR and #' OSC hyperlinks, and outputs the active state at the end of them. #' `close_state` produces the sequence that closes any SGR active and OSC #' hyperlinks at the end of each input string. If `normalize = FALSE` #' (default), it will emit the reset code "ESC[0m" if any SGR is present. #' It is more interesting for closing SGRs if `normalize = TRUE`. Unlike #' `state_at_end` and other functions `close_state` has no concept of `carry`: #' it will only emit closing sequences for states explicitly active at the end #' of a string. #' #' @export #' @inheritParams substr_ctl #' @inheritSection substr_ctl Control and Special Sequences #' @inheritSection substr_ctl Output Stability #' @inherit has_ctl seealso #' @return character vector same length as `x`. #' @examples #' x <- c("\033[44mhello", "\033[33mworld") #' state_at_end(x) #' state_at_end(x, carry=TRUE) #' (close <- close_state(state_at_end(x, carry=TRUE), normalize=TRUE)) #' writeLines(paste0(x, close, " no style")) state_at_end <- function( x, warn=getOption('fansi.warn', TRUE), term.cap=getOption('fansi.term.cap', dflt_term_cap()), normalize=getOption('fansi.normalize', FALSE), carry=getOption('fansi.carry', FALSE) ) { ## modifies / creates NEW VARS in fun env VAL_IN_ENV(x=x, ctl='sgr', warn=warn, term.cap=term.cap, carry=carry) .Call( FANSI_state_at_end, x, WARN.INT, TERM.CAP.INT, CTL.INT, normalize, carry, "x", TRUE # allowNA ) } # Given an SGR, compute the sequence that closes it #' @export #' @rdname state_at_end close_state <- function( x, warn=getOption('fansi.warn', TRUE), normalize=getOption('fansi.normalize', FALSE) ) { ## modifies / creates NEW VARS in fun env VAL_IN_ENV(x=x, warn=warn, normalize=normalize) .Call(FANSI_close_state, x, WARN.INT, 1L, normalize) } ## Process String by Removing Unwanted Characters ## ## This is to simulate what `strwrap` does, exposed for testing purposes. process <- function(x, ctl="all") .Call( FANSI_process, enc_to_utf8(x), 1L, match(ctl, VALID.CTL) ) fansi/R/load.R0000644000176200001440000000225214533476156012634 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. # nocov start .onLoad <- function(libname, pkgname) { reset_limits() check_assumptions() FANSI.ENV[['r.ver']] <- getRversion() } .onAttach <- function(libname, pkgname) { if(FANSI.ENV[['r.ver']] < "3.2.2") { packageStartupMessage( "`fansi` capabilities are degraded with R versions less than 3.2.2. In ", "particular string width calculations will be incorrect for wide and/or ", "zero width characters." ) } } .onUnload <- function(libpath) { library.dynam.unload("fansi", libpath) } # nocov end fansi/R/strwrap.R0000644000176200001440000002600414533476214013413 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. #' Control Sequence Aware Version of strwrap #' #' Wraps strings to a specified width accounting for _Control Sequences_. #' `strwrap_ctl` is intended to emulate `strwrap` closely except with respect to #' the _Control Sequences_ (see details for other minor differences), while #' `strwrap2_ctl` adds features and changes the processing of whitespace. #' `strwrap_ctl` is faster than `strwrap`. #' #' `strwrap2_ctl` can convert tabs to spaces, pad strings up to `width`, and #' hard-break words if single words are wider than `width`. #' #' Unlike [base::strwrap], both these functions will translate any non-ASCII #' strings to UTF-8 and return them in UTF-8. Additionally, invalid UTF-8 #' always causes errors, and `prefix` and `indent` must be scalar. #' #' When replacing tabs with spaces the tabs are computed relative to the #' beginning of the input line, not the most recent wrap point. #' Additionally,`indent`, `exdent`, `initial`, and `prefix` will be ignored when #' computing tab positions. #' #' @inheritSection substr_ctl Control and Special Sequences #' @inheritSection substr_ctl Graphemes #' @inheritSection substr_ctl Output Stability #' @inheritSection substr_ctl Bidirectional Text #' @inheritParams base::strwrap #' @inheritParams tabs_as_spaces #' @inheritParams substr_ctl #' @inherit substr_ctl seealso #' @return A character vector, or list of character vectors if `simplify` is #' false. #' @note Non-ASCII strings are converted to and returned in UTF-8 encoding. #' Width calculations will not work properly in R < 3.2.2. #' @param wrap.always TRUE or FALSE (default), whether to hard wrap at requested #' width if no word breaks are detected within a line. If set to TRUE then #' `width` must be at least 2. #' @param pad.end character(1L), a single character to use as padding at the #' end of each line until the line is `width` wide. This must be a printable #' ASCII character or an empty string (default). If you set it to an empty #' string the line remains unpadded. #' @param strip.spaces TRUE (default) or FALSE, if TRUE, extraneous white spaces #' (spaces, newlines, tabs) are removed in the same way as [base::strwrap] #' does. When FALSE, whitespaces are preserved, except for newlines as those #' are implicit boundaries between output vector elements. #' @param tabs.as.spaces FALSE (default) or TRUE, whether to convert tabs to #' spaces. This can only be set to TRUE if `strip.spaces` is FALSE. #' @note For the `strwrap*` functions the `carry` parameter affects whether #' styles are carried across _input_ vector elements. Styles always carry #' within a single wrapped vector element (e.g. if one of the input elements #' gets wrapped into three lines, the styles will carry through those three #' lines even if `carry=FALSE`, but not across input vector elements). #' @export #' @examples #' hello.1 <- "hello \033[41mred\033[49m world" #' hello.2 <- "hello\t\033[41mred\033[49m\tworld" #' #' strwrap_ctl(hello.1, 12) #' strwrap_ctl(hello.2, 12) #' #' ## In default mode strwrap2_ctl is the same as strwrap_ctl #' strwrap2_ctl(hello.2, 12) #' #' ## But you can leave whitespace unchanged, `warn` #' ## set to false as otherwise tabs causes warning #' strwrap2_ctl(hello.2, 12, strip.spaces=FALSE, warn=FALSE) #' #' ## And convert tabs to spaces #' strwrap2_ctl(hello.2, 12, tabs.as.spaces=TRUE) #' #' ## If your display has 8 wide tab stops the following two #' ## outputs should look the same #' writeLines(strwrap2_ctl(hello.2, 80, tabs.as.spaces=TRUE)) #' writeLines(hello.2) #' #' ## tab stops are NOT auto-detected, but you may provide #' ## your own #' strwrap2_ctl(hello.2, 12, tabs.as.spaces=TRUE, tab.stops=c(6, 12)) #' #' ## You can also force padding at the end to equal width #' writeLines(strwrap2_ctl("hello how are you today", 10, pad.end=".")) #' #' ## And a more involved example where we read the #' ## NEWS file, color it line by line, wrap it to #' ## 25 width and display some of it in 3 columns #' ## (works best on displays that support 256 color #' ## SGR sequences) #' #' NEWS <- readLines(file.path(R.home('doc'), 'NEWS')) #' NEWS.C <- fansi_lines(NEWS, step=2) # color each line #' W <- strwrap2_ctl(NEWS.C, 25, pad.end=" ", wrap.always=TRUE) #' writeLines(c("", paste(W[1:20], W[100:120], W[200:220]), "")) strwrap_ctl <- function( x, width = 0.9 * getOption("width"), indent = 0, exdent = 0, prefix = "", simplify = TRUE, initial = prefix, warn=getOption('fansi.warn', TRUE), term.cap=getOption('fansi.term.cap', dflt_term_cap()), ctl='all', normalize=getOption('fansi.normalize', FALSE), carry=getOption('fansi.carry', FALSE), terminate=getOption('fansi.terminate', TRUE) ) { strwrap2_ctl( x=x, width=width, indent=indent, exdent=exdent, prefix=prefix, simplify=simplify, initial=initial, warn=warn, term.cap=term.cap, ctl=ctl, normalize=normalize, carry=carry, terminate=terminate ) } #' @export #' @rdname strwrap_ctl strwrap2_ctl <- function( x, width = 0.9 * getOption("width"), indent = 0, exdent = 0, prefix = "", simplify = TRUE, initial = prefix, wrap.always=FALSE, pad.end="", strip.spaces=!tabs.as.spaces, tabs.as.spaces=getOption('fansi.tabs.as.spaces', FALSE), tab.stops=getOption('fansi.tab.stops', 8L), warn=getOption('fansi.warn', TRUE), term.cap=getOption('fansi.term.cap', dflt_term_cap()), ctl='all', normalize=getOption('fansi.normalize', FALSE), carry=getOption('fansi.carry', FALSE), terminate=getOption('fansi.terminate', TRUE) ) { if(!is.logical(wrap.always)) wrap.always <- as.logical(wrap.always) if(length(wrap.always) != 1L || is.na(wrap.always)) stop("Argument `wrap.always` must be TRUE or FALSE.") if(!is.logical(tabs.as.spaces)) tabs.as.spaces <- as.logical(tabs.as.spaces) if(wrap.always && width < 2L) stop("Width must be at least 2 in `wrap.always` mode.") ## modifies / creates NEW VARS in fun env VAL_IN_ENV ( x=x, warn=warn, term.cap=term.cap, ctl=ctl, normalize=normalize, carry=carry, terminate=terminate, tab.stops=tab.stops, tabs.as.spaces=tabs.as.spaces, strip.spaces=strip.spaces ) if(tabs.as.spaces && strip.spaces) stop("`tabs.as.spaces` and `strip.spaces` should not both be TRUE.") # This changes `width`, so needs to happen after the first width validation VAL_WRAP_IN_ENV(width, indent, exdent, prefix, initial, pad.end) res <- .Call( FANSI_strwrap_csi, x, width, indent, exdent, prefix, initial, wrap.always, pad.end, strip.spaces, tabs.as.spaces, tab.stops, WARN.INT, TERM.CAP.INT, FALSE, # first_only CTL.INT, normalize, carry, terminate ) if(simplify) { if(normalize) normalize_state(unlist(res), warn=FALSE, term.cap) else unlist(res) } else { if(normalize) normalize_state_list(res, 0L, TERM.CAP.INT, carry=carry) else res } } #' Control Sequence Aware Version of strwrap #' #' These functions are deprecated in favor of the [`strwrap_ctl`] flavors. #' #' @inheritParams strwrap_ctl #' @inherit strwrap_ctl return #' @keywords internal #' @export strwrap_sgr <- function( x, width = 0.9 * getOption("width"), indent = 0, exdent = 0, prefix = "", simplify = TRUE, initial = prefix, warn=getOption('fansi.warn', TRUE), term.cap=getOption('fansi.term.cap', dflt_term_cap()), normalize=getOption('fansi.normalize', FALSE), carry=getOption('fansi.carry', FALSE), terminate=getOption('fansi.terminate', TRUE) ) strwrap_ctl( x=x, width=width, indent=indent, exdent=exdent, prefix=prefix, simplify=simplify, initial=initial, warn=warn, term.cap=term.cap, ctl='sgr', normalize=normalize, carry=carry, terminate=terminate ) #' @export #' @rdname strwrap_sgr strwrap2_sgr <- function( x, width = 0.9 * getOption("width"), indent = 0, exdent = 0, prefix = "", simplify = TRUE, initial = prefix, wrap.always=FALSE, pad.end="", strip.spaces=!tabs.as.spaces, tabs.as.spaces=getOption('fansi.tabs.as.spaces', FALSE), tab.stops=getOption('fansi.tab.stops', 8L), warn=getOption('fansi.warn', TRUE), term.cap=getOption('fansi.term.cap', dflt_term_cap()), normalize=getOption('fansi.normalize', FALSE), carry=getOption('fansi.carry', FALSE), terminate=getOption('fansi.terminate', TRUE) ) strwrap2_ctl( x=x, width=width, indent=indent, exdent=exdent, prefix=prefix, simplify=simplify, initial=initial, wrap.always=wrap.always, pad.end=pad.end, strip.spaces=strip.spaces, tabs.as.spaces=tabs.as.spaces, tab.stops=tab.stops, warn=warn, term.cap=term.cap, ctl='sgr', normalize=normalize, carry=carry, terminate=terminate ) VAL_WRAP_IN_ENV <- function( width, indent, exdent, prefix, initial, pad.end ) { call <- sys.call(-1) env <- parent.frame() stop2 <- function(x) stop(simpleError(x, call)) is_scl_int_pos <- function(x, name, strict=FALSE) { x <- as.integer(x) if( !is.numeric(x) || length(x) != 1L || is.na(x) || if(strict) x <= 0 else x < 0 ) stop2( sprintf( "Argument `%s` %s.", name, "must be a positive scalar numeric representable as integer" ) ) x } exdent <- is_scl_int_pos(exdent, 'exdent', strict=FALSE) indent <- is_scl_int_pos(indent, 'indent', strict=FALSE) if(is.numeric(width)) width <- as.integer(min(c(max(c(min(width), 2L)), .Machine$integer.max))) else stop2("Argument `width` must be numeric.") # technically width <- is_scl_int_pos(width, 'width', strict=TRUE) width <- width - 1L if(!is.character(prefix)) prefix <- as.character(prefix) if(length(prefix) != 1L) stop2("Argument `prefix` must be a scalar character.") prefix <- enc_to_utf8(prefix) if(Encoding(prefix) == "bytes") stop2("Argument `prefix` cannot be \"bytes\" encoded.") if(!is.character(initial)) initial <- as.character(initial) if(length(initial) != 1L) stop2("Argument `initial` must be a scalar character.") initial <- enc_to_utf8(initial) if(Encoding(initial) == "bytes") stop2("Argument `initial` cannot be \"bytes\" encoded.") if(!is.character(pad.end)) pad.end <- as.character(pad.end) if(length(pad.end) != 1L) stop2("Argument `pad.end` must be a scalar character.") pad.end <- enc_to_utf8(pad.end) if(Encoding(pad.end) == "bytes") stop2("Argument `pad.end` cannot be \"bytes\" encoded.") if(nchar(pad.end, type='bytes') > 1L) stop2("Argument `pad.end` must be at most one byte long.") list2env( list( width=width, indent=indent, exdent=exdent, prefix=prefix, initial=initial, pad.end=pad.end ), env ) } fansi/R/strsplit.R0000644000176200001440000001404215106641323013564 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. #' Control Sequence Aware Version of strsplit #' #' A drop-in replacement for [`base::strsplit`]. #' #' This function works by computing the position of the split points after #' removing _Control Sequences_, and uses those positions in conjunction with #' [`substr_ctl`] to extract the pieces. This concept is borrowed from #' `crayon::col_strsplit`. An important implication of this is that you cannot #' split by _Control Sequences_ that are being treated as _Control Sequences_. #' You can however limit which control sequences are treated specially via the #' `ctl` parameters (see examples). #' #' @note The split positions are computed after both `x` and `split` are #' converted to UTF-8. #' @export #' @param x a character vector, or, unlike [`base::strsplit`] an object that can #' be coerced to character. #' @inheritParams base::strsplit #' @inheritParams strwrap_ctl #' @inherit substr_ctl seealso #' @inheritSection substr_ctl Control and Special Sequences #' @inheritSection substr_ctl Output Stability #' @inheritSection substr_ctl Bidirectional Text #' @note Non-ASCII strings are converted to and returned in UTF-8 encoding. #' Width calculations will not work properly in R < 3.2.2. #' @return Like [`base::strsplit`], with _Control Sequences_ excluded. #' @examples #' strsplit_ctl("\033[31mhello\033[42m world!", " ") #' #' ## Splitting by newlines does not work as they are _Control #' ## Sequences_, but we can use `ctl` to treat them as ordinary #' strsplit_ctl("\033[31mhello\033[42m\nworld!", "\n") #' strsplit_ctl("\033[31mhello\033[42m\nworld!", "\n", ctl=c("all", "nl")) strsplit_ctl <- function( x, split, fixed=FALSE, perl=FALSE, useBytes=FALSE, warn=getOption('fansi.warn', TRUE), term.cap=getOption('fansi.term.cap', dflt_term_cap()), ctl='all', normalize=getOption('fansi.normalize', FALSE), carry=getOption('fansi.carry', FALSE), terminate=getOption('fansi.terminate', TRUE) ) { ## modifies / creates NEW VARS in fun env VAL_IN_ENV( x=x, warn=warn, term.cap=term.cap, ctl=ctl, normalize=normalize, carry=carry, terminate=terminate, round="start" ) if(is.null(split)) split <- "" split <- enc_to_utf8(as.character(split)) if(!length(split)) split <- "" if(anyNA(split)) stop("Argument `split` may not contain NAs.") if(any(Encoding(split) == "bytes")) stop("Argument `split` may not be \"bytes\" encoded.") if(!is.logical(fixed)) fixed <- as.logical(fixed) if(length(fixed) != 1L || is.na(fixed)) stop("Argument `fixed` must be TRUE or FALSE.") if(!is.logical(perl)) perl <- as.logical(perl) if(length(perl) != 1L || is.na(perl)) stop("Argument `perl` must be TRUE or FALSE.") if(!is.logical(useBytes)) useBytes <- as.logical(useBytes) if(length(useBytes) != 1L || is.na(useBytes)) stop("Argument `useBytes` must be TRUE or FALSE.") # Need to handle recycling, complicated by the ability of strsplit to accept # multiple different split arguments x.na <- is.na(x) x.seq <- seq_along(x) s.seq <- seq_along(split) s.x.seq <- rep(s.seq, length.out=length(x)) * (!x.na) matches <- res <- vector("list", length(x)) x.strip <- strip_ctl(x, warn=FALSE, ctl=ctl) chars <- nchar(x.strip) # Find the split locations and widths for(i in s.seq) { to.split <- s.x.seq == i & chars matches[to.split] <- if(!nzchar(split[i])) { # special handling for zero width split lapply( chars[to.split], function(y) structure( seq.int(from=2L, by=1L, length.out=y - 1L), match.length=integer(y - 1L) ) ) } else { gregexpr( split[i], x.strip[to.split], perl=perl, useBytes=useBytes, fixed=fixed ) } } # Use `substr` to select the pieces between the start/end for(i in seq_along(x)) { if(any(matches[[i]] > 0)) { starts <- c(1L, matches[[i]] + attr(matches[[i]], 'match.length')) ends <- c(matches[[i]] - 1L, chars[i]) starts[starts < 1L] <- 1L sub.invalid <- starts > chars[i] if(any(sub.invalid)) { # happens when split goes all way to end of string starts <- starts[!sub.invalid] ends <- ends[!sub.invalid] } res[[i]] <- substr_ctl_internal( x=rep(x[i], length.out=length(starts)), start=starts, stop=ends, type.int=0L, round.int=ROUND.INT, tabs.as.spaces=FALSE, tab.stops=8L, warn.int=WARN.INT, term.cap.int=TERM.CAP.INT, x.len=length(starts), ctl.int=CTL.INT, normalize=normalize, carry=carry, terminate=terminate ) } else { res[[i]] <- x[[i]] } } # lazy fix for zero length strings splitting into nothing; would be better to # fix upstream... res[!chars] <- list(character(0L)) res[x.na] <- list(NA_character_) res } #' Check for Presence of Control Sequences #' #' This function is deprecated in favor of the [`strsplit_ctl`]. #' #' @inheritParams strsplit_ctl #' @inherit strsplit_ctl return #' @keywords internal #' @export strsplit_sgr <- function( x, split, fixed=FALSE, perl=FALSE, useBytes=FALSE, warn=getOption('fansi.warn', TRUE), term.cap=getOption('fansi.term.cap', dflt_term_cap()), normalize=getOption('fansi.normalize', FALSE), carry=getOption('fansi.carry', FALSE), terminate=getOption('fansi.terminate', TRUE) ) strsplit_ctl( x=x, split=split, fixed=fixed, perl=perl, useBytes=useBytes, warn=warn, term.cap=term.cap, ctl='sgr', normalize=normalize, carry=carry, terminate=terminate ) fansi/R/nchar.R0000644000176200001440000001111715106632744013002 0ustar liggesusers## Copyright (C) Brodie Gaslam ## ## This file is part of "fansi - ANSI Control Sequence Aware String Functions" ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 or 3 of the License. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## Go to for copies of the licenses. #' Control Sequence Aware Version of nchar #' #' `nchar_ctl` counts all non _Control Sequence_ characters. #' `nzchar_ctl` returns TRUE for each input vector element that has non _Control #' Sequence_ sequence characters. By default newlines and other C0 control #' characters are not counted. #' #' `nchar_ctl` and `nzchar_ctl` are implemented in statically compiled code, so #' in particular `nzchar_ctl` will be much faster than the otherwise equivalent #' `nzchar(strip_ctl(...))`. #' #' These functions will warn if either malformed or escape or UTF-8 sequences #' are encountered as they may be incorrectly interpreted. #' #' @inheritParams substr_ctl #' @inheritParams base::nchar #' @inheritParams strip_ctl #' @inheritSection substr_ctl Control and Special Sequences #' @inheritSection substr_ctl Output Stability #' @inheritSection substr_ctl Graphemes #' @inherit base::nchar return #' @return Like [`base::nchar`], with _Control Sequences_ excluded. #' @note The `keepNA` parameter is ignored for R < 3.2.2. #' @export #' @inherit has_ctl seealso #' @examples #' nchar_ctl("\033[31m123\a\r") #' ## with some wide characters #' cn.string <- sprintf("\033[31m%s\a\r", "\u4E00\u4E01\u4E03") #' nchar_ctl(cn.string) #' nchar_ctl(cn.string, type='width') #' #' ## Remember newlines are not counted by default #' nchar_ctl("\t\n\r") #' #' ## The 'c0' value for the `ctl` argument does not include #' ## newlines. #' nchar_ctl("\t\n\r", ctl="c0") #' nchar_ctl("\t\n\r", ctl=c("c0", "nl")) #' #' ## The _sgr flavor only treats SGR sequences as zero width #' nchar_sgr("\033[31m123") #' nchar_sgr("\t\n\n123") #' #' ## All of the following are Control Sequences or C0 controls #' nzchar_ctl("\n\033[42;31m\033[123P\a") nchar_ctl <- function( x, type='chars', allowNA=FALSE, keepNA=NA, ctl='all', warn=getOption('fansi.warn', TRUE), strip ) { if(!missing(strip)) { message("Parameter `strip` has been deprecated; use `ctl` instead.") ctl <- strip } ## modifies / creates NEW VARS in fun env if(FANSI.ENV[['r.ver']] >= "3.2.2") { VAL_IN_ENV( x=x, ctl=ctl, warn=warn, type=type, allowNA=allowNA, keepNA=keepNA, valid.types=c('chars', 'width', 'graphemes', 'bytes'), warn.mask=if(isTRUE(allowNA)) get_warn_mangled() else get_warn_worst() ) nchar_ctl_internal( x=x, type.int=TYPE.INT, allowNA=allowNA, keepNA=keepNA, ctl.int=CTL.INT, warn.int=WARN.INT, z=FALSE ) } else { nchar( strip_ctl(x, ctl=ctl, warn=warn), type=type, allowNA=allowNA, keepNA=keepNA ) } } #' @export #' @rdname nchar_ctl nzchar_ctl <- function( x, keepNA=FALSE, ctl='all', warn=getOption('fansi.warn', TRUE) ) { if(FANSI.ENV[['r.ver']] >= "3.2.2") { ## modifies / creates NEW VARS in fun env VAL_IN_ENV( x=x, ctl=ctl, warn=warn, type='chars', keepNA=keepNA, valid.types=c('chars', 'width', 'bytes'), warn.mask=get_warn_mangled() ) nchar_ctl_internal( x=x, type.int=TYPE.INT, allowNA=TRUE, keepNA=keepNA, ctl.int=CTL.INT, warn.int=WARN.INT, z=TRUE ) } else nzchar(strip_ctl(x, ctl=ctl, warn=warn), keepNA=keepNA) } nchar_ctl_internal <- function( x, type.int, allowNA, keepNA, ctl.int, warn.int, z ) { term.cap.int <- 1L res <- .Call( FANSI_nchar_esc, x, type.int, keepNA, allowNA, warn.int, term.cap.int, ctl.int, z ) dim(res) <- dim(x) dimnames(res) <- dimnames(x) names(res) <- names(x) res } #' Control Sequence Aware Version of nchar #' #' These functions are deprecated in favor of the [`nchar_ctl`] and #' [`nzchar_ctl`]. #' #' @inheritParams nchar_ctl #' @inherit nchar_ctl return #' @keywords internal #' @export nchar_sgr <- function( x, type='chars', allowNA=FALSE, keepNA=NA, warn=getOption('fansi.warn', TRUE) ) nchar_ctl( x=x, type=type, allowNA=allowNA, keepNA=keepNA, warn=warn, ctl='sgr' ) #' @export #' @rdname nchar_sgr nzchar_sgr <- function(x, keepNA=NA, warn=getOption('fansi.warn', TRUE)) nzchar_ctl(x=x, keepNA=keepNA, warn=warn, ctl='sgr') fansi/COPYING0000644000176200001440000000116614533476156012427 0ustar liggesusersCopyright (C) 2017-2023 Brodie Gaslam This file is part of "fansi - ANSI Control Sequence Aware String Functions" This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 or 3 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Go to for copies of the licenses. fansi/vignettes/0000755000176200001440000000000015107200322013352 5ustar liggesusersfansi/vignettes/sgr-in-rmd.Rmd0000644000176200001440000001041614213626165016015 0ustar liggesusers--- title: "ANSI CSI SGR Sequences in Rmarkdown" author: "Brodie Gaslam" output: rmarkdown::html_vignette: css: styles.css mathjax: local vignette: > %\VignetteIndexEntry{ANSI CSI SGR Sequences in Rmarkdown} %\VignetteEngine{knitr::rmarkdown} \usepackage[utf8]{inputenc} --- ```{r echo=FALSE} library(fansi) knitr::knit_hooks$set(document=function(x, options) gsub("\033", "\uFFFD", x)) ``` ### Browsers Do Not Interpret ANSI CSI SGR Sequences Over the past few years color has been gaining traction in the R terminal, particularly since Gábor Csárdi's [crayon](https://github.com/r-lib/crayon) made it easy to format text with [ANSI CSI SGR sequences](https://en.wikipedia.org/wiki/ANSI_escape_code). At the same time the advent of JJ Alaire and Yihui Xie `rmarkdown` and `knitr` packages, along with John MacFarlane `pandoc`, made it easy to automatically incorporate R code and output in HTML documents. Unfortunately ANSI CSI SGR sequences are not recognized by web browsers and end up rendering weirdly1: ```{r} sgr.string <- c( "\033[43;34mday > night\033[0m", "\033[44;33mdawn < dusk\033[0m" ) writeLines(sgr.string) ``` ### Automatically Convert ANSI CSI SGR to HTML `fansi` provides the `to_html` function which converts the ANSI CSI SGR sequences and OSC hyperlinks into HTML markup. When we combine it with `knitr::knit_hooks` we can modify the rendering of the `rmarkdown` document such that ANSI CSI SGR encoding is shown in the equivalent HTML. `fansi::set_knit_hooks` is a convenience function that does just this. You should call it in an `rmarkdown` document with the: * Chunk option `results` set to "asis". * Chunk option `comments` set to "" (empty string). * The `knitr::knit_hooks` object as an argument. The corresponding `rmarkdown` hunk should look as follows: ```` ```{r, comment="", results="asis"}`r ''` old.hooks <- fansi::set_knit_hooks(knitr::knit_hooks) ``` ```` ```{r comment="", results="asis", echo=FALSE} old.hooks <- fansi::set_knit_hooks(knitr::knit_hooks) ``` We run this function for its side effects, which cause the output to be displayed as intended: ```{r} writeLines(sgr.string) ``` If you are seeing extra line breaks in your output you may need to use: ```` ```{r, comment="", results="asis"}`r ''` old.hooks <- fansi::set_knit_hooks(knitr::knit_hooks, split.nl=TRUE) ``` ```` If you use `crayon` to generate your ANSI CSI SGR style strings you may need to set `options(crayon.enabled=TRUE)`, as in some cases `crayon` suppresses the SGR markup if it thinks it is not outputting to a terminal. We can also set hooks for the other types of outputs, and add some additional CSS styles. ```` ```{r, comment="", results="asis"}`r ''` styles <- c( getOption("fansi.style", dflt_css()), # default style "PRE.fansi CODE {background-color: transparent;}", "PRE.fansi-error {background-color: #DDAAAA;}", "PRE.fansi-warning {background-color: #DDDDAA;}", "PRE.fansi-message {background-color: #AAAADD;}" ) old.hooks <- c( old.hooks, fansi::set_knit_hooks( knitr::knit_hooks, which=c("warning", "error", "message"), style=styles ) ) ``` ```` ```{r comment="", results="asis", echo=FALSE} styles <- c( getOption("fansi.style", dflt_css()), # default style "PRE.fansi CODE {background-color: transparent;}", "PRE.fansi-error {background-color: #DDAAAA;}", "PRE.fansi-warning {background-color: #DDDDAA;}", "PRE.fansi-message {background-color: #AAAADD;}" ) old.hooks <- c( old.hooks, fansi::set_knit_hooks( knitr::knit_hooks, which=c("warning", "error", "message"), style=styles ) ) ``` ```{r error=TRUE} message(paste0(sgr.string, collapse="\n")) warning(paste0(c("", sgr.string), collapse="\n")) stop(paste0(c("", sgr.string), collapse="\n")) ``` You can restore the old hooks at any time in your document with: ```{r} do.call(knitr::knit_hooks$set, old.hooks) writeLines(sgr.string) ``` See `?fansi::set_knit_hooks` for details. ---- 1For illustrative purposes we output raw ANSI CSI SGR sequences in this document. However, because the ESC control character causes problems with some HTML rendering services we replace it with the � symbol. Depending on the browser and process it would normally not be visible at all, or substituted with some other symbol. fansi/vignettes/styles.css0000644000176200001440000001126514160423174015426 0ustar liggesusers/* Styles primarily borrowed from rmarkdown/templates/html_vignette/resources/vignette.css at a time 12/2/2014 when rmarkdown was (and probably still is) under the GPL-3 license */ body { background-color: #fff; margin: 1em auto; max-width: 700px; overflow: visible; padding-left: 2em; padding-right: 2em; font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.5; } #header { text-align: center; } #TOC { clear: both; /*margin: 0 0 10px 10px;*/ padding: 4px; width: 100%; border: 1px solid #CCCCCC; border-radius: 5px; background-color: #f6f6f6; font-size: 13px; line-height: 1.3; } #TOC .toctitle { font-weight: bold; font-size: 15px; margin-left: 5px; } #TOC ul { padding-left: 40px; margin-left: -1.5em; margin-top: 5px; margin-bottom: 5px; } #TOC ul ul { margin-left: -2em; } #TOC li { line-height: 16px; } table { margin: 1em auto; border-width: 1px; border-color: #DDDDDD; border-style: outset; border-collapse: collapse; } table th { border-width: 2px; padding: 5px; border-style: inset; } table td { border-width: 1px; border-style: inset; line-height: 18px; padding: 5px 5px; } table, table th, table td { border-left-style: none; border-right-style: none; } table thead, table tr.even { background-color: #f7f7f7; } p { margin: 1em 0; } blockquote { background-color: #f6f6f6; padding: 0.25em 0.75em; } hr { border-style: solid; border: none; border-top: 1px solid #777; margin: 28px 0; } dl { margin-left: 0; } dl dd { margin-bottom: 13px; margin-left: 13px; } dl dt { font-weight: bold; } ul { margin-top: 0; } ul li { list-style: circle outside; } ul ul { margin-bottom: 0; } h3.subtitle { margin-top: -23px; } body pre + pre:not([class]) code.hljs, body pre + pre.fansi code.hljs { background-color: #EEE; } body pre + pre:not([class]), body pre + pre.fansi, body div.sourceCode + pre:not([class]), body div.sourceCode + pre.fansi { margin-top: -19px; } pre, code { background-color: #EEE; color: #333; /*border-radius: 3px;*/ } pre { border: 2px solid #EEE; overflow: auto; white-space: pre-wrap; /* Wrap long lines */ /* border-radius: 3px; */ margin: 5px 0px; padding: 5px 10px; } code { font-size: 85%; } pre:not([class]) { color: #353; /*border-radius: 0px 0px 3px 3px;*/ } div.sourceCode pre, div.sourceCode code { background-color: #FAFAFA; } div.sourceCode pre{ /*border-radius: 3px 3px 0px 0px;*/ } div.sourceCode + pre, div.sourceCode + div.diffobj_container { margin-top: -14px; } div.diffobj_container pre{ line-height: 1.3; } /* pre:not([class]) { background-color: #eee; } */ code { font-family: Consolas, Monaco, 'Courier New', monospace; } p > code, li > code, h1 > code, h2 > code, h3 > code, h4 > code, h5 > code, h6 > code { padding: 2px 0px; line-height: 1; font-weight: bold; } div.figure { text-align: center; } img { background-color: #FFFFFF; padding: 2px; border: 1px solid #DDDDDD; border-radius: 3px; border: 1px solid #CCCCCC; margin: 0 5px; } h1 { margin-top: 0; padding-bottom: 3px; font-size: 35px; line-height: 40px; border-bottom: 1px solid #999; } h2 { border-bottom: 1px solid #999; padding-top: 5px; padding-bottom: 2px; font-size: 145%; } h3 { padding-top: 5px; font-size: 120%; } h4 { /*border-bottom: 1px solid #f7f7f7;*/ color: #777; font-size: 105%; } h4.author, h4.date {display: none;} h5, h6 { /*border-bottom: 1px solid #ccc;*/ font-size: 105%; } a { color: #2255dd; font-weight: bold; text-decoration: none; } a:hover { color: #6666ff; } a:visited { color: #800080; } a:visited:hover { color: #BB00BB; } a[href^="http:"] { text-decoration: underline; } a[href^="https:"] { text-decoration: underline; } /* Class described in https://benjeffrey.com/posts/pandoc-syntax-highlighting-css Colours from https://gist.github.com/robsimmons/1172277 */ code > span.kw { color: #555; font-weight: bold; } /* Keyword */ code > span.dt { color: #902000; } /* DataType */ code > span.dv { color: #40a070; } /* DecVal (decimal values) */ code > span.bn { color: #d14; } /* BaseN */ code > span.fl { color: #d14; } /* Float */ code > span.ch { color: #d14; } /* Char */ code > span.st { color: #d14; } /* String */ code > span.co { color: #888888; font-style: italic; } /* Comment */ code > span.ot { color: #007020; } /* OtherToken */ code > span.al { color: #ff0000; font-weight: bold; } /* AlertToken */ code > span.fu { color: #900; font-weight: bold; } /* Function calls */ code > span.er { color: #a61717; background-color: #e3d2d2; } /* ErrorTok */ fansi/src/0000755000176200001440000000000015107200322012131 5ustar liggesusersfansi/src/utils.c0000644000176200001440000002520514533476156013467 0ustar liggesusers/* * Copyright (C) Brodie Gaslam * * This file is part of "fansi - ANSI Control Sequence Aware String Functions" * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Go to for a copies of the licenses. */ #include "fansi.h" /* * Used to set a global limit values for testing purposes. * * This does not affect FANSI_add_int as that we can test separately, and * setting it there prevents us from testing some of the downstream overflow * logic. * * Watch out that we don't set R_LEN_T_MAX to be less than the length of any * test vector, as it is implicitly assumed no vector can be longer than * R_LEN_T_MAX. */ #define LIM_INIT // See also check_limits in assumptions.c struct FANSI_limits FANSI_lim; SEXP FANSI_set_int_max(SEXP x) { if(TYPEOF(x) != INTSXP || XLENGTH(x) != 1) error("invalid int_max value"); // nocov int x_int = asInteger(x); if(x_int < 1) error("int_max value must be positive"); // nocov int old_int = FANSI_lim.lim_int.max; FANSI_lim.lim_int.max = x_int; return ScalarInteger(old_int); } SEXP FANSI_set_rlent_max(SEXP x) { if(TYPEOF(x) != INTSXP || XLENGTH(x) != 1) error("invalid R_len_t_max value"); // nocov int x_R_len_t = asInteger(x); if(x_R_len_t < 1) error("R_len_t_max value must be positive"); // nocov int old_R_len_t = FANSI_lim.lim_R_len_t.max; FANSI_lim.lim_R_len_t.max = (intmax_t) x_R_len_t; return ScalarInteger(old_R_len_t); } SEXP FANSI_reset_limits(void) { FANSI_lim = (struct FANSI_limits) { .lim_int={.name="INT", .min=INT_MIN, .max=INT_MAX}, .lim_R_len_t={.name="R_LEN_T", .min=0, .max=R_LEN_T_MAX}, .lim_R_xlen_t={.name="R_XLEN_T", .min=0, .max=R_XLEN_T_MAX}, .lim_size_t={.name="SIZE", .min=0, .max=SIZE_MAX} }; return ScalarLogical(1); } // nocov start // used only for debugging SEXP FANSI_get_int_max(void) { return ScalarInteger(FANSI_lim.lim_int.max); } // nocov end /* * Note we are stricter than necessary when y is negative because we want to * count hitting INT_MIN as an overflow so that we can use the integer values * in R where INT_MIN is NA. */ int FANSI_add_int(int x, int y, const char * file, int line) { // don't use FANSI_lim.lim.* as that locks up testing other things if( (y >= 0 && (x > INT_MAX - y)) || (y < 0 && (x <= INT_MIN - y)) ) error( "Integer overflow in file %s at line %d; %s", file, line, "contact maintainer." ); return x + y; } SEXP FANSI_add_int_ext(SEXP x, SEXP y) { if( TYPEOF(x) != INTSXP || XLENGTH(x) != 1 || TYPEOF(y) != INTSXP || XLENGTH(y) != 1 ) error("Internal error: arguments must be scalar integers"); // nocov return ScalarInteger(FANSI_ADD_INT(asInteger(x), asInteger(y))); } /* * Seek a state up until a known control. * * Beware that the position offsets other than .x will be incorrect. */ int FANSI_find_ctl( struct FANSI_state *state, R_xlen_t i, const char * arg ) { int pos = state->pos.x; while(state->string[state->pos.x]) { pos = state->pos.x += FANSI_seek_ctl(state->string + state->pos.x); FANSI_read_next(state, i, arg); // Known control read if(state->status & CTL_MASK) break; } return pos; } static int maybe_ctl(const char x) { // Controls range from 0000 0001 (0x01) to 0001 1111 (0x1F), plus 0x7F; // We don't treat C1 (C1, not C0) controls as specials, apparently return x && (!(x & (~0x1F)) || x == 0x7F); } /* * Searches for start of next possible control character, if there is one, * and returns the offset from the current point. */ int FANSI_seek_ctl(const char * x) { const char * x0 = x; while(*x && !maybe_ctl(*x)) x++; if(x - x0 > FANSI_lim.lim_int.max) error("Internal error: sought past INT_MAX, should not happen."); // nocov return (x - x0); } /* * Compresses the ctl vector into a single integer by encoding each value of * ctl as a bit. */ unsigned int FANSI_ctl_as_int(SEXP ctl) { int ctl_int = 0; int flip_bits = 0; for(R_xlen_t i = 0; i < XLENGTH(ctl); ++i) { // -2 because ctl is 1 indexed (from R), and position 1 means "all", so we // need to shift by 1 for the 0 index, and then by one more for the position // occupied by "all" that really means flip bits int ctl_val = INTEGER(ctl)[i] - 2; if(ctl_val > 6) error("Internal Error: max ctl value allowed is 6."); if(ctl_val < 0) flip_bits = 1; else ctl_int |= 1U << ctl_val; } if(flip_bits) ctl_int ^= CTL_ALL; return ctl_int; } SEXP FANSI_ctl_as_int_ext(SEXP ctl) { return ScalarInteger(FANSI_ctl_as_int(ctl)); } // See ctl_as_int for explanation unsigned int FANSI_term_cap_as_int(SEXP term_cap) { unsigned int term_cap_int = 0; int flip_bits = 0; for(R_xlen_t i = 0; i < XLENGTH(term_cap); ++i) { int term_cap_val = INTEGER(term_cap)[i] - 2; if (term_cap_val > 3) { error("Internal Error: max term_cap value allowed is 2."); // nocov } else { if(term_cap_val < 0) flip_bits = 1; else term_cap_int |= 1U << term_cap_val; } } if(flip_bits) term_cap_int ^= TERM_ALL; return term_cap_int; } SEXP FANSI_get_warn_all(void) { return ScalarInteger(WARN_MASK); } SEXP FANSI_get_warn_mangled(void) { return ScalarInteger(WARN_MANGLED); } SEXP FANSI_get_warn_utf8(void) { return ScalarInteger(WARN_UTF8); } SEXP FANSI_get_warn_error(void) { return ScalarInteger(WARN_ERROR); } // concept borrowed from utf8-lite, but is not great because we're // still doing the calculation every iteration. Probably okay though, the // alternative is just too much of a pain. void FANSI_interrupt(R_xlen_t i) {if(!(i & 1023)) R_CheckUserInterrupt();} /* * So we can use a consistent integer type in printing possibly large indeces. * * Returns in 1 based indexing, -1 in the unlikely case R_xlen_t == intmax_t. */ intmax_t FANSI_ind(R_xlen_t i) { intmax_t ind = i >= INTMAX_MAX ? -2 : i; // i == INTMAX_MAX is the issue return ind + 1; } /* * Check Whether String Would Overflow if Appended To * * @param cur current length * @param extra how many bytes we're looking to append */ void FANSI_check_append_err(const char * msg, R_xlen_t i) { error( "%s will create string longer than INT_MAX at index [%jd]%s", msg, FANSI_ind(i), ". Try again with smaller strings." ); } int FANSI_check_append( int cur, int extra, const char * msg, R_xlen_t i ) { if(cur < 0 || extra < 0) error("Internal Error: negative lengths."); // nocov if(cur > FANSI_lim.lim_int.max - extra) FANSI_check_append_err(msg, i); return cur + extra; } /* * Similar to mkCharCE * * Key differences are that we check for R_len_t overflow. * * String is assumed to have been checked to be no longer than INT_MAX, * excluding the NULL terminator. * * @param start beginning of string to write * @param end of string to write; care should be taken that it is indeed the * same string we're talking about. This is done so that we can measure the * length of the strings directly as in most "write" scenarios we have a * pointer at the end of the buffer. */ static SEXP mkChar_core( struct FANSI_buff buff, cetype_t enc, R_xlen_t i, int strict ) { FANSI_check_buff(buff, i, strict); // PTRDIFF_MAX known to be >= INT_MAX (assumptions), and string should not // be longer than INT_MAX, so no overflow possible here. if(buff.len > FANSI_lim.lim_R_len_t.max) { error( "%s at index [%jd].", "Attempting to create CHARSXP longer than R_LEN_T_MAX", FANSI_ind(i) ); } // Annoyingly mkCharLenCE accepts int parameter instead of R_len_t, so we need // to check that too. Not sure this can actually be triggered realistically. if(buff.len > FANSI_lim.lim_int.max) // nocov start error( "%s at index [%jd].", "Attempting to create CHARSXP longer than INT_MAX", FANSI_ind(i) ); // nocov end return mkCharLenCE(buff.buff0, buff.len, enc); } // Original mkChar taking star and end points SEXP FANSI_mkChar0( char * start, char * end, cetype_t enc, R_xlen_t i ) { // dummy buff struct FANSI_buff buff = {.buff0=start, .buff=end, .len=end - start}; return mkChar_core(buff, enc, i, 0); } SEXP FANSI_mkChar(struct FANSI_buff buff, cetype_t enc, R_xlen_t i) { return mkChar_core(buff, enc, i, 1); } // return 1 if is TRUE/FALSE int FANSI_is_tf(SEXP x) { return TYPEOF(x) == LGLSXP && XLENGTH(x) == 1 && LOGICAL(x)[0] != NA_LOGICAL; } /* * Basic validation on common arguments * * Note FANSI_state_init_full also validates many of the common args */ void FANSI_val_args(SEXP x, SEXP norm, SEXP carry) { if(TYPEOF(x) != STRSXP) error("Argument `x` must be character."); // nocov if(TYPEOF(carry) != STRSXP || XLENGTH(carry) != 1L) error("Argument `carry` must be scalar character."); // nocov if(!FANSI_is_tf(norm)) error("Argument `norm` must be TRUE or FALSE."); // nocov } // Utilitiy fun // nocov start void FANSI_print(const char * x) { if(x) { size_t len = strlen(x); for(size_t i = 0; i < len; ++i) if(*(x + i) < 0x20 || (unsigned char)(*(x + i)) > 0x7F) Rprintf("\\x%2x", *(x + i)); else Rprintf("%c", *(x + i)); Rprintf("\n"); } } void FANSI_print_len(const char * x, int len) { for(int i = 0; i < len; ++i) if(*(x + i) < 0x20 || (unsigned char)(*(x + i)) > 0x7F) Rprintf("\\x%2x", *(x + i)); else Rprintf("%c", *(x + i)); Rprintf("\n"); } void FANSI_print_bits(unsigned int x) { unsigned int uintbits = (sizeof(x) * CHAR_BIT); for(unsigned int i = uintbits; i > 0; --i) { if(i < uintbits && !(i % 8)) Rprintf(" "); Rprintf("%d", (x & (1U << (i - 1))) > 0); } } void FANSI_print_sgr(struct FANSI_sgr s) { Rprintf( " color: %d %d %d;%d;%d bgcolor: %d %d %d;%d;%d\n", s.color.x & CLR_MASK, s.color.x & ~CLR_MASK, s.color.extra[0], s.color.extra[1], s.color.extra[2], s.bgcol.x & CLR_MASK, s.bgcol.x & ~CLR_MASK, s.bgcol.extra[0], s.bgcol.extra[1], s.bgcol.extra[2] ); Rprintf(" style: "); FANSI_print_bits(s.style); Rprintf("\n"); } void FANSI_print_state(struct FANSI_state x) { Rprintf("- State -------\n"); FANSI_print_sgr(x.fmt.sgr); Rprintf( " pos: byte %d width %d\n", x.pos.x, x.pos.w ); Rprintf(" status: "); FANSI_print_bits(x.status); Rprintf("\n settng: "); FANSI_print_bits(x.settings); Rprintf("\n- End State ---\n"); } // nocov end fansi/src/wrap.c0000644000176200001440000005510215106721052013260 0ustar liggesusers/* * Copyright (C) Brodie Gaslam * * This file is part of "fansi - ANSI Control Sequence Aware String Functions" * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Go to for a copies of the licenses. */ #include "fansi.h" /* * Data related to prefix / initial * * Make sure to coordinate with ALL functions that generate/modify these (below) * if you change the struct definition. */ struct FANSI_prefix_dat { const char * string; // string translated to utf8 int width; // display width as computed by unicode_width int bytes; // bytes, excluding NULL terminator // how many indent/exdent bytes are included in string, width, and bytes int indent; int utf8; // see FANSI_state int warn; // warning issued while stripping }; /* * Generate data related to prefix / initial */ static struct FANSI_prefix_dat make_pre( SEXP x, SEXP warn, SEXP term_cap, SEXP ctl, const char * arg ) { int prt = 0; SEXP R1 = PROTECT(ScalarInteger(1)); prt++; SEXP Rtrue = PROTECT(ScalarLogical(1)); prt++; SEXP Rfalse = PROTECT(ScalarLogical(0)); prt++; SEXP keepNA = Rtrue; SEXP allowNA = Rfalse; SEXP width = R1; // width mode struct FANSI_state state = FANSI_state_init_full( x, warn, term_cap, allowNA, keepNA, width, ctl, 0 ); FANSI_read_all(&state, 0, arg); UNPROTECT(prt); return (struct FANSI_prefix_dat) { .string=state.string, .width=state.pos.w, .bytes=state.pos.x, .utf8=state.utf8, .indent=0 }; } /* * Combine initial and indent (or prefix and exdent) */ static struct FANSI_prefix_dat pad_pre( struct FANSI_prefix_dat dat, int spaces ) { int pre_len = dat.bytes; const char * pre_chr = dat.string; int alloc_size = FANSI_ADD_INT(FANSI_ADD_INT(pre_len, spaces), 1); char * res_start = ""; if(alloc_size > 1) { // Can't use buff here because we don't write this string out char * res = res_start = R_alloc(alloc_size, sizeof(char)); memcpy(res, pre_chr, pre_len); res += pre_len; for(int i = 0; i < spaces; ++i) *(res++) = ' '; *res = '\0'; } dat.string = (const char *) res_start; dat.bytes = FANSI_ADD_INT(dat.bytes, spaces); dat.width = FANSI_ADD_INT(dat.width, spaces); dat.indent = FANSI_ADD_INT(dat.indent, spaces); return dat; } /* * Adjusts width and sizes to pretend there is no indent. String itself is not * modified so this only works if whatever is using the string is using the byte * counter to limit how much of the string it reads */ static struct FANSI_prefix_dat drop_pre_indent(struct FANSI_prefix_dat dat) { dat.bytes = FANSI_ADD_INT(dat.bytes, -dat.indent); dat.width = FANSI_ADD_INT(dat.width, -dat.indent); dat.indent = FANSI_ADD_INT(dat.indent, -dat.indent); if(dat.indent < 0) // nocov start error( "Internal Error: cannot drop indent when there is none; contact " "maintainer." ); // nocov end return dat; } /* * Write a line * * @param state_bound the point where the boundary is * @param state_start the starting point of the line * @param normalize currently doesn't do anything since the normalization * happens as a second pass. In the future we might decide to do the * normalization in the first pass so an external call to normalize_state is * unnecessary. */ static SEXP writeline( struct FANSI_state state_bound, struct FANSI_state state_start, struct FANSI_state state_last_bound, struct FANSI_buff * buff, struct FANSI_prefix_dat pre_dat, int tar_width, const char * pad_chr, R_xlen_t i, int normalize, int terminate ) { // turn off C level normalize for now since it is incomplete and we just do it // again at the R level. normalize = 0; // First thing we need to do is check whether we need to pad as that affects // how we treat the boundary. int line_width = state_bound.pos.w - state_start.pos.w; int target_pad = 0; if(tar_width < 0) tar_width = 0; if(line_width <= tar_width && *pad_chr) { target_pad = tar_width - line_width; } // handle corner case for empty strings that don't get indented by strwrap; // we considered testing width instead of size as that would also prevent // indent on thing that just have ESCs, but decided against it (arbitrarily) // // We do not re-terminate the string, instead relying on widths / sizes to // make sure only the non-indent bit is copied if(state_bound.pos.x == state_start.pos.x) { pre_dat = drop_pre_indent(pre_dat); // Also, don't open a state that will get immediately closed if(!target_pad && terminate) { state_start.fmt = state_bound.fmt = (struct FANSI_format) {0}; } } // state_bound.pos.x 1 past what we need, so this should include room // for NULL terminator if( (state_bound.pos.x < state_start.pos.x) || (state_bound.pos.w < state_start.pos.w) ) // nocov start error("Internal Error: boundary leading position; contact maintainer."); // nocov end if(state_bound.pos.x < state_start.pos.x) error("Internal Error: line ends backwards."); // nocov if(state_bound.pos.x < state_start.pos.x) error("Internal Error: negative line width."); // nocov // Measure/Write loop (see src/write.c). Very similar code in substr.c const char * err_msg = "Writing line"; for(int k = 0; k < 2; ++k) { if(!k) FANSI_reset_buff(buff); else FANSI_size_buff(buff); FANSI_W_bridge(buff, state_last_bound, state_start, normalize, i, err_msg); // Apply indent/exdent prefix/initial if(pre_dat.bytes) { err_msg = "Adding prefix characters"; FANSI_W_MCOPY(buff, pre_dat.string, pre_dat.bytes); } // Actual string, remember state_bound.pos.x is one past what we need // We could use _normalize_or_copy, but right now doing it at R level as // doing it here requires a bit of tweaking. const char * string = state_start.string + state_start.pos.x; int bytes = state_bound.pos.x - state_start.pos.x; FANSI_W_MCOPY(buff, string, bytes); // Add padding if needed err_msg = "Adding padding"; int to_pad = target_pad; FANSI_W_FILL(buff, *pad_chr, to_pad); // And turn off CSI styles if needed if(terminate) FANSI_W_close(buff, state_bound.fmt, normalize, i); } // Now create the charsxp and append to the list, start by determining // what encoding to use. cetype_t chr_type = CE_NATIVE; if((state_bound.utf8 > state_start.pos.x) || pre_dat.utf8) chr_type = CE_UTF8; return FANSI_mkChar(*buff, chr_type, i); } /* * All input strings are expected to be in UTF8 compatible format (i.e. either * encoded in UTF8, or contain only bytes in 0-127). That way we know we can * set the encoding to UTF8 if there are any bytes greater than 127, or NATIVE * otherwise under the assumption that 0-127 is valid in all encodings. * * This should be re-written based on a grammar. * * @param buff a pointer to a buffer struct. We use pointer to a * pointer because it may need to be resized, but we also don't want to * re-allocate the buffer between calls. * @param pre_first, pre_next, strings (and associated meta data) to prepend to * each line; pre_first can be based of of `prefix` or off of `initial` * depending whether we're at the very first line of the external input or not * @param strict whether to hard wrap at width or not (not is what strwrap does * by default) */ static SEXP strwrap( int width, struct FANSI_prefix_dat pre_first, struct FANSI_prefix_dat pre_next, int wrap_always, struct FANSI_buff * buff, const char * pad_chr, int strip_spaces, int first_only, R_xlen_t index, int normalize, int carry, struct FANSI_state state, struct FANSI_state * state_carry, int terminate ) { const char * arg = "x"; int width_1 = FANSI_ADD_INT(width, -pre_first.width); int width_2 = FANSI_ADD_INT(width, -pre_next.width); int width_tar = width_1; if(width < 1 && wrap_always) error("Internal Error: invalid width."); // nocov if(wrap_always && (width_1 < 0 || width_2 < 0)) error("Internal Error: incompatible width/indent/prefix."); // nocov // Use LISTSXP so we don't have to do a two pass process to determine how many // items we're going to have, unless we're in first only in which case we know // we only need one element per and don't actually use these int prt = 0; SEXP char_list_start, char_list; char_list_start = char_list = PROTECT(list1(R_NilValue)); ++prt; int prev_boundary = 0; // tracks if previous char was a boundary int has_boundary = 0; // tracks if at least one boundary in a line int para_start = 1; // byte we previously wrote from, need to track to detect potential infinite // loop when we wrap-always but the wrap width is narrower than a wide // character int first_line = 1; int last_start = 0; int new_line = 1; // Need to keep track of where word boundaries start and end due to // possibility for multiple elements between words if(carry) { state.fmt.sgr = state_carry->fmt.sgr; state.fmt.url = state_carry->fmt.url; } struct FANSI_state state_start, state_bound, state_prev, state_tmp, state_last_bound; state_tmp = state_start = state_last_bound = state; // Blank anchor state in terminate mode if(terminate) FANSI_reset_state(&state_last_bound); // Consume any leading specials (to be re-output) FANSI_read_next(&state_tmp, index, arg); if(state_tmp.status & STAT_SPECIAL) state_start = state_tmp; else state_start.status |= state_tmp.status & STAT_WARNED; state_bound = state_prev = state_start; R_xlen_t size = 0; SEXP res_sxp; while(1) { if(new_line) { // Strip leading spaces and/or SGR new_line = 0; while( (state_bound.string[state_bound.pos.x] == ' ' && strip_spaces) || state_bound.string[state_bound.pos.x] == 0x1b ) { state_tmp = state_bound; FANSI_read_next(&state_tmp, index, arg); // Strip any leading special sequences as we will re-emit them. Stop if // any non-specials as those don't get re-emitted. This corresponds to // substr_ctl(x, 0, n), does. if( state_bound.string[state_bound.pos.x] == 0x1b && !(state_tmp.status & STAT_SPECIAL) ) { // avoid double warnings state_bound.status |= state_tmp.status & STAT_WARNED; break; } state_bound = state_tmp; } has_boundary = 0; state_bound.pos.w = 0; state = state_prev = state_start = state_bound; } struct FANSI_state state_next; int end = !state.string[state.pos.x]; state_next = state; // if we hit end of string, re-use state as next // Look ahead one element if(!end) FANSI_read_next(&state_next, index, arg); if(state_next.status & STAT_WARNED) { // avoid 2x warning state.status |= STAT_WARNED; state_bound.status |= STAT_WARNED; } // Always strip trailing SGR to behave same way as substr_ctl, except if // we're adding padding, or really at end of string. int strip_trail_sgr = (state.status & STAT_SPECIAL) && (!end || terminate) && !((*pad_chr) && state.pos.w < width_tar); // detect word boundaries and paragraph starts; we need to track // state_bound for the special case where we are in strip space mode // and we happen to hit the width in a two space sequence such as we might // get after [.!?]. // // We're ignoring other word boundaries, but strwrap does too. // // Recall that if `strip_spaces == TRUE` string will have already been // processed to remove sequential spaces (except those following sentence // end). if( state.string[state.pos.x] == ' ' || state.string[state.pos.x] == '\t' || state.string[state.pos.x] == '\n' ) { // trailing SGR (end of string case handled later) if(strip_spaces && !prev_boundary) { if(strip_trail_sgr) state_bound = state_prev; else state_bound = state; } else if(!strip_spaces) { state_bound = state; } has_boundary = prev_boundary = 1; } else { if(!has_boundary && state.pos.w == width_tar && strip_trail_sgr) { state_bound = state_prev; } prev_boundary = 0; } // Write the line if if( // 1. At end of string end || // 2. Newlines kept in strtrim mode (state.string[state.pos.x] == '\n' && !first_only) || // 3. Overshot target width (but only if next char isn't zero width) and // there is a boundary or we're willing to hard break ( ( state.pos.w > width_tar || ( state.pos.w == width_tar && state_next.pos.w > state.pos.w // check zero width for next ) ) && (has_boundary || wrap_always) ) ) { // Adjust end point if(end || (wrap_always && !has_boundary) || first_only) { if(wrap_always && !has_boundary) { if(state.pos.w > width_tar){ // wide char overshoot state = state_prev; end = 0; } else if (state.pos.w == width_tar && strip_trail_sgr) { // hard break state = state_prev; } } else if (end && strip_trail_sgr) { // trailing SGR for end of string state = state_prev; } state_bound = state; } if(!first_line && last_start >= state_start.pos.x) { error( "%s%s", "Wrap error: trying to wrap to width narrower than ", "character width; set `wrap.always=FALSE` to resolve." ); } // If not stripping spaces we need to keep the last boundary char; note // that boundary is advanced when strip_spaces == FALSE in earlier code. if( !strip_spaces && has_boundary && ( state_bound.string[state_bound.pos.x] == ' ' || state_bound.string[state_bound.pos.x] == '\t' ) && state_bound.pos.x < state.pos.x ) { FANSI_read_next(&state_bound, index, arg); } // Write the string res_sxp = PROTECT( writeline( state_bound, state_start, state_last_bound, buff, para_start ? pre_first : pre_next, width_tar, pad_chr, index, normalize, terminate ) ); ++prt; first_line = 0; last_start = state_start.pos.x; if(!terminate) state_last_bound = state_bound; // first_only for `strtrim` if(!first_only) { SETCDR(char_list, list1(res_sxp)); char_list = CDR(char_list); UNPROTECT(1); --prt; } else { // Need end state if in strtrim mode and we wish to carry if(carry) FANSI_read_all(&state, index, arg); break; } // overflow should be impossible here since string is at most int long ++size; if(end) break; // Next line will be the beginning of a paragraph para_start = (state.string[state.pos.x] == '\n'); width_tar = para_start ? width_1 : width_2; // Recreate what the state is at the wrap point, including skipping the // wrap character if there was one, and any subsequent leading spaces or // SGR if there are any and we are in strip_space mode. If there was no // boundary then we're hard breaking and we reset position to the next // position. if(has_boundary && para_start) { do FANSI_read_next(&state_bound, index, arg); while (state_bound.status & STAT_SPECIAL); } else if(!has_boundary) { state_bound = state; } new_line = 1; } else { state_prev = state; state = state_next; } } // Convert to string and return; this is a little inefficient for the // `first_only` mode as ideally we would just return a CHARSXP, but for now we // are just trying to keep it simple SEXP res; if(!first_only) { res = PROTECT(allocVector(STRSXP, size)); ++prt; char_list = char_list_start; for(R_xlen_t i = 0; i < size; ++i) { char_list = CDR(char_list); // first element is NULL if(char_list == R_NilValue) error("Internal Error: wrapped element count mismatch"); // nocov SET_STRING_ELT(res, i, CAR(char_list)); } if(CDR(char_list) != R_NilValue) error("Internal Error: wrapped element count mismatch 2"); // nocov } else { // recall there is an extra open PROTECT in first_only mode res = res_sxp; } UNPROTECT(prt); state_carry->fmt.sgr = state.fmt.sgr; state_carry->fmt.url = state.fmt.url; return res; } /* * All integer inputs are expected to be positive, which should be enforced by * the R interface checks. * * @param strict whether to force a hard cut in-word when a full word violates * the width limit on its own * @param first_only whether we only want the first line of a wrapped element, * this is to support strtrim. If this is true then the return value becomes a * character vector (STRSXP) rather than a VECSXP */ SEXP FANSI_strwrap_ext( SEXP x, SEXP width, SEXP indent, SEXP exdent, SEXP prefix, SEXP initial, SEXP wrap_always, SEXP pad_end, SEXP strip_spaces, SEXP tabs_as_spaces, SEXP tab_stops, SEXP warn, SEXP term_cap, SEXP first_only, SEXP ctl, SEXP norm, SEXP carry, SEXP terminate ) { FANSI_val_args(x, norm, carry); // FANSI_state_init does validations too if( TYPEOF(width) != INTSXP || TYPEOF(indent) != INTSXP || TYPEOF(exdent) != INTSXP || TYPEOF(prefix) != STRSXP || TYPEOF(initial) != STRSXP || TYPEOF(wrap_always) != LGLSXP || TYPEOF(pad_end) != STRSXP || TYPEOF(strip_spaces) != LGLSXP || TYPEOF(tabs_as_spaces) != LGLSXP || TYPEOF(tab_stops) != INTSXP || TYPEOF(first_only) != LGLSXP || TYPEOF(terminate) != LGLSXP ) error("Internal Error: arg type error 1; contact maintainer."); // nocov int normalize = asLogical(norm); int prt = 0; const char * pad = CHAR(asChar(pad_end)); if(*pad != 0 && (*pad < 0x20 || *pad > 0x7e)) error( "%s%s", "Argument `pad.end` must be an empty string or a single ", "printable ASCII character." ); // Prepare the leading strings; could turn out to be wasteful if we don't // need them all; there are three possible combinations: 1) first line of the // entire input with indent, 2) first line of paragraph with prefix and // indent, 3) other lines with prefix and exdent. struct FANSI_prefix_dat pre_dat_raw, ini_dat_raw, ini_first_dat, pre_first_dat, pre_next_dat; int indent_int = asInteger(indent); int exdent_int = asInteger(exdent); int first_only_int = asInteger(first_only); if(indent_int < 0 || exdent_int < 0) error("Internal Error: illegal indent/exdent values."); // nocov pre_dat_raw = make_pre(prefix, warn, term_cap, ctl, "prefix"); if(prefix != initial) { ini_dat_raw = make_pre(initial, warn, term_cap, ctl, "initial"); } else ini_dat_raw = pre_dat_raw; ini_first_dat = pad_pre(ini_dat_raw, indent_int); if(initial != prefix) { pre_first_dat = pad_pre(pre_dat_raw, indent_int); } else pre_first_dat = ini_first_dat; if(indent_int != exdent_int) { pre_next_dat = pad_pre(pre_dat_raw, exdent_int); } else pre_next_dat = pre_first_dat; // Set up the buffer, this will be created in FANSI_strwrap, but we want a // handle for it here so we can re-use. // WARNING: must be after pad_pre as pad_pre uses R_alloc. struct FANSI_buff buff; FANSI_INIT_BUFF(&buff); // Strip whitespaces as needed; `strwrap` doesn't seem to do this with prefix // and initial, so we don't either int strip_spaces_int = asInteger(strip_spaces); if(strip_spaces_int) { x = PROTECT(FANSI_process(x, term_cap, ctl, &buff)); ++prt; } // and tabs if(asInteger(tabs_as_spaces)) { x = PROTECT(FANSI_tabs_as_spaces(x, tab_stops, &buff, warn, term_cap, ctl)); ++prt; prefix = PROTECT( FANSI_tabs_as_spaces(prefix, tab_stops, &buff, warn, term_cap, ctl) ); ++prt; initial = PROTECT( FANSI_tabs_as_spaces(initial, tab_stops, &buff, warn, term_cap, ctl) ); ++prt; } // Check that widths are feasible, although really only relevant if in strict // mode int width_int = asInteger(width); int wrap_always_int = asInteger(wrap_always); if( wrap_always_int && ( ini_first_dat.width >= width_int || pre_first_dat.width >= width_int || pre_next_dat.width >= width_int ) ) error( "%s%s", "Width error: sum of `indent` and `initial` width or sum of `exdent` ", "and `prefix` width must be less than `width - 1` when in `wrap.always`." ); // Prep for carry int do_carry = STRING_ELT(carry, 0) != NA_STRING; int any_na = 0; struct FANSI_state state_carry = FANSI_carry_init(carry, warn, term_cap, ctl); // Could be a little faster avoiding this allocation if it turns out nothing // needs to be wrapped and we're in simplify=TRUE, but that seems like a lot // of work for a rare event R_xlen_t i, x_len = XLENGTH(x); SEXP res; if(first_only_int) { // this is to support trim mode res = PROTECT(allocVector(STRSXP, x_len)); ++prt; } else { res = PROTECT(allocVector(VECSXP, x_len)); ++prt; } SEXP R_true = PROTECT(ScalarLogical(1)); ++prt; SEXP R_one = PROTECT(ScalarInteger(1)); ++prt; struct FANSI_state state; // Wrap each element for(i = 0; i < x_len; ++i) { if(!i) { state = FANSI_state_init_full( x, warn, term_cap, R_true, R_true, R_one, ctl, i ); } else FANSI_state_reinit(&state, x, i); FANSI_interrupt(i); // strtrim treats NA as NA, but strwrap treats it as the string "NA" if( first_only_int && ( STRING_ELT(x, i) == NA_STRING || (do_carry && any_na) ) ) { any_na = TRUE; SET_STRING_ELT(res, i, NA_STRING); continue; } // Implicitly treat NAs like the string 'NA' as the base version does SEXP str_i = PROTECT( strwrap( width_int, i ? pre_first_dat : ini_first_dat, pre_next_dat, wrap_always_int, &buff, CHAR(asChar(pad_end)), strip_spaces_int, first_only_int, i, normalize, do_carry, state, &state_carry, asLogical(terminate) ) ); if(first_only_int) { SET_STRING_ELT(res, i, str_i); } else { SET_VECTOR_ELT(res, i, str_i); } UNPROTECT(1); } FANSI_release_buff(&buff, 1); UNPROTECT(prt); return res; } fansi/src/utf8.c0000644000176200001440000000437515106721052013203 0ustar liggesusers/* * Copyright (C) Brodie Gaslam * * This file is part of "fansi - ANSI Control Sequence Aware String Functions" * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Go to for a copies of the licenses. */ #include "fansi.h" // Most of the code here has been move to read.c /* * We need to translate to UTF8 any time that we care about string width as we * that's how we compute the unicode code points. * * Other than that, we don't actually care about the string encoding, though the * implicit assumption is that a) anything 127 and under is ASCII, and * additionally that no Control Sequence is going to have anything above 127 in * it. */ /* * Confirm encoding is not obviously wrong, and length okay. */ void FANSI_check_chrsxp(SEXP x, R_xlen_t i) { if(TYPEOF(x) != CHARSXP) error("Internal Error: expected CHARSXP."); // nocov cetype_t type = getCharCE(x); if(type != CE_NATIVE && type != CE_UTF8) { if(type == CE_BYTES) error( "%s at index %jd. %s.", "Byte encoded string encountered", FANSI_ind(i), "Byte encoded strings are not supported" ); else // this should only happen if somehow a string not converted to UTF8 // sneaks in. error( "%s %d encountered at index %jd. %s.", "Internal Error: unexpected encoding", type, FANSI_ind(i), "Contact maintainer" ); } if(LENGTH(x) > FANSI_lim.lim_int.max) { error( "Strings longer than INT_MAX not supported (length %jd at index %jd).", (intmax_t)(LENGTH(x)), FANSI_ind(i) ); } } /* * Testing interface */ SEXP FANSI_check_enc_ext(SEXP x, SEXP i) { if(TYPEOF(x) != STRSXP) error("Internal Error: expected character input."); // nocov FANSI_check_chrsxp(STRING_ELT(x, asInteger(i) - 1), asInteger(i) - 1); return ScalarLogical(1); } fansi/src/assumptions.c0000644000176200001440000001104314533476156014707 0ustar liggesusers/* * Copyright (C) Brodie Gaslam * * This file is part of "fansi - ANSI Control Sequence Aware String Functions" * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Go to for a copies of the licenses. */ #include #include #include #include "fansi.h" /* * Check all the assumptions we're making * * Intended to be run onload to make sure there isn't some weird system where * our baseline assumptions are not met * * returns TRUE on success, but throws warnings. */ static void check_limits(void) { if( // Signed FANSI_lim.lim_int.max < 1 || FANSI_lim.lim_int.min > -1 || FANSI_lim.lim_R_len_t.max < 1 || FANSI_lim.lim_R_len_t.min != 0 || FANSI_lim.lim_R_xlen_t.max < 1 || FANSI_lim.lim_R_xlen_t.min != 0 || // Unsigned FANSI_lim.lim_size_t.max < 1U || FANSI_lim.lim_size_t.min != 0U ) error("Invalid custom limit; contact maintainer."); // nocov } // nocov start // by definition none of the errors should be thrown, so no sense in // covering this SEXP FANSI_check_assumptions(void) { const char * err_base = "Failed system assumption: %s%s; please contact maintainer."; // Check custom limits check_limits(); // Otherwise bit twiddling assumptions may not work as expected? if(CHAR_BIT != 8) warningcall(R_NilValue, err_base, "CHAR_BIT is not 8", ""); // This is supposedly enforced by R, and we rely on it in several places (e.g. // to ensure bitmask large enough for styles) if(sizeof(int) != 4) warningcall(R_NilValue, err_base, "ints are not 32 bits", ""); // If this is not TRUE, there could be alignment issues for some of our // structs that use size_t elements given that R_alloc only guarantees double // alignment. if(sizeof(size_t) > sizeof(double)) warningcall( R_NilValue, err_base, "size_t larger than double may cause alignment issues." ); // Important for some our boundary condition assumptions, in particular that // NA_INTEGER < int x. if(FANSI_lim.lim_int.min != NA_INTEGER) { warningcall( R_NilValue, err_base, "INT_MIN != NA_INTEGER but the code in this ", "package assumes that they are equal" ); } // This also doesn't check R_LEN_T_MAX, should be possible to remove this // assumption as we started to for html with fansi 0.5.0 by doing everything // in int and checking on entry and on exit it conforms with R_len_t. if(sizeof(R_len_t) != sizeof(int)) warningcall(R_NilValue, err_base, "R_len_t not same size as int", ""); // Because we check that strings are no longer than this, but then allocate // memory as INT_MAX + 1 with a size_t, so need to make sure that fits // Update: now runtime check with fansi 0.5.0, at least for html, might still // need to check in normal use. if(FANSI_lim.lim_size_t.max - 1 < (uintmax_t)FANSI_lim.lim_int.max) warningcall( R_NilValue, err_base, "SIZE_MAX not sufficiently larger than INT_MAX", "" ); if(FANSI_lim.lim_size_t.max - 1 < (uintmax_t)FANSI_lim.lim_R_len_t.max) warningcall( R_NilValue, err_base, "SIZE_MAX not sufficiently larger than R_LEN_T_MAX", "" ); // We allocate memory in multiples of the length of an input vector. It's // thus helpful to be sure that no R_xlen_t value can overflow SIZE_MAX. if((uintmax_t)FANSI_lim.lim_R_xlen_t.max > FANSI_lim.lim_size_t.max) warningcall( R_NilValue, err_base, "R_XLEN_TMAX larger than SIZE_MAX", "" ); if((uintmax_t)FANSI_lim.lim_int.max > FANSI_lim.lim_size_t.max) warningcall( R_NilValue, err_base, "INT_MAX larger than SIZE_MAX", "" ); if(FANSI_lim.lim_int.max > FANSI_lim.lim_R_xlen_t.max) warningcall( R_NilValue, err_base, "INT_MAX larger than R_XLEN_T_MAX", "" ); // We ensure strings don't exceed INT_MAX as we create them, but we do // measure string length by doing end - start on pointers. intmax_t to // suppress compiler warning if((intmax_t)PTRDIFF_MAX < (intmax_t)FANSI_lim.lim_int.max) warningcall( R_NilValue, err_base, "PTRDIFF_MAX smaller than INT_MAX", "" ); return ScalarLogical(1); } // nocov end fansi/src/unhandled.c0000644000176200001440000001337214622201033014246 0ustar liggesusers/* * Copyright (C) Brodie Gaslam * * This file is part of "fansi - ANSI Control Sequence Aware String Functions" * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Go to for a copies of the licenses. */ #include "fansi.h" SEXP FANSI_unhandled_esc(SEXP x, SEXP term_cap) { if(TYPEOF(x) != STRSXP) error("Argument `x` must be a character vector."); // nocov if(TYPEOF(term_cap) != INTSXP) error("Argument `term_cap` must be an integer vector."); // nocov R_xlen_t x_len = XLENGTH(x); if(x_len >= FANSI_lim.lim_int.max) // nocov start error( "This function does not support vectors of length INT_MAX or longer." ); // nocov end SEXP R_true = PROTECT(ScalarLogical(1)); SEXP R_one = PROTECT(ScalarInteger(1)); SEXP no_warn = PROTECT(ScalarInteger(0)); SEXP ctl_all = PROTECT(ScalarInteger(0)); SEXP res, res_start, allowNA, keepNA, width; res = res_start = R_NilValue; allowNA = keepNA = R_true; width = R_one; // reserve spot if we need to alloc later PROTECT_INDEX ipx; PROTECT_WITH_INDEX(res, &ipx); int any_errors = 0; int err_count = 0; int break_early = 0; struct FANSI_state state; const char * arg = "x"; for(R_xlen_t i = 0; i < x_len; ++i) { FANSI_interrupt(i); SEXP chrsxp = STRING_ELT(x, i); if(!i) { state = FANSI_state_init_full( x, no_warn, term_cap, allowNA, keepNA, width, ctl_all, i ); // Read one escape at a time state.settings |= SET_ESCONE; } else FANSI_state_reinit(&state, x, i); if(chrsxp != NA_STRING && LENGTH(chrsxp)) { int has_errors = 0; int ctl_bytes_all = 0; while(state.string[state.pos.x]) { // Since we don't care about width, etc, we only use the state objects // to parse the ESC sequences and UTF8 characters. int esc_start = state.pos.w + ctl_bytes_all; int esc_start_byte = state.pos.x; int ctl_bytes = 0; FANSI_read_next(&state, i, arg); if(state.status & CTL_MASK) { ctl_bytes = state.pos.x - esc_start_byte; ctl_bytes_all += ctl_bytes; } if(FANSI_GET_ERR(state.status)) { if(err_count == FANSI_lim.lim_int.max) { warning( "%s%s", "There are more than INT_MAX unhandled sequences, returning ", "first INT_MAX errors." ); break_early = 1; break; } if(!has_errors) has_errors = 1; SEXP err_vals = PROTECT(allocVector(INTSXP, 7)); INTEGER(err_vals)[0] = i + 1; INTEGER(err_vals)[1] = esc_start + 1; INTEGER(err_vals)[2] = state.pos.w + ctl_bytes_all; INTEGER(err_vals)[3] = FANSI_GET_ERR(state.status); INTEGER(err_vals)[4] = 0; // need actual bytes so we can substring the problematic sequence, so // we don't use 1 based indexing like with the earlier values INTEGER(err_vals)[5] = esc_start_byte; INTEGER(err_vals)[6] = state.pos.x - 1; SEXP err_vals_list = PROTECT(list1(err_vals)); if(!any_errors) { any_errors = 1; REPROTECT(err_vals_list, ipx); res = res_start = err_vals_list; } else { SETCDR(res, err_vals_list); res = CDR(res); } ++err_count; UNPROTECT(2); } } if(break_early) break; } } // Convert result to a list that we could easily turn into a DFs SEXP res_fin = PROTECT(allocVector(VECSXP, 6)); SEXP res_idx = PROTECT(allocVector(INTSXP, err_count)); SEXP res_esc_start = PROTECT(allocVector(INTSXP, err_count)); SEXP res_esc_end = PROTECT(allocVector(INTSXP, err_count)); SEXP res_err_code = PROTECT(allocVector(INTSXP, err_count)); SEXP res_translated = PROTECT(allocVector(LGLSXP, err_count)); SEXP res_string = PROTECT(allocVector(STRSXP, err_count)); res = res_start; for(int i = 0; i < err_count; ++i) { FANSI_interrupt((R_xlen_t) i); if(res == R_NilValue) // nocov start error( "Internal Error: mismatch between list and err count; " "contact maintainer." ); // nocov end INTEGER(res_idx)[i] = INTEGER(CAR(res))[0]; INTEGER(res_esc_start)[i] = INTEGER(CAR(res))[1]; INTEGER(res_esc_end)[i] = INTEGER(CAR(res))[2]; INTEGER(res_err_code)[i] = INTEGER(CAR(res))[3]; LOGICAL(res_translated)[i] = INTEGER(CAR(res))[4]; int byte_start = INTEGER(CAR(res))[5]; int byte_end = INTEGER(CAR(res))[6]; SEXP cur_chrsxp = STRING_ELT(x, INTEGER(res_idx)[i] - 1); if( byte_start < 0 || byte_end < 0 || byte_start >= LENGTH(cur_chrsxp) || byte_end >= LENGTH(cur_chrsxp) ) // nocov start error( "%s%s", "Internal Error: illegal byte offsets for extracting unhandled seq; ", "contact maintainer." ); // nocov end SET_STRING_ELT(res_string, i, mkCharLenCE( CHAR(cur_chrsxp) + byte_start, byte_end - byte_start + 1, getCharCE(cur_chrsxp) ) ); res = CDR(res); } SET_VECTOR_ELT(res_fin, 0, res_idx); SET_VECTOR_ELT(res_fin, 1, res_esc_start); SET_VECTOR_ELT(res_fin, 2, res_esc_end); SET_VECTOR_ELT(res_fin, 3, res_err_code); SET_VECTOR_ELT(res_fin, 4, res_translated); SET_VECTOR_ELT(res_fin, 5, res_string); UNPROTECT(12); return res_fin; } fansi/src/substr.c0000644000176200001440000003666414533476156013664 0ustar liggesusers/* * Copyright (C) Brodie Gaslam * * This file is part of "fansi - ANSI Control Sequence Aware String Functions" * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Go to for a copies of the licenses. */ #include "fansi.h" static int has_8bit(const char * x) { while((unsigned char)(*x) > 0 && (unsigned char)(*x) < 0xff) ++x; return !(*x); } /* * Compute start and end states for a single substring. Results are "returned" * by modifying the by-ref structs. * * Calling script needs to decided what to do when stop < start; this code will * assume state_stop >= state_start. * * @param state_start starting state, will be overwritten. * @param state_stop write only. * @return width of substring, in whatever width units have been selected. */ static int substr_range( struct FANSI_state * state_start, struct FANSI_state * state_stop, R_xlen_t i, int start, int stop, int rnd_i, int term_i, const char * arg ) { *state_stop = *state_start; int start0 = start - 1; // start wants the beginning byte // - Start Point ----------------------------------------------------------- struct FANSI_state state_tmp; int overshoot = !(rnd_i == RND_START || rnd_i == RND_BOTH); int mode = 0; // start wants the beginning byte // Always consume leading controls, unless starting before string, in which // case don't consume them (except specials, which are re-output so // semantically equivalent to consume them). if(start0 < 0 && stop > 0) { state_tmp = *state_start; FANSI_read_next(&state_tmp, i, arg); if(state_tmp.status & STAT_SPECIAL) *state_start = state_tmp; state_start->status |= state_tmp.status & STAT_WARNED; } else { FANSI_read_until(state_start, start0, overshoot, term_i, mode, i, arg); } // - End Point ------------------------------------------------------------- *state_stop = *state_start; overshoot = (rnd_i == RND_STOP || rnd_i == RND_BOTH); mode = 1; // stop wants the last byte FANSI_read_until(state_stop, stop, overshoot, term_i, mode, i, arg); if(state_start->pos.x > state_stop->pos.x) { error("Internal Error: bad `stop` state 2."); // nocov } return state_stop->pos.w - state_start->pos.w; } /* * @param state modified by reference. * @param state_ref state at end of previous extracted substring. * @param mode whether in measure (0) or write (1) mode * @return if in measure, an integer vector with the size of the substring, * otherwise the substring. */ static SEXP substr_one( struct FANSI_state * state, struct FANSI_state ref, struct FANSI_buff * buff, R_xlen_t i, int start, int stop, int rnd_i, int norm_i, int term_i ) { struct FANSI_state state_start, state_stop; state_start = state_stop = *state; if(term_i) FANSI_reset_state(state); else state->fmt = ref.fmt; const char * arg = "x"; substr_range( &state_start, &state_stop, i, start, stop, rnd_i, term_i, arg ); // - Extract --------------------------------------------------------------- SEXP res; int empty_string = state_stop.pos.x == state_start.pos.x; if(!(empty_string && term_i) && stop > 0 && stop >= start) { // Measure/Write loop (see src/write.c), this is adapted from wrap.c const char * err_msg = "Writing substring"; for(int k = 0; k < 2; ++k) { if(!k) FANSI_reset_buff(buff); else FANSI_size_buff(buff); // Use bridge do write opening styles to account for potential carry and // similar in the input state. FANSI_W_bridge(buff, *state, state_start, norm_i, i, err_msg); // Actual string, remember state_stop.pos.x is one past what we need int stop = state_stop.pos.x; FANSI_W_normalize_or_copy( buff, state_start, norm_i, stop, i, err_msg, arg ); // And turn off CSI styles if needed if(term_i) FANSI_W_close(buff, state_stop.fmt, norm_i, i); } cetype_t chr_type = CE_NATIVE; if(state_stop.utf8 > state_start.pos.x) chr_type = CE_UTF8; res = FANSI_mkChar(*buff, chr_type, i); } else { res = R_BlankString; } // Carry handled in `substr_extract` *state = state_stop; return res; } // Extract Substring (`substr_ctl`) static SEXP substr_extract( SEXP x, SEXP start, SEXP stop, SEXP carry, struct FANSI_state state, struct FANSI_buff * buff, int rnd_i, int norm_i, int term_i ) { R_xlen_t len = XLENGTH(x); if(len < 1) error("Internal Error: must have at least one value."); int prt = 0; SEXP res = PROTECT(allocVector(STRSXP, len)); ++prt; // Prep for carry. ref needed to account for state changes that occur outside // of the substring so the next element knows to apply them. int carry_i = STRING_ELT(carry, 0) != NA_STRING; struct FANSI_state state_carry, state_ref; state_carry = state; if(carry_i) { state_carry.string = CHAR(STRING_ELT(carry, 0)); FANSI_read_all(&state_carry, 0, "carry"); } // assume carry is active for 1st iteration. It may not be the case in later // iteratins where the end of the string may not be captured in the substring. state_ref = state_carry; int * start_i = INTEGER(start); int * stop_i = INTEGER(stop); int any_na = 0; const char * arg = "x"; for(R_xlen_t i = 0; i < len; ++i) { FANSI_interrupt(i); FANSI_state_reinit(&state, x, i); int start_ii = start_i[i]; int stop_ii = stop_i[i]; if( STRING_ELT(x, i) == NA_STRING || start_ii == NA_INTEGER || stop_ii == NA_INTEGER || (any_na && carry_i) ) { any_na = any_na || STRING_ELT(x, i) == NA_STRING; SET_STRING_ELT(res, i, NA_STRING); } else { // We do the full process even if stop_ii < start_ii for consistency if(carry_i) state.fmt = state_carry.fmt; SET_STRING_ELT( res, i, substr_one( &state, state_ref, buff, i, start_ii, stop_ii, rnd_i, norm_i, term_i ) );} if(carry_i && STRING_ELT(x, i) != NA_STRING) { state_ref = state; FANSI_read_all(&state, i, arg); state_carry.fmt = state.fmt; } } UNPROTECT(prt); return res; } // Replace Substring (`substr_ctl<-`) static SEXP substr_replace( SEXP x, SEXP start, SEXP stop, SEXP value, SEXP carry, struct FANSI_state state, struct FANSI_buff * buff, int rnd_i, int norm_i, int term_i ) { R_xlen_t len = XLENGTH(x); if(len < 1) error("Internal Error: must have at least one value."); // nocov if(XLENGTH(value) != len) error("Internal Error: `x` and `value` length mismatch."); // nocov int prt = 0; SEXP res = PROTECT(allocVector(STRSXP, len)); ++prt; int * start_i = INTEGER(start); int * stop_i = INTEGER(stop); int carry_i = STRING_ELT(carry, 0) != NA_STRING; int write_ld, write_tr, write_md, any_na; write_ld = write_tr = write_md = any_na = 0; struct FANSI_state st_x0, st_x1, st_x2, st_xlast, st_xref, st_v0, st_v1, st_vlast, st_vref; st_x2 = st_x1 = st_xlast = st_xref = st_v0 = st_v1 = st_vlast = st_vref = state; for(R_xlen_t i = 0; i < len; ++i) { FANSI_interrupt(i); if( STRING_ELT(x, i) == NA_STRING || STRING_ELT(value, i) == NA_STRING || (carry_i && any_na) ) { any_na = 1; SET_STRING_ELT(res, i, NA_STRING); continue; } // - Setup ----------------------------------------------------------------- // Reference state is the end of the last written substring. if(!term_i && write_md) st_vref = st_v1; // initial init done in caller as really all we're doing is setting all the // fixed parameters in the object. st_x0 = st_x2; FANSI_state_reinit(&st_x0, x, i); FANSI_state_reinit(&st_v0, value, i); if(carry_i == 1) { st_x0.fmt = st_xlast.fmt; st_v0.fmt = st_vlast.fmt; } st_x2 = st_x1 = st_x0; // Remember that start/stop are 1 indexed, but bounds are "zero" indexed. // (they are just a measure of width accrued prior to point). int start_ii, stop_ii, stop_ld, start_tr, start_v, stop_v; start_ii = start_i[i]; stop_ii = stop_i[i]; // ld = lead, tr = trail stop_ld = start_ii < 1 ? 1 : start_ii; start_tr = stop_ii + 1; start_v = 1; stop_v = start_tr - stop_ld; // - Compute Lengths ------------------------------------------------------- // For `x` the start and end points we're computing are for the string we're // REMOVING, so logic is a bit weird. // // In: substr_ctl(x, 3, 5) <- v // 1 2 3 4 5 6 // .x.x.x.x.x.x.x.x .v.v.v // | | | | // x0 x1 v0 v1 // We want the values in _x0 and _x1, using _x2 as dummy in the first call // as we don't care about preserving the very start point. We don't need to // read the entire trail, we just need to check it has at leas one "char". substr_range(&st_x2, &st_x0, i, 1, stop_ld - 1, rnd_i, term_i, "x"); // trail of x, we just need the first character position since // we're going to copy the entire string after that. substr_range(&st_x1, &st_x2, i, start_tr, start_tr, rnd_i, term_i, "x"); // More straightforward for the `value` substr_range(&st_v0, &st_v1, i, start_v, stop_v, rnd_i, term_i, "value"); int size_x = st_x1.pos.w - st_x0.pos.w; int size_v = st_v1.pos.w - st_v0.pos.w; // Adjustments if substring does not fit exactly if(size_v > size_x) { // Reduce the size of the replacement by 1 to see if it fits that way. // Implicit here is that the widths are all either 1 or 2, which may not // be the case when a \U code is rendered (but that should only be for // EncodeString, which we don't care about). stop_v = stop_v - 1; substr_range(&st_v0, &st_v1, i, start_v, stop_v, rnd_i, term_i, "value"); size_v = st_v1.pos.w - st_v0.pos.w; if(size_v > size_x) { // Reduction didn't work, collapse size_v; st_v1 = st_v0; size_v = 0; stop_v = start_v - 1; } } if (size_v < size_x) { // Scooch forward trail by gap amount if replacement is too small struct FANSI_state st_x11, st_x21; st_x11 = st_x0; int start_tr2 = st_x1.pos.w - (size_x - size_v) + 1; substr_range( &st_x11, &st_x21, i, start_tr2, start_tr, rnd_i, term_i, "x" ); int size_x1 = st_x11.pos.w - st_x0.pos.w; if(size_v <= size_x1) { start_tr = start_tr2; // We explicilty do not reset _x2 as that doesn't move st_x1 = st_x11; } } // - Extract String -------------------------------------------------------- // Which portions of the strings are we actually writing out? // tr = trail, ld = lead, md = mid (`value`). The semantics are // "what you selected gets replaced", so that lead/trail sequences are left // in unless you clearly select past them on each side. write_ld = start_ii > 0 && (st_x0.pos.w > 0 || !(st_x0.status & CTL_ALL) || !term_i); write_md = (stop_ii >= start_ii) && (st_v1.pos.x > st_v0.pos.x || !term_i); write_tr = (start_tr - 1) <= st_x2.pos.w; // stop_ii isn't scooched // We've done unncessary work for the cases where the things to write are // empty, but easier to keep things straight this way. const char * err_msg = "Replacing substring"; const char * x1_string = ""; if(write_md) { for(int k = 0; k < 2; ++k) { if(!k) FANSI_reset_buff(buff); else FANSI_size_buff(buff); // Lead if(write_ld) { FANSI_W_MCOPY(buff, st_x0.string, st_x0.pos.x); if(term_i) FANSI_W_close(buff, st_x0.fmt, norm_i, i); } // Replacement if(write_md) { FANSI_W_bridge(buff, st_vref, st_v0, norm_i, i, err_msg); FANSI_W_normalize_or_copy( buff, st_v0, norm_i, st_v1.pos.x, i, err_msg, "value" ); if(term_i) FANSI_W_close(buff, st_v1.fmt, norm_i, i); } // Trailing string if(write_tr) { if(write_ld && !term_i) st_xref = st_x0; FANSI_W_bridge(buff, st_xref, st_x1, norm_i, i, err_msg); int x_bytes = strlen(st_x1.string) - st_x1.pos.x; x1_string = st_x1.string + st_x1.pos.x; FANSI_W_MCOPY(buff, x1_string, x_bytes); } } int has_utf8 = st_x1.utf8 || st_v1.utf8; if(carry_i) { st_xlast = st_x1; FANSI_read_all(&st_xlast, i, "x"); st_vlast = st_v1; FANSI_read_all(&st_vlast, i, "value"); has_utf8 = has_utf8 || st_xlast.utf8 > st_x0.pos.x; } else { has_utf8 = has_utf8 || has_8bit(x1_string); } cetype_t chr_type = CE_NATIVE; if(has_utf8) chr_type = CE_UTF8; SET_STRING_ELT(res, i, FANSI_mkChar(*buff, chr_type, i)); } else { SET_STRING_ELT(res, i, STRING_ELT(x, i)); } } UNPROTECT(prt); return res; } SEXP FANSI_substr( SEXP x, SEXP start, SEXP stop, SEXP value, SEXP type, SEXP rnd, SEXP warn, SEXP term_cap, SEXP ctl, SEXP norm, SEXP carry, SEXP terminate ) { if(TYPEOF(start) != INTSXP) error("Internal Error: invalid `start`.");// nocov if(TYPEOF(stop) != INTSXP) error("Internal Error: invalid `stop`."); // nocov if(TYPEOF(rnd) != INTSXP || XLENGTH(rnd) != 1) error("Internal Error: invalid `rnd`."); // nocov if(!FANSI_is_tf(terminate)) error("Internal Error: invalid `terminate`."); // nocov if(TYPEOF(type) == INTSXP && XLENGTH(type) == 1) { switch(asInteger(type)) { case COUNT_CHARS: case COUNT_WIDTH: case COUNT_GRAPH: break; default: error("Internal Error: invalid `type` for `substr`."); // nocov } } if( (TYPEOF(value) != NILSXP && TYPEOF(value) != STRSXP) || (TYPEOF(value) == STRSXP && XLENGTH(value) != XLENGTH(x)) ) error("Internal Error: invalid `value`."); // nocov FANSI_val_args(x, norm, carry); int rnd_i = asInteger(rnd); int norm_i = asLogical(norm); int term_i = asLogical(terminate); R_xlen_t len = XLENGTH(x); R_xlen_t start_l = XLENGTH(start); R_xlen_t stop_l = XLENGTH(stop); // Unclear whether recycling explicitly is better / worse than taking the // modulo. Presumably it is worse, but since modulo is often division maybe // not. But then maybe ALTREP helps (probably not, INTEGER()) might defeat it. // Need to confirm modulo on 1 and on a number greater are fast. Right now we // recycle explicitly in VAL_IN_ENV if(len != start_l || len != stop_l) error("Internal Error: start/stop not same length as x."); // nocov int prt = 0; struct FANSI_buff buff; FANSI_INIT_BUFF(&buff); struct FANSI_state state; SEXP res; if(len) { SEXP allowNA, keepNA; allowNA = keepNA = PROTECT(ScalarLogical(0)); ++prt; state = FANSI_state_init_full( x, warn, term_cap, allowNA, keepNA, type, ctl, (R_xlen_t) 0 ); // Note, UNPROTECT'ed SEXPs returned below if(value == R_NilValue) { res = substr_extract( x, start, stop, carry, state, &buff, rnd_i, norm_i, term_i ); } else { res = substr_replace( x, start, stop, value, carry, state, &buff, rnd_i, norm_i, term_i ); } } else res = allocVector(STRSXP, len); PROTECT(res); ++prt; FANSI_release_buff(&buff, 1); UNPROTECT(prt); return res; } fansi/src/utf8clen.h0000644000176200001440000000465414533476156014071 0ustar liggesusers/* * Copyright (C) Brodie Gaslam * * This file is part of "fansi - ANSI Control Sequence Aware String Functions" * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Go to for a copies of the licenses. */ /* * Code adapted from src/main/util.c in the R sources. Original copyright * follows */ /* * R : A Computer Language for Statistical Data Analysis * Copyright (C) 1997--2022 The R Core Team * Copyright (C) 1995, 1996 Robert Gentleman and Ross Ihaka * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, a copy is available at * https://www.R-project.org/Licenses/ */ /* This code is actually not completely compliant, but we're just trying to * match R behavior rather than the correct UTF8 decoding. Among other things * note that this allows 5-6 byte encodings which are no longer valid. */ /* Number of additional bytes */ static const unsigned char utf8_table4[] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 }; static int utf8clen(const char * c, int * mb_err) { /* This allows through 8-bit chars 10xxxxxx, which are invalid */ int res = 0; if ((*c & 0xc0) != 0xc0) res = 1; else res = 1 + utf8_table4[*c & 0x3f]; // Make sure string doesn't end before UTF8 char supposedly does for(int i = 1; i < res; ++i) { if(!*(c + i)) { *mb_err = 1; res = i; break; } } return res; } fansi/src/fansi.h0000644000176200001440000001551715106721052013422 0ustar liggesusers/* * Copyright (C) Brodie Gaslam * * This file is part of "fansi - ANSI Control Sequence Aware String Functions" * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Go to for a copies of the licenses. */ #ifndef _FANSI_H #define _FANSI_H #include #include #include #include #include "fansi-cnst.h" #include "fansi-struct.h" // macros #define FANSI_ADD_INT(x, y) FANSI_add_int((x), (y), __FILE__, __LINE__) // Set or Get range of bits with offset `offset` and range `mask`. // // We could in theory have a table with all this info, but then would it be // slower to look up than providing all the constants in line? The advantage of // the table is we can auto-fill it an be less likely to make mistakes in // specifying the constants, and then we have fewer shifts. // // See fansi-cnst.h, SET_*, STAT_*. // // Needed by state.c, read.c, state.c // // @param offset how many bits to offset into the unsigned int. // @param bits the mask right shifted by the offset. #define FANSI_GET_RNG(x, offset, bits) (((x) >> (offset)) & (bits)) #define FANSI_SET_RNG(x, offset, bits, val) \ (((x) & ~((bits) << (offset))) | ((val) << (offset))) #define FANSI_GET_ERR(x) \ FANSI_GET_RNG((x), STAT_ERR_START, STAT_ERR_ALL) #define URL_STRING(x) ((x).string + (x).url.start) #define URL_LEN(x) ((x).url.len) #define ID_STRING(x) ((x).string + (x).id.start) #define ID_LEN(x) ((x).id.len) // Names of these are not quite correct #define IS_PRINT(x) ((unsigned char)(x) < 0x7F && (unsigned char)(x) >= 0x20) #define IS_UTF8(x) ((unsigned char)(x) > 0x7F) #define IS_ESC(x) ((unsigned char)(x) == 0x1B) // - Internal funs ----------------------------------------------------------- SEXP FANSI_process( SEXP input, SEXP term_cap, SEXP ctl, struct FANSI_buff *buff ); SEXP FANSI_tabs_as_spaces( SEXP vec, SEXP tab_stops, struct FANSI_buff * buff, SEXP warn, SEXP term_cap, SEXP ctl ); int FANSI_find_ctl( struct FANSI_state * state, R_xlen_t i, const char * arg ); void FANSI_reset_pos(struct FANSI_state * state); void FANSI_reset_width(struct FANSI_state * state); void FANSI_reset_state(struct FANSI_state * state); void FANSI_check_chrsxp(SEXP x, R_xlen_t i); unsigned int FANSI_term_cap_as_int(SEXP term_cap); unsigned int FANSI_ctl_as_int(SEXP ctl); void FANSI_init_buff(struct FANSI_buff * buff, const char * fun); #define FANSI_INIT_BUFF(A) FANSI_init_buff((A), __func__) size_t FANSI_size_buff0(struct FANSI_buff * buff, int size); size_t FANSI_size_buff(struct FANSI_buff * buff); int FANSI_release_buff(struct FANSI_buff * buff, int warn); void FANSI_check_buff(struct FANSI_buff buff, R_xlen_t i, int strict); void FANSI_reset_buff(struct FANSI_buff * buff); struct FANSI_state FANSI_state_init( SEXP strsxp, SEXP warn, SEXP term_cap, R_xlen_t i ); void FANSI_state_reinit( struct FANSI_state * state, SEXP x, R_xlen_t i ); struct FANSI_state FANSI_state_init_full( SEXP strsxp, SEXP warn, SEXP term_cap, SEXP allowNA, SEXP keepNA, SEXP width, SEXP ctl, R_xlen_t i ); struct FANSI_state FANSI_state_init_ctl( SEXP strsxp, SEXP warn, SEXP ctl, R_xlen_t i ); int FANSI_sgr_active(struct FANSI_sgr sgr); int FANSI_url_active(struct FANSI_url url); int FANSI_sgr_comp_color(struct FANSI_sgr target, struct FANSI_sgr current); struct FANSI_sgr FANSI_sgr_setdiff( struct FANSI_sgr old, struct FANSI_sgr new, int mode ); struct FANSI_sgr FANSI_sgr_intersect( struct FANSI_sgr old, struct FANSI_sgr new ); int FANSI_url_comp(struct FANSI_url target, struct FANSI_url current); void FANSI_read_next( struct FANSI_state * state, R_xlen_t i, const char * arg ); void FANSI_read_until( struct FANSI_state * state, int until, int overshoot, int term_i, int mode, R_xlen_t i, const char * arg ); void FANSI_read_all( struct FANSI_state * state, R_xlen_t i, const char * arg ); int FANSI_add_int(int x, int y, const char * file, int line); // "Writing" functions void FANSI_W_sgr( struct FANSI_buff * buff, struct FANSI_sgr sgr, int normalize, int enclose, R_xlen_t i ); void FANSI_W_url( struct FANSI_buff * buff, struct FANSI_url url, R_xlen_t i ); void FANSI_W_sgr_close( struct FANSI_buff * buff, struct FANSI_sgr sgr, int normalize, R_xlen_t i ); void FANSI_W_url_close( struct FANSI_buff * buff, struct FANSI_url url, R_xlen_t i ); void FANSI_W_close( struct FANSI_buff * buff, struct FANSI_format fmt, int normalize, R_xlen_t i ); int FANSI_W_copy( struct FANSI_buff * buff, const char * tmp, R_xlen_t i, const char * err_msg ); int FANSI_W_mcopy( struct FANSI_buff * buff, const char * tmp, int tmp_len, R_xlen_t i, const char * err_msg ); void FANSI_W_fill( struct FANSI_buff * buff, const char tmp, int times, R_xlen_t i, const char * err_msg ); int FANSI_W_bridge( struct FANSI_buff * buff, struct FANSI_state end, struct FANSI_state restart, int normalize, R_xlen_t i, const char * err_msg ); int FANSI_W_normalize( struct FANSI_buff * buff, struct FANSI_state *state, int stop, R_xlen_t i, const char * err_msg, const char * arg ); int FANSI_W_normalize_or_copy( struct FANSI_buff *buff, struct FANSI_state state, int norm_i, int stop, R_xlen_t i, const char * err_msg, const char * arg ); // Macro versions require `len`, `i`, and `err_msg` defined in scope. #define FANSI_W_COPY(A, B) FANSI_W_copy((A), (B), i, err_msg) #define FANSI_W_MCOPY(A, B, C) FANSI_W_mcopy(\ (A), (B), (C), i, err_msg) #define FANSI_W_FILL(A, B, C) FANSI_W_fill(\ (A), (B), (C), i, err_msg) // Utilities int FANSI_seek_ctl(const char * x); void FANSI_print(const char * x); void FANSI_print_len(const char * x, int len); void FANSI_print_state(struct FANSI_state x); void FANSI_print_sgr(struct FANSI_sgr s); void FANSI_print_bits(unsigned int x); void FANSI_interrupt(R_xlen_t i); intmax_t FANSI_ind(R_xlen_t i); SEXP FANSI_mkChar0(char * start, char * end, cetype_t enc, R_xlen_t i); SEXP FANSI_mkChar(struct FANSI_buff buff, cetype_t enc, R_xlen_t i); void FANSI_check_limits(void); int FANSI_check_append(int cur, int extra, const char * msg, R_xlen_t i); void FANSI_check_append_err(const char * msg, R_xlen_t i); void FANSI_val_args(SEXP x, SEXP norm, SEXP carry); char * FANSI_state_as_chr( struct FANSI_buff *buff, struct FANSI_state state, int normalize, R_xlen_t i ); struct FANSI_state FANSI_carry_init( SEXP carry, SEXP warn, SEXP term_cap, SEXP ctl ); int FANSI_is_tf(SEXP x); int FANSI_unicode_width(int cp); #endif /* _FANSI_H */ fansi/src/tohtml.c0000644000176200001440000005243214533476156013640 0ustar liggesusers/* * Copyright (C) Brodie Gaslam * * This file is part of "fansi - ANSI Control Sequence Aware String Functions" * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Go to for a copies of the licenses. */ #include "fansi.h" /* * Looks like we don't need to worry about C0 sequences, however we must * parse all ESC sequences as HTML gladly displays everything right after the * initial ESC. * * In terms of sequences we consider meaningful, only colors and basic styles * for html translation */ struct FANSI_css {const char * css; int len;}; // .len leftover from when we used pre-computed widths static const struct FANSI_css css_style[9] = { // Code 1: bold {.css="font-weight: bold", .len=-1}, // Code 2: lighter {.css="font-weight: 100", .len=-1}, // Code 3: italic {.css="font-style: italic", .len=-1}, // Code 4: underline {.css="text-decoration: underline", .len=-1}, // Code 5: blink {.css="text-decoration: blink", .len=-1}, // Code 6: blink {.css="text-decoration: blink", .len=-1}, // Code 7: invert; unused, but needs to be here for offset lookups to work; {.css="", .len=0}, // Code 8: conceal {.css="color: transparent", .len=-1}, // Code 9: line-through {.css="text-decoration: line-through", .len=-1}, }; // Generate mask for html styles in first pass static int sgr_has_color(struct FANSI_sgr sgr) { return sgr.color.x || sgr.bgcol.x; } static int sgr_has_style_html(struct FANSI_sgr sgr) { // generate mask first time around. return (sgr.style & STL_MASK2) || sgr.color.x || sgr.bgcol.x; } static int sgr_comp_html( struct FANSI_sgr target, struct FANSI_sgr current ) { return // Colors are Different FANSI_sgr_comp_color(target, current) || // HTML rendered styles are different ( (target.style & STL_MASK2) != (current.style & STL_MASK2) ) || // If one has color both have the same color, but we need to check // whether they have different invert status ( (sgr_has_color(target)) && (target.style & STL_INVERT) ^ (current.style & STL_INVERT) ); } /* * Converts basic, bright and 8 bit colors to a range of 0:255. * Returns -1 for other values including no color. * * For use with color classes. * * Recall colors in 30:39 and 40:49 already converted to 0:9. */ static int color_to_8bit(struct FANSI_color color) { int col256 = -1; switch(color.x & CLR_MASK) { case CLR_8: col256 = color.x & ~CLR_MASK; break; case CLR_BRIGHT: col256 = (color.x & ~CLR_MASK) + 8; break; case CLR_256: col256 = color.extra[0]; break; } return col256; } /* * Given CSI SGR Color Codes and User Provided color classes, * return the corresponding color class if the color can be mapped to one of the * 8 bit color codes in 0:255, or NULL if not. * * CAUTION: test result before dereferencing: could be a pointer to NULL. * * @param whether to return foreground or background styles */ static const char * get_color_class( struct FANSI_color color, SEXP color_classes, int bg ) { int col8bit = color_to_8bit(color); if(col8bit >= 0 && XLENGTH(color_classes) / 2 > (R_xlen_t) col8bit) return CHAR(STRING_ELT(color_classes, col8bit * 2 + bg)); else return NULL; } /* * All color conversions taken from * * * * @param color an integer expected to be in 0:9, 90:97, 100:107. NB: ranges * 30:39 and 40:49 already converted to 0:9. * @param color_extra a pointer to a 4 long integer array as you would get in * struct FANSI_sgr.color_extra * @param buff a buffer with at least 8 bytes allocated. * @return the *buff pointer */ static char * color_to_html(struct FANSI_color color, char * buff) { // CAREFUL: DON'T WRITE MORE THAN 7 BYTES + NULL TERMINATOR const char * dectohex = "0123456789ABCDEF"; const char * std_16[16] = { "000000", "800000", "008000", "808000", "000080", "800080", "008080", "C0C0C0", "808080", "FF0000", "00FF00", "FFFF00", "0000FF", "FF00FF", "00FFFF", "FFFFFF" }; // According to these are the // putty defaults const char * std_8[8] = { "000000", "BB0000", "00BB00", "BBBB00", "0000BB", "BB00BB", "00BBBB", "BBBBBB" }; const char * std_5[6] = {"00", "5F", "87", "AF", "D7", "FF"}; const char * bright[8] = { "555555", "FF5555", "55FF55", "FFFF55", "5555FF", "FF55FF", "55FFFF", "FFFFFF" }; unsigned char clrval = color.x & ~CLR_MASK; if(clrval == 9) error("Internal Error: applying non-color."); // nocov char * buff_track = buff; *(buff_track++) = '#'; switch(color.x & CLR_MASK) { case CLR_8: memcpy(buff_track, std_8[clrval], 6); buff_track += 6; break; case CLR_BRIGHT: memcpy(buff_track, bright[clrval], 6); buff_track += 6; break; case CLR_256: { int color_5 = color.extra[0]; if(color_5 < 16) { memcpy(buff_track, std_16[color_5], 6); buff_track += 6; } else if (color_5 < 232) { int c5 = color_5 - 16; int c5_r = c5 / 36; int c5_g = (c5 % 36) / 6; int c5_b = c5 % 6; if(c5_r > 5 || c5_g > 5 || c5_b > 5) error("Internal Error: out of bounds computing 6^3 clr."); // nocov memcpy(buff_track, std_5[c5_r], 2); buff_track += 2; memcpy(buff_track, std_5[c5_g], 2); buff_track += 2; memcpy(buff_track, std_5[c5_b], 2); buff_track += 2; } else { int c_bw = (color_5 - 232) * 10 + 8; char hi = dectohex[c_bw / 16]; char lo = dectohex[c_bw % 16]; for(int i = 0; i < 3; ++i) { *(buff_track++) = hi; *(buff_track++) = lo; } } break; } case CLR_TRU: for(int i = 0; i < 3; ++i) { char hi = dectohex[color.extra[i] / 16]; char lo = dectohex[color.extra[i] % 16]; *(buff_track++) = hi; *(buff_track++) = lo; } break; default: error("Internal Error: unknown color mode."); // nocov } *buff_track = 0; int dist = (int) (buff_track - buff); if(dist != 7) error("Internal Error: bad byte count for color (%d).", dist); // nocov return buff; } static char * oe_sgr_html_err = "Expanding SGR sequences to HTML"; /* * Seek for an esc or, warn if run into "<", ">" (maybe ">" is not necessary). * * We do not warn for "&" because if we did `to_html(html_esc())` could produce * warnings. */ static const char * find_esc_or_warn( const char * string, int * warned, R_xlen_t i, const char * arg ) { while(*string) { switch(*string) { case 0x1b: goto EXIT; case '>': case '<': // Warn if(!*warned) { warning( "`%s` %s '%c' at index [%jd] (see ?html_esc)%s", arg, "contains unescaped HTML special character", *string, FANSI_ind(i), "; you can use `warn=FALSE` to turn off these warnings." ); *warned = 1; } } ++string; } EXIT: if(!*string) return (const char *) 0; else return string; } /* * Write individual SGR sequence as HTML * * DANGER: this is a 'W' function, see 'src/write.c' for details. */ static int W_state_as_html( struct FANSI_buff * buff, struct FANSI_state state, struct FANSI_state state_prev, SEXP color_classes, R_xlen_t i ) { /****************************************************\ | IMPORTANT: KEEP THIS ALIGNED WITH FANSI_csi_write | | although right now ignoring rare escapes in html | \****************************************************/ // Not all basic styles are html styles (e.g. invert), so sgr only changes // on invert when current or previous also has a color style int has_cur_sgr = sgr_has_style_html(state.fmt.sgr); int has_prev_sgr = sgr_has_style_html(state_prev.fmt.sgr); int sgr_change = sgr_comp_html(state.fmt.sgr, state_prev.fmt.sgr); int has_cur_url = FANSI_url_active(state.fmt.url); int has_prev_url = FANSI_url_active(state_prev.fmt.url); int url_change = FANSI_url_comp(state.fmt.url, state_prev.fmt.url); const char * err_msg = oe_sgr_html_err; struct FANSI_sgr sgr = state.fmt.sgr; // FANSI_W_COPY requires variables len, i, and err_msg if(sgr_change || url_change) { // Close previous if(has_prev_sgr) FANSI_W_COPY(buff, ""); if(has_prev_url) FANSI_W_COPY(buff, ""); if(has_cur_url) { // users responsibility to escape html special chars FANSI_W_COPY(buff, ""); } if(has_cur_sgr) { FANSI_W_COPY(buff, ""); } } // We've checked len at every step, so it cannot overflow INT_MAX. return buff->len; } /* * Convert SGR Encoded Strings to their HTML equivalents */ SEXP FANSI_esc_to_html( SEXP x, SEXP warn, SEXP term_cap, SEXP color_classes, SEXP carry, SEXP warn_unesc ) { if(TYPEOF(x) != STRSXP) error("Internal Error: `x` must be a character vector"); // nocov if(TYPEOF(color_classes) != STRSXP) error("Internal Error: `color_classes` must be a character vector"); // nocov if(TYPEOF(warn_unesc) != LGLSXP || XLENGTH(warn_unesc) != 1) error("Internal Error: `warn_unesc` must be a scalar logical"); // nocov int warn_unesc_i = asInteger(warn_unesc); if(warn_unesc_i != 0 && warn_unesc_i != 1) error("Internal Error: `warn_unesc` must be TRUE or FALSE"); // nocov const char * arg = "x"; struct FANSI_buff buff; FANSI_INIT_BUFF(&buff); SEXP ctl = PROTECT(ScalarInteger(1)); // "all" int do_carry = STRING_ELT(carry, 0) != NA_STRING; int any_na = 0; struct FANSI_state state_carry = FANSI_carry_init(carry, warn, term_cap, ctl); UNPROTECT(1); R_xlen_t x_len = XLENGTH(x); struct FANSI_state state, state_prev, state_init; SEXP empty = PROTECT(mkString("")); state = FANSI_state_init(empty, warn, term_cap, (R_xlen_t) 0); UNPROTECT(1); state_prev = state_init = state; state_prev.fmt = state_carry.fmt; SEXP res = x; // Reserve spot on protection stack PROTECT_INDEX ipx; PROTECT_WITH_INDEX(res, &ipx); for(R_xlen_t i = 0; i < x_len; ++i) { FANSI_interrupt(i); SEXP chrsxp = STRING_ELT(x, i); if(chrsxp == NA_STRING || (any_na && do_carry)) { // Allocate target vector if it hasn't been yet if(res == x) REPROTECT(res = duplicate(x), ipx); SET_STRING_ELT(res, i, NA_STRING); any_na = 1; continue; } FANSI_check_chrsxp(chrsxp, i); const char * string = CHAR(chrsxp); // Reset position info and string; rest of state info is preserved from // prior line so that the state can be continued on new line. if(do_carry) state = state_prev; else state = state_init; state.string = string; struct FANSI_state state_start = state; FANSI_reset_pos(&state_start); state.status &= ~STAT_WARNED; state_prev = state_init; // but there are no styles in the string yet int bytes_init = (int) LENGTH(chrsxp); // Some ESCs may not produce any HTML, and some strings may gain HTML from // an ESC from a prior element even if they have no ESCs. int has_esc = 0; int has_state = sgr_has_style_html(state.fmt.sgr) || FANSI_url_active(state.fmt.url); int trail_span, trail_a; trail_span = trail_a = 0; int html_spec_warned = ((state.settings & WARN_MASK & ~WARN_ERROR) == 0) || (warn_unesc_i == 0); // We cheat by only using FANSI_read_next to read escape sequences as we // don't care about display width, etc. Normally we would _read_next over // all characters, not just skip from ESC to ESC. const char * err_msg = oe_sgr_html_err; // Measure / Write loop for(int k = 0; k < 2; ++k) { if(k) { if(has_esc || has_state) { // Allocate target vector if it hasn't been yet if(res == x) REPROTECT(res = duplicate(x), ipx); // Allocate buffer and reset states for second pass FANSI_size_buff(&buff); string = state.string; // always points to first byte state_start.status |= state.status & STAT_WARNED; state = state_start; state_prev = state_init; } else break; } else { FANSI_reset_buff(&buff); } // Leftover from prior element (only if can't be merged with new) if( *string && *string != 0x1b && (sgr_has_style_html(state.fmt.sgr) || FANSI_url_active(state.fmt.url)) ) { // dirty hack, state_prev sgr_prev is not exaclty right at beginning W_state_as_html(&buff, state, state_prev, color_classes, i); state_prev = state; } // New in this element while(1) { const char * string_prev = string; trail_span = sgr_has_style_html(state_prev.fmt.sgr); trail_a = FANSI_url_active(state_prev.fmt.url); string = find_esc_or_warn(string, &html_spec_warned, i, arg); if(!string) string = state.string + bytes_init; else { has_esc = 1; state.pos.x = (string - state.string); } // Intervening bytes before next state int bytes_prev = string - string_prev; // cannot overflow int FANSI_W_MCOPY(&buff, string_prev, bytes_prev); state.pos.x = (string - state.string); // State as html, skip if at end of string if(*string) { FANSI_read_next(&state, i, arg); string = state.string + state.pos.x; // dirty hack, state_prev sgr_prev is not exaclty right at beginning if(*string) W_state_as_html(&buff, state, state_prev, color_classes, i); state_prev = state; has_state |= sgr_has_style_html(state.fmt.sgr) || FANSI_url_active(state.fmt.url); if(!*string) break; // nothing after state, so done } else break; } if(trail_span) FANSI_W_COPY(&buff, ""); if(trail_a) FANSI_W_COPY(&buff, ""); if(buff.buff) { // only ever true if k > 0 // Now create the charsxp with the original encoding. Since we're only // removing SGR and adding FANSI, it should be okay. cetype_t chr_type = getCharCE(chrsxp); SEXP chrsxp = PROTECT(FANSI_mkChar(buff, chr_type, i)); SET_STRING_ELT(res, i, chrsxp); UNPROTECT(1); } } } FANSI_release_buff(&buff, 1); UNPROTECT(1); return res; } /* * Testing interface * * x is a 5 x N matrix where, for each column the first value is a color code, * and subsequent values correspond to the state.sgr.color_extra values. * * Does not allow for bright mode? */ SEXP FANSI_color_to_html_ext(SEXP x) { if(TYPEOF(x) != INTSXP) error("Argument must be integer."); // nocov R_xlen_t len = XLENGTH(x); if(len % 5) error("Argument length not a multipe of 5"); // nocov struct FANSI_buff buff; FANSI_INIT_BUFF(&buff); FANSI_size_buff0(&buff, 7); int * x_int = INTEGER(x); SEXP res = PROTECT(allocVector(STRSXP, len / 5)); for(R_xlen_t i = 0; i < len; i += 5) { struct FANSI_color color; unsigned int color_mode = 0; if(x_int[i] == 8) { if(x_int[i + 1] == 2) color_mode = CLR_TRU; else color_mode = CLR_256; } else color_mode = CLR_8; color.x = x_int[i] | color_mode; color.extra[0] = (unsigned char)x_int[i + 2]; color.extra[1] = (unsigned char)x_int[i + 3]; color.extra[2] = (unsigned char)x_int[i + 4]; color_to_html(color, buff.buff); SEXP chrsxp = PROTECT(mkCharLenCE(buff.buff, 7, CE_BYTES)); SET_STRING_ELT(res, i / 5, chrsxp); UNPROTECT(1); } FANSI_release_buff(&buff, 1); UNPROTECT(1); return res; } /* * Escape special HTML characters. */ SEXP FANSI_esc_html(SEXP x, SEXP what) { if(TYPEOF(x) != STRSXP) error("Internal Error: `x` must be a character vector"); // nocov if(TYPEOF(what) != STRSXP) error("Internal Error: `x` must be a character vector"); // nocov if(XLENGTH(what) != 1 || STRING_ELT(what, 0) == NA_STRING) error("Argument `what` must be scalar character and not NA."); SEXP what_chrsxp = STRING_ELT(what, 0); R_xlen_t x_len = XLENGTH(x); R_len_t what_len = LENGTH(what_chrsxp); if(what_len == 0 || x_len == 0) return x; // Create a lookup "bitfield" for the 5 chars we can escape const unsigned char * what_chr = (const unsigned char *) CHAR(what_chrsxp); unsigned int what_val = 0; for(R_len_t i = 0; i < what_len; ++i) { unsigned const char wc = *(what_chr + i); switch(wc) { case '&': what_val |= 1U << 0U; break; case '"': what_val |= 1U << 1U; break; case '\'': what_val |= 1U << 2U; break; case '<': what_val |= 1U << 3U; break; case '>': what_val |= 1U << 4U; break; default: error( "%s %s.", "Argument `what` may only contain ASCII characters", "\"&\", \"<\", \">\", \"'\", or \"\\\"\"" ); } } SEXP res = x; // Reserve spot on protection stack PROTECT_INDEX ipx; PROTECT_WITH_INDEX(res, &ipx); struct FANSI_buff buff; FANSI_INIT_BUFF(&buff); for(R_xlen_t i = 0; i < x_len; ++i) { FANSI_interrupt(i); SEXP chrsxp = STRING_ELT(x, i); if(chrsxp == NA_STRING) continue; FANSI_check_chrsxp(chrsxp, i); int len = (int) LENGTH(chrsxp); const char * string = CHAR(chrsxp); const char * err_msg = "Escaping HTML special characters"; len = LENGTH(chrsxp); // Two passes (k), first one compute incremental length of string, second // actually write to the buffer for(int k = 0; k < 2; ++k) { string = CHAR(chrsxp); if(k && len > LENGTH(chrsxp)) { FANSI_size_buff0(&buff, len); len = LENGTH(chrsxp); // reset so we don't unecessary overflow // Allocate result vector if it hasn't been yet if(res == x) REPROTECT(res = duplicate(x), ipx); } // No second pass if no incremental chars else if (k) break; else FANSI_reset_buff(&buff); while(*string) { // Skip chars that can't be specials if(*string > '>') { if(buff.buff) *(buff.buff++) = *string; ++string; continue; } --len; // we're replacing one char, so don't count it if(*string == '&' && what_val & 1U << 0U) len += FANSI_W_COPY(&buff, "&"); else if(*string == '"' && what_val & 1U << 1U) len += FANSI_W_COPY(&buff, """); else if(*string == '\'' && what_val & 1U << 2U) len += FANSI_W_COPY(&buff, "'"); else if(*string == '<' && what_val & 1U << 3U) len += FANSI_W_COPY(&buff, "<"); else if(*string == '>' && what_val & 1U << 4U) len += FANSI_W_COPY(&buff, ">"); // Just advance copy string otherwse else { ++len; // we didn't actually replace the char if(buff.buff) *(buff.buff++) = *string; } ++string; } // Only get here in second pass if we've written if(k && buff.buff) { *(buff.buff) = 0; cetype_t chr_type = getCharCE(chrsxp); SEXP reschr = PROTECT(FANSI_mkChar(buff, chr_type, i)); SET_STRING_ELT(res, i, reschr); UNPROTECT(1); } } } FANSI_release_buff(&buff, 1); UNPROTECT(1); return res; } fansi/src/fansi-struct.h0000644000176200001440000001247015106721052014737 0ustar liggesusers/* * Copyright (C) Brodie Gaslam * * This file is part of "fansi - ANSI Control Sequence Aware String Functions" * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Go to for a copies of the licenses. */ #ifndef _FANSI_STRUCT_H #define _FANSI_STRUCT_H // Global variables (see utils.c) // These was originally designed hoping we could have a single struct with // shared logic, but in the end it's like this... We used to have uintmax_t // and intmax_t, but removed those for performance concerns. struct FANSI_limit_int { const char * name; int min; int max; }; struct FANSI_limit_rlent { const char * name; R_len_t min; R_len_t max; }; struct FANSI_limit_rxlent { const char * name; R_xlen_t min; R_xlen_t max; }; struct FANSI_limit_sizet { const char * name; size_t min; size_t max; }; // Update assumption checks if any of this changes struct FANSI_limits { struct FANSI_limit_int lim_int; struct FANSI_limit_rlent lim_R_len_t; struct FANSI_limit_rxlent lim_R_xlen_t; struct FANSI_limit_sizet lim_size_t; }; extern struct FANSI_limits FANSI_lim; // - Structs ------------------------------------------------------------------- /* * Buffer used for writing strings * * Kept around so we don't keep having to re-allocate memory if it is * sufficiently large to write what we want. */ struct FANSI_buff { char * buff0; // Buffer start char * buff; // Buffer last written void * vheap_self; // Pointer to self on the heap protection stack void * vheap_prev; // Pointer to what was previously on top of prot stack size_t len_alloc; // Bytes allocated, includes trailing NULL. int len; // Size target const char * fun; // Function that initialized the buffer. int warned; // Whether a warning was issued already. int reset; // Indicate the buffer was reset as required. }; struct FANSI_color { /* * Most significant 4 bits are the color mode (see CLR_*), least * significant are the actual colors for 8 bit and bright modes. */ unsigned char x; // Color channels, or at index 0 256 color value // **WARNING**: these are not necessarily reset, must check `x` first. unsigned char extra[3]; }; /* * Encode Active SGR */ struct FANSI_sgr { struct FANSI_color color; struct FANSI_color bgcol; /* * Should be interpreted as bit mask where with 2^n. See * FANSI_(ST|BRD|IDG)_* constants for details of what each bit means. * * Make sure this remains consistent with the HTML code */ unsigned int style; }; // val should always be initialized and never NULL. struct FANSI_string { const char * val; int len; }; // Pair this up with a string to mark substrings struct FANSI_offset { unsigned int start; unsigned int len; }; /* * OSC derived URL info. * * Failed url parses designated by bytes == 0. */ struct FANSI_osc { int len; // bytes of the entire OSC, excluding the initial ESC int error; // error, if any, one of 0, 4 or 5 (see FANSI_state.err_code). }; struct FANSI_url { const char * string; struct FANSI_offset url; struct FANSI_offset id; }; struct FANSI_format { struct FANSI_url url; struct FANSI_sgr sgr; }; /* * Position markers (all zero index). * * - pos_byte: the first unread byte in the string: IMPORTANT, unlike all * the other `pos_` trackers which track how many units have already * been read, this one points to the first UNread byte (need to change * variable name). * - pos_width: the character postion accounting for width mode, which could be * either display width (computed per Unicode), graphemes, character count, * or byte count, all of these excluding CSI and other controls. */ struct FANSI_position { int x; // Next byte to read int w; // pos_width }; /* * Captures the SGR and OSC URL state at any particular position in a string. * * Possibly more thought should go into padding for alignment. * * Keep in-sync with e.g. `FANSI_reset_state`. */ struct FANSI_state { struct FANSI_format fmt; struct FANSI_position pos; const char * string; // R level settings, see SET_* unsigned int settings; // Status flags, see STAT_* unsigned int status; // Are there bytes outside of 0-127 (i.e. UTF-8 since that is the only way // those should show up). Records the 0-index start byte of the **next** // character **after** last-seen UTF-8 character (we don't record the start // byte because that could be 0, which is ambiguous; we coud initialize this // to -1 so it isn't ambiguous, but that is also fragile). int utf8; }; /* * Need to keep track of fallback state, so we need ability to return two * states */ struct FANSI_state_pair { struct FANSI_state cur; struct FANSI_state restart; }; /* * Sometimes need to keep track of a string and the encoding that it is in * outside of a CHARSXP */ struct FANSI_string_type { const char * string; cetype_t type; }; #endif /* _FANSI_STRUCT_H */ fansi/src/init.c0000644000176200001440000000612215107100722013244 0ustar liggesusers/* * Copyright (C) Brodie Gaslam * * This file is part of "fansi - ANSI Control Sequence Aware String Functions" * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Go to for a copies of the licenses. */ #include "fansi-ext.h" #include #include static const R_CallMethodDef callMethods[] = { {"has_csi", (DL_FUNC) &FANSI_has, 3}, {"strip_csi", (DL_FUNC) &FANSI_strip, 3}, {"strwrap_csi", (DL_FUNC) &FANSI_strwrap_ext, 18}, {"substr", (DL_FUNC) &FANSI_substr, 12}, {"process", (DL_FUNC) &FANSI_process_ext, 3}, {"check_assumptions", (DL_FUNC) &FANSI_check_assumptions, 0}, {"tabs_as_spaces", (DL_FUNC) &FANSI_tabs_as_spaces_ext, 5}, {"color_to_html", (DL_FUNC) &FANSI_color_to_html_ext, 1}, {"esc_to_html", (DL_FUNC) &FANSI_esc_to_html, 6}, {"unhandled_esc", (DL_FUNC) &FANSI_unhandled_esc, 2}, {"nchar_esc", (DL_FUNC) &FANSI_nchar, 8}, {"add_int", (DL_FUNC) &FANSI_add_int_ext, 2}, {"set_int_max", (DL_FUNC) &FANSI_set_int_max, 1}, {"get_int_max", (DL_FUNC) &FANSI_get_int_max, 0}, {"set_rlent_max", (DL_FUNC) &FANSI_set_rlent_max, 1}, {"get_warn_all", (DL_FUNC) &FANSI_get_warn_all, 0}, {"get_warn_mangled", (DL_FUNC) &FANSI_get_warn_mangled, 0}, {"get_warn_utf8", (DL_FUNC) &FANSI_get_warn_utf8, 0}, {"get_warn_error", (DL_FUNC) &FANSI_get_warn_error, 0}, {"check_enc", (DL_FUNC) &FANSI_check_enc_ext, 2}, {"ctl_as_int", (DL_FUNC) &FANSI_ctl_as_int_ext, 1}, {"esc_html", (DL_FUNC) &FANSI_esc_html, 2}, {"reset_limits", (DL_FUNC) &FANSI_reset_limits, 0}, {"normalize_state", (DL_FUNC) &FANSI_normalize_state_ext, 4}, {"normalize_state_list", (DL_FUNC) &FANSI_normalize_state_list_ext, 4}, {"close_state", (DL_FUNC) &FANSI_state_close_ext, 4}, {"size_buff", (DL_FUNC) &FANSI_size_buff_ext, 1}, {"size_buff_prot_test", (DL_FUNC) &FANSI_size_buff_prot_test, 0}, {"buff_test_reset", (DL_FUNC) &FANSI_buff_test_reset, 0}, {"buff_test_copy_overflow", (DL_FUNC) &FANSI_buff_test_copy_overflow, 0}, {"buff_test_mcopy_overflow", (DL_FUNC) &FANSI_buff_test_mcopy_overflow, 0}, {"buff_test_fill_overflow", (DL_FUNC) &FANSI_buff_test_fill_overflow, 0}, {"state_at_end", (DL_FUNC) &FANSI_state_at_end_ext, 8}, {"bridge_state", (DL_FUNC) &FANSI_bridge_state_ext, 4}, {"trimws", (DL_FUNC) &FANSI_trimws, 6}, {"unicode_version", (DL_FUNC) &FANSI_unicode_version, 0}, {NULL, NULL, 0} }; void attribute_visible R_init_fansi(DllInfo *info) { /* Register the .C and .Call routines. No .Fortran() or .External() routines, so pass those arrays as NULL. */ R_registerRoutines(info, NULL, callMethods, NULL, NULL); R_useDynamicSymbols(info, FALSE); R_forceSymbols(info, FALSE); } fansi/src/fansi-ext.h0000644000176200001440000000611415106721052014211 0ustar liggesusers/* * Copyright (C) Brodie Gaslam * * This file is part of "fansi - ANSI Control Sequence Aware String Functions" * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Go to for a copies of the licenses. */ #ifndef _FANSI_EXT_H #define _FANSI_EXT_H #include SEXP FANSI_substr( SEXP x, SEXP start, SEXP stop, SEXP value, SEXP type, SEXP rnd, SEXP warn, SEXP term_cap, SEXP ctl, SEXP norm, SEXP carry, SEXP terminate ); SEXP FANSI_has(SEXP x, SEXP ctl, SEXP warn); SEXP FANSI_strip(SEXP x, SEXP ctl, SEXP warn); SEXP FANSI_strwrap_ext( SEXP x, SEXP width, SEXP indent, SEXP exdent, SEXP prefix, SEXP initial, SEXP wrap_always, SEXP pad_end, SEXP strip_spaces, SEXP tabs_as_spaces, SEXP tab_stops, SEXP warn, SEXP term_cap, SEXP first_only, SEXP ctl, SEXP norm, SEXP carry, SEXP terminate ); SEXP FANSI_process_ext(SEXP input, SEXP term_cap, SEXP ctl); SEXP FANSI_tabs_as_spaces_ext( SEXP vec, SEXP tab_stops, SEXP warn, SEXP term_cap, SEXP ctl ); SEXP FANSI_color_to_html_ext(SEXP x); SEXP FANSI_esc_to_html( SEXP x, SEXP warn, SEXP term_cap, SEXP color_classes, SEXP carry, SEXP warn_unesc ); SEXP FANSI_unhandled_esc(SEXP x, SEXP term_cap); SEXP FANSI_nchar( SEXP x, SEXP type, SEXP keepNA, SEXP allowNA, SEXP warn, SEXP term_cap, SEXP ctl, SEXP z ); SEXP FANSI_trimws( SEXP x, SEXP which, SEXP warn, SEXP term_cap, SEXP ctl, SEXP norm ); // utility / testing SEXP FANSI_check_assumptions(void); SEXP FANSI_add_int_ext(SEXP x, SEXP y); SEXP FANSI_set_int_max(SEXP x); SEXP FANSI_set_rlent_max(SEXP x); SEXP FANSI_get_int_max(void); SEXP FANSI_get_warn_all(void); SEXP FANSI_get_warn_mangled(void); SEXP FANSI_get_warn_utf8(void); SEXP FANSI_get_warn_error(void); SEXP FANSI_esc_html(SEXP x, SEXP what); SEXP FANSI_normalize_state_ext( SEXP x, SEXP warn, SEXP term_cap, SEXP carry ); SEXP FANSI_normalize_state_list_ext( SEXP x, SEXP warn, SEXP term_cap, SEXP carry ); SEXP FANSI_size_buff_ext(SEXP x); SEXP FANSI_size_buff_prot_test(void); SEXP FANSI_check_enc_ext(SEXP x, SEXP i); SEXP FANSI_ctl_as_int_ext(SEXP ctl); SEXP FANSI_state_close_ext(SEXP x, SEXP warn, SEXP term_cap, SEXP norm); SEXP FANSI_state_at_end_ext( SEXP x, SEXP warn, SEXP term_cap, SEXP ctl, SEXP norm, SEXP carry, SEXP arg, SEXP allowNA ); SEXP FANSI_bridge_state_ext(SEXP end, SEXP restart, SEXP term_cap, SEXP norm); SEXP FANSI_buff_test_reset(void); SEXP FANSI_buff_test_copy_overflow(void); SEXP FANSI_buff_test_mcopy_overflow(void); SEXP FANSI_buff_test_fill_overflow(void); SEXP FANSI_reset_limits(void); SEXP FANSI_read_all_ext(SEXP x, SEXP warn, SEXP term_cap); SEXP FANSI_unicode_version(void); #endif /* _FANSI_EXT_H */ fansi/src/Makevars0000644000176200001440000000003414362117337013641 0ustar liggesusersPKG_CFLAGS=$(C_VISIBILITY) fansi/src/width.c0000644000176200001440000004034215107072773013440 0ustar liggesusers/* * Copyright (C) Brodie Gaslam * * This file is part of "fansi - ANSI Control Sequence Aware String Functions" * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Go to for a copies of the licenses. */ /* * This file contains data derived from Unicode Data under the following * license: * * UNICODE LICENSE V3 * * COPYRIGHT AND PERMISSION NOTICE * * Copyright (c) 1991-2025 Unicode, Inc. * * NOTICE TO USER: Carefully read the following legal agreement. BY * DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR * SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE * TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT * DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of data files and any associated documentation (the "Data Files") or * software and any associated documentation (the "Software") to deal in the * Data Files or Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, and/or sell * copies of the Data Files or Software, and to permit persons to whom the * Data Files or Software are furnished to do so, provided that either (a) * this copyright and permission notice appear with all copies of the Data * Files or Software, or (b) this copyright and permission notice appear in * associated Documentation. * * THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY * KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF * THIRD PARTY RIGHTS. * * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE * BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA * FILES OR SOFTWARE. * * Except as contained in this notice, the name of a copyright holder shall * not be used in advertising or otherwise to promote the sale, use or other * dealings in these Data Files or Software without prior written * authorization of the copyright holder. */ #include "fansi.h" /* * Unicode Character Display Width Lookup Tables * Generated from Unicode Character Database version 17.0.0 * * Width meanings: * 0 = Zero width (control characters, combining marks) * 1 = Normal width (most ASCII and Latin characters) * 2 = Double width (CJK characters, emoji) * * Special cases and exceptions: * - Regional Indicator Symbols (U+1F1E6..U+1F1FF) are width 1 * These are letter symbols A-Z used to compose flag emojis when paired. * * - Hangul Jamo medial vowels and final consonants (U+1160..U+11FF) are width 0 * These combine to form Hangul syllables and don't occupy their own column. * * - SOFT HYPHEN (U+00AD) is width 1 * Despite being a format character (Cf), it has visible representation. * * Additionally fansi adds some further postprocessing in read_utf8_until() * * Reference: http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c */ // UNICODE_VERSION is guaranteed to be only numbers and period. #define UNICODE_VERSION "17.0.0" typedef struct { int start; int end; } unicode_range_t; /* Width 0 ranges: 378 entries */ static const unicode_range_t width_0_ranges[] = { {0x0000, 0x001F}, {0x007F, 0x009F}, {0x0300, 0x036F}, {0x0483, 0x0489}, {0x0591, 0x05BD}, {0x05BF, 0x05BF}, {0x05C1, 0x05C2}, {0x05C4, 0x05C5}, {0x05C7, 0x05C7}, {0x0600, 0x0605}, {0x0610, 0x061A}, {0x061C, 0x061C}, {0x064B, 0x065F}, {0x0670, 0x0670}, {0x06D6, 0x06DD}, {0x06DF, 0x06E4}, {0x06E7, 0x06E8}, {0x06EA, 0x06ED}, {0x070F, 0x070F}, {0x0711, 0x0711}, {0x0730, 0x074A}, {0x07A6, 0x07B0}, {0x07EB, 0x07F3}, {0x07FD, 0x07FD}, {0x0816, 0x0819}, {0x081B, 0x0823}, {0x0825, 0x0827}, {0x0829, 0x082D}, {0x0859, 0x085B}, {0x0890, 0x0891}, {0x0897, 0x089F}, {0x08CA, 0x0902}, {0x093A, 0x093A}, {0x093C, 0x093C}, {0x0941, 0x0948}, {0x094D, 0x094D}, {0x0951, 0x0957}, {0x0962, 0x0963}, {0x0981, 0x0981}, {0x09BC, 0x09BC}, {0x09C1, 0x09C4}, {0x09CD, 0x09CD}, {0x09E2, 0x09E3}, {0x09FE, 0x09FE}, {0x0A01, 0x0A02}, {0x0A3C, 0x0A3C}, {0x0A41, 0x0A42}, {0x0A47, 0x0A48}, {0x0A4B, 0x0A4D}, {0x0A51, 0x0A51}, {0x0A70, 0x0A71}, {0x0A75, 0x0A75}, {0x0A81, 0x0A82}, {0x0ABC, 0x0ABC}, {0x0AC1, 0x0AC5}, {0x0AC7, 0x0AC8}, {0x0ACD, 0x0ACD}, {0x0AE2, 0x0AE3}, {0x0AFA, 0x0AFF}, {0x0B01, 0x0B01}, {0x0B3C, 0x0B3C}, {0x0B3F, 0x0B3F}, {0x0B41, 0x0B44}, {0x0B4D, 0x0B4D}, {0x0B55, 0x0B56}, {0x0B62, 0x0B63}, {0x0B82, 0x0B82}, {0x0BC0, 0x0BC0}, {0x0BCD, 0x0BCD}, {0x0C00, 0x0C00}, {0x0C04, 0x0C04}, {0x0C3C, 0x0C3C}, {0x0C3E, 0x0C40}, {0x0C46, 0x0C48}, {0x0C4A, 0x0C4D}, {0x0C55, 0x0C56}, {0x0C62, 0x0C63}, {0x0C81, 0x0C81}, {0x0CBC, 0x0CBC}, {0x0CBF, 0x0CBF}, {0x0CC6, 0x0CC6}, {0x0CCC, 0x0CCD}, {0x0CE2, 0x0CE3}, {0x0D00, 0x0D01}, {0x0D3B, 0x0D3C}, {0x0D41, 0x0D44}, {0x0D4D, 0x0D4D}, {0x0D62, 0x0D63}, {0x0D81, 0x0D81}, {0x0DCA, 0x0DCA}, {0x0DD2, 0x0DD4}, {0x0DD6, 0x0DD6}, {0x0E31, 0x0E31}, {0x0E34, 0x0E3A}, {0x0E47, 0x0E4E}, {0x0EB1, 0x0EB1}, {0x0EB4, 0x0EBC}, {0x0EC8, 0x0ECE}, {0x0F18, 0x0F19}, {0x0F35, 0x0F35}, {0x0F37, 0x0F37}, {0x0F39, 0x0F39}, {0x0F71, 0x0F7E}, {0x0F80, 0x0F84}, {0x0F86, 0x0F87}, {0x0F8D, 0x0F97}, {0x0F99, 0x0FBC}, {0x0FC6, 0x0FC6}, {0x102D, 0x1030}, {0x1032, 0x1037}, {0x1039, 0x103A}, {0x103D, 0x103E}, {0x1058, 0x1059}, {0x105E, 0x1060}, {0x1071, 0x1074}, {0x1082, 0x1082}, {0x1085, 0x1086}, {0x108D, 0x108D}, {0x109D, 0x109D}, {0x1160, 0x11FF}, {0x135D, 0x135F}, {0x1712, 0x1714}, {0x1732, 0x1733}, {0x1752, 0x1753}, {0x1772, 0x1773}, {0x17B4, 0x17B5}, {0x17B7, 0x17BD}, {0x17C6, 0x17C6}, {0x17C9, 0x17D3}, {0x17DD, 0x17DD}, {0x180B, 0x180F}, {0x1885, 0x1886}, {0x18A9, 0x18A9}, {0x1920, 0x1922}, {0x1927, 0x1928}, {0x1932, 0x1932}, {0x1939, 0x193B}, {0x1A17, 0x1A18}, {0x1A1B, 0x1A1B}, {0x1A56, 0x1A56}, {0x1A58, 0x1A5E}, {0x1A60, 0x1A60}, {0x1A62, 0x1A62}, {0x1A65, 0x1A6C}, {0x1A73, 0x1A7C}, {0x1A7F, 0x1A7F}, {0x1AB0, 0x1ADD}, {0x1AE0, 0x1AEB}, {0x1B00, 0x1B03}, {0x1B34, 0x1B34}, {0x1B36, 0x1B3A}, {0x1B3C, 0x1B3C}, {0x1B42, 0x1B42}, {0x1B6B, 0x1B73}, {0x1B80, 0x1B81}, {0x1BA2, 0x1BA5}, {0x1BA8, 0x1BA9}, {0x1BAB, 0x1BAD}, {0x1BE6, 0x1BE6}, {0x1BE8, 0x1BE9}, {0x1BED, 0x1BED}, {0x1BEF, 0x1BF1}, {0x1C2C, 0x1C33}, {0x1C36, 0x1C37}, {0x1CD0, 0x1CD2}, {0x1CD4, 0x1CE0}, {0x1CE2, 0x1CE8}, {0x1CED, 0x1CED}, {0x1CF4, 0x1CF4}, {0x1CF8, 0x1CF9}, {0x1DC0, 0x1DFF}, {0x200B, 0x200F}, {0x202A, 0x202E}, {0x2060, 0x2064}, {0x2066, 0x206F}, {0x20D0, 0x20F0}, {0x2CEF, 0x2CF1}, {0x2D7F, 0x2D7F}, {0x2DE0, 0x2DFF}, {0x302A, 0x302D}, {0x3099, 0x309A}, {0xA66F, 0xA672}, {0xA674, 0xA67D}, {0xA69E, 0xA69F}, {0xA6F0, 0xA6F1}, {0xA802, 0xA802}, {0xA806, 0xA806}, {0xA80B, 0xA80B}, {0xA825, 0xA826}, {0xA82C, 0xA82C}, {0xA8C4, 0xA8C5}, {0xA8E0, 0xA8F1}, {0xA8FF, 0xA8FF}, {0xA926, 0xA92D}, {0xA947, 0xA951}, {0xA980, 0xA982}, {0xA9B3, 0xA9B3}, {0xA9B6, 0xA9B9}, {0xA9BC, 0xA9BD}, {0xA9E5, 0xA9E5}, {0xAA29, 0xAA2E}, {0xAA31, 0xAA32}, {0xAA35, 0xAA36}, {0xAA43, 0xAA43}, {0xAA4C, 0xAA4C}, {0xAA7C, 0xAA7C}, {0xAAB0, 0xAAB0}, {0xAAB2, 0xAAB4}, {0xAAB7, 0xAAB8}, {0xAABE, 0xAABF}, {0xAAC1, 0xAAC1}, {0xAAEC, 0xAAED}, {0xAAF6, 0xAAF6}, {0xABE5, 0xABE5}, {0xABE8, 0xABE8}, {0xABED, 0xABED}, {0xFB1E, 0xFB1E}, {0xFE00, 0xFE0F}, {0xFE20, 0xFE2F}, {0xFEFF, 0xFEFF}, {0xFFF9, 0xFFFB}, {0x101FD, 0x101FD}, {0x102E0, 0x102E0}, {0x10376, 0x1037A}, {0x10A01, 0x10A03}, {0x10A05, 0x10A06}, {0x10A0C, 0x10A0F}, {0x10A38, 0x10A3A}, {0x10A3F, 0x10A3F}, {0x10AE5, 0x10AE6}, {0x10D24, 0x10D27}, {0x10D69, 0x10D6D}, {0x10EAB, 0x10EAC}, {0x10EFA, 0x10EFF}, {0x10F46, 0x10F50}, {0x10F82, 0x10F85}, {0x11001, 0x11001}, {0x11038, 0x11046}, {0x11070, 0x11070}, {0x11073, 0x11074}, {0x1107F, 0x11081}, {0x110B3, 0x110B6}, {0x110B9, 0x110BA}, {0x110BD, 0x110BD}, {0x110C2, 0x110C2}, {0x110CD, 0x110CD}, {0x11100, 0x11102}, {0x11127, 0x1112B}, {0x1112D, 0x11134}, {0x11173, 0x11173}, {0x11180, 0x11181}, {0x111B6, 0x111BE}, {0x111C9, 0x111CC}, {0x111CF, 0x111CF}, {0x1122F, 0x11231}, {0x11234, 0x11234}, {0x11236, 0x11237}, {0x1123E, 0x1123E}, {0x11241, 0x11241}, {0x112DF, 0x112DF}, {0x112E3, 0x112EA}, {0x11300, 0x11301}, {0x1133B, 0x1133C}, {0x11340, 0x11340}, {0x11366, 0x1136C}, {0x11370, 0x11374}, {0x113BB, 0x113C0}, {0x113CE, 0x113CE}, {0x113D0, 0x113D0}, {0x113D2, 0x113D2}, {0x113E1, 0x113E2}, {0x11438, 0x1143F}, {0x11442, 0x11444}, {0x11446, 0x11446}, {0x1145E, 0x1145E}, {0x114B3, 0x114B8}, {0x114BA, 0x114BA}, {0x114BF, 0x114C0}, {0x114C2, 0x114C3}, {0x115B2, 0x115B5}, {0x115BC, 0x115BD}, {0x115BF, 0x115C0}, {0x115DC, 0x115DD}, {0x11633, 0x1163A}, {0x1163D, 0x1163D}, {0x1163F, 0x11640}, {0x116AB, 0x116AB}, {0x116AD, 0x116AD}, {0x116B0, 0x116B5}, {0x116B7, 0x116B7}, {0x1171D, 0x1171D}, {0x1171F, 0x1171F}, {0x11722, 0x11725}, {0x11727, 0x1172B}, {0x1182F, 0x11837}, {0x11839, 0x1183A}, {0x1193B, 0x1193C}, {0x1193E, 0x1193E}, {0x11943, 0x11943}, {0x119D4, 0x119D7}, {0x119DA, 0x119DB}, {0x119E0, 0x119E0}, {0x11A01, 0x11A0A}, {0x11A33, 0x11A38}, {0x11A3B, 0x11A3E}, {0x11A47, 0x11A47}, {0x11A51, 0x11A56}, {0x11A59, 0x11A5B}, {0x11A8A, 0x11A96}, {0x11A98, 0x11A99}, {0x11B60, 0x11B60}, {0x11B62, 0x11B64}, {0x11B66, 0x11B66}, {0x11C30, 0x11C36}, {0x11C38, 0x11C3D}, {0x11C3F, 0x11C3F}, {0x11C92, 0x11CA7}, {0x11CAA, 0x11CB0}, {0x11CB2, 0x11CB3}, {0x11CB5, 0x11CB6}, {0x11D31, 0x11D36}, {0x11D3A, 0x11D3A}, {0x11D3C, 0x11D3D}, {0x11D3F, 0x11D45}, {0x11D47, 0x11D47}, {0x11D90, 0x11D91}, {0x11D95, 0x11D95}, {0x11D97, 0x11D97}, {0x11EF3, 0x11EF4}, {0x11F00, 0x11F01}, {0x11F36, 0x11F3A}, {0x11F40, 0x11F40}, {0x11F42, 0x11F42}, {0x11F5A, 0x11F5A}, {0x13430, 0x13440}, {0x13447, 0x13455}, {0x1611E, 0x16129}, {0x1612D, 0x1612F}, {0x16AF0, 0x16AF4}, {0x16B30, 0x16B36}, {0x16F4F, 0x16F4F}, {0x16F8F, 0x16F92}, {0x16FE4, 0x16FE4}, {0x1BC9D, 0x1BC9E}, {0x1BCA0, 0x1BCA3}, {0x1CF00, 0x1CF2D}, {0x1CF30, 0x1CF46}, {0x1D167, 0x1D169}, {0x1D173, 0x1D182}, {0x1D185, 0x1D18B}, {0x1D1AA, 0x1D1AD}, {0x1D242, 0x1D244}, {0x1DA00, 0x1DA36}, {0x1DA3B, 0x1DA6C}, {0x1DA75, 0x1DA75}, {0x1DA84, 0x1DA84}, {0x1DA9B, 0x1DA9F}, {0x1DAA1, 0x1DAAF}, {0x1E000, 0x1E006}, {0x1E008, 0x1E018}, {0x1E01B, 0x1E021}, {0x1E023, 0x1E024}, {0x1E026, 0x1E02A}, {0x1E08F, 0x1E08F}, {0x1E130, 0x1E136}, {0x1E2AE, 0x1E2AE}, {0x1E2EC, 0x1E2EF}, {0x1E4EC, 0x1E4EF}, {0x1E5EE, 0x1E5EF}, {0x1E6E3, 0x1E6E3}, {0x1E6E6, 0x1E6E6}, {0x1E6EE, 0x1E6EF}, {0x1E6F5, 0x1E6F5}, {0x1E8D0, 0x1E8D6}, {0x1E944, 0x1E94A}, {0xE0001, 0xE0001}, {0xE0020, 0xE007F}, {0xE0100, 0xE01EF}, }; #define WIDTH_0_COUNT 378 /* Width 2 ranges: 124 entries */ static const unicode_range_t width_2_ranges[] = { {0x1100, 0x115F}, {0x231A, 0x231B}, {0x2329, 0x232A}, {0x23E9, 0x23EC}, {0x23F0, 0x23F0}, {0x23F3, 0x23F3}, {0x25FD, 0x25FE}, {0x2614, 0x2615}, {0x2630, 0x2637}, {0x2648, 0x2653}, {0x267F, 0x267F}, {0x268A, 0x268F}, {0x2693, 0x2693}, {0x26A1, 0x26A1}, {0x26AA, 0x26AB}, {0x26BD, 0x26BE}, {0x26C4, 0x26C5}, {0x26CE, 0x26CE}, {0x26D4, 0x26D4}, {0x26EA, 0x26EA}, {0x26F2, 0x26F3}, {0x26F5, 0x26F5}, {0x26FA, 0x26FA}, {0x26FD, 0x26FD}, {0x2705, 0x2705}, {0x270A, 0x270B}, {0x2728, 0x2728}, {0x274C, 0x274C}, {0x274E, 0x274E}, {0x2753, 0x2755}, {0x2757, 0x2757}, {0x2795, 0x2797}, {0x27B0, 0x27B0}, {0x27BF, 0x27BF}, {0x2B1B, 0x2B1C}, {0x2B50, 0x2B50}, {0x2B55, 0x2B55}, {0x2E80, 0x2E99}, {0x2E9B, 0x2EF3}, {0x2F00, 0x2FD5}, {0x2FF0, 0x3029}, {0x302E, 0x303E}, {0x3041, 0x3096}, {0x309B, 0x30FF}, {0x3105, 0x312F}, {0x3131, 0x318E}, {0x3190, 0x31E5}, {0x31EF, 0x321E}, {0x3220, 0x3247}, {0x3250, 0xA48C}, {0xA490, 0xA4C6}, {0xA960, 0xA97C}, {0xAC00, 0xD7A3}, {0xF900, 0xFAFF}, {0xFE10, 0xFE19}, {0xFE30, 0xFE52}, {0xFE54, 0xFE66}, {0xFE68, 0xFE6B}, {0xFF01, 0xFF60}, {0xFFE0, 0xFFE6}, {0x16FE0, 0x16FE3}, {0x16FF0, 0x16FF6}, {0x17000, 0x18CD5}, {0x18CFF, 0x18D1E}, {0x18D80, 0x18DF2}, {0x1AFF0, 0x1AFF3}, {0x1AFF5, 0x1AFFB}, {0x1AFFD, 0x1AFFE}, {0x1B000, 0x1B122}, {0x1B132, 0x1B132}, {0x1B150, 0x1B152}, {0x1B155, 0x1B155}, {0x1B164, 0x1B167}, {0x1B170, 0x1B2FB}, {0x1D300, 0x1D356}, {0x1D360, 0x1D376}, {0x1F004, 0x1F004}, {0x1F0CF, 0x1F0CF}, {0x1F18E, 0x1F18E}, {0x1F191, 0x1F19A}, {0x1F200, 0x1F202}, {0x1F210, 0x1F23B}, {0x1F240, 0x1F248}, {0x1F250, 0x1F251}, {0x1F260, 0x1F265}, {0x1F300, 0x1F320}, {0x1F32D, 0x1F335}, {0x1F337, 0x1F37C}, {0x1F37E, 0x1F393}, {0x1F3A0, 0x1F3CA}, {0x1F3CF, 0x1F3D3}, {0x1F3E0, 0x1F3F0}, {0x1F3F4, 0x1F3F4}, {0x1F3F8, 0x1F43E}, {0x1F440, 0x1F440}, {0x1F442, 0x1F4FC}, {0x1F4FF, 0x1F53D}, {0x1F54B, 0x1F54E}, {0x1F550, 0x1F567}, {0x1F57A, 0x1F57A}, {0x1F595, 0x1F596}, {0x1F5A4, 0x1F5A4}, {0x1F5FB, 0x1F64F}, {0x1F680, 0x1F6C5}, {0x1F6CC, 0x1F6CC}, {0x1F6D0, 0x1F6D2}, {0x1F6D5, 0x1F6D8}, {0x1F6DC, 0x1F6DF}, {0x1F6EB, 0x1F6EC}, {0x1F6F4, 0x1F6FC}, {0x1F7E0, 0x1F7EB}, {0x1F7F0, 0x1F7F0}, {0x1F90C, 0x1F93A}, {0x1F93C, 0x1F945}, {0x1F947, 0x1F9FF}, {0x1FA70, 0x1FA7C}, {0x1FA80, 0x1FA8A}, {0x1FA8E, 0x1FAC6}, {0x1FAC8, 0x1FAC8}, {0x1FACD, 0x1FADC}, {0x1FADF, 0x1FAEA}, {0x1FAEF, 0x1FAF8}, {0x20000, 0x2FFFD}, {0x30000, 0x3FFFD}, }; #define WIDTH_2_COUNT 124 /* Binary search in a range table */ static int in_range_table(int cp, const unicode_range_t *table, int count) { int left = 0, right = count - 1; while (left <= right) { int mid = (left + right) / 2; if (cp < table[mid].start) { right = mid - 1; } else if (cp > table[mid].end) { left = mid + 1; } else { return 1; } } return 0; } /* Get display width for a Unicode codepoint */ int FANSI_unicode_width(int cp) { /* Fast path for printable ASCII */ if (cp >= 0x20 && cp < 0x7F) return 1; /* Check zero-width characters */ if (in_range_table(cp, width_0_ranges, WIDTH_0_COUNT)) return 0; /* Check double-width characters */ if (in_range_table(cp, width_2_ranges, WIDTH_2_COUNT)) return 2; /* Default to width 1 */ return 1; } SEXP FANSI_unicode_version(void) { return mkString(UNICODE_VERSION); } fansi/src/carry.c0000644000176200001440000001767414533476156013462 0ustar liggesusers/* * Copyright (C) Brodie Gaslam * * This file is part of "fansi - ANSI Control Sequence Aware String Functions" * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Go to for a copies of the licenses. */ #include "fansi.h" void state_at_end( struct FANSI_state *state, R_xlen_t i, const char * arg ) { FANSI_read_all(state, i, arg); FANSI_reset_pos(state); } SEXP FANSI_state_at_end_ext( SEXP x, SEXP warn, SEXP term_cap, SEXP ctl, SEXP norm, SEXP carry, SEXP arg, SEXP allowNA ) { FANSI_val_args(x, norm, carry); if(TYPEOF(arg) != STRSXP || XLENGTH(arg) != 1) error("Internal Error: bad `arg` arg."); // nocov const char * arg_chr; // NA case for testing warn generation with no arg. if(STRING_ELT(arg, 0) == NA_STRING) arg_chr = NULL; else arg_chr = CHAR(STRING_ELT(arg, 0)); // should be ASCII int prt = 0; int any_na = 0; int normalize = asInteger(norm); // Read-in any pre-existing state to carry int do_carry = STRING_ELT(carry, 0) != NA_STRING; SEXP carry_string; if(do_carry) { carry_string = PROTECT(carry); ++prt; } else { carry_string = PROTECT(mkString("")); ++prt; } SEXP R_true = PROTECT(ScalarLogical(1)); ++prt; SEXP R_zero = PROTECT(ScalarInteger(0)); ++prt; SEXP keepNA, width; keepNA = R_true; width = R_zero; // character width mode struct FANSI_state state_prev = FANSI_state_init_full( carry_string, warn, term_cap, allowNA, keepNA, width, ctl, (R_xlen_t) 0 ); state_at_end(&state_prev, 0, "carry"); R_xlen_t len = XLENGTH(x); struct FANSI_buff buff; FANSI_INIT_BUFF(&buff); SEXP res = PROTECT(allocVector(STRSXP, len)); ++prt; struct FANSI_state state; for(R_xlen_t i = 0; i < len; ++i) { FANSI_interrupt(i); if(!i) { state = FANSI_state_init_full( x, warn, term_cap, allowNA, keepNA, width, ctl, i ); } else FANSI_state_reinit(&state, x, i); if(STRING_ELT(x, i) == NA_STRING || (any_na && do_carry)) { any_na = 1; SET_STRING_ELT(res, i, NA_STRING); continue; } if(do_carry) state.fmt.sgr = state_prev.fmt.sgr; state_at_end(&state, i, arg_chr); FANSI_state_as_chr(&buff, state, normalize, i); SEXP reschr = PROTECT(FANSI_mkChar(buff, CE_NATIVE, i)); SET_STRING_ELT(res, i, reschr); UNPROTECT(1); state_prev = state; } FANSI_release_buff(&buff, 1); UNPROTECT(prt); return res; } struct FANSI_state FANSI_carry_init( SEXP carry, SEXP warn, SEXP term_cap, SEXP ctl ) { int prt = 0; int do_carry = STRING_ELT(carry, 0) != NA_STRING; SEXP carry_string; if(do_carry) { carry_string = PROTECT(carry); ++prt; } else { carry_string = PROTECT(mkString("")); ++prt; } SEXP R_true = PROTECT(ScalarLogical(1)); ++prt; SEXP R_zero = PROTECT(ScalarInteger(0)); ++prt; SEXP allowNA, keepNA, width; allowNA = keepNA = R_true; width = R_zero; // character width mode // Read-in any pre-existing state to carry struct FANSI_state state_carry = FANSI_state_init_full( carry_string, warn, term_cap, allowNA, keepNA, width, ctl, (R_xlen_t) 0 ); state_at_end(&state_carry, (R_xlen_t) 0, "carry"); UNPROTECT(prt); return state_carry; } /* * Compute Sequences to Transition from `end` to `restart` * * Very similar logic to used in `normalize`, intended to handle the * `substr_ctl(..., carry=TRUE, terminate=FALSE)` case. */ int FANSI_W_bridge( struct FANSI_buff * buff, struct FANSI_state end, struct FANSI_state restart, int normalize, R_xlen_t i, const char * err_msg ) { // Fairly different logic for normalize vs not because in normalize we can // rely on an e.g. color change to change a pre-existing color, whereas in // non-normalize we close explicitly and need to re-open. struct FANSI_sgr to_close, to_open; to_close = FANSI_sgr_setdiff(end.fmt.sgr, restart.fmt.sgr, !normalize); to_open = FANSI_sgr_setdiff(restart.fmt.sgr, end.fmt.sgr, !normalize); if(!normalize) { // We need to combine all the style tokens, which means we need to write the // enclosing \033[ and m separately depending on what needs to change. // renew are all the things that exist both in old and new that need to be // re-opened after an all-close. struct FANSI_sgr renew; // If we close everything, we need to re-open the stuff that was active renew = FANSI_sgr_intersect(end.fmt.sgr, restart.fmt.sgr); int active_open = FANSI_sgr_active(to_open); int active_close = FANSI_sgr_active(to_close); if(active_open && active_close) { FANSI_W_COPY(buff, "\033[0;"); FANSI_W_sgr(buff, renew, normalize, 0, i); FANSI_W_sgr(buff, to_open, normalize, 0, i); if(buff->buff) *((buff->buff) - 1) = 'm'; } else if (active_close) { FANSI_W_COPY(buff, "\033[0;"); FANSI_W_sgr(buff, renew, normalize, 0, i); if(buff->buff) *((buff->buff) - 1) = 'm'; } else { FANSI_W_sgr( buff, FANSI_sgr_setdiff(restart.fmt.sgr, end.fmt.sgr, 0), normalize, 1, i );} } else { FANSI_W_sgr_close(buff, to_close, normalize, i); FANSI_W_sgr(buff, to_open, normalize, 1, i); } // Any changed URLs will need to be written (empty URL acts as a closer // so simpler than with SGR). if(FANSI_url_comp(end.fmt.url, restart.fmt.url)) { if(!FANSI_url_active(restart.fmt.url)) FANSI_W_url_close(buff, end.fmt.url, i); FANSI_W_url(buff, restart.fmt.url, i); } return buff->len; } SEXP FANSI_bridge_state_ext(SEXP end, SEXP restart, SEXP term_cap, SEXP norm) { if(TYPEOF(end) != STRSXP) error("Internal Error: `end` must be character vector"); // nocov if(TYPEOF(restart) != STRSXP) error("Internal Error: `restart` must be character vector"); // nocov if(XLENGTH(end) != XLENGTH(restart)) error("Internal Error: `end` and `restart` unequal lengths"); // nocov if(TYPEOF(norm) != LGLSXP || XLENGTH(norm) != 1) error("Argument `normalize` should be TRUE or FALSE."); // nocov int normalize = asInteger(norm); struct FANSI_buff buff; FANSI_INIT_BUFF(&buff); R_xlen_t x_len = XLENGTH(end); SEXP res = PROTECT(allocVector(STRSXP, x_len)); // WRE docs this is init'ed // We'll already have warned about these at some point SEXP warn = PROTECT(ScalarInteger(0)); struct FANSI_state st_end, st_rst; for(R_xlen_t i = 0; i < x_len; ++i) { FANSI_interrupt(i); if(STRING_ELT(end, i) == NA_STRING || STRING_ELT(restart, i) == NA_STRING) continue; if( getCharCE(STRING_ELT(end, i)) != CE_NATIVE || getCharCE(STRING_ELT(restart, i)) != CE_NATIVE ) { // nocov start error( "Internal Error: non-native encoding at index[%jd].", FANSI_ind(i) ); // nocov end } // Do not warn here, so arg does not matter if(!i) { st_end = FANSI_state_init(end, warn, term_cap, i); state_at_end(&st_end, i, NULL); st_rst = FANSI_state_init(restart, warn, term_cap, i); state_at_end(&st_rst, i, NULL); } else { FANSI_state_reinit(&st_end, end, i); state_at_end(&st_end, i, NULL); FANSI_state_reinit(&st_rst, restart, i); state_at_end(&st_rst, i, NULL); } FANSI_reset_buff(&buff); // Measure const char * err_msg = "Bridging state"; int len = FANSI_W_bridge(&buff, st_end, st_rst, normalize, i, err_msg); if(len < 0) continue; // Write FANSI_size_buff(&buff); FANSI_W_bridge(&buff, st_end, st_rst, normalize, i, err_msg); SEXP reschr = PROTECT(FANSI_mkChar(buff, CE_NATIVE, i)); SET_STRING_ELT(res, i, reschr); UNPROTECT(1); } FANSI_release_buff(&buff, 1); UNPROTECT(2); return res; } fansi/src/read.c0000644000176200001440000013675115106721052013234 0ustar liggesusers/* * Copyright (C) Brodie Gaslam * * This file is part of "fansi - ANSI Control Sequence Aware String Functions" * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Go to for a copies of the licenses. */ #include // snprintf #include // strlen #include "fansi.h" /* * GENERAL NOTES ON read_ FUNCTIONS * * * read_* should never be used directly, use FANSI_read_(next|until). * * state.pos.x will be the first unread character after a call to `read_*` * * It is assumed that the string pointed to by a state cannot be longer than * INT_MAX, so we do not check for overflow (this is checked on state init) * except for width. * * In many cases it is possible to bypass `FANSI_read_next` by e.g. incrementing * the `pos.x` offset. Typically this is done when we don't care about thing * such as UTF-8 or widths. In these cases, care should be taken to ensure none * of the subsequent uses of the state object rely on the specific states that * `FANSI_read_(next|until)` leaves it in. * * `FANSI_read_until` will be faster anytime we need to read a sequence of * characters, particularly if they are all e.g. "ASCII", as it avoid having to * jump in and out of the function requiring moving stuff in and out of memory. * `FANSI_read_next` is needed when we specifically just want to read one * "character" to check it. It might be possible to replace `FANSI_read_next` * with a careful call to `FANSI_read_until`, but there are enough corner cases * that it was deemed easier to just have a different function (and IIRC there * might have been deal breaker, but I forget what). */ /*- Error Data ----------------------------------------------------------------\ \-----------------------------------------------------------------------------*/ static const char * err_messages[] = { "a CSI SGR sequence with unknown substrings or a OSC hyperlink with unsupported parameters", "a CSI SGR sequence or OSC hyperlink with invalid substrings", "a CSI SGR sequence with color codes not supported by terminal", "a non-SGR CSI or a non-URL OSC sequence", "a non-SGR CSI or a non-URL OSC sequence with invalid substrings", "a malformed CSI or OSC sequence", // early end "a non-CSI/OSC escape sequence", "a malformed escape sequence", "a C0 control character", "a malformed UTF-8 sequence", "an illegal non-ASCII byte" }; /*- UTF8 Helpers --------------------------------------------------------------\ \-----------------------------------------------------------------------------*/ #include "utf8clen.h" /* * Perfunctory validation, checks there is a zero in the right spot * for the first byte, and that continuation bytes start with 10. * * Assumes correct number of continuation bytes exist and that * input was read through utf8clen. * * DO NOT USE AS STANDALONE UTF8 VALIDATION. */ static int valid_utf8(const char * chr, int bytes) { int pass = 0; if(bytes > 1) { pass = !(*chr & (0x20 >> (bytes - 2))); switch(bytes) { case 4: pass &= (*(++chr) & 0xc0) == 0x80; /* FALLTHRU */ case 3: pass &= (*(++chr) & 0xc0) == 0x80; /* FALLTHRU */ case 2: pass &= (*(++chr) & 0xc0) == 0x80; break; default: pass = 0; } } return pass; } // Compute a unicode code point from a _valid_ UTF8 encoding // Assumes 0 < bytes < 7 (or else bad stuff will happen) static int utf8_to_cp(const char * chr, int bytes) { int cp = 0; // Lead byte (trailing bytes only contribute 6 bits each) cp |= (*chr & (0xff >> (bytes + (bytes > 1)))) // keep 7, 5, 4, or 3 bits << (bytes - 1) * 6; // shift by byte count // Trailing bytes keep trailing 6 bits for(int i = bytes - 1; i > 0; --i) cp |= (*(chr + bytes - i) & 0x3f) << (i - 1) * 6; return cp; } /*- Helpers -------------------------------------------------------------------\ \-----------------------------------------------------------------------------*/ static unsigned int set_err(unsigned int x, unsigned int err) { return FANSI_SET_RNG(x, STAT_ERR_START, STAT_ERR_ALL, err); } // Can a byte be interpreted as ASCII number? static int is_num(const char * string) { return *string >= 48 && *string <= 57; } // Convert a char value to number by subtracting the zero char; only intended // for use with string values in [0-9] static int as_num(const char * string) { if(!is_num(string)) // nocov start error( "Internal Error: attempt to convert non-numeric char (%d) to int.", (int) *string ); // nocov end return (int) (*string - '0'); } #define EW_BUFF 39 static void alert(struct FANSI_state * state, R_xlen_t i, const char * arg) { unsigned int err_code = FANSI_GET_ERR(state->status); int err_mode = (err_code == ERR_BAD_UTF8 || err_code == ERR_NON_ASCII); if( ( !(state->status & STAT_WARNED) || err_mode // Bad error still happen even if warned already ) && err_code && (state->settings & (1U << (SET_WARN + err_code - 1U))) ) { // Select warn or error depending on severity void (*fun)(const char *, ...); if(err_mode) fun = error; else fun = warning; int ew_buff = EW_BUFF; char argp[EW_BUFF]; if(arg) { const char * err_fmt = "Argument `%s` contains"; // < 1 for terminator, +2 for %s,,all these small enough so int is okay if(ew_buff - strlen(err_fmt) - strlen(arg) + 2 < 1) error("Internal Error: arg name too long for warning.");// nocov int try = snprintf(argp, EW_BUFF, err_fmt, arg); if(try < 0) error("Internal Error: snprintf failed."); // nocov } else { strcpy(argp, "Encountered"); } fun( "%s %s at index [%jd], %s%s", argp, err_messages[err_code - 1], FANSI_ind(i), "see `?unhandled_ctl`", err_mode ? "." : "; you can use `warn=FALSE` to turn off these warnings." ); state->status |= STAT_WARNED; // only warn once } } /*- Parsers -------------------------------------------------------------------\ \-----------------------------------------------------------------------------*/ /* * Attempts to read CSI SGR tokens * * Returns token value. `state` is advanced to the last byte of the sequence so * that calling code can check for e.g. ';' to know that there may be more * parameters to parse. */ unsigned int parse_token(struct FANSI_state * state) { unsigned int mult, val; int len, len_intermediate, len_tail, is_csi, non_standard, private, leading_zeros, not_zero, is_sgr, err_code; len = len_intermediate = len_tail = is_csi = non_standard = private = leading_zeros = not_zero = is_sgr = err_code = 0; mult = 1; val = 0U; const char * string = state->string + state->pos.x; // `private` a bit redundant since we don't actually use it differentially to // non-normal private = *string >= 0x3C && * string <= 0x3F; int bad_sub = 0; // cycle through valid parameter bytes [0-9:;<=>?] while(*string >= 0x30 && *string <= 0x3F && *string != ';') { int is_zero = *string == '0'; if(!is_zero && !not_zero) not_zero = 1; if(is_zero && !not_zero) ++leading_zeros; non_standard |= *string > 0x39; ++string; ++len; } if(non_standard) bad_sub = 1; // check for for intermediate bytes, we allow 'infinite' here as per // ECMA48, although they note 1 byte is likely sufficient. while(*string >= 0x20 && *string <= 0x2F) { ++string; ++len_intermediate; } // check for final byte is_sgr = 0; is_csi = 1; // Really means "is escape 'complete'" if((*string == ';' || *string == 'm') && !len_intermediate) { // valid end of SGR parameter substring if(*string == ';') is_csi = 0; // technically non-sgrness is implicit in is_csi + err_code, but because we // can parse multiple CSI sequences one after the other, and we accumulate // the err_code value, it's cleaner to just explicitly determine whether // sequence is actually sgr. } else if(*string >= 0x40 && *string <= 0x7E) { // valid final byte, but not SGR err_code = ERR_NOT_SPECIAL; } else { // Invalid end, consume until find a valid end or end string while(*string && (*string < 0x40 || *string > 0x7E)) { if((unsigned char)*string > 0x7F) err_code = ERR_NON_ASCII; ++string; ++len_tail; } bad_sub = 1; if(!*string && err_code < ERR_BAD_CSI_OSC) err_code = ERR_BAD_CSI_OSC; } if(*string == 'm') is_sgr = 1; // Check num length to avoid overflow. if(len - leading_zeros > 3) bad_sub = 1; // see val > 255 below if(!bad_sub && err_code < ERR_BAD_SUB) { int len2 = len - leading_zeros; while(len2--) { val += (as_num(--string) * mult); mult *= 10; } } // Anything over 255 cannot be part of a valid CSI (reference?). It seems as // if the standards only specify it should be a decimal number, so this is not // strictly correct. if(val > 255) bad_sub = 1; if(bad_sub && !is_sgr && err_code < ERR_NOT_SPECIAL_BAD_SUB) err_code = ERR_NOT_SPECIAL_BAD_SUB; else if(bad_sub && err_code < ERR_BAD_SUB) err_code = ERR_BAD_SUB; state->pos.x += len + len_intermediate + len_tail; state->status = set_err(state->status, err_code); // csi/sgr mutually exclusive if(is_sgr) state->status |= CTL_SGR; else if(is_csi) state->status |= CTL_CSI; return val; } /* * Call with state once we've advanced the string just past a [34]8; * * Will return the state after reading through the next two or four * subparameters (depending on whether the first subparameter is 2 or 5) which * in theory correspond to to the r,g,b values. * * @param mode is whether we are doing foregrounds (3) or backgrounds (4) * @param colors is whether we are doing palette (5), or rgb truecolor (2) */ void parse_colors( struct FANSI_state * state, int mode ) { if(mode != 3 && mode != 4) error("Internal Error: parsing color with invalid mode."); // nocov int tok_val = 0; int i_max; int prev_x = state->pos.x; // parse_token doesn't consume trailing, so need to inspect if(state->string[state->pos.x] == ';') { ++state->pos.x; // First, figure out if we are in true color or palette mode tok_val = parse_token(state); // advances state by ref! unsigned int err_tmp = FANSI_GET_ERR(state->status); if(!err_tmp && state->string[state->pos.x] == ';') { ++state->pos.x; if( (tok_val != 2 && tok_val != 5) || (state->status & CTL_CSI) ) { // weird case, we don't want to advance the position here because // `tok_val` needs to be interpreted as potentially a non-color style // and the prior 38 or 48 just gets tossed (at least this happens on OSX // terminal and iTerm) state->pos.x = prev_x; state->status = set_err(state->status, ERR_UNKNOWN_SUB); } else { // terminal doesn't have 256 or true color capability? int cap_exceeded = (tok_val == 2 && !(state->settings & TERM_TRUECOLOR)) || (tok_val == 5 && !(state->settings & TERM_256)); if(cap_exceeded && (state->settings & SET_TERMOLD)) { // Pre 1.0 treatement of term cap exceedance was to emulate a // terminal that can't handle the 38/48 codes, we preserve that as // an option with SET_TERMOLD state->pos.x = prev_x; state->status = set_err(state->status, ERR_EXCEED_CAP); } else { unsigned char tmp_col[3] = {0}; int colors = tok_val; int err_col = 0; int early_end = 0; i_max = colors == 5 ? 1 : 3; // Parse through the subsequent tokens for(int i = 0; i < i_max; ++i) { tok_val = parse_token(state); // advances state by ref! err_col = FANSI_GET_ERR(state->status); early_end = state->string[state->pos.x] != ';' && i < (i_max - 1); if(early_end && err_col < ERR_BAD_SUB) { state->status = set_err(state->status, ERR_BAD_SUB); err_col = ERR_BAD_SUB; } // this may overflow, but usigned so ok, + that's how Iterm2 seems // to interpret the value tmp_col[i] = tok_val; if(state->string[state->pos.x] && i < (i_max - 1) && !early_end) ++state->pos.x; // consume semi-colon except last one if(early_end) break; } // Only change a color if all sub-tokens parse correctly (arguably we // could allow e.g. 900 as a color channel value as Iterm2 does. if(!err_col && !early_end) { if(colors == 2) { if(mode == 3) state->fmt.sgr.color.x = CLR_TRU | 8U; else state->fmt.sgr.bgcol.x = CLR_TRU | 8U; i_max = 3; } else if (colors == 5) { if(mode == 3) state->fmt.sgr.color.x = CLR_256 | 8U; else state->fmt.sgr.bgcol.x = CLR_256 | 8U; i_max = 1; } else error("Internal Error: 1301341"); // nocov if(mode == 3) memcpy(state->fmt.sgr.color.extra, tmp_col, sizeof(tmp_col)); else memcpy(state->fmt.sgr.bgcol.extra, tmp_col, sizeof(tmp_col)); } if(cap_exceeded && err_col < ERR_EXCEED_CAP) state->status = set_err(state->status, ERR_EXCEED_CAP); } } } else if(!err_tmp) state->status = set_err(state->status, ERR_BAD_SUB); } else state->status = set_err(state->status, ERR_BAD_SUB); } // DANGER: param must be known to be no longer than INT_MAX. // // This is going to be quadratic on params * strlen(params) so bad idea to // search for all params if there are many (there should not be). // // @param will be assumed to be colon delimited // @param param must include trailing =, e.g. "id=" static struct FANSI_offset get_url_param( const char * string, unsigned int start, unsigned int len, const char * param ) { // We don't check any params longer than 128 chars unsigned int plen = 0; struct FANSI_offset res = {0}; while(plen <= 128 && *(param + plen)) ++plen; // Can't test the checks, we only ever use this with 'id=' ATM if(*(param + plen)) error("Internal Error: max allowed param len 128 bytes."); // nocov if(plen) { if(*(param + plen - 1) != '=') error("Internal Error: trailing param char must be '='."); // nocov const char * target = string + start; const char * end; if(plen <= len) { while( *target && (target - (string + start) < len - plen) && memcmp(target, param, plen) ) ++target; // could seek for delimiter for speed if(*target) { int o_pstart = target - string + plen; end = target; // Previously checked that there will be at least a ';' while(*end && *end != ':' && *end != ';') ++end; int o_pend = end - string; if(o_pstart < 0 || o_pend < 0) error("Internal Error: bad url param."); // nocov res = (struct FANSI_offset) { (unsigned int) o_pstart, (unsigned int) (o_pend - o_pstart) }; } } } return res; } /* * Parse OSC Encoded URL as described by @egmontkob (Egmont Koblinger): * * https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda * * @egmontkob appears very involved in terminal emulation discussions and is * listed as an iterm2 contributor. He frequently interacts with @gnachman * (iterm2 primary developer) on a seeming peer basis, and does seem to know * what he's talking about. He appears to be a programmer with the Gnome * project. * * Nonetheless, this isn't much of a formal spec. The description is mostly * about how iterm2 operates. * * Opening sequence is (spaces for clarity, not there in reality): * * OSC 8 ; params ; URL ST * * With OSC == ']' and params == 'key1=val1:key2=val2' with the only key that is * being discussed as in use at all being 'id'. Notwithstanding iterm2 doesn't * seem to implement id (should connects multiple links into one). Not entirely * clear what we should do with the unsupported params. * * There is no real harm in carrying them, even though this is contrary to what * we do with SGR, because we just keep a pointer to the original string (this * should be okay because by the time we return to R this pointer is released, * or at least completely inaccessible so in the case of a GC there is no risk * of us trying to use it again). * * The reason we shouldn't do something similar with SGR is we have no idea of * the semantics of the tokens. So we could keep piling on opening and closing * sequences of unknown tokens with no understanding of what they do, and as * soon as we want to try to understand them and hold on to them, the simple * pointer and offset to the original string that we use for OSC does not work. * So the key difference with SGR in particular is the non-cumulative nature of * OSC wrt to URL paramters (although this is not really clearly documented). * * Technically there is no closing sequence, just an empty opening sequence acts * like a closing sequence (what about non-empty params but empty URL?). * * > For portability, the parameters and the URI must not contain any bytes * > outside of the 32–126 range. If they do, the behavior is undefined. Bytes * > outside of this range in the URI must be URI-encoded. * > * > Due to the syntax, additional parameter values cannot contain the : and ; * > characters either. * * See also `parse_osc`. * * @return the length of the osc parsed */ #define ID_END(x) ((x).id.len + (x).id.start) #define URL_END(x) ((x).url.len + (x).url.start) unsigned int parse_url(struct FANSI_state * state) { const char *end, *x0, *x; unsigned int err_tmp = 0; unsigned int osc_len = 0; x0 = state->string; x = state->string + state->pos.x; if(*(x) == '8' && *(x + 1) == ';') { // All o_ variables are offsets relative to beginning of string unsigned int o_dat = state->pos.x + 2; end = x0 + o_dat; // Look for end of escape tracking position of first semi-colons (subsequent // ones may be part of the URI). unsigned int o_semic = 0; // semicolon unsigned int o_bad = 0; while(*end && *end != '\a' && !(*end == 0x1b && *(end + 1) == '\\')) { // neither params nor URI must contain bytes outside of 0x20-0x7E. This is // a narrower range than stricly allowed by OSC CSI. if(*end >= 0x20 && *end <= 0x7e) { // All good if (*end == ';' && o_semic <= o_dat) o_semic = end - x0; } else if((unsigned char)*end > 0x7f) { err_tmp = ERR_NON_ASCII; } else if (!(*end >= 0x08 && *end <= 0x0d)) { // Invalid sub string (these used to be 5) if(err_tmp < ERR_BAD_SUB) err_tmp = ERR_BAD_SUB; o_bad = end - x0; } else { // OK OSC, but non portable URL, used to be separate error from bad osc if(err_tmp < ERR_BAD_SUB) err_tmp = ERR_BAD_SUB; o_bad = end - x0; // really non-portable, but we don't distinguish } ++end; } // Ended sequence before string did if(*end) { // If o_semic is found, and string is not invalid, it's a URL if(*end && o_semic >= o_dat) { // const char * url_o_dat = x0 + o_semic + 1; // Only record params/id if we're sure they don't contain a bad byte state->fmt.url = (struct FANSI_url) {.string = state->string}; struct FANSI_offset id_tmp; id_tmp = get_url_param( state->string, o_dat, o_semic - o_dat, "id=" ); if(id_tmp.start > o_bad) state->fmt.url.id = id_tmp; // Only record url if it has neither bad nor non-portable byte if(o_semic > o_bad) state->fmt.url.url = (struct FANSI_offset) {o_semic + 1, end - (x0 + o_semic + 1)}; // Detect non id parameters if( // Params before id (+3 for "id=") (state->fmt.url.id.start > o_dat + 3) || // Params after id ( state->fmt.url.id.start && o_semic > state->fmt.url.id.start + state->fmt.url.id.len ) || // No id but other params (!state->fmt.url.id.start && o_semic > o_dat) ) { if(err_tmp < ERR_UNKNOWN_SUB) err_tmp = ERR_UNKNOWN_SUB; } // Sanity check if( (end - state->string) < URL_LEN(state->fmt.url) || (end - state->string) < ID_LEN(state->fmt.url) ) error("Internal Error: bad URI size."); // nocov } } else err_tmp = ERR_BAD_CSI_OSC; const char * xdat = x0 + o_dat; if(end < xdat) error("Internal Error: bad url data detection\n"); // Recall ESC] already consumed befor this function osc_len = end - xdat + 2 + // 2 for opening "8;" (*end != 0) + // consume terminator if there is one (*end == 0x1b); // consume extra byte for ST // Even if sequence doesn't end, we declare an OSC encoded URL state->status |= CTL_URL; state->pos.x += osc_len; state->status = set_err(state->status, err_tmp); } else error("Internal Error: non-URL OSC fed to URL parser.\n"); // nocov return osc_len; } /* * Return OSC length excluding initial "ESC]" * * OSC may be terminated with either BEL or ST (BEL is not ECMA48 standard, but * in common use for OSC based URL anchors). * * Support of C0 inside OSC (i.e. 0x08-0x0d) does not work correctly on * OS X terminal where they are emitted, and it is required that the start be * num; and if not re-emitting starts at that point. iterm2 does it correctly. * * see parse_url for the special case parsing for iterm2 spec OSC encoded URLs. * * @param x pointer to first byte after "ESC]". * @return number of bytes in OSC excluding opening "ESC]", and error code if * any */ static struct FANSI_osc parse_osc(const char * x) { const char * end = x; struct FANSI_osc osc = {.len=0, .error=0}; while(*end && *end != '\a' && !(*end == 0x1b && *(end + 1) == '\\')) { if (!((*end >= 0x08 && *end <= 0x0d) || (*end >= 0x20 && *end <= 0x7e))) { if((unsigned char)*end > 0x7f) { osc.error = ERR_NON_ASCII; } else if(osc.error < ERR_NOT_SPECIAL_BAD_SUB) osc.error = ERR_NOT_SPECIAL_BAD_SUB; } ++end; } // Unterminated if(!*end && osc.error < ERR_BAD_CSI_OSC) osc.error = ERR_BAD_CSI_OSC; osc.len = end - x + (*end != 0) + // consume terminator if there is one (*end == 0x1b); // consume extra byte for ST return osc; } /*- Read Interfaces -----------------------------------------------------------\ \-----------------------------------------------------------------------------*/ /* * @param reset whether to reset status before proceeding */ static void read_ascii_until( struct FANSI_state * state, int until, int reset ) { if(reset) state->status = state->status & STAT_WARNED; int until2 = until - state->pos.w; const char * start, * end; end = start = state->string + state->pos.x; while(IS_PRINT(*end) && (end - start) < until2) ++end; int bytes = end - start; state->pos.w += bytes; state->pos.x += bytes; } /* * Read a Character Off when we know it is an ascii char, this is so we have a * consistent way of advancing state. * * See GENERAL NOTES atop. */ static void read_one(struct FANSI_state * state) { ++state->pos.x; ++state->pos.w; } /* * Parses ESC sequences * * See GENERAL NOTES atop, and notes for each parse_ function. * * Based on ECMA-48 (see extra/Ecma-048.pdf) and CCITT Recommendation T.416 (the * latter cannot be conveyed for copyright reasons, but is published online in * draft form). * * In particular, special treatment for ANSI CSI SGR and OSC URL sequences. * Reading is greedy, where sequences will continue to be read until a valid * terminator is encountered (or target length achieved), even if there are * illegal bytes in the interim. This allows bad sequences to be stripped. * Only correct (or close enough) sequences will result in `state.status` * gaining one of the `CTL_*` flags. * * @section ANSI CSI: * * Valid chars: * * * Paramter Bytes 03/00 - 03/15 (0x30 to 0x3F): [0-9:;<=>?] * * First bit seq should be in 03/00 - 03/11: [0-9:;] * * Otherwise a private spec * * If normal spec, then parameter substrings: * * One or more numbers in 0-9 * * ':' to separate numbers into decimals * * ';' terminates the substring * * 03/12-03/15 allowed if not in first bytes of the parameter string, but * reserved for future use * * Leading zeros can be omitted * * Empty substrings allowed, and trailing delimiter can/should be omitted * * Intermediate bytes 02/00-02/15 (0x20-0x2F): [ !"#$%&'()*+,\-./] * * Final bytes 04/00-07/14 (0x40-0x7E): [@A-Z\[\\\]\%_`a-z{|}~] * * Spec appears to allow any number of decimal digits, but we cap to 3 in * [0,255] as integers. * * @section Possible Outcomes: * * See `STAT_ERR_MASK`. * * From some experimentation it doesn't seem like the intermediate bytes are * completely supported by the OSX terminal... A single itermediate works okay, * more and it becomes a crapshoot, '!' in particular seems to cause problems. * * iTerm seems to read only the last 8 bits of any number specified, at least * in the [34]8;2;... subparameter strings. In other words, '255' is equivalent * to '511' or some such. Terminal doesn't recognize the rgb style * sub-parameters, and in fact just seems to start interpreting subparameters * right after the 38/48, so '38;2m' is read as '2m'. * * Both iTerm and Terminal seem to interpret the next subparameter after a 38/48 * if is not a 2 or a 5. * * @section Illegal Bytes: * * Both iTerm and terminal seem to completely ignore bytes above 0x7E or below * 0x20 within CSI sequences. They seem to just display to screen / be * interpreted as the C0 ESC sequences they are and then the parsing of the CSI * string continues uninterrupted. * * @param state must be set with .pos.x pointing to the ESC that begins the * CSI sequence * @param term_i whether we're in terminate mode, in which case we will not * read trailing special controls. * */ void read_esc(struct FANSI_state * state, int term_i) { if(state->string[state->pos.x] != 27) // nocov start error( "Internal error: %s (decimal char %d).", "parsing ESC sequence that doesn't start with ESC", (int) state->string[state->pos.x] ); // nocov end unsigned int esc_types = 0; // 1 == CSI/OSC, 2 == SGR/URL // err_code is a bit annoying; we keep resetting the state->status error with // each token, so we need err_code to keep track of the overall error, but // then we need to store it back in ->status before exit. unsigned int err_code = 0; state->status &= ~CTL_MASK; unsigned int sgr_sup = state->settings & CTL_SGR; unsigned int csi_sup = state->settings & CTL_CSI; // Consume all contiguous ESC sequences, subject to some conditions (see while // at the end). We only interpet sequences if they are active per .settings, // but we need to read them in some cases to know what type they are to // decide. do { struct FANSI_state state_prev = *state; // Is the current escape recognized by the `ctl` parameter? It doesn't // matter if it ends up being badly encoded or, not just that it starts out // as a presumptive escape that we requested to recognize and such should // attempt to parse and advance as far as we're able to parse. int esc_recognized = 1; ++state->pos.x; // advance ESC // Reset status except warned as we could be reading multiple CSIs or OSCs // in a row. Error is preserved in err_code state->status = state->status & STAT_WARNED; if(state->string[state->pos.x] == '[' && (sgr_sup || csi_sup)) { // - CSI ----------------------------------------------------------------- ++state->pos.x; // consume '[' int tok_val = 0; // Make sure ->status only contains one CTL per ESC sequence. unsigned int ctl_prev = state->status & CTL_MASK; state->status &= ~CTL_MASK; // Loop through the SGR; each token we process successfully modifies state // and advances to the next token. do { state->status = set_err(state->status, 0); tok_val = parse_token(state); // advances state by ref! if(!FANSI_GET_ERR(state->status)) { // We have a reasonable CSI substring, now we need to check whether it // actually corresponds to anything that should modify state // // Only parse_colors below will modify positions. Otherwise sgr and // error codes should be the only things changing. if(!tok_val) state->fmt.sgr = (struct FANSI_sgr) {0}; // - Colors ---------------------------------------------------------- else if (tok_val == 39) state->fmt.sgr.color.x = 0; else if (tok_val == 49) state->fmt.sgr.bgcol.x = 0; else if (tok_val == 38 || tok_val == 48) // parse_colors internally calls parse_token (advances state by ref) parse_colors(state, tok_val < 40 ? 3 : 4); else if (tok_val >= 30 && tok_val < 48) { int fg = tok_val < 40; unsigned int col_code = tok_val - (fg ? 30 : 40); unsigned int col_enc = CLR_8 | col_code; if(fg) state->fmt.sgr.color.x = col_enc; else state->fmt.sgr.bgcol.x = col_enc; } else if ( (tok_val >= 90 && tok_val <= 97) || (tok_val >= 100 && tok_val <= 107) ) { // Old behavior: don't warn if exceed, and don't record color. New // behavior (post v1.0) warn if exceed, but record color. int term_old = state->settings & SET_TERMOLD; if((state->settings & TERM_BRIGHT) || !term_old) { if(!(state->settings & TERM_BRIGHT) && !term_old) state->status = set_err(state->status, ERR_EXCEED_CAP); int fg = tok_val < 100; unsigned int col_code = tok_val - (fg ? 90 : 100); unsigned int col_enc = CLR_BRIGHT | col_code; if(fg) state->fmt.sgr.color.x = col_enc; else state->fmt.sgr.bgcol.x = col_enc; } // - Styles On ------------------------------------------------------- } else if (tok_val < 10) { // 1-9 are the standard styles (bold/italic) // We use a bit mask on to track these state->fmt.sgr.style |= 1U << (tok_val - 1U); } else if (tok_val < 20) { // These are alternative fonts (10 is reset) state->fmt.sgr.style &= ~FONT_MASK; if(tok_val > 10) state->fmt.sgr.style |= tok_val << FONT_START; } else if (tok_val == 20) { // Fraktur state->fmt.sgr.style |= STL_FRAKTUR; } else if (tok_val == 21) { // Double underline state->fmt.sgr.style |= STL_UNDER2; } else if (tok_val == 26) { // reserved for proportional spacing as specified in CCITT // Recommendation T.61; implicitly we are assuming this is a single // substring parameter, unlike say 38;2;..., but really we have no // idea what this is. state->fmt.sgr.style |= STL_PROPSPC; // - Styles Off ------------------------------------------------------ } else if (tok_val == 22) { state->fmt.sgr.style &= ~STL_BOLD; state->fmt.sgr.style &= ~STL_BLUR; } else if (tok_val == 23) { state->fmt.sgr.style &= ~STL_ITALIC; state->fmt.sgr.style &= ~STL_FRAKTUR; } else if (tok_val == 24) { state->fmt.sgr.style &= ~STL_UNDER; state->fmt.sgr.style &= ~STL_UNDER2; } else if (tok_val == 25) { state->fmt.sgr.style &= ~STL_BLINK1; state->fmt.sgr.style &= ~STL_BLINK2; } else if (tok_val == 27) state->fmt.sgr.style &= ~STL_INVERT; else if (tok_val == 28) state->fmt.sgr.style &= ~STL_CONCEAL; else if (tok_val == 29) state->fmt.sgr.style &= ~STL_CROSSOUT; else if(tok_val == 50) state->fmt.sgr.style &= ~STL_PROPSPC; // - Borders / Ideograms --------------------------------------------- else if(tok_val > 50 && tok_val < 60) { switch(tok_val) { case 51: state->fmt.sgr.style |= BRD_FRAMED; break; case 52: state->fmt.sgr.style |= BRD_ENCIRC; break; case 53: state->fmt.sgr.style |= BRD_OVERLN; break; case 54: state->fmt.sgr.style &= ~(BRD_FRAMED | BRD_ENCIRC); break; case 55: state->fmt.sgr.style &= ~BRD_OVERLN; break; default: state->status = set_err(state->status, ERR_UNKNOWN_SUB); } } else if(tok_val >= 60 && tok_val <= 65) { switch(tok_val) { case 60: state->fmt.sgr.style |= IDG_UNDERL; break; case 61: state->fmt.sgr.style |= IDG_UNDERL2; break; case 62: state->fmt.sgr.style |= IDG_OVERL; break; case 63: state->fmt.sgr.style |= IDG_OVERL2; break; case 64: state->fmt.sgr.style |= IDG_STRESS; break; default: // ony 65 state->fmt.sgr.style &= ~IDG_MASK; } } else { state->status = set_err(state->status, ERR_UNKNOWN_SUB); } } if(FANSI_GET_ERR(state->status) > err_code) err_code = FANSI_GET_ERR(state->status); if(state->string[state->pos.x] != ';') break; ++state->pos.x; } while(1); // Consume closing char (parse_token already checked it is correct if(state->string[state->pos.x]) ++state->pos.x; // We have no way of knowning whether something could be SGR or other CSI // until we read the whole sequence. If we do not support SGRs, the // behavior should be to just treat it as a two char ESC. If we do // support it but it is bad, we consume as much of it as we can and treat // it as CSI. // // CSI and SGR status are exclusive (i.e. you get one xor the other from // parse_token) unsigned int sgr, csi; sgr = state->status & CTL_SGR; csi = state->status & CTL_CSI; if(sgr && sgr_sup) esc_types |= 2U; else if(csi && csi_sup) esc_types |= 1U; else if((sgr && !sgr_sup) || (csi && !csi_sup)) { // Good sequence, but don't support it, so just read 1 char from prev *state = state_prev; state->status &= STAT_WARNED; read_one(state); // can't use read_ascii_until as this is not ascii } else error("Internal Error: unexpected CSI/SGR status."); // nocov // If we're reading multiple ESCs in series, we could have more than one // of CSI/SGR in status. state->status |= ctl_prev; } else if( state->string[state->pos.x] == ']' && state->string[state->pos.x + 1] == '8' && state->string[state->pos.x + 2] == ';' && state->settings & CTL_URL ) { // - OSC Encoded URL ----------------------------------------------------- ++state->pos.x; // consume ']' parse_url(state); // advances state by ref! esc_types |= 2U; } else if( state->string[state->pos.x] == ']' && state->settings & CTL_OSC ) { // - Other OSC System Command -------------------------------------------- int osc_bytes = 0; ++state->pos.x; // consume ']' struct FANSI_osc osc = parse_osc(state->string + state->pos.x); osc_bytes = osc.len; err_code = osc.error; state->status |= CTL_OSC; esc_types |= 1U; state->pos.x += osc_bytes; } else if( !state->string[state->pos.x] && (state->settings & CTL_ESC_CTL) ) { // - String ends in ESC -------------------------------------------------- // Assume 2-byte ESC, although could be any other hence _CTL_MASK state->status |= CTL_ESC; esc_types |= 1U; err_code = ERR_ESC_OTHER_BAD; } else if(state->settings & CTL_ESC) { // -Two Byte ESC --------------------------------------------------------- esc_types |= 1U; state->status |= CTL_ESC; // Other ESC sequence; note there are technically multi character // sequences but we ignore them here. There is also the possibility that // we mess up a utf-8 sequence if it starts right after the ESC, but oh // well... if( state->string[state->pos.x] >= 0x40 && state->string[state->pos.x] <= 0x7E ) err_code = ERR_ESC_OTHER; else if((unsigned char)state->string[state->pos.x] > 0x7F) err_code = ERR_NON_ASCII; else err_code = ERR_ESC_OTHER_BAD; // Process additional character, even if bad ESC, for consistency with // greedy byte consumption. if(state->string[state->pos.x]) ++state->pos.x; } else { esc_types |= 1U; esc_recognized = 0; } // Did we read mixed special and non-special escapes? if(esc_types == (1U | 2U)) { *state = state_prev; break; } if(FANSI_GET_ERR(state->status) > err_code) err_code = FANSI_GET_ERR(state->status); // If the ESC was recognized then record error (if any) and advance, // otherwise reset the state and advance as if reading an ASCII character. if(esc_recognized) { if( esc_types == 2U && ( (err_code <= ERR_EXCEED_CAP || !(state->settings & SET_TERMOLD)) ) ) { if(term_i && !state->string[state->pos.x]) { *state = state_prev; state->status |= STAT_DONE; break; } else state->status |= STAT_SPECIAL; } } else { *state = state_prev; read_one(state); // read one byte, can's use read_ascii_until break; } } while( state->string[state->pos.x] == 0x1b && !(state->settings & SET_ESCONE) ); if(err_code > FANSI_GET_ERR(state->status)) state->status = set_err(state->status, err_code); } /* * C0 ESC sequences treated as zero width and do not count as characters either * * See GENERAL NOTES atop. */ void read_c0(struct FANSI_state * state) { int nl_sup = state->settings & CTL_NL; int c0_sup = state->settings & CTL_C0; int is_nl = state->string[state->pos.x] == '\n'; state->status &= STAT_WARNED; // reset state (UTF8 really) if(!is_nl) state->status = set_err(state->status, ERR_C0); read_one(state); // If C0/NL are being actively processed, treat them as width zero if((is_nl && nl_sup) || (!is_nl && c0_sup)) { --state->pos.w; state->status |= is_nl ? CTL_NL : CTL_C0; } } /* * Read a Series of UTF8 (and ASCII) Characters * * See GENERAL NOTES atop. * * Hacky grapheme approximation ensures flags (RI) aren't split, sets skin * modifiers to width zero (so greedy / not greedy searches will / will not * grab them), and sets width zero to anything following a ZWJ (for the same * reason). This will work in many cases, provided that the emoji sequences * are valid and recognized by the display device. Other graphemes work * similarly to the extent continuation code points are zero width naturally. * Prefixes, sequence interruptors, and other things will not work. * * @param until width target * @param overshoot allow overshooting of target width, if set to 0 it is * critical that calling code check for the _DONE flag. Must be 1 or 0 */ void read_utf8_until(struct FANSI_state * state, int until, int overshoot) { char x; unsigned int w_mode = FANSI_GET_RNG(state->settings, SET_WIDTH, COUNT_ALL); unsigned int cur_ri = state->status & STAT_RI; unsigned int cur_zwj = state->status & STAT_ZWJ; state->status = state->status & STAT_WARNED; while((x = state->string[state->pos.x]) && IS_UTF8(x)) { // These status are tracked in state-> because they must be retained // across escape sequences. unsigned int prev_zwj = cur_zwj; unsigned int prev_ri = cur_ri; cur_zwj = cur_ri = 0; // Reset prior state info int mb_err = 0; int disp_size = 0; int byte_size = utf8clen(state->string + state->pos.x, &mb_err); mb_err |= !valid_utf8(state->string + state->pos.x, byte_size); if(mb_err) { // mimic what R_nchar does on mb error. Breaks loop later. disp_size = NA_INTEGER; } else if(w_mode == COUNT_WIDTH || w_mode == COUNT_GRAPH) { // Assumes valid UTF-8! Should have been checked. int cp = utf8_to_cp(state->string + state->pos.x, byte_size); if(cp >= 0x1F1E6 && cp <= 0x1F1FF) { // Regional Indicator // First RI is width two, next zero. At some point we took advantage of // R's old approach of treating each of these as width one. It's // debatable what's more correct since we've seen both handlings in // displays. if(!(prev_ri)) { cur_ri |= STAT_RI; disp_size = 2; } else { disp_size = 0; } // we rely on external logic to force reading two RIs } else { if (cp >= 0x1F3FB && cp <= 0x1F3FF) { // Skin type: these now naturally resolve to zero width in the // lookup tables (different to R_nchar), so this exception moot. disp_size = 0; } else if (cp == 0x200D) { // Zero Width Joiner cur_zwj |= STAT_ZWJ; disp_size = 0; } else if (prev_zwj) { disp_size = 0; } else { disp_size = FANSI_unicode_width(cp); } } if(w_mode == COUNT_GRAPH && disp_size > 1) disp_size = 1; } else if(w_mode == COUNT_BYTES) { disp_size = byte_size; } else disp_size = 1; // toggle RI if(prev_ri) cur_ri = 0; if(disp_size == NA_INTEGER) { // Whether this throws an error depends on what ->settings is. state->status = set_err(state->status, ERR_BAD_UTF8); disp_size = byte_size = 1; } int total_width = state->pos.w + disp_size; if(total_width > until && !overshoot) { state->status |= STAT_DONE; break; } else { // We allow one overshoot if necessary and requested if(total_width == until) overshoot = 0; else if(total_width > until && overshoot) { state->status |= STAT_OVERSHOT; until = total_width; overshoot = 0; } state->pos.x += byte_size; state->utf8 = state->pos.x; // record after so no ambiguity about 0 state->status &= cur_ri | ~STAT_RI; state->status &= cur_zwj | ~STAT_ZWJ;; // This could possibly overflow if byte_size >> 2 (e.g. if at some point // width reports the \U escape codes. if(state->pos.w > FANSI_lim.lim_int.max - disp_size) error("Internal Error: width greater than INT_MAX"); // nocov // Don't count width of things following ZWJ int w_or_g = w_mode == COUNT_WIDTH || w_mode == COUNT_GRAPH; if(!prev_zwj || !w_or_g) { state->pos.w += disp_size; } } // Always break for error reporting if(mb_err) break; } } /* * Read a Character Off and Update State * * See GENERAL NOTES atop. */ void FANSI_read_next( struct FANSI_state * state, R_xlen_t i, const char * arg ) { unsigned char chr_val = (unsigned char) state->string[state->pos.x]; // reset all flags except persistent ones state->status = state->status & STAT_PERSIST; int is_utf8 = IS_UTF8(chr_val); int is_print = IS_PRINT(chr_val); if(is_print) read_one(state); else if (is_utf8) read_utf8_until(state, state->pos.w + 1, 1); else if (IS_ESC(chr_val)) read_esc(state, 0); else if(chr_val) read_c0(state); // Non-control or printable reset UTF8 state if(is_print || (!is_utf8 && !(state->status & CTL_MASK))) state->status &= ~(STAT_RI | STAT_ZWJ); // Trigger errors / warnings if warranted alert(state, i, arg); } /* * Consume bytes until a certain width is met. * * See GENERAL NOTES atop. * * Will read as many bytes as possible within each of the child `read_*` * functions, but will need to drop out occasionally. UTF8 state should survive * across calls to escape functions as terminals ignore them when composing * compound UTF8 graphemes. * * We always consume all controls less than target `until` but never those * greater than that. * * Two loop structure, where the second one cleans up any additional items that * do not add width. `read_utf8_until` does read trailing zero width, but * cannot handle the case where there are controls sandwiched between zero width * chars so we need to do it here. * * @param until width measure not to exceed (subject to overshoot) * @param overshoot allow a wide character to overshoot `until` * @param term_i if true will not read trailing special sequences. * @param mode 0: 'start mode', read all controls, 1: 'stop mode', only read * controls followed by zero width. */ void FANSI_read_until( struct FANSI_state * state, int until, int overshoot, int term_i, int mode, R_xlen_t i, const char * arg ) { char x; // - Basic Read -------------------------------------------------------------- state->status = state->status & STAT_WARNED; while( (x = state->string[state->pos.x]) && state->pos.w < until && !(state->status & (STAT_OVERSHOT | STAT_DONE)) ) { // reset non-persistent flags state->status = state->status & (STAT_PERSIST); if(IS_PRINT(x)) read_ascii_until(state, until, 1); else if(IS_UTF8(x)) read_utf8_until(state, until, overshoot); else if(IS_ESC(x)) read_esc(state, term_i); else if(x) read_c0(state); // C0 escapes (e.g. \t, \n, etc) // Trigger errors / warnings if warranted alert(state, i, arg); if(FANSI_GET_ERR(state->status) == ERR_BAD_UTF8) goto EXIT; } // - Trail Read -------------------------------------------------------------- // This handles mixed zero widths and escapes in trailing (utf8_until only // does zero width utf8s). // // 1. Consume all remaining zero width characters (+ those made so by ZWJ/RI) // 2. Consume all trailing controls, so long as they are followed by more // zero width char or we are in start mode. overshoot = 0; until = state->pos.w; // reset until to accomodate over/undershoot struct FANSI_state state_tmp = *state; while( (x = state_tmp.string[state_tmp.pos.x]) && state_tmp.pos.w == until && !IS_PRINT(x) && !(state_tmp.status & STAT_DONE) ) { // reset non-persistent flags state_tmp.status = state_tmp.status & (STAT_PERSIST); // If a special, save the prior point if in terminate mode if(IS_UTF8(x)) { int pos_prev = state_tmp.pos.x; read_utf8_until(&state_tmp, until, overshoot); // Next one was not zero width, so UTF8 cannot be advanced if(state_tmp.pos.x == pos_prev) break; // There was a zero width, so advance if(state_tmp.pos.w == state->pos.w) *state = state_tmp; } else { if(IS_ESC(x)) read_esc(&state_tmp, term_i); else if(x) read_c0(&state_tmp); // If it ended up not being a control we're done if(!(state_tmp.status & CTL_MASK)) break; // If in 'start' mode, read trailing controls else if (mode == 0) *state = state_tmp; } alert(&state_tmp, i, arg); if(FANSI_GET_ERR(state->status) == ERR_BAD_UTF8) goto EXIT; } alert(&state_tmp, i, arg); // because of breaks EXIT: state->status |= state_tmp.status & STAT_WARNED; } void FANSI_read_all(struct FANSI_state * state, R_xlen_t i, const char * arg) { int term_i = 0; int until = FANSI_lim.lim_int.max; int overshoot = 0; int mode = 1; FANSI_read_until(state, until, overshoot, term_i, mode, i, arg); } fansi/src/fansi-win.def0000644000176200001440000000005014362117337014516 0ustar liggesusersLIBRARY fansi.dll EXPORTS R_init_fansi fansi/src/has.c0000644000176200001440000000332414533476156013100 0ustar liggesusers/* * Copyright (C) Brodie Gaslam * * This file is part of "fansi - ANSI Control Sequence Aware String Functions" * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Go to for a copies of the licenses. */ /* * Check if a CHARSXP contains ANSI esc sequences */ #include "fansi.h" /* * Check if a CHARSXP contains ANSI esc sequences */ SEXP FANSI_has(SEXP x, SEXP ctl, SEXP warn) { if(TYPEOF(x) != STRSXP) error("Argument `x` must be character."); if(TYPEOF(ctl) != INTSXP) error("Internal Error: `ctl` must be INTSXP."); R_xlen_t len = XLENGTH(x); SEXP res = PROTECT(allocVector(LGLSXP, len)); int * res_int = LOGICAL(res); struct FANSI_state state; const char * arg = "x"; for(R_xlen_t i = 0; i < len; ++i) { if(!i) state = FANSI_state_init_ctl(x, warn, ctl, i); else FANSI_state_reinit(&state, x, i); FANSI_interrupt(i); SEXP chrsxp = STRING_ELT(x, i); if(chrsxp != NA_STRING) { int res = 0; const char * xc = CHAR(chrsxp); int off_init = FANSI_seek_ctl(xc); if(*(xc + off_init)) { state.pos.x = off_init; FANSI_find_ctl(&state, i, arg); res = (state.status & CTL_MASK) > 0; } res_int[i] = res; } else { res_int[i] = NA_LOGICAL; } } UNPROTECT(1); return res; } fansi/src/nchar.c0000644000176200001440000000574614533476156013432 0ustar liggesusers/* * Copyright (C) Brodie Gaslam * * This file is part of "fansi - ANSI Control Sequence Aware String Functions" * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Go to for a copies of the licenses. */ #include "fansi.h" /* * Not very optimized. * * @param z logical(1L) whether to stop once we confirm there is one non-sgr * character. */ SEXP FANSI_nchar( SEXP x, SEXP type, SEXP keepNA, SEXP allowNA, SEXP warn, SEXP term_cap, SEXP ctl, SEXP z ) { if(TYPEOF(z) != LGLSXP || XLENGTH(z) != 1) error("Internal error: `z` type error; contact maintainer"); // nocov if(TYPEOF(keepNA) != LGLSXP || XLENGTH(keepNA) != 1) error("Internal error: `keepNA` type error; contact maintainer"); // nocov if(TYPEOF(type) != INTSXP || XLENGTH(type) != 1) error("Internal error: `type` type error; contact maintainer"); // nocov int prt = 0; int keepNA_int = asLogical(keepNA); int type_int = asInteger(type); int zz = asLogical(z); if(zz && (type_int != COUNT_CHARS || !asLogical(allowNA))) error("Internal Error: `type` must be \"char\" for `nzchar_ctl`"); // nocov const char * arg = "x";; R_xlen_t x_len = XLENGTH(x); SEXP res = PROTECT(allocVector(zz ? LGLSXP : INTSXP, x_len)); prt++; int * resi = zz ? LOGICAL(res) : INTEGER(res); struct FANSI_state state; for(R_xlen_t i = 0; i < x_len; ++i) { FANSI_interrupt(i); if(!i) { state = FANSI_state_init_full( x, warn, term_cap, allowNA, keepNA, type, ctl, i ); } else FANSI_state_reinit(&state, x, i); if(STRING_ELT(x, i) == R_NaString) { // NA case, see ?nchar, note nzchar behavior is incorrectly doc'ed if( keepNA_int == 1 || ( keepNA_int == NA_LOGICAL && !(type_int == COUNT_WIDTH || type_int == COUNT_GRAPH) && !zz ) ) { resi[i] = zz ? NA_LOGICAL : NA_INTEGER; } else resi[i] = zz ? 1 : 2; } else { if(zz) { // nzchar mode FANSI_read_until(&state, 1, 0, 0, 1, i, arg); resi[i] = state.pos.w > 0; } else { // Invalid utf8 in !ALLOWNA should cause errors in read_next. Whether // errors are thrown is controlled via the warn bits set from R. FANSI_read_all(&state, i, arg); unsigned int err_tmp = FANSI_GET_ERR(state.status); if (err_tmp == ERR_BAD_UTF8) { if(state.settings & SET_ALLOWNA) resi[i] = NA_INTEGER; else error("Internal Error: invalid encoding unhandled."); // nocov } else resi[i] = state.pos.w; } } } UNPROTECT(prt); return res; } fansi/src/write.c0000644000176200001440000007103315106721052013442 0ustar liggesusers/* * Copyright (C) Brodie Gaslam * * This file is part of "fansi - ANSI Control Sequence Aware String Functions" * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Go to for a copies of the licenses. */ #include // snprintf #include "fansi.h" /* GENERAL NOTES ON WRITING/ALLOCATING FUNCTONS * * - Measure / Write Pattern --------------------------------------------------- * * Writing functions starting with "FANSI_W_" in this file (or static ones * starting with "W_" in other files) operate in measure and write modes. The * pattern is: * * 0. Reset the FANSI_buff object. * 1. Run in measure mode to get 'len'. * 2. Allocate the buffer with FANSI_size * 3. Re-run in write mode to write the buffer. * * The functions accept a pointer to a FANSI_buff object. If the `.buff` member * points to NULL, the functions run in measure mode. Otherwise, they run in * write mode. * * Here is an example implementation that uses a loop to iterate between measure * and write mode: * * struct FANSI_buff buff; * FANSI_INIT_BUFF(&buff); * * for(int k = 0; k < 2; ++k) { * if(!k) FANSI_reset_buff(&buff); // Read mode * else FANSI_size_buff(&buff); // Write Mode * * FANSI_W_fun1(&buff, ...); * FANSI_W_fun2(&buff, ...); * } * // Do stuff * ... * * FANSI_release_buff(&buff, 1); * * NOTE: avoid using `R_alloc` in functions that use FANSI buffers, or in * functions used by such functions (see "Buffer Allocation" below). * * Buffers must be reset prior to the measure pass. Use FANSI_size_buff0 if you * know the size ahead of time and don't need the two pass measure/write * approach. * * The key workhorses are the macros FANSI_W_COPY and FANSI_W_MCOPY which * roughly mimic the semantics of `strcpy` and `memcpy` respectively. Functions * that only use these functions to write to the buffer and accept the buffer by * reference can then be used as `FANSI_W_fun1/2` are used above. * * vvvvvvvv * !> DANGER buff.len) ) // nocov start error( "%s[%jd](%td vs %d alloc'ed by %s).", "Internal Error: buffer not of specified length at index", FANSI_ind(i), buff.buff - buff.buff0, buff.len, buff.fun ); // nocov end } /* * Attempts to remove a buffer from the R_alloc protection stack. * * This only works if the current buffer is at the end of the stack. Each * `FANSI_init_buff` call should be paired with a release. Some thought should * go into the sequence of initializations and releases when multiple such * buffers coexist. They should be done on a LIFO basis as the release only * works if the buffer was the last to be allocated. Additionally, calls to * size_buff should not be interleaved as that will preclude release of the * buffers: * * The purpose of the release is to make the last allocation eligible for GC by * removing it from the R_alloc stack. * * returns 0 if successfully releases buffer. Zeroes the buffer in all cases. * A failure is not critical as the entire R_alloc stack will be released on * return to R, it just means peak memory usage will be higher than it might * otherwise be. */ int FANSI_release_buff(struct FANSI_buff * buff, int warn) { int failure = 0; if(buff->buff0) { if(buff->vheap_self == vmaxget()) vmaxset(buff->vheap_prev); else { if(warn && !buff->warned) warning( "%s %s %s", "Unable to release buffer allocated by", buff->fun, "while in native code. Buffer will be released on return to R." ); failure = 1; buff->warned = 1; } buff->vheap_prev = NULL; buff->vheap_self = NULL; buff->buff = NULL; buff->buff0 = NULL; buff->len = 0; buff->len_alloc = 0; } return failure; } /* * Allocates a fresh chunk of memory if the existing one is not large enough. * * If allocation is needed the buffer will be either twice as large as it was * before, or size `size` if that is greater than twice the size. * * Total buffer allocation will be `size + 1` to allow for an additional NULL * terminator. * * Every call to FANSI_size_buff "zeroes" the buffer by setting the first byte * to 0 and the `.buff` member to point to the beginning of the buffer. * * The _buff0 version is when the size does not need to be measured explicitly. */ size_t FANSI_size_buff0(struct FANSI_buff * buff, int size) { if(size < 0) error( "Internal Error: negative buffer allocations disallowed in %s.", buff->fun ); buff->reset = 0; // assumptions check that SIZE_T fits INT_MAX + 1 size_t buff_max = (size_t)FANSI_lim.lim_int.max + 1; size_t size_req = (size_t)size + 1; size_t size_alloc = 0; if(size_req > buff_max) error( "%s (req: %zu vs lim: %zu), in %s.", "Internal Error: max allowed buffer size is INT_MAX + 1.", size_req, buff_max, buff->fun ); if(size_req > buff->len_alloc) { if(!buff->len_alloc) { // in theory little penalty to ask this minimum if(size_req < 128 && FANSI_lim.lim_int.max >= 127) size_alloc = 128; // includes space for NULL else size_alloc = size_req; // includes space for NULL } else { // More generic case if(buff->len_alloc > buff_max - buff->len_alloc) { // can't double size size_alloc = buff_max; } else if (size_req > buff->len_alloc + buff->len_alloc) { // doubling not enough size_alloc = size_req; } else { // double size size_alloc = buff->len_alloc + buff->len_alloc; } } if(size_alloc < size_req) // nocov start error( "Internal Error: buffer size computation error (%zu vs %zu) in %s.", size_alloc, size_req, buff->fun ); // nocov end FANSI_release_buff(buff, 1); // Keep this in sync with FANSI_release_buff! buff->vheap_prev = vmaxget(); buff->len_alloc = size_alloc; buff->buff0 = buff->buff = R_alloc(buff->len_alloc, sizeof(char)); buff->vheap_self = vmaxget(); } else { buff->buff = buff->buff0; } if(!buff->buff) error("Internal Error: buffer not allocated in %s.", buff->fun);// nocov buff->len = size; *(buff->buff) = 0; // Always reset the string, guaranteed one byte. return buff->len_alloc; } size_t FANSI_size_buff(struct FANSI_buff * buff) { if(!buff->reset) error("Internal Error: attempt to size buffer w/o reset in %s.", buff->fun); return FANSI_size_buff0(buff, buff->len); } /* * Prepare the buffer for the measure pass */ void FANSI_reset_buff(struct FANSI_buff * buff) { buff->len = 0; buff->buff = NULL; buff->reset = 1; // Internal, only for _(reset|size)_buff } /* * Purely for testing if the prev/self scheme used by size_buff works as * intended. */ static void prot_test_help( int size, const char * lbl, struct FANSI_buff * buff, SEXP res, R_xlen_t i ) { char tmp[256]; FANSI_size_buff0(buff, size); INTEGER(VECTOR_ELT(res, 1))[i] = buff->len_alloc; SET_STRING_ELT(VECTOR_ELT(res, 0), i, mkChar(lbl)); snprintf(tmp, 256, "%p", buff->vheap_self); SET_STRING_ELT(VECTOR_ELT(res, 3), i, mkChar(tmp)); snprintf(tmp, 256, "%p", buff->vheap_prev); SET_STRING_ELT(VECTOR_ELT(res, 2), i, mkChar(tmp)); } SEXP FANSI_size_buff_prot_test(void) { struct FANSI_buff buff1, buff2; FANSI_INIT_BUFF(&buff1); FANSI_INIT_BUFF(&buff2); R_xlen_t n = 9; SEXP res = PROTECT(allocVector(VECSXP, 4)); SEXP res_n = PROTECT(allocVector(INTSXP, n)); SEXP res_lbl = PROTECT(allocVector(STRSXP, n)); SEXP res_self = PROTECT(allocVector(STRSXP, n)); SEXP res_prev = PROTECT(allocVector(STRSXP, n)); SET_VECTOR_ELT(res, 0, res_lbl); SET_VECTOR_ELT(res, 1, res_n); SET_VECTOR_ELT(res, 2, res_prev); SET_VECTOR_ELT(res, 3, res_self); UNPROTECT(4); // Big enough buffers so they are not in the small object heap so no confusion R_xlen_t i = 0; prot_test_help(4095, "first", &buff1, res, i++); prot_test_help(2047, "smaller 1.0", &buff1, res, i++); // This should cause 'self' to change, while, leaving 'prev' unchanged prot_test_help(8191, "grow 1.0", &buff1, res, i++); // New buffer, this should cause both 'self' and 'prev' to change prot_test_help(2047, "new buff", &buff2, res, i++); // Back to old buffer, no grow, no changes prot_test_help(2047, "smaller 1.1", &buff1, res, i++); // New buffer, no grow, no changes prot_test_help(1023, "smaller 2.0", &buff2, res, i++); // New buffer, grow, prev should change to buffer2, self should change prot_test_help(4095, "grow 2.0", &buff2, res, i++); // Growing old buffer should change prev prot_test_help(16383, "grow 1.1", &buff1, res, i++); // Growing new buffer should also change prev prot_test_help(8191, "grow 2.1", &buff2, res, i++); // Release LIFO, should be no warnings. However, we don't release everything // because we had sequential allocations. FANSI_release_buff(&buff2, 1); FANSI_release_buff(&buff1, 1); if(i != n) error("Internal Error: wrong step count."); // nocov UNPROTECT(1); return res; } SEXP FANSI_buff_test_reset(void) { struct FANSI_buff buff; FANSI_INIT_BUFF(&buff); FANSI_W_copy(&buff, "hello", 0, "blah"); FANSI_size_buff(&buff); return R_NilValue; // nocov } SEXP FANSI_buff_test_copy_overflow(void) { struct FANSI_buff buff; FANSI_INIT_BUFF(&buff); FANSI_reset_buff(&buff); FANSI_W_copy(&buff, "hello", 0, "blah"); FANSI_size_buff(&buff); FANSI_W_copy(&buff, "hello!", 0, "blah"); return R_NilValue; // nocov } SEXP FANSI_buff_test_mcopy_overflow(void) { struct FANSI_buff buff; FANSI_INIT_BUFF(&buff); FANSI_reset_buff(&buff); FANSI_W_mcopy(&buff, "hello!", 4, 0, "blah"); FANSI_size_buff(&buff); FANSI_W_mcopy(&buff, "hello!", 5, 0, "blah"); return R_NilValue; // nocov } SEXP FANSI_buff_test_fill_overflow(void) { struct FANSI_buff buff; FANSI_INIT_BUFF(&buff); FANSI_reset_buff(&buff); FANSI_W_fill(&buff, '!', 4, 0, "blah"); FANSI_size_buff(&buff); FANSI_W_fill(&buff, '!', 5, 0, "blah"); return R_NilValue; // nocov } /* * To test allocation logic is doing what is expected. This will allocate * as many bytes as each value in `x` so, don't do anything crazy. */ SEXP FANSI_size_buff_ext(SEXP x) { if(TYPEOF(x) != INTSXP) error("Argument `x` must be integer."); // nocov R_xlen_t i, len = XLENGTH(x); SEXP res = PROTECT(allocVector(REALSXP, len)); struct FANSI_buff buff; FANSI_INIT_BUFF(&buff); for(i = 0; i < len; ++i) { size_t size = FANSI_size_buff0(&buff, INTEGER(x)[i]); REAL(res)[i] = (double) size; } FANSI_release_buff(&buff, 1); UNPROTECT(1); return res; } /* * Copy/Measure a NULL terminated string into the buffer. * * @len bytes already accumulated in the buffer (i.e. before the pointer). * @i index in overal character vector, needed to report overflow string. * @err_msg overflow error message */ int FANSI_W_copy( struct FANSI_buff * buff, const char * tmp, R_xlen_t i, const char * err_msg ) { size_t tmp_len = strlen(tmp); // tmp must be NULL terminated if(tmp_len > (size_t) FANSI_lim.lim_int.max) FANSI_check_append_err(err_msg, i); if(buff->buff) { if((buff->buff - buff->buff0) + (int)tmp_len > buff->len) error("Internal Error: exceeded target buffer size in _copy."); strcpy(buff->buff, tmp); // strcpy copies the terminating NULL buff->buff += tmp_len; } else { FANSI_check_append(buff->len, tmp_len, err_msg, i); buff->len += tmp_len; } return (int) tmp_len; } /* * Like FANSI_w_copy, but uses memcpy and a known length to copy. */ int FANSI_W_mcopy( struct FANSI_buff * buff, const char * tmp, int tmp_len, R_xlen_t i, const char * err_msg ) { if(buff->buff) { if(buff->buff - buff->buff0 + tmp_len > buff->len) error("Internal Error: exceeded target buffer size in _mcopy."); memcpy(buff->buff, tmp, (size_t) tmp_len); buff->buff += tmp_len; *(buff->buff) = 0; // as documented } else { FANSI_check_append(buff->len, tmp_len, err_msg, i); buff->len += tmp_len; } return tmp_len; } /* * Fill an array by repeating a charater */ void FANSI_W_fill( struct FANSI_buff * buff, const char tmp, int times, R_xlen_t i, const char * err_msg ) { if(buff->buff) { if(buff->buff - buff->buff0 + times > buff->len) error("Internal Error: exceeded allocated buffer in _fill."); for(int i = 0; i < times; ++i) *(buff->buff)++ = tmp; *(buff->buff) = 0; // not necessary, but helps to debug } else { FANSI_check_append(buff->len, times, err_msg, i); buff->len += times; } } int FANSI_W_normalize_or_copy( struct FANSI_buff *buff, struct FANSI_state state, int norm_i, int stop, R_xlen_t i, const char * err_msg, const char * arg ) { int res = -1; int start = state.pos.x; if(norm_i) res = FANSI_W_normalize(buff, &state, stop, i, err_msg, arg); if(res < 0){ const char * string = state.string + start; int bytes = stop - start; res = FANSI_W_MCOPY(buff, string, bytes); } return res; } /* * End Active Sequences * * Inspects a state object, and produces the set of escape sequences that will * close just the open sequences, to the extent possible. * * Intended for compatibility with crayon. * * If buff is unallocated, how many bytes are required is computed. * * Ideally we would store all the styles in e.g. 2 uint64_t, and then maybe each * style would have an associated 2 uint64_t of what they turn on and off, and * somehow we would have a system to determine what the minimal combination of * styles required to turn off all active styles. This would guarantee we can * keep the on-off styles in sync, at the cost of quite a bit of complexity. * * So instead we hard-code everything and hope we keep it in sync. */ void FANSI_W_sgr_close( struct FANSI_buff * buff, struct FANSI_sgr sgr, int normalize, R_xlen_t i ) { const char * err_msg = "Generating closing SGR"; if(FANSI_sgr_active(sgr)) { if(normalize) { // We're deliberate in only closing things we know how to close in // both the state and in the ouptut string, that way we can check // state at the end to make sure we did actually close everything. if(sgr.style & FONT_MASK) { sgr.style &= ~FONT_MASK; FANSI_W_COPY(buff, "\033[10m"); } // blur == faint unsigned int s_boldfaint = (STL_BOLD | STL_BLUR); unsigned int s_frakital = (STL_ITALIC | STL_FRAKTUR); unsigned int s_underline = (STL_UNDER | STL_UNDER2); unsigned int s_blink = (STL_BLINK1 | STL_BLINK2); unsigned int s_propspc = STL_PROPSPC; unsigned int s_inverse = STL_INVERT; unsigned int s_conceal = STL_CONCEAL; unsigned int s_strikethrough = STL_CROSSOUT; if(sgr.style & s_boldfaint) { sgr.style &= ~s_boldfaint; FANSI_W_COPY(buff, "\033[22m"); } if(sgr.style & s_frakital) { sgr.style &= ~s_frakital; FANSI_W_COPY(buff, "\033[23m"); } if(sgr.style & s_underline) { sgr.style &= ~s_underline; FANSI_W_COPY(buff, "\033[24m"); } if(sgr.style & s_blink) { sgr.style &= ~s_blink; FANSI_W_COPY(buff, "\033[25m"); } // 26 is opening prop spacing (50 to close) if(sgr.style & s_inverse) { sgr.style &= ~s_inverse; FANSI_W_COPY(buff, "\033[27m"); } if(sgr.style & s_conceal) { sgr.style &= ~s_conceal; FANSI_W_COPY(buff, "\033[28m"); } if(sgr.style & s_strikethrough) { sgr.style &= ~s_strikethrough; FANSI_W_COPY(buff, "\033[29m"); } // Colors if(sgr.color.x) { sgr.color.x = 0; FANSI_W_COPY(buff, "\033[39m"); } if(sgr.bgcol.x) { sgr.bgcol.x = 0; FANSI_W_COPY(buff, "\033[49m"); } // Prop spacing if(sgr.style & s_propspc) { sgr.style &= ~s_propspc; FANSI_W_COPY(buff, "\033[50m"); } // Border and ideogram unsigned int b_frmedencirc = BRD_FRAMED | BRD_ENCIRC; if(sgr.style & b_frmedencirc) { sgr.style &= ~b_frmedencirc; FANSI_W_COPY(buff, "\033[54m"); } if(sgr.style & BRD_OVERLN) { sgr.style &= ~BRD_OVERLN; FANSI_W_COPY(buff, "\033[55m"); } if(sgr.style & IDG_MASK) { sgr.style &= ~IDG_MASK; FANSI_W_COPY(buff, "\033[65m"); } // Make sure we're not out of sync with has_style; can't really test the // error though as that would require accepting an input we would not // close above, so this is really just a safety net. if(FANSI_sgr_active(sgr)) // nocov start error( "Internal Error: %s (clr: %d bg: %d st: %u).", "did not successfully close all styles", sgr.color.x, sgr.bgcol.x, sgr.style ); // nocov end } else { // Full close FANSI_W_COPY(buff, "\033[0m"); } } } /* * End Active URL */ void FANSI_W_url_close( struct FANSI_buff * buff, struct FANSI_url url, R_xlen_t i ) { const char * err_msg = "Generating URL end"; if(FANSI_url_active(url)) FANSI_W_COPY(buff, "\033]8;;\033\\"); } void FANSI_W_close( struct FANSI_buff * buff, struct FANSI_format fmt, int normalize, R_xlen_t i ) { FANSI_W_sgr_close(buff, fmt.sgr, normalize, i); FANSI_W_url_close(buff, fmt.url, i); } /* * Helper to make an SGR token, possibly full SGR if in normalize mode */ static char * make_token(char * buff, const char * val, int normalize) { if(strlen(val) > 2) error("Internal error: token maker limited to 2 chars max."); // nocov if(!normalize) { strcpy(buff, val); strcat(buff, ";"); } else { char * buff_track = buff; *(buff_track++) = '\033'; *(buff_track++) = '['; strcpy(buff_track, val); strcat(buff_track, "m"); } return buff; } /* * Write extra color info to string * * buff should be at least 20 bytes. * largest: "\033[48;2;255;255;255m", 19 chars + NULL */ static char * color_token( char * buff, struct FANSI_color color, int mode, int normalize ) { if(mode != 3 && mode != 4) error("Internal Error: color mode must be 3 or 4"); // nocov char * buff_track = buff; if(normalize) { *(buff_track++) = '\033'; *(buff_track++) = '['; } unsigned int clrval = color.x & ~CLR_MASK; if((color.x & CLR_MASK) == CLR_BRIGHT) { // Bright colors if(mode == 3) { *(buff_track++) = '9'; } else { *(buff_track++) = '1'; *(buff_track++) = '0'; } *(buff_track++) = '0' + clrval; } else { // Other colors *(buff_track++) = '0' + mode; *(buff_track++) = '0' + clrval; if(color.x & (CLR_256 | CLR_TRU)) { *(buff_track++) = ';'; int write_chrs = 0; if(color.x & CLR_TRU) { write_chrs = snprintf( buff_track, 20 - (buff_track - buff), "2;%d;%d;%d", color.extra[0], color.extra[1], color.extra[2] ); } else { write_chrs = snprintf( buff_track, 20 - (buff_track - buff), "5;%d", color.extra[0] ); } if(write_chrs < 0) error("Internal Error: failed writing color code."); // nocov buff_track += write_chrs; } else if (!(color.x & CLR_8)) { error("Internal Error: unexpected color mode."); // nocov } } if(normalize) *(buff_track++) = 'm'; else *(buff_track++) = ';'; *buff_track = 0; // Check for overflow, even if too late. if(buff_track - buff >= (CLR_BUFF_SIZE - 1)) // nocov start error( "Internal Error: exceeded color buffer (%d vs %d).", (int) (buff_track - buff), CLR_BUFF_SIZE ); // nocov end return buff; } /* * Output an SGR state as a string. * * Set buff to NULL to get size instead of writing. * * Return how many needed / written bytes. * * @param enclose whether to include leading \033 and trailing m, only applies * if !normalize */ void FANSI_W_sgr( struct FANSI_buff * buff, struct FANSI_sgr sgr, int normalize, int enclose, R_xlen_t i ) { /****************************************************\ | IMPORTANT: | | KEEP THIS ALIGNED WITH state_as_html | | although right now ignoring rare escapes in html | | | | DO NOT CHANGE ORDER of writing. Added tokens | | go at end. We picked a bad order at the beginning | | and now we're stuck. | \****************************************************/ const char * err_msg = "Writing SGR tokens"; // for FANSI_W_COPY // biggest would be "\033[XXm" + NULL, won't fit e.g bright color codes // CAREFUL if we modify code to use `tmp` for other purposes. char tmp[6] = {0}; if(FANSI_sgr_active(sgr)) { if(!normalize && enclose) FANSI_W_COPY(buff, "\033["); // styles if(sgr.style & STL_BOLD) FANSI_W_COPY(buff, make_token(tmp, "1", normalize)); if(sgr.style & STL_BLUR) FANSI_W_COPY(buff, make_token(tmp, "2", normalize)); if(sgr.style & STL_ITALIC) FANSI_W_COPY(buff, make_token(tmp, "3", normalize)); if(sgr.style & STL_UNDER) FANSI_W_COPY(buff, make_token(tmp, "4", normalize)); if(sgr.style & STL_BLINK1) FANSI_W_COPY(buff, make_token(tmp, "5", normalize)); if(sgr.style & STL_BLINK2) FANSI_W_COPY(buff, make_token(tmp, "6", normalize)); if(sgr.style & STL_INVERT) FANSI_W_COPY(buff, make_token(tmp, "7", normalize)); if(sgr.style & STL_CONCEAL) FANSI_W_COPY(buff, make_token(tmp, "8", normalize)); if(sgr.style & STL_CROSSOUT) FANSI_W_COPY(buff, make_token(tmp, "9", normalize)); if(sgr.style & STL_FRAKTUR) FANSI_W_COPY(buff, make_token(tmp, "20", normalize)); if(sgr.style & STL_UNDER2) FANSI_W_COPY(buff, make_token(tmp, "21", normalize)); if(sgr.style & STL_PROPSPC) FANSI_W_COPY(buff, make_token(tmp, "26", normalize)); // colors if(sgr.color.x) { // largest: "38;2;255;255;255", 16 chars + NULL char tokval[CLR_BUFF_SIZE] = {0}; FANSI_W_COPY( buff, color_token(tokval, sgr.color, 3, normalize) ); } if(sgr.bgcol.x) { char tokval[CLR_BUFF_SIZE] = {0}; FANSI_W_COPY( buff, color_token(tokval, sgr.bgcol, 4, normalize) ); } // Borders if(sgr.style & BRD_FRAMED) FANSI_W_COPY(buff, make_token(tmp, "51", normalize)); if(sgr.style & BRD_ENCIRC) FANSI_W_COPY(buff, make_token(tmp, "52", normalize)); if(sgr.style & BRD_OVERLN) FANSI_W_COPY(buff, make_token(tmp, "53", normalize)); // Ideogram if(sgr.style & IDG_UNDERL) FANSI_W_COPY(buff, make_token(tmp, "60", normalize)); if(sgr.style & IDG_UNDERL2) FANSI_W_COPY(buff, make_token(tmp, "61", normalize)); if(sgr.style & IDG_OVERL) FANSI_W_COPY(buff, make_token(tmp, "62", normalize)); if(sgr.style & IDG_OVERL2) FANSI_W_COPY(buff, make_token(tmp, "63", normalize)); if(sgr.style & IDG_STRESS) FANSI_W_COPY(buff, make_token(tmp, "64", normalize)); // font unsigned int font = FANSI_GET_RNG(sgr.style, FONT_START, FONT_ALL); if(font) { char tokval[3] = {'1', '0'}; tokval[1] = '0' + (font % 10); FANSI_W_COPY(buff, make_token(tmp, tokval, normalize)); } // Finalize (replace trailing ';' with 'm') if(buff->buff && enclose) { *((buff->buff) - 1) = 'm'; } } // for debugging, buff always should have 1 byte else if(buff->buff) *(buff->buff) = 0; } /* * Output an URL state as a string. * * Set buff to NULL to get size instead of writing. * * Return how many needed / written bytes. */ void FANSI_W_url( struct FANSI_buff * buff, struct FANSI_url url, R_xlen_t i ) { /****************************************************\ | IMPORTANT: | | KEEP THIS ALIGNED WITH state_as_html | | See _W_sgr | \****************************************************/ if(FANSI_url_active(url)) { const char * err_msg = "Writing URL"; // for FANSI_W_M?COPY FANSI_W_COPY(buff, "\033]8;"); if(ID_LEN(url)) { FANSI_W_COPY(buff, "id="); FANSI_W_MCOPY(buff, ID_STRING(url), ID_LEN(url)); } FANSI_W_COPY(buff, ";"); FANSI_W_MCOPY(buff, URL_STRING(url), URL_LEN(url)); FANSI_W_COPY(buff, "\033\\"); // ST } // for debugging, buff always should have 1 byte else if(buff->buff) *(buff->buff) = 0; } fansi/src/strip.c0000644000176200001440000003153214533476156013470 0ustar liggesusers/* * Copyright (C) Brodie Gaslam * * This file is part of "fansi - ANSI Control Sequence Aware String Functions" * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Go to for a copies of the licenses. */ #include "fansi.h" static void FANSI_check_chr_size(char * start, char * end, R_xlen_t i) { if(end - start > FANSI_lim.lim_int.max) { // Can't get to this point with a string that violates, AFAICT // nocov start error( "Internal Error: %s at index [%jd] (3).", "attempting to write string longer than INT_MAX", FANSI_ind(i) ); // nocov end } } /* * Strips ANSI tags from input * * Assumes input is NULL terminated. * * Since we do not use FANSI_read_next, we don't care about conversions to * UTF8. * * Code copied into trimws.c. * * Warn was used pre 1.0 to request to return warn info in attributes e.g. by * setting it to two, but that feature was dropped. */ SEXP FANSI_strip(SEXP x, SEXP ctl, SEXP warn) { if(TYPEOF(x) != STRSXP) error("Argument `x` should be a character vector."); // nocov if(TYPEOF(ctl) != INTSXP) error("Internal Error: `ctl` should integer."); // nocov R_xlen_t i, len = xlength(x); SEXP res_fin = x; PROTECT_INDEX ipx; // reserve spot if we need to alloc later PROTECT_WITH_INDEX(res_fin, &ipx); int any_ansi = 0; R_len_t mem_req = 0; // how much memory we need for each ansi // Compute longest char element, we'll assume this is the required size of our // string buffer. This is potentially wastful if there is one very large // CSI-less string and all the CSI strings are short. The alternative would // be to keep reallocating to a larger size, maybe by 2x, but then that // requires the growing buffer, etc. For now go simple for(i = 0; i < len; ++i) { FANSI_interrupt(i); R_len_t chr_len = LENGTH(STRING_ELT(x, i)); if(chr_len > mem_req) mem_req = chr_len; } // Now strip char * chr_buff; const char * arg = "x"; struct FANSI_state state; for(i = 0; i < len; ++i) { // Now full check if(!i) state = FANSI_state_init_ctl(x, warn, ctl, i); else FANSI_state_reinit(&state, x, i); SEXP x_chr = STRING_ELT(x, i); if(x_chr == NA_STRING) continue; FANSI_interrupt(i); int has_ctl = 0; const char * chr = CHAR(x_chr); const char * chr_track = chr; char * res_track = NULL, * res_start = NULL; // We re-use the allocated buffer for every string in the character // vector, which is why we re-assign to chr_buff here. chr_buff will be // allocated in the loop below the first time it is needed, but we need to // re-assign re_start / res_track. res_start = res_track = chr_buff; struct FANSI_position pos_prev = state.pos; while(state.string[state.pos.x]) { int pos = FANSI_find_ctl(&state, i, arg); // This will also trigger for end-of-string if `has_ctl` is already true if(has_ctl || (state.status & CTL_MASK)) { has_ctl = 1; // As soon as we encounter ansi in any of the character vector elements, // allocate vector to track what has ansi if(!any_ansi) { any_ansi = 1; // We need to allocate a result vector since we'll be stripping ANSI // pos, and also the buffer we'll use to re-write the pos less strings REPROTECT(res_fin = duplicate(x), ipx); // Buffer is guaranteed to be an over-allocation, as it fits the // longest string in the vector, re-used for all strings. It should // be no longer than R_LEN_T_MAX. chr_buff = (char *) R_alloc(((size_t) mem_req) + 1, sizeof(char)); res_start = res_track = chr_buff; } int w_len = pos - pos_prev.x; memcpy(res_track, chr_track, w_len); res_track += w_len; chr_track = state.string + state.pos.x; pos_prev = state.pos; } } // Update string if(has_ctl) { // Copy final chunk if it exists because above we only memcpy when we // encounter the tag *res_track = '\0'; FANSI_check_chr_size(res_start, res_track, i); SEXP chr_sexp = PROTECT( FANSI_mkChar0(res_start, res_track, getCharCE(x_chr), i) ); SET_STRING_ELT(res_fin, i, chr_sexp); UNPROTECT(1); } } UNPROTECT(1); return res_fin; } static int is_special(char x) { return x != '\t' && x != '\n' && x >= 0 && x < 0x20 && x; } /* * Strips Extra ASCII Spaces * * Won't do anything about weird UTF8 spaces, etc. Originally used to have the * option to handle ANSI ESC sequences and other escapes, but we ditched that in * favor of simplicity. All those characters / sequences are treated as normal * characters, except for the newline and tab. * * Allows two spaces after periods, question marks, and exclamation marks. This * is to line up with strwrap behavior. */ SEXP FANSI_process( SEXP input, SEXP term_cap, SEXP ctl, struct FANSI_buff *buff ) { if(TYPEOF(input) != STRSXP) error("Input is not a character vector."); PROTECT_INDEX ipx; SEXP res = input; // reserve spot if we need to alloc later int prt = 0; PROTECT_WITH_INDEX(res, &ipx); ++prt; SEXP R_true = PROTECT(ScalarLogical(1)); ++prt; SEXP R_zero = PROTECT(ScalarInteger(0)); ++prt; char * err_msg = "Processing whitespace"; const char * arg = "x"; int strip_any = 0; // Have any elements in the STRSXP been stripped R_xlen_t len = XLENGTH(res); struct FANSI_state state; for(R_xlen_t i = 0; i < len; ++i) { FANSI_interrupt(i); // Don't warn - we don't modify or interpret sequences. This allows bad // UTF-8 through. SEXP allowNA, keepNA, width, warn; allowNA = keepNA = R_true; width = warn = R_zero; if(!i) { // AFAICT process only for strwrap, and testing state = FANSI_state_init_full( input, warn, term_cap, allowNA, keepNA, width, ctl, i ); } else FANSI_state_reinit(&state, input, i); const char * string = state.string; const char * string_start = string; int len_j = LENGTH(STRING_ELT(input, i)); // R_len_t checked to fit in int int strip_this, to_strip, to_strip_nl, punct_prev, punct_prev_prev, space_prev, space_start, para_start, newlines, newlines_start, has_tab_or_nl, leading_spaces, reset; strip_this = to_strip = to_strip_nl = punct_prev = punct_prev_prev = space_prev = space_start = newlines = newlines_start = has_tab_or_nl = reset = 0; para_start = leading_spaces = 1; int j_last = 0; // All spaces [ \t\n] are converted to spaces. First space is kept, unless // right after [.?!][)\\"']{0,1}, in which case one more space can be kept. // // One exception is that sequences of spaces that resolve to more than one // newline are kept as a pair of newlines. // // We purposefully allow ourselves to read up to the NULL terminator. for(int j = 0; j <= len_j; ++j) { int newline = string[j] == '\n'; int tab = string[j] == '\t'; has_tab_or_nl += newline + tab; if(newline) { if(!newlines) { newlines_start = j; to_strip_nl = to_strip; // how many chrs need stripping by first nl } ++newlines; } int space = ((string[j] == ' ') || tab || newline); int line_end = !string[j]; // Need to keep track if we're in a sequence that starts with a space in // case a line ends, as normally we keep one or two spaces, but if we hit // the end of the line we don't want to keep them. if(space && !para_start) { if(!space_prev) space_start = 1; else if(space && space_prev && punct_prev_prev) space_start = 2; } // Anything we want to treat as a control is kept, and in the end will // be copied to the end of the string in question. int special = is_special(string[j]); int special_len = 0; if(special) { // Check that it is really special. int pos_prev = state.pos.x = j; FANSI_read_next(&state, i, arg); // Sequence is special if it is a recognized control if(state.status & CTL_ALL) { special_len = state.pos.x - pos_prev; } else { special = special_len = 0; } } // transcribe string if: if( // we've hit something that we don't need to strip, and we have accrued // characters to strip (more than one space, or more than two spaces if // preceeded by punct, or leading spaces ( !space && !special && ( ( (to_strip && leading_spaces) || (to_strip > 1 && (!punct_prev)) || (to_strip > 2) ) || has_tab_or_nl ) ) || // string end and we've already stripped previously or ending in spaces (line_end && (strip_this || space_start)) ) { // need to copy entire STRSXP since we haven't done that yet if(!strip_any) { REPROTECT(res = duplicate(input), ipx); strip_any = 1; } // Make sure buffer is big enough (could be too big) if(!strip_this) { FANSI_size_buff0(buff, len_j); strip_this = 1; } // newlines normally act as spaces, but if there are two or more in a // sequence of tabs/spaces then they behave like a paragraph break // so we will replace that sequence with two newlines; const char * spc_chr = " "; int copy_to = j; int to_strip0 = to_strip; if(newlines > 1) { copy_to = newlines_start; space_start = 2; to_strip = to_strip_nl; // how many chars to strip by first newline spc_chr = "\n"; } // Copy the portion up to the point we know should be copied, will add // back spaces and/or newlines as needed. This does not skip specials, // just delays them! int copy_bytes = copy_to - // current position j_last - // less last time we copied to_strip; // less extra stuff to strip if(copy_bytes) { FANSI_W_MCOPY(buff, string_start, copy_bytes); } // Instead of all the trailing spaces etc we skip, write one or two // spaces or newlines as needed. if(!line_end) { if(space_start) FANSI_W_COPY(buff, spc_chr); if(space_start > 1) FANSI_W_COPY(buff, spc_chr); } // Anything that is not a space/tab/nl that was considered non-breaking // with respect to trailing white space should be copied at end // otherwise unmodified. int copy_end = j_last + copy_bytes; for(int k = copy_end; k < copy_end + to_strip0; ++k) { if(is_special(string[k])) { state.pos.x = k; FANSI_read_next(&state, i, arg); int bytes = state.pos.x - k; FANSI_W_MCOPY(buff, string + k, bytes); k += bytes - 1; } } // Preprare for next sequence string_start = string + j; j_last = j; reset = 1; } else if(space) { to_strip++; } else if(special) { // treat special like a space, but only if preceded by space if(space_prev) { to_strip += special_len; space = 1; } j += special_len - 1; } else { reset = 1; } // We ended streak of spaces/etc so, reset if(reset) { reset = 0; to_strip = space_start = newlines = has_tab_or_nl = leading_spaces = 0; } para_start = newlines > 1; space_prev = space; punct_prev_prev = punct_prev || (special && punct_prev_prev); // To match what `strwrap` does, we treat as punctuation [.?!], and also // treat them as punctuation if they are followed by closing quotes or // parens. punct_prev = (string[j] == '.' || string[j] == '!' || string[j] == '?') || ( punct_prev && (string[j] == '"' || string[j] == '\'' || string[j] == ')') ); } if(strip_this) { SEXP chrsxp = PROTECT( FANSI_mkChar0( buff->buff0, buff->buff, getCharCE(STRING_ELT(input, i)), i ) ); SET_STRING_ELT(res, i, chrsxp); UNPROTECT(1); } } UNPROTECT(prt); return res; } SEXP FANSI_process_ext(SEXP input, SEXP term_cap, SEXP ctl) { struct FANSI_buff buff; FANSI_INIT_BUFF(&buff); SEXP res = PROTECT(FANSI_process(input, term_cap, ctl, &buff)); FANSI_release_buff(&buff, 1); UNPROTECT(1); return res; } fansi/src/state.c0000644000176200001440000003143715106721052013434 0ustar liggesusers/* * Copyright (C) Brodie Gaslam * * This file is part of "fansi - ANSI Control Sequence Aware String Functions" * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Go to for a copies of the licenses. */ #include "fansi.h" /* * Create a state structure with everything set to zero * * We rely on struct initialization to set everything else to zero. * * FANSI_state_init_full is specifically to handle the allowNA case in nchar, * for which we MUST check FANSI_GET_ERR(state.status) after each * `FANSI_read_next`. */ struct FANSI_state FANSI_state_init_full( SEXP strsxp, SEXP warn, SEXP term_cap, SEXP allowNA, SEXP keepNA, SEXP width, SEXP ctl, R_xlen_t i ) { // nocov start if(TYPEOF(strsxp) != STRSXP) { error( "Internal error: state_init with bad type for strsxp (%s)", type2char(TYPEOF(strsxp)) ); } if(i < 0 || i > XLENGTH(strsxp)) error( "Internal error: state_init with out of bounds index [%jd] for strsxp.", FANSI_ind(i) ); SEXP chrsxp = STRING_ELT(strsxp, i); FANSI_check_chrsxp(chrsxp, i); const char * string = CHAR(chrsxp); // Validation not complete here, many of these should be scalar, rely on R // level checks. if(TYPEOF(term_cap) != INTSXP) error( "Internal error: state_init with bad type for term_cap (%s)", type2char(TYPEOF(term_cap)) ); if(TYPEOF(allowNA) != LGLSXP) error( "Internal error: state_init with bad type for allowNA (%s)", type2char(TYPEOF(allowNA)) ); if(TYPEOF(keepNA) != LGLSXP) error( "Internal error: state_init with bad type for keepNA (%s)", type2char(TYPEOF(keepNA)) ); if(TYPEOF(width) != INTSXP) error( "Internal error: state_init with bad type for width (%s)", type2char(TYPEOF(width)) ); if(TYPEOF(ctl) != INTSXP) error( "Internal error: state_init with bad type for ctl (%s)", type2char(TYPEOF(ctl)) ); if(TYPEOF(warn) != INTSXP || XLENGTH(warn) != 1L) error( "Internal error: state_init with bad (%s) type or length (%jd) for warn.", type2char(TYPEOF(warn)), XLENGTH(warn) ); int warn_int = asInteger(warn); if((unsigned int) warn_int & ~WARN_MASK) error( "Internal error: state_init with OOB value for warn (%d)", warn_int ); // nocov end unsigned int settings = 0; unsigned int term_cap_raw = FANSI_term_cap_as_int(term_cap); // slightly hacky, the "old term capability" mode is crammed into the raw term // cap integer, and needs to be extracted out. if(term_cap_raw > TERM_ALL) settings |= SET_TERMOLD; settings = FANSI_SET_RNG( settings, SET_TERMCAP, TERM_ALL, term_cap_raw & TERM_ALL ); settings = FANSI_SET_RNG( settings, SET_WIDTH, COUNT_ALL, asInteger(width) ); settings = FANSI_SET_RNG( settings, SET_CTL, CTL_ALL, FANSI_ctl_as_int(ctl) ); settings |= asLogical(allowNA) ? SET_ALLOWNA : 0; settings |= asLogical(keepNA) ? SET_KEEPNA : 0; settings |= (unsigned int) warn_int; // All others struct-inited to zero. return (struct FANSI_state) { .string = string, .settings = settings }; } /* * Re-initialize state * * Reduce overhead from revalidating params that are recycled across vector * elements from a single external function call. */ void FANSI_state_reinit( struct FANSI_state * state, SEXP x, R_xlen_t i ) { if(i < 0 || i >= XLENGTH(x)) // nocov start error( "Internal error: state_init with out of bounds index [%jd] for strsxp.", FANSI_ind(i) ); // nocov end SEXP chrsxp = STRING_ELT(x, i); FANSI_check_chrsxp(chrsxp, i); const char * string = CHAR(chrsxp); state->string = string; FANSI_reset_state(state); } // We don't care about unicode width here, but do care about CSI / SGR (which // means, we only really care about SGR since all CSI does is affect width calc). struct FANSI_state FANSI_state_init( SEXP strsxp, SEXP warn, SEXP term_cap, R_xlen_t i ) { int prt = 0; SEXP R_false = PROTECT(ScalarLogical(0)); ++prt; SEXP R_true = PROTECT(ScalarLogical(1)); ++prt; SEXP R_zero = PROTECT(ScalarInteger(0)); ++prt; SEXP R_one = PROTECT(ScalarInteger(1)); ++prt; struct FANSI_state res = FANSI_state_init_full( strsxp, warn, term_cap, R_true, // allowNA for invalid multibyte R_false, // keepNA R_zero, // Don't use width by default R_one, // Treat all escapes as special by default (wrong prior to v1.0) i ); UNPROTECT(prt); return res; } // We only care to specify ctl; // means, we only really care about SGR since all CSI does is affect width calc). struct FANSI_state FANSI_state_init_ctl( SEXP strsxp, SEXP warn, SEXP ctl, R_xlen_t i ) { int prt = 0; SEXP R_false = PROTECT(ScalarLogical(0)); ++prt; SEXP R_true = PROTECT(ScalarLogical(1)); ++prt; SEXP R_zero = PROTECT(ScalarInteger(0)); ++prt; SEXP R_one = PROTECT(ScalarInteger(1)); ++prt; struct FANSI_state res = FANSI_state_init_full( strsxp, warn, R_one, // all term_cap R_true, // allowNA for invalid multibyte R_false, // keepNA R_zero, // Don't use width by default ctl, // Which sequences are recognized i ); UNPROTECT(prt); return res; } void FANSI_reset_width(struct FANSI_state * state) { state->pos.w = 0; } /* * Reset the position counters * * Intended so that all the state info is kept for when state persists from one * element in a character vector to the next. * * We are not 100% sure we're resetting everything that needs to be reset. * * See also FANSI_state_reinit */ void FANSI_reset_pos(struct FANSI_state * state) { state->pos = (struct FANSI_position){0}; unsigned int warned = state->status & STAT_WARNED; state->status = 0U; if(warned) state->status |= STAT_WARNED; } /* * Reset state without changing index/string * * This one probably doesn't benefit much of by-ref, but doing so for * consistency with others. */ void FANSI_reset_state(struct FANSI_state * state) { state->fmt = (struct FANSI_format){0}; state->pos = (struct FANSI_position){0}; state->status = 0U; state->utf8 = 0; } /* * Generate the tag corresponding to the state and write it out as a NULL * terminated string. * * @return the byte after the last one written, typically set to zero. For the * start of the string: buff->buff0 */ char * FANSI_state_as_chr( struct FANSI_buff *buff, struct FANSI_state state, int normalize, R_xlen_t i ) { FANSI_reset_buff(buff); FANSI_W_sgr(buff, state.fmt.sgr, normalize, 1, i); FANSI_W_url(buff, state.fmt.url, i); FANSI_size_buff(buff); FANSI_W_sgr(buff, state.fmt.sgr, normalize, 1, i); FANSI_W_url(buff, state.fmt.url, i); return buff->buff; } /* * Determine whether two state structs have same color */ static int sgr_comp_color( struct FANSI_color target, struct FANSI_color current ) { unsigned char tclr = target.x; unsigned char cclr = current.x; int c256 = tclr & (CLR_256 | CLR_TRU); int cTRU = tclr & CLR_TRU; return tclr != cclr || // Can't use memcmp because we don't necessarly cleanup extra (c256 && target.extra[0] != current.extra[0]) || (cTRU && target.extra[1] != current.extra[1]) || (cTRU && target.extra[2] != current.extra[2]); } int FANSI_sgr_comp_color( struct FANSI_sgr target, struct FANSI_sgr current ) { return sgr_comp_color(target.color, current.color) || sgr_comp_color(target.bgcol, current.bgcol); } /* * Create a new SGR that has all the styles in `old` missing from `new`. * * This is so that we can then generate the closing SGRs required to transition * from one state to the other (used for diff). * * @param mode 0 to explicitly close/open styles that will be overriden (e.g. * color), and 1 to do so implicitly */ struct FANSI_sgr FANSI_sgr_setdiff( struct FANSI_sgr old, struct FANSI_sgr new, int mode ) { struct FANSI_sgr res = (struct FANSI_sgr){0}; if( (!mode && sgr_comp_color(old.color, new.color)) || (mode && old.color.x && !new.color.x) ) { res.color.x = old.color.x; memcpy(res.color.extra, old.color.extra, sizeof(old.color.extra)); } if( (!mode && sgr_comp_color(old.bgcol, new.bgcol)) || (mode && old.bgcol.x && !new.bgcol.x) ) { res.bgcol.x = old.bgcol.x; memcpy(res.bgcol.extra, old.bgcol.extra, sizeof(old.bgcol.extra)); } // We don't bother to shift the fonts here since both are already encoded unsigned int font_old, font_new; font_old = old.style & FONT_MASK; font_new = new.style & FONT_MASK; if( (!mode && (font_old != font_new)) || (mode && font_old && !font_new) ) res.style = (res.style & ~FONT_MASK) | font_old; // All non font styles are just bit flags unsigned int style_old, style_new; style_old = old.style & ~FONT_MASK; style_new = new.style & ~FONT_MASK; res.style |= style_old & ~style_new; return res; } /* */ struct FANSI_sgr FANSI_sgr_intersect( struct FANSI_sgr old, struct FANSI_sgr new ) { struct FANSI_sgr res = {0}; if(old.color.x == new.color.x) { res.color.x = new.color.x; memcpy(res.color.extra, new.color.extra, sizeof(new.color.extra)); } if(old.bgcol.x == new.bgcol.x) { res.bgcol.x = new.bgcol.x; memcpy(res.bgcol.extra, new.bgcol.extra, sizeof(new.bgcol.extra)); } unsigned int font_old, font_new; font_old = old.style & FONT_MASK; font_new = new.style & FONT_MASK; if(font_old == font_new) res.style &= font_new | ~FONT_MASK; // All non font styles are just bit flags unsigned int style_old, style_new; style_old = old.style & ~FONT_MASK; style_new = new.style & ~FONT_MASK; res.style |= style_old & style_new; return res; } // Keep synchronized with `sgr_close` int FANSI_sgr_active(struct FANSI_sgr sgr) { return sgr.style || sgr.color.x || sgr.bgcol.x; } // Keep synchronized with `url_close` int FANSI_url_active(struct FANSI_url url) { return URL_LEN(url) > 0; } // Return 0 if equal, 1 if different // // As per spec only the same if both url and id are the same, but iterm2 doesn't // even seem to respect that (i.e. two urls that meet requirement aren't // simultaneously highlighted on hover, at least as of 3.4.7beta2. // // Note, id must be the same, unless there is no URL in which case id may be // empty. int FANSI_url_comp(struct FANSI_url target, struct FANSI_url current) { int url_eq = target.url.len == current.url.len && ( !URL_LEN(target) || !memcmp(URL_STRING(target), URL_STRING(current), URL_LEN(target)) ); int id_eq = ID_LEN(target) == ID_LEN(current) && ( (!URL_LEN(target) && !ID_LEN(target)) || (ID_LEN(target) && !memcmp(ID_STRING(target), ID_STRING(current), ID_LEN(target)) ) ); return !(url_eq && id_eq); } /* * For closing things for substr, so we don't need to automatically normalize * every string if we just close with ESC[0m. * * Pretty inefficient to do it this way... * * @param x should be a vector of active states at end of strings. */ SEXP FANSI_state_close_ext(SEXP x, SEXP warn, SEXP term_cap, SEXP norm) { if(TYPEOF(x) != STRSXP) error("Argument `x` should be a character vector."); // nocov if(TYPEOF(norm) != LGLSXP || XLENGTH(norm) != 1) error("Argument `normalize` should be TRUE or FALSE."); // nocov const char * arg = "x"; int prt = 0; R_xlen_t len = xlength(x); SEXP res = PROTECT(allocVector(STRSXP, len)); ++prt; PROTECT_INDEX ipx; // reserve spot if we need to alloc later PROTECT_WITH_INDEX(res, &ipx); ++prt; struct FANSI_buff buff; FANSI_INIT_BUFF(&buff); int normalize = asInteger(norm); SEXP R_true = PROTECT(ScalarLogical(1)); ++prt; SEXP R_one = PROTECT(ScalarInteger(1)); ++prt; SEXP R_zero = PROTECT(ScalarInteger(0)); ++prt; struct FANSI_state state; for(R_xlen_t i = 0; i < len; ++i) { FANSI_interrupt(i); if(!i) { state = FANSI_state_init_full( x, warn, term_cap, R_true, R_true, R_zero, R_one, i ); } else FANSI_state_reinit(&state, x, i); SEXP x_chr = STRING_ELT(x, i); if(x_chr == NA_STRING || !LENGTH(x_chr)) continue; FANSI_read_all(&state, i, arg); FANSI_reset_buff(&buff); FANSI_W_close(&buff, state.fmt, normalize, i); if(buff.len) { if(res == x) REPROTECT(res = duplicate(x), ipx); FANSI_size_buff(&buff); FANSI_W_close(&buff, state.fmt, normalize, i); cetype_t chr_type = getCharCE(x_chr); SEXP reschr = PROTECT(FANSI_mkChar(buff, chr_type, i)); SET_STRING_ELT(res, i, reschr); UNPROTECT(1); } } FANSI_release_buff(&buff, 1); UNPROTECT(prt); return res; } fansi/src/fansi-cnst.h0000644000176200001440000001523514533476156014403 0ustar liggesusers/* * Copyright (C) Brodie Gaslam * * This file is part of "fansi - ANSI Control Sequence Aware String Functions" * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Go to for a copies of the licenses. */ #ifndef _FANSI_CNST_H #define _FANSI_CNST_H // - General Notes ------------------------------------------------------------- // Most of the constants defined here are used to encode state parameters in 32 // bit unsigned int variables. Many state parameters are encoded as a single // bit in either the ->setting or ->status members of the state objects. Others // are stored as small unsigned integer values occupying some set of adjacent // bits in the same member objects. For these multi-bit elements, we // (sometimes) define _MASK and _ALL constants. The _MASK constants relate to // the actual bits being set in the target integers. // // Generally: _MASK >> _START == _ALL. // // Use the FANSI_GET_RNG and SET_RNG macros to get/set the decimal values // embedded in the larger unsigned int objects. // // Ideally, this would all be script generated to avoid risks of manual errors, // but it isn't today. // - Settings ------------------------------------------------------------------ // Offset for starting bytes for various settings #define SET_CTL 0 #define SET_TERMCAP 7 #define SET_WARN 10 #define SET_WIDTH 21 // bits 0-6: recognized controls (also used in .status) #define CTL_NL 1 #define CTL_C0 2 #define CTL_SGR 4 #define CTL_CSI 8 #define CTL_ESC 16 #define CTL_URL 32 #define CTL_OSC 64 #define CTL_ALL 127 #define CTL_MASK 127 #define CTL_ESC_CTL 124 // Controls starting with ESC // Bits 7-9: term caps #define TERM_BRIGHT 128 #define TERM_256 256 #define TERM_TRUECOLOR 512 #define TERM_ALL 7 #define TERM_MASK 896 // Bits 10-20: warning level (see ERR_*) #define WARN_MASK 2096128 // 0111 1111 1111 << SET_WARN #define WARN_ALL 2047 // 0111 1111 1111 // Warnings for situations jeopardizing width computation and similar #define WARN_MANGLED 163840 // 0000 1010 0000 << SET_WARN #define WARN_UTF8 524288 // These should not be suppressed by warn=FALSE (but an be turned off by // functions that don't care about them). #define WARN_ERROR 1572864 // 0110 0000 0000 << SET_WARN // bits 21-22: Width mode, this is an integer, not bit flags, so // First shift by SET_WIDTH #define COUNT_CHARS 0 #define COUNT_WIDTH 1 #define COUNT_GRAPH 2 #define COUNT_BYTES 3 #define COUNT_ALL 3 // bits 23-26: other settings #define SET_ALLOWNA 8388608 #define SET_KEEPNA 16777216 #define SET_ESCONE 33554432 // consume only one ESC at a time #define SET_TERMOLD 67108864 // Use < v1.0 terminal mode // - Status -------------------------------------------------------------------- #define STAT_ERR_START 7 // bits 0-6: identical to .settings (controls found). It's not clear that we // actually want this to be a bit field, it might be better to have it be an // integer representing only the last state, but that's not what we have ATM. // bits 7-10: integer error code (not bit flags), see read.c/err_msgs[] and // `?unhandled_ctl` for details. #define STAT_ERR_ALL 15 #define STAT_ERR_MASK 1920 // These are all integer values that must be shifted by _ERR_START for encoding // into ->status. Subtract 1 for ->settings byte positions (relative to the // settings starting byte for errors). #define ERR_UNKNOWN_SUB 1 #define ERR_BAD_SUB 2 #define ERR_EXCEED_CAP 3 #define ERR_NOT_SPECIAL 4 #define ERR_NOT_SPECIAL_BAD_SUB 5 #define ERR_BAD_CSI_OSC 6 #define ERR_ESC_OTHER 7 #define ERR_ESC_OTHER_BAD 8 #define ERR_C0 9 #define ERR_BAD_UTF8 10 #define ERR_NON_ASCII 11 // bits 11-16: additional status flags, some of these are no longer strictly // necessary with the switch to read_until (from read_next). #define STAT_ZWJ 2048 #define STAT_RI 4096 #define STAT_AGAIN 8192 // Read past requested width #define STAT_WARNED 16384 // Warning already issued #define STAT_SPECIAL 32768 // Valid SGR or URL (no critical errors) #define STAT_OVERSHOT 65536 // Read past requested width #define STAT_DONE 131072 // Hit end with special #define STAT_PERSIST 22528 // _ZWJ | _RI | _WARNED // - sgr.style ----------------------------------------------------------------- // style encodings, used against sgr.style // bits 0-11 #define STL_BOLD 1 #define STL_BLUR 2 // or faint #define STL_ITALIC 4 #define STL_UNDER 8 #define STL_BLINK1 16 // slow blink #define STL_BLINK2 32 // fast blink #define STL_INVERT 64 #define STL_CONCEAL 128 #define STL_CROSSOUT 256 #define STL_FRAKTUR 512 #define STL_UNDER2 1024 // double underline #define STL_PROPSPC 2048 // prop spacing #define STL_MASK 4095 #define STL_MASK1 511 // Basic styles (i.e. 1-9 codes, sum(2^(0:8)) #define STL_MASK2 447 // Basic styles for HTML, excludes inverse // bits 12-14 #define BRD_FRAMED 4096 #define BRD_ENCIRC 8192 #define BRD_OVERLN 16384 #define BRD_MASK 28672 // sum(2^(12:14)) // bits 15-19 #define IDG_UNDERL 32768 // ideogram underline or right side line #define IDG_UNDERL2 65536 // ideogram dbl underline or dbl line on right #define IDG_OVERL 131072 // ideogram overline or left side line #define IDG_OVERL2 262144 // ideogram dbl overline or dbl line on left #define IDG_STRESS 524288 // ideogram stress marking #define IDG_MASK 1015808 // sum(2^(15:19)) // bits 20:24 - alternative fonts // Encoded as decimals of values 10-19, (for simplicity, so use 5 bytes) #define FONT_START 20 #define FONT_MASK 32505856 // sum(2^(20:24)) #define FONT_ALL 31 // - Misc ---------------------------------------------------------------------- #define CLR_BUFF_SIZE 20 // big enough for e.g. ESC[38;2;255;255;255;NULL // Color modes #define CLR_MASK 240 // 1111 0000 #define CLR_OFF 0 #define CLR_8 16 #define CLR_BRIGHT 32 #define CLR_256 64 #define CLR_TRU 128 // For start/stop rounding #define RND_START 1 #define RND_STOP 2 #define RND_BOTH 3 #define RND_NEITHER 4 #endif /* _FANSI_CNST_H */ fansi/src/trimws.c0000644000176200001440000001352014533476156013651 0ustar liggesusers/* * Copyright (C) Brodie Gaslam * * This file is part of "fansi - ANSI Control Sequence Aware String Functions" * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Go to for a copies of the licenses. */ #include "fansi.h" /* * Trim leading or trailing whitespaces intermixed with control sequences. * * @param which 0 = both, 1 = left, 2 = right */ SEXP FANSI_trimws( SEXP x, SEXP which, SEXP warn, SEXP term_cap, SEXP ctl, SEXP norm ) { if(TYPEOF(x) != STRSXP) error("Argument `x` should be a character vector."); // nocov if(TYPEOF(ctl) != INTSXP) error("Internal Error: `ctl` should integer."); // nocov if(TYPEOF(which) != INTSXP || XLENGTH(which) != 1) error("Internal Error: `which` should scalar integer."); // nocov if(TYPEOF(norm) != LGLSXP || XLENGTH(norm) != 1) error("Internal Error: `norm` should scalar logical."); // nocov const char * arg = "x"; R_xlen_t i, len = XLENGTH(x); SEXP res_fin = x; int which_i = asInteger(which); if(which_i < 0 || which_i > 2) error("Internal Error: `which` must be between 0 and 2."); // nocov int norm_i = asLogical(norm); int prt = 0; PROTECT_INDEX ipx; // reserve spot if we need to alloc later PROTECT_WITH_INDEX(res_fin, &ipx); ++prt; struct FANSI_state state, state_lead, state_trail, state_last; struct FANSI_buff buff; FANSI_INIT_BUFF(&buff); SEXP R_false = PROTECT(ScalarLogical(0)); ++prt; SEXP R_zero = PROTECT(ScalarInteger(0)); ++prt; for(i = 0; i < len; ++i) { if(!i) { SEXP allowNA, keepNA, type; type = R_zero; allowNA = keepNA = R_false; state = FANSI_state_init_full( x, warn, term_cap, allowNA, keepNA, type, ctl, (R_xlen_t) 0 ); } else FANSI_state_reinit(&state, x, i); state_lead = state_trail = state_last = state; SEXP x_chr = STRING_ELT(x, i); if(x_chr == NA_STRING) continue; FANSI_interrupt(i); // Two (really three) pass process: find begin and end points of string to // keep, compute required size for final string (due to normalize and other // factors, can't really know just based on input), and finally write. The // last two are part of the standard two pass measure/write framework used // in fansi. int string_start = 0; if(which_i == 0 || which_i == 1) { while(1) { switch(state.string[state.pos.x]) { case ' ': case '\n': case '\r': case '\t': ++state.pos.x; continue; default: if(IS_PRINT(state.string[state.pos.x])) { goto ENDLEAD; } else { struct FANSI_state state_tmp = state; FANSI_read_next(&state_tmp, i, arg); state.status |= state_tmp.status & STAT_WARNED; if(state_tmp.status & CTL_MASK) { state = state_tmp; break; // break out of switch, NOT out of while } else goto ENDLEAD; } } } ENDLEAD: state_lead = state; string_start = state_lead.pos.x; } // Find first space that has no subsequent non-spaces int string_end = -1; // -1 dissambiguates something with nothing but spaces if(which_i == 0 || which_i == 2) { while(state.string[state.pos.x]) { switch(state.string[state.pos.x]) { case ' ': case '\n': case '\r': case '\t': if(string_end < 0) { string_end = state.pos.x; state_trail = state; } ++state.pos.x; continue; default: if(IS_PRINT(state.string[state.pos.x])) { string_end = -1; ++state.pos.x; } else { struct FANSI_state state_tmp = state; FANSI_read_next(&state_tmp, i, arg); state.status |= state_tmp.status & STAT_WARNED; if(state_tmp.status & CTL_MASK) { state = state_tmp; continue; } else { string_end = -1; ++state.pos.x; } } } } state_last = state; } if(string_end < 0) { string_end = LENGTH(x_chr); state_trail = state_last; } // Do we need to write the string? if(string_start || string_end != LENGTH(x_chr)) { // We need a new vector since we have at least one change if(res_fin == x) REPROTECT(res_fin = duplicate(x), ipx); const char * err_msg = "Trimming whitespace"; // Two pass measure/write (see write.c) for(int k = 0; k < 2; ++k) { if(!k) FANSI_reset_buff(&buff); else FANSI_size_buff(&buff); FANSI_state_reinit(&state, x, i); // Any leading SGR if(string_start) { FANSI_W_sgr(&buff, state_lead.fmt.sgr, norm_i, 1, i); FANSI_W_url(&buff, state_lead.fmt.url, i); } // Body of string FANSI_W_normalize_or_copy( &buff, state_lead, norm_i, string_end, i, err_msg, "x" ); // Trailing state if(string_end) FANSI_W_bridge(&buff, state_trail, state_last, norm_i, i, err_msg); } // We assume UTF-8 can only show up in the body of the string SEXP chr_sexp = PROTECT(FANSI_mkChar(buff, getCharCE(x_chr), i)); SET_STRING_ELT(res_fin, i, chr_sexp); UNPROTECT(1); } } FANSI_release_buff(&buff, 1); UNPROTECT(prt); return res_fin; } fansi/src/normalize.c0000644000176200001440000001456214533476156014333 0ustar liggesusers/* * Copyright (C) Brodie Gaslam * * This file is part of "fansi - ANSI Control Sequence Aware String Functions" * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Go to for a copies of the licenses. */ #include "fansi.h" /* * Writes out a String With normalized SGR * * Or computes the size required * * @param buff if NULL, computes the size required, if not writes it. * @param *state state by reference so that we can recover the changed state * info from reading for use in the `carry` case. * @param stop pos.x corresponding to the position to stop normalizing. */ int FANSI_W_normalize( struct FANSI_buff * buff, struct FANSI_state *state, int stop, R_xlen_t i, const char * err_msg, const char * arg ) { struct FANSI_state state_int, state_prev; state_int = state_prev = *state; const char * string, * string_prev, * string_last; string_prev = string_last = string = state_int.string + state_int.pos.x; int any_to_exp = 0; // Logic originally based on FANSI_esc_to_html, adapted for explicit stop // Find other ESCs while(1) { string = strchr(string_prev, 0x1b); if(!string) string = string_prev + strlen(string_prev); state_int.pos.x = (string - state_int.string); if(state_int.pos.x >= stop) { // Overshot target length if(any_to_exp) { FANSI_W_MCOPY(buff, string_last, stop - (string_last - state->string)); } break; } else if (*string && *string == 0x1b) { // We encountered an ESC state_prev = state_int; FANSI_read_next(&state_int, i, arg); // Any special sequence will be re-written. In some cases, we don't need // to do so, but even when things are already normalized, the order of the // elements may not be the same. if(state_int.status & STAT_SPECIAL) { any_to_exp = 1; // stuff prior to SGR/URL FANSI_W_MCOPY(buff, string_last, string - string_last); // Actual SGR FANSI_W_bridge(buff, state_prev, state_int, 1, i, err_msg); // Keep track of the last point we copied string_last = state_int.string + state_int.pos.x; } string = state_int.string + state_int.pos.x; // nocov start } else if (*string == 0) { // We ran out of string (should be impossible if `stop` used correctly) error("Internal Error: unexpected `stop` value for normalize."); break; // nocov end } else error("Internal Error: normalize logic error."); // nocov string_prev = string; } *state = state_int; return any_to_exp ? buff->len : -1; } static SEXP normalize_state_int( SEXP x, SEXP warn, SEXP term_cap, SEXP carry, struct FANSI_buff *buff, R_xlen_t index0 ) { if(TYPEOF(x) != STRSXP) error("Internal Error: `x` must be a character vector"); // nocov int prt = 0; R_xlen_t x_len = XLENGTH(x); SEXP res = x; // Reserve spot on protection stack PROTECT_INDEX ipx; PROTECT_WITH_INDEX(res, &ipx); ++prt; SEXP ctl = PROTECT(ScalarInteger(1)); ++prt; // "all" int do_carry = STRING_ELT(carry, 0) != NA_STRING; int any_na = 0; struct FANSI_state state_carry = FANSI_carry_init(carry, warn, term_cap, ctl); struct FANSI_state state_start, state; const char * err_msg = "Normalizing state"; for(R_xlen_t i = 0; i < x_len; ++i) { FANSI_interrupt(i + index0); if(!i) { state = FANSI_state_init(x, warn, term_cap, i); } else FANSI_state_reinit(&state, x, i); SEXP chrsxp = STRING_ELT(x, i); if(chrsxp == NA_STRING || (any_na && do_carry)) { // duplicate input vector if needed if(res == x) REPROTECT(res = duplicate(x), ipx); any_na = 1; SET_STRING_ELT(res, i, NA_STRING); continue; } // Measure if(do_carry) { state.fmt.sgr = state_carry.fmt.sgr; state.fmt.url = state_carry.fmt.url; } state_start = state; FANSI_reset_buff(buff); int len = FANSI_W_normalize( buff, &state, (int)LENGTH(chrsxp), i, err_msg, "x" ); state_carry.fmt.sgr = state.fmt.sgr; state_carry.fmt.url = state.fmt.url; if(len < 0) continue; // Write if(res == x) REPROTECT(res = duplicate(x), ipx); FANSI_size_buff(buff); state = state_start; state.status |= STAT_WARNED; // avoid double warnings FANSI_W_normalize( buff, &state, (int)LENGTH(chrsxp), i, err_msg, "x" ); cetype_t chr_type = getCharCE(chrsxp); SEXP reschr = PROTECT(FANSI_mkChar(*buff, chr_type, i)); SET_STRING_ELT(res, i, reschr); UNPROTECT(1); } UNPROTECT(prt); return res; } SEXP FANSI_normalize_state_ext(SEXP x, SEXP warn, SEXP term_cap, SEXP carry) { if(TYPEOF(x) != STRSXP) error("Internal Error: `x` must be a character vector"); // nocov struct FANSI_buff buff; FANSI_INIT_BUFF(&buff); SEXP res = PROTECT(normalize_state_int(x, warn, term_cap, carry, &buff, 0)); FANSI_release_buff(&buff, 1); UNPROTECT(1); return res; } // List version to use with result of `strwrap_ctl(..., unlist=FALSE)` // Just a lower overhead version. Needed b/c `strwrap_ctl` calls normalize from // R level instead of doing it internally. SEXP FANSI_normalize_state_list_ext( SEXP x, SEXP warn, SEXP term_cap, SEXP carry ) { if(TYPEOF(x) != VECSXP) error("Internal Error: `x` must be a list vector"); // nocov SEXP res = x; // Reserve spot on protection stack PROTECT_INDEX ipx; PROTECT_WITH_INDEX(res, &ipx); struct FANSI_buff buff; FANSI_INIT_BUFF(&buff); R_xlen_t i0 = 0; // for interrupt across vector elements R_xlen_t llen = XLENGTH(x); for(R_xlen_t i = 0; i < llen; ++i) { SEXP elt0 = VECTOR_ELT(x, i); if(i0 > FANSI_lim.lim_R_xlen_t.max - XLENGTH(elt0)) i0 = 0; SEXP elt1 = PROTECT( normalize_state_int(elt0, warn, term_cap, carry, &buff, i0) ); // If unequal, normalization occurred if(elt0 != elt1) { if(res == x) REPROTECT(res = duplicate(x), ipx); SET_VECTOR_ELT(res, i, elt1); } UNPROTECT(1); } FANSI_release_buff(&buff, 1); UNPROTECT(1); return res; } fansi/src/tabs.c0000644000176200001440000001456614533476156013270 0ustar liggesusers/* * Copyright (C) Brodie Gaslam * * This file is part of "fansi - ANSI Control Sequence Aware String Functions" * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Go to for a copies of the licenses. */ #include "fansi.h" static struct FANSI_state FANSI_inc_width( struct FANSI_state state, int inc, R_xlen_t i ) { if(inc < 0) error("Internal Error: inc may not be negative."); // nocov if(state.pos.w > FANSI_lim.lim_int.max - inc) // This error can't really trigger because when expanding tabs to spaces we // already check for overflow // nocov start error( "Expanding tabs will cause string to exceed INT_MAX at index [%ju].", FANSI_ind(i) ); // nocov end state.pos.w += inc; return state; } /* * Determine how many spaces tab width should be * * state should be at a tab * * stop_idx/tab_width by ref so previous calculations can be re-used */ static int tab_width( struct FANSI_state state, int * tab_stops, R_xlen_t stops, int * stop_idx, int * tab_width ) { if(*(state.string + state.pos.x) != '\t') error("Internal Error: computing tab width on not a tab"); // nocov while(state.pos.w >= *tab_width) { int stop_size = *(tab_stops + *stop_idx); if(stop_size < 1) error("Internal Error: stop size less than 1."); // nocov if(*tab_width > FANSI_lim.lim_int.max - stop_size) error("Integer overflow when attempting to compute tab width."); // nocov *tab_width += stop_size; if(*stop_idx < stops - 1) (*stop_idx)++; } return *tab_width - state.pos.w; } SEXP FANSI_tabs_as_spaces( SEXP vec, SEXP tab_stops, struct FANSI_buff * buff, SEXP warn, SEXP term_cap, SEXP ctl ) { if(TYPEOF(vec) != STRSXP) error("Argument 'vec' should be a character vector"); // nocov R_xlen_t len = XLENGTH(vec); R_xlen_t len_stops = XLENGTH(tab_stops); int * tab_stops_i = INTEGER(tab_stops); int max_tab_stop = 1; // check stops if(len_stops < 1) error("Internal Error: must have at least one tab stop"); // nocov if(len_stops > FANSI_lim.lim_int.max) error("Internal Error: can have at most INT_MAX tab stops"); // nocov for(R_xlen_t j = 0; j < len_stops; ++j) { if(tab_stops_i[j] > max_tab_stop) max_tab_stop = tab_stops_i[j]; if(tab_stops_i[j] < 1) error("Internal Error: stop size less than 1."); // nocov } const char * err_msg = "Converting tabs to spaces"; const char * arg = "x"; const char * source; int tabs_in_str = 0; SEXP res_sxp = vec; int prt = 0; PROTECT_INDEX ipx; PROTECT_WITH_INDEX(res_sxp, &ipx); prt++; // reserve spot to alloc later struct FANSI_state state; SEXP R_true = PROTECT(ScalarLogical(1)); prt++; SEXP R_one = PROTECT(ScalarInteger(1)); prt++; SEXP keepNA, allowNA, width; keepNA = allowNA = R_true; width = R_one; for(R_xlen_t i = 0; i < len; ++i) { FANSI_interrupt(i); if(!i) { state = FANSI_state_init_full( vec, warn, term_cap, allowNA, keepNA, width, ctl, i ); } else FANSI_state_reinit(&state, vec, i); int tab_count = 0; SEXP chr = STRING_ELT(vec, i); if(chr == NA_STRING) continue; source = CHAR(chr); while(*source && (source = strchr(source, '\t'))) { if(!tabs_in_str) { tabs_in_str = 1; REPROTECT(res_sxp = duplicate(vec), ipx); } ++tab_count; ++source; } if(tab_count) { // Figure out possible size of buffer, allowing max_tab_stop for every // tab, which should over-allocate but is faster FANSI_check_chrsxp(chr, i); int new_buff_size = (int)LENGTH(chr); int tab_extra = max_tab_stop - 1; for(int k = 0; k < tab_count; ++k) { if(new_buff_size > (FANSI_lim.lim_int.max - tab_extra)) error( "%s%s", "Converting tabs to spaces will cause string to be longer than ", "allowed INT_MAX." ); new_buff_size += tab_extra; } // Note: this does not use the measure - write approach; we just // overallocate knowing the upper bound of tab space usage. FANSI_size_buff0(buff, new_buff_size); char cur_chr; int last_byte = state.pos.x; unsigned int settings = state.settings; // backup copy of settings int tab_acc_width, tab_stop; tab_acc_width = tab_stop = 0; while(1) { cur_chr = state.string[state.pos.x]; int extra_spaces = 0; if(cur_chr == '\t') { extra_spaces = tab_width(state, tab_stops_i, len_stops, &tab_acc_width, &tab_stop); } else if (cur_chr == '\n') { FANSI_reset_width(&state); tab_acc_width = 0; tab_stop = 0; } // Write string if(cur_chr == '\t' || !cur_chr) { int write_bytes = state.pos.x - last_byte; FANSI_W_MCOPY(buff, state.string + last_byte, write_bytes); // consume tab and advance, temporarily suppressing warning state.settings &= ~WARN_MASK; FANSI_read_next(&state, i, arg); state.settings = settings; cur_chr = state.string[state.pos.x]; state = FANSI_inc_width(state, extra_spaces, i); last_byte = state.pos.x; // actually write the extra spaces FANSI_W_FILL(buff, ' ', extra_spaces); } else { FANSI_read_next(&state, i, arg); } if(!cur_chr) break; } // Write the CHARSXP cetype_t chr_type = CE_NATIVE; if(state.utf8) chr_type = CE_UTF8; SEXP chr_sxp = PROTECT(FANSI_mkChar0(buff->buff0, buff->buff, chr_type, i)); SET_STRING_ELT(res_sxp, i, chr_sxp); UNPROTECT(1); } } UNPROTECT(prt); return res_sxp; } SEXP FANSI_tabs_as_spaces_ext( SEXP vec, SEXP tab_stops, SEXP warn, SEXP term_cap, SEXP ctl ) { struct FANSI_buff buff; FANSI_INIT_BUFF(&buff); SEXP res = PROTECT(FANSI_tabs_as_spaces(vec, tab_stops, &buff, warn, term_cap, ctl)); FANSI_release_buff(&buff, 1); UNPROTECT(1); return res; } fansi/NAMESPACE0000644000176200001440000000204515106721052012571 0ustar liggesusers# Generated by roxygen2: do not edit by hand export("substr2_ctl<-") export("substr_ctl<-") export(close_state) export(dflt_css) export(dflt_term_cap) export(fansi_lines) export(fansi_unicode_version) export(fwl) export(has_ctl) export(has_sgr) export(html_code_block) export(html_esc) export(in_html) export(make_styles) export(nchar_ctl) export(nchar_sgr) export(normalize_state) export(nzchar_ctl) export(nzchar_sgr) export(set_knit_hooks) export(sgr_256) export(sgr_to_html) export(state_at_end) export(strip_ctl) export(strip_sgr) export(strsplit_ctl) export(strsplit_sgr) export(strtrim2_ctl) export(strtrim2_sgr) export(strtrim_ctl) export(strtrim_sgr) export(strwrap2_ctl) export(strwrap2_sgr) export(strwrap_ctl) export(strwrap_sgr) export(substr2_ctl) export(substr2_sgr) export(substr_ctl) export(substr_sgr) export(tabs_as_spaces) export(term_cap_test) export(to_html) export(trimws_ctl) export(unhandled_ctl) importFrom(grDevices,col2rgb) importFrom(grDevices,rgb) importFrom(utils,browseURL) useDynLib(fansi, .registration=TRUE, .fixes="FANSI_") fansi/NEWS.md0000644000176200001440000002774715106721052012470 0ustar liggesusers# fansi Release Notes ## v1.0.7 * Remove internal dependency to non-API `R_nchar`. This also updates to use Unicode 17 instead of the Unicode 13 used by R as of R4.5.1. * Add `fansi_unicode_version()` to report what version of the Unicode database is in use. ## v1.0.6 * Fix new `-Wformat` warnings. ## v1.0.5 * Address roxygen2 breaking changes: * Add explicit alias for `fansi-package` now that it is no longer auto-generated by roxgen2 from the [`@docType package` directive](https://github.com/r-lib/roxygen2/issues/1491). * Work around [changed behavior for `@inheritParams`](https://github.com/r-lib/roxygen2/issues/1515). ## v1.0.4 CRAN compiled code warning suppression release. * Fix void function declarations and definitions. * Change `sprintf` to `snprintf`. ## v1.0.3 * Address problem uncovered by gcc-12 linters, although the issue itself could not manifest due to redundancy of checks in the code. ## v1.0.0-2 This is a major release and includes some behavior changes. ### Features * New functions: * [#26](https://github.com/brodieG/fansi/issues/26) Replacement forms of `substr_cl` (i.e `substr_ctl<-`). * `state_at_end` to compute active state at end of a string. * `close_state` to generate a closing sequence given an active state. * [#31](https://github.com/brodieG/fansi/issues/31) `trimws_ctl` as an equivalent to `trimws`. * [#64](https://github.com/brodieG/fansi/issues/64) `normalize_sgr` converts compound _Control Sequences_ into normalized form (e.g. "ESC[44;31m" becomes "ESC[31mESC[44m") for better compatibility with [`crayon`](https://github.com/r-lib/crayon). Additionally, most functions gain a `normalize` parameter so that they may return their output in normalized form (h/t @krlmlr). * [#74](https://github.com/brodieG/fansi/issues/74)`substr_ctl` and related functions are now all-C instead of a combination of C offset computations and R level `substr` operations. This greatly improves performance, particularly for vectors with many distinct strings. Despite documentation claiming otherwise, `substr_ctl` was quite slow in that case. * [#66](https://github.com/brodieG/fansi/issues/66) Improved grapheme support, including accounting for them in `type="width"` mode, as well as a `type="graphemes"` mode to measure in graphemes instead of characters. Implementation is based on heuristics designed to work in most common use cases. * `html_esc` gains a `what` parameter to indicate which HTML special characters should be escaped. * Many functions gain `carry` and `terminate` parameters to control how `fansi` generated substrings interact with surrounding formats. * [#71](https://github.com/brodieG/fansi/issues/71) Functions that write SGR and OSC are now more parsimonious (see "Behavior Changes" below). * [#73](https://github.com/brodieG/fansi/issues/73) Default parameter values retrieved with `getOption` now always have explicit fallback values defined (h/t @gadenbui). * Better warnings and error messages, including more granular messages for `unhandled_ctl` for adjacent _Control Sequences_. * `term.cap` parameter now accepts "all" as value, like the `ctl` parameter. ### Deprecated Functions * All the "sgr" functions (e.g., `substr_sgr`, `strwrap_sgr`) are deprecated. They will likely live on indefinitely, but they are of limited usefulness and with the added support for OSC hyperlinks their name is misleading. * `sgr_to_html` is now `to_html` with slight modifications to semantics; the old function remains and does not warn about unescaped "<" or ">" in the input string. ### Behavior Changes The major intentional behavior change is to default `fansi` to always recognize true color CSI SGR sequences (e.g. `"ESC[38;2;128;50;245m"`). The prior default was to match the active terminal capabilities, but it is unlikely that the intent of a user manipulating a string with truecolor sequences is to interpret them incorrectly, even if their terminal does. `fansi` will continue to warn in this case. To keep the pre-1.0 behavior add `"old"` to the `term.cap` parameter. Additionally, `to_html` will now warn if it encounters unescaped HTML special character "<" or ">" in the input string. Finally, the 1.0 release is an extensive refactoring of many parts of the SGR and OSC hyperlink controls (_Special Sequences_) intake and output algorithms. In some cases this means that some `fansi` functions will output _Special Sequences_ slightly differently than they did before. In almost all cases the rendering of the output should remain unchanged, although there are some corner cases with changes (e.g. in `strwrap_ctl` SGRs embedded in whitespace sequences don't break the sequence). The changes are a side effect of applying more consistent treatment of corner cases around leading and trailing control sequences and (partially) invalid control sequences. Trailing _Special Sequences_ in the output is now omitted as it would be immediately closed (assuming `terminate=TRUE`, the default). Leading SGR is interpreted and re-output. Normally output consistency alone would not be a reason to change behavior, but in this case the changes should be almost always undetectable in the **rendered** output, and maintaining old inconsistent behavior in the midst of a complete refactoring of the internals was beyond my patience. I apologize if these behavior changes adversely affect your programs. > WARNING: we will strive to keep rendered appearance of `fansi` outputs > consistent across releases, but the exact bytes used in the output of _Special > Sequences_ may change. Other changes: * Tests may no longer pass with R < 4.0 although the package should still function correctly. This is primarily because of changes to the character width Unicode Database that ships with R, and many of the newly added grapheme tests touch parts of that database that changed (emoji). * CSI sequences with more than one "intermediate" byte are now considered valid, even though they are likely to be very rare, and CSI sequences consume all subsequent bytes until a valid closing byte or end of string is encountered. * `strip_ctl` only warns with malformed CSI and OSC if they are reported as supported via the `ctl` parameter. If CSI and OSC are indicated as not supported, but two byte escapes are, the two initial bytes of CSI and OSCs will be stripped. * "unknown" encoded strings are no longer translated to UTF-8 in UTF-8 locales (they are instead assumed to be UTF-8). * `nchar_ctl` preserves `dim`, `dimnames`, and `names` as the base functions do. * UTF-8 known to be invalid should not be output, even if present in input (UTF-8 validation is not complete, only sequences that are obviously wrong are detected). ### Bug Fixes * Fix `tabs_as_spaces` to handle sequential tabs, and to perform better on very wide strings. * Strings with invalid UTF-8 sequences with "unknown" declared encoding in UTF-8 locales now cause errors instead of being silently translated into byte escaped versions (e.g. "\xf0\xc2" (2 bytes), used to be interpreted as "" (four characters). These now cause errors as they would have if they had had "UTF-8" declared encoding. * In some cases true colors of form "38;2;x;x;x" and "48;2;x;x;x" would only be partially transcribed. ### Internal Changes * More aggressive UTF-8 validation, also, invalid UTF-8 code points now advance only one byte instead of their putative width based on the initial byte. * Reduce peak memory usage by making some intermediate buffers eligible for garbage collection prior to native code returning to R. * Reworked internals to simplify buffer size computation and synchronization, in some cases this might cause slightly reduced performance. Please report any significant performance regressions. * `nchar_ctl(...)` is no longer a wrapper for `nchar(strip_ctl(...))` so that it may correctly support grapheme width calculations. ## v0.5.0 * [#65](https://github.com/brodieG/fansi/issues/65): `sgr_to_html` optionally converts CSI SGR to classes instead of inline styles (h/t @hadley). * [#69](https://github.com/brodieG/fansi/issues/69): `sgr_to_html` is more disciplined about emitting unnecessary HTML (h/t @hadley). * New functions: * `sgr_256`: Display all 256 8-bit colors. * `in_html`: Easily output HTML in a web page. * `make_styles`: Easily produce CSS that matches 8-bit colors. * Adjust for changes to `nchar(..., type='width')` for C0-C1 control characters in R 4.1. * Restore tests bypassed in 0.4.2. ## v0.4.2 * Temporarily bypass tests due to R bug introduced in R-devel 79799. ## v0.4.1 * Correctly define/declare global symbols as per WRE 1.6.4.1, (h/t Professor Ripley, Joshua Ulrich for example fixes). * [#59](https://github.com/brodieG/fansi/issues/59): Provide a `split.nl` option to `set_knit_hooks` to mitigate white space issues when using blackfriday for the markdown->html conversion (@krlmlr). ## v0.4.0 * Systematized which control sequences are handled specially by adding the `ctl` parameter to most functions. Some functions such as `strip_ctl` had existing parameters that did the same thing (e.g. `strip`, or `which`), and those have been deprecated in favor of `ctl`. While technically this is a change in the API, it is backwards compatible (addresses [#56](https://github.com/brodieG/fansi/issues/56) among and other things). * Added `*_sgr` version of most `*_ctl` functions. * `nzchar_ctl` gains the `ctl` parameter. * [#57](https://github.com/brodieG/fansi/issues/57): Correctly detect when CSI sequences are not actually SGR (previously would apply styles from some non-SGR CSI sequences). * [#55](https://github.com/brodieG/fansi/issues/55): `strsplit_ctl` can now work with `ctl` parameters containing escape sequences provided those sequences are excluded from by the `ctl` parameter. * [#54](https://github.com/brodieG/fansi/issues/54): fix `sgr_to_html` so that it can handle vector elements with un-terminated SGR sequences (@krlmlr). * Fix bug in width computation of first line onwards in `strwrap_ctl` when indent/exdent/prefix/initial widths vary from first to second line. * Fix wrapping in `strwrap2_*(..., strip.spaces=FALSE)`, including a bug when `wrap.always=TRUE` and a line started in a word-whitespace boundary. * Add `term.cap` parameter to `unhandled_ctl`. ## v0.3.0 * `fansi::set_knit_hooks` makes it easy to automatically convert ANSI CSI SGR sequences to HTML in Rmarkdown documents. We also add a vignette that demonstrates how to do this. * [#53](https://github.com/brodieG/fansi/issues/53): fix for systems where 'char' is signed (found and fixed by @QuLogic). * [#52](https://github.com/brodieG/fansi/issues/52): fix bad compilation under ICC (@kazumits). * [#51](https://github.com/brodieG/fansi/issues/51): documentation improvements (@krlmlr). * [#50](https://github.com/brodieG/fansi/issues/50): run tests on R 3.1 - 3.4 tests for the rc branch only (@krlmlr). * [#48](https://github.com/brodieG/fansi/issues/48): malformed call to error in FANSI_check_enc (@msannell). * [#47](https://github.com/brodieG/fansi/issues/47): compatibility with R versions 3.2.0 and 3.2.1 (@andreadega). ## v0.2.3 * [#45](https://github.com/brodieG/fansi/issues/45): add capability to run under R 3.1 [hadley](https://github.com/hadley), [Gábor Csárdi](https://github.com/gaborcsardi). * [#44](https://github.com/brodieG/fansi/issues/44): include bright color support in HTML conversion (h/t [Will Landau](https://github.com/wlandau)). Other minor fixes ([#43](https://github.com/brodieG/fansi/issues/43), [#46](https://github.com/brodieG/fansi/issues/46)). ## v0.2.2 * Remove valgrind uninitialized string errors by avoiding `strsplit`. * Reduce R dependency to >= 3.2.x (@gaborcsardi). * Update tests to handle potential change in `substr` behavior starting with R-3.6. ## v0.2.1 * All string inputs are now encoded to UTF-8, not just those that are used in width calculations. * UTF-8 tests skipped on Solaris. ## v0.2.0 * Add `strsplit_ctl`. ## v0.1.0 Initial release. fansi/inst/0000755000176200001440000000000015107200322012317 5ustar liggesusersfansi/inst/doc/0000755000176200001440000000000015107200322013064 5ustar liggesusersfansi/inst/doc/sgr-in-rmd.Rmd0000644000176200001440000001041614213626165015527 0ustar liggesusers--- title: "ANSI CSI SGR Sequences in Rmarkdown" author: "Brodie Gaslam" output: rmarkdown::html_vignette: css: styles.css mathjax: local vignette: > %\VignetteIndexEntry{ANSI CSI SGR Sequences in Rmarkdown} %\VignetteEngine{knitr::rmarkdown} \usepackage[utf8]{inputenc} --- ```{r echo=FALSE} library(fansi) knitr::knit_hooks$set(document=function(x, options) gsub("\033", "\uFFFD", x)) ``` ### Browsers Do Not Interpret ANSI CSI SGR Sequences Over the past few years color has been gaining traction in the R terminal, particularly since Gábor Csárdi's [crayon](https://github.com/r-lib/crayon) made it easy to format text with [ANSI CSI SGR sequences](https://en.wikipedia.org/wiki/ANSI_escape_code). At the same time the advent of JJ Alaire and Yihui Xie `rmarkdown` and `knitr` packages, along with John MacFarlane `pandoc`, made it easy to automatically incorporate R code and output in HTML documents. Unfortunately ANSI CSI SGR sequences are not recognized by web browsers and end up rendering weirdly1: ```{r} sgr.string <- c( "\033[43;34mday > night\033[0m", "\033[44;33mdawn < dusk\033[0m" ) writeLines(sgr.string) ``` ### Automatically Convert ANSI CSI SGR to HTML `fansi` provides the `to_html` function which converts the ANSI CSI SGR sequences and OSC hyperlinks into HTML markup. When we combine it with `knitr::knit_hooks` we can modify the rendering of the `rmarkdown` document such that ANSI CSI SGR encoding is shown in the equivalent HTML. `fansi::set_knit_hooks` is a convenience function that does just this. You should call it in an `rmarkdown` document with the: * Chunk option `results` set to "asis". * Chunk option `comments` set to "" (empty string). * The `knitr::knit_hooks` object as an argument. The corresponding `rmarkdown` hunk should look as follows: ```` ```{r, comment="", results="asis"}`r ''` old.hooks <- fansi::set_knit_hooks(knitr::knit_hooks) ``` ```` ```{r comment="", results="asis", echo=FALSE} old.hooks <- fansi::set_knit_hooks(knitr::knit_hooks) ``` We run this function for its side effects, which cause the output to be displayed as intended: ```{r} writeLines(sgr.string) ``` If you are seeing extra line breaks in your output you may need to use: ```` ```{r, comment="", results="asis"}`r ''` old.hooks <- fansi::set_knit_hooks(knitr::knit_hooks, split.nl=TRUE) ``` ```` If you use `crayon` to generate your ANSI CSI SGR style strings you may need to set `options(crayon.enabled=TRUE)`, as in some cases `crayon` suppresses the SGR markup if it thinks it is not outputting to a terminal. We can also set hooks for the other types of outputs, and add some additional CSS styles. ```` ```{r, comment="", results="asis"}`r ''` styles <- c( getOption("fansi.style", dflt_css()), # default style "PRE.fansi CODE {background-color: transparent;}", "PRE.fansi-error {background-color: #DDAAAA;}", "PRE.fansi-warning {background-color: #DDDDAA;}", "PRE.fansi-message {background-color: #AAAADD;}" ) old.hooks <- c( old.hooks, fansi::set_knit_hooks( knitr::knit_hooks, which=c("warning", "error", "message"), style=styles ) ) ``` ```` ```{r comment="", results="asis", echo=FALSE} styles <- c( getOption("fansi.style", dflt_css()), # default style "PRE.fansi CODE {background-color: transparent;}", "PRE.fansi-error {background-color: #DDAAAA;}", "PRE.fansi-warning {background-color: #DDDDAA;}", "PRE.fansi-message {background-color: #AAAADD;}" ) old.hooks <- c( old.hooks, fansi::set_knit_hooks( knitr::knit_hooks, which=c("warning", "error", "message"), style=styles ) ) ``` ```{r error=TRUE} message(paste0(sgr.string, collapse="\n")) warning(paste0(c("", sgr.string), collapse="\n")) stop(paste0(c("", sgr.string), collapse="\n")) ``` You can restore the old hooks at any time in your document with: ```{r} do.call(knitr::knit_hooks$set, old.hooks) writeLines(sgr.string) ``` See `?fansi::set_knit_hooks` for details. ---- 1For illustrative purposes we output raw ANSI CSI SGR sequences in this document. However, because the ESC control character causes problems with some HTML rendering services we replace it with the � symbol. Depending on the browser and process it would normally not be visible at all, or substituted with some other symbol. fansi/inst/doc/sgr-in-rmd.html0000644000176200001440000004076515107200322015745 0ustar liggesusers ANSI CSI SGR Sequences in Rmarkdown

ANSI CSI SGR Sequences in Rmarkdown

Brodie Gaslam

Browsers Do Not Interpret ANSI CSI SGR Sequences

Over the past few years color has been gaining traction in the R terminal, particularly since Gábor Csárdi’s crayon made it easy to format text with ANSI CSI SGR sequences. At the same time the advent of JJ Alaire and Yihui Xie rmarkdown and knitr packages, along with John MacFarlane pandoc, made it easy to automatically incorporate R code and output in HTML documents.

Unfortunately ANSI CSI SGR sequences are not recognized by web browsers and end up rendering weirdly1:

sgr.string <- c(
  "\033[43;34mday > night\033[0m",
  "\033[44;33mdawn < dusk\033[0m"
)
writeLines(sgr.string)
## �[43;34mday > night�[0m
## �[44;33mdawn < dusk�[0m

Automatically Convert ANSI CSI SGR to HTML

fansi provides the to_html function which converts the ANSI CSI SGR sequences and OSC hyperlinks into HTML markup. When we combine it with knitr::knit_hooks we can modify the rendering of the rmarkdown document such that ANSI CSI SGR encoding is shown in the equivalent HTML.

fansi::set_knit_hooks is a convenience function that does just this. You should call it in an rmarkdown document with the:

  • Chunk option results set to “asis”.
  • Chunk option comments set to “” (empty string).
  • The knitr::knit_hooks object as an argument.

The corresponding rmarkdown hunk should look as follows:

```{r, comment="", results="asis"}
old.hooks <- fansi::set_knit_hooks(knitr::knit_hooks)
```

We run this function for its side effects, which cause the output to be displayed as intended:

writeLines(sgr.string)
## day > night
## dawn < dusk

If you are seeing extra line breaks in your output you may need to use:

```{r, comment="", results="asis"}
old.hooks <- fansi::set_knit_hooks(knitr::knit_hooks, split.nl=TRUE)
```

If you use crayon to generate your ANSI CSI SGR style strings you may need to set options(crayon.enabled=TRUE), as in some cases crayon suppresses the SGR markup if it thinks it is not outputting to a terminal.

We can also set hooks for the other types of outputs, and add some additional CSS styles.

```{r, comment="", results="asis"}
styles <- c(
  getOption("fansi.style", dflt_css()),  # default style
  "PRE.fansi CODE {background-color: transparent;}",
  "PRE.fansi-error {background-color: #DDAAAA;}",
  "PRE.fansi-warning {background-color: #DDDDAA;}",
  "PRE.fansi-message {background-color: #AAAADD;}"
)
old.hooks <- c(
  old.hooks,
  fansi::set_knit_hooks(
    knitr::knit_hooks,
    which=c("warning", "error", "message"),
    style=styles
) )
```
message(paste0(sgr.string, collapse="\n"))
## day > night
## dawn < dusk
warning(paste0(c("", sgr.string), collapse="\n"))
## Warning: 
## day > night
## dawn < dusk
stop(paste0(c("", sgr.string), collapse="\n"))
## Error: 
## day > night
## dawn < dusk

You can restore the old hooks at any time in your document with:

do.call(knitr::knit_hooks$set, old.hooks)
writeLines(sgr.string)
## �[43;34mday > night�[0m
## �[44;33mdawn < dusk�[0m

See ?fansi::set_knit_hooks for details.


1For illustrative purposes we output raw ANSI CSI SGR sequences in this document. However, because the ESC control character causes problems with some HTML rendering services we replace it with the � symbol. Depending on the browser and process it would normally not be visible at all, or substituted with some other symbol.

fansi/inst/doc/sgr-in-rmd.R0000644000176200001440000000272215107200321015170 0ustar liggesusers## ----echo=FALSE--------------------------------------------------------------- library(fansi) knitr::knit_hooks$set(document=function(x, options) gsub("\033", "\uFFFD", x)) ## ----------------------------------------------------------------------------- sgr.string <- c( "\033[43;34mday > night\033[0m", "\033[44;33mdawn < dusk\033[0m" ) writeLines(sgr.string) ## ----comment="", results="asis", echo=FALSE----------------------------------- old.hooks <- fansi::set_knit_hooks(knitr::knit_hooks) ## ----------------------------------------------------------------------------- writeLines(sgr.string) ## ----comment="", results="asis", echo=FALSE----------------------------------- styles <- c( getOption("fansi.style", dflt_css()), # default style "PRE.fansi CODE {background-color: transparent;}", "PRE.fansi-error {background-color: #DDAAAA;}", "PRE.fansi-warning {background-color: #DDDDAA;}", "PRE.fansi-message {background-color: #AAAADD;}" ) old.hooks <- c( old.hooks, fansi::set_knit_hooks( knitr::knit_hooks, which=c("warning", "error", "message"), style=styles ) ) ## ----error=TRUE--------------------------------------------------------------- try({ message(paste0(sgr.string, collapse="\n")) warning(paste0(c("", sgr.string), collapse="\n")) stop(paste0(c("", sgr.string), collapse="\n")) }) ## ----------------------------------------------------------------------------- do.call(knitr::knit_hooks$set, old.hooks) writeLines(sgr.string) fansi/README.md0000644000176200001440000002402415107174675012650 0ustar liggesusers # fansi - ANSI Control Sequence Aware String Functions [![R build status](https://github.com/brodieG/fansi/workflows/R-CMD-check/badge.svg)](https://github.com/brodieG/fansi/actions) [![](https://codecov.io/gh/brodieG/fansi/branch/master/graphs/badge.svg?branch=rc)](https://app.codecov.io/github/brodieG/fansi?branch=rc) [![](http://www.r-pkg.org/badges/version/fansi)](https://cran.r-project.org/package=fansi) [![Dependencies direct/recursive](https://tinyverse.netlify.app/badge/fansi)](https://tinyverse.netlify.app/) Counterparts to R string manipulation functions that account for the effects of ANSI text formatting control sequences. ## Formatting Strings with Control Sequences Many terminals will recognize special sequences of characters in strings and change display behavior as a result. For example, on my terminal the sequences `"\033[3?m"` and `"\033[4?m"`, where `"?"` is a digit in 1-7, change the foreground and background colors of text respectively: fansi <- "\033[30m\033[41mF\033[42mA\033[43mN\033[44mS\033[45mI\033[m" ![](https://github.com/brodieG/fansi/raw/v1.0-rc/extra/images/fansi-1.png) This type of sequence is called an ANSI CSI SGR control sequence. Most \*nix terminals support them, and newer versions of Windows and Rstudio consoles do too. You can check whether your display supports them by running `term_cap_test()`. Whether the `fansi` functions behave as expected depends on many factors, including how your particular display handles Control Sequences. See `?fansi` for details, particularly if you are getting unexpected results. ## Manipulation of Formatted Strings ANSI control characters and sequences (*Control Sequences* hereafter) break the relationship between byte/character position in a string and display position. For example, to extract the “ANS” part of our colored “FANSI”, we would need to carefully compute the character positions: ![](https://github.com/brodieG/fansi/raw/v1.0-rc/extra/images/fansi-2.png) With `fansi` we can select directly based on display position: ![](https://github.com/brodieG/fansi/raw/v1.0-rc/extra/images/fansi-3.png) If you look closely you’ll notice that the text color for the `substr` version is wrong as the naïve string extraction loses the initial`"\033[37m"` that sets the foreground color. Additionally, the color from the last letter bleeds out into the next line. ## `fansi` Functions `fansi` provides counterparts to the following string functions: - `substr` (and `substr<-`) - `strsplit` - `strtrim` - `strwrap` - `nchar` / `nzchar` - `trimws` These are drop-in replacements that behave (almost) identically to the base counterparts, except for the *Control Sequence* awareness. There are also utility functions such as `strip_ctl` to remove *Control Sequences* and `has_ctl` to detect whether strings contain them. Much of `fansi` is written in C so you should find performance of the `fansi` functions to be slightly slower than the corresponding base functions, with the exception that `strwrap_ctl` is much faster. Operations involving `type = "width"` will be slower still. We have prioritized convenience and safety over raw speed in the C code, but unless your code is primarily engaged in string manipulation `fansi` should be fast enough to avoid attention in benchmarking traces. ## Width Based Substrings `fansi` also includes improved versions of some of those functions, such as `substr2_ctl` which allows for width based substrings. To illustrate, let’s create an emoji string made up of two wide characters: pizza.grin <- sprintf("\033[46m%s\033[m", strrep("\U1F355\U1F600", 10)) ![](https://github.com/brodieG/fansi/raw/v1.0-rc/extra/images/pizza-grin.png) And a colorful background made up of one wide characters: raw <- paste0("\033[45m", strrep("FANSI", 40)) wrapped <- strwrap2_ctl(raw, 41, wrap.always=TRUE) ![](https://github.com/brodieG/fansi/raw/df4019e/extra/images/wrapped-2.png) When we inject the 2-wide emoji into the 1-wide background their widths are accounted for as shown by the result remaining rectangular: starts <- c(18, 13, 8, 13, 18) ends <- c(23, 28, 33, 28, 23) substr2_ctl(wrapped, type='width', starts, ends) <- pizza.grin ![](https://github.com/brodieG/fansi/raw/v1.0-rc/extra/images/wrapped-1.png) `fansi` width calculations use heuristics to account for graphemes, including combining emoji: emo <- c( "\U1F468", "\U1F468\U1F3FD", "\U1F468\U1F3FD\u200D\U1F9B3", "\U1F468\u200D\U1F469\u200D\U1F467\u200D\U1F466" ) writeLines( paste( emo, paste("base:", nchar(emo, type='width')), paste("fansi:", nchar_ctl(emo, type='width')) ) ) ## 👨 base: 2 fansi: 2 ## 👨🏽 base: 4 fansi: 2 ## 👨🏽‍🦳 base: 6 fansi: 2 ## 👨‍👩‍👧‍👦 base: 8 fansi: 2 ## HTML Translation You can translate ANSI CSI SGR formatted strings into their HTML counterparts with `to_html`:
Translate to HTML
## Rmarkdown It is possible to set `knitr` hooks such that R output that contains ANSI CSI SGR is automatically converted to the HTML formatted equivalent and displayed as intended. See the [vignette](https://htmlpreview.github.io/?https://raw.githubusercontent.com/brodieG/fansi/rc/extra/sgr-in-rmd.html) for details. ## Installation This package is available on CRAN: install.packages('fansi') It has no runtime dependencies. For the development version use `remotes::install_github('brodieg/fansi@development')` or: f.dl <- tempfile() f.uz <- tempfile() github.url <- 'https://github.com/brodieG/fansi/archive/development.zip' download.file(github.url, f.dl) unzip(f.dl, exdir=f.uz) install.packages(file.path(f.uz, 'fansi-development'), repos=NULL, type='source') unlink(c(f.dl, f.uz)) There is no guarantee that development versions are stable or even working. The master branch typically mirrors CRAN and should be stable. ## Related Packages and References - [crayon](https://github.com/r-lib/crayon), the library that started it all. - [ansistrings](https://github.com/r-lib/ansistrings/), which implements similar functionality. - [ECMA-48 - Control Functions For Coded Character Sets](https://ecma-international.org/publications-and-standards/standards/ecma-48/), in particular pages 10-12, and 61. - [CCITT Recommendation T.416](https://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-T.416-199303-I!!PDF-E&type=items) - [ANSI Escape Code - Wikipedia](https://en.wikipedia.org/wiki/ANSI_escape_code) for a gentler introduction. ## Acknowledgments - R Core for developing and maintaining such a wonderful language. - CRAN maintainers, for patiently shepherding packages onto CRAN and maintaining the repository, and Uwe Ligges in particular for maintaining [Winbuilder](https://win-builder.r-project.org/). - [Gábor Csárdi](https://github.com/gaborcsardi) for getting me started on the journey ANSI control sequences, and for many of the ideas on how to process them. - [Jim Hester](https://github.com/jimhester) for [covr](https://cran.r-project.org/package=covr), and with Rstudio for [r-lib/actions](https://github.com/r-lib/actions). - [Dirk Eddelbuettel](https://github.com/eddelbuettel) and [Carl Boettiger](https://github.com/cboettig) for the [rocker](https://github.com/rocker-org/rocker) project, and [Gábor Csárdi](https://github.com/gaborcsardi) and the [R-consortium](https://r-consortium.org/) for [Rhub](https://github.com/r-hub), without which testing bugs on R-devel and other platforms would be a nightmare. - [Tomas Kalibera](https://github.com/kalibera) for [rchk](https://github.com/kalibera/rchk) and the accompanying vagrant image, and rcnst to help detect errors in compiled code. - [Winston Chang](https://github.com/wch) for the [r-debug](https://hub.docker.com/r/wch1/r-debug/) docker container, in particular because of the valgrind level 2 instrumented version of R. - George Nachman etal. for [Iterm2](https://iterm2.com/index.html), a Free terminal emulator that supports truecolor CSI SGR. - [Hadley Wickham](https://github.com/hadley/) and [Peter Danenberg](https://github.com/klutometis) for [roxygen2](https://cran.r-project.org/package=roxygen2). - [Yihui Xie](https://github.com/yihui) for [knitr](https://cran.r-project.org/package=knitr) and [J.J. Allaire](https://github.com/jjallaire) et al. for [rmarkdown](https://cran.r-project.org/package=rmarkdown), and by extension John MacFarlane for [pandoc](https://pandoc.org/). - [Gábor Csárdi](https://github.com/gaborcsardi), the [R-consortium](https://r-consortium.org/), et al. for [revdepcheck](https://github.com/r-lib/revdepcheck) to simplify reverse dependency checks. - Olaf Mersmann for [microbenchmark](https://cran.r-project.org/package=microbenchmark), because microsecond matter, and [Joshua Ulrich](https://github.com/joshuaulrich) for making it lightweight. - All open source developers out there that make their work freely available for others to use. - [The Unicode Consortium](https://home.unicode.org/) for developing and maintaining Unicode, and bringing some sanity to character encodings. - [Github](https://github.com/), [Codecov](https://about.codecov.io/), [Vagrant](https://www.vagrantup.com/), [Docker](https://www.docker.com/), [Ubuntu](https://ubuntu.com/), [Brew](https://brew.sh/) for providing infrastructure that greatly simplifies open source development. - [Free Software Foundation](https://www.fsf.org/) for developing the GPL license and promotion of the free software movement. fansi/build/0000755000176200001440000000000015107200322012441 5ustar liggesusersfansi/build/vignette.rds0000644000176200001440000000034615107200322015003 0ustar liggesusersmQ 0 n1AdbN/wfV $Ms!tdZ H B | !u&G9 Tr*l,", intermediate bytes, other invalid characters, or there is an invalid subsequence (e.g. "ESC[38;2m" which should specify an RGB triplet but does not). OSCs contain invalid bytes, or OSC hyperlinks contain otherwise valid OSC bytes in 0x08-0x0d. \item exceed-term-cap: contains color codes not supported by the terminal (see \link{term_cap_test}). Bright colors with color codes in the 90-97 and 100-107 range in terminals that do not support them are not considered errors, whereas 256 or truecolor codes in terminals that do not support them are. This is because the latter are often misinterpreted by terminals that do not support them, whereas the former are typically silently ignored. \item CSI/OSC: a non-SGR CSI sequence, or non-hyperlink OSC sequence. \item CSI/OSC-bad-substr: a CSI or OSC sequence containing invalid characters. \item malformed-CSI/OSC: a malformed CSI or OSC sequence, typically one that never encounters its closing sequence before the end of a string. \item non-CSI/OSC: a non-CSI or non-OSC escape sequence, i.e. one where the ESC is followed by something other than "[" or "]". Since we assume all non-CSI sequences are only 2 characters long include the ESC, this type of sequence is the most likely to cause problems as some are not actually two characters long. \item malformed-ESC: a malformed two byte ESC sequence (i.e. one not ending in 0x40-0x7e). \item C0: a "C0" control character (e.g. tab, bell, etc.). \item malformed-UTF8: illegal UTF8 encoding. \item non-ASCII: non-ASCII bytes in escape sequences. } \item translated: whether the string was translated to UTF-8, might be helpful in odd cases were character offsets change depending on encoding. You should only worry about this if you cannot tie out the \code{start}/\code{stop} values to the escape sequence shown. \item esc: character the unhandled escape sequence } } \note{ Non-ASCII strings are converted to UTF-8 encoding. } \examples{ string <- c( "\033[41mhello world\033[m", "foo\033[22>m", "\033[999mbar", "baz \033[31#3m", "a\033[31k", "hello\033m world" ) unhandled_ctl(string) } \seealso{ \code{\link[=fansi]{?fansi}} for details on how \emph{Control Sequences} are interpreted, particularly if you are getting unexpected results, \code{\link{unhandled_ctl}} for detecting bad control sequences. } fansi/man/make_styles.Rd0000644000176200001440000000420614213626056014743 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/tohtml.R \name{make_styles} \alias{make_styles} \title{Generate CSS Mapping Classes to Colors} \usage{ make_styles(classes, rgb.mix = diag(3)) } \arguments{ \item{classes}{a character vector of either 16, 32, or 512 class names. The character vectors are described in \code{\link{to_html}}.} \item{rgb.mix}{3 x 3 numeric matrix to remix color channels. Given a N x 3 matrix of numeric RGB colors \code{rgb}, the colors used in the style sheet will be \code{rgb \%*\% rgb.mix}. Out of range values are clipped to the nearest bound of the range.} } \value{ A character vector that can be used as the contents of a style sheet. } \description{ Given a set of class names, produce the CSS that maps them to the default 8-bit colors. This is a helper function to generate style sheets for use in examples with either default or remixed \code{fansi} colors. In practice users will create their own style sheets mapping their classes to their preferred styles. } \examples{ ## Generate some class strings; order matters classes <- do.call(paste, c(expand.grid(c("fg", "bg"), 0:7), sep="-")) writeLines(classes[1:4]) ## Some Default CSS css0 <- "span {font-size: 60pt; padding: 10px; display: inline-block}" ## Associated class strings to styles css1 <- make_styles(classes) writeLines(css1[1:4]) ## Generate SGR-derived HTML, mapping to classes string <- "\033[43mYellow\033[m\n\033[45mMagenta\033[m\n\033[46mCyan\033[m" html <- to_html(string, classes=classes) writeLines(html) ## Combine in a page with styles and display in browser \dontrun{ in_html(html, css=c(css0, css1)) } ## Change CSS by remixing colors, and apply to exact same HTML mix <- matrix( c( 0, 1, 0, # red output is green input 0, 0, 1, # green output is blue input 1, 0, 0 # blue output is red input ), nrow=3, byrow=TRUE ) css2 <- make_styles(classes, rgb.mix=mix) ## Display in browser: same HTML but colors changed by CSS \dontrun{ in_html(html, css=c(css0, css2)) } } \seealso{ Other HTML functions: \code{\link{html_esc}()}, \code{\link{in_html}()}, \code{\link{to_html}()} } \concept{HTML functions} fansi/man/strip_ctl.Rd0000644000176200001440000000554114213626164014431 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/sgr.R \name{strip_ctl} \alias{strip_ctl} \title{Strip Control Sequences} \usage{ strip_ctl(x, ctl = "all", warn = getOption("fansi.warn", TRUE), strip) } \arguments{ \item{x}{a character vector or object that can be coerced to such.} \item{ctl}{character, any combination of the following values (see details): \itemize{ \item "nl": strip newlines. \item "c0": strip all other "C0" control characters (i.e. x01-x1f, x7F), except for newlines and the actual ESC character. \item "sgr": strip ANSI CSI SGR sequences. \item "csi": strip all non-SGR csi sequences. \item "esc": strip all other escape sequences. \item "all": all of the above, except when used in combination with any of the above, in which case it means "all but" (see details). }} \item{warn}{TRUE (default) or FALSE, whether to warn when potentially problematic \emph{Control Sequences} are encountered. These could cause the assumptions \code{fansi} makes about how strings are rendered on your display to be incorrect, for example by moving the cursor (see \code{\link[=fansi]{?fansi}}). At most one warning will be issued per element in each input vector. Will also warn about some badly encoded UTF-8 strings, but a lack of UTF-8 warnings is not a guarantee of correct encoding (use \code{\link{validUTF8}} for that).} \item{strip}{character, deprecated in favor of \code{ctl}.} } \value{ character vector of same length as x with ANSI escape sequences stripped } \description{ Removes \emph{Control Sequences} from strings. By default it will strip all known \emph{Control Sequences}, including CSI/OSC sequences, two character sequences starting with ESC, and all C0 control characters, including newlines. You can fine tune this behavior with the \code{ctl} parameter. } \details{ The \code{ctl} value contains the names of \strong{non-overlapping} subsets of the known \emph{Control Sequences} (e.g. "csi" does not contain "sgr", and "c0" does not contain newlines). The one exception is "all" which means strip every known sequence. If you combine "all" with any other options then everything \strong{but} those options will be stripped. } \note{ Non-ASCII strings are converted to and returned in UTF-8 encoding. } \examples{ string <- "hello\033k\033[45p world\n\033[31mgoodbye\a moon" strip_ctl(string) strip_ctl(string, c("nl", "c0", "sgr", "csi", "esc")) # equivalently strip_ctl(string, "sgr") strip_ctl(string, c("c0", "esc")) ## everything but C0 controls, we need to specify "nl" ## in addition to "c0" since "nl" is not part of "c0" ## as far as the `strip` argument is concerned strip_ctl(string, c("all", "nl", "c0")) } \seealso{ \code{\link[=fansi]{?fansi}} for details on how \emph{Control Sequences} are interpreted, particularly if you are getting unexpected results, \code{\link{unhandled_ctl}} for detecting bad control sequences. } fansi/man/sgr_256.Rd0000644000176200001440000000117414213626056013613 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/misc.R \name{sgr_256} \alias{sgr_256} \title{Show 8 Bit CSI SGR Colors} \usage{ sgr_256() } \value{ character vector with SGR codes with background color set as themselves. } \description{ Generates text with each 8 bit SGR code (e.g. the "###" in "38;5;###") with the background colored by itself, and the foreground in a contrasting color and interesting color (we sacrifice some contrast for interest as this is intended for demo rather than reference purposes). } \examples{ writeLines(sgr_256()) } \seealso{ \code{\link[=make_styles]{make_styles()}}. } fansi/man/html_code_block.Rd0000644000176200001440000000170614160423174015532 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/misc.R \name{html_code_block} \alias{html_code_block} \title{Format Character Vector for Display as Code in HTML} \usage{ html_code_block(x, class = "fansi-output") } \arguments{ \item{x}{character vector} \item{class}{character vectors of classes to apply to the PRE HTML tags. It is the users responsibility to ensure the classes are valid CSS class names.} } \value{ character(1L) \code{x}, with
 and  HTML tags
applied and collapsed into one line with newlines as the line separator.
}
\description{
This simulates what \code{rmarkdown} / \code{knitr} do to the output of an R markdown
chunk, at least as of \code{rmarkdown} 1.10.  It is useful when we override the
\code{knitr} output hooks so that we can have a result that still looks as if it
was run by \code{knitr}.
}
\examples{
html_code_block(c("hello world"))
html_code_block(c("hello world"), class="pretty")
}
fansi/man/fansi_unicode_version.Rd0000644000176200001440000000064615106721052016774 0ustar  liggesusers% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/misc.R
\name{fansi_unicode_version}
\alias{fansi_unicode_version}
\title{Report Unicode Database Version In-use}
\usage{
fansi_unicode_version()
}
\value{
a string of the Unicode version.
}
\description{
Corresponds to the database used to generate character display width look-up
tables by \code{fansi}.
}
\examples{
fansi_unicode_version()
}
fansi/man/strtrim_ctl.Rd0000644000176200001440000001343015106721052014762 0ustar  liggesusers% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/strtrim.R
\name{strtrim_ctl}
\alias{strtrim_ctl}
\alias{strtrim2_ctl}
\title{Control Sequence Aware Version of strtrim}
\usage{
strtrim_ctl(
  x,
  width,
  warn = getOption("fansi.warn", TRUE),
  ctl = "all",
  normalize = getOption("fansi.normalize", FALSE),
  carry = getOption("fansi.carry", FALSE),
  terminate = getOption("fansi.terminate", TRUE)
)

strtrim2_ctl(
  x,
  width,
  warn = getOption("fansi.warn", TRUE),
  tabs.as.spaces = getOption("fansi.tabs.as.spaces", FALSE),
  tab.stops = getOption("fansi.tab.stops", 8L),
  ctl = "all",
  normalize = getOption("fansi.normalize", FALSE),
  carry = getOption("fansi.carry", FALSE),
  terminate = getOption("fansi.terminate", TRUE)
)
}
\arguments{
\item{x}{a character vector, or an object which can be coerced to a
    character vector by \code{\link[base]{as.character}}.}

\item{width}{positive integer values: recycled to the length of \code{x}.}

\item{warn}{TRUE (default) or FALSE, whether to warn when potentially
problematic \emph{Control Sequences} are encountered.  These could cause the
assumptions \code{fansi} makes about how strings are rendered on your display
to be incorrect, for example by moving the cursor (see \code{\link[=fansi]{?fansi}}).
At most one warning will be issued per element in each input vector.  Will
also warn about some badly encoded UTF-8 strings, but a lack of UTF-8
warnings is not a guarantee of correct encoding (use \code{\link{validUTF8}} for
that).}

\item{ctl}{character, which \emph{Control Sequences} should be treated
specially.  Special treatment is context dependent, and may include
detecting them and/or computing their display/character width as zero.  For
the SGR subset of the ANSI CSI sequences, and OSC hyperlinks, \code{fansi}
will also parse, interpret, and reapply the sequences as needed.  You can
modify whether a \emph{Control Sequence} is treated specially with the \code{ctl}
parameter.
\itemize{
\item "nl": newlines.
\item "c0": all other "C0" control characters (i.e. 0x01-0x1f, 0x7F), except
for newlines and the actual ESC (0x1B) character.
\item "sgr": ANSI CSI SGR sequences.
\item "csi": all non-SGR ANSI CSI sequences.
\item "url": OSC hyperlinks
\item "osc": all non-OSC-hyperlink OSC sequences.
\item "esc": all other escape sequences.
\item "all": all of the above, except when used in combination with any of the
above, in which case it means "all but".
}}

\item{normalize}{TRUE or FALSE (default) whether SGR sequence should be
normalized out such that there is one distinct sequence for each SGR code.
normalized strings will occupy more space (e.g. "\033[31;42m" becomes
"\033[31m\033[42m"), but will work better with code that assumes each SGR
code will be in its own escape as \code{crayon} does.}

\item{carry}{TRUE, FALSE (default), or a scalar string, controls whether to
interpret the character vector as a "single document" (TRUE or string) or
as independent elements (FALSE).  In "single document" mode, active state
at the end of an input element is considered active at the beginning of the
next vector element, simulating what happens with a document with active
state at the end of a line.  If FALSE each vector element is interpreted as
if there were no active state when it begins.  If character, then the
active state at the end of the \code{carry} string is carried into the first
element of \code{x} (see "Replacement Functions" for differences there).  The
carried state is injected in the interstice between an imaginary zeroeth
character and the first character of a vector element.  See the "Position
Semantics" section of \code{\link{substr_ctl}} and the "State Interactions" section
of \code{\link[=fansi]{?fansi}} for details.  Except for \code{\link{strwrap_ctl}} where \code{NA} is
treated as the string \code{"NA"}, \code{carry} will cause \code{NA}s in inputs to
propagate through the remaining vector elements.}

\item{terminate}{TRUE (default) or FALSE whether substrings should have
active state closed to avoid it bleeding into other strings they may be
prepended onto.  This does not stop state from carrying if \code{carry = TRUE}.
See the "State Interactions" section of \code{\link[=fansi]{?fansi}} for details.}

\item{tabs.as.spaces}{FALSE (default) or TRUE, whether to convert tabs to
spaces.  This can only be set to TRUE if \code{strip.spaces} is FALSE.}

\item{tab.stops}{integer(1:n) indicating position of tab stops to use
when converting tabs to spaces.  If there are more tabs in a line than
defined tab stops the last tab stop is re-used.  For the purposes of
applying tab stops, each input line is considered a line and the character
count begins from the beginning of the input line.}
}
\value{
Like \code{\link[base:strtrim]{base::strtrim}}, except that \emph{Control Sequences} are treated
as zero width.
}
\description{
A drop in replacement for \code{\link[base:strtrim]{base::strtrim}}, with the difference that all
C0 control characters such as newlines, carriage returns, etc., are always
treated as zero width, whereas in base it may vary with platform / R version.
}
\details{
\code{strtrim2_ctl} adds the option of converting tabs to spaces before trimming.
This is the only difference between \code{strtrim_ctl} and \code{strtrim2_ctl}.
}
\note{
Non-ASCII strings are converted to and returned in UTF-8 encoding.
Width calculations will not work properly in R < 3.2.2.
}
\examples{
strtrim_ctl("\033[42mHello world\033[m", 6)
}
\seealso{
\code{\link[=fansi]{?fansi}} for details on how \emph{Control Sequences} are
interpreted, particularly if you are getting unexpected results,
\code{\link{normalize_state}} for more details on what the \code{normalize} parameter does,
\code{\link{state_at_end}} to compute active state at the end of strings,
\code{\link{close_state}} to compute the sequence required to close active state.
}
fansi/man/substr_ctl.Rd0000644000176200001440000004140215107200100014563 0ustar  liggesusers% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/substr2.R
\name{substr_ctl}
\alias{substr_ctl}
\alias{substr2_ctl}
\alias{substr_ctl<-}
\alias{substr2_ctl<-}
\title{Control Sequence Aware Version of substr}
\usage{
substr_ctl(
  x,
  start,
  stop,
  warn = getOption("fansi.warn", TRUE),
  term.cap = getOption("fansi.term.cap", dflt_term_cap()),
  ctl = "all",
  normalize = getOption("fansi.normalize", FALSE),
  carry = getOption("fansi.carry", FALSE),
  terminate = getOption("fansi.terminate", TRUE)
)

substr2_ctl(
  x,
  start,
  stop,
  type = "chars",
  round = "start",
  tabs.as.spaces = getOption("fansi.tabs.as.spaces", FALSE),
  tab.stops = getOption("fansi.tab.stops", 8L),
  warn = getOption("fansi.warn", TRUE),
  term.cap = getOption("fansi.term.cap", dflt_term_cap()),
  ctl = "all",
  normalize = getOption("fansi.normalize", FALSE),
  carry = getOption("fansi.carry", FALSE),
  terminate = getOption("fansi.terminate", TRUE)
)

substr_ctl(
  x,
  start,
  stop,
  warn = getOption("fansi.warn", TRUE),
  term.cap = getOption("fansi.term.cap", dflt_term_cap()),
  ctl = "all",
  normalize = getOption("fansi.normalize", FALSE),
  carry = getOption("fansi.carry", FALSE),
  terminate = getOption("fansi.terminate", TRUE)
) <- value

substr2_ctl(
  x,
  start,
  stop,
  type = "chars",
  round = "start",
  tabs.as.spaces = getOption("fansi.tabs.as.spaces", FALSE),
  tab.stops = getOption("fansi.tab.stops", 8L),
  warn = getOption("fansi.warn", TRUE),
  term.cap = getOption("fansi.term.cap", dflt_term_cap()),
  ctl = "all",
  normalize = getOption("fansi.normalize", FALSE),
  carry = getOption("fansi.carry", FALSE),
  terminate = getOption("fansi.terminate", TRUE)
) <- value
}
\arguments{
\item{x}{a character vector or object that can be coerced to such.}

\item{start}{integer.  The first element to be extracted or replaced.}

\item{stop}{integer.  The first element to be extracted or replaced.}

\item{warn}{TRUE (default) or FALSE, whether to warn when potentially
problematic \emph{Control Sequences} are encountered.  These could cause the
assumptions \code{fansi} makes about how strings are rendered on your display
to be incorrect, for example by moving the cursor (see \code{\link[=fansi]{?fansi}}).
At most one warning will be issued per element in each input vector.  Will
also warn about some badly encoded UTF-8 strings, but a lack of UTF-8
warnings is not a guarantee of correct encoding (use \code{\link{validUTF8}} for
that).}

\item{term.cap}{character a vector of the capabilities of the terminal, can
be any combination of "bright" (SGR codes 90-97, 100-107), "256" (SGR codes
starting with "38;5" or "48;5"), "truecolor" (SGR codes starting with
"38;2" or "48;2"), and "all". "all" behaves as it does for the \code{ctl}
parameter: "all" combined with any other value means all terminal
capabilities except that one.  \code{fansi} will warn if it encounters SGR codes
that exceed the terminal capabilities specified (see \code{\link{term_cap_test}}
for details).  In versions prior to 1.0, \code{fansi} would also skip exceeding
SGRs entirely instead of interpreting them.  You may add the string "old"
to any otherwise valid \code{term.cap} spec to restore the pre 1.0 behavior.
"old" will not interact with "all" the way other valid values for this
parameter do.}

\item{ctl}{character, which \emph{Control Sequences} should be treated
specially.  Special treatment is context dependent, and may include
detecting them and/or computing their display/character width as zero.  For
the SGR subset of the ANSI CSI sequences, and OSC hyperlinks, \code{fansi}
will also parse, interpret, and reapply the sequences as needed.  You can
modify whether a \emph{Control Sequence} is treated specially with the \code{ctl}
parameter.
\itemize{
\item "nl": newlines.
\item "c0": all other "C0" control characters (i.e. 0x01-0x1f, 0x7F), except
for newlines and the actual ESC (0x1B) character.
\item "sgr": ANSI CSI SGR sequences.
\item "csi": all non-SGR ANSI CSI sequences.
\item "url": OSC hyperlinks
\item "osc": all non-OSC-hyperlink OSC sequences.
\item "esc": all other escape sequences.
\item "all": all of the above, except when used in combination with any of the
above, in which case it means "all but".
}}

\item{normalize}{TRUE or FALSE (default) whether SGR sequence should be
normalized out such that there is one distinct sequence for each SGR code.
normalized strings will occupy more space (e.g. "\033[31;42m" becomes
"\033[31m\033[42m"), but will work better with code that assumes each SGR
code will be in its own escape as \code{crayon} does.}

\item{carry}{TRUE, FALSE (default), or a scalar string, controls whether to
interpret the character vector as a "single document" (TRUE or string) or
as independent elements (FALSE).  In "single document" mode, active state
at the end of an input element is considered active at the beginning of the
next vector element, simulating what happens with a document with active
state at the end of a line.  If FALSE each vector element is interpreted as
if there were no active state when it begins.  If character, then the
active state at the end of the \code{carry} string is carried into the first
element of \code{x} (see "Replacement Functions" for differences there).  The
carried state is injected in the interstice between an imaginary zeroeth
character and the first character of a vector element.  See the "Position
Semantics" section of \code{\link{substr_ctl}} and the "State Interactions" section
of \code{\link[=fansi]{?fansi}} for details.  Except for \code{\link{strwrap_ctl}} where \code{NA} is
treated as the string \code{"NA"}, \code{carry} will cause \code{NA}s in inputs to
propagate through the remaining vector elements.}

\item{terminate}{TRUE (default) or FALSE whether substrings should have
active state closed to avoid it bleeding into other strings they may be
prepended onto.  This does not stop state from carrying if \code{carry = TRUE}.
See the "State Interactions" section of \code{\link[=fansi]{?fansi}} for details.}

\item{type}{character(1L) partial matching
\code{c("chars", "width", "graphemes")}.  See \code{\link[base:nchar]{?nchar}}, as well
as the corresponding documentation sections on this page.}

\item{round}{character(1L) partial matching
\code{c("start", "stop", "both", "neither")}, controls how to resolve
ambiguities when a \code{start} or \code{stop} value in "width" \code{type} mode falls
within a wide display character.  See details.}

\item{tabs.as.spaces}{FALSE (default) or TRUE, whether to convert tabs to
spaces (and supress tab related warnings).  This can only be set to TRUE if
\code{strip.spaces} is FALSE.}

\item{tab.stops}{integer(1:n) indicating position of tab stops to use
when converting tabs to spaces.  If there are more tabs in a line than
defined tab stops the last tab stop is re-used.  For the purposes of
applying tab stops, each input line is considered a line and the character
count begins from the beginning of the input line.}

\item{value}{a character vector or object that can be coerced to such.}
}
\value{
A character vector of the same length and with the same attributes as
x (after possible coercion and re-encoding to UTF-8).
}
\description{
\code{substr_ctl} is a drop-in replacement for \code{substr}.  Performance is
slightly slower than \code{substr}, and more so for \code{type = 'width'}.  Special
\emph{Control Sequences} will be included in the substrings to reflect their format
when as it was when part of the source string.  \code{substr2_ctl} adds the
ability to extract substrings based on grapheme count or display width in
addition to the normal character width, as well as several other options.
}
\note{
Non-ASCII strings are converted to and returned in UTF-8 encoding.
Width calculations will not work properly in R < 3.2.2.

If \code{stop} < \code{start}, the return value is always an empty string.
}
\section{Control and Special Sequences}{


\emph{Control Sequences} are non-printing characters or sequences of characters.
\emph{Special Sequences} are a subset of the \emph{Control Sequences}, and include CSI
SGR sequences which can be used to change rendered appearance of text, and
OSC hyperlinks.  See \code{\link{fansi}} for details.
}

\section{Position Semantics}{


When computing substrings, \emph{Normal} (non-control) characters are considered
to occupy positions in strings, whereas \emph{Control Sequences} occupy the
interstices between them.  The string:

\if{html}{\out{
}}\preformatted{"hello-\\033[31mworld\\033[m!" }\if{html}{\out{
}} is interpreted as: \if{html}{\out{
}}\preformatted{ 1 1 1 1 2 3 4 5 6 7 8 9 0 1 2 h e l l o -|w o r l d|! ^ ^ \\033[31m \\033[m }\if{html}{\out{
}} \code{start} and \code{stop} reference character positions so they never explicitly select for the interstitial \emph{Control Sequences}. The latter are implicitly selected if they appear in interstices after the first character and before the last. Additionally, because \emph{Special Sequences} (CSI SGR and OSC hyperlinks) affect all subsequent characters in a string, any active \emph{Special Sequence}, whether opened just before a character or much before, will be reflected in the state \code{fansi} prepends to the beginning of each substring. It is possible to select \emph{Control Sequences} at the end of a string by specifying \code{stop} values past the end of the string, although for \emph{Special Sequences} this only produces visible results if \code{terminate} is set to \code{FALSE}. Similarly, it is possible to select \emph{Control Sequences} preceding the beginning of a string by specifying \code{start} values less than one, although as noted earlier this is unnecessary for \emph{Special Sequences} as those are output by \code{fansi} before each substring. Because exact substrings on anything other than character count cannot be guaranteed (e.g. as a result of multi-byte encodings, or double display-width characters) \code{substr2_ctl} must make assumptions on how to resolve provided \code{start}/\code{stop} values that are infeasible and does so via the \code{round} parameter. If we use "start" as the \code{round} value, then any time the \code{start} value corresponds to the middle of a multi-byte or a wide character, then that character is included in the substring, while any similar partially included character via the \code{stop} is left out. The converse is true if we use "stop" as the \code{round} value. "neither" would cause all partial characters to be dropped irrespective whether they correspond to \code{start} or \code{stop}, and "both" could cause all of them to be included. See examples. A number of \emph{Normal} characters such as combining diacritic marks have reported width of zero. These are typically displayed overlaid on top of the preceding glyph, as in the case of \code{"e\\u301"} forming "e" with an acute accent. Unlike \emph{Control Sequences}, which also have reported width of zero, \code{fansi} groups zero-width \emph{Normal} characters with the last preceding non-zero width \emph{Normal} character. This is incorrect for some rare zero-width \emph{Normal} characters such as prepending marks (see "Output Stability" and "Graphemes"). } \section{Output Stability}{ Several factors could affect the exact output produced by \code{fansi} functions across versions of \code{fansi}, \code{R}, and/or across systems. \strong{In general it is best not to rely on exact \code{fansi} output, e.g. by embedding it in tests}. Width and grapheme calculations depend on Unicode database version (see \code{\link{fansi_unicode_version}}, and grapheme processing logic among other things (see "Graphemes"). Individual character width are intended to match R4.5.1 definitions in an English locale, except for differences introduced by Unicode Database Version updates and grapheme processing. How a particular display format is encoded in \emph{Control Sequences} is not guaranteed to be stable across \code{fansi} versions. Additionally, which \emph{Special Sequences} are re-encoded vs transcribed untouched may change. In general we will strive to keep the rendered appearance stable. To maximize the odds of getting stable output set \code{normalize_state} to \code{TRUE} and \code{type} to \code{"chars"} in functions that allow it, and set \code{term.cap} to a specific set of capabilities. } \section{Replacement Functions}{ Semantics for replacement functions have the additional requirement that the result appear as if it is the input modified in place between the positions designated by \code{start} and \code{stop}. \code{terminate} only affects the boundaries between the original substring and the spliced one, \code{normalize} only affects the same boundaries, and \code{tabs.as.spaces} only affects \code{value}, and \code{x} must be ASCII only or marked "UTF-8". \code{terminate = FALSE} only makes sense in replacement mode if only one of \code{x} or \code{value} contains \emph{Control Sequences}. \code{fansi} will not account for any interactions of state in \code{x} and \code{value}. The \code{carry} parameter causes state to carry within the original string and the replacement values independently, as if they were columns of text cut from different pages and pasted together. String values for \code{carry} are disallowed in replacement mode as it is ambiguous which of \code{x} or \code{value} they would modify (see examples). When in \code{type = 'width'} mode, it is only guaranteed that the result will be no wider than the original \code{x}. Narrower strings may result if a mixture of narrow and wide graphemes cannot be replaced exactly with the same \code{width} value, possibly because the provided \code{start} and \code{stop} values (or the implicit ones generated for \code{value}) do not align with grapheme boundaries. } \section{Graphemes}{ \code{fansi} approximates grapheme widths and counts by using heuristics for grapheme breaks that work for most common graphemes, including emoji combining sequences. The heuristic is known to work incorrectly with invalid combining sequences, prepending marks, and sequence interruptors. The \href{https://cran.r-project.org/package=utf8}{\code{utf8}} package provides a conforming grapheme parsing implementation. } \section{Bidirectional Text}{ \code{fansi} is unaware of text directionality and operates as if all strings are left to right (LTR). Using \code{fansi} function with strings that contain mixed direction scripts (i.e. both LTR and RTL) may produce undesirable results. } \examples{ substr_ctl("\033[42mhello\033[m world", 1, 9) substr_ctl("\033[42mhello\033[m world", 3, 9) ## Positions 2 and 4 are in the middle of the full width W (\uFF37) for ## the `start` and `stop` positions respectively. Use `round` ## to control result: x <- "\uFF37n\uFF37" x substr2_ctl(x, 2, 4, type='width', round='start') substr2_ctl(x, 2, 4, type='width', round='stop') substr2_ctl(x, 2, 4, type='width', round='neither') substr2_ctl(x, 2, 4, type='width', round='both') ## We can specify which escapes are considered special: substr_ctl("\033[31mhello\tworld", 1, 6, ctl='sgr', warn=FALSE) substr_ctl("\033[31mhello\tworld", 1, 6, ctl=c('all', 'c0'), warn=FALSE) ## `carry` allows SGR to carry from one element to the next substr_ctl(c("\033[33mhello", "world"), 1, 3) substr_ctl(c("\033[33mhello", "world"), 1, 3, carry=TRUE) substr_ctl(c("\033[33mhello", "world"), 1, 3, carry="\033[44m") ## We can omit the termination bleed <- substr_ctl(c("\033[41mhello", "world"), 1, 3, terminate=FALSE) writeLines(bleed) # Style will bleed out of string end <- "\033[0m\n" writeLines(end) # Stanch bleeding ## Trailing sequences omitted unless `stop` past end. substr_ctl("ABC\033[42m", 1, 3, terminate=FALSE) substr_ctl("ABC\033[42m", 1, 4, terminate=FALSE) ## Replacement functions x0<- x1 <- x2 <- x3 <- c("\033[42mABC", "\033[34mDEF") substr_ctl(x1, 2, 2) <- "_" substr_ctl(x2, 2, 2) <- "\033[m_" substr_ctl(x3, 2, 2) <- "\033[45m_" writeLines(c(x0, end, x1, end, x2, end, x3, end)) ## With `carry = TRUE` strings look like original x0<- x1 <- x2 <- x3 <- c("\033[42mABC", "\033[34mDEF") substr_ctl(x0, 2, 2, carry=TRUE) <- "_" substr_ctl(x1, 2, 2, carry=TRUE) <- "\033[m_" substr_ctl(x2, 2, 2, carry=TRUE) <- "\033[45m_" writeLines(c(x0, end, x1, end, x2, end, x3, end)) ## Work-around to specify carry strings in replacement mode x <- c("ABC", "DEF") val <- "#" x2 <- c("\033[42m", x) val2 <- c("\033[45m", rep_len(val, length(x))) substr_ctl(x2, 2, 2, carry=TRUE) <- val2 (x <- x[-1]) } \seealso{ \code{\link[=fansi]{?fansi}} for details on how \emph{Control Sequences} are interpreted, particularly if you are getting unexpected results, \code{\link{normalize_state}} for more details on what the \code{normalize} parameter does, \code{\link{state_at_end}} to compute active state at the end of strings, \code{\link{close_state}} to compute the sequence required to close active state. } fansi/man/strsplit_sgr.Rd0000644000176200001440000001152414213626164015163 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/strsplit.R \name{strsplit_sgr} \alias{strsplit_sgr} \title{Check for Presence of Control Sequences} \usage{ strsplit_sgr( x, split, fixed = FALSE, perl = FALSE, useBytes = FALSE, warn = getOption("fansi.warn", TRUE), term.cap = getOption("fansi.term.cap", dflt_term_cap()), normalize = getOption("fansi.normalize", FALSE), carry = getOption("fansi.carry", FALSE), terminate = getOption("fansi.terminate", TRUE) ) } \arguments{ \item{x}{a character vector, or, unlike \code{\link[base:strsplit]{base::strsplit}} an object that can be coerced to character.} \item{split}{ character vector (or object which can be coerced to such) containing \link[base]{regular expression}(s) (unless \code{fixed = TRUE}) to use for splitting. If empty matches occur, in particular if \code{split} has length 0, \code{x} is split into single characters. If \code{split} has length greater than 1, it is re-cycled along \code{x}. } \item{fixed}{ logical. If \code{TRUE} match \code{split} exactly, otherwise use regular expressions. Has priority over \code{perl}. } \item{perl}{logical. Should Perl-compatible regexps be used?} \item{useBytes}{logical. If \code{TRUE} the matching is done byte-by-byte rather than character-by-character, and inputs with marked encodings are not converted. This is forced (with a warning) if any input is found which is marked as \code{"bytes"} (see \code{\link[base]{Encoding}}).} \item{warn}{TRUE (default) or FALSE, whether to warn when potentially problematic \emph{Control Sequences} are encountered. These could cause the assumptions \code{fansi} makes about how strings are rendered on your display to be incorrect, for example by moving the cursor (see \code{\link[=fansi]{?fansi}}). At most one warning will be issued per element in each input vector. Will also warn about some badly encoded UTF-8 strings, but a lack of UTF-8 warnings is not a guarantee of correct encoding (use \code{\link{validUTF8}} for that).} \item{term.cap}{character a vector of the capabilities of the terminal, can be any combination of "bright" (SGR codes 90-97, 100-107), "256" (SGR codes starting with "38;5" or "48;5"), "truecolor" (SGR codes starting with "38;2" or "48;2"), and "all". "all" behaves as it does for the \code{ctl} parameter: "all" combined with any other value means all terminal capabilities except that one. \code{fansi} will warn if it encounters SGR codes that exceed the terminal capabilities specified (see \code{\link{term_cap_test}} for details). In versions prior to 1.0, \code{fansi} would also skip exceeding SGRs entirely instead of interpreting them. You may add the string "old" to any otherwise valid \code{term.cap} spec to restore the pre 1.0 behavior. "old" will not interact with "all" the way other valid values for this parameter do.} \item{normalize}{TRUE or FALSE (default) whether SGR sequence should be normalized out such that there is one distinct sequence for each SGR code. normalized strings will occupy more space (e.g. "\033[31;42m" becomes "\033[31m\033[42m"), but will work better with code that assumes each SGR code will be in its own escape as \code{crayon} does.} \item{carry}{TRUE, FALSE (default), or a scalar string, controls whether to interpret the character vector as a "single document" (TRUE or string) or as independent elements (FALSE). In "single document" mode, active state at the end of an input element is considered active at the beginning of the next vector element, simulating what happens with a document with active state at the end of a line. If FALSE each vector element is interpreted as if there were no active state when it begins. If character, then the active state at the end of the \code{carry} string is carried into the first element of \code{x} (see "Replacement Functions" for differences there). The carried state is injected in the interstice between an imaginary zeroeth character and the first character of a vector element. See the "Position Semantics" section of \code{\link{substr_ctl}} and the "State Interactions" section of \code{\link[=fansi]{?fansi}} for details. Except for \code{\link{strwrap_ctl}} where \code{NA} is treated as the string \code{"NA"}, \code{carry} will cause \code{NA}s in inputs to propagate through the remaining vector elements.} \item{terminate}{TRUE (default) or FALSE whether substrings should have active state closed to avoid it bleeding into other strings they may be prepended onto. This does not stop state from carrying if \code{carry = TRUE}. See the "State Interactions" section of \code{\link[=fansi]{?fansi}} for details.} } \value{ Like \code{\link[base:strsplit]{base::strsplit}}, with \emph{Control Sequences} excluded. } \description{ This function is deprecated in favor of the \code{\link{strsplit_ctl}}. } \keyword{internal} fansi/man/state_at_end.Rd0000644000176200001440000001373415107200100015040 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/sgr.R \name{state_at_end} \alias{state_at_end} \alias{close_state} \title{Utilities for Managing CSI and OSC State In Strings} \usage{ state_at_end( x, warn = getOption("fansi.warn", TRUE), term.cap = getOption("fansi.term.cap", dflt_term_cap()), normalize = getOption("fansi.normalize", FALSE), carry = getOption("fansi.carry", FALSE) ) close_state( x, warn = getOption("fansi.warn", TRUE), normalize = getOption("fansi.normalize", FALSE) ) } \arguments{ \item{x}{a character vector or object that can be coerced to such.} \item{warn}{TRUE (default) or FALSE, whether to warn when potentially problematic \emph{Control Sequences} are encountered. These could cause the assumptions \code{fansi} makes about how strings are rendered on your display to be incorrect, for example by moving the cursor (see \code{\link[=fansi]{?fansi}}). At most one warning will be issued per element in each input vector. Will also warn about some badly encoded UTF-8 strings, but a lack of UTF-8 warnings is not a guarantee of correct encoding (use \code{\link{validUTF8}} for that).} \item{term.cap}{character a vector of the capabilities of the terminal, can be any combination of "bright" (SGR codes 90-97, 100-107), "256" (SGR codes starting with "38;5" or "48;5"), "truecolor" (SGR codes starting with "38;2" or "48;2"), and "all". "all" behaves as it does for the \code{ctl} parameter: "all" combined with any other value means all terminal capabilities except that one. \code{fansi} will warn if it encounters SGR codes that exceed the terminal capabilities specified (see \code{\link{term_cap_test}} for details). In versions prior to 1.0, \code{fansi} would also skip exceeding SGRs entirely instead of interpreting them. You may add the string "old" to any otherwise valid \code{term.cap} spec to restore the pre 1.0 behavior. "old" will not interact with "all" the way other valid values for this parameter do.} \item{normalize}{TRUE or FALSE (default) whether SGR sequence should be normalized out such that there is one distinct sequence for each SGR code. normalized strings will occupy more space (e.g. "\033[31;42m" becomes "\033[31m\033[42m"), but will work better with code that assumes each SGR code will be in its own escape as \code{crayon} does.} \item{carry}{TRUE, FALSE (default), or a scalar string, controls whether to interpret the character vector as a "single document" (TRUE or string) or as independent elements (FALSE). In "single document" mode, active state at the end of an input element is considered active at the beginning of the next vector element, simulating what happens with a document with active state at the end of a line. If FALSE each vector element is interpreted as if there were no active state when it begins. If character, then the active state at the end of the \code{carry} string is carried into the first element of \code{x} (see "Replacement Functions" for differences there). The carried state is injected in the interstice between an imaginary zeroeth character and the first character of a vector element. See the "Position Semantics" section of \code{\link{substr_ctl}} and the "State Interactions" section of \code{\link[=fansi]{?fansi}} for details. Except for \code{\link{strwrap_ctl}} where \code{NA} is treated as the string \code{"NA"}, \code{carry} will cause \code{NA}s in inputs to propagate through the remaining vector elements.} } \value{ character vector same length as \code{x}. } \description{ \code{state_at_end} reads through strings computing the accumulated SGR and OSC hyperlinks, and outputs the active state at the end of them. \code{close_state} produces the sequence that closes any SGR active and OSC hyperlinks at the end of each input string. If \code{normalize = FALSE} (default), it will emit the reset code "ESC[0m" if any SGR is present. It is more interesting for closing SGRs if \code{normalize = TRUE}. Unlike \code{state_at_end} and other functions \code{close_state} has no concept of \code{carry}: it will only emit closing sequences for states explicitly active at the end of a string. } \section{Control and Special Sequences}{ \emph{Control Sequences} are non-printing characters or sequences of characters. \emph{Special Sequences} are a subset of the \emph{Control Sequences}, and include CSI SGR sequences which can be used to change rendered appearance of text, and OSC hyperlinks. See \code{\link{fansi}} for details. } \section{Output Stability}{ Several factors could affect the exact output produced by \code{fansi} functions across versions of \code{fansi}, \code{R}, and/or across systems. \strong{In general it is best not to rely on exact \code{fansi} output, e.g. by embedding it in tests}. Width and grapheme calculations depend on Unicode database version (see \code{\link{fansi_unicode_version}}, and grapheme processing logic among other things (see "Graphemes"). Individual character width are intended to match R4.5.1 definitions in an English locale, except for differences introduced by Unicode Database Version updates and grapheme processing. How a particular display format is encoded in \emph{Control Sequences} is not guaranteed to be stable across \code{fansi} versions. Additionally, which \emph{Special Sequences} are re-encoded vs transcribed untouched may change. In general we will strive to keep the rendered appearance stable. To maximize the odds of getting stable output set \code{normalize_state} to \code{TRUE} and \code{type} to \code{"chars"} in functions that allow it, and set \code{term.cap} to a specific set of capabilities. } \examples{ x <- c("\033[44mhello", "\033[33mworld") state_at_end(x) state_at_end(x, carry=TRUE) (close <- close_state(state_at_end(x, carry=TRUE), normalize=TRUE)) writeLines(paste0(x, close, " no style")) } \seealso{ \code{\link[=fansi]{?fansi}} for details on how \emph{Control Sequences} are interpreted, particularly if you are getting unexpected results, \code{\link{unhandled_ctl}} for detecting bad control sequences. } fansi/man/strsplit_ctl.Rd0000644000176200001440000002164315107200100015132 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/strsplit.R \name{strsplit_ctl} \alias{strsplit_ctl} \title{Control Sequence Aware Version of strsplit} \usage{ strsplit_ctl( x, split, fixed = FALSE, perl = FALSE, useBytes = FALSE, warn = getOption("fansi.warn", TRUE), term.cap = getOption("fansi.term.cap", dflt_term_cap()), ctl = "all", normalize = getOption("fansi.normalize", FALSE), carry = getOption("fansi.carry", FALSE), terminate = getOption("fansi.terminate", TRUE) ) } \arguments{ \item{x}{a character vector, or, unlike \code{\link[base:strsplit]{base::strsplit}} an object that can be coerced to character.} \item{split}{ character vector (or object which can be coerced to such) containing \link[base]{regular expression}(s) (unless \code{fixed = TRUE}) to use for splitting. If empty matches occur, in particular if \code{split} has length 0, \code{x} is split into single characters. If \code{split} has length greater than 1, it is re-cycled along \code{x}. } \item{fixed}{ logical. If \code{TRUE} match \code{split} exactly, otherwise use regular expressions. Has priority over \code{perl}. } \item{perl}{logical. Should Perl-compatible regexps be used?} \item{useBytes}{logical. If \code{TRUE} the matching is done byte-by-byte rather than character-by-character, and inputs with marked encodings are not converted. This is forced (with a warning) if any input is found which is marked as \code{"bytes"} (see \code{\link[base]{Encoding}}).} \item{warn}{TRUE (default) or FALSE, whether to warn when potentially problematic \emph{Control Sequences} are encountered. These could cause the assumptions \code{fansi} makes about how strings are rendered on your display to be incorrect, for example by moving the cursor (see \code{\link[=fansi]{?fansi}}). At most one warning will be issued per element in each input vector. Will also warn about some badly encoded UTF-8 strings, but a lack of UTF-8 warnings is not a guarantee of correct encoding (use \code{\link{validUTF8}} for that).} \item{term.cap}{character a vector of the capabilities of the terminal, can be any combination of "bright" (SGR codes 90-97, 100-107), "256" (SGR codes starting with "38;5" or "48;5"), "truecolor" (SGR codes starting with "38;2" or "48;2"), and "all". "all" behaves as it does for the \code{ctl} parameter: "all" combined with any other value means all terminal capabilities except that one. \code{fansi} will warn if it encounters SGR codes that exceed the terminal capabilities specified (see \code{\link{term_cap_test}} for details). In versions prior to 1.0, \code{fansi} would also skip exceeding SGRs entirely instead of interpreting them. You may add the string "old" to any otherwise valid \code{term.cap} spec to restore the pre 1.0 behavior. "old" will not interact with "all" the way other valid values for this parameter do.} \item{ctl}{character, which \emph{Control Sequences} should be treated specially. Special treatment is context dependent, and may include detecting them and/or computing their display/character width as zero. For the SGR subset of the ANSI CSI sequences, and OSC hyperlinks, \code{fansi} will also parse, interpret, and reapply the sequences as needed. You can modify whether a \emph{Control Sequence} is treated specially with the \code{ctl} parameter. \itemize{ \item "nl": newlines. \item "c0": all other "C0" control characters (i.e. 0x01-0x1f, 0x7F), except for newlines and the actual ESC (0x1B) character. \item "sgr": ANSI CSI SGR sequences. \item "csi": all non-SGR ANSI CSI sequences. \item "url": OSC hyperlinks \item "osc": all non-OSC-hyperlink OSC sequences. \item "esc": all other escape sequences. \item "all": all of the above, except when used in combination with any of the above, in which case it means "all but". }} \item{normalize}{TRUE or FALSE (default) whether SGR sequence should be normalized out such that there is one distinct sequence for each SGR code. normalized strings will occupy more space (e.g. "\033[31;42m" becomes "\033[31m\033[42m"), but will work better with code that assumes each SGR code will be in its own escape as \code{crayon} does.} \item{carry}{TRUE, FALSE (default), or a scalar string, controls whether to interpret the character vector as a "single document" (TRUE or string) or as independent elements (FALSE). In "single document" mode, active state at the end of an input element is considered active at the beginning of the next vector element, simulating what happens with a document with active state at the end of a line. If FALSE each vector element is interpreted as if there were no active state when it begins. If character, then the active state at the end of the \code{carry} string is carried into the first element of \code{x} (see "Replacement Functions" for differences there). The carried state is injected in the interstice between an imaginary zeroeth character and the first character of a vector element. See the "Position Semantics" section of \code{\link{substr_ctl}} and the "State Interactions" section of \code{\link[=fansi]{?fansi}} for details. Except for \code{\link{strwrap_ctl}} where \code{NA} is treated as the string \code{"NA"}, \code{carry} will cause \code{NA}s in inputs to propagate through the remaining vector elements.} \item{terminate}{TRUE (default) or FALSE whether substrings should have active state closed to avoid it bleeding into other strings they may be prepended onto. This does not stop state from carrying if \code{carry = TRUE}. See the "State Interactions" section of \code{\link[=fansi]{?fansi}} for details.} } \value{ Like \code{\link[base:strsplit]{base::strsplit}}, with \emph{Control Sequences} excluded. } \description{ A drop-in replacement for \code{\link[base:strsplit]{base::strsplit}}. } \details{ This function works by computing the position of the split points after removing \emph{Control Sequences}, and uses those positions in conjunction with \code{\link{substr_ctl}} to extract the pieces. This concept is borrowed from \code{crayon::col_strsplit}. An important implication of this is that you cannot split by \emph{Control Sequences} that are being treated as \emph{Control Sequences}. You can however limit which control sequences are treated specially via the \code{ctl} parameters (see examples). } \note{ The split positions are computed after both \code{x} and \code{split} are converted to UTF-8. Non-ASCII strings are converted to and returned in UTF-8 encoding. Width calculations will not work properly in R < 3.2.2. } \section{Control and Special Sequences}{ \emph{Control Sequences} are non-printing characters or sequences of characters. \emph{Special Sequences} are a subset of the \emph{Control Sequences}, and include CSI SGR sequences which can be used to change rendered appearance of text, and OSC hyperlinks. See \code{\link{fansi}} for details. } \section{Output Stability}{ Several factors could affect the exact output produced by \code{fansi} functions across versions of \code{fansi}, \code{R}, and/or across systems. \strong{In general it is best not to rely on exact \code{fansi} output, e.g. by embedding it in tests}. Width and grapheme calculations depend on Unicode database version (see \code{\link{fansi_unicode_version}}, and grapheme processing logic among other things (see "Graphemes"). Individual character width are intended to match R4.5.1 definitions in an English locale, except for differences introduced by Unicode Database Version updates and grapheme processing. How a particular display format is encoded in \emph{Control Sequences} is not guaranteed to be stable across \code{fansi} versions. Additionally, which \emph{Special Sequences} are re-encoded vs transcribed untouched may change. In general we will strive to keep the rendered appearance stable. To maximize the odds of getting stable output set \code{normalize_state} to \code{TRUE} and \code{type} to \code{"chars"} in functions that allow it, and set \code{term.cap} to a specific set of capabilities. } \section{Bidirectional Text}{ \code{fansi} is unaware of text directionality and operates as if all strings are left to right (LTR). Using \code{fansi} function with strings that contain mixed direction scripts (i.e. both LTR and RTL) may produce undesirable results. } \examples{ strsplit_ctl("\033[31mhello\033[42m world!", " ") ## Splitting by newlines does not work as they are _Control ## Sequences_, but we can use `ctl` to treat them as ordinary strsplit_ctl("\033[31mhello\033[42m\nworld!", "\n") strsplit_ctl("\033[31mhello\033[42m\nworld!", "\n", ctl=c("all", "nl")) } \seealso{ \code{\link[=fansi]{?fansi}} for details on how \emph{Control Sequences} are interpreted, particularly if you are getting unexpected results, \code{\link{normalize_state}} for more details on what the \code{normalize} parameter does, \code{\link{state_at_end}} to compute active state at the end of strings, \code{\link{close_state}} to compute the sequence required to close active state. } fansi/man/strwrap_ctl.Rd0000644000176200001440000003145015107200100014745 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/strwrap.R \name{strwrap_ctl} \alias{strwrap_ctl} \alias{strwrap2_ctl} \title{Control Sequence Aware Version of strwrap} \usage{ strwrap_ctl( x, width = 0.9 * getOption("width"), indent = 0, exdent = 0, prefix = "", simplify = TRUE, initial = prefix, warn = getOption("fansi.warn", TRUE), term.cap = getOption("fansi.term.cap", dflt_term_cap()), ctl = "all", normalize = getOption("fansi.normalize", FALSE), carry = getOption("fansi.carry", FALSE), terminate = getOption("fansi.terminate", TRUE) ) strwrap2_ctl( x, width = 0.9 * getOption("width"), indent = 0, exdent = 0, prefix = "", simplify = TRUE, initial = prefix, wrap.always = FALSE, pad.end = "", strip.spaces = !tabs.as.spaces, tabs.as.spaces = getOption("fansi.tabs.as.spaces", FALSE), tab.stops = getOption("fansi.tab.stops", 8L), warn = getOption("fansi.warn", TRUE), term.cap = getOption("fansi.term.cap", dflt_term_cap()), ctl = "all", normalize = getOption("fansi.normalize", FALSE), carry = getOption("fansi.carry", FALSE), terminate = getOption("fansi.terminate", TRUE) ) } \arguments{ \item{x}{a character vector, or an object which can be converted to a character vector by \code{\link[base]{as.character}}.} \item{width}{a positive integer giving the target column for wrapping lines in the output.} \item{indent}{a non-negative integer giving the indentation of the first line in a paragraph.} \item{exdent}{a non-negative integer specifying the indentation of subsequent lines in paragraphs.} \item{prefix, initial}{a character string to be used as prefix for each line except the first, for which \code{initial} is used.} \item{simplify}{a logical. If \code{TRUE}, the result is a single character vector of line text; otherwise, it is a list of the same length as \code{x} the elements of which are character vectors of line text obtained from the corresponding element of \code{x}. (Hence, the result in the former case is obtained by unlisting that of the latter.)} \item{warn}{TRUE (default) or FALSE, whether to warn when potentially problematic \emph{Control Sequences} are encountered. These could cause the assumptions \code{fansi} makes about how strings are rendered on your display to be incorrect, for example by moving the cursor (see \code{\link[=fansi]{?fansi}}). At most one warning will be issued per element in each input vector. Will also warn about some badly encoded UTF-8 strings, but a lack of UTF-8 warnings is not a guarantee of correct encoding (use \code{\link{validUTF8}} for that).} \item{term.cap}{character a vector of the capabilities of the terminal, can be any combination of "bright" (SGR codes 90-97, 100-107), "256" (SGR codes starting with "38;5" or "48;5"), "truecolor" (SGR codes starting with "38;2" or "48;2"), and "all". "all" behaves as it does for the \code{ctl} parameter: "all" combined with any other value means all terminal capabilities except that one. \code{fansi} will warn if it encounters SGR codes that exceed the terminal capabilities specified (see \code{\link{term_cap_test}} for details). In versions prior to 1.0, \code{fansi} would also skip exceeding SGRs entirely instead of interpreting them. You may add the string "old" to any otherwise valid \code{term.cap} spec to restore the pre 1.0 behavior. "old" will not interact with "all" the way other valid values for this parameter do.} \item{ctl}{character, which \emph{Control Sequences} should be treated specially. Special treatment is context dependent, and may include detecting them and/or computing their display/character width as zero. For the SGR subset of the ANSI CSI sequences, and OSC hyperlinks, \code{fansi} will also parse, interpret, and reapply the sequences as needed. You can modify whether a \emph{Control Sequence} is treated specially with the \code{ctl} parameter. \itemize{ \item "nl": newlines. \item "c0": all other "C0" control characters (i.e. 0x01-0x1f, 0x7F), except for newlines and the actual ESC (0x1B) character. \item "sgr": ANSI CSI SGR sequences. \item "csi": all non-SGR ANSI CSI sequences. \item "url": OSC hyperlinks \item "osc": all non-OSC-hyperlink OSC sequences. \item "esc": all other escape sequences. \item "all": all of the above, except when used in combination with any of the above, in which case it means "all but". }} \item{normalize}{TRUE or FALSE (default) whether SGR sequence should be normalized out such that there is one distinct sequence for each SGR code. normalized strings will occupy more space (e.g. "\033[31;42m" becomes "\033[31m\033[42m"), but will work better with code that assumes each SGR code will be in its own escape as \code{crayon} does.} \item{carry}{TRUE, FALSE (default), or a scalar string, controls whether to interpret the character vector as a "single document" (TRUE or string) or as independent elements (FALSE). In "single document" mode, active state at the end of an input element is considered active at the beginning of the next vector element, simulating what happens with a document with active state at the end of a line. If FALSE each vector element is interpreted as if there were no active state when it begins. If character, then the active state at the end of the \code{carry} string is carried into the first element of \code{x} (see "Replacement Functions" for differences there). The carried state is injected in the interstice between an imaginary zeroeth character and the first character of a vector element. See the "Position Semantics" section of \code{\link{substr_ctl}} and the "State Interactions" section of \code{\link[=fansi]{?fansi}} for details. Except for \code{\link{strwrap_ctl}} where \code{NA} is treated as the string \code{"NA"}, \code{carry} will cause \code{NA}s in inputs to propagate through the remaining vector elements.} \item{terminate}{TRUE (default) or FALSE whether substrings should have active state closed to avoid it bleeding into other strings they may be prepended onto. This does not stop state from carrying if \code{carry = TRUE}. See the "State Interactions" section of \code{\link[=fansi]{?fansi}} for details.} \item{wrap.always}{TRUE or FALSE (default), whether to hard wrap at requested width if no word breaks are detected within a line. If set to TRUE then \code{width} must be at least 2.} \item{pad.end}{character(1L), a single character to use as padding at the end of each line until the line is \code{width} wide. This must be a printable ASCII character or an empty string (default). If you set it to an empty string the line remains unpadded.} \item{strip.spaces}{TRUE (default) or FALSE, if TRUE, extraneous white spaces (spaces, newlines, tabs) are removed in the same way as \link[base:strwrap]{base::strwrap} does. When FALSE, whitespaces are preserved, except for newlines as those are implicit boundaries between output vector elements.} \item{tabs.as.spaces}{FALSE (default) or TRUE, whether to convert tabs to spaces. This can only be set to TRUE if \code{strip.spaces} is FALSE.} \item{tab.stops}{integer(1:n) indicating position of tab stops to use when converting tabs to spaces. If there are more tabs in a line than defined tab stops the last tab stop is re-used. For the purposes of applying tab stops, each input line is considered a line and the character count begins from the beginning of the input line.} } \value{ A character vector, or list of character vectors if \code{simplify} is false. } \description{ Wraps strings to a specified width accounting for \emph{Control Sequences}. \code{strwrap_ctl} is intended to emulate \code{strwrap} closely except with respect to the \emph{Control Sequences} (see details for other minor differences), while \code{strwrap2_ctl} adds features and changes the processing of whitespace. \code{strwrap_ctl} is faster than \code{strwrap}. } \details{ \code{strwrap2_ctl} can convert tabs to spaces, pad strings up to \code{width}, and hard-break words if single words are wider than \code{width}. Unlike \link[base:strwrap]{base::strwrap}, both these functions will translate any non-ASCII strings to UTF-8 and return them in UTF-8. Additionally, invalid UTF-8 always causes errors, and \code{prefix} and \code{indent} must be scalar. When replacing tabs with spaces the tabs are computed relative to the beginning of the input line, not the most recent wrap point. Additionally,\code{indent}, \code{exdent}, \code{initial}, and \code{prefix} will be ignored when computing tab positions. } \note{ Non-ASCII strings are converted to and returned in UTF-8 encoding. Width calculations will not work properly in R < 3.2.2. For the \verb{strwrap*} functions the \code{carry} parameter affects whether styles are carried across \emph{input} vector elements. Styles always carry within a single wrapped vector element (e.g. if one of the input elements gets wrapped into three lines, the styles will carry through those three lines even if \code{carry=FALSE}, but not across input vector elements). } \section{Control and Special Sequences}{ \emph{Control Sequences} are non-printing characters or sequences of characters. \emph{Special Sequences} are a subset of the \emph{Control Sequences}, and include CSI SGR sequences which can be used to change rendered appearance of text, and OSC hyperlinks. See \code{\link{fansi}} for details. } \section{Graphemes}{ \code{fansi} approximates grapheme widths and counts by using heuristics for grapheme breaks that work for most common graphemes, including emoji combining sequences. The heuristic is known to work incorrectly with invalid combining sequences, prepending marks, and sequence interruptors. The \href{https://cran.r-project.org/package=utf8}{\code{utf8}} package provides a conforming grapheme parsing implementation. } \section{Output Stability}{ Several factors could affect the exact output produced by \code{fansi} functions across versions of \code{fansi}, \code{R}, and/or across systems. \strong{In general it is best not to rely on exact \code{fansi} output, e.g. by embedding it in tests}. Width and grapheme calculations depend on Unicode database version (see \code{\link{fansi_unicode_version}}, and grapheme processing logic among other things (see "Graphemes"). Individual character width are intended to match R4.5.1 definitions in an English locale, except for differences introduced by Unicode Database Version updates and grapheme processing. How a particular display format is encoded in \emph{Control Sequences} is not guaranteed to be stable across \code{fansi} versions. Additionally, which \emph{Special Sequences} are re-encoded vs transcribed untouched may change. In general we will strive to keep the rendered appearance stable. To maximize the odds of getting stable output set \code{normalize_state} to \code{TRUE} and \code{type} to \code{"chars"} in functions that allow it, and set \code{term.cap} to a specific set of capabilities. } \section{Bidirectional Text}{ \code{fansi} is unaware of text directionality and operates as if all strings are left to right (LTR). Using \code{fansi} function with strings that contain mixed direction scripts (i.e. both LTR and RTL) may produce undesirable results. } \examples{ hello.1 <- "hello \033[41mred\033[49m world" hello.2 <- "hello\t\033[41mred\033[49m\tworld" strwrap_ctl(hello.1, 12) strwrap_ctl(hello.2, 12) ## In default mode strwrap2_ctl is the same as strwrap_ctl strwrap2_ctl(hello.2, 12) ## But you can leave whitespace unchanged, `warn` ## set to false as otherwise tabs causes warning strwrap2_ctl(hello.2, 12, strip.spaces=FALSE, warn=FALSE) ## And convert tabs to spaces strwrap2_ctl(hello.2, 12, tabs.as.spaces=TRUE) ## If your display has 8 wide tab stops the following two ## outputs should look the same writeLines(strwrap2_ctl(hello.2, 80, tabs.as.spaces=TRUE)) writeLines(hello.2) ## tab stops are NOT auto-detected, but you may provide ## your own strwrap2_ctl(hello.2, 12, tabs.as.spaces=TRUE, tab.stops=c(6, 12)) ## You can also force padding at the end to equal width writeLines(strwrap2_ctl("hello how are you today", 10, pad.end=".")) ## And a more involved example where we read the ## NEWS file, color it line by line, wrap it to ## 25 width and display some of it in 3 columns ## (works best on displays that support 256 color ## SGR sequences) NEWS <- readLines(file.path(R.home('doc'), 'NEWS')) NEWS.C <- fansi_lines(NEWS, step=2) # color each line W <- strwrap2_ctl(NEWS.C, 25, pad.end=" ", wrap.always=TRUE) writeLines(c("", paste(W[1:20], W[100:120], W[200:220]), "")) } \seealso{ \code{\link[=fansi]{?fansi}} for details on how \emph{Control Sequences} are interpreted, particularly if you are getting unexpected results, \code{\link{normalize_state}} for more details on what the \code{normalize} parameter does, \code{\link{state_at_end}} to compute active state at the end of strings, \code{\link{close_state}} to compute the sequence required to close active state. } fansi/man/to_html.Rd0000644000176200001440000002177014213626164014076 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/tohtml.R \name{to_html} \alias{to_html} \title{Convert Control Sequences to HTML Equivalents} \usage{ to_html( x, warn = getOption("fansi.warn", TRUE), term.cap = getOption("fansi.term.cap", dflt_term_cap()), classes = FALSE, carry = getOption("fansi.carry", TRUE) ) } \arguments{ \item{x}{a character vector or object that can be coerced to such.} \item{warn}{TRUE (default) or FALSE, whether to warn when potentially problematic \emph{Control Sequences} are encountered. These could cause the assumptions \code{fansi} makes about how strings are rendered on your display to be incorrect, for example by moving the cursor (see \code{\link[=fansi]{?fansi}}). At most one warning will be issued per element in each input vector. Will also warn about some badly encoded UTF-8 strings, but a lack of UTF-8 warnings is not a guarantee of correct encoding (use \code{\link{validUTF8}} for that).} \item{term.cap}{character a vector of the capabilities of the terminal, can be any combination of "bright" (SGR codes 90-97, 100-107), "256" (SGR codes starting with "38;5" or "48;5"), "truecolor" (SGR codes starting with "38;2" or "48;2"), and "all". "all" behaves as it does for the \code{ctl} parameter: "all" combined with any other value means all terminal capabilities except that one. \code{fansi} will warn if it encounters SGR codes that exceed the terminal capabilities specified (see \code{\link{term_cap_test}} for details). In versions prior to 1.0, \code{fansi} would also skip exceeding SGRs entirely instead of interpreting them. You may add the string "old" to any otherwise valid \code{term.cap} spec to restore the pre 1.0 behavior. "old" will not interact with "all" the way other valid values for this parameter do.} \item{classes}{FALSE (default), TRUE, or character vector of either 16, 32, or 512 class names. Character strings may only contain ASCII characters corresponding to letters, numbers, the hyphen, or the underscore. It is the user's responsibility to provide values that are legal class names. \itemize{ \item FALSE: All colors rendered as inline CSS styles. \item TRUE: Each of the 256 basic colors is mapped to a class in form "fansi-color-###" (or "fansi-bgcol-###" for background colors) where "###" is a zero padded three digit number in 0:255. Basic colors specified with SGR codes 30-37 (or 40-47) map to 000:007, and bright ones specified with 90-97 (or 100-107) map to 008:015. 8 bit colors specified with SGR codes 38;5;### or 48;5;### map directly based on the value of "###". Implicitly, this maps the 8 bit colors in 0:7 to the basic colors, and those in 8:15 to the bright ones even though these are not exactly the same when using inline styles. "truecolor"s specified with 38;2;#;#;# or 48;2;#;#;# do not map to classes and are rendered as inline styles. \item character(16): The eight basic colors are mapped to the string values in the vector, all others are rendered as inline CSS styles. Basic colors are mapped irrespective of whether they are encoded as the basic colors or as 8-bit colors. Sixteen elements are needed because there must be eight classes for foreground colors, and eight classes for background colors. Classes should be ordered in ascending order of color number, with foreground and background classes alternating starting with foreground (see examples). \item character(32): Like character(16), except the basic and bright colors are mapped. \item character(512): Like character(16), except the basic, bright, and all other 8-bit colors are mapped. }} \item{carry}{TRUE, FALSE (default), or a scalar string, controls whether to interpret the character vector as a "single document" (TRUE or string) or as independent elements (FALSE). In "single document" mode, active state at the end of an input element is considered active at the beginning of the next vector element, simulating what happens with a document with active state at the end of a line. If FALSE each vector element is interpreted as if there were no active state when it begins. If character, then the active state at the end of the \code{carry} string is carried into the first element of \code{x} (see "Replacement Functions" for differences there). The carried state is injected in the interstice between an imaginary zeroeth character and the first character of a vector element. See the "Position Semantics" section of \code{\link{substr_ctl}} and the "State Interactions" section of \code{\link[=fansi]{?fansi}} for details. Except for \code{\link{strwrap_ctl}} where \code{NA} is treated as the string \code{"NA"}, \code{carry} will cause \code{NA}s in inputs to propagate through the remaining vector elements.} } \value{ A character vector of the same length as \code{x} with all escape sequences removed and any basic ANSI CSI SGR escape sequences applied via SPAN HTML tags. } \description{ Interprets CSI SGR sequences and OSC hyperlinks to produce strings with the state reproduced with SPAN elements, inline CSS styles, and A anchors. Optionally for colors, the SPAN elements may be assigned classes instead of inline styles, in which case it is the user's responsibility to provide a style sheet. Input that contains special HTML characters ("<", ">", "&", "'", and "\"") likely should be escaped with \code{\link{html_esc}}, and \code{to_html} will warn if it encounters the first two. } \details{ Only "observable" formats are translated. These include colors, background-colors, and basic styles (CSI SGR codes 1-6, 8, 9). Style 7, the "inverse" style, is implemented by explicitly switching foreground and background colors, if there are any. Styles 5-6 (blink) are rendered as "text-decoration" but likely will do nothing in the browser. Style 8 (conceal) sets the color to transparent. Parameters in OSC sequences are not copied over as they might have different semantics in the OSC sequences than they would in HTML (e.g. the "id" parameter is intended to be non-unique in OSC). Each element of the input vector is translated into a stand-alone valid HTML string. In particular, any open tags generated by \code{fansi} are closed at the end of an element and re-opened on the subsequent element with the same style. This allows safe combination of HTML translated strings, for example by \code{\link{paste}}ing them together. The trade-off is that there may be redundant HTML produced. To reduce redundancy you can first collapse the input vector into one string, being mindful that very large strings may exceed maximum string size when converted to HTML. \code{fansi}-opened tags are closed and new ones open anytime the "observable" state changes. \code{to_html} never produces nested tags, even if at times that might produce more compact output. While it would be possible to match a CSI/OSC encoded state with nested tags, it would increase the complexity of the code substantially for little gain. } \note{ Non-ASCII strings are converted to and returned in UTF-8 encoding. \code{to_html} always terminates as not doing so produces invalid HTML. If you wish for the last active SPAN to bleed into subsequent text you may do so with e.g. \code{sub("(?:)?$", "", x)} or similar. Additionally, unlike other functions, the default is \code{carry = TRUE} for compatibility with semantics of prior versions of \code{fansi}. } \examples{ to_html("hello\033[31;42;1mworld\033[m") to_html("hello\033[31;42;1mworld\033[m", classes=TRUE) ## Input contains HTML special chars x <- "&'\\"")) } \arguments{ \item{x}{character vector} \item{what}{character(1) containing any combination of ASCII characters "<", ">", "&", "'", or "\"". These characters are special in HTML contexts and will be substituted by their HTML entity code. By default, all special characters are escaped, but in many cases "<>&" or even "<>" might be sufficient. @return \code{x}, but with the \code{what} characters replaced by their HTML entity codes.} } \description{ Arbitrary text may contain characters with special meaning in HTML, which may cause HTML display to be corrupted if they are included unescaped in a web page. This function escapes those special characters so they do not interfere with the HTML markup generated by e.g. \code{\link{to_html}}. } \note{ Non-ASCII strings are converted to and returned in UTF-8 encoding. } \examples{ html_esc("day > night") html_esc("hello world") } \seealso{ Other HTML functions: \code{\link{in_html}()}, \code{\link{make_styles}()}, \code{\link{to_html}()} } \concept{HTML functions} fansi/man/sgr_to_html.Rd0000644000176200001440000001256214213626164014750 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/tohtml.R \name{sgr_to_html} \alias{sgr_to_html} \title{Convert Control Sequences to HTML Equivalents} \usage{ sgr_to_html( x, warn = getOption("fansi.warn", TRUE), term.cap = getOption("fansi.term.cap", dflt_term_cap()), classes = FALSE, carry = getOption("fansi.carry", TRUE) ) } \arguments{ \item{x}{a character vector or object that can be coerced to such.} \item{warn}{TRUE (default) or FALSE, whether to warn when potentially problematic \emph{Control Sequences} are encountered. These could cause the assumptions \code{fansi} makes about how strings are rendered on your display to be incorrect, for example by moving the cursor (see \code{\link[=fansi]{?fansi}}). At most one warning will be issued per element in each input vector. Will also warn about some badly encoded UTF-8 strings, but a lack of UTF-8 warnings is not a guarantee of correct encoding (use \code{\link{validUTF8}} for that).} \item{term.cap}{character a vector of the capabilities of the terminal, can be any combination of "bright" (SGR codes 90-97, 100-107), "256" (SGR codes starting with "38;5" or "48;5"), "truecolor" (SGR codes starting with "38;2" or "48;2"), and "all". "all" behaves as it does for the \code{ctl} parameter: "all" combined with any other value means all terminal capabilities except that one. \code{fansi} will warn if it encounters SGR codes that exceed the terminal capabilities specified (see \code{\link{term_cap_test}} for details). In versions prior to 1.0, \code{fansi} would also skip exceeding SGRs entirely instead of interpreting them. You may add the string "old" to any otherwise valid \code{term.cap} spec to restore the pre 1.0 behavior. "old" will not interact with "all" the way other valid values for this parameter do.} \item{classes}{FALSE (default), TRUE, or character vector of either 16, 32, or 512 class names. Character strings may only contain ASCII characters corresponding to letters, numbers, the hyphen, or the underscore. It is the user's responsibility to provide values that are legal class names. \itemize{ \item FALSE: All colors rendered as inline CSS styles. \item TRUE: Each of the 256 basic colors is mapped to a class in form "fansi-color-###" (or "fansi-bgcol-###" for background colors) where "###" is a zero padded three digit number in 0:255. Basic colors specified with SGR codes 30-37 (or 40-47) map to 000:007, and bright ones specified with 90-97 (or 100-107) map to 008:015. 8 bit colors specified with SGR codes 38;5;### or 48;5;### map directly based on the value of "###". Implicitly, this maps the 8 bit colors in 0:7 to the basic colors, and those in 8:15 to the bright ones even though these are not exactly the same when using inline styles. "truecolor"s specified with 38;2;#;#;# or 48;2;#;#;# do not map to classes and are rendered as inline styles. \item character(16): The eight basic colors are mapped to the string values in the vector, all others are rendered as inline CSS styles. Basic colors are mapped irrespective of whether they are encoded as the basic colors or as 8-bit colors. Sixteen elements are needed because there must be eight classes for foreground colors, and eight classes for background colors. Classes should be ordered in ascending order of color number, with foreground and background classes alternating starting with foreground (see examples). \item character(32): Like character(16), except the basic and bright colors are mapped. \item character(512): Like character(16), except the basic, bright, and all other 8-bit colors are mapped. }} \item{carry}{TRUE, FALSE (default), or a scalar string, controls whether to interpret the character vector as a "single document" (TRUE or string) or as independent elements (FALSE). In "single document" mode, active state at the end of an input element is considered active at the beginning of the next vector element, simulating what happens with a document with active state at the end of a line. If FALSE each vector element is interpreted as if there were no active state when it begins. If character, then the active state at the end of the \code{carry} string is carried into the first element of \code{x} (see "Replacement Functions" for differences there). The carried state is injected in the interstice between an imaginary zeroeth character and the first character of a vector element. See the "Position Semantics" section of \code{\link{substr_ctl}} and the "State Interactions" section of \code{\link[=fansi]{?fansi}} for details. Except for \code{\link{strwrap_ctl}} where \code{NA} is treated as the string \code{"NA"}, \code{carry} will cause \code{NA}s in inputs to propagate through the remaining vector elements.} } \value{ A character vector of the same length as \code{x} with all escape sequences removed and any basic ANSI CSI SGR escape sequences applied via SPAN HTML tags. } \description{ This function is a wrapper around \code{\link{to_html}} and is kept around for legacy reasons. When we added capabilities for handling OSC hyperlinks, the \code{sgr_} part of the name became an incomplete description of what the function does. The only substantive difference with the new function is this one does not warn when the input contains unescaped "<" or ">". } \note{ Unlike other functions, the default is \code{carry = TRUE} for compatibility with semantics of prior versions of \code{fansi}. } \keyword{internal} fansi/man/trimws_ctl.Rd0000644000176200001440000001232315107200100014566 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/trimws.R \name{trimws_ctl} \alias{trimws_ctl} \title{Control Sequence Aware Version of trimws} \usage{ trimws_ctl( x, which = c("both", "left", "right"), whitespace = "[ \\t\\r\\n]", warn = getOption("fansi.warn", TRUE), term.cap = getOption("fansi.term.cap", dflt_term_cap()), ctl = "all", normalize = getOption("fansi.normalize", FALSE) ) } \arguments{ \item{x}{a character vector.} \item{which}{a character string specifying whether to remove both leading and trailing whitespace (default), or only leading (\code{"left"}) or trailing (\code{"right"}). Can be abbreviated.} \item{whitespace}{must be set to the default value, in the future it may become possible to change this parameter.} \item{warn}{TRUE (default) or FALSE, whether to warn when potentially problematic \emph{Control Sequences} are encountered. These could cause the assumptions \code{fansi} makes about how strings are rendered on your display to be incorrect, for example by moving the cursor (see \code{\link[=fansi]{?fansi}}). At most one warning will be issued per element in each input vector. Will also warn about some badly encoded UTF-8 strings, but a lack of UTF-8 warnings is not a guarantee of correct encoding (use \code{\link{validUTF8}} for that).} \item{term.cap}{character a vector of the capabilities of the terminal, can be any combination of "bright" (SGR codes 90-97, 100-107), "256" (SGR codes starting with "38;5" or "48;5"), "truecolor" (SGR codes starting with "38;2" or "48;2"), and "all". "all" behaves as it does for the \code{ctl} parameter: "all" combined with any other value means all terminal capabilities except that one. \code{fansi} will warn if it encounters SGR codes that exceed the terminal capabilities specified (see \code{\link{term_cap_test}} for details). In versions prior to 1.0, \code{fansi} would also skip exceeding SGRs entirely instead of interpreting them. You may add the string "old" to any otherwise valid \code{term.cap} spec to restore the pre 1.0 behavior. "old" will not interact with "all" the way other valid values for this parameter do.} \item{ctl}{character, which \emph{Control Sequences} should be treated specially. Special treatment is context dependent, and may include detecting them and/or computing their display/character width as zero. For the SGR subset of the ANSI CSI sequences, and OSC hyperlinks, \code{fansi} will also parse, interpret, and reapply the sequences as needed. You can modify whether a \emph{Control Sequence} is treated specially with the \code{ctl} parameter. \itemize{ \item "nl": newlines. \item "c0": all other "C0" control characters (i.e. 0x01-0x1f, 0x7F), except for newlines and the actual ESC (0x1B) character. \item "sgr": ANSI CSI SGR sequences. \item "csi": all non-SGR ANSI CSI sequences. \item "url": OSC hyperlinks \item "osc": all non-OSC-hyperlink OSC sequences. \item "esc": all other escape sequences. \item "all": all of the above, except when used in combination with any of the above, in which case it means "all but". }} \item{normalize}{TRUE or FALSE (default) whether SGR sequence should be normalized out such that there is one distinct sequence for each SGR code. normalized strings will occupy more space (e.g. "\033[31;42m" becomes "\033[31m\033[42m"), but will work better with code that assumes each SGR code will be in its own escape as \code{crayon} does.} } \value{ The input with white space removed as described. } \description{ Removes any whitespace before the first and/or after the last non-\emph{Control Sequence} character. Unlike with the \code{\link[base:trimws]{base::trimws}}, only the default \code{whitespace} specification is supported. } \section{Control and Special Sequences}{ \emph{Control Sequences} are non-printing characters or sequences of characters. \emph{Special Sequences} are a subset of the \emph{Control Sequences}, and include CSI SGR sequences which can be used to change rendered appearance of text, and OSC hyperlinks. See \code{\link{fansi}} for details. } \section{Output Stability}{ Several factors could affect the exact output produced by \code{fansi} functions across versions of \code{fansi}, \code{R}, and/or across systems. \strong{In general it is best not to rely on exact \code{fansi} output, e.g. by embedding it in tests}. Width and grapheme calculations depend on Unicode database version (see \code{\link{fansi_unicode_version}}, and grapheme processing logic among other things (see "Graphemes"). Individual character width are intended to match R4.5.1 definitions in an English locale, except for differences introduced by Unicode Database Version updates and grapheme processing. How a particular display format is encoded in \emph{Control Sequences} is not guaranteed to be stable across \code{fansi} versions. Additionally, which \emph{Special Sequences} are re-encoded vs transcribed untouched may change. In general we will strive to keep the rendered appearance stable. To maximize the odds of getting stable output set \code{normalize_state} to \code{TRUE} and \code{type} to \code{"chars"} in functions that allow it, and set \code{term.cap} to a specific set of capabilities. } \examples{ trimws_ctl(" \033[31m\thello world\t\033[39m ") } fansi/man/fansi.Rd0000644000176200001440000003165115107200005013510 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/fansi-package.R \docType{package} \name{fansi} \alias{fansi} \alias{fansi-package} \title{Details About Manipulation of Strings Containing Control Sequences} \description{ Counterparts to R string manipulation functions that account for the effects of some ANSI X3.64 (a.k.a. ECMA-48, ISO-6429) control sequences. } \section{Control Characters and Sequences}{ Control characters and sequences are non-printing inline characters or sequences initiated by them that can be used to modify terminal display and behavior, for example by changing text color or cursor position. We will refer to X3.64/ECMA-48/ISO-6429 control characters and sequences as "\emph{Control Sequences}" hereafter. There are four types of \emph{Control Sequences} that \code{fansi} can treat specially: \itemize{ \item "C0" control characters, such as tabs and carriage returns (we include delete in this set, even though technically it is not part of it). \item Sequences starting in "ESC[", also known as Control Sequence Introducer (CSI) sequences, of which the Select Graphic Rendition (SGR) sequences used to format terminal output are a subset. \item Sequences starting in "ESC]", also known as Operating System Commands (OSC), of which the subset beginning with "8" is used to encode URI based hyperlinks. \item Sequences starting in "ESC" and followed by something other than "[" or "]". } \emph{Control Sequences} starting with ESC are assumed to be two characters long (including the ESC) unless they are of the CSI or OSC variety, in which case their length is computed as per the \href{https://ecma-international.org/publications-and-standards/standards/ecma-48/}{ECMA-48 specification}, with the exception that \href{#osc-hyperlinks}{OSC hyperlinks} may be terminated with BEL ("\\a") in addition to ST ("ESC\\"). \code{fansi} handles most common \emph{Control Sequences} in its parsing algorithms, but it is not a conforming implementation of ECMA-48. For example, there are non-CSI/OSC escape sequences that may be longer than two characters, but \code{fansi} will (incorrectly) treat them as if they were two characters long. There are many more unimplemented ECMA-48 specifications. In theory it is possible to encode CSI sequences with a single byte introducing character in the 0x40-0x5F range instead of the traditional "ESC[". Since this is rare and it conflicts with UTF-8 encoding, \code{fansi} does not support it. Within \emph{Control Sequences}, \code{fansi} further distinguishes CSI SGR and OSC hyperlinks by recording format specification and URIs into string state, and applying the same to any output strings according to the semantics of the functions in use. CSI SGR and OSC hyperlinks are known together as \emph{Special Sequences}. See the following sections for details. Additionally, all \emph{Control Sequences}, whether special or not, do not count as characters, graphemes, or display width. You can cause \code{fansi} to treat particular \emph{Control Sequences} as regular characters with the \code{ctl} parameter. } \section{CSI SGR Control Sequences}{ \strong{NOTE}: not all displays support CSI SGR sequences; run \code{\link{term_cap_test}} to see whether your display supports them. CSI SGR Control Sequences are the subset of CSI sequences that can be used to change text appearance (e.g. color). These sequences begin with "ESC[" and end in "m". \code{fansi} interprets these sequences and writes new ones to the output strings in such a way that the original formatting is preserved. In most cases this should be transparent to the user. Occasionally there may be mismatches between how \code{fansi} and a display interpret the CSI SGR sequences, which may produce display artifacts. The most likely source of artifacts are \emph{Control Sequences} that move the cursor or change the display, or that \code{fansi} otherwise fails to interpret, such as: \itemize{ \item Unknown SGR substrings. \item "C0" control characters like tabs and carriage returns. \item Other escape sequences. } Another possible source of problems is that different displays parse and interpret control sequences differently. The common CSI SGR sequences that you are likely to encounter in formatted text tend to be treated consistently, but less common ones are not. \code{fansi} tries to hew by the ECMA-48 specification \strong{for CSI SGR control sequences}, but not all terminals do. The most likely source of problems will be 24-bit CSI SGR sequences. For example, a 24-bit color sequence such as "ESC[38;2;31;42;4" is a single foreground color to a terminal that supports it, or separate foreground, background, faint, and underline specifications for one that does not. \code{fansi} will always interpret the sequences according to ECMA-48, but it will warn you if encountered sequences exceed those specified by the \code{term.cap} parameter or the "fansi.term.cap" global option. \code{fansi} will will also warn if it encounters \emph{Control Sequences} that it cannot interpret. You can turn off warnings via the \code{warn} parameter, which can be set globally via the "fansi.warn" option. You can work around "C0" tabs characters by turning them into spaces first with \code{\link{tabs_as_spaces}} or with the \code{tabs.as.spaces} parameter available in some of the \code{fansi} functions \code{fansi} interprets CSI SGR sequences in cumulative "Graphic Rendition Combination Mode". This means new SGR sequences add to rather than replace previous ones, although in some cases the effect is the same as replacement (e.g. if you have a color active and pick another one). } \section{OSC Hyperlinks}{ Operating System Commands are interpreted by terminal emulators typically to engage actions external to the display of text proper, such as setting a window title or changing the active color palette. \href{https://iterm2.com/documentation-escape-codes.html}{Some terminals} have added support for associating URIs to text with OSCs in a similar way to anchors in HTML, so \code{fansi} interprets them and outputs or terminates them as needed. For example: \if{html}{\out{
}}\preformatted{"\\033]8;;xy.z\\033\\\\LINK\\033]8;;\\033\\\\" }\if{html}{\out{
}} Might be interpreted as link to the URI "x.z". To make the encoding pattern clearer, we replace "\033]" with "" and "\033\\\\" with "" below: \if{html}{\out{
}}\preformatted{8;;URILINK TEXT8;; }\if{html}{\out{
}} } \section{State Interactions}{ The cumulative nature of state as specified by SGR or OSC hyperlinks means that unterminated strings that are spliced will interact with each other. By extension, a substring does not inherently contain all the information required to recreate its state as it appeared in the source document. The default \code{fansi} configuration terminates extracted substrings and prepends original state to them so they present on a stand-alone basis as they did as part of the original string. To allow state in substrings to affect subsequent strings set \code{terminate = FALSE}, but you will need to manually terminate them or deal with the consequences of not doing so (see "Terminal Quirks"). By default, \code{fansi} assumes that each element in an input character vector is independent, but this is incorrect if the input is a single document with each element a line in it. In that situation state from each line should bleed into subsequent ones. Setting \code{carry = TRUE} enables the "single document" interpretation. To most closely approximate what \code{writeLines(x)} produces on your terminal, where \code{x} is a stateful string, use \code{writeLines(fansi_fun(x, carry=TRUE, terminate=FALSE))}. \code{fansi_fun} is a stand-in for any of the \code{fansi} string manipulation functions. Note that even with a seeming "null-op" such as \code{substr_ctl(x, 1, nchar_ctl(x), carry=TRUE, terminate=FALSE)} the output control sequences may not match the input ones, but the output \emph{should} look the same if displayed to the terminal. \code{fansi} strings will be affected by any active state in strings they are appended to. There are no parameters to control what happens in this case, but \code{fansi} provides functions that can help the user get the desired behavior. \code{state_at_end} computes the active state the end of a string, which can then be prepended onto the \emph{input} of \code{fansi} functions so that they are aware of the active style at the beginning of the string. Alternatively, one could use \code{close_state(state_at_end(...))} and pre-pend that to the \emph{output} of \code{fansi} functions so they are unaffected by preceding SGR. One could also just prepend "ESC[0m", but in some cases as described in \code{\link[=normalize_state]{?normalize_state}} that is sub-optimal. If you intend to combine stateful \code{fansi} manipulated strings with your own, it may be best to set \code{normalize = TRUE} for improved compatibility (see \code{\link[=normalize_state]{?normalize_state}}.) } \section{Terminal Quirks}{ Some terminals (e.g. OS X terminal, ITerm2) will pre-paint the entirety of a new line with the currently active background before writing the contents of the line. If there is a non-default active background color, any unwritten columns in the new line will keep the prior background color even if the new line changes the background color. To avoid this be sure to use \code{terminate = TRUE} or to manually terminate each line with e.g. "ESC[0m". The problem manifests as: \if{html}{\out{
}}\preformatted{" " = default background "#" = new background ">" = start new background "!" = restore default background +-----------+ | abc\\n | |>###\\n | |!abc\\n#####| <- trailing "#" after newline are from pre-paint | abc | +-----------+ }\if{html}{\out{
}} The simplest way to avoid this problem is to split input strings by any newlines they contain, and use \code{terminate = TRUE} (the default). A more complex solution is to pad with spaces to the terminal window width before emitting the newline to ensure the pre-paint is overpainted with the current line's prevailing background color. } \section{Encodings / UTF-8}{ \code{fansi} will convert any non-ASCII strings to UTF-8 before processing them, and \code{fansi} functions that return strings will return them encoded in UTF-8. In some cases this will be different to what base R does. For example, \code{substr} re-encodes substrings to their original encoding. Interpretation of UTF-8 strings is intended to be consistent with base R. There are three ways things may not work out exactly as desired: \enumerate{ \item \code{fansi}, despite its best intentions, handles a UTF-8 sequence differently to the way R does. \item R incorrectly handles a UTF-8 sequence. \item Your display incorrectly handles a UTF-8 sequence. } These issues are most likely to occur with invalid UTF-8 sequences, combining character sequences, and emoji. For example, whether special characters such as emoji are considered one or two wide evolves as software implements newer versions the Unicode databases. Internally, \code{fansi} computes the width of most UTF-8 character sequences outside of the ASCII range loosely based on the Unicode databases. Because \code{fansi} implements its own internal UTF-8 parsing and may use a different Unicode database version than R (see \code{\link[=fansi_unicode_version]{fansi_unicode_version()}}), it is possible that you will see results different from those that R produces even on strings without \emph{Control Sequences}. } \section{Overflow}{ The maximum length of input character vector elements allowed by \code{fansi} is the 32 bit INT_MAX, excluding the terminating NULL. As of R4.1 this is the limit for R character vector elements generally, but is enforced at the C level by \code{fansi} nonetheless. It is possible that during processing strings that are shorter than INT_MAX would become longer than that. \code{fansi} checks for that overflow and will stop with an error if that happens. A work-around for this situation is to break up large strings into smaller ones. The limit is on each element of a character vector, not on the vector as a whole. \code{fansi} will also error on your system if \code{R_len_t}, the R type used to measure string lengths, is less than the processed length of the string. } \seealso{ Useful links: \itemize{ \item \url{https://github.com/brodieG/fansi} \item Report bugs at \url{https://github.com/brodieG/fansi/issues} } } \author{ \strong{Maintainer}: Brodie Gaslam \email{brodie.gaslam@yahoo.com} Other contributors: \itemize{ \item Elliott Sales De Andrade [contributor] \item R Core Team \email{R-core@r-project.org} (UTF8 byte length calcs from src/util.c) [copyright holder] \item Michael Chirico \email{michaelchirico4@gmail.com} (\href{https://orcid.org/0000-0003-0787-087X}{ORCID}) [contributor] \item Unicode, Inc. (Unicode Character Database derivative data in src/width.c) [copyright holder, data contributor] } } fansi/man/nchar_sgr.Rd0000644000176200001440000000366115106721052014367 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/nchar.R \name{nchar_sgr} \alias{nchar_sgr} \alias{nzchar_sgr} \title{Control Sequence Aware Version of nchar} \usage{ nchar_sgr( x, type = "chars", allowNA = FALSE, keepNA = NA, warn = getOption("fansi.warn", TRUE) ) nzchar_sgr(x, keepNA = NA, warn = getOption("fansi.warn", TRUE)) } \arguments{ \item{x}{a character vector or object that can be coerced to such.} \item{type}{character(1L) partial matching \code{c("chars", "width", "graphemes")}. See \code{\link[base:nchar]{?nchar}}, as well as the corresponding documentation sections on this page.} \item{allowNA}{logical: should \code{NA} be returned for invalid multibyte strings or \code{"bytes"}-encoded strings (rather than throwing an error)?} \item{keepNA}{logical: should \code{NA} be returned when \code{x} is \code{\link[base]{NA}}? If false, \code{nchar()} returns \code{2}, as that is the number of printing characters used when strings are written to output, and \code{nzchar()} is \code{TRUE}. The default for \code{nchar()}, \code{NA}, means to use \code{keepNA = TRUE} unless \code{type} is \code{"width"}.} \item{warn}{TRUE (default) or FALSE, whether to warn when potentially problematic \emph{Control Sequences} are encountered. These could cause the assumptions \code{fansi} makes about how strings are rendered on your display to be incorrect, for example by moving the cursor (see \code{\link[=fansi]{?fansi}}). At most one warning will be issued per element in each input vector. Will also warn about some badly encoded UTF-8 strings, but a lack of UTF-8 warnings is not a guarantee of correct encoding (use \code{\link{validUTF8}} for that).} } \value{ Like \code{\link[base:nchar]{base::nchar}}, with \emph{Control Sequences} excluded. } \description{ These functions are deprecated in favor of the \code{\link{nchar_ctl}} and \code{\link{nzchar_ctl}}. } \keyword{internal} fansi/man/fansi_lines.Rd0000644000176200001440000000127314160423174014713 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/misc.R \name{fansi_lines} \alias{fansi_lines} \title{Colorize Character Vectors} \usage{ fansi_lines(txt, step = 1) } \arguments{ \item{txt}{character vector or object that can be coerced to character vector} \item{step}{integer(1L) how quickly to step through the color palette} } \value{ character vector with each element colored } \description{ Color each element in input with one of the "256 color" ANSI CSI SGR codes. This is intended for testing and demo purposes. } \examples{ NEWS <- readLines(file.path(R.home('doc'), 'NEWS')) writeLines(fansi_lines(NEWS[1:20])) writeLines(fansi_lines(NEWS[1:20], step=8)) } fansi/man/strtrim_sgr.Rd0000644000176200001440000000767215106721052015006 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/strtrim.R \name{strtrim_sgr} \alias{strtrim_sgr} \alias{strtrim2_sgr} \title{Control Sequence Aware Version of strtrim} \usage{ strtrim_sgr( x, width, warn = getOption("fansi.warn", TRUE), normalize = getOption("fansi.normalize", FALSE), carry = getOption("fansi.carry", FALSE), terminate = getOption("fansi.terminate", TRUE) ) strtrim2_sgr( x, width, warn = getOption("fansi.warn", TRUE), tabs.as.spaces = getOption("fansi.tabs.as.spaces", FALSE), tab.stops = getOption("fansi.tab.stops", 8L), normalize = getOption("fansi.normalize", FALSE), carry = getOption("fansi.carry", FALSE), terminate = getOption("fansi.terminate", TRUE) ) } \arguments{ \item{x}{a character vector, or an object which can be coerced to a character vector by \code{\link[base]{as.character}}.} \item{width}{positive integer values: recycled to the length of \code{x}.} \item{warn}{TRUE (default) or FALSE, whether to warn when potentially problematic \emph{Control Sequences} are encountered. These could cause the assumptions \code{fansi} makes about how strings are rendered on your display to be incorrect, for example by moving the cursor (see \code{\link[=fansi]{?fansi}}). At most one warning will be issued per element in each input vector. Will also warn about some badly encoded UTF-8 strings, but a lack of UTF-8 warnings is not a guarantee of correct encoding (use \code{\link{validUTF8}} for that).} \item{normalize}{TRUE or FALSE (default) whether SGR sequence should be normalized out such that there is one distinct sequence for each SGR code. normalized strings will occupy more space (e.g. "\033[31;42m" becomes "\033[31m\033[42m"), but will work better with code that assumes each SGR code will be in its own escape as \code{crayon} does.} \item{carry}{TRUE, FALSE (default), or a scalar string, controls whether to interpret the character vector as a "single document" (TRUE or string) or as independent elements (FALSE). In "single document" mode, active state at the end of an input element is considered active at the beginning of the next vector element, simulating what happens with a document with active state at the end of a line. If FALSE each vector element is interpreted as if there were no active state when it begins. If character, then the active state at the end of the \code{carry} string is carried into the first element of \code{x} (see "Replacement Functions" for differences there). The carried state is injected in the interstice between an imaginary zeroeth character and the first character of a vector element. See the "Position Semantics" section of \code{\link{substr_ctl}} and the "State Interactions" section of \code{\link[=fansi]{?fansi}} for details. Except for \code{\link{strwrap_ctl}} where \code{NA} is treated as the string \code{"NA"}, \code{carry} will cause \code{NA}s in inputs to propagate through the remaining vector elements.} \item{terminate}{TRUE (default) or FALSE whether substrings should have active state closed to avoid it bleeding into other strings they may be prepended onto. This does not stop state from carrying if \code{carry = TRUE}. See the "State Interactions" section of \code{\link[=fansi]{?fansi}} for details.} \item{tabs.as.spaces}{FALSE (default) or TRUE, whether to convert tabs to spaces. This can only be set to TRUE if \code{strip.spaces} is FALSE.} \item{tab.stops}{integer(1:n) indicating position of tab stops to use when converting tabs to spaces. If there are more tabs in a line than defined tab stops the last tab stop is re-used. For the purposes of applying tab stops, each input line is considered a line and the character count begins from the beginning of the input line.} } \value{ Like \code{\link[base:strtrim]{base::strtrim}}, except that \emph{Control Sequences} are treated as zero width. } \description{ These functions are deprecated in favor of the \code{\link{strtrim_ctl}} flavors. } \keyword{internal} fansi/man/dflt_term_cap.Rd0000644000176200001440000000134714213626056015231 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/misc.R \name{dflt_term_cap} \alias{dflt_term_cap} \alias{dflt_css} \title{Default Arg Helper Funs} \usage{ dflt_term_cap() dflt_css() } \value{ character to use as default value for \code{fansi} parameter. } \description{ Terminal capabilities are assumed to include bright and 256 color SGR codes. 24 bit color support is detected based on the \code{COLORTERM} environment variable. } \details{ Default CSS may exceed or fail to cover the interline distance when two lines have background colors. To ensure lines are exactly touching use inline-block, although that has its own issues. Otherwise specify your own CSS. } \seealso{ \code{\link{term_cap_test}}. } fansi/man/set_knit_hooks.Rd0000644000176200001440000001216714213626056015453 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/misc.R \name{set_knit_hooks} \alias{set_knit_hooks} \title{Set an Output Hook Convert Control Sequences to HTML in Rmarkdown} \usage{ set_knit_hooks( hooks, which = "output", proc.fun = function(x, class) html_code_block(to_html(html_esc(x)), class = class), class = sprintf("fansi fansi-\%s", which), style = getOption("fansi.css", dflt_css()), split.nl = FALSE, .test = FALSE ) } \arguments{ \item{hooks}{list, this should the be \code{knitr::knit_hooks} object; we require you pass this to avoid a run-time dependency on \code{knitr}.} \item{which}{character vector with the names of the hooks that should be replaced, defaults to 'output', but can also contain values 'message', 'warning', and 'error'.} \item{proc.fun}{function that will be applied to output that contains CSI SGR sequences. Should accept parameters \code{x} and \code{class}, where \code{x} is the output, and \code{class} is the CSS class that should be applied to the
 blocks the output will be placed in.}

\item{class}{character the CSS class to give the output chunks.  Each type of
output chunk specified in \code{which} will be matched position-wise to the
classes specified here.  This vector should be the same length as \code{which}.}

\item{style}{character a vector of CSS styles; these will be output inside
HTML >STYLE< tags as a side effect.  The default value is designed to
ensure that there is no visible gap in background color with lines with
height 1.5 (as is the default setting in \code{rmarkdown} documents v1.1).}

\item{split.nl}{TRUE or FALSE (default), set to TRUE to split input strings
by any newlines they may contain to avoid any newlines inside SPAN tags
created by \code{\link[=to_html]{to_html()}}.  Some markdown->html renders can be configured
to convert embedded newlines into line breaks, which may lead to a doubling
of line breaks.  With the default \code{proc.fun} the split strings are
recombined by \code{\link[=html_code_block]{html_code_block()}}, but if you provide your own \code{proc.fun}
you'll need to account for the possibility that the character vector it
receives will have a different number of elements than the chunk output.
This argument only has an effect if chunk output contains CSI SGR
sequences.}

\item{.test}{TRUE or FALSE, for internal testing use only.}
}
\value{
named list with the prior output hooks for each of \code{which}.
}
\description{
This is a convenience function designed for use within an \code{rmarkdown}
document.  It overrides the \code{knitr} output hooks by using
\code{knitr::knit_hooks$set}.  It replaces the hooks with ones that convert
\emph{Control Sequences} into HTML.  In addition to replacing the hook functions,
this will output a