debian/0000755000000000000000000000000012570040134007162 5ustar debian/README.source0000644000000000000000000000146012570040134011342 0ustar README.source for the obfsproxy package ======================================= obfsproxy is managed in a Git repository using git-buildpackage. Upstream tarballs are imported using git-import-orig with: * `--pristine-tar` to record upstream tarball, * `--upstream-vcs-tag` to link upstream source repository. Quilt patches are managed using gbp-pq. Packaging practices also follow most of the advices provided by Russ Allbery at: The branches are organized as follow: * upstream: tracks the "master" branch of upstream repository [1] * patch-queue/*: branches exported to quilt patches (handled by gbp-pq) * master: export of patch-queue/* branches and Debian specific changes [1]  debian/watch0000644000000000000000000000030012570040134010204 0ustar version=3 opts="downloadurlmangle=s/#.*$//,filenamemangle=s/.*(obfsproxy-[^#]+)#.*$/$1/,pgpsigurlmangle=s/$/.asc/" \ https://pypi.python.org/simple/obfsproxy \ .*/obfsproxy-(.+)\.tar\.gz#.* debian/source/0000755000000000000000000000000012570040134010462 5ustar debian/source/include-binaries0000644000000000000000000000004012570040134013614 0ustar debian/upstream-signing-key.pgp debian/source/format0000644000000000000000000000001412570040134011670 0ustar 3.0 (quilt) debian/changelog0000644000000000000000000000753612570040134011047 0ustar obfsproxy (0.2.13-1) unstable; urgency=medium * Package is now maintained as part of the pkg-privacy team. * Use debhelper compat level 9. * Use pybuild as the buildsystem. * Migrate watch file to PyPI simple API. * Bump Standards-Version to 3.9.6. -- Jérémy Bobbio Fri, 28 Aug 2015 13:04:54 +0200 obfsproxy (0.2.12-1) unstable; urgency=low [ Jérémy Bobbio ] * New upstream release. * Put under the umbrella of the Anonymity Tools Debian Maintainers team [ intrigeri ] * Import AppArmor profile. (Closes: #739284) * Install the AppArmor profile into the package, have dh_apparmor do its magics. * Add Suggests: apparmor. * Bump copyright years on debian/* for Lunar, at his request. * Use canonical URLs for the Vcs-* control fields. -- Jérémy Bobbio Wed, 03 Sep 2014 02:22:32 +0000 obfsproxy (0.2.11-1) unstable; urgency=medium * New upstream release. * Update Build-Depends and Depends. * Document how to use a ScrambleSuit bridge in README.Debian. -- Jérémy Bobbio Fri, 18 Jul 2014 23:39:18 +0200 obfsproxy (0.2.8-1) unstable; urgency=low * New upstream release. -- Jérémy Bobbio Fri, 11 Apr 2014 09:54:49 +0200 obfsproxy (0.2.7-1) unstable; urgency=low * New upstream release. * Update Build-Depends. -- Jérémy Bobbio Sat, 15 Mar 2014 15:00:00 +0100 obfsproxy (0.2.6-3) unstable; urgency=low * Add python-gmpy to Recommends in order to save CPU when available. -- Jérémy Bobbio Mon, 24 Feb 2014 10:17:32 +0000 obfsproxy (0.2.6-2) unstable; urgency=low * Use proper version number in debian/NEWS. * Fix capitalization of ScrambleSuit. -- Jérémy Bobbio Tue, 11 Feb 2014 00:16:39 +0100 obfsproxy (0.2.6-1) unstable; urgency=low * New upstream release. * Configure watch file to verify upstream tarball signature. * Update documentation to add Scramblesuit. * Update Standards-Version, no changes required. -- Jérémy Bobbio Mon, 10 Feb 2014 19:16:12 +0100 obfsproxy (0.2.3-1) unstable; urgency=low * New upstream release. * Adjust Build-Depends to match new requirements. * Generate proper Depends for the new upstream version using pydist. * Drop obsolete patch. * Add watch file. -- Jérémy Bobbio Fri, 20 Sep 2013 17:05:42 +0200 obfsproxy (0.2.1-4) unstable; urgency=low * Fix Vcs-Git URL. * Adjust Section to match the archive override. * Migrate to dh_python2. * Run upstream test suite using autopkgtest. * Add Homepage field. -- Jérémy Bobbio Wed, 28 Aug 2013 21:14:23 +0200 obfsproxy (0.2.1-3) unstable; urgency=low * Upload to unstable. -- Jérémy Bobbio Sun, 05 May 2013 20:53:53 +0200 obfsproxy (0.2.1-2) experimental; urgency=low * Add a patch to fix the C-obfsproxy compatilibity hack. -- Jérémy Bobbio Thu, 11 Apr 2013 09:39:20 +0000 obfsproxy (0.2.1-1) experimental; urgency=low * New upstream release: - switch to the new Python implementation. (Closes: #699922) * Take over the package with weasel's approval for the new Python implementation. * Add NEWS file to tell users about the new 'obfs3' protocol. -- Jérémy Bobbio Mon, 08 Apr 2013 19:59:49 +0000 obfsproxy (0.1.4-2) unstable; urgency=low * Upload to unstable. -- Peter Palfrader Fri, 29 Jun 2012 20:47:59 +0200 obfsproxy (0.1.4-1) experimental; urgency=low * New upstream version. * debian/copyright: Mention http download location for upstream obfsproxy. -- Peter Palfrader Sat, 07 Apr 2012 23:28:18 +0200 obfsproxy (0.1.1-1) experimental; urgency=low * Initial release (closes: #660122). -- Peter Palfrader Sun, 11 Mar 2012 11:30:46 +0100 debian/copyright0000644000000000000000000000435312570040134011122 0ustar Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: obfsproxy Upstream-Contact: George Kadianakis Source: https://git.torproject.org/pluggable-transports/obfsproxy.git Files: * Copyright: Copyright 2012 Brandon Wiley Copyright 2012-2013 George Kadianakis License: BSD-3-clause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: . * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. . * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. . * Neither the names of the copyright owners nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. . THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Files: debian/* Copyright: Copyright 2013-2014 Jérémy Bobbio Copyright 2014 Anonymity Tools Debian Maintainers License: permissive Copying and distribution of this package, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. debian/obfsproxy.manpages0000644000000000000000000000002312570040134012725 0ustar debian/obfsproxy.1 debian/tests/0000755000000000000000000000000012570040134010324 5ustar debian/tests/control0000644000000000000000000000002612570040134011725 0ustar Tests: upstream-tests debian/tests/upstream-tests0000755000000000000000000000026412570040134013254 0ustar #!/bin/sh set -e if ! [ -d "$ADTTMP" ]; then echo "ADTTMP not set." >&2 exit 1 fi mkdir $ADTTMP/obfsproxy cp -r obfsproxy/test $ADTTMP/obfsproxy (cd $ADTTMP; trial obfsproxy) debian/README.Debian0000644000000000000000000000621012570040134011222 0ustar obfsproxy for Debian ==================== Configuring an obfs3/scramblesuite bridge ----------------------------------------- (Inspired by upstream HOWTO.txt) This is a short guide on how to setup a obfsproxy obfs3/scramblesuit bridge: 1. Setup Tor Edit /etc/tor/torrc to add: SocksPort 0 ORPort 443 # or some other port if you already run a webserver/skype BridgeRelay 1 Exitpolicy reject *:* ## CHANGEME_1 -> provide a nickname for your bridge, can be anything you like #Nickname CHANGEME_1 ## CHANGEME_2 -> provide some email address so we can contact you if there's a problem #ContactInfo CHANGEME_2 ServerTransportPlugin obfs3,scramblesuit exec /usr/bin/obfsproxy managed Don't forget to uncomment and edit the CHANGEME fields. 2. Launch Tor and verify that it bootstraps Restart Tor to use the new configuration file: # service tor restart Now check /var/log/tor/log and you should see something like this: Nov 05 16:40:45.000 [notice] We now have enough directory information to build circuits. Nov 05 16:40:45.000 [notice] Bootstrapped 80%: Connecting to the Tor network. Nov 05 16:40:46.000 [notice] Bootstrapped 85%: Finishing handshake with first hop. Nov 05 16:40:46.000 [notice] Bootstrapped 90%: Establishing a Tor circuit. Nov 05 16:40:48.000 [notice] Tor has successfully opened a circuit. Looks like client functionality is working. Nov 05 16:40:48.000 [notice] Bootstrapped 100%: Done. If Tor is earlier in the bootstrapping phase, wait until it gets to 100%. 3. Configure the firewall if needed If you're behind a NAT/firewall, you'll need to make your bridge reachable from the outside world — both on the ORPort and the obfsproxy port. The ORPort is whatever you defined in step two above. To find your obfsproxy port, check your Tor logs for two lines similar to these: Oct 05 20:00:41.000 [notice] Registered server transport 'obfs3' at '0.0.0.0:26821 Oct 05 20:00:42.000 [notice] Registered server transport 'scramblesuit' at '0.0.0.0:40172 The last number in each line, in this case 26821 and 40172, are the TCP port numbers that you need to forward through your firewall. (This port is randomly chosen the first time Tor starts, but Tor will cache and reuse the same number in future runs.) If you want to change the number, put the following in your torrc: ServerTransportListenAddr scramblesuit 0.0.0.0:40000 Using an obfs3 bridge --------------------- To use an obfs3, please add the following lines to /etc/tor/torrc: ClientTransportPlugin obfs3,scramblesuit exec /usr/bin/obfsproxy managed UseBridges 1 Bridge obfs3 192.0.2.42:443 C2A9DC82AA7E85DB6465EC8C4B1B4B1B77787BE0 Adjust address, port and the optional fingerprint accordingly. To use a ScrambleSuit bridge, first you need to retrieve the content of the `/var/lib/tor/pt_state/scramblesuit/server_password` file on the server. Then you can add a bridge line like the following: Bridge scramblesuit 192.0.2.42:40000 C2A9DC82AA7E85DB6465EC8C4B1B4B1B77787BE0 password=MCN8FMPJNZOBAAPOUXPY1TF435K75M2K debian/compat0000644000000000000000000000000212570040134010360 0ustar 9 debian/obfsproxy.dirs0000644000000000000000000000001712570040134012076 0ustar etc/apparmor.d debian/pydist-overrides0000644000000000000000000000004212570040134012415 0ustar pyptlib python-pyptlib (>= 0.0.6) debian/NEWS0000644000000000000000000000264612570040134007671 0ustar obfsproxy (0.2.6-2) unstable; urgency=low obfsproxy now supports a new obfsucation protocol named ScrambleSuit. The previous protocols did not require any form of authentication and were vulnerable to active probes. ScrambleSuit requires a shared secret instead. Tor bridges configuration should be updated to support the new protocol. Edit `/etc/tor/torrc`, and replace: ServerTransportPlugin obfs2,obfs3 exec /usr/bin/obfsproxy managed with: ServerTransportPlugin obfs3,scramblesuit exec /usr/bin/obfsproxy managed The “obfs2” protocol is known to be fingerprintable and is being phased out. -- Jérémy Bobbio Mon, 10 Feb 2014 18:19:55 +0100 obfsproxy (0.2.1-1) experimental; urgency=low obfsproxy now supports a new obfuscation protocol named “obfs3”. The command-line syntax also changed and `managed` should now be used instead of `--managed`. * Upgrading a bridge: Edit `/etc/tor/torrc` and replace: ServerTransportPlugin obfs2 exec /usr/bin/obfsproxy --managed with: ServerTransportPlugin obfs2,obfs3 exec /usr/bin/obfsproxy managed * Upgrading a client: Edit `/etc/tor/torrc` and replace: ClientTransportPlugin obfs2 exec /usr/bin/obfsproxy --managed with: ClientTransportPlugin obfs2,obfs3 exec /usr/bin/obfsproxy managed -- Jérémy Bobbio Thu, 28 Mar 2013 10:30:43 +0000 debian/control0000644000000000000000000000301112570040134010560 0ustar Source: obfsproxy Maintainer: Debian Privacy Tools Maintainers Uploaders: Jérémy Bobbio Section: net Priority: extra Build-Depends: asciidoc, debhelper (>= 9), dh-apparmor, dh-python, docbook-xsl, python-all (>= 2.6.6-3~), python-crypto, python-pyptlib (>= 0.0.6), python-setuptools, python-twisted-core, python-txsocksx, python-yaml, xsltproc Standards-Version: 3.9.6 X-Python-Version: >= 2.7 Vcs-Git: git://anonscm.debian.org/pkg-privacy/packages/obfsproxy.git Vcs-Browser: https://anonscm.debian.org/cgit/pkg-privacy/packages/obfsproxy.git Homepage: https://www.torproject.org/projects/obfsproxy.html XS-Testsuite: autopkgtest Package: obfsproxy Architecture: all Depends: ${misc:Depends}, ${python:Depends} Recommends: python-gmpy Suggests: apparmor Enhances: tor Description: pluggable transport proxy for Tor obfsproxy is a tool that attempts to circumvent censorship by transforming the Tor traffic between the client and the bridge. This way censors, who usually monitor traffic between the client and the bridge, will see innocent-looking transformed traffic instead of the actual Tor traffic. . It is written in Python and is compliant with the Tor pluggable transports specification, and its modular architecture allows it to support multiple pluggable transports. debian/rules0000755000000000000000000000075712570040134010253 0ustar #!/usr/bin/make -f %: dh $@ --buildsystem=pybuild --with=python2 override_dh_install: dh_install -O--buildsystem=pybuild cp debian/apparmor-profile debian/obfsproxy/etc/apparmor.d/usr.bin.obfsproxy dh_apparmor --profile-name=usr.bin.obfsproxy -pobfsproxy override_dh_installman: a2x --no-xmllint --doctype manpage --format manpage debian/obfsproxy.1.txt dh_installman -O--buildsystem=pybuild ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS))) override_dh_auto_test: trial obfsproxy endif debian/obfsproxy.1.txt0000644000000000000000000001001712570040134012114 0ustar OBFSPROXY(1) ============ :doctype: manpage NAME ---- obfsproxy - a pluggable transports proxy SYNOPSIS -------- obfsproxy [--log-file 'log_file'] [--log-min-severity 'severity'] [--no-log] [--no-safe-logging] managed obfsproxy [--log-file 'log_file'] [--log-min-severity 'severity'] [--no-log] [--no-safe-logging] 'transport' [-h] [--dest 'dest'] [--ext-cookie-file 'ext_cookie_file'] ... 'mode' 'listen_addr' obfsproxy --help DESCRIPTION ----------- *obfsproxy* is a tool that attempts to circumvent censorship, by transforming the Tor traffic between the client and the bridge. This way, censors, who usually monitor traffic between the client and the bridge, will see innocent-looking transformed traffic instead of the actual Tor traffic. OPTIONS ------- **--log-file** 'log_file':: Set logfile location. **--log-min-severity** 'severity':: Set minimum logging severity (default: no logging). 'severity' must be one of *error*, *warning*, *info*, *debug*. **--no-log**:: Disable logging. **--no-safe-logging**:: Disable safe (scrubbed address) logging. **-h, --help**:: Show help message and exit. MANAGED TRANSPORT ----------------- Using *managed* as 'TRANSPORT' allows Tor to start and control obfsproxy by itself. Add a line like the following to torrc to use it when acting as a bridge: ServerTransportPlugin obfs3,scramblesuit exec /usr/bin/obfsproxy managed When connecting to an obfuscated bridge, adapt the following: ClientTransportPlugin obfs3,scramblesuit exec /usr/bin/obfsproxy managed DUMMY TRANSPORT --------------- Use a protocol that simply proxies data without obfuscating them. For tests only. No extra options. B64 TRANSPORT ------------- Use a protocol that encodes data with *base64* before pushing them to the network. No extra options. OBFS2 TRANSPORT --------------- Use the *obfs2* protocol. **obfs2 is known to be fingerprintable and is deprecated.** See for the specification. No extra options. OBFS3 TRANSPORT --------------- Use the *obfs3* protocol. See for the specification. No extra options. SCRAMBLESUIT TRANSPORT ---------------------- Use the *scramblesuit* protocol. See for the specification. **--password** 'password':: Shared secret for UniformDH. In server mode, a secret will be automatically generated if unspecified. In order to configure a password with Tor on the server side, the following can be added to torrc: ServerTransportOptions scramblesuit password=WFVTIHBLAHNBXWSUD6WYTEST42LPIPRT Tor clients (using a version later than 0.2.5.1-alpha) can then use: Bridge scramblesuit 192.0.2.42:2032 password=WFVTIHBLAHNBXWSUD6WYTEST42LPIPRT COMMON TRANSPORT OPTIONS ------------------------ Here's the common synopsis: Options common for all transports: **transport**:: One of *managed*, *dummy*, *b64*, *obfs2*, *obfs3* or *scramblesuit*. See above for details. *-h*:: Show help message and exit. **--dest** 'dest':: Set destination address. Mandatory in all modes except *socks*. **--ext-cookie-file** 'ext_cookie_file':: Configure the filesystem path where the Extended ORPort authentication cookie is stored. **mode**:: Mode must be one of *server* (old-style ServerTransportPlugin), *ext_server* (support for Extended ORPort), *client* (bridge client) or *socks* (client using SOCKS to connect to bridges). **listen_addr**:: Address on which the proxy will listen. BUGS ---- Plenty, probably. *obfsproxy* is still in development. Please report them. AUTHORS ------- George Kadianakis Philipp Winter Brandon Wiley debian/apparmor-profile0000644000000000000000000000057512570040134012373 0ustar #include /usr/bin/obfsproxy { #include #include #include /usr/bin/ r, /usr/bin/obfsproxy r, /usr/bin/python2.7 r, /var/lib/tor/pt_state/scramblesuit/* rw, # Site-specific additions and overrides. See local/README for details. #include } debian/gbp.conf0000644000000000000000000000004612570040134010601 0ustar [git-import-orig] pristine-tar = True debian/obfsproxy.docs0000644000000000000000000000011212570040134012061 0ustar README doc/obfs3/obfs3-protocol-spec.txt doc/obfs3/obfs3-threat-model.txt debian/upstream-signing-key.pgp0000644000000000000000000001603112570040134013755 0ustar  ODc/pg *] ܅8Frm)eiA"c_&[y\9Ji܌ڟ oR7b驏V]4?3?C@]x1`B2˔02Ѐ 6 EmZjfNg$"< 35 ?|XZMSUVmL62̵F|SPO'3ӵe:v!ו]'L[t2܍T4{$p&scm`^\`*(AZG(7:$/`$T߽7醟g0(Bz`yH7ꭳFև^~S'LQP~ecBW=3\Dx+thsɚ$d 'oݺϲ AO}qjN/dү%i\+ZhSpl3brƯ! #1OTtgX_r51F0QWep -I&P<^mǩNGa%(George Kadianakis FOEN Zj(H,dP!? ]gP1[f'ݡB߆p6)QFOG ; ?1K:<L 'fLtgYx1da.w`n\OE ֧izNggcQ7P//Z7:?C ~W%U{$ZtB]$ݤ)k]RSOE{~Ԃ6fÑs ïpsUUV6EHt\7 ]3&=Wlr!#,Z1sU^ Dt|tbSL{qb^ i~,ѣ]k6glբ%L a 5Kw&']g1=a9*=EigOUl`Udr40u u긡 'NԮ{ yI< !e-Dvi la\6DMk{HtxX<#vPU@]%W ϒ 8{ g> XT7,h +Q&_$C/Z᧫c"8K:۷+έF)R4hO{%:j)h:6RǔݐnOGK K7ei9kvwQQ^wx )=2r;cOcďH>+ZebI -ٟdSʖ!.Tw=Dx+\Nߙ,I|Öb2 Gw~;gc5 BsBQi1' ENj> ѭFl\}w-5~Zh 9SoB19F89;)˶ ҆+c׋WVKmImZx<.B`FQF-JDzIEb6F!V0+%YxΡУ]R'2&ӰtYnjի}7"@G뷍*R[{EHk7tjcA%YQ%03VHvgs?9L$+{*Z=`6zc FU /!)xJ4s"=_p(n >OE z,ۋ5K)9&XIE ِژtDv&v@TQj" ,|^ 8GvwgeeeʃLVĤ*ճTu,Ś >Yg}Q$t?'|X6=3eoULϢ}F,y1'=YPj fUQm%>9 ʨK >,z_\>;X*Sfn-8k^$OF!iV_(XOhaSxjlfW!|Kt**rU􂪌raS!o`BE_R_yqs+6~O1U<e p"`4mP^3f_[VbO2:7>,.Y@U~ 6x4uZ ˿f-tf"1Id|:'6\:خp`h!F5\Xc8TاniDa 'H{׊gԺÕz ;X""IXlE@p뜻gʴͅ^#>DY"Rhۖ;\h(_QK0^27-uK{ 4 \}T*(-LF~'Ûe,7CgJ?Snd'!wnA>,4T8pp8v|Vn u#~+ZvƮb85% 7\S c548%QmJ tgӳt1g8NrGP9~\PA BFYd[®tjᬸ3vh9\dn'h'.'y,' q*ëYu+x(9 .*ѳ;QDF \D^gH[N+9 Ց[aYA!4'ex[b5rMPNm%|2ra2<0 C~Zua}0s#R!&߄j#|-|}c̃qK?4FlȠŜ<;yٷb6c̦lNz(BIh EhEa5EٵeA#uW"%Q"m~ `hj Ii<{Τ~tچx?\܃$|iwG,KO r9Q\]ւq6K`H2]Q~ :e62$~4\,F](YYw@= :2T@nӢ ! qlbb.԰ Qm t]?*ȤFfU4@s&-V~LPDxQ"{|U:yAV6*1>:c\0KLP⏏fRUpQ ×QXߵ' Vb( hy C=VQ&bFGLr侧3%$4(VE3'ZB g1 rl[`6qO&"NU4+4^8"zΥl3ufd3׭UXW^shYKSmcXq|n.',TPK>nBzMPy+-81EK"bٛf$ {X O,"K[ _f.Kvhg߃?DE{gcP#K[D/Evom}+#!N>ywPlg41tY*o['{>d.n iCpFv1;o/)8vg3qVm2*줬AM&VPspwNFw_I(Y _ FD#a}/T2l>JpmI$,AM #@N|=qoNt?6sq}ٿ4Mt9a4V5b>SanS63ˤSvKV@Ǖo;_.(L_9`) xn; nfTT`濃<]j0TsRam3PDM:8R {"Qګ´kV9^#‘v -([ vUP5ב2;ʴ w8r ev}p;ˇ *RoHeCWYaPJX#Ӝ T^a,KZ A/t_0LmUӡvy EL~*M(_}#sjp! ?6|d>}_T?IؖAMa`j+~DÞB"AnTcPf߃J'V3wOyWy3/ ~=g.x㯽-/-9WaZ>٤%i GBTwلԕxWCbZA w_H0υuHs- )` \` Oo½dQϨ3HP [u1"N\7@@!\ӌGn jZ53 WkWLMe$I_\:4KE/vFW@yoF|!1%7wJCn~zlS ;_HLT<6.PS<.ZnE"BH_(Յ,V**6҈(OB3r ODc'ժ6η{^:)t!qG/z=2&li"7-ʛWr8vkt¤ !DE*lTo5+ iO S.3gc16MZH` Wd!Svq1ݓVdV/ 80b4u3Bmf!h)>fq@K呏lIE%Pjb~ŧ?|ӇcC6 Y(d@hR'}_WcVʥr8oW&} &RV`[3gOm@_8;Ju>CxrA,P. swtPaϷ\܀ 1dtn2(e Evofκᡏfvn(`5AR WrYDI2xߕp|udeիXm7GI!#>Ee>^X!6q̥w9;xX"Sk#/mu ODc  Sq%kw"AB7lL66"1e{jXoîӽƱ 5pṳ4u S50_q;U7ʀ spAРwh@r[PLk8K nʮsNifwyݘ֧ɰ{;?xwRv|yRo~bwB>WEVHDJ@5O6T1&$xtm|ʰI՘ hFO25_]o8m |JSzȮS]cCuμS%).`3Jpmh+Y3~gyLxKu73kZ l}t]$;,#">TDqL;Eh{Ep'&b߭a*[-kh)Ɛo;Ԟa}gL6c.NL(Vq3'xxCCפe[iHB#)3w$֘Gɩ8