From 8c1f806a240429b219c5ef6e85c53771ffb91bc4 Mon Sep 17 00:00:00 2001 From: Ning Xu Date: Wed, 16 Jul 2014 23:46:17 -0400 Subject: [PATCH] Update documents --- .../fig/general_polygon_example.png | Bin 15318 -> 19759 bytes .../doc/Visibility_2/visibility_2.txt | 3 +++ .../Visibility_2/general_polygon_example.cpp | 4 ++-- .../simple_polygon_visibility_2.cpp | 21 +++++++++--------- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/Visibility_2/doc/Visibility_2/fig/general_polygon_example.png b/Visibility_2/doc/Visibility_2/fig/general_polygon_example.png index a58448aa65e8bb9c8895db0756bcc9cc06b44603..2f06e9a7b7406a143f6015510c736096e7fd9835 100644 GIT binary patch literal 19759 zcmZ5|c|6qL_dl8#L^HA^+b~4-tl24RmLf~Cju;Xulf7b?B9ahBgM_js8QY*Rk}&q{ zOYg`;wn8MT-+k%*`Fy{>?;jo>+6w1ui8Pr6{AsY>D6N2uIQG{o5%@j0sK_yV%DK*Vh-oOP}Bp#)Bxr)s{ zngJGn=!A}rj;^l!^noLNqKpK}sr*4NIM{EL?8By=sa4(3uM9SbcV`$dJ-u1#CmEPZ zSmUH4|LlB-{G1(f>-YNO(g3N%%MZcaMVJL%Ft?Gu?RKo*?vtX*8@D#ekHdyqP9fl6 zCoCUlF>w7{38uWxz;Zv^ZKn@E(@#WJzt{R{!w#n9HSf2A>!alGpL-uCa0%F@_p*rG zK>bN;ve>crjcq0{P-(f4UalTvx-t8f!+It^AC0C3Hp~8L`;*X;{Fs57^;qKyfdO_M zSy6Ihby}yvBi-LW**CyqLCH?!xdCyfLirVF=7npAZ@eo@n>)DrY6~kfG5;-FE9BE^ zZ*MQ21)l}fl~onS2Sep1M8&-{eE}!SK9b0b+ui>3$vvc^yQ%ZTqOZ#HOW9z%^|u#9 zV5o{l`%;JYKza1aGd(HXZhg#M_~6-Gh}Zk&U7BD++FP^)qV_iS7ct%(qp!vU$Em$@`)Ex1f@D5cCoW zewG0wI(Wa0ZB4t9;UdGHMkXuIu1j>y?QFdmZqFB_9pya?Ez=Jy)2}ED2}7MtiQ=d| zwm6H?x@W6*BlIX$Thm>wjTW$J`rLez5K?Q!fC-qQZX9Gn{P2D5$NL&>$4g0T;@07{ z%Mn%-2nVde8`d-JW})55qFA&A1h>yhT^>Qw%j&}TVWU_QkP|G@wRPAR%#2LCDhDBVMQ_PFAo=e+@U9Y1oT7=V0H=jIGWr8cu?qfpu zBsSMeJEf(?i3L*{1DpNk5C8EGCOZkpNbkfbma4EP0_VBGdN11jOew!H_e(0&=Q2u% z{K7IcK!lMHCZcc}Z2u9fMXSG+lh!?{nb2lGX;B?AcChxn8i68ld4Lao-Llyz%>-#A zc#z0pKcF0<)2I|IjOl@s91IwkF2QNcEjc%bz#4ZL$;I&-v`b|s&o6@IU1VZH6p@;3 z>bftzFh&{$3n`MuO?#cU&KDPahvOvf+#HM(Yv3eW-Y)RA@-UUYNdi6=2YjqVyn-tLH~#pNVe%^$T8-6!vV(?m ziLVOPIgR2Y3qyV7!Ml{m&Ly^Pf~B=Hk}+q(v2Wddfp}l)`-6;d!=n|#u!x_PV{u}_ zEVO6X0c8_4$stPsU-IKE-oQNV-LC7zYf6Fm+dkZ~FZrBaIpl5@Q?2#H-*cQb`I(eImaA zB1(Th%$e$M)$o#gZ}{uz4I0mZN4}&uMTg6pM>z2T@E^r%rwx-I?8BbQ-k?q0d(9+d zL}b_hoQ8;sLNjimMhDq4#NuJXiX^_|oU#6B?sZg@Vub!I5+D-`);e zb>4-F!Vwuf6HB3dQh8C@Z( zx(H0VT(ArW|Nsa;JdVNLe&1z&ES!t9RZO+g^ou;S!q+-CovA4`2iSe2J`!y4`aV?z<7qeqpIO z6zY@0`VKhRcfIcfyy`Sc9H{B8xnVLlupJ5DxIquozwl9=o>uefIGEN47tsK z?OgB(Cb!;f+z~=-?D~U6qQN5HokrD5YZ>pgwg1Vz*@ulu z+Muz&@ z1Fd`xHsbEUHTzANg=4*DUv|<_G`mNM#;5cp@$vagD}#lQb=)PI3QJi}%!ZSMvv8z!PJSLnE=>!%zGXMN#^~cDx8MSV=_jU2&o3$sqj{;LU z?sN{A%A+zPC(&HI{s1r)&Ttd%V*p_5^~13o7pn)j#*Ste)^% z4S#=A!{kcH(EJSe`VqE6`#_vzkr_0B!;n&WodYuu;>5fF%mfT5vv4%r7cnMksp-1J zM(x9E12f@Zy(eX}88vo2c7w(_n;@nPLtyXh2W-U@oRg+!ez> zU1Cf$LG|s&N0$g5wl-{qPMNepbFmlD|{i@UQAJE1V3JfgJpz3LEV_#*oSCPp4uXGvhFAyS8h z_BIP3!tt_FU)aClgzL~dL0H5%>1&)=I46YZAR1{0l1hXz0i9XbnVCdkO0g4JYO1IA zhS$UZOyW-$(oIkd@wr}q0MF0VX6HE04M#+2Xq~yk zps@yM+7e*y34fblR*aQdM!jfmj(+h~(m6$Iv3MV?Jsy$c_{*aY>NZm#EJPHBzD&whc+DG$@_GPnVOX% zA9PAz1YZe`P+QEH+Zq65xMeu@CfVRp0s{N=&J#z3sX?wEIKrfvzs;Heez{N8cW5H% zN4rlKq7+Z*lcdcLp^drwZ#4TQ8iZr9&j7t1yUpc=I;(@90g_>}VCb#CMvePEc!$ibt+h$(M2RY8J-xLy*t5hvDpkobJRS+AfH zQ7eoWv+}0zI@yHjbhLYKUXp-yLHs^!D}IBfW7U>@)0h~-lz##yEt)GiN#{Nf#@Y$~ z>&6`_(t{QR%7Kt+Hhck0r8F>puhA(1#IA*ZuH*(1D2(WV{qRO3eLKWbvA>NWckx`* zSRYD9SveTcZyFr0e-37Qdm<~v5@}tK2hN_bL9?`^z_Ja9hxDJGhI5PMI;Smre49-Y zaa2wG5u2KNO0K2I3o`86ShM{vjEFLdT$Y3=c1C}o6n`sj>wCoH*jAlTxw1jOF;0oH` zxYUI(RtJb*L?7JKmn+Fq$ums^Vhw@VFP%H*XpnHV}hR;@`KbdR|Ba0+(4YzcVS57r8_rI_IvtN9fRZY?>u!% zWJc3)dI7n(z7t9RVqqLJA$j(Nbb|ky zA@?PE)Yv`1SZno4w>A)%=~D@n2vdvPa@6R#!(n3aRo9#S4yWX3e0x(;7EYij#q>|! zVYTH8!1*RsdxjB(lXm>I2k6t&CnsFP82%9$p=+)@cM>KsvxKb>w&?WoJ2VbK%}$m?Hq0^ zI{51zanr%8*=l$jCLi5n!Uf*tx9nL$7%-g1ruz|JCC*+#EL{r08FOD+iyA{o=#W<} ze3vx{6xD=*#~0wXM*?v1>bSkZa&{0}N2b;s!dS&;bc!mT$>q08UzxinHSm>@%r8~o zO_w627j6KCO@9#lN-Hh%`*D0rsYd*1?r6*k1u0^;J#&oGP+N2fiu02n0XUb60x+ z0{!3{t3i8$28V<1?dB-`eE?23X(HAI+xzGr1Jo8WBYv|P5F=`IZ}uAGn%T*NSR1Ln{^Q@eT#)!HhMzk`7I`Y5NgMtfLJOF+}9UuRPTFC_`k)7GK3Gri(`z$;;)0` z%?Hqjbp>7mWt~xf>m1U@F738Ma-7(&e<3T&_tuwkKFqMc$OQ*UJQn1A-!kH*26{pM z129;#@K%;Rns)7k4LeL0pAJl|`+{_ysUApTHK4_w{=3+uGr9hD@;ufBrTeg2QUF9F zZ`s?Rsm^zw_+U9;7uce8x*BW^lc)a;gyonoCIM)wAiva5ka_M)5UsR$!Ldv*lJRH4 z=>bg^2zr3!nf8lZKCWq9#@q|bQDdAS%C%=b{r>*8;>bmr3neM~sQ}&z*g@-h)EF^p zgC;F`bIn+k)`47)zQd{laLD&XCDQ2UUQz>8@NxCQSh* zm%1xOWhAR|EM)$Yyn6f0-;C5-yzhxLyNd)Qw+0Q;Mt;eg+YX|%Ie&fj>s<37Tj744 z5+^38m}GG(9GmUNeeA+*#lqav*+YlsLD+k5dm5TlTPbl2kVxEjH+fDWeWDP`xZ{#zfh0L98;giIjm#R8JVtr=-)e;Qf8>fm`$jqi+{dF5b|LJdfa0WRq4S=1r zH?EfxSadsSvE=eeq8%yr?VNZYMY=Q|Y+`-sojOD;dbX?2esY21kV}oWLilN5v>dt8 zd2kk*xiZkum)BZcDsYSyLz?tubRS@b#W$;rxIadPUE&1%uI38g<4rM|?)y-1nnji8 z&)FFwIf)K*zJ*MupKFd^*r}5-X$!Mrcuo*09DNd?X@A~JoALwb`RnN&#ae&2@LJ>C zUT|Pyl1HYF$QkoEF@1btl2bY}}W4Cv$W(;2l&B!*bEF{ReYzvryCF#tA*q~804;lRoZBx!77(@pPBV8^_0}7 zz;QuG^IIBNb34y@{@Yad|26Hv5wM6(bAL!LQ!MHWnNyB-4qTY>9#54}7DlRn57kBh z+MZC%&RWU_t>LPj?O{y$yYnhRB8;|S=^5kDLRSSoWMmY0Pn(yeufcJ0>3P|EV({!HYQYf!IM#H4v0&`s88<$F?JO$4l2Ejt{)X&ZNd2^o&|^u^VZ6rww!1W-9HBq> z2Tm>fU|iLg#$Zq}Vs`01Waf)fkqv^t((8^zvSI84P>(*Jj=D-(EO=-FEMP1s_e>`! zfe2)evmmk6&z@kk;JKZoioM3L!D#dSroBsvR?9JP@`b@ZMF%EW%e44YJ;<_1#?I0p z9lCPeSHzGw^ytnV4J2yv8T-*W$bo{7&)D#TJj_DShPAf@WWJ?JEQw<#40gdE|BjXq zc0P70oUR`=E^I=qb|h@paiQQf=wrY3Myt%(90v&x)BDX6)Us}|s`k4KAJwuIU0m&v z(6O3amgfO+1*Pwwgr<$lo{XpgXE$;0wY0SnbVNeWDXz2v@B219Y21=gq6wrZ<|VW~ z!Y{t0(N%J-#CVAuQ@Ek z(SZ%HSKf}9?`{LxO4GtEH?DF zb@>0ZsxlP?zWY%m1KEOTjcZu?2B=}t%Xl$8W~7kkNEAF6w94%u6#m><*A znpx|IKuu!*K@{(`;(6V|vi^5#88GdA?XeVb^kRYApPvJ4t~`;UKfYRAkS9stVWBrn z!6vGcSO}D0_Ti~p(e5TMAA2ew!ct#cEPgKU|2kqzx{$$7_j>&4EtX1$$i7PKRm&+W;vpdL4p!lxaO@`WP#D9b3!yZ29HJ$M7 z$69+iP8b;&NSxXerM)L=`0XK>R{GpMnVlv6=ePXnQ5wUF#OELdH~V(fvN8(|$GZnFkyG+8?ItQ!F8L{EeGLguUfw40zZ+0~R#3$|3B z84EhdI6Q?q2*?+J4yWeR!g)dI@^!`*SAcT;(?Za}?THCkL~!i|Q!@~>`((b$LW|&A zHA>4Tg&hM$>;x4bu$7ffHd!;s!;OH4C%9kv^Ay%%?>Df%lD>`sQ^>#W8@7J z#K=d#`j!EvNXDz9E0f4I0J~whlvGC}m`LCit z8}kT5ZpSN0)^lfcw?D-k)O{yQ6I7HGk|w7CK+s!%pe{xe-3Z;}V2pMz6lMc8r}PV6 zcH4tz^tu&5$3kJb!JmM*J`Q^a>I;Z)?Fb`)#Kr9ffVPgU`jG8;?Rx(0XZ{^9H14pZ zEisyKU+5y{5yIAesHLx3FGeA1atfNIyt>M(e8Hb%&B}X+MV3d(?pg*3yGrJ&!c9x78r; z$wEpY=?nUxic-@d@I#ECfpB+A0*+VsDj#UhVU9-4`WWS?J?hoUi*Y?t1c-~q?N=Xe zD@Nomt{B*A6n21aW42JYpHX9ia-?i#dm6blZG)!a{c@`T0iw-K9aF>-ZId%eY9_B! z|kMzY2QUdiB>+|))DXRx|3v7J|(n9bSYk#mFzn%^p@H{CDEI!8PwqS$retlFQ% zrwIB}B;X-5+}LUmoGem%Kj&ncvVaz-X*EcH=B9(1E#1d4AVZW!f@UVg#q;SC6G-|& z`+$BwXoJdFaB-j&##Pfjo!LCYi*GzP{ZE>c&Re|sZ<)x~oqVr;9yjR79EQgGxkDj+!dDX1re$UG5b4T37ta zF9BN3=Dgd}PxC&RJmlFrz%tN9Hf>N~`TjcND(R`;tdR8^CuqF`jO$-}zS)K(Zd{lX z_V*#>&yBeR*wYp-5;tg1>2t>vD%fu!b_7U2r2)5-5yurL-)G(dZdQ+vj`zUp~~h zkmKUn)g(qE#biRK!N#jkWT!f8_)`7TRqwbNCSSGdLDOW^i7te&I+8!lGvM2E=lqjI z^>*cjOm!rWY?LA&;lq?z>Mr`3YeCNCgpDl_#(Bh()z}o~g5) zl_ah5EU#JmYp$mLjFBJ!HmRzPxWCv)b`Z6$@tg zQpTs}V({R=H=GKiph#aYU5KE!Cp{Lp^5Ub3V2Sss5DJ{^B6fwjyXKw7#o)s?9gF~Z zgG=L%1Ms}c^8!8jj7{0ubtPUZ zjDJ8`E4tJ90H6ttyNhS%*3^EK>~9c@7q^+4r`}knr^U(NypzeF$fJgi9J}eaHMcfo z_0NciM2-E#fdS=36%K0IpnUNKBgB%e=hn!gu(f!$bUP1ya8PowynpQldUgJZ;+cJS zLK_TFw3XT94cbasWtt(8{6zkb7&zA2mJzwDNm41cX|rtW%M({lUVr{>-Nz(cidLB; z?3JMuNq*?y+x7@f-Z?9&L)I$wlR$!NZT2R(oxERE%c9qxuRp&FtgVaux%TbL(A>{n zx81hLR6Dwxhbq&p7r ze`zN(f`-5s4+Ws~;~VS>YAkGlY440UAM5It(xU`h^Yv)6OkF(7@=8hCWBUGiW7?6)^ zC*GFs$J}qXakDI{)FnATQofy}cgr?ozP`$ycZ(!L@5djP!E&4edHIntMZbLzCGHDO`!Jt6 z>fz!n zFTYC%xOa6Md24vp7WlawFNF2}tc`QrJ^yM0_a{5#{{8!(-rU?I%gELw>4akM zGc06&zsF8+Op=Sfa1ybEx^Y(ox^IiQiVbahp?9lFjP_?%>qFY@HI*@253RGmm;u|8 z;TMCGxlX}UW3G}6esJkcUNubS!RzVWRN|tKn6$sJ;-r6${4y10v!`ZIVCZ^`!TltR;KiZQ&T-}N{-{* z4k(WqojL$=3}gElys%h2&6hlM@mpVwn4IRX?d6EpHF5^Y{BV58Yfl7nq*!}jD zzkXT>TIQR+9@5Boe0OXR*O2sU=40lPd)I}r-`%F9LNI3Z{~vSHALI13D<#Z=b$*JGXip86B@;~2F2bo_hT%V|V9%CW^uchp>@6U5F;^u!&Ty`n` z_+)K9aQ!T4F1(ho{E5k~pK+(V3)BH85pdkKLrXpkC5=%3S4P~KI#^zb^v56dI{u7v z_&e$!{9{+;D1Y`zw^8h}Q^Qz3Ec?ij;WGjVy04!lV#(JcC~OR4h-}Z5Xl+KL0YChq zkwH>D5ICUBSIb0oo`hL(fCTl>QK8#E!BZMiG#iWEs^$9a1X69?WZA{h*F$Ur${DI` zROj@j!3k?GNef@L@BG$pT!>E#PGFt<({b}p)NmBXR((+3ag;&Pytc12WurzX?y02B ztL43u#|U3qZ=294p-ej8Fa-3ij1@}l)TgcLEQjcsmz`^oMw@KP8Kkr%f3PGK1PFb) zC1rfC-MZ=%Ax5w~N5}kwWPQ;+hi$@V%p3#vg}GnOOHu)ZUp^k~?%gJ|>NRD|{p}Do zEWWGzo3Y!cMAI>iVR7G~<0DUTCm;)A3D*9W-1p8cx!TO<3D z9#Aws5_3wy&0r>;G$Kkfs%QeauXD=lk%qZG1GVxOZcV4p`tWvgO*jU8f0H8d1<91x zJwx&z>GllRJW|px3=mW0VGpQ!_7r*WiNk~a@>myBgJPBzGJlA!QNq^K1;ccOLOIbz z*I3I~ghg>U>Py|?@g;B@ts#jcXh<$!nFaw*X>zM6sLJc+&ZbWA^I6}oHvW0t!Tq#3 z`Y*Kl_#v>DI|CFk!Wh3@V{}oVc6za|N0(;O&+;a(>lDX=M_t{;#=E|+0585Lgy~_+ zLXA3JTaDy*8a}cSI(jE#>&#z+eK*+{dDbKpJokb`trRnX>kFAO*^g?iKc3!vBzM_A z#cyIAIK4UE1e`~({S6nbh0OJ zJsKk++t60N7HnI1$w9MXF}cZm}u&eM!Cby8HpdsnNOY&GQE zK97%8mfI%9cGCmN>!D|C9)QfbqQ@>?QPL3jG2!Y|3AU@AQ3pgQz8KS@BoV!gW;EBs zG!}EjE0}P)|3gPdQN1o4@!a!znffA)6g~tC9Ok~zuOV? zUo^oS{WKwz#4&1mP-(dK(uma8ciu6hMO^jHoFu*7ujf|`#Q8Bo4#58X-kK0+^N+%V zZ#;8St@N6T5k9yh)#K(IF#U-4+aFL7{+1c|HVc0YBvAUoucPG_r^UmLeT8R`lr3}y zl)a;5U%0mkrYe^RrqX>~{2W6{+gtB9X=;oHkzu0zzYk@S&RKxRfeLdqpC7{9Z_PxF zUON#mL`_!>*9H$_g%Y~Dol-m2KLF;z8qj+YzAk)$-HR1O$QgScKSy*28D>b5I9A}I zp5QjB_!XW>sy#Zq5(z>~fai{gK51l zYUhCaT6UmXmLVxa_tCbV^O0&Qfh#OZ&AbnjP*{CD9<6ZdH+c|J?;=F^MD&b z`?mP8SVe=1n?>C^t?5CZZH~O!X{B|)NV*?8Zb7G?AGH4>s)I8mmJ!j-;*(fdTtF6It#fp#L&3JJ3z_H6RtHsjOvm!sO}AgR0k-`~S(Q;`3@7O--mV>0w9Q`TCFz?j3q3a>;@ zUeRU%v8;=~xuHt#vRp^}*xkb=ON2{j8dq^iR&U^k7~>2I7`bO z*s?Mwb{M;Jhkha#es&HBemt@Wl^_y66$ulLqJOy~C+# z*nStg_PcTsE3e)_yWFl+;2jLBu02fEK64K>x`-}Lms{-BZP?vi?`r+{b)oR_?-{-( z{T#amub#K}_7?QQmX;0xmiyiysB`dF5GI`Y{lS7_KhzkfbhpFF+o)cRxwAtJuGxZ1 z^^VuWL-Akc=YM2}Oeeq0o{y;c=nL{_Y8`x?C|#nh)dSY2=2m^mEQd{bt?aZcP7SLA z+21c1s4(4{9DaO~_+bXH(f+H&UR~j4DH#O*u%6<$@M*wP=BfpPr(|zoYWxAn9y&ar zymJjC7!+gx&a?#VBFM~@5Bte6$rF3IaOZ@b0tGt%Q zI^?PMw7m}*Nhomn(*tpaa(f2!Oq#GA&ty=sI9?f?;TeK4&Pgl6=3wv1t0&mvC}U18 zQ1v=s!GN$`2@3x~{*J3@pI!k$pZkqCu7rjCd0$RystZe?b&Gxh1y@A)pmzixJ;07q zFLznbZ1WIU8sLOJt$Tb$LNL)eH)S=p&aLkGFi7j`(w7~GI|rg&W`RSA$HJA@vJ8$S zGM?W7AraUjM74-Yd=`@+C z%KH)>FM;N)O745fh+HDWh5(dKqqY}#vpD^8?L)UIB``?`dh_TE!mMfG{sb&uDUt($@r-Z;m6!6$wzem%oQ zy-8OS>}1CQB*IgU&olfY+a`(9>J?tu=TdOMpt4RLO?a=trcIs0hP(o+)GAF&No2<< z8&ph;R`w`#Y(pv&d)n{z^UEjqk?y>~Q~pPB>+yLHa`-XRs6OMmZnc^+bF;u>VA6aU zFFG4={|A(?ITCnO2fls;KW<0Klv}J!akeKWf2R2!*$T?*c5`jOjC9ZNVHYKF>zx_k zsh!qpO3U-5k{I{eDzE1TDXQQ!1sxP{!!>)jY`z9={0Lzdxzkrka{i8s$(}lp5plnd zTZOD~UH+-4&bqua`8Mgo@sXm=M1RN2sh<9zi^)TppIzc#YYcOV0CcUW8$1%=0yZ~M zIee@`6Kt;MS@BEPjkVv!F6xoj)_F5XBey{*8NSYgkEiootGf4ojH({OJ=)@2$k?-|EE{yu~*Px)p?T#;^}4WAWfN_Ek0I zG{&AMfV?cXI4&_}b?;R5W05~UPJjAj^7>mFFX3!d8jIZy2BM$e|?j9sa6K-1b<{Wn1r6W{61Gdy#5%|G5U zcjfo*RS{1k8NJG^Uky!KJD*a?k-tW8)?*)b=>ku9#@PRiekd_|(%aKRl@T05HNAPa z%0{ZQ;Xb@y_+#LDp9*+DRp3hy9A{v+;@Ne?Y?Gw7kfTHzovz<$Xo}d41-CExdYZdq zk98hAZrbe{jQkO+yuG~@srP3l;rjFGqOlv6T_#!T=Tv4!n&k7lK`IO|U(>%jlhzGM z{>%f%C8I`vK_upuvSjBur5dkoDG{Xf`f**~)mOFGUhlN9v`6l?vutl~_jcui4Ddtj+I>? z;z|M?Kt!)>x6RazUb*9L@dauBM#xX%t7&fr39yXgmK$ui9MtG5f3Sm)Ug$y9~LjJ=)HKm$JI+oRgmTl4+ zJxfyH4AE=?+M~Oq+9oTu+sy^kmX$v6ydE+lyIgWrGpT~M;_e(EeBWt6dG%47G(p1y zv6NF=_T5yezTq;LP3UP_X(#lB_eLt)I=WXqfFu5yx_h)_r zv`gDwp90WF8)g$qn7hVu$p1H}Yc&M$HYqj)1nBPd#+n?(xU$w317Da5;y?ZnA0-V* zRN9kx>31Mh2KPS8iOB(XLQcc;D|DY+2AHq-11efJMvLf!dkh(Qqej;N+qw!o7*L<< zA%mmbQTnCOoL*O11Y81mi&sAG$tlE~#0cM>I51gh9HQ=T#t6S|g{n6>&m2L2;zy^6&!s=4?@Nu?DtBw@!$H6st$juhs zIlVJ>BQLTNG4 z%kzj6$0l3snUYklLbD};*%lrsaOd3C{|xg8BRstdTqfWVs!Z3a@0Ty{5yp$ON@BUc&7dn> zTofT=eExb!#S=9*!Ii&jg|FY&pm~I|$i|<{HDa>Xrq0yIsD?qiXdN3|;3t3JgC|_l z3(($=FJU$O22WVzRD+n9%MN7NXd3dh#CZ#oC{yqxZmd3cQbpW~d!ozU5(WQsMYUbO z@$5aE(F>LrN-(<4B5-LvA=Z17X{f*dTF{uNS+8Hamebg`LfwRg9~Q+(CQUdr!#rp3 zt)HI9zM2MQ0!X;0_?a{(`)vIs-4gNcBx({ZoA+OYt=|UkA?9`Sxa5ifon(3av~s0- z)bBmzJqn}hP{rzF?*2>u%eNrycc1W*(b~K*bxtHb&=&Z=z>~*oZ);0x%WP>L$6essFK#ynFntupSnr*_?L$a}pVw** z-bmQ}xC=~6;dZk;6MnDVkkr%|+*(d*Qvk8%at9P^2w@|QgEqvrDqizGPI#jwst+w2 zuQh7(PqKHfd`aD27s}679^Szr(gRKv@X`cYc2dZqit+_A{#aH(84q9fW_Sl;L zZQBd+^?6XUF|joJrxS5?|iI5}Lt9O;N-Q zl6QquZI9rCN7>E9mk;V`r+*OUJ_4$Ia55E>*=Q#FEEP@PkNELOKhETQ-M=y2mohmS z26mLWdXTkr$9dB3Q+o89*3=LA%b%~FFhvP(r@1Lr;#rvx@Vz-^IPDka=sknLf<$r8 zTf7}D)O~F03t}LVaeq;*=66?jb|KhCkcH#(=kCX!4=GiZo@Npi#)z)CtGWiPXn-?! zp4*Tg@ZlXas#qV`goj2DZr8;mR&BSnDw6}!o6(xe>RVYLMGLqx?EM9qumIlcvrK?B z>QGNkw)C8NOk)=A&!kX3gRS8bQgtI9pSSQf>0x(5{j-duFLSE>O)<#}sTu97pdLa3YoeQ@Wf*w}9j~odhQoh=+u(+nS9@i;`KlqTea|UQBD8fHh0+VHy3cUtV;l^4Ai>P;JJ;8B_&NkN|BcQO_|s?T zbX`cz-+Ml!JN0`z zX^z`-bWUivqojZWyJWM6W|pYx`;*PBQ1hO#T^RbeM>Xy2xW<{NHWhTfKa=pD{Qufo zasA{Z23QAW*=)*T^}NLvaFOuEkI0%4NXVG)I(U;=T#8um@WHknTiBI_OeEa~ow#)r znoz^T^+9q}tjVbBzqmCIOw9=h)0llTV>bt{Aj-GrsGFew0phxZEWrK6Gz3ij^aDJ0 zh5&(#-sTmfnId$k!NAR{9GNc5fbn*asXBhp0tfIaDT-~UX$0+;p+)TJ>UMbwOim{2 zp^AnCXgs!H6Jh}ko}6m=Ta9y6=cD}{uR+&-QvMdqA3)1p4)T6sLTu0)-Cjr?Yew$} zc9*(mcO?V)wm_?eV&<n=iHxPTPOL7z!N$56j?0b!plU4 zgoXQwFJ3M-XhXC9hYe=Dnw$i0z7iZ~1@kS3kN{n>JH{`6l}}O(*<*o~86+)8My^0F zrJ%uN^qJP^d?490h~Cw$1ECnM`@r-*MmMmdn;qXK)nSu5R5gfQ$+GlrE2yhK2D`z2 zIhm^jI>;y!AJM@K{`G%@;p>|_Ik5ey=9Xq!Q#T-sS@`iJ5MBV*swww@_j1Svd;$a| z-}SbSR^a5jA+T}E3fm}l0J0*gcVFMq3MV{oh)Dyg4+g`-K14lJf%%Gp#qye``4;Az zi~_XYV_-F1-Tu&Ub4#{qc6=F7taqDBN0*=u)qb)?eC~b5NPxw@q=MIf1yNF14V6U^ zN#LYIWlLXl^rQWN_CaxW54WtcDU^?pV!yA)bLyiWfL{7h9NH^0$eNkG(5Uv+bb!{) z0nH~sJa?UusUH~O{X3O4@y^=Ne8zYa&xDCG((3e06kpLB2lFpU2?cu+C!d`3NBG18 ziO*;Yef)e$6%rweP>mP5Jm!~IuYClx8GN{e8+-&pUcu2KM2QWEOy3h};}#I03Xo#5 z!#SUXh_e8$<(d1a1osW@^gkgo0xxYur`tn_@d&%mAFrPcR55a?Hqrh{IH9{9!Y;F9 z3Z(On%CO5a9nT(c!M1U+_`wsVSkN4IVUf|vG2_QpVQA|yT`fM-b zoFQk=2jWs8lwihkxJ2ozf({NBOKJt`7m#W}004Wg{wv|>AOXA|84k{KQRyR?;r(CG z(rlZfZ$icyWXW-X9gk(LAeK|B7KJhAAdKm1!GWvIWe5mLiR>y|OgDkMJs+F?+YZ=T zX}6>#3#fdBB=6IjaD@!(s_EAg;A;U{K(n9Xwwm0h(0-pd)!x$+TC?XfNCM`-F;_*B zv>6%U57EGU1b4oXMs%omR@{q$38w?44=caB#0p-SBmoIi@A7mjR*-5CVFDFcwMDvA z=3f~mLIt+W|H|Or;Yq4^qD3so`nfiqc_doV?=x-vZ8<77ix>9d0m#L`zr$Vf6R6N< zP_V#TrUiM;g)uXnn=`4O$#@fOVEV~GC)0vf+|Xw~Dq?^Tp7Z3rE|I@S)<4c+7YmlJ zQ7GVLL%^7~jjf>%s6+s}5k``}gQ+V1?2IHClDrmV`&;hu5kJh)nIZd%@aCTr1^HSi zm-})5mhN!Euckl0eF{2_Ng-YV0pRsQ>XJrF=mGF47JU@Hhi?$f*y@=a+`qdt*4E$u z61M-)2YEhvHRS3pWfuIhks=)^!5MNP!LmuH@ zkZKmZm#W8p1>%;0=CDb}TG7zf*O2p=<2rj|tHzgdD3mXdBfcJMBZ0T+;e3jt;l<(JbZ$aCvhrh2T3WpImrdkY1BMRz#X1%gc+C5*&2Ylp08tJaFY`blnZy7`> z?j=ef(PU-Be49yBQ*a6BNzZXq z@^*e&nzci`-LPGE09|+zyp_caw8{YcDS9>-8UQRFJRGxL;GO=ovC*gFC-&og#Vuv6 z`D5U-J$NcCUiMk6Fy_y0uS3Gn7_IyCfU?s;f4*}sJ@#I}gqC_$;(`C(%%x45zvdJa zyn)Wn^!nY>c#!lXnxbzAo~ZkG${TRc^A=7?6~KpgCz@O=6x3Hw_sVjlqcQz~vv0ks zKA1L89?Je{ShT6M^*Dk`Gxe88Ai)bP5BEL|gonepeZ5H7)iPblW)vA))%`}pF_42a9HXdJ`SdXK0V4Ptam3Bz{yNm(8)rno z4cV1v-n>uJo>p*-c-3SZon3zFdCXm~F~sF`x^BFe@K-lc?a$9cscFRyGx^nOiWBxU+=73eJK-}?y~5ZS=E-VRvK%d?w#-Vi1`5D zhZ?K)i&%Tw?RJqD;L{gid=Qgx!lgx|+Q96`KRunF=vLJl%4%&`beI|Ap`>%35hZ@CkINV=ur9+WUJ%E2c225r{b^?rYgSM1Ug;*7O!SG(=lNg|HEHJiBIB}HzdhXEis znYL#^sNCe{pB_I8^?ohXD|R*A=S*=SjD=^KVN9f2TNk<~Xys{|uSp(z3Sq#D!P0pL z7ss_z%=j?r{=QDMSA~_D>Sru77G~`lBAz}3-ynjt4k){`+w|_ep1XsrWWfkDt@?oQ zIH;EZ!!d*Vl~i)W9gklrzZv_gvRGE_v4@OShfl5z)QXU@YQ8hzY&~ynFO|Wwu2?%% zuKTD{-4(v)1kMVsNNb@>GA)Tm(FoX7;K1yU_`u$ zzxevuhjQK#FH2m$){2tUvk3BKE7_;S6t2;2}sltVhfY z-O`*Z{Bm0ijPpPRufqavrbQQK?-Xx8q*E`KHr>em^kz<(_KkbpKIwE9txO4D=FzgV z`=N(ASn+|@10Q-K_pE36wc^P(O?D#cC3KIjNJyt zbHUNl7zNztx;3J!3{*}wIEVue63{#2198a$G2oUR(Dp1yAlos{W;kUl;lZV0QNI+p z+Yc-nAj#Nit2EK!O;_YPh21UZeJ%o5in4~jf*3xF!()R_XX@TBC+`S@mfps(gIypH z0X#y)*bbB^fYI9pbU{~-V=$Bp+%67s3NXzq=wLXs=7fX^u>J>eKm2E8b6QvT@VWS8 Q;2~!Wp00i_>zopr03T@3Hvj+t literal 15318 zcmb9Bby(Ef_W%lmD54%z#5fKmFcxXR&>=`kiAX7-(%m493L-J2gdizOI<$04O9;{} zDcv1+eMUIn-}~ObF3&TMvRQlW)wTC{K9mt7J&8I=KtMn$A%6c60l^Vg0s_Kik|VI9 z8)wi1{}5RUNjxSYA?Y2K9fDuaT8SuI$(!m}**>?>CXm;&wzAT;(0tu;f`H%(fyDiL zk6-r8_S-$Xu$sTWNcf82#B+&SYK+Qz5kak+N9E3+_(t+JI_CA2>~|N)k`mu3r(gP2 zkz=4Hc(K?xO)|zS@2p_MxnucHPG%-PdvsIsT;_yUbKTOmrWLP_Okj|u&Suk(?bVv% zv9q)v+#HwGq9*j^l$5R$5qwISGFSr$j4ul0RL$vAs~Q{ zAc_$G5vM00KtBKP%`fdY$5y{S&1JcHb65^AJo7Ex8Do_UVbX6;ZpWz=zC^((Vb8iV zwa@TnXBTk4Seg7eU$V_|<|v#j+}_c_@+4btdu^7MmS}2K(?Nb}-^!fdWCXWF?d&#J{#8owc-r7Ou%g71=G1JIog=IcwMW_Sg97_FH!r2cmC!hwoz0fmaaNJ(6S8oyl(4F*8`|vav8+?>#m) z=CV;~n5D~F1d>8aB-`qt3*mp)q{CPCw&$1sk)S77h;DVA%WCE?T&ic}b1|&)ny9GQ zQgxU;x*0kpOn*7TTBhUmmM+07%fkNU@kSo&smBim~W?o)imTvRgw{MrkRVWArm*0nmUcY)(TU-0{moFXO zbP|E17D`-R@x-UGTA&6R9vhD;+T^R~ejN@Ew&JVZ}ora>fn zm}X+Dd-v{5aXhS73sypLvps5kXD$YI&L&(;Y&FHPz+@Y2_myqw{KbpadGsI@M};)P z$SqRd1~tBmqNLO)I~KpLRC+8yjQ$j{l|j@P&a3(iR?CM6l=F9KwO);{LljGes{7aW zK8jF~{1@qDQL@q;gW*z(csU*?YBYy1@`&v4Ajv1f=j)9k& z`+K{q1$&9@jJ66J7J6v;YO2-gPQUBTJtPF^q@Qr|l!cOCj$9isR!tQkO0Ynl+smih z^zqH{Ghe=Z0Us-_%T)?3talV(3p8(z0FltJ4Y~5&z2_Iw=WosW+%y zC;_wlOK=Rexjw;((bzsmHyGP zy%6T7-*g(ocemHi(C`=K?;F#P;ZBwwYNSgw3k9guVH;)%Tn*2(Yb1LvkTNoc%M?6~ zJ&#vim%JrKi`_1Hk&LYZv(FK3w!qtS?;uhNHyR60C;+Gz0pP69qvy8;TZvfsL>QSX z5bufCf#9JIX6X6&_-JWqZ{IctQ^(Gyv*YS4ls;VZ5WO>J7bHqxR8b1TmIl!>`LJ;w z9&vn+J!Ux>0NoKlJhx2E^8i@#9??NI7h7P4imvGojw41aTwHd;74A=SO;$fm%kn`G zblQ?a-5qc0HHqjSrP$_ZOCSVWblOU+VeUmQ<-T zRK!q(XTz`k1yz_ttfh}k|EQo|I9tqe{W>C@fVD%WzJFFA;?B_tF08i#ue*ha_X^!t zP|qf3ze3Kf*6Bm_n6ViNCUm5NK%D>E8}}Ucj^mAT<-grtqoboLSvtnO-;AezCE4$6 zHZt1=|8deok3?|*6(l{F7}KQZ)bV7X(qc%&_dY})@U1QWk9 zhPyLz=D@`DWWlJ^H*fdnM9C*e9hzUvZ6Z*?u}5>s8(W6t5J>U**Q*YLa|lBU8Kk%l zbQMGR{}*8TYfHJyz`Q*V&HIS9G7)#0i#42jlKjvEkA6>wQ;#XnCEr>+RPer!k>JFv z>6vVh%^Y6dAR7T>QDF!uZiBs$pFPgd*yO7^>O*jI)HVb4mx1AaIgCg6Nr7{Gk;qRG@)xFW z9wS3GyApqBh0Q6jne))tvm@XWcUtFh(|Z%?g_eLgCudnS}*Hpv?Rz!X_*U{kNn7OB2E4 zKxzP(g;7UME&$#AZ}Ba%*jfno`t!ip zo)L!Vff4t26vJZwf4(e~bsv1-pBuKpDq9BFSUHg}GW1qCJQCO$hJ$xsB&G(k*jhdzA&`Bz}$ zE!gSIVe|=Wwg8Inqylk%hccH^gt)4sm7nrM=D=lL^;5eb%v1t0n?srZc#c#TqQL%) z)qzaH%Hj}YnScz*C5XE`yD<%FxSI!RC_S_{&JJV1Zw4$K#%s8=H}+Q%~7PJq+>KFL;9H8Ylle14sD%3LmMPu3AXMFsWBZ%%GeA;SZaeM z8J@!mcPJ7Ip7}w2j=}QrL0RQ$i!l+LSbf8u+ov#G_FpVqxQi?Y{{hN%sSm0`0Zqsr z1N`dCfU}ABAf`FLKvIh5LqG|E2=AX)Bu?vrROhTZ?LRsm*iTm}gi*Tpg$)0#Bv=Xo zefL0VGW>t@%WKQ4*RMB+vl~J(mrszfZW3db$xrbCT_G;c`Cb^rdjhi5(1BOUjQWF_ z{syE6Uhq1LGXakIy8=?sJvmNMe)RvQ@C>I;nj9aWAN)>%QH~ZtBhd0V?%O^l%EPkcE5~((Mkd-ty(7TylybL{3s-<5)4t_xXwNF9xa{vkn z>RmxZAZAZRgw({?zsbd@>I1~d`%uf9>5X2%LwVf=s1sl>LoKz8cuZ$>F)_;zAfsOP z5XIs%3y+x*Lcy29j>=d$`hRV;;uU$1Og@J`-Lz=2dT)1|s%uqD8g?9m9S{F@2nppq zBo{}JNcRF*==waa!5Mmv2sC3+$nzm;Vw8GOyV@wv0Nwec9^M~;OB${*|1yBd$RQnJ8{-V zAl{{=rHu{G<#9gRXV?Ir52E}aN<(^O0@6tool$MPDZsG+MouV(Fp_n^ZXz-;Fi>NEt82-iIf4gM@z`asOOmtcYJ;NXKTc}pr8O|EHFG-k8+sP?{HCm z{5V^)CiLr*%l%2OK8U`88rzV5(wEq(Q6a6b-B#zTKPTHsyj4ybf+-tzq;{9O>@N&g z+M!Aop3E`4ykf2we*y{jldp-b_Vg3`6h?tA@sz(-f&J;)B!CSq#4!2`2}?$~47@A! z{=wFI5;1c51|f9Z z#;=0~96A3iKgAPS_avu8>H8sO6V41xUPr15#K8z|YX;d$0Vu=6{}rJ`{c&>`Kp9lg zo4qEbz@)0?-?@6#9Vg%%)S$LL*Ke4ABaoA=6?r?2R*)Xr?OKbgj4-qmUT2Xr7;fKQ1YNL%dW+pdm7hYj=-19$D3Qg9 zg9daFvuU|=7J>k1yEGa5)^nJ5hCuO@qPTTE+hhGXkpyF=uTt*DMQW|5GLYo z+=ROF@p%bK)a5+h7f^=1M*nn`IqocFdx06D%BKQ>41_w$i4F2n86G95_lTJ8l?KVb zrU%onYCoFhwiYkdIs2ti2}v6Bo zw7H%ZQ#Dlv#sa6^5K_EYO|iW`pD^wBZPcQ(F@obMH~#d`K0H&MX*9BLasuQ*G6IbZ zwimdNzx-1Jbk(W=Q;c94$NYdPpBlb-!E|}u+b}4DSzcOVqPVp5=V`xjz!<7-p9D>P zz$ZPJ#qik9{b<~^H8X1n3_RC_{RfoMAu4l^h`V@Gd5*#2JWQ|V!CHBowye|#a_#Kw zI0hXpt*zOkRWy-C+2Saw&DrCC$F>E3|}|FC~}Nf5ehXT~=cN1!9~zQp=v+Rxc$ zcI)N*fY0jm;9Tox$r01d+|u0#qi3{g{b?^>z8nbFOdyeLFj%s3sdVF5v_|EP5nr7j zVdZUl7j35QL$OA5{=x;m-4zX&)f5$J(SQw|<|w{rWdss|=p^as4y9au^7441HyJ7u z(HFBf$+wTMsX^xI%hYawfu|j6%Wf=~*-v0^_=~h@j&W~Cc*;capoCHZ?lKIHCiHWL|9UcSc4ng)w7@HFnp9@h64wYkC((_3K8 zsODl7929idV)TbZ5cNm4KROM?%MkxzcXB-1Wp8Jqp}{-aX${xXvT&Tnv45E~%6ZF{ z`H7?TP+64X*RBs7wRz?vA*>oQ8A@5{^4B4>ULN0^;80Q!k^LB^S7p1m+&sus=012>$F!w5l+4V-pR}CiR1y_;5{nS(|iNFHuAk!9!>oPMG zoMx)Rrj!>hWI1k5pApy*f`M$bJyGq5@5|Hi0jvLafGa90x+J)wC@;UfF~X{9*%(jF zXRo{>{Lb?aDCFUEhw)X3`sQYFX{V>f(i2Gvn#Qn<-~G0o&WlyY9oF~0##~7m=+Uc4ePj(^a(?FX*k78mNwD<}IP+`5t7(ll@QVrWB^(rX-&r&T2E?d^qx zgut7|8zUk!~Q* zUT7EL_<=pcV<+hBRQ_75qB1RlO`l=5*t&|(w6*q*FO2}d%}m#^Qx{X8=K889zP-uF z=&)4Rm^;Wn7#DeIDk+r-Ldim`@chx^wm+JiS9X|{(rBv|l{&JgTjIWbQ5&d|V>F>$ zt_`#4-j5}z`xgeA)b6Y-Pjd_|$d;dnJDCSkQjSY?*J&IV?nS)~=)gIREeuy&m88z9 zktNvNywuj}`wvA(SH9(AV`J(2-7kqKYDoU zw=)YxyVd=>)*&%KS1sNh+ zanwqE@m)pPowmN38$zwJps?XekNjIgC{L&^uRV~I+@IE1hdZF}ax|+hCgFoD^Kqdr zJ2~uMB~O|-EI;@1U-|UcfL=g)&8N24>u-tWSevrW|HMC)IoYthef@p)%A#Y&7we}= zekt{F_D&^RH0NpmctIx}pbREl&@8aOG~!npCE$`lB(RpnG1!^eqdBhb9g=fzmPOs6 zW&H9Jro@xdcL;4HEcey&P(^jo#9q^I9H?!3XJB%5m7{)K@}H4tsP z-IDCz#C~s$p{(b?s2j=JZ6RkPbyU5uJI znUvSHx=@+h7{#}fl%TjA{3#gjdweh79j|adbv{1}bLTketgqV1HT(#mvf`n?dN5q((ay+ID?ckh~b&@?rm5O5ARm{?KzGAzntNi;y zo)@!LA7K)1zq?BQ=5^1Kvg5CLm*{sJoj76H*))BM)S^k7LK>Hyxjne&+*{AJyZ;LC zdiwhAO{Jv8efngFiVskSdzZCp3e%bHEDxN(7fv9KW`Cn+ZT5I_au1fm*7C*gUz3x{ z)RI|Xvsql0<314G%U>VkJ=rSmkdu=GrNjWJI*QL>a!WHEu0pXCgFV@QidR;OQqoG+ zluE<-&4$iWO9~E>CHK=u?P#k!P9s0X@v)k_ zxn*P%r*DK51yIFtaol_-5(x+>bda|IFYveDw7h4D(&=@5zS&)>;k`3HZMPrEHNJ0G z5*5BxSB)+0&o!NHi50ecu=nAPc0KeKT$Sd3 znc5GD(*bJ2QKj3SKF zMYy*M!x;DU>_kG}Ev~;A#@A|cCEb2vJI05@-Vlsl~Y4zu1UAE+*!DLJ;s(^U1V>Q_l z`_v>~dv&VaYWF84kHzme5(z`Z(T-$76a3+>u1R+$bSonhRWY?nDlX4 zjEci4zj*%}k4;0-X@`2HDb{2GU>)_rjQu9-^0ItYa8CFuVk-ni0sN(Hb=r!4cBQoig8#BM;r;k0CBf3R4Tq z4El+_c`ED$+WxH{cS~bQlJFChA}E#Sy8_bg!1fh4uUHJ#$S?d@ZM@ApQ7BzbJ9EhZw*+!v`@ zn5`>7F$is~^^&J3$;!$&M-iQ42kb0>-F9!s-FjNxVIp!jIM}$xH!>`YlO5CXqy4$G zbUymCnoW0A6yFHA14^3jgI28U(tik#`_{OI7C2XWHIz`R6P7tx1KGfsz}7ElwPU;64t23_TLFd;V7}+kMIycRU;==qV4RhM}1@N`iRztR&r&oINWXL9Z zt}j2{Wxv6xId=RD*#|8VDWN6zAV7HwYt-#3v%_yuRh4hD{vka*^WK}S>Z&T_?MJtU zccTG&#Kot&gD^2!SMEkea->AR5sO&jAmP6cjMyXtn7c;$CG_P-vN4m|1cN3C_~SPiOFj5 z{TRR%Zws=nh$E?E)b-`bG(f4~2qWEXM&U(FN=idR;iOGMO?Ag*f8lBb!8I@cB8#Cs zddV*V?x+?OLou1U*!udFjg64Xx2xE9?`|2L`V|I59lcK$7*13}rNWA30ynncv6!N~ zQ=-#Qix3Rt@|~u%)yiNy2h;N$2-$VCSzu)6PKt;}QF6}JKF~+Q6<5P-?M<%t5e_BU zY+seqF!Z9TWYp9qv3kj^RwiojFOA)i1DhPr@cwZJ|{lOb`Hkz*0!U(mWlDB zgS%VD{Qmu^ludc=F18j;F6V}}{FO&<-X;!H{Eq&BtcRyPKf+lmH-rKyF>~TAYsPHPfp5F=En*O#d})`#=Yuf7r)Fu zhk$5pXQyvtqX_Tb^!1(P(?_wLouhRdPMJAdA@u1&d0~c z%j@K+Q{Kq%#XCr&uC_LBcdgLSz@AlY%drzjcF}2^^gOKsvxf6}%)Qo*uWN%97EO8d z!>zTc#8!%f0o#i;)!~w%O(E}h3SIVP=tWl`EZilF>(BbSJNc=ZRsA1t??O8NV=29A ze{7UOLPJMKwI(Je-iM4|x}au}pD8JM>eMOL3+J`+RqaGX^2^JOg@t=XMc<0tzyJOF z_xoaEwtrf$vasObMG6`Ir{rV2qLPxpTGtZuQ=7(!+_i$~bIhB4R2puhAI-&Hd=6NI zSm7jw8<1^NQQ2o<=HtXC^CiuAf4ckx^pAMhT|pqob-Y2WMeq zG|SIa!+i`4d|go?$)bd7PEp@?{mWsLi8))mmFiY_--EAm1U(#WkUdTVcda-m=i5 z37EgB+*##)Nnm4WS|$<~fKDnXNREqR;^ARrWle~SOH5yQBqt}Mq5>-PZ3v#QxN!c$ zn48;C_qW7iqBc+{`}q1oaRE(Hs1hdJ1Iub*X$iINcDqtl>2^Qk?$&B<-?C{U$)8?R z*;I8WF^i?FHGV~NAW5#ZHl5h2(AH(CRnm06-+>Kd(}LxYDcReSP~6d%tBakP**||i zetr5|vY2=4gTFfB?CN5B*`V6%b&)GTAxN+!^xze1WQ+yL&z@tueQa z5zU46tK0>KQc_YzMyW-ao>=T`Uw+o&^N~;Ru#8n>uR@xGkJGT@NW<<-`$MwUS40jN z2{G zkPsZ)4v!|G7jK}@TiRD}zG>05@f#k0wk0&f&}y|sxEbt6WjfNpxR{(^iEEx^QV550L$N-@w~y6^URzBWME4J(uC zkW>C4$p7Q5x!P>DR=BBcv>A2Y*?S69C_b_n4mXSw^PQoh>>H@o2ynwbUs_%UML4V^ zPM06wcN`0T!?Y5`V|ETtMUZGXP%-GMT1*Mg0-@UA89n=)J{$^fxWOqnL4L70+*+dn zW^ao!JeeeQYa_l=;`GK8E#0PKO?N%Kyqh6q`M6uWOV6NVR5vzzMiw|*Lv=Y)^a*=R z)|l_d)Z}D3M#kd2jf#a~^G~9yFd(IRPE@S2Xz-@(8f~|8UqGz>`Iki8g>y(m4>13d z$Emrou%WRNr(~A?lk0vL=f^P|hST_5U@@Q#6(xk+G>zn@`&}^-A%#6diF9ZOKb|`` zusbG#x+9yF$y3Wq%UMFgy*6`w{1}Xo$);3SnNX@lPC2cJxDAzUyd-K99sw;- z<-=GdIoaZ>1p^~vX4c*1Wy{fF{i|0uExPhl^WEL;jvWi-w%WL9^!xX35{fRrtDqOC zu5ly2*|MLiDOx-&#c+^$l9N?cx_9!hA@dg6g{s{bE_{Xyo2sf!K;Z7)O~rlGdg}Z+ zDk^FU3Mv{J8gg=B7|h5-^E>q#XQiaDY80%d0!G^=wx4^|RMgc2BO`+&BGeQ^G$1cRU{g^kX$XF*`cdQY;mL8<3pPWga{_%}-1cokH;A<_eE<`{B-))HRL)V8;`D=H{J zAFW>S{zFjE*kz2nI~NkNgEf@H$j_bom7!_&_;DB|CL<$5tCjJod0MYvp`B<;7~G5AfBdUAAO(IBZ#2}``zv9N9Rrjf zw6!;n9qWewi->TEh-?Dd*jQtF`pURCy3zhDc$!^};H~j+cPGQR4!M=|JR6h{U!$-+ zuZKb&EkyF9Y1S}iWg1jeaG#;#&X!MD+uRIA%2w6<&CPD;C?Idr(G|FP*g{=k_!xeE zo!QpU^rhlin!lW$4bzY9d5x6;2aUb8To-Dtr6(CBHS7=FtmgXG8$t)yetUb*7fiD- z@>_0Wc}}un?bqkFch~plekECIX>~$Zvo`sY{?3xeZZ_QFA_;Knm#0gLE4k5NiPPSW zhnP>E!`_Y4@iz8xDb~?yI^WP4qq|MJ?x&+K=#B&wl!=Zj1&&7iLHd00)$hz{Tj$u#UT&U;psS! z#c1vR?%=-lY>#zU`g3@m4^RF743?Jeq8JGuk}n&)*@X}TWnm32iJhH&(0O|{fL`o0 zHSb2ZZnU`q82-$+F;}AYf$Xegu zl%FeFZn}I|$6u5wf>LIFh>71JGk(z>|T9cnCF&GC(k?o@Sn@oriWQ7tK~3qHH))u68vomH+NZGRnL8bt@n8eyc~?8}qPKr4C;kN3^6kZs zcH;8?yJDmHcZG@L5C)?KD*@jA_?06K*SbOol_=amNPWNv2~)%~U1C+^v)@SSo*9ycIJAgN>ci{OY=e$N$X z?-YLj!^?!>cH%Z~|L-)Q%vajvEmug>Fkw&K(0hL|Dq~_#EVaL-FjaNzR3lU~zLiTN zv4E&e8Ez|u+Ooj|UXTS2A>_GglRL&Wwi7RV`5#5F5i&)z{PRk~_*Mpq#3-@_=xHS1 zXeZ9{^1qMR4gd`K5x{Ye+|WzNaX^p2v6ngJ@9EIb5&8%ku5GZErI1!%qCJ7w&Jkq{ z?Za29#<%iFBw)CJ$A}^sHFy&sB3^-*0zrs$i%+x?g%7jPIZNb`At)_m2W&-)EHLbV zMz-<6cH&Ae|L>H4Nr*WmfW!Q&=!S;w9Zy2>hIvkT7#*7MfP~4Ed?kv1ZU~(-JHQC> zBB$Jy4*e6+0?_zxEC8&q2%R%N05A_X&$&18KY$SFw@cu#kUfPE#RHX05mG}V?Zj%{ z{%$CQjAz|ir)knKlS*!AXp!L?C=J)zHeTl3E2Tr5<4;k>eE1QXLdt!C*7GhRiL%T( z#}ZZJ7MNc`j|K0bL!{&MmJHsEi-`Y5bWf0ObWWUHiNXr#)wqyl z+s6YG0aoC7ud%Vqotyrg+>mIn@Am(%kn<&!h?Y8EJbeCT zH~5th?cCGSq6|8Wc?GrqCnyB?9pSrWl}jC}P=vxLVWM}YFJGST)oVa8d6k}iq+l8c z)&D%N27Ec~QzxMl7_=ZOJj8Qa>(&j{_-2H^IR;yT=P#GxhRcUd!fQ_8+B4!Oz^~VGhFtS$wq6EYgTVz9C6|TPOjky3zfCXPUzrrIb|5FMK^rb9 zscC$aphZ$!dkhLH=+{A(+2ed#dY@(U zk_e(lCnh{RJfQa|fV;2o{o%eB z1OyxBMbe6v9z1*qO4qlx&KY;%H>4*JY=g4Z1}^UvzdliT{J77i*SNgA9CTD>(v?K? k|NXnE$d_9M+4gCc>Z6GVX!H2to4EuMA~N@JLeF0RKM+%U-~a#s diff --git a/Visibility_2/doc/Visibility_2/visibility_2.txt b/Visibility_2/doc/Visibility_2/visibility_2.txt index b34971f97cf..bc595c90606 100644 --- a/Visibility_2/doc/Visibility_2/visibility_2.txt +++ b/Visibility_2/doc/Visibility_2/visibility_2.txt @@ -123,6 +123,9 @@ if only one (or very little) queries are required, using one of the algorithms t \section simple_polygon_visibility_example Example of Visibility in a Simple Polygon The following example shows how to obtain the regularized and non-regularized visibility regions. +\cgalFigureBegin{simple_example, simple_example.png} +The visibility region of \f$ q \f$ in a simple polygon: (1) non-regularized visibility; and (2) regularized visibility. +\cgalFigureEnd \cgalExample{Visibility_2/simple_polygon_visibility_2.cpp} \section general_polygon_example Example of Visibility in a Polygon with Holes diff --git a/Visibility_2/examples/Visibility_2/general_polygon_example.cpp b/Visibility_2/examples/Visibility_2/general_polygon_example.cpp index 38e4ae9d6da..0dabb632b43 100644 --- a/Visibility_2/examples/Visibility_2/general_polygon_example.cpp +++ b/Visibility_2/examples/Visibility_2/general_polygon_example.cpp @@ -49,8 +49,8 @@ int main() { << " edges." << std::endl; Arrangement_2::Ccb_halfedge_circulator curr = fh->outer_ccb(); std::cout << "Traverse the face of the visibility region." << std::endl; - std::cout << "[" << curr->curve() << "]"<< std::endl; + std::cout << "[" << curr->source()->point() << " -> " << curr->target()->point() << "]"<< std::endl; while (++curr != fh->outer_ccb()) - std::cout << "[" << curr->curve() << "]" << std::endl; + std::cout << "[" << curr->source()->point() << " -> " << curr->target()->point() << "]"<< std::endl; return 0; } diff --git a/Visibility_2/examples/Visibility_2/simple_polygon_visibility_2.cpp b/Visibility_2/examples/Visibility_2/simple_polygon_visibility_2.cpp index 43adf31904e..1df11727cce 100644 --- a/Visibility_2/examples/Visibility_2/simple_polygon_visibility_2.cpp +++ b/Visibility_2/examples/Visibility_2/simple_polygon_visibility_2.cpp @@ -31,35 +31,36 @@ int main() { Arrangement_2 env; CGAL::insert_non_intersecting_curves(env, &s[0], &s[6]); //locate the query point in the arrangement - Point_2 query_point(0.5, 2); - Arrangement_2::Face_const_handle face; + Point_2 q(0.5, 2); + Arrangement_2::Face_const_handle * face; CGAL::Arr_naive_point_location pl(env); - CGAL::Object obj = pl.locate(query_point); - CGAL::assign(face, obj); + typename CGAL::Arr_point_location_result::Type obj = pl.locate(q); + // The query point locates in the interior of a face + face = boost::get (&obj); //visibility query Arrangement_2 non_regular_output; NSPV non_regular_visibility(env); - Face_handle non_regular_fh = non_regular_visibility.compute_visibility(query_point, face, non_regular_output); + Face_handle non_regular_fh = non_regular_visibility.compute_visibility(q, *face, non_regular_output); std::cout << "Non-regularized visibility region of q has " << non_regular_output.number_of_edges() << " edges:" << std::endl; for (Edge_const_iterator eit = non_regular_output.edges_begin(); eit != non_regular_output.edges_end(); ++eit) - std::cout << "[" << eit->curve() << "]" << std::endl; + std::cout << "[" << eit->source()->point() << " -> " << eit->target()->point() << "]" << std::endl; Arrangement_2 regular_output; RSPV regular_visibility(env); - Face_handle regular_fh = regular_visibility.compute_visibility(query_point, face, regular_output); + Face_handle regular_fh = regular_visibility.compute_visibility(q, *face, regular_output); Ccb_halfedge_circulator curr = regular_fh->outer_ccb(); std::cout << "Regularized visibility region of q has " << regular_output.number_of_edges() << " edges:" << std::endl; for (Edge_const_iterator eit = regular_output.edges_begin(); eit != regular_output.edges_end(); ++eit) - std::cout << "[" << eit->curve() << "]" << std::endl; + std::cout << "[" << eit->source()->point() << " -> " << eit->target()->point() << "]" << std::endl; //For a regular face, we can also get its whole boundary by traversing its outer CCB. std::cout << "Traverse the face of the regularized visibility region:" << std::endl; - std::cout << "[" << curr->curve() << "]"<< std::endl; + std::cout << "[" << curr->source()->point() << " -> " << curr->target()->point() << "]" << std::endl; while (++curr != regular_fh->outer_ccb()) - std::cout << "[" << curr->curve() << "]" << std::endl; + std::cout << "[" << curr->source()->point() << " -> " << curr->target()->point() << "]" << std::endl; return 0; }