[mpich2-commits] r6632 - in mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc: . config contrib/dist doc doc/images include include/hwloc include/private src tests tests/embedded tests/linux tests/ports tests/ports/include tests/ports/include/sys tests/xml utils

balaji at mcs.anl.gov balaji at mcs.anl.gov
Mon May 10 20:47:13 CDT 2010


Author: balaji
Date: 2010-05-10 20:47:13 -0500 (Mon, 10 May 2010)
New Revision: 6632

Added:
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/hwloc_check_attributes.m4
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/hwloc_check_visibility.m4
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/hwloc_internal.m4
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/hwloc_pkg.m4
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/rename.h
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/private/cpuid.h
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/private/misc.h
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/misc.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-freebsd.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-x86.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/Makefile.am
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/README.txt
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/autogen.sh
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/configure.ac
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/do_test.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/main.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/run-embedded-tests.sh
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_obj_below_array_by_type.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_insert_misc.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.xml.tar.gz
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.xml.tar.gz.options
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.xml.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.xml.tar.gz
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.xml.tar.gz.options
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.xml.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines_noadmin.tar.gz
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines_noadmin.tar.gz.options
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines_noadmin.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/1alpha.tar.gz
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/1alpha.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/2s390-2c.tar.gz
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/2s390-2c.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/48amd64-4d2n6c.tar.gz
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/48amd64-4d2n6c.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/pthread_np.h
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/sys/cpuset.h
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/16amd64-8n2c-cpusets.xml
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/16em64t-4s2c2t-offlines.xml
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/16em64t-4s2c2t.xml
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/8em64t-2mi2ma2c.xml
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/Makefile.am
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/test-topology.sh.in
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-calc.1in
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-calc.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-calc.h
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc.7in
Removed:
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/Makefile.man-page-rules
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/pkg.m4
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/hwloc.am
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/private/cpuset.h
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ibverbs.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/lstopo_xml.sh.in
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-mask.1in
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-mask.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-mask.h
Modified:
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/HACKING
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/Makefile.am
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/NEWS
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/README
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/VERSION
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/distscript.csh
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/hwloc.m4
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/configure.ac
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/contrib/dist/make_dist_tarball
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/Makefile.am
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/doxygen.cfg
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/hwloc-hello.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/hwloc.doxy
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/images/diagram.fig
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/images/dudley.png
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/images/emmett.png
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/images/hagrid.png
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/Makefile.am
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc.h
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/config.h.in
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/cpuset.h
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/glibc-sched.h
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/helper.h
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/linux-libnuma.h
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/linux.h
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/openfabrics-verbs.h
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/private/debug.h
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/private/private.h
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/Makefile.am
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/bind.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/cpuset.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/hwloc.dtd
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-aix.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-darwin.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-hpux.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-linux.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-osf.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-solaris.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-synthetic.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-windows.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-xml.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/traversal.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/Makefile.am
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/glibc-sched.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_bind.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_cpuset_first_last_weight.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_cpuset_singlify.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_cpuset_string.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_cache_covering_cpuset.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_closest_objs.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_largest_objs_inside_cpuset.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_next_obj_covering_cpuset.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_obj_covering_cpuset.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_obj_inside_cpuset.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_shared_cache_covering_obj.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_is_thissystem.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_object_userdata.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_synthetic.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_type_depth.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux-libnuma.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.tar.gz
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets_noadmin.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c.tar.gz
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-2m4c2t.tar.gz
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-2m4c2t.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.tar.gz
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t.tar.gz
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t.xml.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t_merge.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t_ncaches.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16ia64-8n2s.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/256ia64-64n2s2c.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/2amd64-2n.tar.gz
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/2amd64-2n.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/2ps3-2t.tar.gz
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/2ps3-2t.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/4ia64-4s.tar.gz
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/4ia64-4s.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/4ppc-4c.tar.gz
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/4ppc-4c.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/4qs22-2s2t.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/64fake-4n2s2ca2c2t.tar.gz
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/64fake-4n2s2ca2c2t.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8amd64-4n2c.tar.gz
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8amd64-4n2c.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8em64t-2s2ca2c.tar.gz
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8em64t-2s2ca2c.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8em64t-2s4c-heterogeneous.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8em64t-4c2t.tar.gz
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8em64t-4c2t.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8ia64-2n2s2d.tar.gz
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8ia64-2n2s2d.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8ia64-4s2c.tar.gz
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8ia64-4s2c.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/96em64t-4n4d3ca2co.tar.gz.output
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/Makefile.am
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/README
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/test-topology.sh.in
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/openfabrics-verbs.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/Makefile.am
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/radset.h
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/sys/lgrp_user.h
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/sys/rset.h
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/sys/sysctl.h
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/sys/thread.h
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/windows.h
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/Makefile.am
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-bind.1in
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-bind.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-distrib.1in
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-distrib.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo-cairo.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo-draw.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo-fig.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo-text.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo-windows.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo-xml.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo.1in
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo.c
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo.h
   mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/test-hwloc-distrib.output
Log:
Upgrade to the 1.0rc5 release of hwloc. This is an intermediate step
for testing before we move to hwloc-1.0.

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/HACKING
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/HACKING	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/HACKING	2010-05-11 01:47:13 UTC (rev 6632)
@@ -53,10 +53,22 @@
   "make check".
 
 - For the windows zipball, make sure you have Microsoft's lib tool in
-  PATH, and remember to copy README at the root of the zip into a
-  README.txt file with CRLF:
+  PATH, and remember to copy README and NEWS at the root of the zip into
+  README.txt and NEWS.txt files with CRLF:
 
   sed -e 's/$/'$'\015'/ < README > $prefix/README.txt
+  sed -e 's/$/'$'\015'/ < NEWS > $prefix/NEWS.txt
 
 - make maintainer-clean can be used to properly remove the generated
   documentations.
+
+- Silent rules are used by default to reduce the build verbosity:
+
+  shell$ make
+  CC	src/topology.lo
+
+  To revert to the old verbose rules, pass V=1 to make:
+
+  shell$ make V=1
+  /bin/sh ../libtool  --tag=CC   --mode=compile gcc [...] -c -o topology.lo topology.c
+

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/Makefile.am
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/Makefile.am	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/Makefile.am	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,49 +1,66 @@
-# Copyright 2009 INRIA, Université Bordeaux 1
-# Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
+# Copyright © 2009      INRIA, Université Bordeaux 1
+# Copyright © 2009-2010 Cisco Systems, Inc.  All rights reserved.
 
-ACLOCAL_AMFLAGS = -I config -I m4
+# Note that the -I directory must *exactly* match what was specified
+# via AC_CONFIG_MACRO_DIR in configure.ac.
+ACLOCAL_AMFLAGS = -I ./config
 
-SUBDIRS = src utils tests include doc
+SUBDIRS = src include
+if HWLOC_BUILD_STANDALONE
+SUBDIRS += utils tests doc
+endif
 
+# Do not let automake automatically add the non-standalone dirs to the
+# distribution tarball if we're building in embedded mode.
+DIST_SUBDIRS = $(SUBDIRS)
+
+# Only install the pkg file if we're building in standalone mode
+if HWLOC_BUILD_STANDALONE
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = hwloc.pc
+endif
 
 #
 # "make distcheck" requires that tarballs are able to be able to "make
 # dist", so we have to include config/distscript.csh.
 #
-
 EXTRA_DIST = \
         README VERSION COPYING AUTHORS \
         config/hwloc_get_version.sh \
         config/distscript.csh
 
+if HWLOC_BUILD_STANDALONE
 #
 # Double check that we generated both the doxygen docs and a new copy
 # of the top-level README file.
 #
-
 cannot-dist:
 	@echo "ERROR: Did not build both of the doxygen docs and README."
 	@echo "ERROR: This tarball is not complete!"
 	@echo "ERROR: Cowardly refusing to complete successfully..."
 	@exit 1
 
-if !BUILD_DOXYGEN
+# Refuse to make dist if we can't make the doxygen stuff (note that
+# BUILD_DOXYGEN will automatically be false if we're not building
+# standalone).
+if !HWLOC_BUILD_DOXYGEN
 dist-hook: cannot-dist
 else
-if !BUILD_README
+if !HWLOC_BUILD_README
 dist-hook: cannot-dist
 else
 dist-hook:
 	csh "$(top_srcdir)/config/distscript.csh" "$(top_srcdir)" "$(distdir)" "$(HWLOC_VERSION)" "$(HWLOC_SVN_R)"
-endif
-endif
+endif HWLOC_BUILD_README
+endif HWLOC_BUILD_DOXYGEN
+endif HWLOC_BUILD_STANDALONE
 
 #
 # Build the top-level README file
 #
 
+if HWLOC_BUILD_STANDALONE
 .PHONY: doc readme
 doc readme:
 	$(MAKE) -C doc readme
+endif HWLOC_BUILD_STANDALONE

Deleted: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/Makefile.man-page-rules
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/Makefile.man-page-rules	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/Makefile.man-page-rules	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,30 +0,0 @@
-# -*- makefile -*-
-# Copyright (c) 2008-2009 Cisco Systems, Inc.  All rights reserved.
-# Copyright (c) 2008      Sun Microsystems, Inc.  All rights reserved.
-# $COPYRIGHT$
-# 
-# Additional copyrights may follow
-# 
-# $HEADER$
-#
-
-.1in.1:
-	@ echo Creating $@ man page...
-	@ sed -e 's/#PACKAGE_NAME#/@PACKAGE_NAME@/g' \
-	  -e 's/#PACKAGE_VERSION#/@PACKAGE_VERSION@/g' \
-	  -e 's/#HWLOC_DATE#/@HWLOC_RELEASE_DATE@/g' \
-	  > $@ < $<
-
-.3in.3:
-	@ echo Creating $@ man page...
-	@ sed -e 's/#PACKAGE_NAME#/@PACKAGE_NAME@/g' \
-	  -e 's/#PACKAGE_VERSION#/@PACKAGE_VERSION@/g' \
-	  -e 's/#HWLOC_DATE#/@HWLOC_RELEASE_DATE@/g' \
-	  > $@ < $<
-
-.7in.7:
-	@ echo Creating $@ man page...
-	@ sed -e 's/#PACKAGE_NAME#/@PACKAGE_NAME@/g' \
-	  -e 's/#PACKAGE_VERSION#/@PACKAGE_VERSION@/g' \
-	  -e 's/#HWLOC_DATE#/@HWLOC_RELEASE_DATE@/g' \
-	  > $@ < $<

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/NEWS
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/NEWS	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/NEWS	2010-05-11 01:47:13 UTC (rev 6632)
@@ -14,7 +14,96 @@
 0.9 (as initially released as "libtopology", then re-branded to "hwloc"
 in v0.9.1).
 
+Version 1.0.0
+-------------
 
+* The ABI of the library has changed.
+* Backend updates
+  + Add FreeBSD support.
+  + Add x86 cpuid based backend.
+  + Add Linux cgroup support to the Linux cpuset code.
+  + Support binding of entire multithreaded process on Linux.
+  + Fix and enable Group support in Windows.
+  + Cleanup XML export/import.
+* Objects
+  + HWLOC_OBJ_PROC is renamed into HWLOC_OBJ_PU for "Processing Unit",
+    its stringified type name is now "PU".
+  + Use new HWLOC_OBJ_GROUP objects instead of MISC when grouping
+    objects according to NUMA distances or arbitrary OS aggregation.
+  + Rework memory attributes.
+  + Add different cpusets in each object to specify processors that
+    are offline, unavailable, ...
+  + Cleanup the storage of object names and DMI infos.
+* Features
+  + Add support for looking up specific PID topology information.
+  + Add hwloc_topology_export_xml() to export the topology in a XML file.
+  + Add hwloc_topology_get_support() to retrieve the supported features
+    for the current topology context.
+  + Support non-SYSTEM object as the root of the tree, use MACHINE in
+    most common cases.
+  + Add hwloc_get_*cpubind() routines to retrieve the current binding
+    of processes and threads.
+* API
+  + Add HWLOC_API_VERSION to help detect the currently used API version.
+  + Add missing ending "e" to *compare* functions.
+  + Add several routines to emulate PLPA functions.
+  + Rename and rework the cpuset and/or/xor/not/clear operators to output
+    their result in a dedicated argument instead of modifying one input.
+  + Deprecate hwloc_obj_snprintf() in favor of hwloc_obj_type/attr_snprintf().
+  + Clarify the use of parent and ancestor in the API, do not use father.
+  + Replace hwloc_get_system_obj() with hwloc_get_root_obj().
+  + Return -1 instead of HWLOC_OBJ_TYPE_MAX in the API since the latter
+    isn't public.
+  + Relax constraints in hwloc_obj_type_of_string().
+  + Improve displaying of memory sizes.
+  + Add 0x prefix to cpuset strings.
+* Tools
+  + lstopo now displays logical indexes by default, use --physical to
+    revert back to OS/physical indexes.
+  + Add colors in the lstopo graphical outputs to distinguish between online,
+    offline, reserved, ... objects.
+  + Extend lstopo to show cpusets, filter objects by type, ...
+  + Renamed hwloc-mask into hwloc-calc which supports many new options.
+* Documentation
+  + Add a hwloc(7) manpage containing general information.
+  + Add documentation about how to switch from PLPA to hwloc.
+  + Cleanup the distributed documentation files.
+* Miscellaneous
+  + Many compilers warning fixes.
+  + Cleanup the ABI by using the visibility attribute.
+  + Add project embedding support.
+
+
+Version 0.9.4 (unreleased)
+--------------------------
+
+* Fix reseting colors to normal in lstopo -.txt output.
+* Fix Linux pthread_t binding error report.
+
+
+Version 0.9.3
+-------------
+
+* Fix autogen.sh to work with Autoconf 2.63.
+* Fix various crashes in particular conditions:
+  - xml files with root attributes
+  - offline CPUs
+  - partial sysfs support
+  - unparseable /proc/cpuinfo
+  - ignoring NUMA level while Misc level have been generated
+* Tweak documentation a bit
+* Do not require the pthread library for binding the current thread on Linux
+* Do not erroneously consider the sched_setaffinity prototype is the old version
+  when there is actually none.
+* Fix _syscall3 compilation on archs for which we do not have the
+  sched_setaffinity system call number.
+* Fix AIX binding.
+* Fix libraries dependencies: now only lstopo depends on libtermcap, fix
+  binutils-gold link
+* Have make check always build and run hwloc-hello.c
+* Do not limit size of a cpuset.
+
+
 Version 0.9.2
 -------------
 

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/README
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/README	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/README	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,66 +1,89 @@
 Introduction
 
-hwloc provides a portable abstraction (across OS, versions, architectures, ...)
-of the hierarchical topology of modern architectures. It primarily aims at
-helping high-performance computing applications with gathering information
-about the hardware so as to exploit it accordingly and efficiently.
+hwloc provides command line tools and a C API to obtain the hierarchical map of
+key computing elements, such as: NUMA memory nodes, shared caches, processor
+sockets, processor cores, and processing units (logical processors or
+"threads"). hwloc also gathers various attributes such as cache and memory
+information, and is portable across a variety of different operating systems
+and platforms.
 
-hwloc provides a hierarchical view of the machine, NUMA memory nodes, sockets,
-shared caches, cores and simultaneous multithreading. It also gathers various
-attributes such as cache and memory information.
+hwloc primarily aims at helping high-performance computing (HPC) applications,
+but is also applicable to any project seeking to exploit code and/or data
+locality on modern computing platforms.
 
+Note that the hwloc project represents the merger of the libtopology project
+from INRIA and the Portable Linux Processor Affinity (PLPA) sub-project from
+Open MPI. Both of these prior projects are now deprecated. The first hwloc
+release is essentially a "re-branding" of the libtopology code base, but with
+both a few genuinely new features and a few PLPA-like features added in. More
+new features and more PLPA-like features will be added to hwloc over time. See
+Switching from PLPA to hwloc for more details about converting your application
+from PLPA to hwloc.
+
 hwloc supports the following operating systems:
 
   * Linux (including old kernels not having sysfs topology information, with
  knowledge of cpusets, offline cpus, and Kerrighed support)
   * Solaris
   * AIX
-  * Darwin
-  * OSF/1 (aka. Tru64)
+  * Darwin / OS X
+  * FreeBSD and its variants, such as kFreeBSD/GNU
+  * OSF/1 (a.k.a., Tru64)
   * HP-UX
-  * Windows
-  * For other OSes, only the number of processors is available for now.
+  * Microsoft Windows
 
+hwloc only reports the number of processors on unsupported operating systems;
+no topology information is available.
+
 For development and debugging purposes, hwloc also offers the ability to work
-on fake topologies:
+on "fake" topologies:
 
   * Symmetrical tree of resources generated from a list of level arities
   * Remote machine simulation through the gathering of Linux sysfs topology
  files
 
-hwloc may also display the topology in a convenient format, either in graphical
-mode, or by exporting in PDF, PNG, FIG, ... format, or in text mode (see
-Examples below).
+hwloc can display the topology in a human-readable format, either in graphical
+mode (X11), or by exporting in one of several different formats, including:
+plain text, PDF, PNG, and FIG (see Examples below). Note that some of the
+export formats require additional support libraries.
 
 hwloc offers a programming interface for manipulating topologies and objects.
-It also brings a powerful cpu bitmap API that is used to describe topology
+It also brings a powerful CPU bitmap API that is used to describe topology
 objects location on physical/logical processors. See the Programming interface
 below. It may also be used to binding applications onto certain cores or memory
 nodes. Several utility programs are also provided to ease command-line
-manipulation of topology objects, binding of processes, ...
+manipulation of topology objects, binding of processes, and so on.
 
 Installation
 
 hwloc (http://www.open-mpi.org/projects/hwloc/) is available under the BSD
-license. It is hosted by Open MPI (http://www.open-mpi.org/). The current SVN
-snapshot can be fetched with:
+license. It is hosted as a sub-project of the overall Open MPI project (http://
+www.open-mpi.org/). Note that hwloc does not require any functionality from
+Open MPI -- it is a wholly separate (and much smaller!) project and code base.
+It just happens to be hosted as part of the overall Open MPI project.
 
-  * svn checkout http://svn.open-mpi.org/svn/hwloc/trunk hwloc-trunk
-  * cd hwloc-trunk
-  * ./autogen.sh
+Nightly development snapshots are available on the web site. Additionally, the
+code can be directly checked out of Subversion:
 
-Note that autoconf >=2.60, automake >=1.10 and libtool >=2.2.6 are required in
-that case.
+shell$ svn checkout http://svn.open-mpi.org/svn/hwloc/trunk hwloc-trunk
+shell$ cd hwloc-trunk
+shell$ ./autogen.sh
 
-Installation by itself is as usual:
+Note that GNU Autoconf >=2.63, Automake >=1.10 and Libtool >=2.2.6 are required
+when building from a Subversion checkout.
 
-  * ./configure --prefix=...
-  * make
-  * make install
+Installation by itself is the fairly common GNU-based process:
 
-Lstopo's fig support is always available. To get support for pdf, ps and png
-support, cairo is needed. To get support for xml, libxml2 is needed.
+shell$ ./configure --prefix=...
+shell$ make
+shell$ make install
 
+The hwloc command-line tool "lstopo" produces human-readable topology maps, as
+mentioned above. It can also export maps to the "fig" file format. Support for
+PDF, Postscript, and PNG exporting is provided if the "Cairo" development
+package can be found when hwloc is configured and build. Similarly, lstopo's
+XML support requires the libxml2 development package.
+
 Examples
 
 On a 4-socket 2-core machine with hyperthreading, the lstopo tool may show the
@@ -68,224 +91,300 @@
 
                                dudley.png
 
-System(15GB)
-  Socket#0 + L3(4096KB)
- L2(1024KB) + L1(16KB) + Core#0
-   P#0
-   P#8
- L2(1024KB) + L1(16KB) + Core#1
-   P#4
-   P#12
-  Socket#1 + L3(4096KB)
- L2(1024KB) + L1(16KB) + Core#0
-   P#1
-   P#9
- L2(1024KB) + L1(16KB) + Core#1
-   P#5
-   P#13
-  Socket#2 + L3(4096KB)
- L2(1024KB) + L1(16KB) + Core#0
-   P#2
-   P#10
- L2(1024KB) + L1(16KB) + Core#1
-   P#6
-   P#14
-  Socket#3 + L3(4096KB)
- L2(1024KB) + L1(16KB) + Core#0
-   P#3
-   P#11
- L2(1024KB) + L1(16KB) + Core#1
-   P#7
-   P#15
+Machine (16GB)
+  Socket #0 + L3 #0 (4096KB)
+ L2 #0 (1024KB) + L1 #0 (16KB) + Core #0
+   PU #0 (phys=0)
+   PU #1 (phys=8)
+ L2 #1 (1024KB) + L1 #1 (16KB) + Core #1
+   PU #2 (phys=4)
+   PU #3 (phys=12)
+  Socket #1 + L3 #1 (4096KB)
+ L2 #2 (1024KB) + L1 #2 (16KB) + Core #2
+   PU #4 (phys=1)
+   PU #5 (phys=9)
+ L2 #3 (1024KB) + L1 #3 (16KB) + Core #3
+   PU #6 (phys=5)
+   PU #7 (phys=13)
+  Socket #2 + L3 #2 (4096KB)
+ L2 #4 (1024KB) + L1 #4 (16KB) + Core #4
+   PU #8 (phys=2)
+   PU #9 (phys=10)
+ L2 #5 (1024KB) + L1 #5 (16KB) + Core #5
+   PU #10 (phys=6)
+   PU #11 (phys=14)
+  Socket #3 + L3 #3 (4096KB)
+ L2 #6 (1024KB) + L1 #6 (16KB) + Core #6
+   PU #12 (phys=3)
+   PU #13 (phys=11)
+ L2 #7 (1024KB) + L1 #7 (16KB) + Core #7
+   PU #14 (phys=7)
+   PU #15 (phys=15)
 
 On a 4-socket 2-core Opteron NUMA machine, the lstopo tool may show the
 following outputs:
 
                                hagrid.png
 
-System(62GB)
-  Node#0(8190MB) + Socket#0
- L2(1024KB) + L1(64KB) + Core#0 + P#0
- L2(1024KB) + L1(64KB) + Core#1 + P#1
-  Node#1(8192MB) + Socket#1
- L2(1024KB) + L1(64KB) + Core#0 + P#2
- L2(1024KB) + L1(64KB) + Core#1 + P#3
-  Node#2(8192MB) + Socket#2
- L2(1024KB) + L1(64KB) + Core#0 + P#4
- L2(1024KB) + L1(64KB) + Core#1 + P#5
-  Node#3(8192MB) + Socket#3
- L2(1024KB) + L1(64KB) + Core#0 + P#6
- L2(1024KB) + L1(64KB) + Core#1 + P#7
-  Node#4(8192MB) + Socket#4
- L2(1024KB) + L1(64KB) + Core#0 + P#8
- L2(1024KB) + L1(64KB) + Core#1 + P#9
-  Node#5(8192MB) + Socket#5
- L2(1024KB) + L1(64KB) + Core#0 + P#10
- L2(1024KB) + L1(64KB) + Core#1 + P#11
-  Node#6(8192MB) + Socket#6
- L2(1024KB) + L1(64KB) + Core#0 + P#12
- L2(1024KB) + L1(64KB) + Core#1 + P#13
-  Node#7(8192MB) + Socket#7
- L2(1024KB) + L1(64KB) + Core#0 + P#14
- L2(1024KB) + L1(64KB) + Core#1 + P#15
+Machine (64GB)
+  NUMANode #0 (phys=0 8190MB) + Socket #0
+ L2 #0 (1024KB) + L1 #0 (64KB) + Core #0 + PU #0 (phys=0)
+ L2 #1 (1024KB) + L1 #1 (64KB) + Core #1 + PU #1 (phys=1)
+  NUMANode #1 (phys=1 8192MB) + Socket #1
+ L2 #2 (1024KB) + L1 #2 (64KB) + Core #2 + PU #2 (phys=2)
+ L2 #3 (1024KB) + L1 #3 (64KB) + Core #3 + PU #3 (phys=3)
+  NUMANode #2 (phys=2 8192MB) + Socket #2
+ L2 #4 (1024KB) + L1 #4 (64KB) + Core #4 + PU #4 (phys=4)
+ L2 #5 (1024KB) + L1 #5 (64KB) + Core #5 + PU #5 (phys=5)
+  NUMANode #3 (phys=3 8192MB) + Socket #3
+ L2 #6 (1024KB) + L1 #6 (64KB) + Core #6 + PU #6 (phys=6)
+ L2 #7 (1024KB) + L1 #7 (64KB) + Core #7 + PU #7 (phys=7)
+  NUMANode #4 (phys=4 8192MB) + Socket #4
+ L2 #8 (1024KB) + L1 #8 (64KB) + Core #8 + PU #8 (phys=8)
+ L2 #9 (1024KB) + L1 #9 (64KB) + Core #9 + PU #9 (phys=9)
+  NUMANode #5 (phys=5 8192MB) + Socket #5
+ L2 #10 (1024KB) + L1 #10 (64KB) + Core #10 + PU #10 (phys=10)
+ L2 #11 (1024KB) + L1 #11 (64KB) + Core #11 + PU #11 (phys=11)
+  NUMANode #6 (phys=6 8192MB) + Socket #6
+ L2 #12 (1024KB) + L1 #12 (64KB) + Core #12 + PU #12 (phys=12)
+ L2 #13 (1024KB) + L1 #13 (64KB) + Core #13 + PU #13 (phys=13)
+  NUMANode #7 (phys=7 8192MB) + Socket #7
+ L2 #14 (1024KB) + L1 #14 (64KB) + Core #14 + PU #14 (phys=14)
+ L2 #15 (1024KB) + L1 #15 (64KB) + Core #15 + PU #15 (phys=15)
 
-On a 2-socket quad-core Xeon (pre-Nehalem ones assembling 2 dual-core dies into
-each socket):
+On a 2-socket quad-core Xeon (pre-Nehalem, with 2 dual-core dies into each
+socket):
 
                                emmett.png
 
-System(15GB)
-  Socket#0
- L2(4096KB)
-   L1(32KB) + Core#0 + P#0
-   L1(32KB) + Core#1 + P#4
- L2(4096KB)
-   L1(32KB) + Core#2 + P#2
-   L1(32KB) + Core#3 + P#6
-  Socket#1
- L2(4096KB)
-   L1(32KB) + Core#0 + P#1
-   L1(32KB) + Core#1 + P#5
- L2(4096KB)
-   L1(32KB) + Core#2 + P#3
-   L1(32KB) + Core#3 + P#7
+Machine (16GB)
+  Socket #0
+ L2 #0 (4096KB)
+   L1 #0 (32KB) + Core #0 + PU #0 (phys=0)
+   L1 #1 (32KB) + Core #1 + PU #1 (phys=4)
+ L2 #1 (4096KB)
+   L1 #2 (32KB) + Core #2 + PU #2 (phys=2)
+   L1 #3 (32KB) + Core #3 + PU #3 (phys=6)
+  Socket #1
+ L2 #2 (4096KB)
+   L1 #4 (32KB) + Core #4 + PU #4 (phys=1)
+   L1 #5 (32KB) + Core #5 + PU #5 (phys=5)
+ L2 #3 (4096KB)
+   L1 #6 (32KB) + Core #6 + PU #6 (phys=3)
+   L1 #7 (32KB) + Core #7 + PU #7 (phys=7)
 
 Programming interface
 
-The basic interface is available in hwloc.h . It mostly offers low-level
+The basic interface is available in hwloc.h. It mostly offers low-level
 routines for advanced programmers that want to manually manipulate objects and
-follow links between them. Most users should look at hwloc/helper.h which
-provides a lot of interesting higher-level traversal examples.
+follow links between them. Developers should look at hwloc/helper.h, which
+provides good higher-level topology traversal examples.
 
-Each object contains a cpuset which describes the list of processors that it
+Each object contains a cpuset describing the list of processing units that it
 contains. These cpusets may be used for Binding. hwloc offers an extensive
-cpuset manipulation interface in hwloc/cpuset.h .
+cpuset manipulation interface in hwloc/cpuset.h.
 
 Moreover, hwloc also comes with additional helpers for interoperability with
 several commonly used environments. For Linux, some specific helpers are
-available in hwloc/linux.h , and hwloc/linux-libnuma.h if using libnuma. On
-glibc-based systems, additional helpers are available in hwloc/glibc-sched.h .
+available in hwloc/linux.h, and hwloc/linux-libnuma.h if using libnuma. On
+glibc-based systems, additional helpers are available in hwloc/glibc-sched.h.
 For Linux systems with the OpenFabrics verbs library, some dedicated helpers
 are provided in hwloc/openfabrics-verbs.h (this helper file is not yet useful
 on non-Linux systems with the OpenFabrics verbs library).
 
-To precisely define the vocabulary used by hwloc, a Glossary is available and
-should probably be read first.
+To precisely define the vocabulary used by hwloc, a Terms and Definitions
+section is available and should probably be read first.
 
-Further documentation is available in html, manual pages, and pdf format in the
-source tarball in doc/doxygen-doc/ (after doxygen compilation for svn
-checkouts) and are installed in $prefix/share/doc/hwloc/ and the usual manual
-repository.
+Further documentation is available in a full set of HTML pages, man pages, and
+self-contained PDF files (formatted for both both US letter and A4 formats) in
+the source tarball in doc/doxygen-doc/. If you are building from a Subversion
+checkout, you will need to have Doxygen and pdflatex installed -- the
+documentation will be built during the normal "make" process. The documentation
+is installed during "make install" to $prefix/share/doc/hwloc/ and your systems
+default man page tree (under $prefix, of course).
 
 The following section presents an example of API usage.
 
-Interface example
+API example
 
-This section shows how to use hwloc with an small example hwloc-hello.c that
-just prints the topology and binds itself to the first processor of the second
+The following small C example (named ``hwloc-hello.c'') prints the topology of
+the machine and bring the process to the first logical processor of the second
 core of the machine.
 
-Hardware Location provides a pkg-config object, so compiling the example boils
-down to
+/* Example hwloc API program.
+ *
+ * Copyright ? 2009 INRIA, Universit? Bordeaux 1
+ * Copyright ? 2009 Cisco Systems, Inc.  All rights reserved.
+ *
+ * hwloc-hello.c
+ */
 
-CFLAGS+=$(pkg-config --cflags hwloc)
-LDLIBS+=$(pkg-config --libs hwloc)
-cc hwloc-hello.c $(CFLAGS) -o hwloc-hello $(LDLIBS)
-
-/* topo-hello.c */
 #include <hwloc.h>
 
-static void print_children(hwloc_topology_t topology, hwloc_obj_t obj, int depth)
+static void print_children(hwloc_topology_t topology, hwloc_obj_t obj,
+                        int depth)
 {
-     char string[128];
-     int i;
+ char string[128];
+ unsigned i;
 
-     hwloc_obj_snprintf(string, sizeof(string), topology, obj, "#", 0);
-     printf("%*s%s\n", 2*depth, "", string);
-     for (i = 0; i < obj->arity; i++)
-             print_children(topology, obj->children[i], depth + 1);
+ hwloc_obj_snprintf(string, sizeof(string), topology, obj, "#", 0);
+ printf("%*s%s\n", 2*depth, "", string);
+ for (i = 0; i < obj->arity; i++) {
+     print_children(topology, obj->children[i], depth + 1);
+ }
 }
 
 int main(void)
 {
-     /* Topology object */
-     hwloc_topology_t topology;
+ int depth;
+ unsigned i;
+ unsigned long size;
+ int levels;
+ char string[128];
+ int topodepth;
+ hwloc_topology_t topology;
+ hwloc_cpuset_t cpuset;
+ hwloc_obj_t obj;
 
-     /* Allocate and initialize topology object.  */
-     hwloc_topology_init(&topology);
+ /* Allocate and initialize topology object. */
+ hwloc_topology_init(&topology);
 
-     /* ... Optionally, put detection configuration here to e.g. ignore some
-        objects types, define a synthetic topology, etc....  The default is
-        to detect all the objects of the machine that the caller is allowed
-        to access.
-        See Configure Topology Detection.  */
+ /* ... Optionally, put detection configuration here to e.g. ignore
+    some objects types, define a synthetic topology, etc....
 
-     /* Perform the topology detection.  */
-     hwloc_topology_load(topology);
+    The default is to detect all the objects of the machine that
+    the caller is allowed to access.  See Configure Topology
+    Detection. */
 
+ /* Perform the topology detection. */
+ hwloc_topology_load(topology);
 
-     /* Optionally, get some additional topology information
-      * in case we need the topology depth later.
-      */
-     unsigned topodepth = hwloc_topology_get_depth(topology);
+ /* Optionally, get some additional topology information
+    in case we need the topology depth later. */
+ topodepth = hwloc_topology_get_depth(topology);
 
-
-     /* Walk the topology with an array style, from level 0 (always the
-      * system level) to the lowest level (always the proc level). */
-     int depth, i;
-     char string[128];
-     for (depth = 0; depth < topodepth; depth++) {
-             for (i = 0; i < hwloc_get_nbobjs_by_depth(topology, depth); i++) {
-                     hwloc_obj_snprintf(string, sizeof(string), topology,
-                                     hwloc_get_obj_by_depth(topology, depth, i), "#", 0);
-                     printf("%s\n", string);
-             }
+ /* First example:
+  * Walk the topology with an array style, from level 0 (always the
+  * system level) to the lowest level (always the proc level). */
+ for (depth = 0; depth < topodepth; depth++) {
+     printf("*** Objects at level %d\n", depth);
+     for (i = 0; i < hwloc_get_nbobjs_by_depth(topology, depth);
+          i++) {
+         hwloc_obj_snprintf(string, sizeof(string), topology,
+                    hwloc_get_obj_by_depth(topology, depth, i),
+                    "#", 0);
+         printf("Index %u: %s\n", i, string);
      }
+ }
 
-     /* Walk the topology with a tree style.  */
-     print_children(topology, hwloc_get_system_obj(topology), 0);
+ /* Second example:
+  * Walk the topology with a tree style. */
+ printf("*** Printing overall tree\n");
+ print_children(topology, hwloc_get_root_obj(topology), 0);
 
+ /* Third example:
+  * Print the number of sockets. */
+ depth = hwloc_get_type_depth(topology, HWLOC_OBJ_SOCKET);
+ if (depth == HWLOC_TYPE_DEPTH_UNKNOWN) {
+     printf("*** The number of sockets is unknown\n");
+ } else {
+     printf("*** %u socket(s)\n",
+            hwloc_get_nbobjs_by_depth(topology, depth));
+ }
 
-     /* Print the number of sockets.  */
-     depth = hwloc_get_type_depth(topology, HWLOC_OBJ_SOCKET);
-     if (depth == HWLOC_TYPE_DEPTH_UNKNOWN)
-             printf("The number of sockets is unknown\n");
-     else
-             printf("%u socket(s)\n", hwloc_get_nbobjs_by_depth(topology, depth));
+ /* Fourth example:
+  * Compute the amount of cache that the first logical processor has above it.
+  */
+ levels = 0;
+ size = 0;
+ for (obj = hwloc_get_obj_by_type(topology, HWLOC_OBJ_PU, 0);
+      obj;
+      obj = obj->parent)
+   if (obj->type == HWLOC_OBJ_CACHE) {
+     levels++;
+     size += obj->attr->cache.size;
+   }
+ printf("*** Logical processor 0 has %u caches totaling %luKB\n", levels, size / 1024);
 
+ /* Fifth example:
+  * Bind to only one thread of the last core of the machine.
+  *
+  * First find out where cores are, or else smaller sets of CPUs if
+  * the OS doesn't have the notion of a "core". */
+ depth = hwloc_get_type_or_below_depth(topology, HWLOC_OBJ_CORE);
 
-     /* Find out where cores are, or else smaller sets of CPUs if the OS
-      * doesn&apos;t have the notion of core. */
-     depth = hwloc_get_type_or_below_depth(topology, HWLOC_OBJ_CORE);
+ /* Get last core. */
+ obj = hwloc_get_obj_by_depth(topology, depth,
+                hwloc_get_nbobjs_by_depth(topology, depth) - 1);
+ if (obj) {
+     /* Get a copy of its cpuset that we may modify. */
+     cpuset = hwloc_cpuset_dup(obj->cpuset);
 
-     /* Get last one.  */
-     hwloc_obj_t obj = hwloc_get_obj_by_depth(topology, depth, hwloc_get_nbobjs_by_depth(topology, depth) - 1);
-     if (!obj)
-             return 0;
-
-     /* Get a copy of its cpuset that we may modify.  */
-     hwloc_cpuset_t cpuset = hwloc_cpuset_dup(obj->cpuset);
-
-     /* Get only one logical processor (in case the core is SMT/hyperthreaded).  */
+     /* Get only one logical processor (in case the core is
+        SMT/hyperthreaded). */
      hwloc_cpuset_singlify(cpuset);
 
-     /* And try to bind ourself there.  */
+     /* And try to bind ourself there. */
      if (hwloc_set_cpubind(topology, cpuset, 0)) {
-             char *str = NULL;
-             hwloc_cpuset_asprintf(&str, obj->cpuset);
-             printf("Couldn&apos;t bind to cpuset %s\n", str);
-             free(str);
+         char *str;
+         hwloc_cpuset_asprintf(&str, obj->cpuset);
+         printf("Couldn't bind to cpuset %s\n", str);
+         free(str);
      }
 
      /* Free our cpuset copy */
      hwloc_cpuset_free(cpuset);
+ }
 
-     /* Destroy topology object.  */
-     hwloc_topology_destroy(topology);
+ /* Destroy topology object. */
+ hwloc_topology_destroy(topology);
 
-     return 0;
+ return 0;
 }
 
+hwloc provides a pkg-config executable to obtain relevant compiler and linker
+flags. For example, it can be used thusly to compile applications that utilize
+the hwloc library (assuming GNU Make):
+
+CFLAGS += $(pkg-config --cflags hwloc)
+LDLIBS += $(pkg-config --libs hwloc)
+cc hwloc-hello.c $(CFLAGS) -o hwloc-hello $(LDLIBS)
+
+On a machine with 4GB of RAM and 2 processor sockets -- each socket of which
+has two processing cores -- the output from running hwloc-hello could be
+something like the following:
+
+shell$ ./hwloc-hello
+*** Objects at level 0
+Index 0: Machine(3938MB)
+*** Objects at level 1
+Index 0: Socket#0
+Index 1: Socket#1
+*** Objects at level 2
+Index 0: Core#0
+Index 1: Core#1
+Index 2: Core#3
+Index 3: Core#2
+*** Objects at level 3
+Index 0: PU#0
+Index 1: PU#1
+Index 2: PU#2
+Index 3: PU#3
+*** Printing overall tree
+Machine(3938MB)
+  Socket#0
+ Core#0
+   PU#0
+ Core#1
+   PU#1
+  Socket#1
+ Core#3
+   PU#2
+ Core#2
+   PU#3
+*** 2 socket(s)
+shell$
+
 Questions and bugs
 
 Questions should be sent to the devel mailing list (http://www.open-mpi.org/
@@ -302,11 +401,11 @@
 
 libtopology was initially developed by the INRIA Runtime Team-Project (http://
 runtime.bordeaux.inria.fr/) (headed by Raymond Namyst (http://
-dept-info.labri.fr/~namyst/)). PLPA was initially developed by the Open MPI
+dept-info.labri.fr/~namyst/). PLPA was initially developed by the Open MPI
 development team as a sub-project. Both are now deprecated in favor of hwloc,
 which is distributed as an Open MPI sub-project.
 
 -------------------------------------------------------------------------------
 
-Generated on Mon Oct 26 15:22:12 2009 for Hardware Locality (hwloc) by  doxygen
-1.6.1
+Generated on Sun Apr 4 13:48:12 2010 for Hardware Locality (hwloc) by  doxygen
+1.6.3

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/VERSION
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/VERSION	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/VERSION	2010-05-11 01:47:13 UTC (rev 6632)
@@ -5,9 +5,9 @@
 # major, minor, and release are generally combined in the form
 # <major>.<minor>.<release>.  If release is zero, then it is omitted.
 
-major=0
-minor=9
-release=2
+major=1
+minor=0
+release=0
 
 # greek is used for alpha or beta release tags.  If it is non-empty,
 # it will be appended to the version number.  It does not have to be
@@ -16,7 +16,7 @@
 # requirement is that it must be entirely printable ASCII characters
 # and have no white space.
 
-greek=rc1
+greek=rc5
 
 # If want_svn=1, then the SVN r number will be included in the overall
 # hwloc version number in some form.

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/distscript.csh
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/distscript.csh	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/distscript.csh	2010-05-11 01:47:13 UTC (rev 6632)
@@ -128,12 +128,6 @@
         exit 1
     endif
 
-    # Remove generate latex kruft; no need to ship that.  
-    echo "*** Remove generated latex kruft: `pwd`"
-    cd doxygen-doc/latex
-    rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out
-    cd ../..
-
     # Make new README file
     echo "*** Making new README"
     make readme
@@ -166,6 +160,15 @@
 echo "*** Now in distdir: $distdir"
 
 #
+# Remove all the latex source files from the distribution tree (the
+# PDFs are still there; we're just removing the latex source because
+# some of the filenames get really, really long...).
+#
+
+echo "*** Removing latex source from dist tree"
+rm -rf doc/doxygen-doc/latex
+
+#
 # Get the latest config.guess and config.sub from ftp.gnu.org
 #
 

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/hwloc.m4
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/hwloc.m4	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/hwloc.m4	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,23 +1,617 @@
 dnl -*- Autoconf -*-
 dnl
 dnl Copyright 2009 INRIA, Université Bordeaux 1
+dnl Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
+dnl                         University Research and Technology
+dnl                         Corporation.  All rights reserved.
+dnl Copyright (c) 2004-2005 The Regents of the University of California.
+dnl                         All rights reserved.
+dnl Copyright (c) 2004-2008 High Performance Computing Center Stuttgart, 
+dnl                         University of Stuttgart.  All rights reserved.
+dnl Copyright © 2006-2010  Cisco Systems, Inc.  All rights reserved.
 
+# Main hwloc m4 macro, to be invoked by the user
+#
+# Expects two or three paramters:
+# 1. Configuration prefix
+# 2. What to do upon success
+# 3. What to do upon failure
+# 4. If non-empty, print the announcement banner
+#
+AC_DEFUN([HWLOC_SETUP_CORE],[
+    AC_REQUIRE([AC_CANONICAL_TARGET])
+    AC_REQUIRE([AC_PROG_CC])
+    AC_REQUIRE([AM_PROG_CC_C_O])
 
-dnl HWLOC_GCC_FLAGS
-dnl
-dnl Substitute in `GCC_CFLAGS' GCC-specific flags.
-AC_DEFUN([HWLOC_GCC_FLAGS], [
-  # GCC specifics.
-  if test "x$GCC" = "xyes"; then
-    GCC_CFLAGS="-std=c99 -Wall -Wmissing-prototypes -Wundef"
-    GCC_CFLAGS="$GCC_CFLAGS -Wpointer-arith -Wcast-align"
-  else
-    GCC_CFLAGS=""
-  fi
-  AC_SUBST([GCC_CFLAGS])
+    AS_IF([test "x$4" != "x"],
+          [cat <<EOF
+
+###
+### Configuring hwloc core
+###
+EOF])
+
+    # We want new Libtool.  None of that old stuff.  Pfft.    
+    LT_PREREQ([2.2.6])
+
+    # If no prefix was defined, set a good value
+    m4_ifval([$1], 
+             [m4_define([hwloc_config_prefix],[$1/])],
+             [m4_define([hwloc_config_prefix], [])])
+
+    # Unless previously set to "standalone" mode, default to embedded
+    # mode
+    AS_IF([test "$hwloc_mode" = ""], [hwloc_mode=embedded])
+    AC_MSG_CHECKING([hwloc building mode])
+    AC_MSG_RESULT([$hwloc_mode])
+
+    # Get hwloc's absolute top builddir (which may not be the same as
+    # the real $top_builddir, because we may be building in embedded
+    # mode).
+    HWLOC_startdir=`pwd`
+    if test x"hwloc_config_prefix" != "x" -a ! -d "hwloc_config_prefix"; then
+        mkdir "hwloc_config_prefix"
+    fi
+    if test x"hwloc_config_prefix" != "x"; then
+        cd "hwloc_config_prefix"
+    fi
+    HWLOC_top_builddir=`pwd`
+    AC_SUBST(HWLOC_top_builddir)
+
+    # Get hwloc's absolute top srcdir (which may not be the same as
+    # the real $top_srcdir, because we may be building in embedded
+    # mode).  First, go back to the startdir incase the $srcdir is
+    # relative.
+    cd "$HWLOC_startdir"
+    cd "$srcdir"/hwloc_config_prefix
+    HWLOC_top_srcdir="`pwd`"
+    AC_SUBST(HWLOC_top_srcdir)
+
+    # Go back to where we started
+    cd "$HWLOC_startdir"
+
+    AC_MSG_NOTICE([hwloc builddir: $HWLOC_top_builddir])
+    AC_MSG_NOTICE([hwloc srcdir: $HWLOC_top_srcdir])
+    if test "$HWLOC_top_builddir" != "$HWLOC_top_srcdir"; then
+        AC_MSG_NOTICE([Detected VPATH build])
+    fi
+
+    # Debug mode?
+    AC_MSG_CHECKING([if want hwloc maintainer support])
+    hwloc_debug=
+    AS_IF([test "$enable_debug" = "yes"],
+          [hwloc_debug=1
+           hwloc_debug_msg="enabled"])
+    AS_IF([test "$hwloc_debug" = "" -a "$hwloc_mode" = "embedded" -a "$enable_debug" = ""],
+          [hwloc_debug=0
+           hwloc_debug_msg="disabled (embedded mode)"])
+    AS_IF([test "$hwloc_debug" = "" -a "$enable_debug" = "" -a -d .svn],
+          [hwloc_debug=1
+           hwloc_debug_msg="enabled (SVN checkout default)"])
+    AS_IF([test "$hwloc_debug" = "" -a "$enable_debug" = "" -a -d .hg],
+          [hwloc_debug=1
+           hwloc_debug_msg="enabled (HG clone default)"])
+    AS_IF([test "$hwloc_debug" = ""],
+          [hwloc_debug=0
+           hwloc_debug_msg="disabled"])
+    # Grr; we use #ifndef for HWLOC_DEBUG!  :-(
+    AH_TEMPLATE(HWLOC_DEBUG, [Whether we are in debugging mode or not])
+    AS_IF([test "$hwloc_debug" = "1"], [AC_DEFINE([HWLOC_DEBUG])])
+    AC_MSG_RESULT([$hwloc_debug_msg])
+
+    # We need to set a path for header, etc files depending on whether
+    # we're standalone or embedded. this is taken care of by HWLOC_EMBEDDED.
+
+    AC_MSG_CHECKING([for hwloc directory prefix])
+    AC_MSG_RESULT(m4_ifval([$1], hwloc_config_prefix, [(none)]))
+
+    # Note that private/config.h *MUST* be listed first so that it
+    # becomes the "main" config header file.  Any AM_CONFIG_HEADERs
+    # after that (hwloc/config.h) will only have selective #defines
+    # replaced, not the entire file.
+    AM_CONFIG_HEADER(hwloc_config_prefix[include/private/config.h])
+    AM_CONFIG_HEADER(hwloc_config_prefix[include/hwloc/config.h])
+
+    # What prefix are we using?
+    AC_MSG_CHECKING([for hwloc symbol prefix])
+    AS_IF([test "$hwloc_symbol_prefix_value" = ""],
+          [AS_IF([test "$with_hwloc_symbol_prefix" = ""],
+                 [hwloc_symbol_prefix_value=hwloc_],
+                 [hwloc_symbol_prefix_value=$with_hwloc_symbol_prefix])])
+    AC_DEFINE_UNQUOTED(HWLOC_SYM_PREFIX, [$hwloc_symbol_prefix_value],
+                       [The hwloc symbol prefix])
+    # Ensure to [] escape the whole next line so that we can get the
+    # proper tr tokens
+    [hwloc_symbol_prefix_value_caps="`echo $hwloc_symbol_prefix_value | tr '[:lower:]' '[:upper:]'`"]
+    AC_DEFINE_UNQUOTED(HWLOC_SYM_PREFIX_CAPS, [$hwloc_symbol_prefix_value_caps],
+                       [The hwloc symbol prefix in all caps])
+    AC_MSG_RESULT([$hwloc_symbol_prefix_value])
+
+    # Give an easy #define to know if we need to transform all the
+    # hwloc names
+    AH_TEMPLATE([HWLOC_SYM_TRANSFORM], [Whether we need to re-define all the hwloc public symbols or not])
+    AS_IF([test "$hwloc_symbol_prefix_value" = "hwloc_"],
+          [AC_DEFINE([HWLOC_SYM_TRANSFORM], [0])],
+          [AC_DEFINE([HWLOC_SYM_TRANSFORM], [1])])
+
+    #
+    # Check OS support
+    #
+    AC_MSG_CHECKING([which OS support to include])
+    case ${target} in
+      *-*-linux*)
+        AC_DEFINE(HWLOC_LINUX_SYS, 1, [Define to 1 on Linux])
+        hwloc_linux=yes
+        AC_MSG_RESULT([Linux])
+        ;;
+      *-*-irix*)
+        AC_DEFINE(HWLOC_IRIX_SYS, 1, [Define to 1 on Irix])
+        hwloc_irix=yes
+        AC_MSG_RESULT([IRIX])
+        ;;
+      *-*-darwin*)
+        AC_DEFINE(HWLOC_DARWIN_SYS, 1, [Define to 1 on Darwin])
+        hwloc_darwin=yes
+        AC_MSG_RESULT([Darwin])
+        ;;
+      *-*-solaris*)
+        AC_DEFINE(HWLOC_SOLARIS_SYS, 1, [Define to 1 on Solaris])
+        hwloc_solaris=yes
+        AC_MSG_RESULT([Solaris])
+        ;;
+      *-*-aix*)
+        AC_DEFINE(HWLOC_AIX_SYS, 1, [Define to 1 on AIX])
+        hwloc_aix=yes
+        AC_MSG_RESULT([AIX])
+        ;;
+      *-*-osf*)
+        AC_DEFINE(HWLOC_OSF_SYS, 1, [Define to 1 on OSF])
+        hwloc_osf=yes
+        AC_MSG_RESULT([OSF])
+        ;;
+      *-*-hpux*)
+        AC_DEFINE(HWLOC_HPUX_SYS, 1, [Define to 1 on HP-UX])
+        hwloc_hpux=yes
+        AC_MSG_RESULT([HP-UX])
+        ;;
+      *-*-mingw*|*-*-cygwin*)
+        AC_DEFINE(HWLOC_WIN_SYS, 1, [Define to 1 on WINDOWS])
+        hwloc_windows=yes
+        AC_MSG_RESULT([Windows])
+        ;;
+      *-*-*freebsd*)
+        AC_DEFINE(HWLOC_FREEBSD_SYS, 1, [Define to 1 on *FREEBSD])
+        hwloc_freebsd=yes
+        AC_MSG_RESULT([FreeBSD])
+        ;;
+      *)
+        AC_MSG_RESULT([Unsupported! ($target)])
+        AC_DEFINE(HWLOC_UNSUPPORTED_SYS, 1, [Define to 1 on unsupported systems])
+        AC_MSG_WARN([***********************************************************])
+        AC_MSG_WARN([*** hwloc does not support this system.])
+        AC_MSG_WARN([*** hwloc will *attempt* to build (but it may not work).])
+        AC_MSG_WARN([*** hwloc's run-time results may be reduced to showing just one processor.])
+        AC_MSG_WARN([*** You have been warned.])
+        AC_MSG_WARN([*** Pausing to give you time to read this message...])
+        AC_MSG_WARN([***********************************************************])
+        sleep 10
+        ;;
+    esac
+
+    #
+    # Check CPU support
+    #
+    AC_MSG_CHECKING([which CPU support to include])
+    case ${target} in
+      i*86-*-*)
+        AC_DEFINE(HWLOC_X86_32_ARCH, 1, [Define to 1 on x86_32])
+        hwloc_x86_32=yes
+        AC_MSG_RESULT([x86_32])
+        ;;
+      x86_64-*-*)
+        AC_DEFINE(HWLOC_X86_64_ARCH, 1, [Define to 1 on x86_64])
+        hwloc_x86_64=yes
+        AC_MSG_RESULT([x86_64])
+        ;;
+    esac
+    
+    #
+    # Define C flags
+    #
+
+    # hwloc uses C99 style, so ensure that we can figure out which
+    # compiler flags will drive this.
+    hwloc_CC_save=$CC
+    hwloc_CFLAGS_save=$CFLAGS
+    AC_PROG_CC_C99
+    hwloc_CC_c99_flags=`echo $CC | sed -e s/^$hwloc_CC_save//`
+    CC=$hwloc_CC_save
+    CFLAGS=$hwloc_CFLAGS_save
+
+    # GCC specifics.
+    if test "x$GCC" = "xyes"; then
+        HWLOC_GCC_CFLAGS="-Wall -Wmissing-prototypes -Wundef"
+        HWLOC_GCC_CFLAGS="$HWLOC_GCC_CFLAGS -Wpointer-arith -Wcast-align"
+    fi
+
+    # Enample system extensions for O_DIRECTORY, fdopen, fssl, etc.
+    AC_USE_SYSTEM_EXTENSIONS
+    AH_VERBATIM([USE_HPUX_SYSTEM_EXTENSIONS],
+[/* Enable extensions on HP-UX. */
+#ifndef _HPUX_SOURCE
+# undef _HPUX_SOURCE
+#endif
 ])
+    AC_DEFINE([_HPUX_SOURCE], [1], [Are we building for HP-UX?])
+    
+    AC_LANG_PUSH([C])
+    
+    _HWLOC_CHECK_DIFF_U
+    
+    AC_CHECK_SIZEOF([unsigned long])
+    AC_DEFINE_UNQUOTED([HWLOC_SIZEOF_UNSIGNED_LONG], $ac_cv_sizeof_unsigned_long, [The size of `unsigned long', as computed by sizeof])
+    AC_CHECK_SIZEOF([unsigned int])
+    AC_DEFINE_UNQUOTED([HWLOC_SIZEOF_UNSIGNED_INT], $ac_cv_sizeof_unsigned_int, [The size of `unsigned int', as computed by sizeof])
 
-AC_DEFUN([HWLOC_CHECK_DIFF_U], [
+    #
+    # Check for compiler attributes and visibility
+    #
+    _HWLOC_CHECK_ATTRIBUTES
+    _HWLOC_CHECK_VISIBILITY
+    HWLOC_CFLAGS="$HWLOC_FLAGS $HWLOC_VISIBILITY_CFLAGS"
+    AS_IF([test "$HWLOC_VISIBILITY_CFLAGS" != ""],
+          [AC_MSG_WARN(["$HWLOC_VISIBILITY_CFLAGS" has been added to hwloc's CFLAGS])])
+
+    #
+    # Check for inline compatibility support
+    #
+    AC_MSG_CHECKING([for inline compatibility keyword])
+    AC_TRY_COMPILE([static void __inline__ f(void) { }], [],
+      [__hwloc_inline=__inline__],
+      [AC_TRY_COMPILE([static void __inline f(void) {}], [],
+        [__hwloc_inline=__inline],
+        [__hwloc_inline=]
+      )]
+    )
+    AC_MSG_RESULT([$__hwloc_inline])
+    AC_DEFINE_UNQUOTED(__hwloc_inline, $__hwloc_inline, [Define this to a keyword that can safely replace inline in installed headers])
+    
+    #
+    # Now detect support
+    #
+    
+    hwloc_strncasecmp=strncmp
+    AC_CHECK_FUNCS([strncasecmp], [
+      _HWLOC_CHECK_DECL([strncasecmp], [
+        hwloc_strncasecmp=strncasecmp
+      ])
+    ])
+    AC_DEFINE_UNQUOTED(hwloc_strncasecmp, $hwloc_strncasecmp, [Define this to either strncasecmp or strncmp])
+    
+    AC_CHECK_TYPES([wchar_t], [
+      AC_CHECK_FUNCS([putwc])
+    ], [], [[#include <wchar.h>]])
+    
+    AC_CHECK_HEADERS([locale.h], [
+      AC_CHECK_FUNCS([setlocale])
+    ])
+    AC_CHECK_HEADERS([langinfo.h], [
+      AC_CHECK_FUNCS([nl_langinfo])
+    ])
+    old_LIBS="$LIBS"
+    LIBS=
+    AC_CHECK_HEADERS([curses.h], [
+      AC_CHECK_HEADERS([term.h], [
+        AC_SEARCH_LIBS([tparm], [termcap ncursesw ncurses curses], [
+            AC_SUBST([HWLOC_TERMCAP_LIBS], ["$LIBS"])
+            AC_DEFINE([HWLOC_HAVE_LIBTERMCAP], [1],
+                      [Define to 1 if you have a library providing the termcap interface])
+          ])
+      ], [], [[#include <curses.h>]])
+    ])
+    LIBS="$old_LIBS"
+
+    AC_CHECK_TYPES([KAFFINITY,
+                    PROCESSOR_CACHE_TYPE,
+                    CACHE_DESCRIPTOR,
+                    LOGICAL_PROCESSOR_RELATIONSHIP,
+                    SYSTEM_LOGICAL_PROCESSOR_INFORMATION,
+                    GROUP_AFFINITY,
+                    PROCESSOR_RELATIONSHIP,
+                    NUMA_NODE_RELATIONSHIP,
+                    CACHE_RELATIONSHIP,
+                    PROCESSOR_GROUP_INFO,
+                    GROUP_RELATIONSHIP,
+                    SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX],
+                    [],[],[[#include <windows.h>]])
+    AC_HAVE_LIBRARY(gdi32)
+    
+    AC_CHECK_HEADER([windows.h], [
+      AC_DEFINE([HWLOC_HAVE_WINDOWS_H], [1], [Define to 1 if you have the `windows.h' header.])
+    ])
+    
+    AC_CHECK_HEADERS([sys/lgrp_user.h], [
+      AC_HAVE_LIBRARY([lgrp])
+    ])
+    AC_CHECK_HEADERS([kstat.h], [
+      AC_HAVE_LIBRARY([kstat])
+    ])
+    
+    AC_CHECK_HEADERS([infiniband/verbs.h], [
+      AC_HAVE_LIBRARY([ibverbs], [hwloc_have_libibverbs=yes])
+    ])
+    
+    AC_CHECK_DECLS([_SC_NPROCESSORS_ONLN,
+    		_SC_NPROCESSORS_CONF,
+    		_SC_NPROC_ONLN,
+    		_SC_NPROC_CONF,
+    		_SC_LARGE_PAGESIZE],,[:],[[#include <unistd.h>]])
+    
+    AC_HAVE_HEADERS([mach/mach_host.h])
+    AC_HAVE_HEADERS([mach/mach_init.h], [
+      AC_CHECK_FUNCS([host_info])
+    ])
+
+    AC_CHECK_HEADERS([sys/param.h])
+    AC_CHECK_HEADERS([sys/sysctl.h], [
+      AC_CHECK_DECLS([CTL_HW, HW_NCPU],,,[[
+      #if HAVE_SYS_PARAM_H
+      #include <sys/param.h>
+      #endif
+      #include <sys/sysctl.h>
+      ]])
+    ],,[
+      AC_INCLUDES_DEFAULT
+      #if HAVE_SYS_PARAM_H
+      #include <sys/param.h>
+      #endif
+    ])
+    AC_CHECK_FUNCS([sysctl sysctlbyname])
+
+    case ${target} in
+      *-*-mingw*|*-*-cygwin*)
+        hwloc_pid_t=HANDLE
+        hwloc_thread_t=HANDLE
+        ;;
+      *)
+        hwloc_pid_t=pid_t
+        AC_CHECK_TYPES([pthread_t], [hwloc_thread_t=pthread_t], [:], [[#include <pthread.h>]])
+        ;;
+    esac
+    AC_DEFINE_UNQUOTED(hwloc_pid_t, $hwloc_pid_t, [Define this to the process ID type])
+    if test "x$hwloc_thread_t" != "x" ; then
+      AC_DEFINE_UNQUOTED(hwloc_thread_t, $hwloc_thread_t, [Define this to the thread ID type])
+    fi
+    
+    _HWLOC_CHECK_DECL([sched_setaffinity], [
+      AC_MSG_CHECKING([for old prototype of sched_setaffinity])
+      AC_COMPILE_IFELSE(
+        AC_LANG_PROGRAM([[
+          #define _GNU_SOURCE
+          #include <sched.h>
+          static unsigned long mask;
+          ]], [[ sched_setaffinity(0, (void*) &mask);
+          ]]),
+        AC_DEFINE([HWLOC_HAVE_OLD_SCHED_SETAFFINITY], [1], [Define to 1 if glibc provides the old prototype of sched_setaffinity()])
+        AC_MSG_RESULT([yes]),
+        AC_MSG_RESULT([no])
+      )
+    ], , [[
+#define _GNU_SOURCE
+#include <sched.h>
+]])
+    
+    AC_MSG_CHECKING([for working CPU_SET])
+    AC_LINK_IFELSE(
+      AC_LANG_PROGRAM([[
+        #include <sched.h>
+        cpu_set_t set;
+        ]], [[ CPU_ZERO(&set); CPU_SET(0, &set);
+        ]]),
+        AC_DEFINE([HWLOC_HAVE_CPU_SET], [1], [Define to 1 if the CPU_SET macro works])
+        AC_MSG_RESULT([yes]),
+        AC_MSG_RESULT([no])
+    )
+    
+    AC_MSG_CHECKING([for working CPU_SET_S])
+    AC_LINK_IFELSE(
+      AC_LANG_PROGRAM([[
+          #include <sched.h>
+          cpu_set_t *set;
+        ]], [[
+          set = CPU_ALLOC(1024);
+          CPU_ZERO_S(CPU_ALLOC_SIZE(1024), set);
+          CPU_SET_S(CPU_ALLOC_SIZE(1024), 0, set);
+          CPU_FREE(set);
+        ]]),
+        AC_DEFINE([HWLOC_HAVE_CPU_SET_S], [1], [Define to 1 if the CPU_SET_S macro works])
+        AC_MSG_RESULT([yes]),
+        AC_MSG_RESULT([no])
+    )
+
+    # check for kerrighed, but don't abort if not found
+    HWLOC_PKG_CHECK_MODULES([KERRIGHED], [kerrighed >= 2.0], [], [:])
+
+    AC_PATH_PROGS([HWLOC_MS_LIB], [lib])
+    AC_ARG_VAR([HWLOC_MS_LIB], [Path to Microsoft's Visual Studio `lib' tool])
+
+    AC_PATH_PROG([BASH], [bash])
+    
+    AC_CHECK_FUNCS([ffs], [
+      _HWLOC_CHECK_DECL([ffs],[
+        AC_DEFINE([HWLOC_HAVE_DECL_FFS], [1], [Define to 1 if function `ffs' is declared by system headers])
+      ])
+      AC_DEFINE([HWLOC_HAVE_FFS], [1], [Define to 1 if you have the `ffs' function.])
+    ])
+    AC_CHECK_FUNCS([ffsl], [
+      _HWLOC_CHECK_DECL([ffsl],[
+        AC_DEFINE([HWLOC_HAVE_DECL_FFSL], [1], [Define to 1 if function `ffsl' is declared by system headers])
+      ])
+      AC_DEFINE([HWLOC_HAVE_FFSL], [1], [Define to 1 if you have the `ffsl' function.])
+    ])
+    
+    AC_CHECK_FUNCS([fls], [
+      _HWLOC_CHECK_DECL([fls],[
+        AC_DEFINE([HWLOC_HAVE_DECL_FLS], [1], [Define to 1 if function `fls' is declared by system headers])
+      ])
+      AC_DEFINE([HWLOC_HAVE_FLS], [1], [Define to 1 if you have the `fls' function.])
+    ])
+    AC_CHECK_FUNCS([flsl], [
+      _HWLOC_CHECK_DECL([flsl],[
+        AC_DEFINE([HWLOC_HAVE_DECL_FLSL], [1], [Define to 1 if function `flsl' is declared by system headers])
+      ])
+      AC_DEFINE([HWLOC_HAVE_FLSL], [1], [Define to 1 if you have the `flsl' function.])
+    ])
+    
+    AC_CHECK_FUNCS([clz], [
+      _HWLOC_CHECK_DECL([clz],[
+        AC_DEFINE([HWLOC_HAVE_DECL_CLZ], [1], [Define to 1 if function `clz' is declared by system headers])
+      ])
+      AC_DEFINE([HWLOC_HAVE_CLZ], [1], [Define to 1 if you have the `clz' function.])
+    ])
+    AC_CHECK_FUNCS([clzl], [
+      _HWLOC_CHECK_DECL([clzl],[
+        AC_DEFINE([HWLOC_HAVE_DECL_CLZL], [1], [Define to 1 if function `clzl' is declared by system headers])
+      ])
+      AC_DEFINE([HWLOC_HAVE_CLZL], [1], [Define to 1 if you have the `clzl' function.])
+    ])
+    
+    AC_CHECK_FUNCS([openat], [hwloc_have_openat=yes])
+    
+    AC_CHECK_DECL([numa_bitmask_alloc], [hwloc_have_linux_libnuma=yes], [],
+    	      [#include <numa.h>])
+    
+    AC_CHECK_HEADERS([pthread_np.h])
+    AC_CHECK_DECLS([pthread_setaffinity_np],,[:],[[
+      #include <pthread.h>
+      #ifdef HAVE_PTHREAD_NP_H
+      #  include <pthread_np.h>
+      #endif
+    ]])
+    AC_CHECK_DECLS([pthread_getaffinity_np],,[:],[[
+      #include <pthread.h>
+      #ifdef HAVE_PTHREAD_NP_H
+      #  include <pthread_np.h>
+      #endif
+    ]])
+    AC_CHECK_FUNC([sched_setaffinity], [hwloc_have_sched_setaffinity=yes])
+    AC_CHECK_HEADERS([sys/cpuset.h],,,[[#include <sys/param.h>]])
+    
+    # Setup HWLOC's C, CPP, and LD flags
+    HWLOC_CFLAGS="$hwloc_CC_c99_flags $HWLOC_CFLAGS"
+    AC_SUBST(HWLOC_CFLAGS)
+    HWLOC_CPPFLAGS='-I$(HWLOC_top_srcdir)/include -I$(HWLOC_top_builddir)/include'
+    AC_SUBST(HWLOC_CPPFLAGS)
+    HWLOC_LDFLAGS='-L$(HWLOC_top_builddir)/src'
+    AC_SUBST(HWLOC_LDFLAGS)
+
+    # Set these values explicitly for embedded builds.  Exporting
+    # these values through *_EMBEDDED_* values gives us the freedom to
+    # do something different someday if we ever need to.
+    HWLOC_EMBEDDED_CFLAGS=$HWLOC_CFLAGS
+    AC_SUBST(HWLOC_EMBEDDED_CFLAGS)
+    HWLOC_EMBEDDED_CPPFLAGS=$HWLOC_CPPFLAGS
+    AC_SUBST(HWLOC_EMBEDDED_CPPFLAGS)
+    HWLOC_EMBEDDED_LDADD='$(HWLOC_top_builddir)/src/libhwloc_embedded.la'
+    AC_SUBST(HWLOC_EMBEDDED_LDADD)
+
+    # Try to compile the cpuid inlines
+    AC_MSG_CHECKING([for cpuid])
+    old_CPPFLAGS="$CPPFLAGS"
+    CFLAGS="$CFLAGS -I$HWLOC_top_srcdir/include"
+    AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[
+        #include <stdio.h>
+        #include <private/cpuid.h>
+      ]], [[
+        if (hwloc_have_cpuid()) {
+          unsigned eax = 0, ebx, ecx = 0, edx;
+          hwloc_cpuid(&eax, &ebx, &ecx, &edx);
+          printf("highest cpuid %x\n", eax);
+          return 0;
+        }
+      ]]), [
+      AC_MSG_RESULT([yes])
+      AC_DEFINE(HWLOC_HAVE_CPUID, 1, [Define to 1 if you have cpuid])
+      hwloc_have_cpuid=yes
+    ], [
+      AC_MSG_RESULT([no])
+    ])
+    CPPFLAGS="$old_CPPFLAGS"
+
+    # Always generate these files
+    AC_CONFIG_FILES(
+        hwloc_config_prefix[Makefile]
+        hwloc_config_prefix[include/Makefile]
+        hwloc_config_prefix[src/Makefile ]
+    )
+
+    # Cleanup
+    unset hwloc_config_happy
+    AC_LANG_POP
+
+    # Success
+    $2
+])dnl
+
+#-----------------------------------------------------------------------
+
+# Specify the symbol prefix
+AC_DEFUN([HWLOC_SET_SYMBOL_PREFIX],[
+    hwloc_symbol_prefix_value=$1
+])dnl
+
+#-----------------------------------------------------------------------
+
+# This must be a standalone routine so that it can be called both by
+# HWLOC_INIT and an external caller (if HWLOC_INIT is not invoked).
+AC_DEFUN([HWLOC_DO_AM_CONDITIONALS],[
+    AS_IF([test "$hwloc_did_am_conditionals" != "yes"],[
+        AM_CONDITIONAL([HWLOC_BUILD_STANDALONE], [test "$hwloc_mode" = "standalone"])
+
+        AM_CONDITIONAL([HWLOC_HAVE_GCC], [test "x$GCC" = "xyes"])
+        AM_CONDITIONAL([HWLOC_HAVE_MS_LIB], [test "x$HWLOC_MS_LIB" != "x"])
+        AM_CONDITIONAL([HWLOC_HAVE_OPENAT], [test "x$hwloc_have_openat" = "xyes"])
+        AM_CONDITIONAL([HWLOC_HAVE_LINUX_LIBNUMA],
+                       [test "x$hwloc_have_linux_libnuma" = "xyes"])
+        AM_CONDITIONAL([HWLOC_HAVE_SCHED_SETAFFINITY],
+                       [test "x$hwloc_have_sched_setaffinity" = "xyes"])
+        AM_CONDITIONAL([HWLOC_HAVE_LIBIBVERBS], 
+                       [test "x$hwloc_have_libibverbs" = "xyes"])
+        AM_CONDITIONAL([HWLOC_HAVE_CAIRO], [test "x$enable_cairo" != "xno"])
+        AM_CONDITIONAL([HWLOC_HAVE_XML], [test "x$enable_xml" != "xno"])
+
+        AM_CONDITIONAL([HWLOC_BUILD_DOXYGEN],
+                       [test "x$hwloc_generate_doxs" = "xyes"])
+        AM_CONDITIONAL([HWLOC_BUILD_README], 
+                       [test "x$hwloc_generate_readme" = "xyes" -a \( "x$hwloc_install_doxs" = "xyes" -o "x$hwloc_generate_doxs" = "xyes" \) ])
+        AM_CONDITIONAL([HWLOC_INSTALL_DOXYGEN], 
+                       [test "x$hwloc_install_doxs" = "xyes"])
+
+        AM_CONDITIONAL([HWLOC_HAVE_LINUX], [test "x$hwloc_linux" = "xyes"])
+        AM_CONDITIONAL([HWLOC_HAVE_IRIX], [test "x$hwloc_irix" = "xyes"])
+        AM_CONDITIONAL([HWLOC_HAVE_DARWIN], [test "x$hwloc_darwin" = "xyes"])
+        AM_CONDITIONAL([HWLOC_HAVE_FREEBSD], [test "x$hwloc_freebsd" = "xyes"])
+        AM_CONDITIONAL([HWLOC_HAVE_SOLARIS], [test "x$hwloc_solaris" = "xyes"])
+        AM_CONDITIONAL([HWLOC_HAVE_AIX], [test "x$hwloc_aix" = "xyes"])
+        AM_CONDITIONAL([HWLOC_HAVE_OSF], [test "x$hwloc_osf" = "xyes"])
+        AM_CONDITIONAL([HWLOC_HAVE_HPUX], [test "x$hwloc_hpux" = "xyes"])
+        AM_CONDITIONAL([HWLOC_HAVE_WINDOWS], [test "x$hwloc_windows" = "xyes"])
+        AM_CONDITIONAL([HWLOC_HAVE_MINGW32], 
+                       [test "x$hwloc_target_os" = "xmingw32"])
+
+        AM_CONDITIONAL([HWLOC_HAVE_X86_32], [test "x$hwloc_x86_32" = "xyes"])
+        AM_CONDITIONAL([HWLOC_HAVE_X86_64], [test "x$hwloc_x86_64" = "xyes"])
+        AM_CONDITIONAL([HWLOC_DOXYGEN_BROKEN_SHORT_NAMES], [test "$HWLOC_DOXYGEN_VERSION" = "1.6.2"])
+        AM_CONDITIONAL([HWLOC_HAVE_CPUID], [test "x$hwloc_have_cpuid" = "xyes"])
+        AM_CONDITIONAL([HWLOC_BUILD_UTILS], [test "$hwloc_build_utils" = "yes"])
+        AM_CONDITIONAL([HWLOC_BUILD_TESTS], [test "$hwloc_build_tests" = "yes"])
+    ])
+    hwloc_did_am_conditionals=yes
+])dnl
+
+#-----------------------------------------------------------------------
+
+AC_DEFUN([_HWLOC_CHECK_DIFF_U], [
   AC_MSG_CHECKING([whether diff accepts -u])
   if diff -u /dev/null /dev/null 2> /dev/null
   then
@@ -28,3 +622,33 @@
   AC_SUBST([HWLOC_DIFF_U])
   AC_MSG_RESULT([$HWLOC_DIFF_U])
 ])
+
+#-----------------------------------------------------------------------
+
+dnl HWLOC_CHECK_DECL
+dnl
+dnl Check declaration of given function by trying to call it with an insane
+dnl number of arguments (10). Success means the compiler couldn't really check.
+AC_DEFUN([_HWLOC_CHECK_DECL], [
+  AC_MSG_CHECKING([whether function $1 is declared])
+  AC_REQUIRE([AC_PROG_CC])
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT([$4])],[$1(1,2,3,4,5,6,7,8,9,10);])],
+    [AC_MSG_RESULT([no])
+     $3],
+    [AC_MSG_RESULT([yes])
+     $2]
+  )
+])
+
+#-----------------------------------------------------------------------
+
+dnl HWLOC_CHECK_DECLS
+dnl
+dnl Same as HWLOCK_CHECK_DECL, but defines HAVE_DECL_foo to 1 or 0 depending on
+dnl the result.
+AC_DEFUN([_HWLOC_CHECK_DECLS], [
+  HWLOC_CHECK_DECL([$1], [ac_have_decl=1], [ac_have_decl=0], [$4])
+  AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_DECL_$1]), [$ac_have_decl],
+    [Define to 1 if you have the declaration of `$1', and to 0 if you don't])
+])
+

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/hwloc_check_attributes.m4
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/hwloc_check_attributes.m4	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/hwloc_check_attributes.m4	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,527 @@
+# This macro set originally copied from Open MPI:
+# Copyright (c) 2004-2007 The Trustees of Indiana University and Indiana
+#                         University Research and Technology
+#                         Corporation.  All rights reserved.
+# Copyright (c) 2004-2005 The University of Tennessee and The University
+#                         of Tennessee Research Foundation.  All rights
+#                         reserved.
+# Copyright (c) 2004-2007 High Performance Computing Center Stuttgart,
+#                         University of Stuttgart.  All rights reserved.
+# Copyright (c) 2004-2005 The Regents of the University of California.
+#                         All rights reserved.
+# and renamed for hwloc:
+# Copyright (c) 2009 INRIA, Université Bordeaux 1
+# Copyright (c) 2010 Cisco Systems, Inc.  All rights reserved.
+#
+# 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 listed
+#   in this license in the documentation and/or other materials
+#   provided with the distribution.
+# 
+# - Neither the name of the copyright holders nor the names of its
+#   contributors may be used to endorse or promote products derived from
+#   this software without specific prior written permission.
+# 
+# The copyright holders provide no reassurances that the source code
+# provided does not infringe any patent, copyright, or any other
+# intellectual property rights of third parties.  The copyright holders
+# disclaim any liability to any recipient for claims brought against
+# recipient by any third party for infringement of that parties
+# intellectual property rights.
+# 
+# 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.
+#
+
+#
+# Search the generated warnings for 
+# keywords regarding skipping or ignoring certain attributes
+#   Intel: ignore
+#   Sun C++: skip
+#
+AC_DEFUN([_HWLOC_ATTRIBUTE_FAIL_SEARCH],[
+    AC_REQUIRE([AC_PROG_GREP])
+    if test -s conftest.err ; then
+        for i in ignore skip ; do
+            $GREP -iq $i conftest.err
+            if test "$?" = "0" ; then
+                hwloc_cv___attribute__[$1]=0
+                break;
+            fi
+        done
+    fi
+])
+
+#
+# HWLOC: Remove C++ compiler check.  It can result in a circular
+# dependency in embedded situations.
+#
+# Check for one specific attribute by compiling with C
+# and possibly using a cross-check.
+#
+# If the cross-check is defined, a static function "usage" should be
+# defined, which is to be called from main (to circumvent warnings
+# regarding unused function in main file)
+#       static int usage (int * argument);
+#
+# The last argument is for specific CFLAGS, that need to be set 
+# for the compiler to generate a warning on the cross-check.
+# This may need adaption for future compilers / CFLAG-settings.
+#
+AC_DEFUN([_HWLOC_CHECK_SPECIFIC_ATTRIBUTE], [
+    AC_MSG_CHECKING([for __attribute__([$1])])
+    AC_CACHE_VAL(hwloc_cv___attribute__[$1], [
+        #
+        # Try to compile using the C compiler
+        #
+        AC_TRY_COMPILE([$2],[],
+                       [
+                        #
+                        # In case we did succeed: Fine, but was this due to the
+                        # attribute being ignored/skipped? Grep for IgNoRe/skip in conftest.err
+                        # and if found, reset the hwloc_cv__attribute__var=0
+                        #
+                        hwloc_cv___attribute__[$1]=1
+                        _HWLOC_ATTRIBUTE_FAIL_SEARCH([$1])
+                       ],
+                       [hwloc_cv___attribute__[$1]=0])
+        
+        #
+        # If the attribute is supported by both compilers,
+        # try to recompile a *cross-check*, IFF defined.
+        #
+        if test '(' "$hwloc_cv___attribute__[$1]" = "1" -a "[$3]" != "" ')' ; then
+            ac_c_werror_flag_safe=$ac_c_werror_flag
+            ac_c_werror_flag="yes"
+            CFLAGS_safe=$CFLAGS
+            CFLAGS="$CFLAGS [$4]"
+
+            AC_TRY_COMPILE([$3],
+                [
+                 int i=4711;
+                 i=usage(&i);
+                ],
+                [hwloc_cv___attribute__[$1]=0],
+                [
+                 #
+                 # In case we did NOT succeed: Fine, but was this due to the
+                 # attribute being ignored? Grep for IgNoRe in conftest.err
+                 # and if found, reset the hwloc_cv__attribute__var=0
+                 #
+                 hwloc_cv___attribute__[$1]=1
+                 _HWLOC_ATTRIBUTE_FAIL_SEARCH([$1])
+                ])
+
+            ac_c_werror_flag=$ac_c_werror_flag_safe
+            CFLAGS=$CFLAGS_safe
+        fi
+    ])
+
+    if test "$hwloc_cv___attribute__[$1]" = "1" ; then
+        AC_MSG_RESULT([yes])
+    else
+        AC_MSG_RESULT([no])
+    fi
+])
+
+
+#
+# Test the availability of __attribute__ and with the help
+# of _HWLOC_CHECK_SPECIFIC_ATTRIBUTE for the support of
+# particular attributes. Compilers, that do not support an
+# attribute most often fail with a warning (when the warning
+# level is set).
+# The compilers output is parsed in _HWLOC_ATTRIBUTE_FAIL_SEARCH
+# 
+# To add a new attributes __NAME__ add the
+#   hwloc_cv___attribute__NAME
+# add a new check with _HWLOC_CHECK_SPECIFIC_ATTRIBUTE (possibly with a cross-check)
+#   _HWLOC_CHECK_SPECIFIC_ATTRIBUTE([name], [int foo (int arg) __attribute__ ((__name__));], [], [])
+# and define the corresponding
+#   AC_DEFINE_UNQUOTED(_HWLOC_HAVE_ATTRIBUTE_NAME, [$hwloc_cv___attribute__NAME],
+#                      [Whether your compiler has __attribute__ NAME or not])
+# and decide on a correct macro (in opal/include/opal_config_bottom.h):
+#  #  define __opal_attribute_NAME(x)  __attribute__(__NAME__)
+#
+# Please use the "__"-notation of the attribute in order not to
+# clash with predefined names or macros (e.g. const, which some compilers
+# do not like..)
+#
+
+
+AC_DEFUN([_HWLOC_CHECK_ATTRIBUTES], [
+  AC_MSG_CHECKING(for __attribute__)
+
+  AC_CACHE_VAL(hwloc_cv___attribute__, [
+    AC_TRY_COMPILE(
+      [#include <stdlib.h>
+       /* Check for the longest available __attribute__ (since gcc-2.3) */
+       struct foo {
+           char a;
+           int x[2] __attribute__ ((__packed__));
+        };
+      ],
+      [],
+      [hwloc_cv___attribute__=1],
+      [hwloc_cv___attribute__=0],
+    )
+
+    if test "$hwloc_cv___attribute__" = "1" ; then
+        AC_TRY_COMPILE(
+          [#include <stdlib.h>
+           /* Check for the longest available __attribute__ (since gcc-2.3) */
+           struct foo {
+               char a;
+               int x[2] __attribute__ ((__packed__));
+            };
+          ],
+          [],
+          [hwloc_cv___attribute__=1],
+          [hwloc_cv___attribute__=0],
+        )
+    fi
+    ])
+  AC_DEFINE_UNQUOTED(HWLOC_HAVE_ATTRIBUTE, [$hwloc_cv___attribute__],
+                     [Whether your compiler has __attribute__ or not])
+
+#
+# Now that we know the compiler support __attribute__ let's check which kind of
+# attributed are supported.
+#
+  if test "$hwloc_cv___attribute__" = "0" ; then
+    AC_MSG_RESULT([no])
+    hwloc_cv___attribute__aligned=0
+    hwloc_cv___attribute__always_inline=0
+    hwloc_cv___attribute__cold=0
+    hwloc_cv___attribute__const=0
+    hwloc_cv___attribute__deprecated=0
+    hwloc_cv___attribute__format=0
+    hwloc_cv___attribute__hot=0
+    hwloc_cv___attribute__malloc=0
+    hwloc_cv___attribute__may_alias=0
+    hwloc_cv___attribute__no_instrument_function=0
+    hwloc_cv___attribute__nonnull=0
+    hwloc_cv___attribute__noreturn=0
+    hwloc_cv___attribute__packed=0
+    hwloc_cv___attribute__pure=0
+    hwloc_cv___attribute__sentinel=0
+    hwloc_cv___attribute__unused=0
+    hwloc_cv___attribute__warn_unused_result=0
+    hwloc_cv___attribute__weak_alias=0
+  else
+    AC_MSG_RESULT([yes])
+
+    _HWLOC_CHECK_SPECIFIC_ATTRIBUTE([aligned],
+        [struct foo { char text[4]; }  __attribute__ ((__aligned__(8)));],
+        [],
+        [])
+
+    #
+    # Ignored by PGI-6.2.5; -- recognized by output-parser
+    #
+    _HWLOC_CHECK_SPECIFIC_ATTRIBUTE([always_inline],
+        [int foo (int arg) __attribute__ ((__always_inline__));],
+        [],
+        [])
+
+    _HWLOC_CHECK_SPECIFIC_ATTRIBUTE([cold],
+        [
+         int foo(int arg1, int arg2) __attribute__ ((__cold__));
+         int foo(int arg1, int arg2) { return arg1 * arg2 + arg1; }
+        ],
+        [],
+        [])
+
+    _HWLOC_CHECK_SPECIFIC_ATTRIBUTE([const],
+        [
+         int foo(int arg1, int arg2) __attribute__ ((__const__));
+         int foo(int arg1, int arg2) { return arg1 * arg2 + arg1; }
+        ],
+        [],
+        [])
+
+
+    _HWLOC_CHECK_SPECIFIC_ATTRIBUTE([deprecated],
+        [
+         int foo(int arg1, int arg2) __attribute__ ((__deprecated__));
+         int foo(int arg1, int arg2) { return arg1 * arg2 + arg1; }
+        ],
+        [],
+        [])
+
+
+    HWLOC_ATTRIBUTE_CFLAGS=
+    case "$hwloc_c_vendor" in
+        gnu)
+            HWLOC_ATTRIBUTE_CFLAGS="-Wall"
+            ;;
+        intel)
+            # we want specifically the warning on format string conversion
+            HWLOC_ATTRIBUTE_CFLAGS="-we181"
+            ;;
+    esac
+    _HWLOC_CHECK_SPECIFIC_ATTRIBUTE([format],
+        [
+         int this_printf (void *my_object, const char *my_format, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
+        ],
+        [
+         static int usage (int * argument);
+         extern int this_printf (int arg1, const char *my_format, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
+
+         static int usage (int * argument) {
+             return this_printf (*argument, "%d", argument); /* This should produce a format warning */
+         }
+         /* The autoconf-generated main-function is int main(), which produces a warning by itself */
+         int main(void);
+        ],
+        [$HWLOC_ATTRIBUTE_CFLAGS])
+
+    _HWLOC_CHECK_SPECIFIC_ATTRIBUTE([hot],
+        [
+         int foo(int arg1, int arg2) __attribute__ ((__hot__));
+         int foo(int arg1, int arg2) { return arg1 * arg2 + arg1; }
+        ],
+        [],
+        [])
+
+    _HWLOC_CHECK_SPECIFIC_ATTRIBUTE([malloc],
+        [
+#ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+#endif
+         int * foo(int arg1) __attribute__ ((__malloc__));
+         int * foo(int arg1) { return (int*) malloc(arg1); }
+        ],
+        [],
+        [])
+
+
+    #
+    # Attribute may_alias: No suitable cross-check available, that works for non-supporting compilers
+    # Ignored by intel-9.1.045 -- turn off with -wd1292
+    # Ignored by PGI-6.2.5; ignore not detected due to missing cross-check
+    #
+    _HWLOC_CHECK_SPECIFIC_ATTRIBUTE([may_alias],
+        [int * p_value __attribute__ ((__may_alias__));],
+        [],
+        [])
+
+
+    _HWLOC_CHECK_SPECIFIC_ATTRIBUTE([no_instrument_function],
+        [int * foo(int arg1) __attribute__ ((__no_instrument_function__));],
+        [],
+        [])
+
+
+    #
+    # Attribute nonnull:
+    # Ignored by intel-compiler 9.1.045 -- recognized by cross-check
+    # Ignored by PGI-6.2.5 (pgCC) -- recognized by cross-check
+    #
+    HWLOC_ATTRIBUTE_CFLAGS=
+    case "$hwloc_c_vendor" in
+        gnu)
+            HWLOC_ATTRIBUTE_CFLAGS="-Wall"
+            ;;
+        intel)
+            # we do not want to get ignored attributes warnings, but rather real warnings
+            HWLOC_ATTRIBUTE_CFLAGS="-wd1292"
+            ;;
+    esac
+    _HWLOC_CHECK_SPECIFIC_ATTRIBUTE([nonnull],
+        [
+         int square(int *arg) __attribute__ ((__nonnull__));
+         int square(int *arg) { return *arg; }
+        ],
+        [
+         static int usage(int * argument);
+         int square(int * argument) __attribute__ ((__nonnull__));
+         int square(int * argument) { return (*argument) * (*argument); }
+
+         static int usage(int * argument) {
+             return square( ((void*)0) );    /* This should produce an argument must be nonnull warning */
+         }
+         /* The autoconf-generated main-function is int main(), which produces a warning by itself */
+         int main(void);
+        ],
+        [$HWLOC_ATTRIBUTE_CFLAGS])
+
+
+    _HWLOC_CHECK_SPECIFIC_ATTRIBUTE([noreturn],
+        [
+#ifdef HAVE_UNISTD_H
+#  include <unistd.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+#endif
+         void fatal(int arg1) __attribute__ ((__noreturn__));
+         void fatal(int arg1) { exit(arg1); }
+        ],
+        [],
+        [])
+
+    _HWLOC_CHECK_SPECIFIC_ATTRIBUTE([packed],
+        [
+         struct foo {
+             char a;
+             int x[2] __attribute__ ((__packed__));
+         };
+        ],
+        [],
+        [])
+
+    _HWLOC_CHECK_SPECIFIC_ATTRIBUTE([pure],
+        [
+         int square(int arg) __attribute__ ((__pure__));
+         int square(int arg) { return arg * arg; }
+        ],
+        [],
+        [])
+
+    #
+    # Attribute sentinel:
+    # Ignored by the intel-9.1.045 -- recognized by cross-check
+    #                intel-10.0beta works fine
+    # Ignored by PGI-6.2.5 (pgCC) -- recognized by output-parser and cross-check
+    # Ignored by pathcc-2.2.1 -- recognized by cross-check (through grep ignore)
+    #
+    HWLOC_ATTRIBUTE_CFLAGS=
+    case "$hwloc_c_vendor" in
+        gnu)
+            HWLOC_ATTRIBUTE_CFLAGS="-Wall"
+            ;;
+        intel)
+            # we do not want to get ignored attributes warnings
+            HWLOC_ATTRIBUTE_CFLAGS="-wd1292"
+            ;;
+    esac
+    _HWLOC_CHECK_SPECIFIC_ATTRIBUTE([sentinel],
+        [
+         int my_execlp(const char * file, const char *arg, ...) __attribute__ ((__sentinel__));
+        ],
+        [
+         static int usage(int * argument);
+         int my_execlp(const char * file, const char *arg, ...) __attribute__ ((__sentinel__));
+
+         static int usage(int * argument) {
+             void * last_arg_should_be_null = argument;
+             return my_execlp ("lala", "/home/there", last_arg_should_be_null);   /* This should produce a warning */
+         }
+         /* The autoconf-generated main-function is int main(), which produces a warning by itself */
+         int main(void);
+        ],
+        [$HWLOC_ATTRIBUTE_CFLAGS])
+
+    _HWLOC_CHECK_SPECIFIC_ATTRIBUTE([unused],
+        [
+         int square(int arg1 __attribute__ ((__unused__)), int arg2);
+         int square(int arg1, int arg2) { return arg2; }
+        ],
+        [],
+        [])
+
+
+    #
+    # Attribute warn_unused_result:
+    # Ignored by the intel-compiler 9.1.045 -- recognized by cross-check
+    # Ignored by pathcc-2.2.1 -- recognized by cross-check (through grep ignore)
+    #
+    HWLOC_ATTRIBUTE_CFLAGS=
+    case "$hwloc_c_vendor" in
+        gnu)
+            HWLOC_ATTRIBUTE_CFLAGS="-Wall"
+            ;;
+        intel)
+            # we do not want to get ignored attributes warnings
+            HWLOC_ATTRIBUTE_CFLAGS="-wd1292"
+            ;;
+    esac
+    _HWLOC_CHECK_SPECIFIC_ATTRIBUTE([warn_unused_result],
+        [
+         int foo(int arg) __attribute__ ((__warn_unused_result__));
+         int foo(int arg) { return arg + 3; }
+        ],
+        [
+         static int usage(int * argument);
+         int foo(int arg) __attribute__ ((__warn_unused_result__));
+
+         int foo(int arg) { return arg + 3; }
+         static int usage(int * argument) {
+           foo (*argument);        /* Should produce an unused result warning */
+           return 0;
+         }
+
+         /* The autoconf-generated main-function is int main(), which produces a warning by itself */
+         int main(void);
+        ],
+        [$HWLOC_ATTRIBUTE_CFLAGS])
+
+
+    _HWLOC_CHECK_SPECIFIC_ATTRIBUTE([weak_alias],
+        [
+         int foo(int arg);
+         int foo(int arg) { return arg + 3; }
+         int foo2(int arg) __attribute__ ((__weak__, __alias__("foo")));
+        ],
+        [],
+        [])
+
+  fi
+
+  # Now that all the values are set, define them
+
+  AC_DEFINE_UNQUOTED(HWLOC_HAVE_ATTRIBUTE_ALIGNED, [$hwloc_cv___attribute__aligned],
+                     [Whether your compiler has __attribute__ aligned or not])
+  AC_DEFINE_UNQUOTED(HWLOC_HAVE_ATTRIBUTE_ALWAYS_INLINE, [$hwloc_cv___attribute__always_inline],
+                     [Whether your compiler has __attribute__ always_inline or not])
+  AC_DEFINE_UNQUOTED(HWLOC_HAVE_ATTRIBUTE_COLD, [$hwloc_cv___attribute__cold],
+                     [Whether your compiler has __attribute__ cold or not])
+  AC_DEFINE_UNQUOTED(HWLOC_HAVE_ATTRIBUTE_CONST, [$hwloc_cv___attribute__const],
+                     [Whether your compiler has __attribute__ const or not])
+  AC_DEFINE_UNQUOTED(HWLOC_HAVE_ATTRIBUTE_DEPRECATED, [$hwloc_cv___attribute__deprecated],
+                     [Whether your compiler has __attribute__ deprecated or not])
+  AC_DEFINE_UNQUOTED(HWLOC_HAVE_ATTRIBUTE_FORMAT, [$hwloc_cv___attribute__format],
+                     [Whether your compiler has __attribute__ format or not])
+  AC_DEFINE_UNQUOTED(HWLOC_HAVE_ATTRIBUTE_HOT, [$hwloc_cv___attribute__hot],
+                     [Whether your compiler has __attribute__ hot or not])
+  AC_DEFINE_UNQUOTED(HWLOC_HAVE_ATTRIBUTE_MALLOC, [$hwloc_cv___attribute__malloc],
+                     [Whether your compiler has __attribute__ malloc or not])
+  AC_DEFINE_UNQUOTED(HWLOC_HAVE_ATTRIBUTE_MAY_ALIAS, [$hwloc_cv___attribute__may_alias],
+                     [Whether your compiler has __attribute__ may_alias or not])
+  AC_DEFINE_UNQUOTED(HWLOC_HAVE_ATTRIBUTE_NO_INSTRUMENT_FUNCTION, [$hwloc_cv___attribute__no_instrument_function],
+                     [Whether your compiler has __attribute__ no_instrument_function or not])
+  AC_DEFINE_UNQUOTED(HWLOC_HAVE_ATTRIBUTE_NONNULL, [$hwloc_cv___attribute__nonnull],
+                     [Whether your compiler has __attribute__ nonnull or not])
+  AC_DEFINE_UNQUOTED(HWLOC_HAVE_ATTRIBUTE_NORETURN, [$hwloc_cv___attribute__noreturn],
+                     [Whether your compiler has __attribute__ noreturn or not])
+  AC_DEFINE_UNQUOTED(HWLOC_HAVE_ATTRIBUTE_PACKED, [$hwloc_cv___attribute__packed],
+                     [Whether your compiler has __attribute__ packed or not])
+  AC_DEFINE_UNQUOTED(HWLOC_HAVE_ATTRIBUTE_PURE, [$hwloc_cv___attribute__pure],
+                     [Whether your compiler has __attribute__ pure or not])
+  AC_DEFINE_UNQUOTED(HWLOC_HAVE_ATTRIBUTE_SENTINEL, [$hwloc_cv___attribute__sentinel],
+                     [Whether your compiler has __attribute__ sentinel or not])
+  AC_DEFINE_UNQUOTED(HWLOC_HAVE_ATTRIBUTE_UNUSED, [$hwloc_cv___attribute__unused],
+                     [Whether your compiler has __attribute__ unused or not])
+  AC_DEFINE_UNQUOTED(HWLOC_HAVE_ATTRIBUTE_WARN_UNUSED_RESULT, [$hwloc_cv___attribute__warn_unused_result],
+                     [Whether your compiler has __attribute__ warn unused result or not])
+  AC_DEFINE_UNQUOTED(HWLOC_HAVE_ATTRIBUTE_WEAK_ALIAS, [$hwloc_cv___attribute__weak_alias],
+                     [Whether your compiler has __attribute__ weak alias or not])
+])
+

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/hwloc_check_visibility.m4
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/hwloc_check_visibility.m4	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/hwloc_check_visibility.m4	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,110 @@
+# This macro set originally copied from Open MPI:
+# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
+#                         University Research and Technology
+#                         Corporation.  All rights reserved.
+# Copyright (c) 2004-2005 The University of Tennessee and The University
+#                         of Tennessee Research Foundation.  All rights
+#                         reserved.
+# Copyright (c) 2004-2007 High Performance Computing Center Stuttgart, 
+#                         University of Stuttgart.  All rights reserved.
+# Copyright (c) 2004-2005 The Regents of the University of California.
+#                         All rights reserved.
+# Copyright (c) 2006-2007 Cisco Systems, Inc.  All rights reserved.
+# and renamed for hwloc:
+# Copyright (c) 2009 INRIA, Université Bordeaux 1
+# Copyright (c) 2010 Cisco Systems, Inc.  All rights reserved.
+# 
+# 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 listed
+#   in this license in the documentation and/or other materials
+#   provided with the distribution.
+# 
+# - Neither the name of the copyright holders nor the names of its
+#   contributors may be used to endorse or promote products derived from
+#   this software without specific prior written permission.
+# 
+# The copyright holders provide no reassurances that the source code
+# provided does not infringe any patent, copyright, or any other
+# intellectual property rights of third parties.  The copyright holders
+# disclaim any liability to any recipient for claims brought against
+# recipient by any third party for infringement of that parties
+# intellectual property rights.
+# 
+# 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.
+#
+
+
+# _HWLOC_CHECK_VISIBILITY
+# --------------------------------------------------------
+AC_DEFUN([_HWLOC_CHECK_VISIBILITY],[
+    AC_REQUIRE([AC_PROG_GREP])
+
+    # Check if the compiler has support for visibility, like some versions of gcc, icc.
+    AC_ARG_ENABLE(visibility, 
+        AC_HELP_STRING([--enable-visibility],
+            [enable visibility feature of certain compilers/linkers (default: enabled)]))
+    if test "$enable_visibility" = "no"; then
+        AC_MSG_CHECKING([enable symbol visibility])
+        AC_MSG_RESULT([no]) 
+        have_visibility=0
+    else
+        CFLAGS_orig="$CFLAGS"
+        CFLAGS="$CFLAGS_orig -fvisibility=hidden"
+        hwloc_add=
+        AC_CACHE_CHECK([if $CC supports -fvisibility],
+            [hwloc_cv_cc_fvisibility],
+            [AC_TRY_LINK([
+                    #include <stdio.h>
+                    __attribute__((visibility("default"))) int foo;
+                    void bar(void) { fprintf(stderr, "bar\n"); };
+                    ],[],
+                    [if test -s conftest.err ; then
+                        $GREP -iq "visibility" conftest.err
+                        if test "$?" = "0" ; then
+                            hwloc_cv_cc_fvisibility="no"
+                        else
+                            hwloc_cv_cc_fvisibility="yes"
+                        fi
+                     else
+                        hwloc_cv_cc_fvisibility="yes"
+                     fi],
+                    [hwloc_cv_cc_fvisibility="no"])
+                ])
+
+        if test "$hwloc_cv_cc_fvisibility" = "yes" ; then
+            hwloc_add=" -fvisibility=hidden"
+            have_visibility=1
+            AC_MSG_CHECKING([enable symbol visibility])
+            AC_MSG_RESULT([yes]) 
+        elif test "$enable_visibility" = "yes"; then
+            AC_MSG_ERROR([Symbol visibility support requested but compiler does not seem to support it.  Aborting])
+        else 
+            AC_MSG_CHECKING([enable symbol visibility])
+            AC_MSG_RESULT([no]) 
+            have_visibility=0
+        fi
+        CFLAGS=$CFLAGS_orig
+        HWLOC_VISIBILITY_CFLAGS=$hwloc_add
+        unset hwloc_add 
+    fi
+    AC_DEFINE_UNQUOTED([HWLOC_C_HAVE_VISIBILITY], [$have_visibility],
+            [Whether C compiler supports -fvisibility])
+
+])

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/hwloc_internal.m4
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/hwloc_internal.m4	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/hwloc_internal.m4	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,289 @@
+dnl -*- Autoconf -*-
+dnl
+dnl Copyright 2009 INRIA, Université Bordeaux 1
+dnl Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
+dnl                         University Research and Technology
+dnl                         Corporation.  All rights reserved.
+dnl Copyright (c) 2004-2005 The Regents of the University of California.
+dnl                         All rights reserved.
+dnl Copyright (c) 2004-2008 High Performance Computing Center Stuttgart, 
+dnl                         University of Stuttgart.  All rights reserved.
+dnl Copyright ©  2006-2010 Cisco Systems, Inc.  All rights reserved.
+
+#-----------------------------------------------------------------------
+
+# Probably only ever invoked by hwloc's configure.ac
+AC_DEFUN([HWLOC_BUILD_STANDALONE],[
+    hwloc_mode=standalone
+])dnl
+
+#-----------------------------------------------------------------------
+
+# Probably only ever invoked by hwloc's configure.ac
+AC_DEFUN([HWLOC_DEFINE_ARGS],[
+    # Embedded mode, or standalone?
+    AC_ARG_ENABLE([embedded-mode],
+                    AC_HELP_STRING([--enable-embedded-mode],
+                                   [Using --enable-embedded-mode puts the HWLOC into "embedded" mode.  The default is --disable-embedded-mode, meaning that the HWLOC is in "standalone" mode.]))
+
+    # Change the symbol prefix?
+    AC_ARG_WITH([hwloc-symbol-prefix],
+                AC_HELP_STRING([--with-hwloc-symbol-prefix=STRING],
+                               [STRING can be any valid C symbol name.  It will be prefixed to all public HWLOC symbols.  Default: "hwloc_"]))
+
+    # Debug mode?
+    AC_ARG_ENABLE([debug],
+                  AC_HELP_STRING([--enable-debug],
+                                 [Using --enable-debug enables various hwloc maintainer-level debugging controls.  This option is not recomended for end users.]))
+
+    # Doxygen?
+    AC_ARG_ENABLE([doxygen],
+        [AC_HELP_STRING([--enable-doxygen],
+                        [enable support for building Doxygen documentation (note that this option is ONLY relevant in developer builds; Doxygen documentation is pre-built for tarball builds and this option is therefore ignored)])])
+
+    # Picky?
+    AC_ARG_ENABLE(picky,
+                  AC_HELP_STRING([--disable-picky],
+                                 [When in developer checkouts of hwloc and compiling with gcc, the default is to enable maximum compiler pickyness.  Using --disable-picky or --enable-picky overrides any default setting]))
+
+    # Cairo?
+    AC_ARG_ENABLE([cairo],
+                  AS_HELP_STRING([--disable-cairo], 
+                                 [Disable the Cairo back-end of hwloc's lstopo command]))
+
+    # XML?
+    AC_ARG_ENABLE([xml],
+                  AS_HELP_STRING([--disable-xml], 
+		                 [Disable the XML back-end of hwloc's lstopo command]))
+])dnl
+
+#-----------------------------------------------------------------------
+
+dnl We only build documentation if this is a developer checkout.
+dnl Distribution tarballs just install pre-built docuemntation that was
+dnl included in the tarball.
+
+# Probably only ever invoked by hwloc's configure.ac
+AC_DEFUN([HWLOC_SETUP_DOCS],[
+    cat <<EOF
+
+###
+### Configuring hwloc documentation
+###
+EOF
+
+    AC_MSG_CHECKING([if this is a developer build])
+    AS_IF([test ! -d "$srcdir/.svn" -a ! -d "$srcdir/.hg" -a ! -d "$srcdir/.git"],
+          [AC_MSG_RESULT([no (doxygen generation is optional)])],
+          [AC_MSG_RESULT([yes])])
+    
+    # Generating the doxygen output requires a few tools.  If we
+    # don't have all of them, refuse the build the docs.
+    AC_ARG_VAR([DOXYGEN], [Location of the doxygen program (required for building the hwloc doxygen documentation)])
+    AC_PATH_TOOL([DOXYGEN], [doxygen])
+    HWLOC_DOXYGEN_VERSION=`doxygen --version 2> /dev/null`
+    
+    AC_ARG_VAR([PDFLATEX], [Location of the pdflatex program (required for building the hwloc doxygen documentation)])
+    AC_PATH_TOOL([PDFLATEX], [pdflatex])
+    
+    AC_ARG_VAR([MAKEINDEX], [Location of the makeindex program (required for building the hwloc doxygen documentation)])
+    AC_PATH_TOOL([MAKEINDEX], [makeindex])
+    
+    AC_ARG_VAR([FIG2DEV], [Location of the fig2dev program (required for building the hwloc doxygen documentation)])
+    AC_PATH_TOOL([FIG2DEV], [fig2dev])
+    
+    AC_MSG_CHECKING([if can build doxygen docs])
+    AS_IF([test "x$DOXYGEN" != "x" -a "x$PDFLATEX" != "x" -a "x$MAKEINDEX" != "x" -a "x$FIG2DEV" != "x"],
+                 [hwloc_generate_doxs=yes], [hwloc_generate_doxs=no])
+    AC_MSG_RESULT([$hwloc_generate_doxs])
+    
+    # Making the top-level README requires w3m or lynx.
+    AC_ARG_VAR([W3M], [Location of the w3m program (required to building the top-level hwloc README file)])
+    AC_PATH_TOOL([W3M], [w3m])
+    AC_ARG_VAR([LYNX], [Location of the lynx program (required to building the top-level hwloc README file)])
+    AC_PATH_TOOL([LYNX], [lynx])
+    
+    AC_MSG_CHECKING([if can build top-level README])
+    AS_IF([test "x$W3M" != "x"],
+          [hwloc_generate_readme=yes
+           HWLOC_W3_GENERATOR=$W3M],
+          [AS_IF([test "x$LYNX" != "x"],
+                 [hwloc_generate_readme=yes
+                  HWLOC_W3_GENERATOR="$LYNX -dump -nolist"],
+                 [hwloc_generate_readme=no])])
+    AC_SUBST(HWLOC_W3_GENERATOR)
+    AC_MSG_RESULT([$hwloc_generate_readme])
+    
+    # If any one of the above tools is missing, we will refuse to make dist.
+    AC_MSG_CHECKING([if will build doxygen docs])
+    AS_IF([test "x$hwloc_generate_doxs" = "xyes" -a "x$enable_doxygen" != "xno"],
+          [], [hwloc_generate_doxs=no])
+    AC_MSG_RESULT([$hwloc_generate_doxs])
+    
+    # See if we want to install the doxygen docs
+    AC_MSG_CHECKING([if will install doxygen docs])
+    AS_IF([test "x$hwloc_generate_doxs" = "xyes" -o \
+    	    -f "$srcdir/doc/doxygen-doc/man/man3/hwloc_distribute.3" -a \
+    	    -f "$srcdir/doc/doxygen-doc/hwloc-a4.pdf" -a \
+    	    -f "$srcdir/doc/doxygen-doc/hwloc-letter.pdf"],
+          [hwloc_install_doxs=yes],
+          [hwloc_install_doxs=no])
+    AC_MSG_RESULT([$hwloc_install_doxs])
+    
+    # For the common developer case, if we're in a developer checkout and
+    # using the GNU compilers, turn on maximum warnings unless
+    # specifically disabled by the user.
+    AC_MSG_CHECKING([whether to enable "picky" compiler mode])
+    hwloc_want_picky=0
+    AS_IF([test "$GCC" = "yes"],
+          [AS_IF([test -d "$srcdir/.svn" -o -d "$srcdir/.hg"],
+                 [hwloc_want_picky=1])])
+    if test "$enable_picky" = "yes"; then
+        if test "$GCC" = "yes"; then
+            AC_MSG_RESULT([yes])
+            hwloc_want_picky=1
+        else
+            AC_MSG_RESULT([no])
+            AC_MSG_WARN([Warning: --enable-picky used, but is currently only defined for the GCC compiler set -- automatically disabled])
+            hwloc_want_picky=0
+        fi
+    elif test "$enable_picky" = "no"; then
+        AC_MSG_RESULT([no])
+        hwloc_want_picky=0
+    else
+        if test "$hwloc_want_picky" = 1; then
+            AC_MSG_RESULT([yes (default)])
+        else
+            AC_MSG_RESULT([no (default)])
+        fi
+    fi
+    if test "$hwloc_want_picky" = 1; then
+        add="-Wall -Wunused-parameter -Wundef -Wno-long-long -Wsign-compare"
+        add="$add -Wmissing-prototypes -Wstrict-prototypes"
+        add="$add -Wcomment -pedantic"
+
+        CFLAGS="$CFLAGS $add"
+    fi
+
+    # Generate some files for the docs
+    AC_CONFIG_FILES(
+        hwloc_config_prefix[doc/Makefile]
+        hwloc_config_prefix[doc/doxygen-config.cfg])
+])
+
+#-----------------------------------------------------------------------
+
+# Probably only ever invoked by hwloc's configure.ac
+AC_DEFUN([HWLOC_SETUP_UTILS],[
+    cat <<EOF
+
+###
+### Configuring hwloc command line utilities
+###
+EOF
+
+    hwloc_build_utils=yes
+
+    # Cairo support
+    if test "x$enable_cairo" != "xno"; then
+      HWLOC_PKG_CHECK_MODULES([CAIRO], [cairo], [:], [enable_cairo="no"])
+      if test "x$enable_cairo" != "xno"; then
+        AC_PATH_XTRA
+	CFLAGS_save=$CFLAGS
+	LIBS_save=$LIBS
+
+	CFLAGS="$CFLAGS $X_CFLAGS"
+	LIBS="$LIBS $X_PRE_LIBS $X_LIBS $X_EXTRA_LIBS"
+        AC_CHECK_HEADERS([X11/Xlib.h], [
+          AC_CHECK_HEADERS([X11/Xutil.h X11/keysym.h], [
+            AC_CHECK_LIB([X11], [XOpenDisplay], [
+              enable_X11=yes
+              AC_SUBST([HWLOC_X11_LIBS], ["-lX11"])
+              AC_DEFINE([HWLOC_HAVE_X11], [1], [Define to 1 if X11 libraries are available.])
+            ])]
+          )],,
+          [[#include <X11/Xlib.h>]]
+        )
+        if test "x$enable_X11" != "xyes"; then
+          AC_MSG_WARN([X11 headers not found, Cairo/X11 back-end disabled])
+        fi
+
+	CFLAGS=$CFLAGS_save
+	LIBS=$LIBS_save
+      fi
+    fi
+    
+    if test "x$enable_cairo" != "xno"; then
+        AC_DEFINE([HWLOC_HAVE_CAIRO], [1], [Define to 1 if you have the `cairo' library.])
+    fi
+
+    # XML support        
+    
+    if test "x$enable_xml" != "xno"; then
+        HWLOC_PKG_CHECK_MODULES([XML], [libxml-2.0], [:], [enable_xml="no"])
+    fi
+    
+    if test "x$enable_xml" != "xno"; then
+        HWLOC_REQUIRES="libxml-2.0 $HWLOC_REQUIRES"
+        AC_DEFINE([HWLOC_HAVE_XML], [1], [Define to 1 if you have the `xml' library.])
+        AC_SUBST([HWLOC_HAVE_XML], [1])
+        AC_CHECK_PROGS(XMLLINT, [xmllint])
+    else
+        AC_SUBST([HWLOC_HAVE_XML], [0])
+    fi
+    AC_SUBST(HWLOC_REQUIRES)
+    HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_XML_CFLAGS"
+
+    # Only generate this if we're building the utilities
+    AC_CONFIG_FILES(
+        hwloc_config_prefix[utils/Makefile]
+        hwloc_config_prefix[hwloc.pc])
+])dnl
+
+#-----------------------------------------------------------------------
+
+# Probably only ever invoked by hwloc's configure.ac
+AC_DEFUN([HWLOC_SETUP_TESTS],[
+    cat <<EOF
+
+###
+### Configuring hwloc tests
+###
+EOF
+
+    hwloc_build_tests=yes
+
+    # Only generate these files if we're making the tests
+    AC_CONFIG_FILES(
+        hwloc_config_prefix[tests/Makefile ]
+        hwloc_config_prefix[tests/linux/Makefile]
+        hwloc_config_prefix[tests/xml/Makefile]
+        hwloc_config_prefix[tests/ports/Makefile]
+        hwloc_config_prefix[tests/linux/gather-topology.sh]
+        hwloc_config_prefix[tests/linux/test-topology.sh]
+        hwloc_config_prefix[tests/xml/test-topology.sh]
+        hwloc_config_prefix[utils/test-hwloc-distrib.sh])
+
+    AC_CONFIG_COMMANDS([chmoding-scripts], [chmod +x ]hwloc_config_prefix[tests/linux/test-topology.sh ]hwloc_config_prefix[tests/xml/test-topology.sh ]hwloc_config_prefix[tests/linux/gather-topology.sh ]hwloc_config_prefix[utils/test-hwloc-distrib.sh])
+
+    # These links are only needed in standalone mode.  It would
+    # be nice to m4 foreach this somehow, but whenever I tried
+    # it, I got obscure "invalid tag" errors from
+    # AC_CONFIG_LINKS.  :-\ Since these tests are only run when
+    # built in standalone mode, only generate them in
+    # standalone mode.
+    AC_CONFIG_LINKS(
+        hwloc_config_prefix[tests/ports/topology.c]:hwloc_config_prefix[src/topology.c]
+	hwloc_config_prefix[tests/ports/traversal.c]:hwloc_config_prefix[src/traversal.c]
+	hwloc_config_prefix[tests/ports/topology-synthetic.c]:hwloc_config_prefix[src/topology-synthetic.c]
+	hwloc_config_prefix[tests/ports/topology-solaris.c]:hwloc_config_prefix[src/topology-solaris.c]
+	hwloc_config_prefix[tests/ports/topology-aix.c]:hwloc_config_prefix[src/topology-aix.c]
+	hwloc_config_prefix[tests/ports/topology-osf.c]:hwloc_config_prefix[src/topology-osf.c]
+	hwloc_config_prefix[tests/ports/topology-windows.c]:hwloc_config_prefix[src/topology-windows.c]
+	hwloc_config_prefix[tests/ports/topology-darwin.c]:hwloc_config_prefix[src/topology-darwin.c]
+	hwloc_config_prefix[tests/ports/topology-freebsd.c]:hwloc_config_prefix[src/topology-freebsd.c]
+	hwloc_config_prefix[tests/ports/topology-hpux.c]:hwloc_config_prefix[src/topology-hpux.c])
+    ])
+
+	echo done setting up tests
+])dnl

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/hwloc_pkg.m4
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/hwloc_pkg.m4	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/hwloc_pkg.m4	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,164 @@
+# Copyright (c) 2010 Cisco Systems, Inc.  All rights reserved.
+#
+# hwloc modification to the following PKG_* macros -- add HWLOC_
+# prefix to make it "safe" to embed these macros in other packages.
+# Originally copied from the pkg-config package; see copyright and
+# license below.
+
+# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
+# 
+# Copyright © 2004 Scott James Remnant <scott at netsplit.com>.
+#
+# 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# HWLOC_PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([HWLOC_PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^HWLOC_PKG_CONFIG(_PATH)?$])
+AC_ARG_VAR([HWLOC_PKG_CONFIG], [path to pkg-config utility])dnl
+if test "x$ac_cv_env_HWLOC_PKG_CONFIG_set" != "xset"; then
+	AC_PATH_TOOL([HWLOC_PKG_CONFIG], [pkg-config])
+fi
+if test -n "$HWLOC_PKG_CONFIG"; then
+	HWLOC_pkg_min_version=m4_default([$1], [0.9.0])
+	AC_MSG_CHECKING([pkg-config is at least version $HWLOC_pkg_min_version])
+	if $HWLOC_PKG_CONFIG --atleast-pkgconfig-version $HWLOC_pkg_min_version; then
+		AC_MSG_RESULT([yes])
+	else
+		AC_MSG_RESULT([no])
+		HWLOC_PKG_CONFIG=""
+	fi
+		
+fi[]dnl
+])# HWLOC_PKG_PROG_PKG_CONFIG
+
+# HWLOC_PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists.  Similar
+# to HWLOC_PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+#
+# Similar to HWLOC_PKG_CHECK_MODULES, make sure that the first instance of
+# this or HWLOC_PKG_CHECK_MODULES is called, or make sure to call
+# HWLOC_PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([HWLOC_PKG_CHECK_EXISTS],
+[AC_REQUIRE([HWLOC_PKG_PROG_PKG_CONFIG])dnl
+if test -n "$HWLOC_PKG_CONFIG" && \
+    AC_RUN_LOG([$HWLOC_PKG_CONFIG --exists --silence-errors "$1"]); then
+    m4_ifval([$2], [$2], [:])
+    m4_ifvaln([$3], [else
+                     $3])dnl
+fi])
+
+
+# _HWLOC_PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_HWLOC_PKG_CONFIG],
+[if test -n "$HWLOC_PKG_CONFIG"; then
+    if test -n "$$1"; then
+        HWLOC_pkg_cv_[]$1="$$1"
+    else
+        HWLOC_PKG_CHECK_EXISTS([$3],
+                         [HWLOC_pkg_cv_[]$1=`$HWLOC_PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
+			 [HWLOC_pkg_failed=yes])
+    fi
+else
+	HWLOC_pkg_failed=untried
+fi[]
+])# _HWLOC_PKG_CONFIG
+
+# _HWLOC_PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_HWLOC_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([HWLOC_PKG_PROG_PKG_CONFIG])
+if $HWLOC_PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        HWLOC_pkg_short_errors_supported=yes
+else
+        HWLOC_pkg_short_errors_supported=no
+fi[]dnl
+])# _HWLOC_PKG_SHORT_ERRORS_SUPPORTED
+
+
+# HWLOC_PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# HWLOC_PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to HWLOC_PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([HWLOC_PKG_CHECK_MODULES],[
+    AC_REQUIRE([HWLOC_PKG_PROG_PKG_CONFIG])dnl
+    AC_ARG_VAR([HWLOC_]$1[_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+    AC_ARG_VAR([HWLOC_]$1[_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+    HWLOC_pkg_failed=no
+    AC_MSG_CHECKING([for $1])
+
+    _HWLOC_PKG_CONFIG([HWLOC_][$1][_CFLAGS], [cflags], [$2])
+    _HWLOC_PKG_CONFIG([HWLOC_][$1][_LIBS], [libs], [$2])
+
+    m4_define([_HWLOC_PKG_TEXT], [Alternatively, you may set the environment variables HWLOC_[]$1[]_CFLAGS
+and HWLOC_[]$1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+    if test $HWLOC_pkg_failed = yes; then
+        _HWLOC_PKG_SHORT_ERRORS_SUPPORTED
+        if test $HWLOC_pkg_short_errors_supported = yes; then
+            HWLOC_[]$1[]_PKG_ERRORS=`$HWLOC_PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2" 2>&1`
+        else 
+            HWLOC_[]$1[]_PKG_ERRORS=`$HWLOC_PKG_CONFIG --errors-to-stdout --print-errors "$2" 2>&1`
+        fi
+        # Put the nasty error message in config.log where it belongs
+	echo "$HWLOC_[]$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+	ifelse([$4], , [AC_MSG_ERROR(dnl
+[Package requirements ($2) were not met:
+
+$HWLOCC_$1_PKG_ERRORS
+
+Consider adjusting the HWLOC_PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_HWLOC_PKG_TEXT
+])],
+		[AC_MSG_RESULT([no])
+                $4])
+    elif test $HWLOC_pkg_failed = untried; then
+        ifelse([$4], , [AC_MSG_FAILURE(dnl
+[The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the HWLOC_PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_HWLOC_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])],
+		[$4])
+    else
+	HWLOC_[]$1[]_CFLAGS=$HWLOC_pkg_cv_HWLOC_[]$1[]_CFLAGS
+	HWLOC_[]$1[]_LIBS=$HWLOC_pkg_cv_HWLOC_[]$1[]_LIBS
+        AC_MSG_RESULT([yes])
+	ifelse([$3], , :, [$3])
+    fi[]dnl
+])# HWLOC_PKG_CHECK_MODULES

Deleted: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/pkg.m4
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/pkg.m4	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/config/pkg.m4	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,157 +0,0 @@
-# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
-# 
-# Copyright © 2004 Scott James Remnant <scott at netsplit.com>.
-#
-# 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, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# PKG_PROG_PKG_CONFIG([MIN-VERSION])
-# ----------------------------------
-AC_DEFUN([PKG_PROG_PKG_CONFIG],
-[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
-m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
-AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
-if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
-	AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
-fi
-if test -n "$PKG_CONFIG"; then
-	_pkg_min_version=m4_default([$1], [0.9.0])
-	AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
-	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
-		AC_MSG_RESULT([yes])
-	else
-		AC_MSG_RESULT([no])
-		PKG_CONFIG=""
-	fi
-		
-fi[]dnl
-])# PKG_PROG_PKG_CONFIG
-
-# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-#
-# Check to see whether a particular set of modules exists.  Similar
-# to PKG_CHECK_MODULES(), but does not set variables or print errors.
-#
-#
-# Similar to PKG_CHECK_MODULES, make sure that the first instance of
-# this or PKG_CHECK_MODULES is called, or make sure to call
-# PKG_CHECK_EXISTS manually
-# --------------------------------------------------------------
-AC_DEFUN([PKG_CHECK_EXISTS],
-[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
-if test -n "$PKG_CONFIG" && \
-    AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
-  m4_ifval([$2], [$2], [:])
-m4_ifvaln([$3], [else
-  $3])dnl
-fi])
-
-
-# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
-# ---------------------------------------------
-m4_define([_PKG_CONFIG],
-[if test -n "$PKG_CONFIG"; then
-    if test -n "$$1"; then
-        pkg_cv_[]$1="$$1"
-    else
-        PKG_CHECK_EXISTS([$3],
-                         [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
-			 [pkg_failed=yes])
-    fi
-else
-	pkg_failed=untried
-fi[]dnl
-])# _PKG_CONFIG
-
-# _PKG_SHORT_ERRORS_SUPPORTED
-# -----------------------------
-AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
-[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
-        _pkg_short_errors_supported=yes
-else
-        _pkg_short_errors_supported=no
-fi[]dnl
-])# _PKG_SHORT_ERRORS_SUPPORTED
-
-
-# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
-# [ACTION-IF-NOT-FOUND])
-#
-#
-# Note that if there is a possibility the first call to
-# PKG_CHECK_MODULES might not happen, you should be sure to include an
-# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
-#
-#
-# --------------------------------------------------------------
-AC_DEFUN([PKG_CHECK_MODULES],
-[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
-AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
-AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
-
-pkg_failed=no
-AC_MSG_CHECKING([for $1])
-
-_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
-_PKG_CONFIG([$1][_LIBS], [libs], [$2])
-
-m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
-and $1[]_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.])
-
-if test $pkg_failed = yes; then
-        _PKG_SHORT_ERRORS_SUPPORTED
-        if test $_pkg_short_errors_supported = yes; then
-	        $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"`
-        else 
-	        $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
-        fi
-	# Put the nasty error message in config.log where it belongs
-	echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
-
-	ifelse([$4], , [AC_MSG_ERROR(dnl
-[Package requirements ($2) were not met:
-
-$$1_PKG_ERRORS
-
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
-
-_PKG_TEXT
-])],
-		[AC_MSG_RESULT([no])
-                $4])
-elif test $pkg_failed = untried; then
-	ifelse([$4], , [AC_MSG_FAILURE(dnl
-[The pkg-config script could not be found or is too old.  Make sure it
-is in your PATH or set the PKG_CONFIG environment variable to the full
-path to pkg-config.
-
-_PKG_TEXT
-
-To get pkg-config, see <http://pkg-config.freedesktop.org/>.])],
-		[$4])
-else
-	$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
-	$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
-        AC_MSG_RESULT([yes])
-	ifelse([$3], , :, [$3])
-fi[]dnl
-])# PKG_CHECK_MODULES

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/configure.ac
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/configure.ac	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/configure.ac	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,32 +1,47 @@
-# -*- autoconf -*-
+# -*- shell-script -*-
 #
-# Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
-# Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
+# Copyright © 2009      CNRS, INRIA, Université Bordeaux 1
+# Copyright © 2009-2010 Cisco Systems, Inc.  All rights reserved.
 #
 # See COPYING in top-level directory.
+# 
+# Additional copyrights may follow
+# 
+# $HEADER$
 #
 
-#
-# Initialize autostuff
-#
-
-AC_PREREQ([2.63])
 AC_INIT([hwloc], 
         [m4_normalize(esyscmd([config/hwloc_get_version.sh VERSION --base]))],
         [http://www.open-mpi.org/community/help/], [hwloc])
-AC_CONFIG_AUX_DIR([config])
-AC_CONFIG_MACRO_DIR([config])
-AC_CANONICAL_SYSTEM
-AC_CONFIG_SRCDIR([src/topology.c])
+AC_PREREQ(2.63)
+AC_CONFIG_AUX_DIR(./config)
+# Note that this directory must *exactly* match what was specified via
+# -I in ACLOCAL_AMFLAGS in the top-level Makefile.am.
+AC_CONFIG_MACRO_DIR(./config)
 
-AM_INIT_AUTOMAKE([1.10 dist-bzip2 foreign tar-ustar -Wall -Werror])
+cat <<EOF
 
-# Make configure depend on the VERSION file, since it's used in AC_INIT
+###
+### Configuring hwloc distribution tarball
+### Startup tests
+###
+EOF
 
+# This must be before AM_INIT_AUTOMAKE
+AC_CANONICAL_TARGET
+
+# Init automake
+AM_INIT_AUTOMAKE([1.10 dist-bzip2 subdir-objects foreign tar-ustar -Wall -Werror])
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+# Libtool2 is needed
+m4_ifdef([LT_PREREQ], [],
+	 [m4_fatal([libtool version 2.2.6 or higher is required], [63])])
+
+# Make configure depend on the VERSION file, since it's used in AC_INIT
 AC_SUBST([CONFIGURE_DEPENDENCIES], ['$(top_srcdir)/VERSION'])
 
 # Get the version of hwloc that we are installing
-
 AC_MSG_CHECKING([for hwloc version])
 HWLOC_VERSION="`$srcdir/config/hwloc_get_version.sh $srcdir/VERSION`"
 HWLOC_MAJOR_VERSION="`$srcdir/config/hwloc_get_version.sh $srcdir/VERSION --major`"
@@ -63,7 +78,6 @@
 AC_SUBST([libhwloc_so_version])
 
 # Setup the header file
-
 AH_TOP([/* -*- c -*-
  *
  * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
@@ -85,432 +99,54 @@
 #endif /* HWLOC_CONFIGURE_H */
 ])
 
-# We only build documentation if this is a developer checkout.
-# Distribution tarballs just install pre-built docuemntation that was
-# included in the tarball.
+# Setup C compiler
 
-AC_MSG_CHECKING([if this is a developer build])
-AS_IF([test ! -d "$srcdir/.svn" -a ! -d "$srcdir/.hg" -a ! -d "$srcdir/.git"],
-      [AC_MSG_RESULT([no (doxygen generation is optional)])],
-      [AC_MSG_RESULT([yes])])
-
-# Generating the doxygen output requires a few tools.  If we
-# don't have all of them, refuse the build the docs.
-AC_ARG_VAR([DOXYGEN], [Location of the doxygen program (required for building the hwloc doxygen documentation)])
-AC_PATH_TOOL([DOXYGEN], [doxygen])
-
-AC_ARG_VAR([PDFLATEX], [Location of the pdflatex program (required for building the hwloc doxygen documentation)])
-AC_PATH_TOOL([PDFLATEX], [pdflatex])
-
-AC_ARG_VAR([MAKEINDEX], [Location of the makeindex program (required for building the hwloc doxygen documentation)])
-AC_PATH_TOOL([MAKEINDEX], [makeindex])
-
-AC_ARG_VAR([FIG2DEV], [Location of the fig2dev program (required for building the hwloc doxygen documentation)])
-AC_PATH_TOOL([FIG2DEV], [fig2dev])
-
-AC_MSG_CHECKING([if can build doxygen docs])
-AS_IF([test "x$DOXYGEN" != "x" -a "x$PDFLATEX" != "x" -a "x$MAKEINDEX" != "x" -a "x$FIG2DEV" != "x"],
-             [generate_doxs=yes], [generate_doxs=no])
-AC_MSG_RESULT([$generate_doxs])
-
-# Making the top-level README requires w3m or lynx.
-AC_ARG_VAR([W3M], [Location of the w3m program (required to building the top-level hwloc README file)])
-AC_PATH_TOOL([W3M], [w3m])
-AC_ARG_VAR([LYNX], [Location of the lynx program (required to building the top-level hwloc README file)])
-AC_PATH_TOOL([LYNX], [lynx])
-
-AC_MSG_CHECKING([if can build top-level README])
-AS_IF([test "x$W3M" != "x"],
-      [generate_readme=yes
-       W3_GENERATOR=$W3M],
-      [AS_IF([test "x$LYNX" != "x"],
-             [generate_readme=yes
-              W3_GENERATOR="$LYNX -dump -nolist"],
-             [generate_readme=no])])
-AC_SUBST(W3_GENERATOR)
-AC_MSG_RESULT([$generate_readme])
-
-# If any one of the above tools is missing, we will refuse to make dist.
-
-AC_ARG_ENABLE([doxygen],
-    [AC_HELP_STRING([--enable-doxygen],
-                    [enable support for building Doxygen documentation (note that this option is ONLY relevant in developer builds; Doxygen documentation is pre-built for tarball builds and this option is therefore ignored)])])
-AC_MSG_CHECKING([if will build doxygen docs])
-AS_IF([test "x$generate_doxs" = "xyes" -a "x$enable_doxygen" != "xno"],
-      [], [generate_doxs=no])
-AC_MSG_RESULT([$generate_doxs])
-
-# See if we want to install the doxygen docs
-AC_MSG_CHECKING([if will install doxygen docs])
-AS_IF([test "x$generate_doxs" = "xyes" -o \
-	    -f "$srcdir/doc/doxygen-doc/man/man3/hwloc_distribute.3" -a \
-	    -f "$srcdir/doc/doxygen-doc/hwloc.pdf"],
-      [install_doxs=yes],
-      [install_doxs=no])
-AC_MSG_RESULT([$install_doxs])
-
-AM_CONDITIONAL([BUILD_DOXYGEN], [test "x$generate_doxs" = "xyes"])
-AM_CONDITIONAL([BUILD_README], [test "x$generate_readme" = "xyes" -a \( "x$install_doxs" = "xyes" -o "x$generate_doxs" = "xyes" \) ])
-AM_CONDITIONAL([INSTALL_DOXYGEN], [test "x$install_doxs" = "xyes"])
-
-#
-# Check OS support
-#
-
-AC_MSG_CHECKING([which OS support to include])
-case ${target} in
-  *-*-linux*)
-    AC_DEFINE(LINUX_SYS, 1, [Define to 1 on Linux])
-    AC_DEFINE(HWLOC_LINUX_SYS, 1, [Define to 1 on Linux])
-    linux=yes
-    AC_MSG_RESULT([Linux])
-    ;;
-  *-*-irix*)
-    AC_DEFINE(IRIX_SYS, 1, [Define to 1 on Irix])
-    irix=yes
-    AC_MSG_RESULT([IRIX])
-    ;;
-  *-*-darwin*)
-    AC_DEFINE(DARWIN_SYS, 1, [Define to 1 on Darwin])
-    darwin=yes
-    AC_MSG_RESULT([Darwin])
-    ;;
-  *-*-solaris*)
-    AC_DEFINE(SOLARIS_SYS, 1, [Define to 1 on Solaris])
-    solaris=yes
-    AC_MSG_RESULT([Solaris])
-    ;;
-  *-*-aix*)
-    AC_DEFINE(AIX_SYS, 1, [Define to 1 on AIX])
-    aix=yes
-    AC_MSG_RESULT([AIX])
-    ;;
-  *-*-osf*)
-    AC_DEFINE(OSF_SYS, 1, [Define to 1 on OSF])
-    osf=yes
-    AC_MSG_RESULT([OSF])
-    ;;
-  *-*-hpux*)
-    AC_DEFINE(HPUX_SYS, 1, [Define to 1 on HP-UX])
-    hpux=yes
-    AC_MSG_RESULT([HP-UX])
-    ;;
-  *-*-mingw*|*-*-cygwin*)
-    AC_DEFINE(WIN_SYS, 1, [Define to 1 on WINDOWS])
-    windows=yes
-    AC_MSG_RESULT([Windows])
-    ;;
-  *)
-    AC_MSG_RESULT([Unsupported! ($target)])
-    AC_MSG_WARN([***********************************************************])
-    AC_MSG_WARN([*** hwloc does not support this system.])
-    AC_MSG_WARN([*** hwloc will *attempt* to build (but it may not work).])
-    AC_MSG_WARN([*** hwloc's run-time results may be reduced to showing just one processor.])
-    AC_MSG_WARN([*** You have been warned.])
-    AC_MSG_WARN([*** Pausing to give you time to read this message...])
-    AC_MSG_WARN([***********************************************************])
-    sleep 10
-    ;;
-esac
-
-AM_CONDITIONAL([HAVE_LINUX], [test "x$linux" = "xyes"])
-AM_CONDITIONAL([HAVE_IRIX], [test "x$irix" = "xyes"])
-AM_CONDITIONAL([HAVE_DARWIN], [test "x$darwin" = "xyes"])
-AM_CONDITIONAL([HAVE_SOLARIS], [test "x$solaris" = "xyes"])
-AM_CONDITIONAL([HAVE_AIX], [test "x$aix" = "xyes"])
-AM_CONDITIONAL([HAVE_OSF], [test "x$osf" = "xyes"])
-AM_CONDITIONAL([HAVE_HPUX], [test "x$hpux" = "xyes"])
-AM_CONDITIONAL([HAVE_WINDOWS], [test "x$windows" = "xyes"])
-AM_CONDITIONAL([HAVE_MINGW32], [test "x$target_os" = "xmingw32"])
-
-#
-# Define C flags
-#
-
-AC_USE_SYSTEM_EXTENSIONS # for O_DIRECTORY, fdopen, ffsl, ...
-AH_VERBATIM([USE_HPUX_SYSTEM_EXTENSIONS],
-[/* Enable extensions on HP-UX. */
-#ifndef _HPUX_SOURCE
-# undef _HPUX_SOURCE
-#endif
-])
-AC_DEFINE([_HPUX_SOURCE])
-
-AC_LANG([C])
-
+CFLAGS_save="$CFLAGS"
+AC_PROG_CC
 AM_PROG_CC_C_O
-AC_PROG_CC_C99
-AC_PROG_LN_S
-AC_PROG_INSTALL
-AC_PROG_MKDIR_P
-AC_PROG_EGREP
-PKG_CHECK_EXISTS
+CFLAGS="$CFLAGS_save"
 
-HWLOC_GCC_FLAGS
-HWLOC_CHECK_DIFF_U
+# Define hwloc's configure arguments
+HWLOC_DEFINE_ARGS
 
-AC_CHECK_SIZEOF([unsigned long])
-AC_DEFINE_UNQUOTED([HWLOC_SIZEOF_UNSIGNED_LONG], $ac_cv_sizeof_unsigned_long, [The size of `unsigned long', as computed by sizeof])
-AC_CHECK_SIZEOF([unsigned int])
-AC_DEFINE_UNQUOTED([HWLOC_SIZEOF_UNSIGNED_INT], $ac_cv_sizeof_unsigned_int, [The size of `unsigned int', as computed by sizeof])
+# If debug mode, add -g
+AS_IF([test "$hwloc_debug" = "1"],
+      [CFLAGS="$CFLAGS -g"])
 
-#
-# Now detect support
-#
+# If the user didn't specifically ask for embedding mode, default to
+# standalone mode
+AS_IF([test "$enable_embedded_mode" != "yes"],
+      [AS_IF([test ! -d "$srcdir/doc"],
+             [AC_MSG_WARN([The hwloc source tree looks incomplete for a standalobe])
+              AC_MSG_WARN([build.  Perhaps this hwloc tree is intended for an embedded])
+              AC_MSG_WARN([build?  Try using the --enable-embedded-mode switch.])
+              AC_MSG_ERROR([Cannot continue])],
+             [HWLOC_BUILD_STANDALONE])])
 
-hwloc_strncasecmp=strncmp
-AC_CHECK_FUNCS([strncasecmp], [
-  HWLOC_CHECK_DECL([strncasecmp], [
-    hwloc_strncasecmp=strncasecmp
-  ])
-])
-AC_DEFINE_UNQUOTED(hwloc_strncasecmp, $hwloc_strncasecmp, [Define this to either strncasecmp or strncmp])
+# Setup the hwloc core
+HWLOC_SETUP_CORE([], [], [hwloc_setup=unhappy], [1])
+AS_IF([test "$hwloc_setup" = "unhappy"],
+      [AC_MSG_ERROR([Cannot continue])])
 
-AC_CHECK_TYPES([wchar_t], [
-  AC_CHECK_FUNCS([putwc])
-], [], [[#include <wchar.h>]])
+# Setup hwloc's docs, utils, and tests
+AS_IF([test "$hwloc_mode" = "standalone"],
+      [HWLOC_SETUP_DOCS
+       HWLOC_SETUP_UTILS
+       HWLOC_SETUP_TESTS])
 
-AC_CHECK_HEADERS([locale.h], [
-  AC_CHECK_FUNCS([setlocale])
-])
-AC_CHECK_HEADERS([langinfo.h], [
-  AC_CHECK_FUNCS([nl_langinfo])
-])
-AC_CHECK_HEADERS([curses.h], [
-  AC_CHECK_HEADERS([term.h], [
-    AC_CHECK_LIB([termcap], [tparm])
-  ], [], [[#include <curses.h>]])
-])
+# Run the AM_CONDITIONALs
+HWLOC_DO_AM_CONDITIONALS
 
-AC_CHECK_TYPES([KAFFINITY,
-    		    PROCESSOR_CACHE_TYPE,
-		    CACHE_DESCRIPTOR,
-		    LOGICAL_PROCESSOR_RELATIONSHIP,
-		    SYSTEM_LOGICAL_PROCESSOR_INFORMATION,
-		    GROUP_AFFINITY,
-		    PROCESSOR_RELATIONSHIP,
-		    NUMA_NODE_RELATIONSHIP,
-		    CACHE_RELATIONSHIP,
-		    PROCESSOR_GROUP_INFO,
-		    GROUP_RELATIONSHIP,
-		    SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX],
-		    [],[],[[#include <windows.h>]])
-AC_HAVE_LIBRARY(gdi32)
+# Set the final flags
+CFLAGS="$HWLOC_EMBEDDED_CFLAGS $CFLAGS"
+CPPFLAGS="$HWLOC_EMBEDDED_CPPFLAGS $CPPFLAGS"
 
-AC_CHECK_HEADER([windows.h], [
-  AC_DEFINE([HWLOC_HAVE_WINDOWS_H], [1], [Define to 1 if you have the `windows.h' header.])
-])
-
-AC_CHECK_HEADERS([sys/lgrp_user.h], [
-  AC_HAVE_LIBRARY([lgrp])
-])
-AC_CHECK_HEADERS([kstat.h], [
-  AC_HAVE_LIBRARY([kstat])
-])
-
-AC_CHECK_HEADERS([infiniband/verbs.h], [
-  AC_HAVE_LIBRARY([ibverbs], [have_libibverbs=yes])
-])
-AM_CONDITIONAL([HAVE_LIBIBVERBS], [test "x$have_libibverbs" = "xyes"])
-
-AC_CHECK_DECLS([_SC_NPROCESSORS_ONLN,
-		_SC_NPROCESSORS_CONF,
-		_SC_NPROC_ONLN,
-		_SC_NPROC_CONF,
-		_SC_LARGE_PAGESIZE],,[:],[[#include <unistd.h>]])
-
-AC_HAVE_HEADERS([mach/mach_host.h])
-AC_HAVE_HEADERS([mach/mach_init.h], [
-  AC_CHECK_FUNCS([host_info])
-])
-
-case ${target} in
-  *-*-mingw*|*-*-cygwin*)
-    hwloc_pid_t=HANDLE
-    hwloc_thread_t=HANDLE
-    ;;
-  *)
-    hwloc_pid_t=pid_t
-    AC_CHECK_TYPES([pthread_t], [hwloc_thread_t=pthread_t], [:], [[#include <pthread.h>]])
-    ;;
-esac
-AC_DEFINE_UNQUOTED(hwloc_pid_t, $hwloc_pid_t, [Define this to the process ID type])
-if test "x$hwloc_thread_t" != "x" ; then
-  AC_DEFINE_UNQUOTED(hwloc_thread_t, $hwloc_thread_t, [Define this to the thread ID type])
-fi
-
-AC_MSG_CHECKING([for old prototype of sched_setaffinity])
-AC_COMPILE_IFELSE(
-  AC_LANG_PROGRAM([[
-    #define _GNU_SOURCE
-    #include <sched.h>
-    static unsigned long mask;
-    ]], [[ sched_setaffinity(0, (void*) &mask);
-    ]]),
-  AC_DEFINE([HAVE_OLD_SCHED_SETAFFINITY], [1], [Define to 1 if glibc provides the old prototype of sched_setaffinity()])
-  AC_MSG_RESULT([yes]),
-  AC_MSG_RESULT([no])
-)
-
-AC_MSG_CHECKING([for working CPU_SET])
-AC_LINK_IFELSE(
-  AC_LANG_PROGRAM([[
-    #include <sched.h>
-    cpu_set_t set;
-    ]], [[ CPU_ZERO(&set); CPU_SET(0, &set);
-    ]]),
-    AC_DEFINE([HWLOC_HAVE_CPU_SET], [1], [Define to 1 if the CPU_SET macro works])
-    AC_MSG_RESULT([yes]),
-    AC_MSG_RESULT([no])
-)
-
-AC_ARG_ENABLE([cairo],
-  [AS_HELP_STRING([--disable-cairo], [disable the Cairo back-end of `lstopo'])],
-  [enable_cairo="$enableval"],
-  [enable_cairo="yes"])
-
-if test "x$enable_cairo" = "xyes"; then
-  PKG_CHECK_MODULES([CAIRO], [cairo], [:], [enable_cairo="no"])
-  if test "x$enable_cairo" = "xyes"; then
-    AC_CHECK_HEADERS([X11/Xlib.h],
-      [AC_CHECK_HEADERS([X11/Xutil.h X11/keysym.h],
-        [enable_X11=yes
-         AC_DEFINE([HAVE_X11], [1], [Define to 1 if X11 libraries are available.])],,
-        [[#include <X11/Xlib.h>]])
-      ])
-    if test "x$enable_X11" != "xyes"; then
-      AC_MSG_WARN([X11 headers not found, Cairo/X11 back-end disabled])
-    fi
-  fi
-fi
-
-if test "x$enable_cairo" = "xyes"; then
-  AC_DEFINE([HAVE_CAIRO], [1], [Define to 1 if you have the `cairo' library.])
-fi
-AM_CONDITIONAL([HAVE_CAIRO], [test "x$enable_cairo" = "xyes"])
-
-AC_ARG_ENABLE([xml],
-  [AS_HELP_STRING([--disable-xml], [disable the XML back-end of `lstopo'])],
-  [enable_xml="$enableval"],
-  [enable_xml="yes"])
-
-if test "x$enable_xml" = "xyes"; then
-  PKG_CHECK_MODULES([XML], [libxml-2.0], [:], [enable_xml="no"])
-fi
-
-if test "x$enable_xml" = "xyes"; then
-  HWLOC_REQUIRES="libxml-2.0 $HWLOC_REQUIRES"
-  AC_DEFINE([HAVE_XML], [1], [Define to 1 if you have the `xml' library.])
-  AC_SUBST([HAVE_XML], [1])
-else
-  AC_SUBST([HAVE_XML], [0])
-fi
-AM_CONDITIONAL([HAVE_XML], [test "x$enable_xml" = "xyes"])
-
-# check for kerrighed, but don't abort if not found
-PKG_CHECK_MODULES([KERRIGHED], [kerrighed >= 2.0], [], [:])
-
-# disable C++, F77, Java and Windows Resource Compiler support
-LT_PREREQ([2.2.6])
-LT_INIT
+# Setup libtool, but disable C++, F77, Java and Windows Resource
+# Compiler support -- we don't need that stuff.
+AM_ENABLE_SHARED
+AM_DISABLE_STATIC
+AM_PROG_LIBTOOL([win32-dll])
 LT_LANG([C])
-AC_LIBTOOL_WIN32_DLL
-AM_CONDITIONAL([HAVE_GCC], [test "x$GCC" = "xyes"])
-AC_PATH_PROGS([HWLOC_MS_LIB], [lib])
-AC_ARG_VAR([HWLOC_MS_LIB], [Path to Microsoft's Visual Studio `lib' tool])
-AM_CONDITIONAL([HAVE_MS_LIB], [test "x$HWLOC_MS_LIB" != "x"])
 
-AC_ARG_ENABLE([debug],
-  AS_HELP_STRING([--enable-debug], [enable debugging messages]),
-  [enable_debug="$enableval"],
-  [enable_debug="no"])
-
-AC_MSG_CHECKING([whether debug is enabled])
-if test x$enable_debug = xyes; then
-  AC_DEFINE_UNQUOTED([HWLOC_DEBUG], [1], [Define to 1 to enable debug])
-  AC_MSG_RESULT([yes])
-else
-  AC_MSG_RESULT([no])
-fi
-
-AC_PATH_PROG([BASH], [bash])
-
-AC_CHECK_FUNCS([ffs], [
-  HWLOC_CHECK_DECL([ffs],[
-    AC_DEFINE([HWLOC_HAVE_DECL_FFS], [1], [Define to 1 if function `ffs' is declared by system headers])
-  ])
-  AC_DEFINE([HWLOC_HAVE_FFS], [1], [Define to 1 if you have the `ffs' function.])
-])
-AC_CHECK_FUNCS([ffsl], [
-  HWLOC_CHECK_DECL([ffsl],[
-    AC_DEFINE([HWLOC_HAVE_DECL_FFSL], [1], [Define to 1 if function `ffsl' is declared by system headers])
-  ])
-  AC_DEFINE([HWLOC_HAVE_FFSL], [1], [Define to 1 if you have the `ffsl' function.])
-])
-
-AC_CHECK_FUNCS([fls], [
-  HWLOC_CHECK_DECL([fls],[
-    AC_DEFINE([HWLOC_HAVE_DECL_FLS], [1], [Define to 1 if function `fls' is declared by system headers])
-  ])
-  AC_DEFINE([HWLOC_HAVE_FLS], [1], [Define to 1 if you have the `fls' function.])
-])
-AC_CHECK_FUNCS([flsl], [
-  HWLOC_CHECK_DECL([flsl],[
-    AC_DEFINE([HWLOC_HAVE_DECL_FLSL], [1], [Define to 1 if function `flsl' is declared by system headers])
-  ])
-  AC_DEFINE([HWLOC_HAVE_FLSL], [1], [Define to 1 if you have the `flsl' function.])
-])
-
-AC_CHECK_FUNCS([clz], [
-  HWLOC_CHECK_DECL([clz],[
-    AC_DEFINE([HWLOC_HAVE_DECL_CLZ], [1], [Define to 1 if function `clz' is declared by system headers])
-  ])
-  AC_DEFINE([HWLOC_HAVE_CLZ], [1], [Define to 1 if you have the `clz' function.])
-])
-AC_CHECK_FUNCS([clzl], [
-  HWLOC_CHECK_DECL([clzl],[
-    AC_DEFINE([HWLOC_HAVE_DECL_CLZL], [1], [Define to 1 if function `clzl' is declared by system headers])
-  ])
-  AC_DEFINE([HWLOC_HAVE_CLZL], [1], [Define to 1 if you have the `clzl' function.])
-])
-
-AC_CHECK_FUNCS([openat], [have_openat=yes])
-AM_CONDITIONAL([HAVE_OPENAT], [test "x$have_openat" = "xyes"])
-
-AC_CHECK_DECL([numa_bitmask_alloc], [have_linux_libnuma=yes], [],
-	      [#include <numa.h>])
-AM_CONDITIONAL([HAVE_LINUX_LIBNUMA], [test "x$have_linux_libnuma" = "xyes"])
-
-AC_CHECK_DECLS([pthread_setaffinity_np],,[:],[[#include <pthread.h>]])
-AC_CHECK_FUNC([sched_setaffinity], [have_sched_setaffinity=yes])
-AM_CONDITIONAL([HAVE_SCHED_SETAFFINITY], [test "x$have_sched_setaffinity" = "xyes"])
-
-AC_CHECK_PROGS(XMLLINT, [xmllint])
-
-AC_SUBST(HWLOC_REQUIRES)
-
-AC_CONFIG_HEADER([include/private/config.h])
-
-AC_CONFIG_FILES([hwloc.pc
-		 doc/doxygen-config.cfg
-
-		 Makefile
-		 doc/Makefile
-                 include/Makefile
-		 src/Makefile 
-		 tests/Makefile 
-		 tests/linux/Makefile
-		 tests/linux/gather-topology.sh
-		 tests/linux/test-topology.sh
-		 tests/lstopo_xml.sh
-		 tests/ports/Makefile
-		 utils/Makefile
-		 utils/test-hwloc-distrib.sh
-])
-
-AC_CONFIG_HEADERS([include/hwloc/config.h])
-
-AC_CONFIG_COMMANDS([linux-topology-scripts],
-                   [chmod +x tests/linux/test-topology.sh tests/lstopo_xml.sh tests/linux/gather-topology.sh utils/test-hwloc-distrib.sh])
-
+# Party on
 AC_OUTPUT

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/contrib/dist/make_dist_tarball
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/contrib/dist/make_dist_tarball	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/contrib/dist/make_dist_tarball	2010-05-11 01:47:13 UTC (rev 6632)
@@ -10,7 +10,7 @@
 #                         University of Stuttgart.  All rights reserved.
 # Copyright (c) 2004-2005 The Regents of the University of California.
 #                         All rights reserved.
-# Copyright © 2008-2009  Cisco Systems, Inc.  All rights reserved.
+# Copyright © 2008-2010  Cisco Systems, Inc.  All rights reserved.
 # $COPYRIGHT$
 # 
 # Additional copyrights may follow
@@ -22,9 +22,9 @@
 # Version of auto tools that we want
 #
 
-AM_TARGET_VERSION=1.11
-AC_TARGET_VERSION=2.64
-LT_TARGET_VERSION=2.2.6
+AM_TARGET_VERSION=1.11.1
+AC_TARGET_VERSION=2.65
+LT_TARGET_VERSION=2.2.6b
 
 #
 # First things first -- check that the auto versions that we have are

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/Makefile.am
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/Makefile.am	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/Makefile.am	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,17 +1,17 @@
-# Copyright © 2009 INRIA, Université Bordeaux 1
-# Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
+# Copyright © 2009      INRIA, Université Bordeaux 1
+# Copyright © 2009-2010 Cisco Systems, Inc.  All rights reserved.
 
-include $(top_srcdir)/hwloc.am
+AM_CPPFLAGS = $(HWLOC_CPPFLAGS)
 
-DOCDIR = $(top_builddir)/doc
-DOX_CONFIG = $(top_srcdir)/doc/doxygen.cfg
+DOCDIR = $(HWLOC_top_builddir)/doc
+DOX_CONFIG = $(HWLOC_top_srcdir)/doc/doxygen.cfg
 
-DOX_DIR = $(DOCDIR)/doxygen-doc
+DOX_DIR = doxygen-doc
 DOX_HTML_DIR = $(DOX_DIR)/html
 DOX_MAN_DIR = $(DOX_DIR)/man
 DOX_LATEX_DIR = $(DOX_DIR)/latex
-DOX_A4PDF = $(DOX_DIR)/$(PACKAGE)-a4.pdf
-DOX_LETTERPDF = $(DOX_DIR)/$(PACKAGE)-letter.pdf
+DOX_A4PDF = doxygen-doc/$(PACKAGE)-a4.pdf
+DOX_LETTERPDF = doxygen-doc/$(PACKAGE)-letter.pdf
 DOX_TAG = $(DOX_DIR)/$(PACKAGE).tag
 
 #
@@ -25,22 +25,20 @@
 # tree (e.g., everything in the man and latex directories).
 #
 
+PREBUILT_IMAGES = images/dudley.png images/emmett.png images/hagrid.png
 image_built_sources = images/diagram.png images/diagram.eps
 
 EXTRA_DIST = \
         hwloc.doxy \
         doxygen.css \
         doxygen.cfg \
-        images/dudley.png \
-        images/emmett.png \
-        images/hagrid.png \
         images/diagram.fig \
         www.open-mpi.org.cfg \
         www.open-mpi.org-css.inc \
         www.open-mpi.org-footer.inc \
         www.open-mpi.org-header.inc \
-        $(image_built_sources) \
-        $(DOX_HTML_DIR) $(DOX_MAN_DIR) $(DOX_LATEX_DIR) $(DOX_TAG)
+        $(PREBUILT_IMAGES) \
+        $(image_built_sources)
 
 #
 # Files where the doxygen inputs live (i.e., dependencies).  Make the
@@ -51,13 +49,13 @@
 
 dox_inputs = $(DOX_CONFIG) \
        $(srcdir)/hwloc.doxy \
-       $(top_srcdir)/include/hwloc.h \
-       $(top_srcdir)/include/hwloc/helper.h \
-       $(top_srcdir)/include/hwloc/cpuset.h \
-       $(top_srcdir)/include/hwloc/linux.h \
-       $(top_srcdir)/include/hwloc/linux-libnuma.h \
-       $(top_srcdir)/include/hwloc/glibc-sched.h \
-       $(top_srcdir)/include/hwloc/openfabrics-verbs.h
+       $(HWLOC_top_srcdir)/include/hwloc.h \
+       $(HWLOC_top_srcdir)/include/hwloc/helper.h \
+       $(HWLOC_top_srcdir)/include/hwloc/cpuset.h \
+       $(HWLOC_top_srcdir)/include/hwloc/glibc-sched.h \
+       $(HWLOC_top_srcdir)/include/hwloc/linux.h \
+       $(HWLOC_top_srcdir)/include/hwloc/linux-libnuma.h \
+       $(HWLOC_top_srcdir)/include/hwloc/openfabrics-verbs.h
 
 #
 # Create the images that we need for the PDF output and the HTML
@@ -65,14 +63,17 @@
 # AC_PATH_PROG found something in configure.ac (!), so we have to put
 # a run-time check here to see if fig2dev was found.  :-(
 #
+# Note that BUILD_DOXYGEN will automatically be false if we're not
+# building standalone.
+#
 
-if BUILD_DOXYGEN
+if HWLOC_BUILD_DOXYGEN
 BUILT_SOURCES = $(image_built_sources)
 
 images/diagram.png: $(srcdir)/images/diagram.fig
 	$(MKDIR_P) images
 	@if test "x$(FIG2DEV)" = "x"; then \
-	    echo "ERROR: Cannot find the 'fig2dev' exectuable -- cannot make $@"; \
+	    echo "ERROR: Cannot find the 'fig2dev' executable -- cannot make $@"; \
 	    exit 1; \
 	fi
 	$(FIG2DEV) -L png $< $@
@@ -80,7 +81,7 @@
 images/diagram.eps: $(srcdir)/images/diagram.fig
 	$(MKDIR_P) images
 	@if test "x$(FIG2DEV)" = "x"; then \
-	    echo "ERROR: Cannot find the 'fig2dev' exectuable -- cannot make $@"; \
+	    echo "ERROR: Cannot find the 'fig2dev' executable -- cannot make $@"; \
 	    exit 1; \
 	fi
 	$(FIG2DEV) -L eps $< $@
@@ -89,22 +90,66 @@
 #
 # Rules for running doxygen.  It depends on the built images and the
 # dox_inputs.
+# Remove useless manpages, they have too long filenames anyway because
+# of nested structurre/union declarations.
 #
 
-if BUILD_DOXYGEN
-$(DOX_TAG): $(BUILT_SOURCES) $(dox_inputs)
+if HWLOC_BUILD_DOXYGEN
+$(DOX_TAG): $(BUILT_SOURCES) $(dox_inputs) $(PREBUILT_IMAGES)
 	rm -fr $(DOX_DIR)
 	$(DOXYGEN) $(DOX_CONFIG)
-	-sed -i -e 's/__hwloc_restrict/restrict/g;s/\\_\\-\\_\\-hwloc\\_\\-restrict/restrict/g;s/__inline/inline/g;s/\\_\\-\\_\\-inline/inline/g' $(DOX_DIR)/html/*.html $(DOX_DIR)/latex/*.tex $(DOX_DIR)/man/man3/*.3
+	-sed -i \
+		-e 's/__hwloc_restrict/restrict/g' \
+		-e 's/\\_\\-\\_\\-hwloc\\_\\-restrict/restrict/g' \
+		-e 's/__hwloc_attribute_unused//g' \
+		-e 's/\\_\\-\\_\\-hwloc\\_\\-attribute\\_\\-unused//g' \
+		-e 's/__hwloc_attribute_malloc//g' \
+		-e 's/\\_\\-\\_\\-hwloc\\_\\-attribute\\_\\-malloc//g' \
+		-e 's/__hwloc_attribute_const//g' \
+		-e 's/\\_\\-\\_\\-hwloc\\_\\-attribute\\_\\-const//g' \
+		-e 's/__hwloc_attribute_pure//g' \
+		-e 's/\\_\\-\\_\\-hwloc\\_\\-attribute\\_\\-pure//g' \
+		-e 's/__hwloc_attribute_deprecated//g' \
+		-e 's/\\_\\-\\_\\-hwloc\\_\\-attribute\\_\\-deprecated//g' \
+		-e 's/HWLOC_DECLSPEC//g' \
+		-e 's/HWLOC\\_\\-DECLSPEC//g' \
+		-e 's/__hwloc_inline/inline/g' \
+		-e 's/\\_\\-\\_\\-hwloc\\_\\-inline/inline/g' \
+		$(DOX_DIR)/html/*.html $(DOX_DIR)/latex/*.tex $(DOX_DIR)/man/man3/*.3
+	@echo "Work-around spurious leading _ in doxygen filenames..."
+	(cd $(DOX_DIR)/man/man3 ; \
+	for i in _hwloc* ; do \
+		[ ! -f $$i ] || mv $$i $${i#_} ; \
+	done)
+	@echo "Removing useless manpages..."
+	@mkdir $(DOX_DIR)/man.tmp
+	@mv $(man3_MANS) $(DOX_DIR)/man.tmp/
+	@rm -rf $(DOX_DIR)/man/man3
+	@mv $(DOX_DIR)/man.tmp $(DOX_DIR)/man/man3
+if HWLOC_DOXYGEN_BROKEN_SHORT_NAMES
+	@echo "Work-around buggy doxygen filenames..."
+	- at mv -f $(DOX_DIR)/html/termsanddefs.html $(DOX_DIR)/html/a00001.html
+	- at mv -f $(DOX_DIR)/latex/termsanddefs.tex $(DOX_DIR)/latex/a00001.tex
+	- at mv -f $(DOX_DIR)/html/tools.html $(DOX_DIR)/html/a00002.html
+	- at mv -f $(DOX_DIR)/latex/tools.tex $(DOX_DIR)/latex/a00002.tex
+	- at mv -f $(DOX_DIR)/html/envvar.html $(DOX_DIR)/html/a00003.html
+	- at mv -f $(DOX_DIR)/latex/envvar.tex $(DOX_DIR)/latex/a00003.tex
+	- at mv -f $(DOX_DIR)/html/interoperability.html $(DOX_DIR)/html/a00004.html
+	- at mv -f $(DOX_DIR)/latex/interoperability.tex $(DOX_DIR)/latex/a00004.tex
+	- at mv -f $(DOX_DIR)/html/threadsafety.html $(DOX_DIR)/html/a00005.html
+	- at mv -f $(DOX_DIR)/latex/threadsafety.tex $(DOX_DIR)/latex/a00005.tex
+	- at mv -f $(DOX_DIR)/html/embed.html $(DOX_DIR)/html/a00006.html
+	- at mv -f $(DOX_DIR)/latex/embed.tex $(DOX_DIR)/latex/a00006.tex
+	- at mv -f $(DOX_DIR)/html/switchfromplpa.html $(DOX_DIR)/html/a00007.html
+	- at mv -f $(DOX_DIR)/latex/switchfromplpa.tex $(DOX_DIR)/latex/a00007.tex
 endif
+endif
 
 #
 # Rules for building the PDF
 #
 
-if BUILD_DOXYGEN
-# Make both an A4wide PDF and a US letter PDF
-$(DOX_PDF): $(DOX_TAG)
+if HWLOC_BUILD_DOXYGEN
 
 # The Doxygen config is set to generate a4 latex -- no transformation
 # is necessary.
@@ -124,7 +169,7 @@
 	       done=1; \
 	   fi; \
 	done; \
-	mv a4-refman.pdf ../../$(DOX_A4PDF)
+	mv a4-refman.pdf $(DOCDIR)/$(DOX_A4PDF)
 
 # The Doxygen config is set to generate a4 latex -- slightly transform
 # to make suitable for US letter.
@@ -144,7 +189,7 @@
 	       done=1; \
 	   fi; \
 	done; \
-	mv letter-refman.pdf ../../$(DOX_LETTERPDF)
+	mv letter-refman.pdf $(DOCDIR)/$(DOX_LETTERPDF)
 endif
 
 #
@@ -158,7 +203,7 @@
 # pre-bundled in a tarball).
 #
 
-if BUILD_DOXYGEN
+if HWLOC_BUILD_DOXYGEN
 all-local: $(DOX_TAG)
 	if test -d $(DOX_HTML_DIR) -a -f $(DOX_HTML_DIR)/doxygen.css; then \
 	    cp -f $(srcdir)/doxygen.css $(DOX_HTML_DIR); \
@@ -166,10 +211,12 @@
 endif
 
 #
-# Un/install the generated PDF and man pages
+# Un/install the generated PDF and man pages (just like BUILD_DOXYGEN,
+# INSTALL_DOXYGEN will automatically be false if we're not building in
+# standalone mode).
 #
 
-if INSTALL_DOXYGEN
+if HWLOC_INSTALL_DOXYGEN
 dist_pdf_DATA = $(DOX_A4PDF) $(DOX_LETTERPDF)
 endif
 
@@ -179,7 +226,7 @@
 # in the Makefile.am...  :-(
 #
 
-if INSTALL_DOXYGEN
+if HWLOC_INSTALL_DOXYGEN
 man3_MANS = \
         $(DOX_MAN_DIR)/man3/HWLOC_CPUBIND_PROCESS.3 \
         $(DOX_MAN_DIR)/man3/HWLOC_CPUBIND_STRICT.3 \
@@ -188,8 +235,9 @@
         $(DOX_MAN_DIR)/man3/HWLOC_OBJ_CORE.3 \
         $(DOX_MAN_DIR)/man3/HWLOC_OBJ_MACHINE.3 \
         $(DOX_MAN_DIR)/man3/HWLOC_OBJ_MISC.3 \
+        $(DOX_MAN_DIR)/man3/HWLOC_OBJ_GROUP.3 \
         $(DOX_MAN_DIR)/man3/HWLOC_OBJ_NODE.3 \
-        $(DOX_MAN_DIR)/man3/HWLOC_OBJ_PROC.3 \
+        $(DOX_MAN_DIR)/man3/HWLOC_OBJ_PU.3 \
         $(DOX_MAN_DIR)/man3/HWLOC_OBJ_SOCKET.3 \
         $(DOX_MAN_DIR)/man3/HWLOC_OBJ_SYSTEM.3 \
         $(DOX_MAN_DIR)/man3/HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM.3 \
@@ -203,11 +251,12 @@
         $(DOX_MAN_DIR)/man3/hwloc_cpuset_dup.3 \
         $(DOX_MAN_DIR)/man3/hwloc_cpuset_copy.3 \
         $(DOX_MAN_DIR)/man3/hwloc_cpuset_all_but_cpu.3 \
-        $(DOX_MAN_DIR)/man3/hwloc_cpuset_andset.3 \
-        $(DOX_MAN_DIR)/man3/hwloc_cpuset_clearset.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_cpuset_and.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_cpuset_andnot.3 \
         $(DOX_MAN_DIR)/man3/hwloc_cpuset_clr.3 \
-        $(DOX_MAN_DIR)/man3/hwloc_cpuset_compar.3 \
-        $(DOX_MAN_DIR)/man3/hwloc_cpuset_compar_first.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_cpuset_clr_range.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_cpuset_compare.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_cpuset_compare_first.3 \
         $(DOX_MAN_DIR)/man3/hwloc_cpuset_fill.3 \
         $(DOX_MAN_DIR)/man3/hwloc_cpuset_first.3 \
         $(DOX_MAN_DIR)/man3/hwloc_cpuset_foreach_begin.3 \
@@ -226,7 +275,9 @@
         $(DOX_MAN_DIR)/man3/hwloc_cpuset_isset.3 \
         $(DOX_MAN_DIR)/man3/hwloc_cpuset_iszero.3 \
         $(DOX_MAN_DIR)/man3/hwloc_cpuset_last.3 \
-        $(DOX_MAN_DIR)/man3/hwloc_cpuset_orset.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_cpuset_next.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_cpuset_not.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_cpuset_or.3 \
         $(DOX_MAN_DIR)/man3/hwloc_cpuset_set.3 \
         $(DOX_MAN_DIR)/man3/hwloc_cpuset_set_range.3 \
         $(DOX_MAN_DIR)/man3/hwloc_cpuset_singlify.3 \
@@ -240,7 +291,7 @@
         $(DOX_MAN_DIR)/man3/hwloc_cpuset_to_linux_libnuma_ulongs.3 \
         $(DOX_MAN_DIR)/man3/hwloc_cpuset_to_ulong.3 \
         $(DOX_MAN_DIR)/man3/hwloc_cpuset_weight.3 \
-        $(DOX_MAN_DIR)/man3/hwloc_cpuset_xorset.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_cpuset_xor.3 \
         $(DOX_MAN_DIR)/man3/hwloc_distribute.3 \
         $(DOX_MAN_DIR)/man3/hwloc_get_closest_objs.3 \
         $(DOX_MAN_DIR)/man3/hwloc_get_common_ancestor_obj.3 \
@@ -248,6 +299,11 @@
         $(DOX_MAN_DIR)/man3/hwloc_get_child_covering_cpuset.3 \
         $(DOX_MAN_DIR)/man3/hwloc_get_obj_covering_cpuset.3 \
         $(DOX_MAN_DIR)/man3/hwloc_get_depth_type.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_topology_get_allowed_cpuset.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_topology_get_complete_cpuset.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_topology_get_online_cpuset.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_topology_get_topology_cpuset.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_get_first_largest_obj_inside_cpuset.3 \
         $(DOX_MAN_DIR)/man3/hwloc_get_largest_objs_inside_cpuset.3 \
         $(DOX_MAN_DIR)/man3/hwloc_get_nbobjs_inside_cpuset_by_type.3 \
         $(DOX_MAN_DIR)/man3/hwloc_get_nbobjs_inside_cpuset_by_depth.3 \
@@ -258,12 +314,17 @@
         $(DOX_MAN_DIR)/man3/hwloc_get_next_obj_inside_cpuset_by_depth.3 \
         $(DOX_MAN_DIR)/man3/hwloc_get_next_obj_by_type.3 \
         $(DOX_MAN_DIR)/man3/hwloc_get_next_obj_by_depth.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_get_pu_obj_by_os_index.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_get_obj_below_by_type.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_get_obj_below_array_by_type.3 \
         $(DOX_MAN_DIR)/man3/hwloc_get_obj_inside_cpuset_by_type.3 \
         $(DOX_MAN_DIR)/man3/hwloc_get_obj_inside_cpuset_by_depth.3 \
         $(DOX_MAN_DIR)/man3/hwloc_get_obj_by_type.3 \
         $(DOX_MAN_DIR)/man3/hwloc_get_obj_by_depth.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_get_ancestor_obj_by_type.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_get_ancestor_obj_by_depth.3 \
         $(DOX_MAN_DIR)/man3/hwloc_get_shared_cache_covering_obj.3 \
-        $(DOX_MAN_DIR)/man3/hwloc_get_system_obj.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_get_root_obj.3 \
         $(DOX_MAN_DIR)/man3/hwloc_get_type_depth.3 \
         $(DOX_MAN_DIR)/man3/hwloc_get_nbobjs_by_type.3 \
         $(DOX_MAN_DIR)/man3/hwloc_get_nbobjs_by_depth.3 \
@@ -275,22 +336,31 @@
         $(DOX_MAN_DIR)/man3/hwloc_obj_attr_u.3 \
         $(DOX_MAN_DIR)/man3/hwloc_obj_attr_u_hwloc_cache_attr_s.3 \
         $(DOX_MAN_DIR)/man3/hwloc_obj_attr_u_hwloc_machine_attr_s.3 \
-        $(DOX_MAN_DIR)/man3/hwloc_obj_attr_u_hwloc_memory_attr_s.3 \
-        $(DOX_MAN_DIR)/man3/hwloc_obj_attr_u_hwloc_misc_attr_s.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_obj_attr_u_hwloc_group_attr_s.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_obj_memory_s.3 \
         $(DOX_MAN_DIR)/man3/hwloc_obj_cpuset_snprintf.3 \
         $(DOX_MAN_DIR)/man3/hwloc_obj_is_in_subtree.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_obj_type_snprintf.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_obj_attr_snprintf.3 \
         $(DOX_MAN_DIR)/man3/hwloc_obj_snprintf.3 \
         $(DOX_MAN_DIR)/man3/hwloc_obj_t.3 \
         $(DOX_MAN_DIR)/man3/hwloc_obj_type_of_string.3 \
         $(DOX_MAN_DIR)/man3/hwloc_obj_type_string.3 \
         $(DOX_MAN_DIR)/man3/hwloc_obj_type_t.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_get_cpubind.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_get_proc_cpubind.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_get_thread_cpubind.3 \
         $(DOX_MAN_DIR)/man3/hwloc_set_cpubind.3 \
         $(DOX_MAN_DIR)/man3/hwloc_set_proc_cpubind.3 \
         $(DOX_MAN_DIR)/man3/hwloc_set_thread_cpubind.3 \
         $(DOX_MAN_DIR)/man3/hwloc_topology_check.3 \
         $(DOX_MAN_DIR)/man3/hwloc_topology_destroy.3 \
+	$(DOX_MAN_DIR)/man3/hwloc_topology_export_xml.3 \
+	$(DOX_MAN_DIR)/man3/hwloc_topology_insert_misc_object_by_cpuset.3 \
+	$(DOX_MAN_DIR)/man3/hwloc_topology_insert_misc_object_by_parent.3 \
         $(DOX_MAN_DIR)/man3/hwloc_topology_flags_e.3 \
         $(DOX_MAN_DIR)/man3/hwloc_topology_get_depth.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_topology_get_support.3 \
         $(DOX_MAN_DIR)/man3/hwloc_topology_ignore_all_keep_structure.3 \
         $(DOX_MAN_DIR)/man3/hwloc_topology_ignore_type.3 \
         $(DOX_MAN_DIR)/man3/hwloc_topology_ignore_type_keep_structure.3 \
@@ -299,8 +369,12 @@
         $(DOX_MAN_DIR)/man3/hwloc_topology_load.3 \
         $(DOX_MAN_DIR)/man3/hwloc_topology_set_flags.3 \
         $(DOX_MAN_DIR)/man3/hwloc_topology_set_fsroot.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_topology_set_pid.3 \
         $(DOX_MAN_DIR)/man3/hwloc_topology_set_synthetic.3 \
         $(DOX_MAN_DIR)/man3/hwloc_topology_set_xml.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_topology_support.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_topology_discovery_support.3 \
+        $(DOX_MAN_DIR)/man3/hwloc_topology_cpubind_support.3 \
         $(DOX_MAN_DIR)/man3/hwloc_topology_t.3 \
         $(DOX_MAN_DIR)/man3/hwlocality_binding.3 \
         $(DOX_MAN_DIR)/man3/hwlocality_configuration.3 \
@@ -332,7 +406,7 @@
 # that we don't get partial target errors.
 #
 
-if BUILD_DOXYGEN
+if HWLOC_BUILD_DOXYGEN
 $(man3_MANS): $(DOX_TAG)
 $(DOX_A4PDF): $(DOX_TAG)
 $(DOX_LETTERPDF): $(DOX_TAG)
@@ -345,13 +419,13 @@
 # Make sure that the documentation example works
 #
 
-if BUILD_DOXYGEN
+if HWLOC_BUILD_TESTS
 TESTS = hwloc-hello
 check_PROGRAMS = $(TESTS)
+endif HWLOC_BUILD_TESTS
 
-hwloc_hello_LDADD = $(top_builddir)/src/libhwloc.la
+hwloc_hello_LDADD = $(HWLOC_top_builddir)/src/libhwloc.la
 hwloc_hello_DEPENDENCIES = $(hwloc_hello_LDADD)
-endif
 
 #
 # Only remove the actual generated documentation files for maintainers
@@ -369,16 +443,19 @@
 # Rules for creating the top-level README file.  There does not appear
 # to be an easy way to know if AC_PATH_PROG found something in
 # configure.ac (!), so put a run-time check here to see if we have
-# w3c.
+# w3c.  
 #
+# Just like BUILD_DOXYGEN, BUILD_README will automatically be false if
+# we're not building standalone.
+#
 
-if BUILD_README
-doc readme: all $(top_srcdir)/README
-$(top_srcdir)/README: $(DOX_HTML_DIR)
-	LC_ALL=C $(W3_GENERATOR) $(DOX_HTML_DIR)/index.html | sed -n -e 's/^   //' -e '/^Introduction$$/,$$p' > $@
+if HWLOC_BUILD_README
+doc readme: all $(HWLOC_top_srcdir)/README
+$(HWLOC_top_srcdir)/README: $(DOX_HTML_DIR)
+	LC_ALL=C $(HWLOC_W3_GENERATOR) $(DOX_HTML_DIR)/index.html | sed -n -e 's/^   //' -e '/^Introduction$$/,$$p' > $@
 else
 doc readme: no-build-readme
-$(top_srcdir)/README: no-build-readme
+$(HWLOC_top_srcdir)/README: no-build-readme
 
 no-build-readme:
 	@echo "ERROR: You do not have the 'w3m' or 'lynx' executables to build the README, or do not have the 'doxygen' executable to build the docs."

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/doxygen.cfg
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/doxygen.cfg	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/doxygen.cfg	2010-05-11 01:47:13 UTC (rev 6632)
@@ -144,7 +144,7 @@
 # (but less readable) file names. This can be useful is your file systems 
 # doesn't support long names like on DOS, Mac, or CD-ROM.
 
-SHORT_NAMES            = NO
+SHORT_NAMES            = YES
 
 # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
 # will interpret the first line (until the first dot) of a JavaDoc-style 

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/hwloc-hello.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/hwloc-hello.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/hwloc-hello.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,99 +1,141 @@
 /* Example hwloc API program.
  *
  * Copyright © 2009 INRIA, Université Bordeaux 1
+ * Copyright © 2009-2010 Cisco Systems, Inc.  All rights reserved.
  *
- * topo-hello.c 
+ * hwloc-hello.c 
  */
 
 #include <hwloc.h>
 
-static void print_children(hwloc_topology_t topology, hwloc_obj_t obj, int depth)
+static void print_children(hwloc_topology_t topology, hwloc_obj_t obj, 
+                           int depth)
 {
-	char string[128];
-	int i;
+    char string[128];
+    unsigned i;
 
-	hwloc_obj_snprintf(string, sizeof(string), topology, obj, "#", 0);
-	printf("%*s%s\n", 2*depth, "", string);
-	for (i = 0; i < obj->arity; i++)
-		print_children(topology, obj->children[i], depth + 1);
+    hwloc_obj_snprintf(string, sizeof(string), topology, obj, "#", 0);
+    printf("%*s%s\n", 2*depth, "", string);
+    for (i = 0; i < obj->arity; i++) {
+        print_children(topology, obj->children[i], depth + 1);
+    }
 }
 
 int main(void)
 {
-	/* Topology object */
-	hwloc_topology_t topology;
+    int depth;
+    unsigned i;
+    unsigned long size;
+    int levels;
+    char string[128];
+    int topodepth;
+    hwloc_topology_t topology;
+    hwloc_cpuset_t cpuset;
+    hwloc_obj_t obj;
 
-	/* Allocate and initialize topology object.  */
-	hwloc_topology_init(&topology);
+    /* Allocate and initialize topology object. */
+    hwloc_topology_init(&topology);
 
-        /* ... Optionally, put detection configuration here to e.g. ignore some
-           objects types, define a synthetic topology, etc....  The default is
-           to detect all the objects of the machine that the caller is allowed
-           to access.
-	   See Configure Topology Detection.  */
+    /* ... Optionally, put detection configuration here to ignore
+       some objects types, define a synthetic topology, etc....  
 
-	/* Perform the topology detection.  */
-	hwloc_topology_load(topology);
+       The default is to detect all the objects of the machine that
+       the caller is allowed to access.  See Configure Topology
+       Detection. */
 
+    /* Perform the topology detection. */
+    hwloc_topology_load(topology);
 
-	/* Optionally, get some additional topology information
-	 * in case we need the topology depth later.
-	 */
-	unsigned topodepth = hwloc_topology_get_depth(topology);
+    /* Optionally, get some additional topology information
+       in case we need the topology depth later. */
+    topodepth = hwloc_topology_get_depth(topology);
 
+    /*****************************************************************
+     * First example:
+     * Walk the topology with an array style, from level 0 (always
+     * the system level) to the lowest level (always the proc level).
+     *****************************************************************/
+    for (depth = 0; depth < topodepth; depth++) {
+        printf("*** Objects at level %d\n", depth);
+        for (i = 0; i < hwloc_get_nbobjs_by_depth(topology, depth); 
+             i++) {
+            hwloc_obj_snprintf(string, sizeof(string), topology,
+                       hwloc_get_obj_by_depth(topology, depth, i),
+                       "#", 0);
+            printf("Index %u: %s\n", i, string);
+        }
+    }
 
-        /* Walk the topology with an array style, from level 0 (always the
-         * system level) to the lowest level (always the proc level). */
-	int depth, i;
-	char string[128];
-	for (depth = 0; depth < topodepth; depth++) {
-		for (i = 0; i < hwloc_get_nbobjs_by_depth(topology, depth); i++) {
-			hwloc_obj_snprintf(string, sizeof(string), topology,
-					hwloc_get_obj_by_depth(topology, depth, i), "#", 0);
-			printf("%s\n", string);
-		}
-	}
+    /*****************************************************************
+     * Second example:
+     * Walk the topology with a tree style.
+     *****************************************************************/
+    printf("*** Printing overall tree\n");
+    print_children(topology, hwloc_get_root_obj(topology), 0);
 
-	/* Walk the topology with a tree style.  */
-	print_children(topology, hwloc_get_system_obj(topology), 0);
+    /*****************************************************************
+     * Third example:
+     * Print the number of sockets.
+     *****************************************************************/
+    depth = hwloc_get_type_depth(topology, HWLOC_OBJ_SOCKET);
+    if (depth == HWLOC_TYPE_DEPTH_UNKNOWN) {
+        printf("*** The number of sockets is unknown\n");
+    } else {
+        printf("*** %u socket(s)\n", 
+               hwloc_get_nbobjs_by_depth(topology, depth));
+    }
 
+    /*****************************************************************
+     * Fourth example:
+     * Compute the amount of cache that the first logical processor
+     * has above it.
+     *****************************************************************/
+    levels = 0;
+    size = 0;
+    for (obj = hwloc_get_obj_by_type(topology, HWLOC_OBJ_PU, 0);
+         obj;
+         obj = obj->parent)
+      if (obj->type == HWLOC_OBJ_CACHE) {
+        levels++;
+        size += obj->attr->cache.size;
+      }
+    printf("*** Logical processor 0 has %d caches totaling %luKB\n", 
+           levels, size / 1024);
 
-	/* Print the number of sockets.  */
-	depth = hwloc_get_type_depth(topology, HWLOC_OBJ_SOCKET);
-	if (depth == HWLOC_TYPE_DEPTH_UNKNOWN)
-		printf("The number of sockets is unknown\n");
-	else
-		printf("%u socket(s)\n", hwloc_get_nbobjs_by_depth(topology, depth));
+    /*****************************************************************
+     * Fifth example:
+     * Bind to only one thread of the last core of the machine.
+     *
+     * First find out where cores are, or else smaller sets of CPUs if
+     * the OS doesn't have the notion of a "core".
+     *****************************************************************/
+    depth = hwloc_get_type_or_below_depth(topology, HWLOC_OBJ_CORE);
 
+    /* Get last core. */
+    obj = hwloc_get_obj_by_depth(topology, depth,
+                   hwloc_get_nbobjs_by_depth(topology, depth) - 1);
+    if (obj) {
+        /* Get a copy of its cpuset that we may modify. */
+        cpuset = hwloc_cpuset_dup(obj->cpuset);
 
-        /* Find out where cores are, or else smaller sets of CPUs if the OS
-         * doesn't have the notion of core. */
-	depth = hwloc_get_type_or_below_depth(topology, HWLOC_OBJ_CORE);
+        /* Get only one logical processor (in case the core is
+           SMT/hyperthreaded). */
+        hwloc_cpuset_singlify(cpuset);
 
-	/* Get last one.  */
-	hwloc_obj_t obj = hwloc_get_obj_by_depth(topology, depth, hwloc_get_nbobjs_by_depth(topology, depth) - 1);
-	if (!obj)
-		return 0;
+        /* And try to bind ourself there. */
+        if (hwloc_set_cpubind(topology, cpuset, 0)) {
+            char *str;
+            hwloc_cpuset_asprintf(&str, obj->cpuset);
+            printf("Couldn't bind to cpuset %s\n", str);
+            free(str);
+        }
 
-	/* Get a copy of its cpuset that we may modify.  */
-	hwloc_cpuset_t cpuset = hwloc_cpuset_dup(obj->cpuset);
+        /* Free our cpuset copy */
+        hwloc_cpuset_free(cpuset);
+    }
 
-	/* Get only one logical processor (in case the core is SMT/hyperthreaded).  */
-	hwloc_cpuset_singlify(cpuset);
+    /* Destroy topology object. */
+    hwloc_topology_destroy(topology);
 
-	/* And try to bind ourself there.  */
-	if (hwloc_set_cpubind(topology, cpuset, 0)) {
-		char *str = NULL;
-		hwloc_cpuset_asprintf(&str, obj->cpuset);
-		printf("Couldn't bind to cpuset %s\n", str);
-		free(str);
-	}
-
-	/* Free our cpuset copy */
-	hwloc_cpuset_free(cpuset);
-
-	/* Destroy topology object.  */
-	hwloc_topology_destroy(topology);
-
-	return 0;
+    return 0;
 }

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/hwloc.doxy
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/hwloc.doxy	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/hwloc.doxy	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,10 +1,10 @@
 /*
  * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
- * Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
+ * Copyright © 2009-2010 Cisco Systems, Inc.  All rights reserved.
  * See COPYING in top-level directory.
  */
 
-/*! \mainpage hwloc
+/*! \mainpage Hardware Locality
 
 <h1 class="sub">Portable abstraction of hierarchical architectures for high-performance computing</h1>
 
@@ -18,7 +18,8 @@
 hwloc provides command line tools and a C API to obtain the
 hierarchical map of key computing elements, such as: NUMA memory
 nodes, shared caches, processor sockets, processor cores, and
-processor "threads".  hwloc also gathers various attributes such as
+processing units (logical processors or "threads").
+hwloc also gathers various attributes such as
 cache and memory information, and is portable across a variety of
 different operating systems and platforms.
 
@@ -33,17 +34,19 @@
 "re-branding" of the libtopology code base, but with both a few
 genuinely new features and a few PLPA-like features added in.  More
 new features and more PLPA-like features will be added to hwloc over
-time.
+time. See \ref switchfromplpa for more details about converting
+your application from PLPA to hwloc.
 
 hwloc supports the following operating systems:
 
 <ul>
 <li>Linux (including old kernels not having sysfs topology
-information, with knowledge of cpusets, offline cpus, and Kerrighed
-support)</li>
+information, with knowledge of cpusets, offline cpus, ScaleMP vSMP,
+and Kerrighed support)</li>
 <li>Solaris</li>
 <li>AIX</li>
 <li>Darwin / OS X</li>
+<li>FreeBSD and its variants, such as kFreeBSD/GNU</li>
 <li>OSF/1 (a.k.a., Tru64)</li>
 <li>HP-UX</li>
 <li>Microsoft Windows</li>
@@ -95,7 +98,7 @@
 shell$ ./autogen.sh
 \endcode
 
-Note that GNU Autoconf >=2.60, Automake >=1.10 and Libtool >=2.2.6 are
+Note that GNU Autoconf >=2.63, Automake >=1.10 and Libtool >=2.2.6 are
 required when building from a Subversion checkout.
 
 Installation by itself is the fairly common GNU-based process:
@@ -122,39 +125,39 @@
 may show the following outputs:
 
 \image html dudley.png
-\image latex dudley.png width=\textwidth
+\image latex dudley.png "" width=9cm
 
-\code
-System(15GB)
-  Socket#0 + L3(4096KB)
-    L2(1024KB) + L1(16KB) + Core#0
-      P#0
-      P#8
-    L2(1024KB) + L1(16KB) + Core#1
-      P#4
-      P#12
-  Socket#1 + L3(4096KB)
-    L2(1024KB) + L1(16KB) + Core#0
-      P#1
-      P#9
-    L2(1024KB) + L1(16KB) + Core#1
-      P#5
-      P#13
-  Socket#2 + L3(4096KB)
-    L2(1024KB) + L1(16KB) + Core#0
-      P#2
-      P#10
-    L2(1024KB) + L1(16KB) + Core#1
-      P#6
-      P#14
-  Socket#3 + L3(4096KB)
-    L2(1024KB) + L1(16KB) + Core#0
-      P#3
-      P#11
-    L2(1024KB) + L1(16KB) + Core#1
-      P#7
-      P#15
-\endcode
+\verbatim
+Machine (16GB)
+  Socket #0 + L3 #0 (4096KB)
+    L2 #0 (1024KB) + L1 #0 (16KB) + Core #0
+      PU #0 (phys=0)
+      PU #1 (phys=8)
+    L2 #1 (1024KB) + L1 #1 (16KB) + Core #1
+      PU #2 (phys=4)
+      PU #3 (phys=12)
+  Socket #1 + L3 #1 (4096KB)
+    L2 #2 (1024KB) + L1 #2 (16KB) + Core #2
+      PU #4 (phys=1)
+      PU #5 (phys=9)
+    L2 #3 (1024KB) + L1 #3 (16KB) + Core #3
+      PU #6 (phys=5)
+      PU #7 (phys=13)
+  Socket #2 + L3 #2 (4096KB)
+    L2 #4 (1024KB) + L1 #4 (16KB) + Core #4
+      PU #8 (phys=2)
+      PU #9 (phys=10)
+    L2 #5 (1024KB) + L1 #5 (16KB) + Core #5
+      PU #10 (phys=6)
+      PU #11 (phys=14)
+  Socket #3 + L3 #3 (4096KB)
+    L2 #6 (1024KB) + L1 #6 (16KB) + Core #6
+      PU #12 (phys=3)
+      PU #13 (phys=11)
+    L2 #7 (1024KB) + L1 #7 (16KB) + Core #7
+      PU #14 (phys=7)
+      PU #15 (phys=15)
+\endverbatim
 
  On a 4-socket 2-core Opteron NUMA machine, the \c lstopo tool may
  show the following outputs:
@@ -162,57 +165,57 @@
 \image html hagrid.png
 \image latex hagrid.png width=\textwidth
 
-\code
-System(62GB)
-  Node#0(8190MB) + Socket#0
-    L2(1024KB) + L1(64KB) + Core#0 + P#0
-    L2(1024KB) + L1(64KB) + Core#1 + P#1
-  Node#1(8192MB) + Socket#1
-    L2(1024KB) + L1(64KB) + Core#0 + P#2
-    L2(1024KB) + L1(64KB) + Core#1 + P#3
-  Node#2(8192MB) + Socket#2
-    L2(1024KB) + L1(64KB) + Core#0 + P#4
-    L2(1024KB) + L1(64KB) + Core#1 + P#5
-  Node#3(8192MB) + Socket#3
-    L2(1024KB) + L1(64KB) + Core#0 + P#6
-    L2(1024KB) + L1(64KB) + Core#1 + P#7
-  Node#4(8192MB) + Socket#4
-    L2(1024KB) + L1(64KB) + Core#0 + P#8
-    L2(1024KB) + L1(64KB) + Core#1 + P#9
-  Node#5(8192MB) + Socket#5
-    L2(1024KB) + L1(64KB) + Core#0 + P#10
-    L2(1024KB) + L1(64KB) + Core#1 + P#11
-  Node#6(8192MB) + Socket#6
-    L2(1024KB) + L1(64KB) + Core#0 + P#12
-    L2(1024KB) + L1(64KB) + Core#1 + P#13
-  Node#7(8192MB) + Socket#7
-    L2(1024KB) + L1(64KB) + Core#0 + P#14
-    L2(1024KB) + L1(64KB) + Core#1 + P#15
-\endcode
+\verbatim
+Machine (64GB)
+  NUMANode #0 (phys=0 8190MB) + Socket #0
+    L2 #0 (1024KB) + L1 #0 (64KB) + Core #0 + PU #0 (phys=0)
+    L2 #1 (1024KB) + L1 #1 (64KB) + Core #1 + PU #1 (phys=1)
+  NUMANode #1 (phys=1 8192MB) + Socket #1
+    L2 #2 (1024KB) + L1 #2 (64KB) + Core #2 + PU #2 (phys=2)
+    L2 #3 (1024KB) + L1 #3 (64KB) + Core #3 + PU #3 (phys=3)
+  NUMANode #2 (phys=2 8192MB) + Socket #2
+    L2 #4 (1024KB) + L1 #4 (64KB) + Core #4 + PU #4 (phys=4)
+    L2 #5 (1024KB) + L1 #5 (64KB) + Core #5 + PU #5 (phys=5)
+  NUMANode #3 (phys=3 8192MB) + Socket #3
+    L2 #6 (1024KB) + L1 #6 (64KB) + Core #6 + PU #6 (phys=6)
+    L2 #7 (1024KB) + L1 #7 (64KB) + Core #7 + PU #7 (phys=7)
+  NUMANode #4 (phys=4 8192MB) + Socket #4
+    L2 #8 (1024KB) + L1 #8 (64KB) + Core #8 + PU #8 (phys=8)
+    L2 #9 (1024KB) + L1 #9 (64KB) + Core #9 + PU #9 (phys=9)
+  NUMANode #5 (phys=5 8192MB) + Socket #5
+    L2 #10 (1024KB) + L1 #10 (64KB) + Core #10 + PU #10 (phys=10)
+    L2 #11 (1024KB) + L1 #11 (64KB) + Core #11 + PU #11 (phys=11)
+  NUMANode #6 (phys=6 8192MB) + Socket #6
+    L2 #12 (1024KB) + L1 #12 (64KB) + Core #12 + PU #12 (phys=12)
+    L2 #13 (1024KB) + L1 #13 (64KB) + Core #13 + PU #13 (phys=13)
+  NUMANode #7 (phys=7 8192MB) + Socket #7
+    L2 #14 (1024KB) + L1 #14 (64KB) + Core #14 + PU #14 (phys=14)
+    L2 #15 (1024KB) + L1 #15 (64KB) + Core #15 + PU #15 (phys=15)
+\endverbatim
 
  On a 2-socket quad-core Xeon (pre-Nehalem, with 2 dual-core dies into
  each socket):
 
 \image html emmett.png
-\image latex emmett.png "" width=8cm
+\image latex emmett.png "" width=7cm
 
-\code
-System(15GB)
-  Socket#0
-    L2(4096KB)
-      L1(32KB) + Core#0 + P#0
-      L1(32KB) + Core#1 + P#4
-    L2(4096KB)
-      L1(32KB) + Core#2 + P#2
-      L1(32KB) + Core#3 + P#6
-  Socket#1
-    L2(4096KB)
-      L1(32KB) + Core#0 + P#1
-      L1(32KB) + Core#1 + P#5
-    L2(4096KB)
-      L1(32KB) + Core#2 + P#3
-      L1(32KB) + Core#3 + P#7
-\endcode
+\verbatim
+Machine (16GB)
+  Socket #0
+    L2 #0 (4096KB)
+      L1 #0 (32KB) + Core #0 + PU #0 (phys=0)
+      L1 #1 (32KB) + Core #1 + PU #1 (phys=4)
+    L2 #1 (4096KB)
+      L1 #2 (32KB) + Core #2 + PU #2 (phys=2)
+      L1 #3 (32KB) + Core #3 + PU #3 (phys=6)
+  Socket #1
+    L2 #2 (4096KB)
+      L1 #4 (32KB) + Core #4 + PU #4 (phys=1)
+      L1 #5 (32KB) + Core #5 + PU #5 (phys=5)
+    L2 #3 (4096KB)
+      L1 #6 (32KB) + Core #6 + PU #6 (phys=3)
+      L1 #7 (32KB) + Core #7 + PU #7 (phys=7)
+\endverbatim
 
 \htmlonly
 </div><div class="section" id="interface">
@@ -220,28 +223,23 @@
 
 \section interface Programming interface
 
-The basic interface is available in hwloc.h. It mostly offers
+The basic interface is available in hwloc.h.  It essentially offers
 low-level routines for advanced programmers that want to manually
 manipulate objects and follow links between them.  Developers should
-look at hwloc/helper.h, which provides good higher-level topology
+also look at hwloc/helper.h, which provides good higher-level topology
 traversal examples.
 
-Each object contains a cpuset describing the list of processors that
+Each object contains a cpuset describing the list of processing units that
 it contains.  These cpusets may be used for \ref hwlocality_binding.
 hwloc offers an extensive cpuset manipulation interface in
 hwloc/cpuset.h.
 
 Moreover, hwloc also comes with additional helpers for
-interoperability with several commonly used environments.  For Linux,
-some specific helpers are available in hwloc/linux.h, and
-hwloc/linux-libnuma.h if using libnuma.  On glibc-based systems,
-additional helpers are available in hwloc/glibc-sched.h.  For Linux
-systems with the OpenFabrics verbs library, some dedicated helpers are
-provided in hwloc/openfabrics-verbs.h (this helper file is not yet
-useful on non-Linux systems with the OpenFabrics verbs library).
+interoperability with several commonly used environments.
+See the \ref interoperability section for details.
 
-To precisely define the vocabulary used by hwloc, a \ref glossary is
-available and should probably be read first.
+To precisely define the vocabulary used by hwloc, a \ref termsanddefs
+section is available and should probably be read first.
 
 Further documentation is available in a full set of HTML pages, man
 pages, and self-contained PDF files (formatted for both both US letter
@@ -254,23 +252,61 @@
 
 The following section presents an example of API usage.
 
-\section interface_example Interface example
+\section interface_example API example
 
-This section shows how to use hwloc with an small example \c hwloc-hello.c
-that just prints the topology and binds itself to the first processor of the
-second core of the machine.
+The following small C example (named ``hwloc-hello.c'') prints the
+topology of the machine and bring the process to the first logical processor
+of the second core of the machine.
 
-Hardware Location provides a pkg-config object, so compiling the
-example boils down to
+\include hwloc-hello.c
 
+hwloc provides a \c pkg-config executable to obtain relevant compiler
+and linker flags.  For example, it can be used thusly to compile
+applications that utilize the hwloc library (assuming GNU Make):
+
 \verbatim
 CFLAGS += $(pkg-config --cflags hwloc)
 LDLIBS += $(pkg-config --libs hwloc)
 cc hwloc-hello.c $(CFLAGS) -o hwloc-hello $(LDLIBS)
 \endverbatim
 
-\include hwloc-hello.c
+On a machine with 4GB of RAM and 2 processor sockets -- each socket of
+which has two processing cores -- the output from running \c
+hwloc-hello could be something like the following:
 
+\verbatim
+shell$ ./hwloc-hello
+*** Objects at level 0
+Index 0: Machine(3938MB)
+*** Objects at level 1
+Index 0: Socket#0
+Index 1: Socket#1
+*** Objects at level 2
+Index 0: Core#0
+Index 1: Core#1
+Index 2: Core#3
+Index 3: Core#2
+*** Objects at level 3
+Index 0: PU#0
+Index 1: PU#1
+Index 2: PU#2
+Index 3: PU#3
+*** Printing overall tree
+Machine(3938MB)
+  Socket#0
+    Core#0
+      PU#0
+    Core#1
+      PU#1
+  Socket#1
+    Core#3
+      PU#2
+    Core#2
+      PU#3
+*** 2 socket(s)
+shell$ 
+\endverbatim
+
 \htmlonly
 </div><div class="section" id="bugs">
 \endhtmlonly
@@ -281,6 +317,18 @@
 Bug reports should be reported in the tracker
 (https://svn.open-mpi.org/trac/hwloc/).
 
+If hwloc discovers an incorrect topology for your machine, the very
+first thing you should check is to ensure that you have the most
+recent updates installed for your operating system.  Indeed, most of
+hwloc topology discovery relies on hardware information retrieved
+through the operation system (e.g., via the /sys virtual filesystem of
+the Linux kernel).  If upgrading your OS or Linux kernel does not
+solve your problem, you may also want to ensure that you are running
+the most recent version of the BIOS for your machine.
+
+If those things fail, contact us on the mailing list for additional
+help.
+
 \htmlonly
 </div><div class="section" id="credits">
 \endhtmlonly
@@ -303,68 +351,534 @@
 </div>
 \endhtmlonly
 
-\page glossary Glossary
 
+
+\page termsanddefs Terms and Definitions 
+
 <dl>
 
 <dt>Object</dt>
-  <dd>Interesting kind of part of the system, such as a Core, a Cache, a Memory
-  node, etc. The different types detected by hwloc are detailed in the
-  ::hwloc_obj_type_e enumeration.
+  <dd>Interesting kind of part of the system, such as a Core, a Cache,
+  a Memory node, etc. The different types detected by hwloc are
+  detailed in the ::hwloc_obj_type_t enumeration.
   
-  They are topologically sorted by CPU set into a tree whose root is the System object which always exists.
+  They are topologically sorted by CPU set into a tree.
   </dd>
 
 <dt>CPU set</dt>
-  <dd>The set of logical processors logically included in an object, if any</dd>
+  <dd>The set of logical processors (or processing units) logically included in an object
+  (if it makes sense).  They are always expressed using physical logical
+  processor numbers (as announced by the OS).  They are just masks, they do \em
+  not have any relation with an operating system actual binding notion like
+  Linux' cpusets.</dd>
 
-<dt>Father object</dt>
-  <dd>The object logically containing the current object, for instance because
-  its CPU set includes the CPU set of the current object.
-  </dd>
+<dt>Parent object</dt>
+  <dd>The object logically containing the current object, for example
+  because its CPU set includes the CPU set of the current object.</dd>
 
-<dt>Children objects</dt>
-  <dd>The object contained in the current object because their CPU set is
-  included in the CPU set of the current object.</dd>
+<dt>Ancestor object</dt>
+  <dd>The parent object, or its own parent object, and so on.</dd>
 
+<dt>Children object(s)</dt>
+  <dd>The object (or objects) contained in the current object because
+  their CPU set is included in the CPU set of the current object.</dd>
+
 <dt>Arity</dt>
-  <dd>The number of children of an object</dd>
+  <dd>The number of children of an object.</dd>
 
 <dt>Sibling objects</dt>
-  <dd>Objects of the same type which have the same father</dd>
+  <dd>Objects of the same type which have the same parent.</dd>
 
 <dt>Sibling rank</dt>
-  <dd>Index to uniquely identify objecst of the same type which have the same
-  father, numbered from 0 to the arity of the father minus one.</dd>
+  <dd>Index to uniquely identify objects of the same type which have
+  the same parent, and is always in the range [0, parent_arity).</dd>
 
 <dt>Cousin objects</dt>
-  <dd>Objects of the same type as the current object</dd>
+  <dd>Objects of the same type as the current object.</dd>
 
 <dt>Level</dt>
-  <dd>Set of objects of the same type</dd>
+  <dd>Set of objects of the same type.</dd>
 
 <dt>OS index</dt>
-  <dd>The index that the OS uses to identify the object. This may sometimes be
-  completely arbitrary or depend on the BIOS configuration.</dd>
+  <dd>The index that the operating system (OS) uses to identify the
+  object.  This may be completely arbitrary, or it may depend on the
+  BIOS configuration.</dd>
 
 <dt>Depth</dt>
-  <dd>Nesting level in the object tree, starting from the System object.</dd>
+  <dd>Nesting level in the object tree, starting from the 0th object.</dd>
 
 <dt>Logical index</dt>
-  <dd>Index to uniquely identify objects of the same type. This index is always
-  linear from 0 to the number of objects of the level for that type, to express
-  proximity.  It could also be called cousin rank.</dd>
+  <dd>Index to uniquely identify objects of the same type.  It
+  expresses proximity in a generic way.  This index is always linear
+  and in the range [0, num_objs_same_type_same_level).  Think of it
+  as ``cousin rank.'' The ordering is based on topology first, and
+  then on OS CPU numbers, so it is stable across everything except
+  firmware CPU renumbering.</dd>
 
+<dt>Logical processor</dt>
+<dt>Processing unit</dt>
+  <dd>The smallest processing element that can be represented by a hwloc
+  object. It may be a single-core processor, a core of a multicore
+  processor, or a single thread in SMT processor.</dd>
+
 </dl>
 
 The following diagram can help to understand the vocabulary of the relationships
-by showing the example of a machine with two dual core non-SMT sockets, thus a
-topology with 4 levels.
+by showing the example of a machine with two dual core sockets (with no
+hardware threads); thus, a topology with 4 levels. Each box with rounded corner
+corresponds to one hwloc_obj_t, containing the values of the different integer
+fields (depth, logical_index, etc.), and arrows show to which other hwloc_obj_t
+pointers point to (first_child, parent, etc.)
 
 \image html diagram.png
 \image latex diagram.eps width=\textwidth
 
-It should be noted that for Processor objects, the logical index, computed
-linearly by hwloc, is not the same as the OS index.
+It should be noted that for PU objects, the logical index -- as
+computed linearly by hwloc -- is not the same as the OS index.
 
+
+
+\page tools Command-line tools 
+
+hwloc comes with an extensive C programming interface and several
+command line utilities. Each of them is fully documented in its own
+manual page; the following is a summary of the available command line
+tools.
+
+\section cli_lstopo lstopo
+
+lstopo (also known as hwloc-info and hwloc-ls) displays the
+hierarchical topology map of the current system.  The output may be
+graphic or textual, and can also be exported to numerous file
+formats such as PDF, PNG, XML, and others.
+
+Note that lstopo can read XML files and/or alternate chroot
+filesystems and display topological maps representing those systems
+(e.g., use lstopo to output an XML file on one system, and then use
+lstopo to read in that XML file and display it on a different system).
+
+\section cli_hwloc_bind hwloc-bind
+
+hwloc-bind binds processes to specific hardware objects through a
+flexible syntax.  A simple example is binding an executable to
+specific cores (or sockets or cpusets or ...).  The hwloc-bind(1) man
+page provides much more detail on what is possible.
+
+hwloc-bind can also be used to retrieve the current process' binding.
+
+\section cli_hwloc_calc hwloc-calc
+
+hwloc-calc is generally used to create cpuset strings to pass to
+hwloc-bind.  Although hwloc-bind accepts many forms of object
+specification (i.e., cpuset strings are one of many forms that
+hwloc-bind understands), they can be useful, compact representations
+in shell scripts, for example.
+
+hwloc-calc generates cpuset strings from given hardware objects with
+the ability to aggregate them, intersect them, and more.  hwloc-calc
+generally uses the same syntax than hwloc-bind, but multiple instances
+may be composed to generate complex combinations.  
+
+Note that hwloc-calc can also generate lists of logical processors or
+NUMA nodes that are convenient to pass to some external tools such as
+taskset or numactl.
+
+\section cli_hwloc_distrib hwloc-distrib
+
+hwloc-distrib generates a set of cpuset strings that are uniformly
+distributed across the machine for the given number of processes.
+These strings may be used with hwloc-bind to run processes to maximize
+their memory bandwidth by properly distributing them across the
+machine.
+
+
+
+\page envvar Environment variables
+
+The behavior of the hwloc library and tools may be tuned thanks to the
+following environment variables.
+
+<dl>
+
+<dt>HWLOC_XMLFILE=/path/to/file.xml</dt>
+  <dd>enforces the discovery from the given XML file as if
+  hwloc_topology_set_xml() had been called.
+  This file may have been generated earlier with lstopo file.xml.
+  For convenience, this backend provides empty binding hooks which just
+  return success.  To have hwloc still actually call OS-specific hooks,
+  HWLOC_THISSYSTEM should be set 1 in the environment too, to assert that
+  the loaded file is really the underlying system.
+  </dd>
+
+<dt>HWLOC_FSROOT=/path/to/linux/filesystem-root/</dt>
+  <dd>switches to reading the topology from the specified
+  Linux filesystem root instead of the main file-system root, as if
+  hwloc_topology_set_fsroot() had been called.
+  Not using the main file-system root causes hwloc_topology_is_thissystem()
+  to return 0.
+  For convenience, this backend provides empty binding hooks which just
+  return success.  To have hwloc still actually call OS-specific hooks,
+  HWLOC_THISSYSTEM should be set 1 in the environment too, to assert that
+  the loaded file is really the underlying system.
+  </dd>
+
+<dt>HWLOC_THISSYSTEM=1</dt>
+  <dd>enforces the return value of hwloc_topology_is_thissystem().
+  It means that it makes hwloc assume that the selected backend provides the
+  topology for the system on which we are running, even if it is not the
+  OS-specific backend but the XML backend for instance.
+  This means making the binding functions actually call the OS-specific
+  system calls and really do binding, while the XML backend would otherwise
+  provide empty hooks just returning success.
+  This can be used for efficiency reasons to first detect the topology once,
+  save it to an XML file, and quickly reload it later through the XML
+  backend, but still having binding functions actually do bind.
+  </dd>
+
+</dl>
+
+
+
+\page interoperability Interoperability with other software
+
+Although hwloc offers its own portable interface, it still may have to
+interoperate with specific or non-portable libraries that manipulate
+similar kinds of objects.  hwloc therefore offers several specific
+"helpers" to assist converting between those specific interfaces and
+hwloc.
+
+Some external libraries may be specific to a particular OS; others may
+not always be available.  The hwloc core therefore generally does not
+explicitly depend on these types of libraries.  However, when a custom
+application uses or otherwise depends on such a library, it may
+optionally include the corresponding hwloc helper to extend the hwloc
+interface with dedicated helpers.
+
+<dl>
+
+<dt>Linux specific features</dt>
+ <dd>
+  hwloc/linux.h offers Linux-specific helpers that utilize some
+  non-portable features of the Linux system, such as binding threads
+  through their thread ID ("tid") or parsing kernel CPU mask files.
+ </dd>
+
+<dt>Linux libnuma</dt>
+ <dd>
+  hwloc/linux-libnuma.h provides conversion helpers between hwloc CPU
+  sets and libnuma-specific types, such as nodemasks and bitmasks.  It
+  helps you use libnuma memory-binding functions with hwloc CPU sets.
+ </dd>
+
+<dt>Glibc</dt>
+ <dd>
+  hwloc/glibc-sched.h offers conversion routines between Glibc and
+  hwloc CPU sets in order to use hwloc with functions such as
+  sched_setaffinity().
+ </dd>
+
+<dt>OpenFabrics Verbs</dt>
+ <dd>
+  hwloc/openfabrics-verbs.h helps interoperability with the
+  OpenFabrics Verbs interface.  For example, it can return a list of
+  processors near an OpenFabrics device.
+ </dd>
+
+</dl>
+
+
+
+\page threadsafety Thread safety
+
+Like most libraries that mainly fill data structures, hwloc is not
+thread safe but rather reentrant: all state is held in a \ref
+hwloc_topology_t instance without mutex protection.  That means, for
+example, that two threads can safely operate on and modify two
+different \ref hwloc_topology_t instances, but they should not
+simultaneously invoke functions that modify the <em>same</em>
+instance.  Similarly, one thread should not modify a \ref
+hwloc_topology_t instance while another thread is reading or
+traversing it.  However, two threads can safely read or traverse the
+same \ref hwloc_topology_t instance concurrently.
+
+When running in multiprocessor environments, be aware that proper thread
+synchronization and/or memory coherency protection is needed to pass hwloc
+data (such as \ref hwloc_topology_t pointers) from one processor
+to another (e.g., a mutex, semaphore, or a memory barrier).
+Note that this is not a hwloc-specific requirement, but it is worth
+mentioning.
+
+For reference, \ref hwloc_topology_t modification operations include
+(but may not be limited to):
+
+<dl>
+
+<dt>Creation and destruction</dt>
+  <dd><tt>hwloc_topology_init(), hwloc_topology_load(),
+  hwloc_topology_destroy()</tt> (see \ref hwlocality_creation) imply
+  major modifications of the structure, including freeing some
+  objects.  No other thread cannot access the topology or any of its
+  objects at the same time.
+
+  Also references to objects inside the topology are not valid anymore
+  after these functions return.  </dd>
+
+<dt>Runtime topology modifications</dt>
+  <dd><tt>hwloc_topology_insert_misc_object_by_*</tt> (see \ref
+  hwlocality_tinker) may modify the topology significantly by adding
+  objects inside the tree, changing the topology depth, etc.
+
+  Although references to former objects <em>may</em> still be valid
+  after insertion, it is strongly advised to not rely on any such
+  guarantee and always re-consult the topology to reacquire new
+  instances of objects.  </dd>
+
+<dt>Locating topologies</dt>
+
+  <dd><tt>hwloc_topology_ignore*</tt>, <tt>hwloc_topology_set*</tt>
+  (see \ref hwlocality_configuration) do not modify the topology
+  directly, but they do modify internal structures describing the
+  behavior of the next invocation of <tt>hwloc_topology_load()</tt>.
+  Hence, all of these functions should not be used concurrently.
+
+  Note that these functions do not modify the current topology until
+  it is actually reloaded; it is possible to use them while other
+  threads are only read the current topology.  </dd>
+
+</dl>
+
+
+
+\page embed Embedding hwloc in other software
+
+It can be desirable to include hwloc in a larger software package (be
+sure to check out the LICENSE file) so that users don't have to
+separately download and install it before installing your software.
+This can be advantageous to ensure that your software uses a
+known-tested/good version of hwloc, or for use on systems that do not
+have hwloc pre-installed.
+
+When used in "embedded" mode, hwloc will:
+
+- not install any header files
+- not build any documentation files
+- not build or install any executables or tests
+- not build <tt>libhwloc.*</tt> -- instead, it will build
+  <tt>libhwloc_embedded.*</tt>
+
+There are two ways to put hwloc into "embedded" mode.  The first is
+directly from the configure command line:
+
+\verbatim
+shell$ ./configure --enable-embedded-mode ...
+\endverbatim
+
+The second requires that your software project uses the GNU Autoconf /
+Automake / Libtool tool chain to build your software.  If you do this,
+you can directly integrate hwloc's m4 configure macro into your
+configure script.  You can then invoke hwloc's configuration tests and
+build setup by calling an m4 macro (see below).
+
+\section embedding_m4 Using hwloc's m4 embedding capabilities
+
+Every project is different, and there are many different ways of
+integrating hwloc into yours.  What follows is <em>one</em> example of
+how to do it.
+
+If your project uses recent versions Autoconf, Automake, and Libtool
+to build, you can use hwloc's embedded m4 capabilities.  We have
+tested the embedded m4 with projects that use Autoconf 2.65, Automake
+1.11.1, and Libtool 2.2.6b.  Slightly earlier versions of may also
+work but are untested.  Autoconf versions prior to 2.63 are almost
+certain to not work because hwloc uses macros that were introduced in
+2.63.
+
+You can either copy all the config/hwloc*m4 files from the hwloc
+source tree to the directory where your project's m4 files reside, or
+you can tell aclocal to find more m4 files in the embedded hwloc's
+"config" subdirectory (e.g., add "-Ipath/to/embedded/hwloc/config" to
+your Makefile.am's ACLOCAL_AMFLAGS).
+
+The following macros can then be used from your configure script (only
+HWLOC_INIT <em>must</em> be invoked if using the m4 macros):
+
+- HWLOC_INIT(config-dir-prefix, action-upon-success,
+  action-upon-failure): Invoke the hwloc configuration tests and setup
+  the hwloc tree to build.  The first argument is the prefix to use
+  for AC_OUTPUT files -- it's where the hwloc tree is located relative
+  to <tt>$top_srcdir</tt>.  Hence, if your embedded hwloc is located
+  in the source tree at contrib/hwloc, you should pass
+  <tt>[contrib/hwloc]</tt> as the first argument.  If HWLOC_INIT and
+  the rest of <tt>configure</tt> completes successfully, then "make"
+  traversals of the hwloc tree with standard Automake targets (all,
+  clean, install, etc.) should behave as expected.  For example, it is
+  safe to list the hwloc directory in the SUBDIRS of a higher-level
+  Makefile.am.  <strong>NOTE: If the HWLOC_SET_SYMBOL_PREFIX macro is
+  used, it must be invoked <em>before</em> HWLOC_INIT.</strong>
+
+- HWLOC_SET_SYMBOL_PREFIX(foo_): Tells the hwloc to prefix all of
+  hwloc's types and public symbols with "foo_"; meaning that function
+  hwloc_init() becomes foo_hwloc_init().  Enum values are prefixed
+  with an upper-case translation if the prefix supplied;
+  HWLOC_OBJ_SYSTEM becomes FOO_HWLOC_OBJ_SYSTEM.  This is recommended
+  behavior if you are including hwloc in middleware -- it is possible
+  that your software will be combined with other software that links
+  to another copy of hwloc.  If both uses of hwloc utilize different
+  symbol prefixes, there will be no type/symbol clashes, and
+  everything will compile, link, and run successfully.  If you both
+  embed hwloc without changing the symbol prefix and also link against
+  an external hwloc, you may get multiple symbol definitions when
+  linking your final library or application.
+
+- HWLOC_DO_AM_CONDITIONALS: If you embed hwloc in a larger project and
+  build it conditionally (e.g., if HWLOC_INIT is invoked
+  conditionally), you must unconditionally invoke
+  HWLOC_DO_AM_CONDITIONALS to avoid warnings from Automake (for the
+  cases where hwloc is not selected to be built).  This macro is
+  necessary because hwloc uses some AM_CONDITIONALs to build itself,
+  and AM_CONDITIONALs cannot be defined conditionally.  Note that it
+  is safe (but unnecessary) to call HWLOC_DO_AM_CONDITIONALS even if
+  HWLOC_INIT is invoked unconditionally.
+
+NOTE: When using the HWLOC_INIT m4 macro, it may be necessary to
+explicitly invoke AC_CANONICAL_TARGET and/or AC_USE_SYSTEM_EXTENSIONS
+macros early in the configure script (e.g., after AC_INIT but before
+AM_INIT_AUTOMAKE).  See the Autoconf documentation for further
+information.
+
+
+\section embedding_example Example embedding hwloc
+
+Here's an example of integrating with a larger project named sandbox
+that already uses Autoconf, Automake, and Libtool to build itself:
+
+\verbatim
+# First, cd into the sandbox project source tree
+shell$ cd sandbox
+shell$ cp -r /somewhere/else/hwloc-<version> my-embedded-hwloc
+shell$ edit Makefile.am
+  1. Add "-Imy-embedded-hwloc/config" to ACLOCAL_AMFLAGS
+  2. Add "my-embedded-hwloc" to SUBDIRS
+  3. Add "$(HWLOC_EMBEDDED_LDADD)" to sandbox's executable's LDADD line
+  4. Add "$(HWLOC_EMBEDDED_CPPFLAGS)" to AM_CPPFLAGS
+shell$ edit configure.ac
+  1. Add "HWLOC_SET_SYMBOL_PREFIX(sandbox_hwloc_)" line
+  2. Add "HWLOC_INIT([my-embedded-hwloc], [happy=yes], [happy=no])" line
+  3. Add error checking for happy=no case
+shell$ edit sandbox.c
+  1. Add #include <hwloc.h>
+  2. Add calls to sandbox_hwloc_init() and other hwloc API functions
+\endverbatim
+
+Now you can bootstrap, configure, build, and run the sandbox as normal
+-- all calls to "sandbox_hwloc_*" will use the embedded hwloc rather
+than any system-provided copy of hwloc.
+
+
+
+\page switchfromplpa Switching from PLPA to hwloc
+
+Although PLPA and hwloc share some of the same ideas, their
+programming interfaces are quite different.  After much debate, it was
+decided <em>not</em> to emulate the PLPA API with hwloc's API because
+hwloc's API is already far more rich than PLPA's.  
+
+More specifically, exploiting modern computing architecture
+<em>requires</em> the flexible functionality provided by the hwloc API
+-- the PLPA API is too rigid in its definitions and practices to
+handle the evolving server hardware landscape (e.g., PLPA only
+understands cores and sockets; hwloc understands a much larger set
+of hardware objects).
+
+As such, even though it is fully possible to emulate the PLPA API with
+hwloc (e.g., only deal with sockets and cores), and while the
+documentation below describes how to do this, we encourage any
+existing PLPA application authors to actually re-think their
+application in terms of more than just sockets and cores.  In short,
+we encourage you to use the full hwloc API to exploit <em>all</em> the
+hardware.
+
+
+\section switchfromplpa_caching Topology context vs. caching
+
+First, all hwloc functions take a \p topology parameter. This
+parameter serves as an internal storage for the result of the topology
+discovery. It replaces PLPA's caching abilities and even lets you
+manipulate multiple topologies as the same time, if needed.
+
+Thus, all programs should first run hwloc_topology_init() and
+hwloc_topology_destroy() as they did plpa_init() and plpa_finalize()
+in the past.
+
+
+\section switchfromplpa_hierarchy Hierarchy vs. Core at Socket
+
+PLPA was designed to understand only cores and sockets.  hwloc offers
+many more different types of objects (e.g., cores, sockets, hardware
+threads, NUMA nodes, and others) and stores them within a tree of
+resources.
+
+To emulate the PLPA model, it is possible to find sockets using
+functions such as hwloc_get_obj_by_type().  Iterating over sockets is
+also possible using hwloc_get_next_obj_by_type().  Then, finding a
+core within a socket may be done using
+hwloc_get_obj_inside_cpuset_by_type() or
+hwloc_get_next_obj_inside_cpuset_by_type().
+
+It is also possible to directly find an object "below" another object
+using hwloc_get_obj_below_by_type() (or
+hwloc_get_obj_below_array_by_type()).
+
+
+\section switchfromplpa_indexes Logical vs. Physical/OS indexes
+
+hwloc manipulates logical indexes, meaning indexes specified with
+regard to the ordering of objects in the hwloc-provided hierarchical
+tree.  Physical or OS indexes may be entirely hidden if not strictly
+required.  The reason for this is that physical/OS indexes may change
+with the OS or with the BIOS version.  They may be non-consecutive,
+multiple objects may have the same physical/OS indexes, making their
+manipulation tricky and highly non-portable.
+
+Note that hwloc tries very hard to always present a hierarchical tree
+with the same logical ordering, regardless of physical or OS index
+ordering.
+
+It is still possible to retrieve physical/OS indexes through the \p
+os_index field of objects, but such practice should be avoided as much
+as possible for the reasons described above (except perhaps for
+prettyprinting / debugging purposes).
+
+::HWLOC_OBJ_PU objects are supposed to have different physical/OS
+indexes since the OS uses them for binding.  The \p os_index field of
+these objects provides the identifier that may be used for such
+binding, and hwloc_get_proc_obj_by_os_index() finds the object
+associated with a specific OS index.  
+
+But as mentioned above, we discourage the use of these conversion
+methods for actual binding.  Instead, hwloc offers its own binding
+model using the \p cpuset field of objects.  These cpusets may be
+duplicated, modified, combined, etc. (see hwloc/cpuset.h for details)
+and then passed to hwloc_set_cpubind() for binding.
+
+
+\section switchfromplpa_counting Counting specification
+
+PLPA offers a countspec parameter to specify whether counting all
+CPUs, only the online ones or only the offline ones.  However, some
+operating systems do not expose the topology of offline CPUs (i.e.,
+offline CPUs are not reported at all by the OS).  Also, some
+processors may not be visible to the current application due to
+administrative restrictions.  Finally, some processors let you
+shutdown a single hardware thread in a core, making some of the PLPA
+features irrelevant.
+
+hwloc stores in the hierarchical tree of objects all CPUs that have
+known topology information.  It then provides the applications with
+several cpusets that contain the list of CPUs that are actually known,
+that have topology information, that are online, or that are available
+to the application.  These cpusets may be retrieved with
+hwloc_topology_get_online_cpuset() and other similar functions to
+filter the object that are relevant or not.
+
 */

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/images/diagram.fig
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/images/diagram.fig	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/images/diagram.fig	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,4 +1,4 @@
-#FIG 3.2  Produced by xfig version 3.2.5a
+#FIG 3.2  Produced by xfig version 3.2.5b
 Landscape
 Center
 Metric
@@ -7,18 +7,6 @@
 Single
 -2
 1200 2
-6 9765 7740 11340 9180
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
-	 9765 8010 11205 8010
-2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
-	 11205 9180 11205 7740 9765 7740 9765 9180 11205 9180
-4 0 0 50 -1 0 12 0.0000 4 165 1095 9855 8640 .os_index = 3\001
-4 0 0 50 -1 0 14 0.0000 4 165 435 9855 7965 Proc\001
-4 0 0 50 -1 0 12 0.0000 4 180 1290 9855 8865 .sibling_rank=0\001
-4 0 0 50 -1 0 12 0.0000 4 180 630 9855 9090 .arity=0\001
-4 0 0 50 -1 0 12 0.0000 4 180 810 9855 8190 .depth = 3\001
-4 0 0 50 -1 0 12 0.0000 4 180 1485 9855 8415 .logical_index = 3\001
--6
 6 3060 3060 4590 4500
 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
 	 3060 3330 4500 3330
@@ -31,28 +19,62 @@
 4 0 0 50 -1 0 12 0.0000 4 180 1290 3150 4185 .sibling_rank=0\001
 4 0 0 50 -1 0 12 0.0000 4 180 630 3150 4410 .arity=2\001
 -6
+6 4500 3375 8505 3915
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4500 3600 8415 3600
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 8415 3690 4500 3690
+4 0 0 50 -1 0 12 0.0000 4 180 1035 4545 3510 next_sibling\001
+4 0 0 50 -1 0 12 0.0000 4 180 1035 7470 3870 prev_sibling\001
+-6
+6 7290 2250 8640 2610
+4 2 0 50 -1 0 12 0.0000 4 165 810 8640 2565 last_child\001
+4 2 0 50 -1 0 12 0.0000 4 165 900 8190 2385 children[1]\001
+-6
+6 2205 4590 3285 4950
+4 0 0 50 -1 0 12 0.0000 4 165 900 2385 4725 children[0]\001
+4 0 0 50 -1 0 12 0.0000 4 165 840 2205 4905 first_child\001
+-6
+6 4185 4590 5265 4950
+4 0 0 50 -1 0 12 0.0000 4 165 900 4185 4725 children[1]\001
+4 0 0 50 -1 0 12 0.0000 4 165 810 4455 4905 last_child\001
+-6
+6 7605 4590 8685 4950
+4 0 0 50 -1 0 12 0.0000 4 165 900 7785 4725 children[0]\001
+4 0 0 50 -1 0 12 0.0000 4 165 840 7605 4905 first_child\001
+-6
+6 9585 4590 10665 4950
+4 0 0 50 -1 0 12 0.0000 4 165 900 9585 4725 children[1]\001
+4 0 0 50 -1 0 12 0.0000 4 165 810 9855 4905 last_child\001
+-6
+6 4275 2250 5625 2610
+4 0 0 50 -1 0 12 0.0000 4 165 840 4275 2565 first_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 900 4725 2385 children[0]\001
+-6
+6 4770 810 5445 1440
+4 0 4 50 -1 0 12 0.0000 4 135 720 4770 945 Machine\001
+4 0 4 50 -1 0 12 0.0000 4 135 405 4770 1170 level\001
+4 0 4 50 -1 0 12 0.0000 4 180 675 4770 1395 depth=0\001
+-6
+6 2115 3150 2790 3780
+4 0 4 50 -1 0 12 0.0000 4 135 555 2115 3285 Socket\001
+4 0 4 50 -1 0 12 0.0000 4 135 405 2115 3510 level\001
+4 0 4 50 -1 0 12 0.0000 4 180 675 2115 3735 depth=1\001
+-6
 6 9765 5400 11340 6840
 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
 	 9765 5670 11205 5670
 2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
 	 11205 6840 11205 5400 9765 5400 9765 6840 11205 6840
-4 0 0 50 -1 0 14 0.0000 4 165 465 9855 5625 Core\001
+4 0 0 50 -1 0 14 0.0000 4 165 600 9855 5625 Cache\001
 4 0 0 50 -1 0 12 0.0000 4 180 630 9855 6750 .arity=1\001
 4 0 0 50 -1 0 12 0.0000 4 180 810 9855 5850 .depth = 2\001
 4 0 0 50 -1 0 12 0.0000 4 180 1485 9855 6075 .logical_index = 3\001
 4 0 0 50 -1 0 12 0.0000 4 165 1095 9855 6300 .os_index = 1\001
 4 0 0 50 -1 0 12 0.0000 4 180 1290 9855 6525 .sibling_rank=1\001
 -6
-6 4500 3375 8505 3915
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 4500 3600 8415 3600
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 8415 3690 4500 3690
-4 0 0 50 -1 0 12 0.0000 4 180 1035 4545 3510 next_sibling\001
-4 0 0 50 -1 0 12 0.0000 4 180 1035 7470 3870 prev_sibling\001
--6
 6 8505 5625 9855 6795
 6 8505 5625 9855 6165
 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
@@ -103,56 +125,11 @@
 4 0 0 50 -1 0 12 0.0000 4 165 1005 5850 6390 next_cousin\001
 4 0 0 50 -1 0 12 0.0000 4 180 1005 6075 6750 prev_cousin\001
 -6
-6 3105 8595 4410 9135
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 3105 8820 4365 8820
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 4365 8910 3105 8910
-4 0 0 50 -1 0 12 0.0000 4 165 1005 3150 8730 next_cousin\001
-4 0 0 50 -1 0 12 0.0000 4 180 1005 3375 9090 prev_cousin\001
+6 765 5490 1440 6120
+4 0 4 50 -1 0 12 0.0000 4 135 510 765 5625 Cache\001
+4 0 4 50 -1 0 12 0.0000 4 135 405 765 5850 level\001
+4 0 4 50 -1 0 12 0.0000 4 180 675 765 6075 depth=2\001
 -6
-6 5805 8595 7110 9135
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 5805 8820 7065 8820
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 7065 8910 5805 8910
-4 0 0 50 -1 0 12 0.0000 4 165 1005 5850 8730 next_cousin\001
-4 0 0 50 -1 0 12 0.0000 4 180 1005 6075 9090 prev_cousin\001
--6
-6 8505 8595 9810 9135
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 8505 8820 9765 8820
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 9765 8910 8505 8910
-4 0 0 50 -1 0 12 0.0000 4 165 1005 8550 8730 next_cousin\001
-4 0 0 50 -1 0 12 0.0000 4 180 1005 8775 9090 prev_cousin\001
--6
-6 7290 2250 8640 2610
-4 2 0 50 -1 0 12 0.0000 4 165 810 8640 2565 last_child\001
-4 2 0 50 -1 0 12 0.0000 4 165 900 8190 2385 children[1]\001
--6
-6 2205 4590 3285 4950
-4 0 0 50 -1 0 12 0.0000 4 165 900 2385 4725 children[0]\001
-4 0 0 50 -1 0 12 0.0000 4 165 840 2205 4905 first_child\001
--6
-6 4185 4590 5265 4950
-4 0 0 50 -1 0 12 0.0000 4 165 900 4185 4725 children[1]\001
-4 0 0 50 -1 0 12 0.0000 4 165 810 4455 4905 last_child\001
--6
-6 7605 4590 8685 4950
-4 0 0 50 -1 0 12 0.0000 4 165 900 7785 4725 children[0]\001
-4 0 0 50 -1 0 12 0.0000 4 165 840 7605 4905 first_child\001
--6
-6 9585 4590 10665 4950
-4 0 0 50 -1 0 12 0.0000 4 165 900 9585 4725 children[1]\001
-4 0 0 50 -1 0 12 0.0000 4 165 810 9855 4905 last_child\001
--6
 6 4230 6930 5130 7560
 4 0 0 50 -1 0 12 0.0000 4 165 840 4230 7290 first_child\001
 4 0 0 50 -1 0 12 0.0000 4 165 810 4230 7515 last_child\001
@@ -168,57 +145,109 @@
 4 0 0 50 -1 0 12 0.0000 4 165 810 1530 7515 last_child\001
 4 0 0 50 -1 0 12 0.0000 4 165 900 1530 7065 children[0]\001
 -6
-6 4275 2250 5625 2610
-4 0 0 50 -1 0 12 0.0000 4 165 840 4275 2565 first_child\001
-4 0 0 50 -1 0 12 0.0000 4 165 900 4725 2385 children[0]\001
+6 9630 6930 10530 7560
+4 0 0 50 -1 0 12 0.0000 4 165 840 9630 7290 first_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 810 9630 7515 last_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 900 9630 7065 children[0]\001
 -6
-6 4770 810 5445 1440
-4 0 4 50 -1 0 12 0.0000 4 180 585 4770 945 System\001
-4 0 4 50 -1 0 12 0.0000 4 135 405 4770 1170 level\001
-4 0 4 50 -1 0 12 0.0000 4 180 675 4770 1395 depth=0\001
+6 9765 7740 11340 9180
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 9765 8010 11205 8010
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 11205 9180 11205 7740 9765 7740 9765 9180 11205 9180
+4 0 0 50 -1 0 14 0.0000 4 165 465 9855 7965 Core\001
+4 0 0 50 -1 0 12 0.0000 4 180 630 9855 9090 .arity=1\001
+4 0 0 50 -1 0 12 0.0000 4 180 810 9855 8190 .depth = 3\001
+4 0 0 50 -1 0 12 0.0000 4 180 1485 9855 8415 .logical_index = 3\001
+4 0 0 50 -1 0 12 0.0000 4 165 1095 9855 8640 .os_index = 1\001
+4 0 0 50 -1 0 12 0.0000 4 180 1290 9855 8865 .sibling_rank=0\001
 -6
-6 2115 3150 2790 3780
-4 0 4 50 -1 0 12 0.0000 4 135 555 2115 3285 Socket\001
-4 0 4 50 -1 0 12 0.0000 4 135 405 2115 3510 level\001
-4 0 4 50 -1 0 12 0.0000 4 180 675 2115 3735 depth=1\001
+6 5805 8595 7110 9135
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 5805 8820 7065 8820
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 7065 8910 5805 8910
+4 0 0 50 -1 0 12 0.0000 4 165 1005 5850 8730 next_cousin\001
+4 0 0 50 -1 0 12 0.0000 4 180 1005 6075 9090 prev_cousin\001
 -6
-6 765 5490 1440 6120
-4 0 4 50 -1 0 12 0.0000 4 135 390 765 5625 Core\001
-4 0 4 50 -1 0 12 0.0000 4 135 405 765 5850 level\001
-4 0 4 50 -1 0 12 0.0000 4 180 675 765 6075 depth=2\001
--6
 6 765 7830 1440 8460
-4 0 4 50 -1 0 12 0.0000 4 135 360 765 7965 Proc\001
+4 0 4 50 -1 0 12 0.0000 4 135 390 765 7965 Core\001
 4 0 4 50 -1 0 12 0.0000 4 135 405 765 8190 level\001
 4 0 4 50 -1 0 12 0.0000 4 180 675 765 8415 depth=3\001
 -6
-6 9630 6930 10530 7560
-4 0 0 50 -1 0 12 0.0000 4 165 840 9630 7290 first_child\001
-4 0 0 50 -1 0 12 0.0000 4 165 810 9630 7515 last_child\001
-4 0 0 50 -1 0 12 0.0000 4 165 900 9630 7065 children[0]\001
+6 4230 9270 5130 9900
+4 0 0 50 -1 0 12 0.0000 4 165 840 4230 9630 first_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 810 4230 9855 last_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 900 4230 9405 children[0]\001
 -6
+6 6930 9270 7830 9900
+4 0 0 50 -1 0 12 0.0000 4 165 840 6930 9630 first_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 810 6930 9855 last_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 900 6930 9405 children[0]\001
+-6
+6 1530 9270 2430 9900
+4 0 0 50 -1 0 12 0.0000 4 165 840 1530 9630 first_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 810 1530 9855 last_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 900 1530 9405 children[0]\001
+-6
+6 9630 9270 10530 9900
+4 0 0 50 -1 0 12 0.0000 4 165 840 9630 9630 first_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 810 9630 9855 last_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 900 9630 9405 children[0]\001
+-6
+6 9765 10080 11340 11520
 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
-	 5715 990 7155 990
+	 9765 10350 11205 10350
 2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
-	 7155 2160 7155 720 5715 720 5715 2160 7155 2160
+	 11205 11520 11205 10080 9765 10080 9765 11520 11205 11520
+4 0 0 50 -1 0 12 0.0000 4 165 1095 9855 10980 .os_index = 3\001
+4 0 0 50 -1 0 14 0.0000 4 165 435 9855 10305 PU\001
+4 0 0 50 -1 0 12 0.0000 4 180 1290 9855 11205 .sibling_rank=0\001
+4 0 0 50 -1 0 12 0.0000 4 180 630 9855 11430 .arity=0\001
+4 0 0 50 -1 0 12 0.0000 4 180 810 9855 10530 .depth = 4\001
+4 0 0 50 -1 0 12 0.0000 4 180 1485 9855 10755 .logical_index = 3\001
+-6
+6 3105 10935 4410 11475
 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
 	1 1 1.00 60.00 120.00
-	 2340 6840 2340 7740
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 1 2
+	 3105 11160 4365 11160
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
 	1 1 1.00 60.00 120.00
-	 2430 6840 2430 7740
+	 4365 11250 3105 11250
+4 0 0 50 -1 0 12 0.0000 4 165 1005 3150 11070 next_cousin\001
+4 0 0 50 -1 0 12 0.0000 4 180 1005 3375 11430 prev_cousin\001
+-6
+6 5805 10935 7110 11475
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 5805 11160 7065 11160
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 7065 11250 5805 11250
+4 0 0 50 -1 0 12 0.0000 4 165 1005 5850 11070 next_cousin\001
+4 0 0 50 -1 0 12 0.0000 4 180 1005 6075 11430 prev_cousin\001
+-6
+6 8505 10935 9810 11475
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 8505 11160 9765 11160
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 9765 11250 8505 11250
+4 0 0 50 -1 0 12 0.0000 4 165 1005 8550 11070 next_cousin\001
+4 0 0 50 -1 0 12 0.0000 4 180 1005 8775 11430 prev_cousin\001
+-6
+6 765 10170 1440 10800
+4 0 4 50 -1 0 12 0.0000 4 135 360 765 10305 PU\001
+4 0 4 50 -1 0 12 0.0000 4 135 405 765 10530 level\001
+4 0 4 50 -1 0 12 0.0000 4 180 675 765 10755 depth=4\001
+-6
 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
-	 4365 8010 5805 8010
+	 5715 990 7155 990
 2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
-	 5805 9180 5805 7740 4365 7740 4365 9180 5805 9180
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
-	 7065 8010 8505 8010
-2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
-	 8505 9180 8505 7740 7065 7740 7065 9180 8505 9180
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
-	 1665 8010 3105 8010
-2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
-	 3105 9180 3105 7740 1665 7740 1665 9180 3105 9180
+	 7155 2160 7155 720 5715 720 5715 2160 7155 2160
 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
 	1 1 1.00 60.00 120.00
 	 9231 4492 10581 5392
@@ -235,24 +264,12 @@
 	 8415 3330 9855 3330
 2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
 	 9855 4500 9855 3060 8415 3060 8415 4500 9855 4500
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
-	 4365 5670 5805 5670
-2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
-	 5805 6840 5805 5400 4365 5400 4365 6840 5805 6840
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
-	 7065 5670 8505 5670
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
-	 1665 5670 3105 5670
-2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
-	 3105 6840 3105 5400 1665 5400 1665 6840 3105 6840
 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 1 2
 	1 1 1.00 60.00 120.00
 	 6435 2160 3735 3060
 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
 	1 1 1.00 60.00 120.00
 	 6210 2160 3510 3060
-2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
-	 8505 6840 8505 5400 7065 5400 7065 6840 8505 6840
 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
 	1 1 1.00 60.00 120.00
 	 4500 4050 8415 4050
@@ -277,8 +294,32 @@
 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 1 2
 	1 1 1.00 60.00 120.00
 	 6435 2160 9135 3060
+2 2 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 10080 3015 2835 3015 2835 4545 10080 4545 10080 3015
+2 2 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 7380 675 5490 675 5490 2205 7380 2205 7380 675
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4365 5670 5805 5670
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 5805 6840 5805 5400 4365 5400 4365 6840 5805 6840
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 7065 5670 8505 5670
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1665 5670 3105 5670
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 3105 6840 3105 5400 1665 5400 1665 6840 3105 6840
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 8505 6840 8505 5400 7065 5400 7065 6840 8505 6840
+2 2 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 11385 5355 1485 5355 1485 6885 11385 6885 11385 5355
 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
 	1 1 1.00 60.00 120.00
+	 2340 6840 2340 7740
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 1 2
+	1 1 1.00 60.00 120.00
+	 2430 6840 2430 7740
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
 	 5040 6840 5040 7740
 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 1 2
 	1 1 1.00 60.00 120.00
@@ -295,52 +336,94 @@
 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 1 2
 	1 1 1.00 60.00 120.00
 	 10530 6840 10530 7740
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4365 8010 5805 8010
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 5805 9180 5805 7740 4365 7740 4365 9180 5805 9180
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 7065 8010 8505 8010
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1665 8010 3105 8010
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 3105 9180 3105 7740 1665 7740 1665 9180 3105 9180
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 8505 9180 8505 7740 7065 7740 7065 9180 8505 9180
 2 2 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
-	 10080 3015 2835 3015 2835 4545 10080 4545 10080 3015
-2 2 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
-	 7380 675 5490 675 5490 2205 7380 2205 7380 675
-2 2 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
 	 11385 7695 1485 7695 1485 9225 11385 9225 11385 7695
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2340 9180 2340 10080
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 1 2
+	1 1 1.00 60.00 120.00
+	 2430 9180 2430 10080
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 5040 9180 5040 10080
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 1 2
+	1 1 1.00 60.00 120.00
+	 5130 9180 5130 10080
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 7740 9180 7740 10080
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 1 2
+	1 1 1.00 60.00 120.00
+	 7830 9180 7830 10080
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 10440 9180 10440 10080
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 1 2
+	1 1 1.00 60.00 120.00
+	 10530 9180 10530 10080
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4365 10350 5805 10350
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 5805 11520 5805 10080 4365 10080 4365 11520 5805 11520
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 7065 10350 8505 10350
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 8505 11520 8505 10080 7065 10080 7065 11520 8505 11520
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1665 10350 3105 10350
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 3105 11520 3105 10080 1665 10080 1665 11520 3105 11520
 2 2 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
-	 11385 5355 1485 5355 1485 6885 11385 6885 11385 5355
-4 2 0 50 -1 0 12 0.0000 4 135 465 8415 2970 father\001
+	 11385 10035 1485 10035 1485 11565 11385 11565 11385 10035
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 3105 8820 4365 8820
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4365 8910 3105 8910
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 8505 8820 9765 8820
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 9765 8910 8505 8910
+4 2 0 50 -1 0 12 0.0000 4 165 510 8415 2970 parent\001
 4 0 0 50 -1 0 12 0.0000 4 180 810 5805 1170 .depth = 0\001
-4 0 0 50 -1 0 14 0.0000 4 210 705 5805 945 System\001
+4 0 0 50 -1 0 14 0.0000 4 165 825 5805 945 Machine\001
 4 0 0 50 -1 0 12 0.0000 4 165 1155 5805 1620 .os_index = -1\001
 4 0 0 50 -1 0 12 0.0000 4 180 1290 5805 1845 .sibling_rank=0\001
 4 0 0 50 -1 0 12 0.0000 4 180 1485 5805 1395 .logical_index = 0\001
 4 0 0 50 -1 0 12 0.0000 4 180 630 5805 2070 .arity=2\001
-4 0 0 50 -1 0 12 0.0000 4 135 465 2475 7650 father\001
-4 0 0 50 -1 0 12 0.0000 4 165 1095 1755 8640 .os_index = 0\001
-4 0 0 50 -1 0 12 0.0000 4 165 1095 4455 8640 .os_index = 2\001
-4 0 0 50 -1 0 12 0.0000 4 165 1095 7155 8640 .os_index = 1\001
-4 0 0 50 -1 0 12 0.0000 4 180 1290 1755 8865 .sibling_rank=0\001
-4 0 0 50 -1 0 14 0.0000 4 165 435 1755 7965 Proc\001
-4 0 0 50 -1 0 14 0.0000 4 165 435 4455 7965 Proc\001
-4 0 0 50 -1 0 14 0.0000 4 165 435 7155 7965 Proc\001
-4 0 0 50 -1 0 12 0.0000 4 180 1290 4455 8865 .sibling_rank=0\001
-4 0 0 50 -1 0 12 0.0000 4 180 1290 7155 8865 .sibling_rank=0\001
-4 0 0 50 -1 0 12 0.0000 4 180 630 1755 9090 .arity=0\001
-4 0 0 50 -1 0 12 0.0000 4 180 630 4455 9090 .arity=0\001
-4 0 0 50 -1 0 12 0.0000 4 180 630 7155 9090 .arity=0\001
-4 0 0 50 -1 0 12 0.0000 4 180 810 7155 8190 .depth = 3\001
-4 0 0 50 -1 0 12 0.0000 4 180 1485 7155 8415 .logical_index = 2\001
-4 0 0 50 -1 0 12 0.0000 4 180 810 4455 8190 .depth = 3\001
-4 0 0 50 -1 0 12 0.0000 4 180 1485 4455 8415 .logical_index = 1\001
-4 0 0 50 -1 0 12 0.0000 4 180 810 1755 8190 .depth = 3\001
-4 0 0 50 -1 0 12 0.0000 4 180 1485 1755 8415 .logical_index = 0\001
-4 0 0 50 -1 0 12 0.0000 4 135 465 8145 5310 father\001
-4 0 0 50 -1 0 12 0.0000 4 135 465 9675 5310 father\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 8145 5310 parent\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 9675 5310 parent\001
 4 0 0 50 -1 0 12 0.0000 4 180 630 8505 4410 .arity=2\001
 4 0 0 50 -1 0 12 0.0000 4 180 1485 8505 3735 .logical_index = 1\001
 4 0 0 50 -1 0 12 0.0000 4 165 1095 8505 3960 .os_index = 1\001
 4 0 0 50 -1 0 12 0.0000 4 180 810 8505 3510 .depth = 1\001
 4 0 0 50 -1 0 14 0.0000 4 165 645 8505 3285 Socket\001
 4 0 0 50 -1 0 12 0.0000 4 180 1290 8505 4185 .sibling_rank=1\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 4455 2970 parent\001
+4 0 0 50 -1 0 12 0.0000 4 165 1005 4545 3960 next_cousin\001
+4 0 0 50 -1 0 12 0.0000 4 180 1005 7470 4320 prev_cousin\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 2745 5310 parent\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 4275 5310 parent\001
 4 0 0 50 -1 0 12 0.0000 4 180 630 7155 6750 .arity=1\001
-4 0 0 50 -1 0 14 0.0000 4 165 465 1755 5625 Core\001
-4 0 0 50 -1 0 14 0.0000 4 165 465 4455 5625 Core\001
-4 0 0 50 -1 0 14 0.0000 4 165 465 7155 5625 Core\001
+4 0 0 50 -1 0 14 0.0000 4 165 600 1755 5625 Cache\001
+4 0 0 50 -1 0 14 0.0000 4 165 600 4455 5625 Cache\001
+4 0 0 50 -1 0 14 0.0000 4 165 600 7155 5625 Cache\001
 4 0 0 50 -1 0 12 0.0000 4 180 1485 1755 6075 .logical_index = 0\001
 4 0 0 50 -1 0 12 0.0000 4 180 1485 4455 6075 .logical_index = 1\001
 4 0 0 50 -1 0 12 0.0000 4 165 1095 1755 6300 .os_index = 0\001
@@ -355,11 +438,51 @@
 4 0 0 50 -1 0 12 0.0000 4 180 1290 4455 6525 .sibling_rank=1\001
 4 0 0 50 -1 0 12 0.0000 4 165 1095 7155 6300 .os_index = 0\001
 4 0 0 50 -1 0 12 0.0000 4 180 1290 7155 6525 .sibling_rank=0\001
-4 0 0 50 -1 0 12 0.0000 4 135 465 4455 2970 father\001
-4 0 0 50 -1 0 12 0.0000 4 165 1005 4545 3960 next_cousin\001
-4 0 0 50 -1 0 12 0.0000 4 180 1005 7470 4320 prev_cousin\001
-4 0 0 50 -1 0 12 0.0000 4 135 465 2745 5310 father\001
-4 0 0 50 -1 0 12 0.0000 4 135 465 4275 5310 father\001
-4 0 0 50 -1 0 12 0.0000 4 135 465 5175 7650 father\001
-4 0 0 50 -1 0 12 0.0000 4 135 465 7875 7650 father\001
-4 0 0 50 -1 0 12 0.0000 4 135 465 10575 7650 father\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 2475 7650 parent\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 5175 7650 parent\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 7875 7650 parent\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 10575 7650 parent\001
+4 0 0 50 -1 0 12 0.0000 4 180 630 7155 9090 .arity=1\001
+4 0 0 50 -1 0 14 0.0000 4 165 465 1755 7965 Core\001
+4 0 0 50 -1 0 14 0.0000 4 165 465 4455 7965 Core\001
+4 0 0 50 -1 0 14 0.0000 4 165 465 7155 7965 Core\001
+4 0 0 50 -1 0 12 0.0000 4 180 1485 1755 8415 .logical_index = 0\001
+4 0 0 50 -1 0 12 0.0000 4 180 1485 4455 8415 .logical_index = 1\001
+4 0 0 50 -1 0 12 0.0000 4 165 1095 1755 8640 .os_index = 0\001
+4 0 0 50 -1 0 12 0.0000 4 180 1290 1755 8865 .sibling_rank=0\001
+4 0 0 50 -1 0 12 0.0000 4 180 630 1755 9090 .arity=1\001
+4 0 0 50 -1 0 12 0.0000 4 180 630 4455 9090 .arity=1\001
+4 0 0 50 -1 0 12 0.0000 4 180 810 1755 8190 .depth = 3\001
+4 0 0 50 -1 0 12 0.0000 4 180 810 4455 8190 .depth = 3\001
+4 0 0 50 -1 0 12 0.0000 4 180 810 7155 8190 .depth = 3\001
+4 0 0 50 -1 0 12 0.0000 4 180 1485 7155 8415 .logical_index = 2\001
+4 0 0 50 -1 0 12 0.0000 4 165 1095 4455 8640 .os_index = 1\001
+4 0 0 50 -1 0 12 0.0000 4 180 1290 4455 8865 .sibling_rank=0\001
+4 0 0 50 -1 0 12 0.0000 4 165 1095 7155 8640 .os_index = 0\001
+4 0 0 50 -1 0 12 0.0000 4 180 1290 7155 8865 .sibling_rank=0\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 2475 9990 parent\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 5175 9990 parent\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 7875 9990 parent\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 10575 9990 parent\001
+4 0 0 50 -1 0 12 0.0000 4 165 1095 1755 10980 .os_index = 0\001
+4 0 0 50 -1 0 12 0.0000 4 165 1095 4455 10980 .os_index = 2\001
+4 0 0 50 -1 0 12 0.0000 4 165 1095 7155 10980 .os_index = 1\001
+4 0 0 50 -1 0 12 0.0000 4 180 1290 1755 11205 .sibling_rank=0\001
+4 0 0 50 -1 0 14 0.0000 4 165 435 1755 10305 PU\001
+4 0 0 50 -1 0 14 0.0000 4 165 435 4455 10305 PU\001
+4 0 0 50 -1 0 14 0.0000 4 165 435 7155 10305 PU\001
+4 0 0 50 -1 0 12 0.0000 4 180 1290 4455 11205 .sibling_rank=0\001
+4 0 0 50 -1 0 12 0.0000 4 180 1290 7155 11205 .sibling_rank=0\001
+4 0 0 50 -1 0 12 0.0000 4 180 630 1755 11430 .arity=0\001
+4 0 0 50 -1 0 12 0.0000 4 180 630 4455 11430 .arity=0\001
+4 0 0 50 -1 0 12 0.0000 4 180 630 7155 11430 .arity=0\001
+4 0 0 50 -1 0 12 0.0000 4 180 810 7155 10530 .depth = 4\001
+4 0 0 50 -1 0 12 0.0000 4 180 1485 7155 10755 .logical_index = 2\001
+4 0 0 50 -1 0 12 0.0000 4 180 810 4455 10530 .depth = 4\001
+4 0 0 50 -1 0 12 0.0000 4 180 1485 4455 10755 .logical_index = 1\001
+4 0 0 50 -1 0 12 0.0000 4 180 810 1755 10530 .depth = 4\001
+4 0 0 50 -1 0 12 0.0000 4 180 1485 1755 10755 .logical_index = 0\001
+4 0 0 50 -1 0 12 0.0000 4 165 1005 3150 8730 next_cousin\001
+4 0 0 50 -1 0 12 0.0000 4 180 1005 3375 9090 prev_cousin\001
+4 0 0 50 -1 0 12 0.0000 4 165 1005 8550 8730 next_cousin\001
+4 0 0 50 -1 0 12 0.0000 4 180 1005 8775 9090 prev_cousin\001

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/images/dudley.png
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/images/dudley.png	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/images/dudley.png	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,97 +1,149 @@
 ‰PNG
 
    
-IHDR  Ê     Q‰î¿   bKGD ÿ ÿ ÿ ½§“   tIMEÙ.R…+    IDATxœíÝ{tešÇñ_‡@p`cÀD1C£‰BÔƒàG
-·eΐ‘…•p×…uÝ„„QX¹Íá⠁€:ÈnVØ ºˆˆ8ÜÆì
-ƒ†$¸!µxè©@®ê®záû9ÇcS]ýÖÛïó<zº«_bb¢•œœ,     nt………
-OIIQff¦Ûs    ÀuYYY
-s{     x	2     64Ê     ØÐ(    `C£    €
-2     64Ê     ØÐ(    `C£    €
-2     6×E£\^^®´´4WŽ––¦òòrWŽ
-    p^½å>ø@Ý»wW“&MÔ¹sg­^½: ƒú|¾€W¼¼<Ý{uƿòßÕǭ꾊Š
-eeeéÎ;ïT“&MÔ¥K½ùæ›×<.,,LÑÑÑZµj•ÿ¾ž={*//ÏÑç    pO½åáÇkòäÉ*++Óû￯÷ß?Xóª—ÜÜ\¥¤¤øÿmY–,˪rß+÷ÙïÏÊÊÒ¦M›´qãF?^6lÐöíÛ¯y\yy¹V¬X¡±cÇú·§¤¤(77×Ù'    pM½åýèG:yò¤öï߯víÚé­·Þ’$íÞ½[?ùÉOTQQ!釦²cÇŽúãÿ¨—^zI­Zµºæ“\ûíÇëg?û™ÿ“ê]»vù÷ù×ýWEEE©uëÖÊËËÓôéÓ¥ýèGþOv÷îÝ«ØØØ:=‡æÍ›+22Rýû÷WQQ‘$iñâÅZ²d‰ºuë¦Æ«S§NZ±bEµc´jÕÊ;66Vûöí«Ç*    ¼¬^ò†
-ôßÿýß7nœÚµkç¿ôúg?û™ºvíªõë×K’>úè#uíÚU;wVNNŽæÌ™£‹/Vú$×~{Ĉ5j”þò—¿hîܹJOO÷³Y³f:uê”V­Z¥áÇëöÛoשS§”——§‰'J’JJJYëü-ËRii©Nœ8¡®]»jðàÁ’¤S§N©S§N’j¾l»Q£FzôÑGõÚk¯ù·GFFª¤¤¤>Ë    ð0ß´iÓ¬ÌÌÌz?ðÀêÛ·¯Š‹‹%IGŽÑСCµoß>5JÇWrr²Ö®]«yóæéË/¿Ô?þã?ê•W^‘Ïç«tésãÆ+ýB,ŸÏ§ŠŠ
-ù|>]¾|YaaaþíWÿÛ²,µnÝZGŽQóæÍ+?¹«ŽcwáÂ5oÞ\ßÿ½¢££µmÛ6³|õc¯Ü¶,K;wîTzzºŽ;&I:{ö¬ºté¢Ó§O×{
-    Þ’••Uÿï(=zT—.]ÒáÇuùòeÿ}±±±JLLÔºuëô§?ýIÉÉÉ’~ø­Ð»víÒ–-[4gÎIR“&MtêÔ)ÿcãââ´bÅ
-?^–eù/á–äoŠ«û·$%$$èÈ‘#u~¥¥¥ÊÌÌT\\œ$)==]£GÖ±cÇtùòe\•°°0ÿ›’tôèQ%&&ÖùØ     o¯ÏΏ=ö˜ ãǏ+&&FK—.­tÿÌ™3ÕµkWÍ›7Ï¿íÊ%Ì-[¶Ô‹/¾(I;v¬:vì¨.Ȳ,­^½ZcÆŒÑèÑ£uñâEIªö“àª:TJHH¨tLûm˲ü·›6mªûî»ÏÿëéÓ§ëå—_VJJоùæÅÆÆVúÍÖöqÚ´i£ùóçû·ïرÃ	7    À|_z]•ŠŠ
-
->\o¾ù¦ÂÃëÕƒ7Hyy¹†
-¦µk׆ì˜W¤¥¥é­·Þ
-éó    GVVVý>Q®‰ÏçÓßýÝßiݺu!oÃÃÃ]i’%¹v\    @p8ÖÑÖçRi     ¼ª^¿Ì    €ë2     64Ê     ØÐ(    `C£    €
-2     6uúóP………*((ö\ ÔSbb¢’““k܇ú¼‰úÌEýæªKýJul”wìØ¡¼¼<õêÕ«ÁàŒýû÷ëìÙ³µ:õxõ˜‹úÌU×ú•êØ(KR¯^½4eÊ”M€s-ZTç}©_À[¨_À\Ô/`®úÔ/ßQ    À†F     e     lh”    °¡Q    À†F     e     lh”    °¡Q    À†F     O7Ê111nO@€¨_À\Ô/`.êpFPå‚‚=ú裊UŸ>}ô‡?ü!‡©¤º…©S§ê‹/¾Pyy¹èß~úôi=õÔSêܹ³žzê)>}:èsL`BýÆÄÄøÿð7&Ôï|àŸãc=¦]»v}Ž€	L¨ß7ªoß¾ŠU¿~ý´sçΠÏpKPå	&hÔ¨Q:xð –-[¦íÛ·ã0ubY–$éÀºûî»ýÛ333• Ï>ûL			ÊÌÌtkŠ€§˜P¿'NœÐ‰'ÜšàY&Ôï†
-4oÞ<<xP#FŒÐsÏ=çÖO1¡~wìØ¡•+Wê³Ï>Ó¸qã4~üx·¦]På[o½Uß|ó:¤Ö­[kîܹþû>ÿüsõë×O:uR¿~ýtèÐ!IÒ¡C‡4`À uêÔéšw·víÚ¥Ÿþô§ÊËËÓ±cÇôä“Oúßmûä“OüûÛ?azóÍ7£õë׫ÿþzê©§´jÕ*ÿý}ô‘FŽ©ˆˆ9R}ôQ0–0Ž	õ j&Ôï¿ýÛ¿)66VJJJÒ-·ÜŠ¥<Ï„ú3gŽÚµk§°°0ù|>µmÛ6K¸"(òoû[:uJ³fÍRïÞ½+]:2yòd¥¥¥éÀJKKÓäÉ“ýÛŸxâ	:t¨Ò'Eï¾û®fΜ©åË—ëé§ŸÖĉ5xð`}þùçš1c†¦Nêßßþ)Óˆ#ôé§ŸªwïÞ:qâ„’’’ôñÇûï/--U‹-$IQQQ*++ÆR Æ1¡~Tͤú-..Ö˜1c4cÆŒ`/`Sê7&&F]ºtÑ‹/¾¨W_}5K¸Â7mÚ4«¶Ë޳²²
 TTT¤)S¦Ôû ‡ÖðáÃõÉ'ŸH’:u꤃ªiÓ¦ºpá‚î¾ûn=zT:uÒgŸ}¦›nºÉÿؘ˜…‡‡kÉ’%JIIñ?þòåË{>ŸŽ?®˜˜˜kЏ*³fÍÒˆ#Ô³gOåçç«eË–:sæŒyäÿ,Z´Haaaµ~màz¬_û~4Ï0э^¿гÏ>«	&Túþ#`‚½~%éâŋڶm›rrr´cÇŽz??À-õ©ß |¢œ‘‘¡¯¾úJßÿ½Ž;¦ŠŠ
-ÿ}?þñõöÛoëâÅ‹Z¿~½:uê$é‡^³f¾ÿþûJc-]ºT“'OV~~¾$©k×®ÊÉÉñ¿svüøqIRãÆõÍ7ßøwâÄ	¥§§kõêÕzï½÷ôä“Oêĉþ"¿ï¾û´lÙ2]ºtIË–-Ó}÷ÝŒ¥ ŒcBý¨š	õ»fÍýêW¿Ò«¯¾J“ؘP¿/¿ü²JJJdY–***táÂ… ®	ঠ4Ê=ô~õ«_©[·nš;wn¥Ž}öìÙúÝï~§îÝ»kõêÕÊÎΖ$eggkݺuêÚµk¥w³’““µråJ½ôÒKZ¾|¹~ó›ßèÝwßÕ=÷ÜSé;ÿ÷¯|°Òcÿë¿þKñññ*++ó_f}Å/¼ ½{÷ª{÷îÚ»w¯^|ñÅ`,`ê×þX~û5ð7&Ôï‹/¾¨ÿýßÿÕ/~ñÿ8—.]
-æ² F0¡~»té¢~ýú)>>^¿ýío5oÞ¼`.	ઠ_z
- 8Bqé€à ~sQ¿€¹\¿ô     SÑ(    `C£    €
-2     64Ê     ØÐ(    `C£    €
-2     6áN¶ÿ~íÙ³ÇÉ!R||¼zõêÒcR¿€3¨_À\Ô/`.§ë×ÑFyÏž=Ú¹s§’““¸¡ª¬¬,ä?¨©_ á¨_À\Ô/`®`Ô¯£²$¥¤¤(33ÓéaFVV–ŠŠŠ\96õ4õ˜‹úÌŒúå;Ê     ØÐ(    `C£    €
-2     64Ê     ØÐ(    `C£    €
-2     64Ê     ØÐ(    `cT£\^^®´´4·§Q«´´4•——»=
-ÀS¨_À\Ô/`.ꌫ²Ïç«rûÚµkÕ¥K5iÒD=zôP~~¾$)//O÷Þ{ï5ûϘ1£ÒX'OžTRR’"""”””¤“'OJ’6mÚ¤Ž;*""B>ø þüç?K’***4kÖ,µk×Naaaþ±ìc>|X;wÖÂ…ý÷ù|>………)::Z«V­òïÛ³gOååå5di Ï£~sQ¿€¹¨_ 4<ù‰ò¦M›”ŸŸ¯ÒÒRMŸ>]C‡•$åææ*%%¥Ò¾{÷îÕòåË+m›4i’î¿ÿ~•––*))I“'O–$ýò—¿ÔüùóUVV¦I“&ù·gffjݺuÚ¼y³._¾,˲*÷á‡êñÇ×’%K4fÌÿv˲T^^®+VhìØ±þí)))ÊÍÍul= “P¿€¹¨_À\Ô/à¬p·'P••+WJ’.]º$ŸÏ§èèhI?ull¬¿.(==]«W¯Vrr²ûÖ­[õù矫iÓ¦ÊÈÈÐ]wÝ%é‡w¾¤¿½ÓµyófIÒÒ¥Kµxñbuë֭ʹ,X°@[¶lQ‡ªs«V­ü·cccµoß¾@ž:`<ê0õ˜‹úœåÉFYú[1FEEéƒ>$•””(22Ò¿Ï/¼ ôôt=ðÀ•[RRâ/¼–-[ê»ï¾“$-Y²D£GVqq±žyæÿö¯¿þZùùùzâ‰'tÛm·iþüùêß¿¿$éÙgŸÕ’%Kª,ò+slܸ±Ö¯_ïß©’’'–0õ˜‹úÌEýÎñä¥×Ò—eüõ¯Õ¢E‹ü—Ž´hÑBçΝóï3oÞ<edd\󝈨¨(
 K’Μ9£¨¨(IÒ AƒTTT¤¿þõ¯êׯŸÚµkçß¿OŸ>*))Ñ‚”žžî?ƶmÛ4~üø*/±,KÚ²e‹&L˜àß~îÜ9µhÑÂÉå ŒBýæ¢~sQ¿€s<Ù(?ÿüó*..öÒùóç%I			:räˆ¿ŠŠ
-Y–åÿNÄ•ÿ÷íÛWsçÎÕÅ‹õú믫OŸ>þÇX–¥Ã‡kÒ¤I5j”$)55URÕ¿!!!AÛ¶mÓ”)S´xñâ*çæa‘¤£G*11±!K ‹úÌEýæ¢~g¹~éõÕÅeY–î¾ûnõèÑC%%%êÞ½»Ö¬Y#I:t¨
+IHDR  Š  þ   //Æ   bKGD ÿ ÿ ÿ ½§“    IDATxœìÝ}TUuÞÿÿ×說Ó\êDdaŠŠ.ÅF&+éçØ%j^•:‚Ö|›qškïV$—W¢fé ˜¥Ý˜7#­©ó&Ml¤—Ìè\Þ"SjÈùýAœ 6rÀ½Ù瞏µXöÞçóùì}Þ~x}ö9Ç匎Ž   P§¸¸Xbbb”ššj÷X   àAÒÒÒäg÷    à™Š   0DP  €!‚"     `ˆ    CE   "(  ÀA   †Š   0dkPt8-ZÞÕÕÕŠ¿ævZ#>>^ÕÕÕ¶ô
+  `–E‡Ã¡ÜÜÜË–/_nJ°«Ïét^s¹¹¹ºûî»]¿;×O}555Z´h‘úôé#???×úšš¥¦¦êÇ?þ±:uê¤;î¸C¯¾új£öüüü¤
+6¸Ö
+<¸Ñq  ð6->£¸bÅ
+Wûæ›oôÚk¯™>(3dgg+&&Æõ»Óé4 ©©©ÊÉÉÑΝ;uåÊ×6iiizçwôöÛoëßÿþ·¶mÛ¦‚‚‚÷u:ª®®VVV–ž|òI×ò˜˜egg[³c   m¤ÅAqРAzë­·$I7nÔØ±cmSw¶íG?ú‘Þ~ûmIÒþýû5hÐ uèСÁY½ßÿþ÷êÚµ«ºwïî:cW·Þáp®ÿôÓOuÏ=÷¨S§NºýöÛõÁ4ÃîÝ»Öìþ¬Y³FË–-S¿~ýŒ+33SüãÕ¯_?uìØQaaaZ¿~}“íôìÙÓu;,,L}ôQ³}  x²ŧŸ~Z/¼ð‚œN§ÒÓÓõÄO4ÚÆétêÊ•+Ú¸q£ž~úiIÒüÇèÑGÕ¿ÿýïgöõÿ÷Ú°aƒæÏŸß¨-£õ>ú¨fÍš¥.(==]Ó§Oot¿3gÎ(   Ùý9qâ„òóóuÝu×)88XÛ¶m“$ýë_ÿRhh¨¤¦_¶v8ò÷÷ר±cµ|ùr×ò€€ >}ºÙ¾  <™cáÂ…ÎÔÔT÷6v8ät:õàƒªwïÞ:uê”rrr\Ë%饗^ÒòåËuòäIÕÔÔÈáp¨¦¦F;vÔùóçuÝu×5hïÊ•+òóókÐ~ýÖwìØ±Á›Eêú¨¯gÏž:räˆn¼ñFÃ}¨Ó£G½òÊ+5j”òóó5mÚ4}ùå—
 
 
-”Pã˜999JKKS³fÍ” µk×V:V›6môÌ3ÏhÚ´i’¤9sæhȐ!4h¢££¯ùåݺuSAARSSuöìYM:õšñæÏŸïßÇŽ<xp KƒúÌEýæ¢~àsµQ¾ú·ã]‘žž^éò+ž~úi
-6¬Ö±î¸ãíÞ½»ÎÇkÛ¶­
+RAA+,~ÿ¾u·N§Þÿ}MŸ>]Ÿ}ö™$éܹsêÛ·¯>ÿüs·Ž+  €§IKKkÝ»žçÍ›§ÿùŸÿÑSO=ÕhÝÂ…õÇ?þQUUUzë­·\Á*<<\k֬ѥK—l_›b´>""B¯¼òŠëìä÷C¢$
+2DGŽiv_âââ$5|¹[’¦OŸ®ÿüÏÿTYY™®\¹â
+M©¨¨pÝ.++Sddd³}  x²VÅ#FÈétê§?ýi£u)))š8q¢zõê¥}ûö¹–gee)++K?øÁ®ù]ÒúÓŸôÚk¯é¦›n2|IX’&Ož¬¢¢"×ïõ·«{Ù²eZºt©ôôÓOkݺu’¤ÿ÷ÿþŸ†®{ï½W]ºtÑ< ?ýéO
+ú¨{×sBB‚222\ËwíÚ¥„„„kÚG   »µè¥goòÍ7ßhÊ”)ÊÉÉió¾ãããµqãFuèСÍû  0CZZš|6ÉtìØÑ–(ɶ~  ÌÄWø  ÀA   †Š   0DP  €!‚"     `ˆ    Cn}Žbqqqƒo9 _¥èèè«nÃüÀ¹3ÿInÅ]»v)77WC‡½æ€'Ø¿¿Î;×ìDÉüÀ׸;ÿInEI:t¨RRR®i` à)V­Zåö¶Ì |IKæ?®Q  €!‚"     `ˆ    CE   "(  ÀA   †Š   0DP  €!‚"   ytP		±{ `æ? žÀ’ XTT¤1cÆ(,,L#GŽÔ[o½eE7
+\ˤº`Á}ú駪®®ÖÃ?ìZþùçŸkâĉºýöÛ5qâD}þùçf€ó•ù/$$Äõ ý²$(Λ7O3gÎÔ'Ÿ|¢¬¬,ZэiœN§üüü´oß>
+0Àµ<55U‘‘‘:xð "##•ššjã(x_™ÿŽ;¦cÇŽÙ82 žÀ’ ØµkWUTT¨´´T=zôPzzºkÝ¡C‡4vìX…††jìØ±*--•$•––êþûïWhhh£g°|ð†¢ÜÜ\}öÙgš0a‚ëÙúÞ½{]Û7õì7$$DK–,Qxx¸bccõñÇK’²²²¢×_]cÆŒÑäÉ“õÊ+¯¸Úøë_ÿªÄÄDuîÜY‰‰‰úë_ÿjÅáàC|eþ É¢ ¸víZ8qBÏ?ÿ¼†
+¦7Þxõ.99Yñññ:pà€âã㕜œìZþÐC©´´´Á³Ø7ß|S¿ýíoµnÝ:Mš4IóçÏWBB‚:¤çž{N,pmµgÀ½{÷Öž={ô裏ê™gž‘$%&&jÿþýºçž{tìØ1ÝsÏ=Ú»w¯«óçÏ«[·n’¤ÀÀ@UVVš° ø_™ÿ @’:XÑèücýþ÷¿—$9rD			z衇$IŸ}ö™âããÕ¥KMœ8Qÿõ_ÿ%I
 *++ÓäɓթS§m-X°@«W¯Vxx¸¤ÚgÞÉÉÉ®	Öáp¸5¦	&¨K—.š4i’«ÏúÏœën<X‹-ÒÔ©Suã7êÌ™3êÞ½»Îž=«n¸¡µ‡@;á+ó HQœ;w®Ž?®Ë—/ëïÿ»jjj\ë~ò“ŸhË–-úú믵yóf…††J’´iÓ&]¾|¹A[kÖ¬Qrr²vîÜ)IºóÎ;µtéR×3ï£GJ’:tè /¿ü²É1mÙ²E/^Ô–-[tÛm·Iª}ž˜˜¨ììl½ýöÛŠ×±cÇ\“äOúSeeeéÒ¥KÊÊÊÒOúSó Ÿä+ó HÅØØXMŸ>]áááJOOoð&Å‹ëµ×^SÿþýµiÓ&-Y²Äµ|óæÍºãŽ;<ÓŽŽÖúõëõ»ßýNëÖ­ÓK/½¤7ß|Sƒ
+jpMÎ#<¢˜˜˜&¯¯9yò¤¬¬¬¬ãÙ·oŸ
+¤óçÏ«k×®
+îóÌ3Ïh÷îݺ뮻´{÷n=û쳦# ¾ÉWæ¿úíóîg ýr,\¸ÐÙÜ»yÓÒÒT^^®”””6–¹BBB¸î@«V­’ŸŸ_³ŸfÀüÀ×´dþóèÜ  €}ÚEPäÙ4€öŠùÀµhA   -GP  €!‚"     `ˆ    CE   2õ»ž÷ï߯’’3›€8p †Ú¦}2ÿðfϦŒ’½ÿþûŠŽŽ6³Y p[qq±*++Û<(2ÿ°›óŸ©AQ’bbbšýJ °JÝWîفù€¬˜ÿ¸F   †Š   0DP  €!‚"     `ˆ    CE   "(  ÀA   †Š   0äµA±ººZñññv£Yñññª®®¶{ |ó€¶bkPt8†ËsrrÔ·o_uêÔIÊÏÏo´Mnn®î¾ûîFË-ZÔ Ý“'Ojøðáêܹ³†®“'OJ’¶oß®ÐÐPuîÜY±±±úâ‹/$I555Z´h‘úôé#???W[õÛ,--Uhh¨^~ùe×:‡Ã!???iÆ
+®m¬ÜÜÜ– >Žù€7ðÈ3Šï¾û®vîÜ©óçÏëÙgŸÕäÉ“m“­˜˜˜ËöìÙ£Õ«W7X6þ|1Bçϟ׈#”œœ,Iš6mšÒÓÓUYY©_ýêW®å©©©ÊÉÉÑΝ;uåÊ9ÎíjüøñZ»v­üq×
 r§Ó©êêjeeeéÉ'Ÿt-‰‰Qvvö5 íó OÒÁîyõÕW%I—.]’¿¿¿úôéÓh›Ý»w+,,ÌõûÅ‹•˜˜¨7*66Öµ<??_‡R—.]”””¤~ýúIª}æ,}÷LyÇŽ’¤5kÖhåÊ•®íê[¿~½222”——§ààà&Çß³gO×í°°0}ôÑGîî:€vŽù€'ñÈ (}7jûöíÖŸ9sF®ß.\¨iÓ¦éÞ{ïm´]=$IÝ»w×Ù³g%I™™™zâ‰'TQQ¡Ç{̵üĉÊÏÏ×ĉuóÍ7륗^Ò< Iš3gŽV¯^m8I֍·cÇŽÚ²e‹ky@@€NŸ>ÝÚà  bþà)<ò¥g©ö¥Œ¯¾úJ«V­Ò/ùËFë»u릪ª*×ï+V¬Ð¼yó]S¨ŠŠ
+IÒ©S§(Iz衇T^^®¯¾úJ£GÖ~ô#×ö£FÒÙ³gµråJÍœ9ÓÕGAA’’’_Jq:ª©©Q^^žæÎëZ^UU¥›nºéZ€v„ù€§ðÈ ˜””äšÜüüütáÂ…FÛ2DGŽqý^SS#§Ó麦¦îßQ£F)==]/^TzzºFŽ麏ÓéÔáÇ•œœ¬Y³fI’âââ$Éð"îÈÈH(%%E™™™MŽ¿nì’TVV¦ÈÈÈ–  íó ObûKÏßçŸÓéTÿþý¡S§N©ÿþÚ´iS£ûMž<YEEEÍNBK—.U||¼n¸áEFF*''§A¿½zõÒ¬Y³”’’"IZ¶l™yä=øàƒ
 
 
-jÜ?&&FǏ¯u,Iúøã•‘‘QíýÀõ€úÌEýæ¢~Ðpýåú÷¿»åe&Ì5ê0õ˜‹úãÉï(    àe     lh”    °¡Q    À†F     e     lh”    °qüï(jöìÙNÜ0
+Òºuë´®¢¢"ÅÅÅéܹsZ°`A£ö222\ÛïÚµK			-9$ Ú	æ? žÎÖ øýwÔÕILLTbbâUï;iÒ$M™2¥Ùvo¹å}øá‡n÷Ý»woíÚµëªÛ‡„„èèѣͶ%Õ¾±þK1  1ÿð¶ŸQl­Ž;ºž{2o# ïÂü ­xä5Š   °A   †Š   0DP  €!‚"     `ˆ    C¦Žbqq±/^lv³ à–¢¢"ÛÒ7ó ;Y1ÿ™#""TYY©ãǏ›Ù, ¸-88XC‡mó~™ÿ ØÍŠùÏÔ ¥¨¨(3› ¯ÀüÀq"     `ˆ    CE   "(  ÀA   †Š   0dêç(îß¿_%%%f6	7pàÀf?”ºBK¹SWf£NÑR̰‚ÙóŸ©A±¤¤Dï¿ÿ¾¢££Íl>ª¸¸X•••Í4u…–p·®ÌF¢%˜ÿ`+æ?Ó¿ë9&&F©©©f7”––¦òòr·¶¥®à®–Ô•Ù¨S¸‹ùV°bþãE   "(  ÀA   †Š   0DP  €!‚"     `ˆ    CE   "(  À×ÅêêjÅÇÇÛ=ŒfÅÇÇ«ººÚîaÀMÔ¼u
++PW0bkPt8†Ë7oÞ¬ððpuêÔIÊÏÏo´Mnn®î¾ûîmÕýÔwòäI
+>\;wÖðáÃuòäI·úX´hQƒ¶êß.--Uhh¨^~ùå}ûùù)((H6lpm;xð`åææº{H`ê
+Þ€:…¨+˜Í#Ï(nÞ¼Y999ª¬¬ÔìÙ³•Ðh›ììlÅÄĸ~w:r:¶›?¾FŒ¡óçÏkĈJNNn¶={öhõêÕ†c+,,ÔøñãµvíZ=þøã
+ú¯®®VVV–ž|òI×ò˜˜egg·øÀ|Ô¼u
++PWh-й¹¹êׯŸºt颸¸8ýð‡?l´ÍîÝ»Öl[ùùùJJJR—.]”””¤¼¼¼«öqñâE%&&jãÆÚZ¿~½RRR”——§èèè&ûìÙ³§ëvXX˜>úè£fÇ	ëQWðÔ)¬@]¡µ:Ø=€«ùüóÏõðÃkÅŠÖ9sFͶqæÌõèÑC’Ô½{w={öª},\¸PÓ¦MÓ½÷ÞÛ¨­9sæhõêÕ
+n´®îzÇŽµeË×ò€€ >}ºÙq¢íPWðÔ)¬@]¡¥<òŒ¢TûÌfذaJJJÒ/~ñ‹Fë»u릪ªªfÛ	TEE…$éÔ©S
+¼j+V¬Ð¼yó\ZÿŠ‚‚%%%žòv:ª©©Q^^žæÎëZ^UU¥›nºÉͽ†Õ¨+xêV ®Ð׬Y£ûï¿_™™™š2eŠá6C†Ñ‘#GšmkÔ¨QJOO×Å‹•žž®‘#G^µššš×eÔ¿>#22RJIIQfff“}Öý’¤²²2EFF6;NXº‚7 Naê
+­eûKÏß7•ÓéÔc=&Iºï¾û\Ë/\¸Ðà”øäÉ“UTTä*£wR9N-]ºTñññºá†©œœIr«#ááá***R\\œÎ;§4è³W¯^ÊÈÈpm¿k×.ˆa-ê
+Þ€:…¨+˜ÉÖ hônª«-¯oÒ¤I
+ž±4uŸ[n¹E~øa«ú¨¿MýÛ!!!:zô¨[míÙ³§Á)sXº‚7 Naê
+f³ýŒbkuìØÑõ,Æ“yÃñê
+Þ€:…¨+ñÈk  `?‚"     `ˆ    CE   "(  ÀA   †LÿÅââb-^¼ØìfáƒŠŠŠ¿Þuwµ¤®ÌFÂ]̰‚óŸ©A1""B•••:~ü¸™ÍÂGkèСÍnG]¡%Ü­+³Q§h	æ?XÁŠùÏÔ ¥¨¨(3›¨+xêV ®`7®Q  €!‚"     `ˆ    CE   "(  ÀA   †LýÅýû÷«¤¤ÄÌ&áãØì‡ƒRWh)wêÊlÔ)ZŠùV0{þ35(–””èý÷ßWtt´™ÍÂG«²²²Ù‚¦®ÐîÖ•Ù¨S´ó¬`Åügúw=ÇÄÄ(55ÕìfáƒÒÒÒT^^îÖ¶ÔÜÕ’º2u
+w1ÿÁ
+VÌ\£   CE   "(  ÀA   †Š   0DP  €!‚"     `ˆ    CE   òÚ X]]­øøø6ï7>>^ÕÕÕmÞ/Úuo@Â
+ÔŒØG“Ëë~š’››«»ï¾»ÙûÔÔÔhÑ¢EêÓ§üüü\ëëoWZZªÐÐP½üòË
+ÚòóóSPP6lØàÚvðàÁÊÍÍmù΢ÍPWðÔ)¬@]ÁlyFÑétÊét^u›ììlÅÄÄ4{ŸÔÔTåäähçΝºråJ£m
+5~üx­]»V?þxƒöª««•••¥'Ÿ|Òµ<&&FÙÙÙ­Ü3؉º‚7 Naê
+­ÕÁî´ÖîÝ»ÖìvkÖ¬ÑÊ•+Õ¯_¿FëÖ¯_¯ŒŒååå)88¸É6zöì麦>ú¨Uc†ç£®à
+¨SXº‚<£èŽ3gÎ(   ÙíNœ8¡üü|]wÝu
+Ö¶mÛ\ëæÌ™£ùóç³Ãᐿ¿¿ÆŽ«åË—»–èôéÓ¦ì<uo@Â
+ÔŒxmPìÖ­›ªªªšÝ.00P£FÒÙ³gµråJÍœ9Óµ®  @III†§¼N§jjj”——§¹s纖WUU馛n2g'àq¨+xêV ®`Äkƒâ!CtäÈ‘f·‹‹‹“$Ëm###UPP ””eff6ÙFEE…ëvYY™"##[;lx8ê
+Þ€:…¨+±ýÅï¿›Êét6XVwûûËNž<YEEE®âjê>Ë–-Ó#<¢|PAAAZ·n]ƒvÂÃÃUTT¤¸¸8;wN,hÐF¯^½”‘‘áÚ~×®]JHH¸¦}†õ¨+xêV ®`&[ƒbSïÀjîY’4iÒ$M™2¥ÙûôîÝ[»víºj!!!:zô¨[ýïÙ³§Á)sxê
+Þ€:…¨+˜Íö3Š­Õ±cGåää´y¿vô‰¶C]ÁP§°u#^{"   ¬EP  €!‚"     `ˆ    CE   "(  ÀéŸ£X\\¬Å‹›Ý,|PQQ‘áÇ¡®à®–Ô•Ù¨S¸‹ùV°bþ35(FDD¨²²RǏ7³Yø¨àà`
+:´Ùí¨+´„»ue6ê-Áü+X1ÿ™£¢¢ef“ u¯@Â
+ÔìÆ5Š   0DP  €!‚"     `ˆ    CE   "(  À©Ÿ£¸ÿ~•””˜Ù$|ÜÀ›ýpPê
+-åN]™:EK1ÿÁ
+fϦŒ’½óÎ;0`€™ÍÂG>|X•••Í4u…–p·®ÌF¢%˜ÿ`+æ?Ó¿ëyÀ€š9s¦ÙÍÂegg»½-uwµ¤®ÌFÂ]̰‚ó×(  ÀA   †Š   0DP  €!‚"     `ˆ    CE   "(  ÀA   †Š   0dkPt:Ú²e‹¦NªÑ£GkÊ”)Ú±c‡-cYºt©Ž=ªêêjÍž=ÛµüÔ©Szê©§4zôh=õÔS:uê”-ãƒû¼¡®bcc]?hŸ¼¡N™ÿ¼7ÔóŸw±5(nÞ¼Yyyyzî¹ç´}ûv-Y²D´e,N§S‡C‡Vß¾}]ËW­Z¥»îºKï¼óŽîºë.­ZµÊ–ñÁ}ÞPW………*,,´eLðÞP§ÌÞÇêŠùϻطnݪ””…††ªC‡êÝ»·RRR\ë9¢3f(..N3fÌPYY™¤Úg#=z´$©¼¼\³gÏÖèÑ£5uêT:t¨Q_±±±Z³fÆŒ£©S§êÓO?•$mÙ²E±±±Ú±c‡f̘¡¤¤$½ñÆ®g:{÷îÕ„	Ô©S'M˜0A{÷îµú°àyC]ÞP§ÌÞÇê
+ÞÅÖ XQQ¡[o½µÉõK–,ѸqãôöÛokܸqZ¼x±kÝí·ßî:ž––¦ûï¿_ï¾û®fÏž­¥K—¶wóÍ7këÖ­zðÁµ|ùrIÒÃ?¬mÛ¶iРA*,,Ô Aƒ´uëV׳ÊÊJuíÚU’tã7êÂ…¦ì;¬ã
+uxC2ÿyo¨+x[ƒb=ôü£Éõååå;v¬ºté¢1cƨ¼¼ÜµnäÈ‘òó«þgŸ}¦Å‹ë¾ûîÓÂ…uâÄ	Ãö~ö³Ÿ©sçÎ;v¬«­ØØX=ðÀÚ·oŸbccµoß>?^[·n•$]ýõ:wîœ$éüùóºþúëMÙwXÇê
+ð†:eþó>ÞPWð.¶ÅñãÇkÉ’%*++Ó•+Wô¯ýKK–,q­
 
+ÒŸÿüg]ºtIï½÷^ƒgIþþþ®Û·Ýv›,X ÷Þ{O………*((0쯮­;v¸Ú*,,Ô„	ôâ‹/*33SãÆSaa¡Æ/I<x°^ýu]¾|Y¯¿þº
+dÅ¡€‰¼¡® o¨Sæ?ïã
+uïÒÁÎÎ'Nœ(=ÿüóúâ‹/Ô³gOM™2ŵ>99YK—.ÕŠ+të­·6¸Î¢¾_ÿú×JOO׋/¾¨Ë—/K’á)îÏ?ÿ\ãǏW=ôÌ3ϸ–—––ê±ÇÓÁƒ=cž5k–žþyýüç?×í·ß®ßüæ7fì:,ä
+uUÿZºÛ¼,Ó¾xC2ÿyo¨+æ?ïâX¸p¡355õª¥¥¥©¼¼¼É‚ª³jÕ*ýóŸÿÔÌ™3Í£)bcc)D“-ê
+¦jI]ùùù‰ùv`þƒ¬˜ÿøÀm   j7A‘g=°uo@Â
+ÔUûÐn‚"   Z†    CE   "(  ÀA   †Š   0dË7³>|X°£k[|ùå—ºråŠzõêe÷PÚ̝wÞ©´iŸÔ•ï³£®ÌFú>æ?ëQWmÇ– xàÀ­ùdmGï6È—ÔSR¸Ýi#ÅRBUB›4uåãlª+³8p@Ÿ|ò‰¢£ÛG¡æçç«gÏž
+o…Z\\¬ªª*[æ?êÊwÙUW’ßõ#éêßã;>–4PígÓ$´©ïµŸãL]y­˜˜˜f¿:ËW|üñÇ8p`»Ùß´´4<hO¡RW¾ËκâE   "(  ÀA   †Š   0DP  €!‚"     `ˆ    CE   "(  ÀA   †¼#(:¾ýñ—&iÛ÷ÖmßÓ%ô¤aõ–Ÿ”4\Rçoÿ=ÙÊöÝe÷þ¾!é6Õ~øO¾ýÝÙ}œë,º†¶[ÂîýuÔû©o³¤pI$EHÊoe¿>ÊápÈápÈßß_aaaÚ¶m[ƒuFÛ·ÆôéÓuàÀ}óÍ76ì»®®ÿÖ¶ÛRvïïöí۪Ν;+66V_|ñE«Ú÷tvçúuÕµåIû[_NNŽúöí«N:)""Bùùž7zGP”$§¤K’–IšaQ5ª="“4¤Þòù’FH:ÿí¿Éõ_Ÿû›()CÒ¿%­Pí~_eçq–¤=’V[Ô¯;÷×ùíÏ÷m–”#©RÒlILc¥E    IDAT	Ë‹9N]ºtIË–-ÓŒÖ<p555òóóÓßþö7
+òÝçt:åt=pÖ±s§M›¦ôôtUVVêW¿ú•’“Ûb·‡Ç¹®ÿ¶¬/Oüôî»ïjçΝ:þ¼ž}öYMž<Ù’q]ï	Šuü¯á¾I%ýPµgTJ¾]žþíºW$õ—­Ú€Tüó%%Iêòí¿y×0†–²co­wI
+¾†1x;ŽóEÕ†ò×ÐwkÙ±¿MÉ•ÔOµÿ¿â¾m†üý[ÿÀ9-\¸P?üᦒ’Ú.==]‡C¯¼òŠú÷ï¯èèh­X±¢ÍÎ ^û[SS㺿$íØ±ã÷ÂóÙUW7Þx£ôóŸÿ\ååå×¼îò¤ÿG¯¾úªn½õVùùùÉßß_}úôiõجâ=Aѡڗ~Ÿ–”y
+íIª4GÒÌo—%I:#i¤jÏxŒ”tJߝý8#©Ç··»K:{
+ý»ËÎý]­Ú³:%ý’V]CÿžÎÎã¼PÒ4I÷^C¿-eçþ6çsI«6\¢‡Ã¡Î;ëé§ŸVff븠  UTThΜ9š9³öKJJÒ™3g4räH9N9R§Njó³ˆõÙ¹¿™™™zâ‰'ÔµkWåååéìÙ¶˜ðíaçqv::þ¼Ž;¦;ï¼S		Ö¿”à©ÿ‡ºt颙3g^Ó¸¬ÒÁ©cÝYR•¤€o¯R홉¦L“ôÕ¾œ:ïÛeõÝíîª}ùu¶¤@ÕþQì©Ú?|-{kع¿¿””-)VµgS§Jú{ˆï5ì<Î+¾í¿þöVÿm¶s¯f·¤xI¿—ô‹f¶m‡šúcÓ¹sgUUU)  ö«ªªR—.M?pÓ¦MÓ~ðMŸ>]óæÕ>põÏxÔÝîÞ½»2224{vsœ5ìÜ߇zH=ô¤Úëë_Ëæk<¡®n¾ùfýîw¿Ó7ÞxÍûÓOØß¦Æõõ×_ëí·ßÖ/ùK•••µh¿¬æ=g›2\ÒªýÃVõííWÙ~½¤¯UûòØß.sJš+i—¤}ª½vË©ïþ¸RíËj¿ýw¤‰ão©¶ØßSßþëøÞïíI[ç5¼nϾ8m³¿MY#é~ÕžáœÒšÁ·_Ç×/¼ ªª*UUUé…^ЈM?pëׯ××_­W^yEwÜQûÀ9N͝;W»víÒ¾}û4cÆ9NÛBâÕ´Õþ:N>|XÉÉÉš5k–åûåiÚ²®Î;§^xA–îÓÕØùÿ())I’$???]¸pÁ¼3‰÷ŵ’öJºùÛŸ}ß.kÊqÕžåHWí¨:ªöšg$uûÞ}–J*’tƒ¤÷UûF »´ÅþfJzBÒuª}i±-ßlá)Úâ8{’¶Øßúïx®û1I_Jº¯ÞòªÖíF{³víZíÝ»W7ß|³n¾ùfíÛ·Ok×6ýÀ?~\Ý»wWzzºÖ¬ùîûðÃ5lØ09sFݺ5|àê¿S³-
 ßýl¤­ö×ÏÏO£FÒ¤I“”’’bÙþxª¶¬«^½zéoû›6n´ãbíZvþ?êß¿¿"""ÔµkW-^¼X›6m²`¯w¼ô|µ3-Á’v¶ ­´o¾¯øÛGªñÃ[Tû°­Ø½¿¿ýñuvgwÇb»÷·©þí<“ê®vSpp°vîtÿKKKSZZ㮸¸ö9r¤FŽløÀÙñŽç¦øâþÚ¥½gOÝßÄÄD%&&ºÝ·¼ÿŒ"   ,Ѿ‚bûx¢øö¶¿vioǹ½í¯h/gÊê´·ýµK{;Îím¥ö  à6‚"     `ˆ    CE   "(  À}¸],i±m½·­ÿ•tIíg‹Ô6߇m„ºò]vÖ•ÉŠ‹‹µxqûxàþ÷ÿW—.]j7û[TT¤À@{
+•ºò]vÖ•-AñŽ;îPBU‚tÀŽÞÛÞ—·|©êêjõ>ÐÛî¡´@iÀ€mÞ-uåãlª+³ÝqǪªªÒí£Po¹åUWW·›ý
+´mþ£®|—]u%Ù#""lýpø&ê
+Þ€:…¨+X…k  `ˆ    CE   "(  ÀA   †Š   0DP  €!Ó?GñÓO?Uvv¶ÙÍÂ8p@ƒ
+rk[ê
+îjI]™:…»˜ÿ`+æ?SƒbDD„*++Íl>lРA:th³ÛQWh	wëÊlÔ)Z‚ùV°bþ35(FEE)**ÊÌ&ê
+^:…¨+؍k  `ˆ    CE   "(  ÀA   †Š   0DP  €!·?Gñã?ÖªU«¬ ´™’’
+6Ì­m™ÿ ø’–ÌnŨ¨(;wîš ž$**JÑÑÑnmÇüÀ—¸;ÿInŘ˜ÅÄÄ\˘ À+1ÿhϸF   †Š   0DP  €!‚"     `ˆ    CE   rës‹‹‹UTTdõX  M¹ó¡³Ì |‘»ºíVPܵk—rss5tèÐk x‚ýû÷ëܹsÍN”Ì |»óŸÔ‚ïz:t¨RRR®i` à)ZòÝÍÌ |IKæ?®Q  €!‚"     `ˆ    CE   "(  ÀA   †Š   0DP  €!‚"   ytP		±{ `æ? žÀ’ XTT¤1cÆ(,,L#GŽÔ[o½eE7
+\ˤº`Á}ú駪®®ÖÃ?ìZ¾}ûvÝwß}
+Ó¸qãôÁ˜1T >ÌWæ¿wÞyG£FbþÚ9K‚â¼yó4sæL}òÉ'ÊÊÊRaa¡ݘÆétÊÏÏOûöíÓ€\Ë·oß®ŒŒ}òÉ'š:uªžzê)G	ÀøÊü÷—¿üEëׯ×ÁƒõÄO0ÿí”%A±k×®ª¨¨Pii©zôè¡ôôt׺C‡iìØ±
+
+
+ÕØ±cUZZ*I*--Õý÷߯ÐÐÐFÏŽ?øà
+2D¹¹¹úì³Ï4aÂ׳õ½{÷º¶		1|f¢%K–(<<\±±±úøã%IYYY
+		Ñ믿®1cÆhòäÉzå•W\mü÷ÿ·ÂÂÂÔ¹sg
+>\×]w‡€ñ•ùoùòåêÓ§üüüäïﯞ={Zr¼ x6K‚âÚµkuâÄ	=ÿüó6l˜Þxã
+׺äädÅÇÇëÀŠWrr²kùC=¤ÒÒR;v̵ý›o¾©ßþö·Z·n&Mš¤ùóç+!!A‡ÒsÏ=§¸¶?vìXƒûÖ×»woíÙ³G>ú¨žyæIRbb¢öï߯{î¹GÇŽÓ=÷Ü£½{÷6j£¢¢B?þ¸~ûÛßšzœ ø_šÿBBBÔ·o_=óÌ3úÃþ`ú±àù.t¦¦¦^u£´´4•——+%%¥Å9rD			Ú»w¯$)44TŸ|ò‰ºt颯¾úJPYY™BCCuðàAýà?pÝ7$$D:tÐêÕ«ãºÿ•+W¾Û‡CGUHHH““dHHˆ>¬.]ºè믿VÿþýUVVÖäu=‹-ÒÔ©S%IМ9s4oÞ<?¾ÅûÀ3­ZµJ~~~bþk¨þü'I/^TAA–-[¦¿üå/-> <OKæ?KÎ(Ν;WǏ×åË—õ÷¿ÿ]555®u?ùÉO´eË}ýõ×Ú¼y³BCC%IaaaÚ´i“._¾Ü ­5kÖ(99Y;wî”$ÝyçZºt©ë™÷Ñ£G%I:tЗ_~Ù䘶lÙ¢‹/jË–-ºí¶Û$Õ>OLLTvv¶Þ~ûmÅÇÇëØ±c®IrÓ¦Mš1c†þð‡?¸ÅWæ¿ßÿþ÷:sæŒ$ÉÏÏOÿþ÷¿M:B ¼‰%A166VÓ§OWxx¸ÒÓÓ$ÖÅ‹ëµ×^SÿþýµiÓ&-Y²Äµ|óæÍºãŽ;<ÓŽŽÖúõëõ»ßýNëÖ­ÓK/½¤7ß|Sƒ
+jpMÎ#<¢˜˜˜&Ÿ%Ÿ<yRƒVVVVƒñìÛ·Oƒ
+ÒùóçÕµk×÷yöÙguúôi=ú裮¾¾úê+ÓŽ ßã+ó_ß¾}5nÜ8
+0@«V­ÒŠ+L;F ¼‡å/={‚«½, }j‹—ž=ó€ï³ý¥g   x¿vy6
+ ½bþp-ÚEP  @Ë  `ˆ    CE   "(  ÀA   †:˜ÙØþýûURRbf“ ÐbÔСCÛ´Oæ? žÀìùÏÔ XRR¢÷ß_ÑÑÑf6 n+..Veee›Eæ? v³bþ35(JRLLL³_	 V©ûÊ=;0ÿ°“ó
 ×(  ÀA   †Š   0DP  €!‚"     `ˆ    CE   "(  ÀA   †¼6(VWW+>>Þîa4+>>^ÕÕÕv€aþÐVl
+ЇÃpyNNŽúöí«N:)""Bùùù¶ÉÍÍÕÝwßÝhù¢E‹´{òäI
+>\;wÖðáÃuòäIIÒöí۪Ν;+66V_|ñ…$©¦¦F‹-RŸ>}äçççj«~›¥¥¥
+
+
+ÕË/¿ìZçp8äçç§   mذÁµíàÁƒ•››ÛÒCÀÇ1ÿðyFñÝwßÕΝ;uþüy=û쳚<yr£m²³³Ó`Ùž={´zõêËæÏŸ¯#Fèüùó1b„’““%IÓ¦MSzzº*++õ«_ýʵ<55U999Ú¹s§®\¹"§ÓÙ ½ÂÂB?^k×®Õã?îZît:U]]­¬¬,=ùä“®å111ÊÎξ¦ã ý`þàI:Ø= #¯¾úª$éÒ¥Kò÷÷WŸ>}m³{÷n………¹~¿xñ¢µqãFÅÆÆº–çççëСCêÒ¥‹’’’Ô¯_?IµÏœ¥ïž)ïØ±C’´fÍ­\¹Òµ]}ëׯWFF†òòòÜäø{öì麦>úÈÝ]ÐÎ1ÿð$¥ï&°ÀÀ@mß¾½Ñú3gÎ(  ÀõûÂ…5mÚ4Ý{m¶ëÑ£‡$©{÷î:{ö¬$)33SO<ñ„***ôØc¹–Ÿ8qBùùùš8q¢n¾ùf½ôÒKzà$IsæÌÑêÕ«
+'ɺñvìØQ[¶lq-ÐéÓ§[{ ´CÌ <…G¾ô,Õ¾”ñÕW_iÕªUúå/Ùh}·nÝTUUåú}ÅŠš7o^£kjUQQ!I:uê”%I=ôÊËËõÕW_iôèÑúя~äÚ~Ô¨Q:{ö¬V®\©™3gºú(((PRR’áK)N§S555ÊËËÓܹs]Ë«ªªtÓM7]ëá ÐŽ0ÿð“’’\“›ŸŸŸ.\¸Ðh›!C†èÈ‘#®ßkjjät:]×ÔÔý;jÔ(¥§§ëâÅ‹JOO×È‘#]÷q::|ø°’““5kÖ,IR\\œ$^Ä©‚‚¥¤¤(33³Éñ׍]’ÊÊÊÙ²  ÝbþàIléùûïüs:êß¿¿"""têÔ)õïß_›6mjt¿É“'«¨¨¨ÙIhéÒ¥Š×
+7Ü ÈÈHåää4è·W¯^š5k–RRR$IË–-Ó#<¢|PAAAZ·n]ƒöÂÃÃUTT¤¸¸8;wN,hÔ^FF†kû]»v)!!¡%‡@;ÁüÀÓÙ¿ÿŽº:‰‰‰JLL¼ê}'Mš¤)S¦4Ûî-·Ü¢?üÐí¾{÷î­]»v]uû=z´Ù¶¤Úw"Ö) $æ? ÞÁö3Š­Õ±cG׳cOæ
+cà]˜ÿ ´¼F   ö#(  ÀA   †Š   0DP  €!‚"     `
 ÈôÏQ,..ÖâÅ‹Ín ÜRTT¤àà`[úfþ`'+æ?SƒbDD„*++uüøq3› ·kèСmÞ/ó »Y1ÿ™£¢¢ef“ à˜ÿ ø"®Q  €!‚"     `ˆ    CE   "(  ÀA   †LýÅýû÷«¤¤ÄÌ&áãØì‡ƒRWh)wêÊlÔ)ZŠùV0{þ35(–””èý÷ßWtt´™ÍÂG«²²²Ù‚¦®ÐîÖ•Ù¨S´ó¬`Åügúw=ÇÄÄ(55ÕìfáƒÒÒÒT^^îÖ¶ÔÜÕ’º2u
+w1ÿÁ
+VÌ\£   CE   "(  ÀA   †Š   0DP  €!‚"     `ˆ    CE   òÚ X]]­øøx»‡Ñ¬øøxUWWÛ=¸‰º‚7 Naê
+Fl
+ЇÃpùæÍ›®N:)""Bùùù¶ÉÍÍÕÝwßÝ ­ºŸúNž<©áÇ«sçÎ>|¸Nž<éV‹-jÐVýÛ¥¥¥
+
+
+ÕË/¿Ü o???iÆ
+®m¬ÜÜ\w	L@]ÁP§°u³yäÅÍ›7+''G•••š={¶m“­˜˜×ïN§SN§³ÑvóçÏ׈#tþüy1BÉÉÉÍö±gÏ­^½Úpl………?~¼Ö®]«Ç¼AÿÕÕÕÊÊÊÒ“O>éZ£ìì옏º‚7 Naê
+­å‘A177WýúõS—.]§þð‡¶Ù½{·Âšm+??_IIIêÒ¥‹’’’”——wÕ>.^¼¨ÄÄDmܸ±Q[ëׯWJJŠòòòÝdŸ={ötÝÓG}Ôì8a=ê
+Þ€:…¨+´V»p5Ÿþ¹~øa­X±¢Ñº3gÎ(   Ù6Μ9£=zH’ºw﮳gÏ^µ…jÚ´iº÷Þ{µ5gέ^½ZÁÁÁÖ՝BïØ±£¶lÙâZ Ó§O7;N´ê
+Þ€:…¨+´”GžQ”jŸÙ6LIIIúÅ/~Ñh}·nÝTUUÕl;ª¨¨$:uJWícÅŠš7ož«@ë_CQPP ¤¤$ÃSÞN§S555ÊËËÓܹs]Ë«ªªtÓM7¹¹×°uo@Â
+ÔZÃ#ƒâš5ktÿý÷+33SS¦L1ÜfȐ!:räH³m5Jéééºxñ¢ÒÓÓ5räÈ«öQSSÓຌú×gDFFª  @)))ÊÌÌl²Ïºÿ@’TVV¦ÈÈÈfÇ	ëQWðÔ)¬@]¡µléùûï¦r:zì±Ç$I÷ÝwŸkù…œŸ<y²ŠŠŠ\ÅbôN*§Ó©¥K—*>>^7Üpƒ"##•““#Inõa$<<\EEEŠ‹‹Ó¹sç´`Á‚}öêÕK®íwíÚexÑ0¬E]ÁP§°u3ٍÞMuµåõMš4©Á3–¦îsË-·èÃ?lUõ·©;$$DGu«­={ö48eëQWðÔ)¬@]Ál¶ŸQl­Ž;ºžÅx2o#¾C]ÁP§°u#y"   ìGP  €!‚"     `ˆ    CE   "(  ÀéŸ£X\\¬Å‹›Ý,|PQQ‘áÁ¡®à®–Ô•Ù¨S¸‹ùV°bþ35(FDD¨²²RǏ7³Yø¨àà`
+:´Ùí¨+´„»ue6ê-Áü+X1ÿ™£¢¢ef“ u¯@Â
+ÔìÆ5Š   0DP  €!‚"     `ˆ    CE   "(  À©Ÿ£¸ÿ~•””˜Ù$|ÜÀ›ýpPê
+-åN]™:EK1ÿÁ
+fϦŒ’½ÿþûŠŽŽ6³Yø¨ââbUVV6[ÐÔZÂݺ2uŠ–`þƒ¬˜ÿLÿ®ç˜˜¥¦¦šÝ,|PZZšÊËËÝÚ–º‚»ZRWf£Ná.æ?XÁŠùk  `ˆ    CE   "(  ÀA   †Š   0DP  €!‚"     `ˆ    C^«««ßæýÆÇÇ«ºººÍûEÛ ®à
+¨SXº‚[ƒ¢ÃáhryÝOSrssu÷Ýw7{Ÿšš-Z´H}úô‘ŸŸŸk}ýíJKKª—_~¹A[~~~
 
-Ô¡CWŽMý
-Cýæ¢~s£~m”ãââTVV¦¯¾úÊÉaJ‡Ô«W¯—úŽúÌEýæ
-Fý:Ú('&&*11ÑÉ!„õ˜‹úÌEýÞÄw”    °¡Q    À†F     e     lh”    °¡Q    À†F     GÿŽòþýûµgÏ'‡DÅÇÇ×úÇ·‰›÷Ô%nN#¼‡ú5õ‰ú5õ‰ú5•Óõëh£¼gÏíܹSÉÉÉN‹ ª¬¬¬Ö„!nÞR׸9<ðê×LÔ/$ê×TÔ/$ê×TÁ¨_GeIJIIQff¦ÓÃ" YYY***ªÓ¾ÄÍ;ê7§‘ÞAýš‰ú…DýšŠú…Dýš*õËw”    °¡Q    À†F     e     lh”    °¡Q    À†F     e     lh”    °¡Q    ÀƨF¹¼¼\iiinO£Viii*//w{žAÜ ‘¦"nÈS7H䁩ˆ›û\m”}>_•Ûß~ûmuïÞ]Mš4Q\\œ¶nÝ*IÊËËÓ½÷Þ[éñWþ³;yò¤’’’¡¤¤$<y²Æq¯˜1cF¥±ì·>¬Î;káÂ…•ަèèh­ZµÊ¿oÏž=•——È’¸A"LEÜ ‘¦"nÈS7óxòå5kÖ(77Weee7nœ†"IÊÍÍUJJŠ?˲dYÖ5Ÿ4i’î¿ÿ~•––*))I“'O®q\IÚ»w¯–/_^å|>üðC=þøãZ²d‰ÆŒSéøåååZ±b…ÆŽëßž’’¢ÜÜÜ­‰ˆ$òÀTÄ
-y`*â‰<0qó.O6ÊëÖ­Ó]wÝ¥¦M›*55UÍš5“ôCPccck}üÖ­[5~üx5mÚTÚ²eKã^¸pAéééZ½zõ5c­\¹RS¦LÑ–-[”œœ\í1[µjå¿«}ûöÕë9_ˆ$òÀTÄ
-y`*â‰<0qó®p·'P“Ó§Oëç?ÿ¹æÎ+I*))Qddd­+))ñ°eË–úî»ïj÷…^PzzºxàkÆzöÙgµdÉuèÐášû®\¢Ð¸qc­_¿Þ¿=22R%%%u{’×!â‰<0qƒD˜Š¸A"LEܼǓŸ(K?¼‹Ò»wo?^$µhÑBçΝ«õ±QQQ*..–$9sFQQQ5Ž;oÞ<eddøÀ~þ¶mÛ4~üø*/)°,KÚ²e‹&L˜àß~îÜ9µhÑ"€gm>â‰<0qƒD˜Š¸A"LEܼɓ
 òÒ¥K5`À -^¼XÇ÷oOHHБ#Gj}|ß¾}5wî\]¼xQ¯¿þºúôéS㸕®û·_ÿŸ mÛ¶iÊ”)Z¼xq•Çó'¨$=zT‰‰‰õ{Ò×â‰<0qƒD˜Š¸A"LEܼËõK¯¯þÍm–eiÔ¨Q’¤GyÄ¿ýÂ…:t¨
 
+Ò†
+\Û<X¹¹¹-ßY´ê
+Þ€:…¨+˜Í#Ï(:N9Î«n“­˜˜˜fï“ššªœœíܹSW®\i´Maa¡Æ¯µk×êñÇoÐ^uuµ²²²ôä“Oº–ÇÄÄ(;;»•{;QWðÔ)¬@]¡µ:Ø=€ÖÚ½{·ÂšÝnÍš5Z¹r¥úõë×hÝúõë•‘‘¡¼¼<7ÙFÏž=]·ÃÂÂôÑGµjÌð|Ô¼u
++PW0â‘gÝqæÌ4»Ý‰'”ŸŸ¯ë®»NÁÁÁÚ¶m›kÝœ9s4þ|Ãbv8ò÷÷ר±cµ|ùr×ò€€ >}Ú”}€ç¡®à
+¨SXº‚¯
+ŠÝºuSUUU³ÛjÔ¨Q:{ö¬V®\©™3gºÖ())Éð”·ÓéTMMòòò4wî\×òªª*ÝtÓMæì<uo@Â
+ÔŒxmP2dˆŽ9Òìvqqq’dx±mdd¤
 
-”pÍc¯Ü¶,K999JKKS³fÍ” µk×JRµã6mÚ´Æ9vëÖMJMMÕÙ³g5uêÔJÇlÓ¦æÏŸïßÇŽ<xp=VÁ<Ä
-y`*â‰<0qƒD˜Š¸™ÅÕF¹ªßÜVÓö§Ÿ~ZÆ
-«u¿;î¸C»wï®ó¸Õíc¿£ãǏ×i¬?þXµËTÄ
-y`*â‰<0qƒD˜Š¸™ÇõO”ë#<<Üÿ.‰—™0ÇP"nÈS7H䁩ˆ$òÀTÄÍ}žüŽ2     n¡Q    À†F     e     lh”    °¡Q    À†F     ÇÿŽraa¡fÏžíô°@AA:tèP§}‰›wÔ'nN#¼ƒú5õ‰ú5õ‰ú5U0ê×ÑF9..NeeeúꫯœêСƒzõêUë~ÄÍ[ê7§‘ÞBýš‰ú…DýšŠú…Dýš*õëh£œ˜˜¨ÄÄD'‡D7H䁩ˆ$òÀTÄ
-y`*âvýã;Ê     ØÐ(    `C£    €
-2     64Ê     ØÐ(    `C£    €£GyÿþýÚ³g“C¢âããkýãÛÄÍ{ê7§‘ÞCýš‰ú…DýšŠú…DýšÊéúu´QÞ³gvîÜ©ääd'‡E€
-UVVVkÂ7o©kÜœFxõk&êõk*êõkª`Ô¯£²$¥¤¤(33Óéa€¬¬,Õi_âæõ‰›ÓÈï ~ÍDýB¢~MEýB¢~MŒúå;Ê     ØÐ(    `C£    €
-2     64Ê     ØÐ(    `C£    €
-2     64Ê     ØÐ(    `cT£\^^®´´´7--Mååå!?îõ‚¸A"LEÜ ‘¦"nÈS7÷¹Ú(û|¾j·_ùÏ.//O÷Þ{o­ûUTThÖ¬Yj×®ÂÂÂü÷Û÷;|ø°:wV+,,LÑÑÑZµj•ßž={*//¯aOö:BÜ ‘¦"nÈS7H䁩ˆ›y<ù‰²eY²,ëší¹¹¹JII©u¿ÌÌL­[·N›7oÖåË—¯ÙçÃ?Ôã?®%K–h̘1•Æ+//׊+4vìXÿö””åææ:ðÌ®oÄ
-y`*â‰<0qƒD˜Š¸yW¸Û¨½{÷*66¶Öý–.]ªÅ‹«[·n×Ü·råJ-X°@[¶lQ‡ª£U«VþÛ±±±Ú·o_ at sqÃÈ37H䁩ˆ$òÀTÄÍ}žüD¹:%%%ŠŒŒ¬u¿¯¿þZùùùºùæ›uçwjãÆþûž}öYMœ8±Êdñù|jÔ¨‘}ôQ½öÚkþí‘‘‘*))qä9܈ˆ$òÀTÄ
-y`*â‰<0qsŸQr‹-tîܹZ÷‹ŠŠRŸ>}TRR¢(==Ýß¶mÛ4~üø*/)°,KÚ²e‹&L˜àß~îÜ9µhÑ™'q"nÈS7H䁩ˆ$òÀTÄÍ}F5Ê			:räH­û¥¦¦JªúKó			Ú¶m›¦L™¢Å‹Wùø°°0ûÿ}ôèQ%&&8k7H䁩ˆ$òÀTÄ
-y`*âæ>׿£|uP-˪´íÊm˲4tèP(!!ášÇÚ÷›3gކ¢Aƒ)::ZË—/¯tŒnݺ©  @©©©:{ö¬¦NZiŒ6mÚhþüùþýwìØ¡Áƒ;õ”¯Ä
-y`*â‰<0qƒD˜Š¸™ÅÕF¹ªßÜVÓö§Ÿ~ZÆ
-«u¿¶mÛª   ÆqcbbtüøñZÇ’¤?þXÕÞ£!nÈS7H䁩ˆ$òÀTÄÍ<®¢\áááZ»vmȏëÆ1¯'Ä
-y`*â‰<0qƒD˜Š¸¹Ï¨ï(
     l4Ê     ØÐ(    `C£    €
-2     64Ê     ØÐ(    `ãøßQ.,,ÔìÙ³(((P‡ê´/qóŽúÄÍiäwP¿f¢~!Q¿¦¢~!Q¿¦
-Fý:Ú(ÇÅÅ©¬¬L_}õ•“Ã"@:tP¯^½jݏ¸yK]ãæ4òÀ[¨_3Q¿¨_SQ¿¨_S£~m”•˜˜èäâ‰<0qƒD˜Š¸A"LEÜ®|G     e     lh”    °¡Q    À†F     e     lh”    °qôï(ïß¿_{öìqrH4P|||­|›¸yO]âæ4òÀ{¨_3Q¿¨_SQ¿¨_S9]¿Ž6Ê{öìÑÆÕ£G'‡E€¾øâ•••Õš0ÄÍ[ê7§‘ÞBýš‰ú…DýšŠú…Dýš*õëh£,I=zôÐ3Ï<ãô°@nnn÷%nÞQŸ¸9<ðê×LÔ/$ê×TÔ/$ê×TÁ¨_¾£    €
-2     64Ê     ØÐ(    `C£    €
-2     64Ê     ØÐ(    `C£    €
-2     64Ê     ظÚ([–¥wÞyG#FŒÐÃ?¬áÇëƒ>pü8999:vì˜ÊËË5fÌÿö3gÎè¹çžÓÃ?¬çž{NgΜqüØ×#·ãöÐCùÿƒ{ÜÎê70nǍúõ·ó€ú
-ŒÛq£~½Áí< ~ãvܨßúsµQ^·nòóó5}útmÚ´IÙÙÙ:xð ãDZ,K’ôå—_ªK—.þí‹-R÷îݵqãFuïÞ]‹-rüØ×#·ã¶}ûvmß¾Ýñã¡~ÜÎê70nǍúõ·ó€ú
-ŒÛq£~½Áí< ~ãvܨßúwóà¿ÿýïõ/ÿò/Љ‰‘$µmÛV“'OößäÈegg«¨¨HíÛ·×Ô©SÕ©S'=ôÐC4h6lØ Í›7«¨¨H999:räˆn¿ývM™2EwÝu—~ÿûßkÞ¼y’Té›÷Þ{OÛ·o×'Ÿ|¢eË–©I“&zòÉ'5räÈÐ.€¡Ü޼Áí< ~ãvÜà
-nçõ·ãop;¨ßÀ¸7ÔŸ«Ÿ(«}ûöÕÞŸ­Ç{L6lÐc=¦Ù³gûõ'AVV–ú÷ï¯÷ß_ãÆSNNŽ$iàÀúÃþ øøxmß¾]={öÔ;ï¼ãO–²²2Ýzë­’¤æÍ›ë/ùK°žêuÅí¸ÁÜÎê70nÇ”7_Þ  
-‰IDAT
-ÞàvP¿q;nð·ó€ú
-ŒÛqCý¹ú‰r«V­TTTägåjEEEêׯŸ"""Ô¯_?½ñÆþ
 ûúöí«°°úücÇŽ);;[ÙÙÙ’$ŸÏ'I•®Á¿rû‰'žÐsÏ=§ê–[nÑÙ³g¥ÒÒRÝrË-Ayž×·ãop;¨ßÀ¸7xƒÛy@ýÆí¸ÁÜÎê70nÇ
-õçj£<pà@eggkâĉЉ‰Qqq±V­Z¥I“&I’¢££µyóf=üðÃú÷ÿ÷JïÂ4jÔÈ»cÇŽ8p RRRáß¾}ûv-\¸P½{÷ÖM7ݤ÷Þ{OS¦Lñßß³gO­_¿^¿øÅ/´~ýzÝsÏ=!xÖæs;nð·ó€ú
-ŒÛqƒ7¸Ôo`ÜŽ¼Áí< ~ãvÜP®6ÊO=õ”5j¤W^yE§OŸV«V­4|øpÿý“'OVNNŽæÍ›§öíÛWìú§Òܹsõúë¯ëûï¿—$ÿe‡Rzzº<¨æÍ›WzÜ?üÃ?èå—_VÿþýÕ¹sgýó?ÿsžéõÅí¸UõŽ—•„žÛy@ýÆí¸Q¿ÞàvP¿q;nÔ¯7¸Ôo`ÜŽõ[¾iÓ¦Y™™™5•¥¢¢¢Zß•X´h‘þçþGÏ<óŒ“sD€rssÕ¨Q#âf˜úÄ-,,LÔïõ‰ú5õ‰ú5õ‰ú5U0ê×Õ_æ    €×Ð(    `C£    €
-2     64Ê     ØÐ(    `C£    €
-2     6ánô‹/¾ÐÜ8t|ûí·º|ù²Ú´iãöTªÕµkWõèÑ#¤Ç$n
-çFÜœF4õ{-âäAÃQ¿×"n¡A4õ{-âV=WåèàÁƒJNNvãðµÚºu«Z·n­nݺ¹=•*êܹs!OâÖ0nÅÍiäAÃP¿U#n¡A4õ[5âäAÃP¿U#nÕs¥Q–¤””effºuø}úé§Š÷ìü²²²ôÙgŸ¹rlâ87ãæ4ò pÔoÕˆ[萁£~«FÜB‡<õ[5âV=¾£    €
-2     64Ê     ØÐ(    `C£    €
-2     64Ê     ØÐ(    `C£    €
-2     64Ê     ØÑ(û|>ù|>5jÔH;wÖ†
-®Ù'==]Ÿ~ú©þïÿþO?ýéOýÛOž<©¤¤$EDD())I'OžôÔüÞyçýøÇ?Vxx¸:vì¨wß}×ñù¹¥!ërÅŒ3äóù<7¿+½zno¿ý¶ºwï®&
 Mš(..N[·n
-ÊÜMŒuöÊü6mÚ¤Ž;*""B>ø þüç?mž¡æTÜLªßµkתK—.jÒ¤‰zôè¡üüü ÌÝ$
-YçP¼#BqÞl
-Y—ŠŠ
-Íš5KíÚµSXXXPj8˜?‚yÞ`š†¬s(^ƒ‘¡8o6'þ¶lÙÒ³ó«jL¯ÅΈFY’,ËÒÅ‹•­‘#G^sEE…$iïÞ½JHHðoŸ4i’î¿ÿ~•––*))I“'OöÔüÒÓÓµ`Á?^¿ùÍoª|¬É]—+Û–/_îÉùY–%˲®ÙÍš5ÊÍÍUYY™Æ§!C†oòqz½2¿_þò—š?¾ÊÊÊ4iÒ¤ ½¾¸¥!õ{%vÁŒŸÓyµiÓ&åçç«´´TÓ§O×СCƒ6w“ºÎ¡z=t:BuÞl®Kff¦Ö­[§Í›7ëòåËA«á`ü\Åyƒi]çP½:¡:o¶†®‹eYÚ½{·FíÉùU7¦×âgL£,ýðnCXXå)/X°@>ŸO+V¬P||¼’’’ôÆoøßØºu«Æ¯¦M›*##C[¶lñÔüÚ·oï¬ýßד@ÖåÂ…JOO×êÕ«=9¿ê¬[·NwÝu—š6mªÔÔT5kÖ,˜S7Š“ëì•ù]ùApåß›7oí¤C и5oÞ\‘‘‘êß¿¿ŠŠŠ<7¿ª¬\¹RíÛ·÷Š´y›&uåë¡“yÊó†`d]–.]ª×^{Mݺuúk±“qåyƒiYçP¾zýüÀ-
-]—W_}UcÇŽõìü®ªó†ú0¦Qöù|ŠˆˆÐ„	´téRÿöqãÆé»ï¾ÓC=$˲”ššªo¿ýÖÿnDII‰Zµj%IjÙ²¥¾ûî;OÍoñâÅ2dˆ"""4lØ0-^¼8(ósK ëòÂ/(==]<ð€'çW›Ó§Oëç?ÿ¹æÎ¬©%Xëìöü–,Y¢Ñ£GëÖ[oÕæÍ›ƒöúâ–@×Ų,•––êĉêÚµ«ì©ùÕ6fÓ¦M5jÔ¨ëîõ8P
-]ç`¿:¡:o¶@×å믿V~~¾n¾ùfÝyçÚ¸q£§æWP7˜¦!ëŠ×C¯Ÿ¸¥¡ë²k×.µhÑBmÚ´ñäü®ªó†ú
-w{uUÝÛß¡¸rû¶ÛnÓüùó5nÜ8EEE©¸¸X­[·Ö™3gå©ù1B«V­Rjjªòóó5bÄýñÊÝèºÌ›7O–e)##ÿO0^_MöîÝ«´´4½òÊ+0`€s“5X0ÖÙIÎoРA4h$)??_ï½÷^ð'B
-Ûm·Ý¦—^zIÍ›7÷äüªóÂ…Ú°aƒ†ªcÇŽ97aC5dCñzèt„ê¼!ØrÞÔ§OeffjëÖ­9r¤¾ùæÏ̯:¡:o0MCÖ9¯‡^??pKC×eæÌ™ÊÉÉñìüªìó†ú2¦Q®ŽeYš8q¢ ÈÈH½ñÆZ¶l™ÿþ¾}ûjîܹš9s¦^ýuõéÓÇSóûöÛoÕ¨Q#ÿ—â‹‹‹C:?·Ô¶.W.i•ÜùaWÛüª³téRMŸ>]¿ûÝïôðÇ`¦ftC¥.ó³,K_~ù¥&Mš¤Q£F¹4ÓЪkÜJKKõë_ÿZqqqžœßÕžþyMŸ>]7ß|³***tþüùÌÖ\µ­³Û¯‡æÛç
-ÁVÛº¤¦¦Jª|Âë¥ùUÇíóÓÔ¶În¿zýüÀ-uY—;wª¼¼\ñññžœ_MÜ:o¨Ž1—^×d÷îÝJLLÔÙ³g¯ùín999*((P³fÍôÿñš3gާæ·páB3F7Ýt“ÆŽ«7Þx#äósKMëâ5ÍÏþ[ùì·G¥o¿ýV<òˆûÅ‹C>w“²Î^š_XX˜úôé£'žxBÓ¦MùüÜR—¸Ý~ûíÚ½{·Þzë-OÎïêÛwß}·zôè¡-Zè׿þµÖ¬Yòy›¦¦uöÂëa yà…ó†`«i]æÌ™£ììlEFFêùçŸwå—cyýçÂõ¢¦uöÂëa yp#äGmçÏ3gÎÔøñã]˜Ù77ϪbÄ'ʵ½+øŸÿùŸ’~x¸oß¾•î»ãŽ;´{÷î ÍMjØüì™ëðÖu©Ï8jÈüjú}¨,ëì$¯ÏÏ-^_—`Ì/==]éééÎLð:q#æA(΂­!ëÒ¶m[mnRðóêz~m®†¬s(^9«ZCÏŸ?üðàÌëŠ)n×Å'Ê     8…F     e     lh”    °¡Q    À†F     e     lh”    °	wëÀ………š={¶[‡¯ÑŸþô']ºtɳó+((PTT”+Ç&ns3nN#GýV¸…y8ê·jÄ-tÈ
 ƒÀQ¿U#nÕs¥QþÉO~¢sçÎéÀn¾VwÜq‡ÊËË=;¿¨¨(õèÑ#äÇ%n
-ãVÜœF4õ[5âäAÃP¿U#n¡A4õ[5âV=W常8ÅÅŹqh4 qƒD˜Š¸A"LEÜ ‘¦"næâ;Ê     ØÐ(    `C£    €
-2     64Ê     ØÐ(    `C£    €ãGùðáÃÊÍÍuzXàÀºçž{ê´/qóŽúÄÍiäwP¿f¢~!Q¿¦¢~!Q¿¦
-Fý:Ú(ÇÅÅ©¬¬ÌÉ!Ñ ÷ÜszõêUë~ÄÍ[ê7§‘ÞBýš‰ú…DýšŠú…Dýš*õëh£œ˜˜¨ÄÄD'‡D7H䁩ˆ$òÀTÄ
-y`*âvýã;Ê     ØÐ(    `C£    €
-2     64Ê     ØÐ(    `C£    €MÿŽò§Ÿ~ªE‹s. êaÏž=êÝ»wö¥~o¡~sQ¿€¹êS¿uj”uöìÙM
-€³•œœ\§ý¨_À[¨_À\Ô/`®ºÖ¯$ù¦M›feffyJ     x_VVßQ    ÀŽF     e     lh”    °¡Q    À†F     e     l|)))Ö£>êö<     pÝŽ;ôÿÓL9Ò7]â    IEND®B`‚
\ No newline at end of file
+
+”’’¢ÌÌÌ&Û¨¨¨pÝ.++Sdddk‡
+G]ÁP§°u#¶_£øýwS9ÎËênÿbÙÉ“'«¨¨ÈU\MÝgÙ²ezä‘Gôàƒ*((HëÖ­kÐNxx¸ŠŠŠ§sçÎiÁ‚
+ÚèÕ«—222\ÛïÚµK			״ϰuo@Â
+ÔÌdkPlêXͽ3K’&Mš¤)S¦4{ŸÞ½{k×®]Wí#$$DGu«ÿ={ö48eÏC]ÁP§°u³Ù~F±µ:v쨜œœ6ï׎>Ñv¨+xêV ®`Äk¯Q  €µŠ   0DP  €!‚"     `ˆ    CE   2ýs‹‹‹µxñb³›…***2üâx#ÔÜÕ’º2u
+w1ÿÁ
+V̦ňˆUVVêøñãf6¬¡C‡6»u…–p·®ÌF¢%˜ÿ`+æ?SƒbTT”¢¢¢Ìl ®à¨SXº‚ݸF   †Š   0DP  €!‚"     `ˆ    CE   2õs÷ï߯’’3›„8p`³J]¡¥Ü©+³Q§h)æ?XÁìùÏÔ XRR¢wÞyG0³Yø¨Ã‡«²²²Ù‚¦®ÐîÖ•Ù¨S´ó¬`Åügúw=0 at 3gÎ4»Yø ììl··¥®à®–Ô•Ù¨S¸‹ùV°bþãE   "(  ÀA   †Š   0DP  €!‚"     `ˆ    CE   "(  ÀA   †l
+ŠN§S[¶lÑÔ©S5zôhM™2E;vì°e,K—.ÕÑ£GU]]­Ù³g»–Ÿ:uJO=õ”F­§žzJ§N²e|pŸ7ÔUll¬ëí“7Ô)óŸ÷ñ†ºbþó.¶ÅÍ›7+//OÏ=÷œ¶oß®%K–èàÁƒ¶ŒÅétÊápèðáÃêÛ·¯kùªU«t×]wéwÞÑ]wÝ¥U«VÙ2>¸Ïꪰ°P………¶Œ	žÁê”ùÏûxC]1ÿy[ƒâÖ­[•’’¢ÐÐPuèÐA½{÷VJJŠký‘#G4cÆÅÅÅiÆŒ*++“Tûl$##C£G–$•——köìÙ=z´¦NªC‡5ê+66Vk֬ј1c4uêT}úé§’¤-[¶(66V;vìÐŒ3”””¤7ÞxÃõLgïÞ½š0a‚:uê¤	&hïÞ½V\#o¨+Àê”ùÏûxC]Á»Ø+**të­·6¹~É’%7nœÞ~ûm7N‹/v­»ýöÛ]§ÓÓÒÒtÿý÷ëÝwßÕìÙ³µtéRÃön¾ùfmݺU>ø –/_.Izøá‡µmÛ6
+4H………4h¶nÝêz¶SYY©®]»J’n¼ñF]¸pÁ”}‡u¼¡® o¨Sæ?ïã
+uïbkPìÑ£‡þñ4¹¾¼¼\cÇŽU—.]4fÌ•——»Ö9R~~µÃÿì³Ï´xñbÝwß}Z¸p¡Nœ8aØÞÏ~ö3uîÜYcÇŽuµ«x@ûöíSll¬öíÛ§ñãÇkëÖ­’¤ë¯¿^çΝ“$?^×_½)ûëxC]ÞP§ÌÞÇê
+ÞÅÖ 8~üx-Y²DeeeºråŠþõ¯iÉ’%®õAAAúóŸÿ¬K—.é½÷Þkð,Éßßßuû¶ÛnÓ‚ôÞ{ï©°°P†ýÕµµcÇW[………š0a‚^|ñEeffjܸq*,,Ôøñã%IƒÖ믿®Ë—/ëõ×_× Aƒ¬80‘7Ôà
+uÊüç}¼¡®à]:ØÙùĉåïï¯çŸ^_|ñ…zöì©)S¦¸Ö'''kéÒ¥Z±b…n½õÖ×YÔ÷ë_ÿZééézñÅuùòeI2<ÅýùçŸküøñêÑ£‡žyæ×òÒÒR=öØc:xð`£g̳fÍÒóÏ?¯ŸÿüçºýöÛõ›ßüÆŒ]‡…¼¡®ê_«Sw›—eÚo¨Sæ?ïã
+uÅüç].t¦¦¦^u£´?8#÷  	–IDAT´4•——7YPuV­Z¥þóŸš9s¦™c4Ell,…èa²³³åïïO]ÁT-©+???1ÿÁ̰‚ó¸
+   Cí&(ò¬V ®à
+¨SXºjÚMP  @Ë  `ˆ    CE   "(  ÀA   †lùf–ÇëÀvtm‹/¿üRW®\Q¯^½ìJ›¹óÎ;5`À€6퓺ò}vÔ•Ù¨SßÇüg=êªíØ8 O>ùDÑÑÑvtßæòóóÕ³gO…‡‡Û=”6Q\\¬ªªª6/hêÊ·ÙUWf£N}ó_Û ®ÚŽmßõÓìWÇøŠ?þXl7û›––¦ƒÚÒ7uå»ì¬+³Q§¾‹ù¯mPWm‡k  `ˆ    CE   "(  ÀA   †Š   0DP  €!‚"     `ˆ    CE   òŠ èp8äp8äïﯰ°0mÛ¶­Á:£í[cúôé:pà€¾ùæ
+6̵|óæÍ
+W§N¡üüüVµï.»÷·®ÿï·{òäI
+>\;wÖðáÃuòäÉVõë)ì>Î555Z´h‘úôé#??¿V·ï.»÷·©ºª³hÑ"ˏ7²ûqËÉÉQß¾}Ûýü×\ýzO:·CÝ»woUûîò¤ý5—'×–WEIr:ºté’–-[¦3fXÒGMMüüüô·¿ýMC†q-ß¼y³rrrTYY©Ù³g+!!Á’þë³sN§œNg£íçÿÿíÝMHTkÇñßè§”lÄËU`ˆMn!Ñ¥½,ZÔ¢ZFPá76‘)ºl“)dAô²’
+™FI®Z½@‹H1­
+¬¹‹Ëíf±£ž·™ù~V"Çó<¿çü{ú{æÌø÷ߪ¬¬Ôôô´*++uöìY[æå$7×ùòå˺{÷®z{{õíÛ7Ã5·šëJ’ž={¦k×®Ù2ŸTàæu{ðàz{{5==­sçÎéàÁƒ¶Œÿ3/ÖéBõ›¬¼°Îñx\CCC:~ü¸-ãÿÌyÍËËõ•4â233—ü³>ŸOMMMÊÎÎÖ¦M›422"IŠF£òù|êééQYY™ªªªÔÑÑñ£»¿wïžJKKå÷ûU[[«ììlK²˜áFÞDúúú‰Dä÷û‰DôðáÃ%ÏÍkÜXç®®.µ··«´´Ôñß$½TW³³³ª¯¯×­[·–<§táÆu»yó¦6nܨŒŒeffjýúõ–d1ÃKušÊÜ^çK—.éĉKžÃb¹÷W¹¹¹ÊÉÉÑîÝ»õîÝ»%ÏÍ.IÓ(ú|>eee©±±QK>φ
+4>>®S§N©¡¡A’‰D499©p8¬x<®p8¬‰‰‰ßºû>hÿþýêèèXV3¼÷W“““Z³f$)??_Ÿ>}Zò¼¼ÂÍu~ÿþ½úúú´råJÏ{)Ä.^¬«¦¦&ÕÕÕiÇŽKžOªsûºù|>ùý~544,k|³ÜΛ.¼°Î?V^^ž
+—•Å/äýU<×ôô´^¿~­Í›7;òŠåbýåöÌJ´ØYYYŠÅbÊÉÉ‘$Åb1ùýþ„ç©««ÓŠ+täȝ9sFÒügþû:??_W®\ÑÉ“'%IOŸ>ՁtñâEíÝ»×’Lq;¯‘@  ññq­]»V
+‹Îå5n®s PMMZZZÔ××§ºº:í۷Ϫh†¼XWŠÇãóΓŽÿi/ÄíëÇ533£û÷ïëðáÃzõê•%¹q;oºðÂ:Ÿ?^mmmËÎb†ò&RPP .(77×t§$ÍÅD¶oß®ææfÅb1Åb1577«²²2áñ7nÜÐÌÌŒzzzTRR"éßâ9}ú´úûû5::ª£G*ÿ¸¸]]]Ú³g:;;uèÐ!Gr%âDÞDjjjF5;;«h4ªp8li6/qbkkk%ý¿©¸ùÒ—›uõýû÷yÏçÐ$šçÄu‹D"—$eddèË—/öKÀÍ:M'N­óàà æææ´uëVÛ3-Äu555¥ææfƒAK2Y)éÅîîn=þ\*((Ðè診»»ÿöí[åçç+ª««ëÇ÷‡††TQQ¡ÉÉIåååÍû™cÇŽéãǏڹsçw&Åb1Û2-ĉ¼?¿ûêç¯ÛÚÚ400 U«VippPííí6$ô'Ö¹½½]mmmÊÉÉQcc£®_¿n[ž?q³®°tN\·²²2ƒA­^½Z­­­ºsçŽmyþÄÍ:M§úub¥ï&F"[2,†ꪰ°POž<ñä³ÚIñÒóBwŠ‹‹ÕÛÛkú\---jiiùíûÃÃÃ’¤p8ü۝2§ïpx5oQQ‘†††Líun¯óºuëÔßßozŒår;¯™GÜMüÛ×­¾¾^õõõ¦ÇX.·ó.ôÎÔTâö:KÒ£GL±\nçMæºJú;Š   °GZ5ŠÉй[)Ýòº%ÝÖ9Ýò¦Št»né–×-é¶Îé–WJ³F   æÑ(  À"   Ñ(  À"   Ñ(  Àk¸=<<¬ÖÖV·†wÔ›7oôõë×´É;00àÚ߁¦®R—›ue5ê4u±ÿ9ƒºrŽ+bII‰b±˜ÆÆÆÜÞqEEEš››K›¼@@[¶lq|\ê*µ¹UWV£NSûŸ3¨+ç¸Ò(ƒAOþák$7ê
+É€:…¨+Ø…g  `ˆF   †h  `ˆF   †h  `ˆF   †h  `ÈòÏQ|ùò¥nß¾mõi‘‚ÆÆÆT^^nêXê
+f-¦®¬FÂ,ö?ØÁŽýÏÒF1êóçÏVž)¬¼¼\Û¶mûãqÔÃl]Y:Åb°ÿÁvì–6Š¡PH¡PÈÊSÔ’u
+;PWpÏ(  À"   Ñ(  À"   Ñ(  À"   Ñ(  ÀéÏQ|ñâ…®^½jç\ À1###ª¨¨0u,û€T²˜ýÏT£
+…455µ¬I€—„B!UUU™:Žý@*1»ÿI&ÅêêjUWW/gN ”Øÿ ¤3žQ  €!E   ¢Q  €!E   ¢Q  €!E   ¢Q  €!_uuu|×®]nÏ   Òß߯ -‰:Ãàb…    IEND®B`‚
\ No newline at end of file

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/images/emmett.png
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/images/emmett.png	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/images/emmett.png	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,62 +1,66 @@
 ‰PNG
 
    
-IHDR  ^  ®   عn   bKGD ÿ ÿ ÿ ½§“    IDATxœíÝTõÂ?ð÷.	æC)Š×ÌRÂ@SD0=làGËÒt¡¨ŽZW44ó>¦Ï嗞˅cjiheˆ7‰õ”¥^J¬PyäÞ¼! ×Ԑùþá—‰
-Å™ýÌ¢ï×9œ–™ÙÏ|æÍøfv€Mçëë+ùûûƒˆˆ¬¯¤¤wÄÅÅi="¢;B||<ôZO‚ˆèNÃâ%"ŒÅKD$‹—ˆH0/‘`,^""ÁX¼DD‚±x‰ˆcñ	Æâ%"ì¶(ÞææfFMöm4ÑÜܬɾ‰¨gêVñ~úé§3fìíí1bÄ|ðÁ·´SNwKÏëLNN&L˜`6~ëÇï÷ÛѺ––ÄÅÅᡇ‚½½=yä¼÷Þ{íž§×ë1tèPìØ±C^7~üxäää¨z<Dt{ëVñ†††båÊ•hllD~~>òóó­5¯nÉÊÊ‚Á`?—$	’$u¸m뺶ëããã±oß>äååáßÿþ7öîÝ‹ƒ¶{^ss3233±dÉy¹Á`@VV–ºDD·µnï€pþüy;v÷ÝwvîÜ	 8|ø0F…–– 7Jêá‡Æ÷ߏ7ß|lw¥Ùöñwß}‡I“&ÉWÒ_~ù¥¼Mll,œœœ0hÐ dggcíÚµèß¿? _y–••ÁÝÝÝ¢cèÛ·/ñä“O¢ºº žžŽwß}£GF¯^½àîîŽíÛ·w:Æ AƒäÇîîîøê«¯º#ÝáºU¼yyyøßÿý_DFF⁐_ŽOš4	#GŽÄž={  _|ñFމ‘#G"11qqq¸|ù²Ù•fÛÇ/¾ø"/^ŒK—.!99.”÷Ù¯_?üë_ÿÂ{gçŸÎÎÎ8wî>øà¼öÚk €ºº:8::v9I’ÐÐЀªª*Œ5
-!!! €ýë_psspóÛvvv˜5k6nÜ(/wttÄÏ?ÿܝ‰èN·jÕ*éV|ûí·’³³³üù?ü M˜0A’$I
-—ŠŠŠ$I’¤;wJ¾¾¾Rß¾}¥5kÖHҍ¶5ë®»î’ È:NÞîúõëòv}.I’ô‡?üAª¯¯o7Çßï§­Ë—/K½zõ’$I’|ðA©²²²Óç¶>nii‘Š‹‹¥áÇËë.^¼(
-4¨Óýµ'uûï©S§põêUœ8qׯ_—×¹»»ÃÛÛ¹¹¹8}ú4üq À³Ï>‹#GŽ ¸¸III €^½záÿþïÿäçzzzbÛ¶mø÷¿ÿ
-I’ä[  ×›Oñ÷ŸÀĉQYYiñqÔ××ãÏþ3<== .ÄË/¿ŒS§Náúõë8}úôMŸ_SS#?>uê¼½½-Þ7Ñ]ÝÙø‰'žÀ“O>‰ªª*¸ºº"##Ãlýºuë0zôh³—â­/ٝ±zõj ÀâÅ‹1|øpüòË/$	|ð^yå¼üò˸rå
- túñŽÃd2ÉØö6AëcI’äǽ{÷Æc=&ߣþïÿþo¬_¿?þ8.\¸ ww÷v¿±ÑúÜÁƒ#55U^^\\,ß² "²„nÕªU’ZÿëI’ŠmÛ¶¡W¯^ªŒi‰_ý¡¡¡ÈÎζÏVF£;wîÄ]wuë{Ý¡âãã»wÅ{3:}úôÁ®]»„–.pãÖ…¥@³ýQÏ¥ZñvçÖ Ñì¶ø“a"¢ž„ÅKD$‹—ˆH0/‘`,^""ÁX¼DD‚Yôëd%%%0™LÖžQæëëÿ.·³¨x‹‹‹‘““Å#"º?~õõõê/ øøø ::ZÑĈˆnWiiioË{¼DD‚±x‰ˆcñ	Æâ%"ŒÅKD$‹—ˆH0/‘`,^""ÁX¼DD‚±x‰ˆ³éâuuuÕz
-DDª³JñšL&Ìœ9îîîÄ'Ÿ|bÝ˜é¬¤cbbðÝwß¡¹¹sçΕ—Ÿ?óæÍÈ#0oÞ<œ?Þês$"¬T¼+V¬@xx8¾ýö[dff¢¨¨È»±ˆ$IÐëõ8vìÆŽ+/‹‹ƒ··7¾ùæx{{#..N³9ѝÅ*ÅÛ¯_?ÔÔÔ ¢¢Drr²¼îĉ˜5kÜÜÜ0kÖ,TTT  ***0{öl¸¹¹µ»zýòË/1qâDäääàôéÓxæ™gä«é£GÊÛ»ººÊ333áêêŠÝ»wcæÌ™ƶmÛäõ_|ñÂÂÂààà€°°0|ñÅÖˆ‚ˆ¨«ï–-[ðã?býúõðóóÇ~(¯‹ŠŠ‚ÑhDyy9ŒF#¢¢¢äåsæÌAEEªªªäí?úè#¬]»[·nÅüùó±råJ„„„àĉX³f
-bbbäí«ªªäÇaaa8~ü8&Mš„ªª*Lš4	G•×744 ÿþ  '''466Z#
-"¢v,~?Þîx衇ðÖ[o *++‚9sæ  NŸ>
-£ÑˆÞ½{cÞ¼yˆ œ:u
-ÁÁÁ°··7+&&›7o†‡‡€WÆQQQraëtºçÐöª¹õñøñã±nÝ:¼ðÂèÛ·/êêêàì쌋/âÞ{ïU1"¢ÎYåŠwùòå8{ö,®]»†~ø---òºáÇcÏž=øå—_››777 €»»;víÚ…k×®™•‘‘¨¨(8p  0jÔ($%%ÉWÆgΜ Üu×]øé§ŸäçUUU!,,YYYÈË˃ÑhDUU^xá Àc=†ÌÌL\½z™™™xì±Ç¬Q;V)Þ€€ ,\¸HNN6ûÁUBBÞÿ}Œ3»víBbb¢¼<77<òˆÙÕª¿¿?¶oߎ7ß|[·nÅ_ÿúW|ôÑGðòò2»§ûì³ÏÂ`0˜=÷رcðòòBCCúõëg6Ç×_eeexôÑGQVV†Õ«W[#
-"¢vt«V­’ºú‰~||<ª««ù¿þ!"êDZZôz}—¿!oÛ@ADt;bñ	Æâ%"ŒÅKD$‹—ˆH0/‘`,^""ÁX¼DD‚©ú^
-ǏGii©šC ƍŸ›nÃó¬Å’ó¯;T-ÞÒÒR:tþþþjKw¸’’466vyâóü#k°ôüëÕߝÌ`0ðMÅIU­²n	ž¤¶îœ–â=^""ÁX¼DD‚±x‰ˆcñ	Æâ%"ŒÅKD$‹—ˆH0/‘`,^""ÁX¼DD‚õ¨âmnn†ÑhÔz]2hnnÖz¤2ž¤M‹W§Óu¸<77°··‡§§'
- 999˜0aB»í×­[g6Ö¹sç0yòd888`òäÉ8wî `ÿþýpssƒƒƒpá @KKÖ­[‡!C†@¯×Ëcµ³¢¢nnnxçwäu:z½C‡ÅŽ;ämǏœœ%ѐ <ÿH+6yÅ›››‹ììl466"""!!! €¬¬,³m¿þúklÞ¼ÙlÙÊ•+1eÊ444`Ê”)ˆŠŠ ,X° ÉÉÉhllÄk¯½&/‹‹Cvv68€ëׯC’$³ñŠŠŠ„-[¶à•W^‘—K’„ææfdffbÉ’%òrƒÁ€¬¬,Õò ±xþ‘µ©þîdjhûÝzÚ´iˆ ”••ÁÝÝ]^wåÊ„……aç͐—âĉèÝ»7"##1zôh 7®,€ß®$>ýôS @FF6mÚ$o×ÖöíÛ‘ššŠ‚‚¸¸¸t:çAƒɏÝÝÝñÕW_u÷°ÉFðü#k³É+ÞVçÏŸÇܹs‘’’ ¨««ƒ£££¼~ÕªUX°`üq³çÕÕÕaàÀ  ggg\¼x žžŽ?þñèׯ
+IHDR  †  ®   ”¡¾   bKGD ÿ ÿ ÿ ½§“    IDATxœíÝ}TTuâ?ð÷
+XTb¨«–j˜"Š‚éaÑÔµ0€Öꈡ[b¡+º[ºêÆ“žX8~qQË1Íç@Ïæ)F‰íŠú“M÷X
+’ù€ÜßÄ]>2À{gàý:‡ã̽—Ͻ÷Í•÷ܹ3ƒÎÓÓSòööQaa!zDGGk½-DDdbbb ×z#ˆˆÈ¼°ˆˆHÀb ""‹ˆˆ,""°ˆˆHÀb ""‹ˆˆ,""°ˆˆH i1ètºvMoºº:tzœŽ@]]&ë&"ê¬vƒN§Cff¦0mãÆŠü"oJ’¤N‘™™‰±cÇÊ÷u:üÕT}}=Ö¬YƒAƒA¯×Ëóëëë'žxÖÖÖ>|8>üðÃfãéõz<;vìç3¦YNDD–¢Ýg‰‰‰ò/î»wï⣏>R|£”žžƒÁ ß—$©ÅÂ‰ŽŽFFFŽ9‚{÷îÉËÄÄÄ`ÿþýØ·o~úé'ìÝ»G¾W’$ÔÕÕ!--
+K–,‘§¤§§›fLjˆL¬ÝÅàîîŽO?ý ðñÇcúôéÍ–i|4ýØcaß¾} €S§NÁÝÝ=zôµ¯[·½{÷†ƒƒƒüˆ¼q¾N§kqþ·ß~‹	&ÀÚÚC‡Å_|ÑlŠ‹‹áââÒæþ¤¦¦bÆ
+1b„°])))øÛßþ†#F gÏžpqqÁöíÛ[§ÿþòm|ùå—m®›ˆÈ,EEEIÆ ;wN7nœT__/5Júî»ï$ Í–½wïž”ŸŸ/=ñÄ’$IÒÈ‘#¥„„éÖ­[ÂxIIIÒÍ›7¥C‡I}ûö•§ßo¾‡‡‡´mÛ6éÖ­[ÒÁƒ¥¡C‡6[=¤ººº÷¡)+++),,LêÕ«—4dÈiÏž=;€üÕtœÆ¯ž={JŸ~ú©<ïîÝ»R=ŒH”ˆÈ¼DGGKí.I’$éÍ7ß”æÍ›'L—$IJHHüqI¯×K $N'IRÃ/ÚŸ~ú©Ùx÷îÝk6~Ó[šß£Gásã:šêׯŸtýúõV÷¡‘ƒƒƒ´ÿ~éÖ­[ÒþýûåòyüñÇ¥³g϶ú½·ëëë¥üü|éÉ'Ÿ”ç]»vMêß¿³u™»èèh©C¯JZ¾|9þïÿþo½õVKg øÛßþ†ÚÚZ|úé§òsö®®®HMMÅíÛ·…åõúûoBKóÝÜܰmÛ6üôÓO$	õõõÍ–7nΞ=Ûæ¾øùùŸ¾€…â÷¿ÿ=ÊËËqïÞ=œ;wî¾ãTVVÊ·ËËËáááÑæº‰ˆÌQ‡ŠaÒ¤I$	Ï>ûl³y˜;w.€’’yzZZÒÒÒЫ
 W¯N¿Šéïÿ;>úè#<úè£-¾Ò QPP ßoº\ÓÛ6l@||<ìììðöÛocëÖ­ €?ýéO˜8q"ž{î9ØÚÚâÅ_Äßÿþwa¯J
 
 
-äå?þø#
-ѧO¸¸¸`ïÞ½òXK—.ÅÊ•+;<éu:ììì0kÖ,lܸQ^îè舟þYH3<ÿÈZl¶xËÊÊàçç‡ÈÈH<õÔS €þýû£©©IÞ&%%+V¬hwOÌÉÉ	555 €ÚÚZ899 æÌ™ƒêêj\¾|Ó§OÇ< o?uêT\¼x›6mBxx¸¼ƒ"22²Ã—n’$¡¥¥X¾|¹¼¼©©	P3ŒçY“MoFFfÏžôôt„††ÊË'NœˆÊÊJùó––H’$ßkýïÔ©S‘œœŒ+W® 99òs$IÂÉ“'…Å‹¸ñr@‡?ÔðööÆÁƒôôôNçÜú
- N:ooï[>~ÒÏ?²6Íïñþþ'Ë’$aÑ¢E €3fÈË/]º„àà`˜L¦.Oª¤¤$FÜ{ï½ðööFvv¶Ù¾ŒÅ‹#:: °aÃ<ûì³xúé§1tèPlݺÕl<˜L&L›6
-õõõˆ‰‰i7^jjª¼}qq±ü²m<ÿHšïïzÛÕòùóç›]töœ|‡¶xÜûï¿ÅÅÅ7ÝÞÕÕgΜér,àÆOºÛ¾ô#ÛÄ󏴢ùowôêÕK¾z°e=aŽÔ}<ÿH-6y—ˆèvÆâ%"ŒÅKD$‹—ˆH0/‘`,^""ÁX¼DD‚©þ{¼%%%HHHP{Xºƒ™L¦›¾3W[<ÿHmÝ9ÿ,¥jñzzz¢±±gÏžUsXºÃ¹¸¸ÀÇǧËíxþ‘5Xzþu‡ªÅëëë___5‡$²Ï?ê)x—ˆH0/‘`,^""ÁX¼DD‚±x‰ˆcñ	Æâ%"LÕßã=~ü8JKKÕò¶1nܸ.	›ùuŽù)Ãü”±$¿îPõŠ·´´‡‚N§ãG›ÒÒR˜L&æÇü˜_ü°4¿îPý½âââÔ¶G‹GuuµEÛ2¿ö˜Ÿ2ÌO™îäg)Þã%"ŒÅKD$‹—ˆH0/‘`,^""ÁX¼DD‚±x‰ˆcñ	Æâ%"ŒÅKD$X*ÞææfFáû5hnn¾_µ1?e˜Ÿ2Ìï7š¯N§ëtyëG[999˜0a‚üyvv6FŽ	{{{xzz¢°° ››vËÛŽWQQ777¼óÎ;fûÔëõ:t(vìØ!o;~üxäää¨sÐ*b~Ê0?e˜ß­³É+^I’ IR»åYYY0òçùùù8pà °zõj¸ñ…
 ËÎÎFcc#"""b6NQQ‚‚‚°e˼òÊ+fûmnnFff&–,Y"/7ÈÊÊRù(­‡ù)Ãü”a~]SýÝɬ©¬¬îîîòçï½÷ àêÕ«°³³Ã!C Àì»Û´iÓ+¾}ûv¤¦¦¢   ...îkРAòcwww|õÕWj†f˜Ÿ2ÌOæ÷›U¼uuuptt4[ÖúòÃÉÉ	û÷ï7[wþüy̝;)))ò²¥K—bóæÍ~ÑZÇêÕ«öìÙ#/wttÄÏ?ÿ¬Öah†ù)Ãü”a~¿±É[
-éß¿?šššÌ–I’„Ë—/#--
-Ï?ÿ¼¼¼¬¬~~~ˆŒŒÄSO=%/?xð "##;|é!IZZZPPP€åË—ËË›šš0`À +‘XÌOæ§óûM*Þ‰'¢²²Rþ<22555  ½^K—. 2220{öl¤§§#44Ôlooo<xÑÑÑHOOït_­ãÀ©S§àíí­æ¡h‚ù)Ãü”a~¿ÑüVÃïò)I’Ù²ÖÇ’$!88&“Iq̘1ðôôDmm-ÆŒƒ]»v -Z ˜1c†<Në <<<`2™0mÚ4Ô××#&&Æl_ƒFjjª¼}qqq»ü¶‚ù)Ãü”a~·FÓâíè'Ÿ7[>þ|³ï€aaa»¥q]]]qæÌ™.Ÿ _ýµÙK[Áü”a~Ê0¿[§ùowôêÕÙÙÙÂ÷«Å>­ù)Ãü”a~¿éQ÷x‰ˆn,^""ÁX¼DD‚±x‰ˆcñ	Æâ%"ŒÅKD$˜ê¿Ç[RR‚„„µ‡íÑL&ÓMßI©-æ×óS†ù)ӝü,¥jñzzz¢±±gÏžUsØÏÅÅ>>>]nÇü:Æü”a~ÊXš_w¨Z¼¾¾¾ðõõUsÈ;
-óS†ù)ÃüÄá=^""ÁX¼DD‚±x‰ˆcñ	Æâ%"ŒÅKD$‹—ˆH0U÷øñã(--UsH›7nÜ8Õ~¹šù)Ãü”a~â¨Z¼¥¥¥Ø·oÆŽ«æ°6ëäÉ“hllTíÇü”a~Ê0?qT¯†±cÇ"<<\íamRVV–êc2?e˜Ÿ2ÌOÞã%"ŒÅKD$‹—ˆH0/‘`,^""ÁX¼DD‚±x‰ˆcñ	Æâ%"ŒÅKD$‹—ˆH0M‹W’$ìÙ³/¼ð¦OŸŽÐÐP|ú駪ï'))	gΜAss3"""äåµµµX¶l¦OŸŽeË–¡¶¶Võ}[“ÖùÈ=‘Öù™L&,X° Ó§OGxx8Ž=ªú¾­Iëü>ÿüs¼øâ‹=2?M‹777X³f
-öïߏÄÄD|óÍ7ªïG’$èt:œ<y#GŽ”—§¥¥áÑGž}ûð裏"--Mõ}[“Öù¡¨¨Hõý‰¢u~ÅÅÅxã7°oß>!66Võ}[“Öù•”” 11yyyxî¹çðÖ[o©¾okQýÝɺãã?Fll,\]] ÷ß?¢££åõ•••HLLDuu5†
-†˜˜¸¹¹!   O?ý4òòòðÙgŸ¡ººIII¨¬¬Ä}÷݇èèhŒ={öìÁ¦M› Àì;ñ‡~ˆ¢¢"=z™™™°··Ç3Ï<ƒ°°0±(¤u~=Öù­]»V^6aÂìØ±CБ«Cëü^ýu À¯¿þ
-½^gggG¯Œ¦W¼5556lX§ëñÄO //O<ñäu#FŒ¿ñññ˜={6òó󁤤$ Àܹs±wï^xyy¡¨¨^^^øøãåÒhllD¿~ý  }ûöÅ¥K—¬u¨V¡u~=­äWWW‡µk×béÒ¥V8Jë±…ü0cÆlܸ+V¬°Ò‘ªOÓ+ށâÿøzè¡×WWWcÖ¬YpppÀÌ™3ñöÛoËë¡×ßø¾qúôi$$$È_XN f÷[aÙ²e
+BRR’<=??AAAÚG""­è¢¢¢¤®ø§=ïÞ½‹ùóç###Cõuàã?F=T_7QgÄÄÄ ËþæêÙ³§&¥ @³õ)‰ADD	XDD$`1‘€Å@DD	XDD$0ê}………»ˆ‰ˆÈòxzzÂÛÛ»ÍåŒ*†üü|dffbüøñÞ0""Rß©S§pýúuåŠ ƏˆˆˆNmi#99Ùèeyˆˆ,""°ˆˆHÀb ""‹ˆˆ,""°ˆˆHÀb ""‹ˆˆ,""˜u1899i½	DDÝŽIŠ¡   Ó¦Mƒ‹‹|}}ñé§Ÿšb5‚ΔHdd$¾ýö[ÔÕÕaöìÙòô+W®`îܹ:t(æÎ‹+W®(±©DDfÍ$Ű|ùr„„„à›o¾AZZòòòL±ÅH’½^’’Œ5Jž
+|ýõ×ððð@tt´†[ID¤“CïÞ½QYY‰²²2ôíÛ			ò¼Ó§OcúôépvvÆôéÓQVV (++ÃÌ™3áììÜìÑÿ_|qãÆ!33çΝÜ9s䳑“'OÊË;99µxæàä䄸¸8¸ººÂÇÇ_}õ  --
+NNNصk¦M›†ÀÀ@lÛ¶Mãÿø‚ƒƒaccƒàà`üãÿ0E\DDfÅ$ŰeË\ºt	k×®…——vïÞ-ÏG@@ JKK€ððpyúK/½„²²2\¸pA^þ“O>ÁêÕ«±uëVÌ›7+V¬@PPNŸ>wÞy‘‘‘òò.\¾·©âĉxíµ×°råJ @pp0N:…	&àÂ…˜0aNž<)Q]]>}ú  ìííQSS£|XDDfÆ$ÅðÄO`ݺuسg²²²ð—¿üEžwîÜ9àÀܹsQ^^ (//G`` ¬­­…±"##ñ§?ý	®®® Î,ÂÃÃ1lØ0ãÿý¿ÿgÔ6Í™3½zõ¼yópîÜ9 
+g£GÆñãÇáää„ãǏc̘1øðà <òªªª  ×®]ÃÃ?ܹ`ˆˆ,€IŠaÙ²e¸xñ"îܹƒÿûߨ¯¯—ç=ùä“ÈÎÎÆÏ?ÿŒ¬¬,8;; \\\°sçNܹsG+55ááá8rä àé§ŸF||¼|fqþüy @=ðÃ?´ºMÙÙÙ¸uë²³³ñÔSOh8ÃFzz:öíÛ‡€€ \¸p¯¾ú* à
 ÙgŸEZZnß¾´´4<ûì³Ê…DDd¦LR>>>X¸p!\]]‘ \´ÅG}„‘#GbçΝˆ‹‹“§geeaøðáÂuooolß¾þóŸ±uëVüõ¯Å'Ÿ|wwwášÂË/¿ƒÁÐê«“._¾Œ1cÆ --MØž’’¸»»£ºº½{÷¾gåÊ•(..Æ3Ï<ƒââb¬ZµJ±ŒˆˆÌ•.**JjëÕ6111¨¨¨°Ø?íéääÔêµ"¢î 99z½¾ÍWWÆÄĘ÷܈ˆH}Ý¢x¶@Dd¼nQDDd<	XDD$`1‘€Å@DD	z(9Ø©S§PTT¤äD&1zôhŒ?þ¾Ëðx&KaÌñÜŠCQQŽ;ooo%‡%RTaa!jjjÚüÄã™,±Çs{(Z `0ømȬ5~Ä‹1x<“¹kÏñl,^c ""‹ˆˆ,""°ˆˆHÀb ""‹ˆˆ,""°ˆˆHÀb ""‹ˆˆ[uuuÐz3Ú€ºº:­7ƒÌg2'šƒN§kqzVV\]]amm
+777äææ6[&33cÇŽm6}Íš5¸—/_ÆÄ‰accƒ‰'âòåË €ƒÂÙÙ666ðññÁ÷ß ¨¯¯Çš5k0hÐ èõzy¬¦c–••ÁÙÙ|ð<O§ÓA¯×cðàÁرc‡¼ì˜1c™™ÙÞhÈñx¦®Â,ϲ²²‘‘šš„††"((¨Ù2ééé0´'N`óæÍ´+V`Ò¤I¨®®Æ¤I“ X°`PSSƒ?üáòôèèhdddàÈ‘#¸wï$IÆËË˃¿¿?¶lÙ‚7ÞxCž.Iêêꐖ–†%K–ÈÓ
+ÒÓÓ;•Y6ÏdiÿtU%4}Dâçç‡õë×7[¦¸¸...òý[·n!88ü1|||äé¹¹¹8}ú4lmm†#F hx$üï‘ÓáÇ ©©©Ø´i“¼\SÛ·oGRRrrràèèØêö÷ïß_¾íââ‚/¿üҘݦ.ŠÇ3Y³<chtåÊÌž=‰‰‰ÍæUUUÁÎÎN¾…à¹çžk¶\ß¾} ¸ví  %%o¾ù&z÷œyú¥K—››‹x ŽŽŽØ»w¯<ÖÒ¥K±bÅŠÿét:XYYaúô騏q£<ÝÎÎ?þøcÇC .ƒÇ3Y
+³-†ââbxyy!,,/¼ðB³ù}úôAmm­|?11Ë—/oöª½½=*++ W¯^…½½= ॗ^BEEnÞ¼‰)S¦à±Ç“—Ÿ<y2®]»†M›6!$$D^ÇÑ£GÖâ©´$I¨¯¯GNN–-[&O¯­­Å£>ÚÙ8ÈÂñx&Kb–ÅššŠ™3g"%%óçÏoq™qãÆáìÙ³òýúúzH’$?‡ÚøïäÉ“‘€[·n!!!¾¾¾ò÷H’„3gÎ <<‹/Ðpª Å‹t8zô("""’’Òêö7þÇ€òòrxxx´kÿ©káñL–Fók¿~%‡$IX´h `êÔ©òô7n§Ú(((hó G@@ ~øaxxx ##CXxñbDDD  6lØ€—_~³fÍÂàÁƒ±uëVa<WWWÀÏÏׯ_Gddd³ñ’’’äåóóó[¼ØH]gê
+4-†_¿B¢­éMÍ›7¯ÕG_M¿ÿñÇÇñãǍ^ÇÀ‘ŸŸß坜œpþüy£¶÷ĉ©8u]<ž©«ÐüŒ¡£zöì)?Z2g–°¤=ÏdNÌòi‡Å@DD	XDD$`1‘€Å@DD	Caa!bcc•–H1÷ý4Ѧx<“¹kÏñl,E‹ÁÍÍ
+555¸xñ¢’Ã)ÊÑÑãǏos9Ïd	Œ=žÛCÑbðôô„§§§’Ci†Ç3uW¼Æ@DD	XDD$`1‘€Å@DD	XDD$Pô}§NBQQ‘’Cv;£GnóÍ*̹ó˜³:˜³:ŒÉ¹=-†¢¢";vÞÞÞJÛm¢¦¦¦Í0sîæ¬æ¬csnÅ?+É`0 ::Zéa»…˜˜TTTµ,sî8æ¬欎öäl,^c ""‹ˆˆ,""°ˆˆHÀb ""‹ˆˆ,""°ˆˆHÀb ""‹ˆˆ[uuuP}½¨««S}½ZaÎê`Îê`ÎÆÑ´t:]«Ó¿Z“™™‰±cÇÊ÷3220lØ0X[[ÃÍÍ
+¹¹¹ €¬¬,¸ºº6›Þtì²²28;;ãƒ>Ö¯×ë1xð`ìØ±C^v̘1ÈÌÌìøNk€9«ƒ9«ƒ9›žYž1H’I’î»Lzz:ƒ|ÿÀ8r䪫«±jÕ*høgdd ¦¦¡¡¡
 
-Â=÷܃úúz899¡¡¡÷ÜsUŽÓZ´Î¯§³…ü¾ÿþ{¬_¿,À¤I“Ô?H+²…üŠŠŠpõêU9rqqqxÿý÷Õ?P+дxƒ‚‚˜˜ˆ+VÀÕÕ.\ÀŽ;ä—+C‡ÅgŸ}†éÓ§ãoû›ÙwW;;;ùñÃ?Œ   888ÈË‹ŠŠðöÛoã±ÇCŸ>}ðÉ'Ÿàµ×^“׏?»wïÆ‹/¾ˆÝ»wÃËËKÀQ«Gëüz:­óËÏÏǻヒիWc„	ŽX]Zç·iÓ&<÷Üs¸ûÓépùòeG­M‹wÞ¼y°³³ÃúõëqáÂ4¡¡¡òú¨¨($%%!%%Æ
-3»ÔÖŸþô'$''ã/ù®]» òË‘ŠŠ
-,Z´ß|óM»+ÚÅ‹cýúõxòÉ'1bļñÆV:RëÐ:¿Ž®HzÒm­óÛ¸q# ˜›ŸŸ»ï¾[Õã´­ósuuExx80|øp¬Y³ÆJGª>ݪU«¤¸¸¸›nêêêNƒk•––†þóŸwÔÿ:ÄÎήË\,Åü”a~Ê0?eÒÒÒ ×ëaIŸò(ˆˆcñ	Æâ%"ŒÅKD$‹—ˆH0/‘`,^""ÁX¼DD‚iò—k'OžDyy¹»¶Ø¨Q£0vìX­§Ñ!æ§óS†ù)§Iñ–——ãÛo¿…¿¿¿»ïRII	šššlöÇü”a~Ê0?å4{¯ƒÁÐåŸÖi%>>Þ*oè¬&æ§óS†ù)Ã{¼DD‚±x‰ˆcñ	Æâ%"ŒÅKD$‹—ˆH0/‘`,^""ÁX¼DD‚±x‰ˆcñ	Ö#ŠW§ÓA§ÓÁÎÎîîîØ»wo»m.\ˆòòrüúë¯ðóó“—Ÿ;w“'O†ƒƒ&OžŒsçΉœºMP’_«uëÖA§Ó‰˜®ÍQ’_nn.<<<`ooOOOŠœºMP’_KKÖ­[‡!C†@¯×ß6ç`(^ $	W¯^ņ
-ðÒK/µ[ßÒÒ½^#GŽ`âĉòò•+WbÊ”)hhhÀ”)S%rÚ6ãV󀯿þ›7o5U›t«ùåææ";;ˆˆˆ@HHˆÈiÛŒ[Í/..ÙÙÙ8pà ®_¿I’DNÛjzLñ¶²³³3û<99:Û¶mØ1càï”ù;caa!"##Ñ»woDFF¢  @‹iÛŒîæwåÊ„……açΝZL׿t7¿œœŒ=½{÷Æ´iÓðÿñZLÛft7¿ŒŒlذ£G¾m®vT¼:xõÕW‘žž./ŒŒD]]!IQ[[+g¬««ÃÀ ÎÎθxñ¢&ó×Ú­æ·jÕ*,X° ?þ¸VS·	·š_«óçÏcîܹHII=u›p«ùýøã(,,DŸ>}àââÒámŠžH³÷ãí®Î^b´ý.ØúØÙÙ©©©ˆˆˆ€““jjj0hÐ ÔÖÖÂÉÉIÈ|mÍ­æ—’’I’°bÅ
-y›Ûåå^wÜj~ PVV£Ñˆ·ÞzO=õ”õ'kƒ”üû:u*âããQXXˆà¿þë¿„ÌÙšzÌog$IÂòåËQ\\Œcǎᥗ^‚$IòI?uêT$''ãÊ•+HNNF`` Æ3¶-]å×ÒÒI’ä8wbéÞLWùedd`öìÙHOOGhh¨Æ³µ=]å7mÚ4 ¿•òír»¡Ç/ >|~~~¨««CÿþýÍÖ%%%Ád2áÞ{ïÅ¡C‡°aÍfi»n–uífù-Z´?ýôf̘!ÿt¿©©I£™Ú¦›å·aÃ$%%ÁÑѯ¾ú*¶nݪÑ,ÕÕ#n5tu•URR lwEûàƒâðáÃV›[O $¿îŒs»R’ߝšY[Jò»ÿþûQ\\l­©i涸â%"êIX¼DD‚±x‰ˆcñ	Æâ%"ŒÅKD$‹—ˆH0/‘`šýEII	´ÚýM™L&›Oæ§óS†ù)£Iñ>òÈ#hjjByy¹»ï’““ÆŽ«õ4:Åü”a~Ê0?å4)^OOOxzzj±ëÛóS†ù)Ãü”ã=^""ÁX¼DD‚±x‰ˆcñ	Æâ%"ŒÅKD$‹—ˆH0Տ÷»ï¾CVV–ÚÃÚ¤òòrxyy©:&óS†ù)ÃüÄPµx===ÑØØ¨æ6ÍËË>>>ªÇü”a~Ê0?qT-^___øúúª9ä…ù)Ãü”a~âð/‘`,^""ÁX¼DD‚±x‰ˆcñ	Æâ%"ŒÅKD$˜Å¿Çû÷¿ÿiiiÖœQUZZ
-???‹¶µ¨x}}}Q__¯hRDD·3___øûû[´­EÅk0`0”̉ˆˆþ?Þã%"ŒÅKD$‹—ˆH0/‘`,^""ÁX¼DD‚±x‰ˆ³è÷xKJJ`2™¬="¢ÍÒ?¢°¨x‹‹‹‘““£ÙÿŸˆˆÈÖ?~õõõê/ øøø ::ZÑĈˆnWÝy/Þã%"ŒÅKD$‹—ˆH0/‘`,^""ÁX¼DD‚±x‰ˆcñ	Æâ%"ŒÅKD$˜M¯«««ÖS "RUŠ×d2aæÌ™pwwG`` >ùäkìÆLg%ƒï¾ûÍÍ͘;w®Ùö­DD"Y¥xW¬Xððp|ûí·ÈÌÌDQQ‘5vcI’ ×ëqìØ1Œ;V^^UU…ªª*ÍæEDw.«o¿~ýPSSƒŠŠ
-8ÉÉÉòº'N`Ö¬YpssìY³PQQ ¨¨¨ÀìÙ³áææÖî*ôË/¿Äĉ‘““ƒÓ§Oã™gž‘¯¦=*oßö
-633®®®Ø½{7fΜ‰àà`lÛ¶W¸D¤9«ï–-[ðã?býúõðóóÇ~(¯‹ŠŠ‚ÑhDyy9ŒF#¢¢¢äåsæÌAEE…Ù•èG}„µk×bëÖ­˜?>V®\‰œ8qkÖ¬ALLŒ¼}۫ذ°0?~“&MBUU&Mš„£Gò*—ˆ4gñûñvÇC=„·Þz PYY‰Ì™3 púôiFôîÝóæÍCll, àÔ©S†½½½ÙX111ؼy3<<< ܸ2ŽŠŠ’[§Óu8‡¶W¶­ÇuëÖá…^Pñh‰ˆºÇ*W¼Ë—/ÇÙ³gqíÚ5üðÃhii‘×
->{öìÁ/¿ü‚ÜÜ\¸¹¹ ÜÝݱk×.\»vÍl¬ŒŒDEEáÀ €Q£F!))I¾2>sæ à®»îÂO?ý$?¯ªª
-aaaÈÊÊB^^ŒF#ªªªXºD¤9«o@@ .\$''#..N^—€÷ßcÆŒÁ®]»˜˜(/ÏÍÍÅ#<bvµêïïíÛ·ãÍ7ßÄÖ­[ñ׿þ}ô¼¼¼Ìîé>ûì³0fÏ=vì¼¼¼ÐÐЀ~ýú™Í± %äë  IDATísùÛ
-D$’nÕªURÛbìH||<ª««ù¿þ!"êDZZôz=,éS›þ
-"¢Û‹—ˆH0/‘`,^""ÁX¼DD‚±x‰ˆcñ	Æâ%"LÕ÷j8~ü8JKKÕ’ 0nÜ8øøøÜtžd-–œÝ¡jñ–––âСCð÷÷WsXºÃ•”” ±±±ËŸçYƒ¥ç_w¨þîdƒ¡Ë?™#êŽÖ?Y·Ï?R[wÎ?Kñ/‘`,^""ÁX¼DD‚±x‰ˆcñ	Æâ%"ŒÅKD$‹—ˆH0/‘`,^""ÁzTñ677Ãh4j=.F477k=
-RÏ?R‹¦Å«Óé:\ž››ØÛÛÃÓÓ……… €œœL˜0¡ÝöëÖ­3ëܹs˜<y20yòdœ;w °ÿ~¸¹¹ÁÁÁ¸pá  ¥¥ë֭Ð!C ×ëå±ÚŽYQQ777¼óÎ;ò:N½^¡C‡bÇŽò¶ãǏGNNŽ’hH ž¤›¼âÍÍÍEvv6 @VVƒÙ¶_ý56oÞl¶låÊ•˜2e
-0eÊDEE ,X€ääd466âµ×^“—ÇÅÅ!;;Àõë×!I’ÙxEEE
+ÆÉË˃¿¿?¶lÙ‚7ÞxC؆ºº:¤¥¥aÉ’%òtƒÁ€ôôtöR{ÌYÌYÌY9ŠºªZŠ‹‹áââ"ßÿðà ·o߆••
+ BKûùùaýúõòýíÛ·#))	999pttlu]ýû÷—o»¸¸àË/¿Tj7ÌsVsVs6ŽÅCUUììì„i§yööö8xð 0ïÊ•+˜={6åiK—.ÅæÍ›[üá6ŽÕ³gOdggËÓíììðã?*µf9«ƒ9«ƒ9Ç,ŸJ2FŸ>}P[[+L“$	7oÞDrr2^yåyzqq1¼¼¼†^xAž~ôèQ„……µxŠ'Iêëë‘““ƒeË–ÉÓkkkñ裏š`ÌsVsVs6ŽÅøqãpöìYù~XX*++ z½7nÜ  ¤¦¦bæÌ™HIIÁüùó…1<<<pôèQDDD %%¥Õu5Ž åååðððPrWÌsVsVs6ŽæO%ýú’$	Óoÿú¢R`` 
 
-–-[ðÊ+¯ÈË%IBss3233±dÉy¹Á`@VV–jyX<ÿÈÚTw25´ýn=mÚ4ÄÆÆ ÊÊÊàîî.¯»rå
-°sçNÈËqâÄ	ôîÝ‘‘‘=z4€WÀoWŸ~ú)  ##›6m’·kkûöíHMMEAA\\\:ó AƒäÇîîîøê«¯º{Ød#xþ‘µÙäo«óçÏcîܹHII ÔÕÕÁÑÑQ^¿jÕ*,X° ?þ¸Ùóêêê0pà@ €³³3.^¼ HOOÇÿøGôë×òòü………èÓ§\\\°wï^y¬¥K—båÊ•žô:vvv˜5k6nÜ(/wttÄÏ?ÿ¬N¤žd-6[¼eeeðóóCdd$žzê) @ÿþýÑÔÔ$o“’’‚+V´»'æä䄚š @mm-œœœ  sæÌAuu5._¾Œéӧぐ·Ÿ:u*.^¼ˆM›6!<<\ÞÇÁƒÙáK7I’ÐÒÒ‚‚‚,_¾\^ÞÔÔ„¨	Æó¬É&‹7##³gÏFzz:BCCåå'NDee¥üyKK$I’þwêÔ©HNNÆ•+WœœŒÀÀ@ù9’$áäÉ“ˆŠŠÂâÅ‹Üx9	 Ãjx{{ãàÁƒˆŽŽFzzz§sný‡ §N‚··÷-?i‹çY›æ÷xÿ“eI’°hÑ" ÀŒ3äå—.]Bpp0L&S—'URRŒF#î½÷^x{{#;;Ûl_ƒÆâÅ‹
- ذaž}öY<ýôÓ:t(¶nÝj6ž‡‡L&¦M›†úúzÄÄÄ´/55UÞ¾¸¸XþÙ6ž¤M‹÷÷?½íjùüùóÍ®@:{΃>ˆÃ‡[<îý÷ߏâââ›nïêêŠ3gÎt9pã'Ým_ú‘mâùGZÑüŠ·;zõê%_=زž0Gê>ž¤›¼ÇKDt;cñ	Æâ%"ŒÅKD$‹—ˆH0/‘`,^""ÁTÿ=Þ’’$$$¨=,ÝÁL&ÓMß™«-ž¤¶îœ–Rµx===ÑØØˆ³gϪ9,Ýá\\\àããÓåv<ÿÈ,=ÿºCÕâõõõ…¯¯¯šCYŒçõ¼ÇKD$‹—ˆH0/‘`,^""ÁX¼DD‚±x‰ˆcñ	¦êïñ?~¥¥¥jyÛ7n\—¿„Íü:Çü”a~ÊX’_w¨zÅ[ZZŠC‡A§Óñ£ÍGii)L&óc~̯~Xš_w¨þ^
-ƒqqqjÛ£ÅÇÇ£ººÚ¢m™_{ÌOæ§Lwò³ïñ	Æâ%"ŒÅKD$‹—ˆH0/‘`,^""ÁX¼DD‚±x‰ˆcñ	Æ
 â%"¬Goss3ŒF£ðýF477߯ژŸ2ÌOæ÷M‹W§Óuº¼õ£­œœL˜0Aþ<;;#GŽ„½½=<==QXX ÈÍÍ…‡‡G»åmÇ«¨¨€››Þyç³}êõz:;v쐷?~<rrrÔ9h1?e˜Ÿ2ÌïÖÙä¯$I$©Ýò¬¬,ùóüü|8p 
-
-
-X½z5‚ƒƒÜøÂegg£±±		1§¨¨AAAزe^yå³ý677#33K–,‘—dee©|”ÖÃü”a~Ê0¿®©þîdÖTVVwwwùó÷Þ{ põêUØÙÙaȐ! `öÝmÚ´iˆ•?ß¾};RSSQPP —N÷5hÐ ù±»»;¾úê+µC3ÌOæ§óûM*Þºº:8::š-k}ùáää„ýû÷›­;þ<æÎ‹””yÙÒ¥K±yóæ¿h­cõêÕ{öì‘—;::âçŸVë04Ãü”a~Ê0¿ßØä­†ÎôïßMMMfË$IÂåË—‘––†çŸ^^^VV???DFFâ©§ž’—<x‘‘‘¾ô$	---(((ÀòåËååMMM0`€ŽH,æ§óS†ùý¦GïĉQYY)‰šš €^¯Ç¥K—  ˜={6ÒÓÓj6†··7<ˆèèh¤§§wº¯ÖqàÔ©SðööVóP4Áü”a~Ê0¿ßh~«á÷?ù”$ÉlYëcI’“É$‡8fÌxzz¢¶¶cÆŒÁ®]»  ‹- ̘1C§õ‹
- 0™L˜6mêëëc¶¯Áƒ#55UÞ¾¸¸¸Ý
-~[Áü”a~Ê0¿[£iñvô“Ï›-Ÿ?¾ÙwÀ°°0„……ÝÒ¸®®®8sæL—Ï€¯¿þÚ쥋­`~Ê0?e˜ß­ÓüŠ·;zõê…ììláûÕbŸÖÀü”a~Ê0¿ßô¨{¼DD·/‘`,^""ÁX¼DD‚±x‰ˆcñ	Æâ%"Lõßã-))ABB‚ÚÃöh&“é¦ï¤Ôókù)Ãü”éN~–Rµx===ÑØØˆ³gϪ9lçââŸ.·c~c~Ê0?e,ͯ;T-^___øúúª9ä…ù)Ãü”a~âð/‘`,^""ÁX¼DD‚±x‰ˆcñ	Æâ%"ŒÅKD$˜ª¿Ç{üøq”––ª9¤Í7nœj¿\Íü”a~Ê0?qT-ÞÒÒRìÛ·cÇŽUsX›uòäI466ªö…c~Ê0?e˜Ÿ8ª¿WÃØ±c®ö°6)++Kõ1™Ÿ2ÌOæ'ïñ	Æâ%"ŒÅKD$‹—ˆH0/‘`,^""ÁX¼DD‚±x‰ˆcñ	Æâ%"ŒÅKD$˜¦Å+IöìÙƒ^xÓ§OGhh(>ýôSÕ÷“””„3gΠ¹¹òòÚÚZ,[¶Ó§ODzeËP[[«ú¾­Iëü䏞HëüL&,X€éÓ§#<<GU}ßÖ¤u~Ÿþ9^|ñÅ™Ÿ¦Å›››‹‚‚¬Y³û÷ïGbb"¾ùæÕ÷#It:Nž<‰‘#GÊËÓÒÒð裏bß¾}xôÑG‘––¦ú¾­IëüŠŠŠPTT¤úþDÑ:¿ââb¼ñÆØ·o‚‚‚«ú¾­IëüJJJ˜˜ˆ¼¼<<÷Üsxë­·Tß·µ¨þîdÝññÇ#66®®® €ûï¿ÑÑÑòúÊÊJ$&&¢ººÆ
-CLLÜÜÜ€§Ÿ~yyyøì³ÏP]]¤¤$TVVâ¾ûîCtt4F={ö`Ó¦M `öøÃ?DQQŽ=ŠÌÌLØÛÛã™gžAXX˜Ø Ò:¿žNëüÖ®]+/›0avìØ!èÈÕ¡u~¯¿þ: à×_…^¯‡³³³À£WFÓ+Þšš6¬Óõ‰‰‰xâ‰'——‡'žx			òº#FÈ_ŒøøxÌž=ùùùˆˆˆ@RR `îܹػw/¼¼¼PTT///|üñÇri466¢_¿~ €¾}ûâÒ¥KÖ:T«Ð:¿žÎVò«««ÃÚµk±téR+¥õØB~˜1c6n
 ܈+VXéHÕ§éïÀñü=ôP‡ë«««1kÖ,888`æÌ™xûí·åuÐëo|ß8}ú4ä/¬N§ ³{­ƒ‚‚°lÙ2áž{îA}}=œœœÐÐЀ{î¹Ç*Çi-Zç×ÓÙB~ßÿ=Ö¯_`Ò¤Iê¤ÙB~EEE¸zõ*Ž9‚¸¸8¼ÿþûê¨hZ¼AAAHLLÄŠ+àêêŠ.`ÇŽòË•¡C‡â³Ï>ÃôéÓñ·¿ýÍ컫üøá‡FPPäåEEExûí·ñØc¡OŸ>øä“OðÚk¯ÉëǏÝ»wãÅ_ÄîÝ»áåå%à¨Õ£u~=ÖùåççãÝwßÅêÕ«1aÂG¬.­óÛ´iž{î9Ü}÷ÝÐét¸|ù²€£V‡¦Å;oÞ<ØÙÙaýúõ¸pá
-„ÐÐPy}TT’’’’’‚aÆ™Ý?jëOú’““ñ—¿ü×®] ùåHEE-Z„o¾ù¦ÝíâÅ‹±~ýz<ùä“1bÞxã
-+©uh_GW$=é6„Öùmܸ ÌÆÍÏÏÇÝwß­êqZ‹Öù¹ºº"<<
-
-
->|8Ö¬Yc¥#UŸnÕªUR\\ÜM7ŠGuuu§ÁµJKKÃ?ÿùÏ;êbgg×e.–b~Ê0?e˜Ÿ2iiiÐëõ°¤OùDD‚±x‰ˆcñ	Æâ%"ŒÅKD$‹—ˆH0/‘`,^""Á4ù˵“'O¢¼¼\‹][lÔ¨Q;v¬ÖÓèóS†ù)Ãü”Ó¤xËËËñí·ßÂßß_‹Ýw©¤¤MMM6û…c~Ê0?e˜Ÿrš½WƒÁ`èòOë´o•7tVóS†ù)Ãü”á=^""ÁX¼DD‚±x‰ˆcñ	Æâ%"ŒÅKD$‹—ˆH0/‘`,^""ÁX¼DD‚±x‰ˆëÅ«Óé Óé`ggwwwìÝ»·Ý6.Dyy9~ýõWøùùµ{®N§9e›¢V~wj†JòËÎÎÆÈ‘#aooOOOŠœºMPóüsvv9u«éÅ ’$áêիذa^zé¥vë[ZZ ×ëqäÈLœ8Ñìy’$‰œªMºÕüZŸ{§çx«ùåççãÀhhhÀêÕ«,rÚ6Cé¿_I’pøða¼üòË"§m5=¦x[ÙÙÙ™}žœœN‡mÛ¶a̘1ð÷÷GJJÊ{uÖ•[ɯoß¾pttÄ“O>‰êêjÑS¶)ÝÍï½÷Þðaà×ëagg‡!C
 †h1m›¡äßïÿüÏÿ`É’%¢¦jU=¦xu:ðꫯ"==]^‰ºº:B’$¢¶¶ö޾:ëÈ­æ'IPUU…Q£F!$$D«CД’óO§Ó¡wïÞ7{îDé¿ß/¿üýû÷ÇàÁƒEOÝ*4{?Þîê¬HÛ~gl}ìììŒÔÔTDDD™[O 4¿?üáxóÍ7Ñ·o_ëNÔF)ÉO’$üòË/ÈËËÃóÏ?S§NYÂ6Féù·víZ$%%Yw’õ˜+ÞÎH’„åË—£¸¸ÇŽÃK/½I’Xº²4¿úúzüùφ§§§F3µM]剚š €^¯Ç¥K—´œ®Í±äü;tèš››1nÜ8
-gª®_¼ pøðaøùù¡®®ýû÷7[×ö§ñwòOæoÆ’üŒ#GŽ`çΝÍÒvÝ,¿1cÆÀÓÓýúõCBBvíÚ¥Ñ,m×Íòn\íFFFj03ëé·ºº_[RR D```·ž{'`~Ê(É/,,aaaV›[O $? øüóÏ­2/-ÝW¼DD=	‹—ˆH0/‘`,^""ÁX¼DD‚±x‰ˆcñ	Æâ%"L³? ())ABB‚V»¿)“É'''­§qSÌOæ§óSF“â}ä‘GÐÔÔ„òòr-vß%'''Œ;VëitŠù)Ãü”a~ÊiR¼žžž|³˜Ÿ2ÌOæ§ïñ	Æâ%"ŒÅKD$‹—ˆH0/‘`,^""ÁX¼DD‚©þ{¼ß}÷²²²ÔÖ&•——ÃËËKÕ1™Ÿ2ÌOæ'†ªÅëé鉯ÆF5‡´i^^^ðññQm<æ§óS†ù‰£jñúúúÂ××WÍ!ï(ÌOæ§ó‡÷x‰ˆcñ	Æâ%"ŒÅKD$‹—ˆH0/‘`,^""Á,þ=Þ¿ÿýïHKK³æ\ˆˆz¬ÒÒRøùùY´­EÅëëë‹úúzE“""ºùúúÂßßߢm-*^ƒÁ ƒÁ dNDDôÿñ/‘`,^""ÁX¼DD‚±x‰ˆcñ	Æâ%"ŒÅKD$˜Î`0HÿùŸÿ©õ<ˆˆîÅÅÅøíÙ‘„®-´    IEND®B`‚
\ No newline at end of file
+
+ä°GŽ	777\½z#GŽÄΝ; ‹- L:UþÞÆ> ¸ºº¢   ~~~¸~ý:"##…õ0 IIIòòùùùÍ.DYæ¬æ¬ælZšCk¯ hë• 0oÞ<¡ÉƒƒƒÜ¡u899áüùóF­ÿĉÂ)¢%`Îê`Îê`Φ§ùCGõìÙª¯W‹uj‰9«ƒ9«ƒ9Çb¯1‘i°ˆˆHÀb ""‹ˆˆ,""°ˆˆHÀb ""âïc(,,Dll¬ÒÃv÷ý´Æ¦˜sÇ1gu0gu´'gc)Znnn¨©©ÁÅ‹•¶ÛpttÄøñãÛ\Ž9wsVsV‡±9·‡¢Åàéé	OOO%‡¤0gu0gu0góÃkDD$`1‘€Å@DD	XDD$`1‘€Å@DDEßÇpêÔ))9d·3zôè6߬œ;9«ƒ9«Ã˜œÛCÑb(**Âþýû1jÔ(%‡í6Μ9ƒššš6À̹s˜³:˜³:ŒÍ¹=ÿ¬¤Q£F!$$Déa»…ôôt£—eÎÇœÕÁœÕÑžœÅkDD$`1‘€Å@DD	XDD$`1‘€Å@DD	XDD$`1‘€Å@DDM‹A’$dggãÕW_Å”)S0þ|>|X“m‰ÇùóçQWW‡ÐÐPyúÕ«WñÖ[oaÊ”)xë­·põêUM¶¯3,!gùËRYBÎX°`¦L™‚œ<yR“íëKÈùóÏ?Çk¯½f±9kZYYYÈÉÉÁ;#ƒ".._ýµ&Û"It:Μ9ƒaÆÉÓ“““ñÌ3Ï`ÿþýxæ™gœœ¬Éöu†%䜗—‡¼¼<M¶I)–s~~>Þ}÷]ìß¿þþþX¿~½&Û×–saa!âââ°oß>üîw¿Ãºuë4Ù¾ŽRüÓUÛcÏž=X¿~=œœœ  DDD„<ÿìÙ³ˆ‹‹CEE†‚ÈÈH8;;ÃÇdzf;}ûðÙgŸ¡¢¢ñññ8{ö,~ó›ß ""#FŒÖåãム  ìÞ½}ûöÅÊ•+1|øpdggcÓ¦M  <êØ½{7òòòpòäI¤¥¥ÁÚÚsæÌApp°
+É(Ërî
+,!çÕ«WËÓÆŽ‹;v˜2“°„œW®\	 ¸{÷.ôz=L‹¢4=c¨¬¬Ä!CZ‡3f`ß¾}˜1cbccåyC‡• 111˜9s&8€ÐÐPÄÇÇ·8^¿~ý°gÏÌš57n Ìž={÷î…»»;òòòàîîŽ={öÈ¿¬jjjлwo À#<‚7n(²ïj²„œ»Kʹªª
+«W¯ÆÒ¥K;»Ûª³”œ}||0uêTlܸË—/Wb×U£i1ôíÛÿùÏZ_QQéÓ§ÃÖÖÓ¦MCEE…<Ï××z}ÃæŸ;w±±±˜:u*¢¢¢péÒ¥Ç{þùçaccƒéÓ§ËcùøøàÅ_DII	|||PRRìÙ³ ðÐCáúõë €êêj<ôÐCŠì»š,!ç®ÀRrþ׿þ…ÐÐPÌž=&LPb×Ue)9çååáСCX¶l¢££•ØuÕhZþþþˆ‹‹Cyy9îÝ»‡ÿþ÷¿ˆ‹‹“ç<Ÿ}önß¾C‡	¬¬¬äÛO=õ"##qèÐ!äååáèÑ£-®¯q¬Ã‡ËcåååaΜ9xÿý÷‘’’‚3f //þþþ €1cÆ`×®]¸sçvíÚwwwSDaR–sW`	98p «V­ÂòåËáççgŠLÎrÞ´i“ü€R§ÓáæÍ›Šç`Jš^c˜;w.¬¬¬°víZ|ÿý÷èß¿?æÏŸ/ÏG||<1dÈáyĦþøÇ?"!!ï¿ÿ>îܹ ->EqåÊøûûËÏ6*++âE‹ðõ×_7;#X¼x1Ö®]‹ßþö·:t(Þ}÷]%v]U–sÓW#5Þ¶´§™,!çÆ§Bš®ûÀèÕ«WÇw\e–³““BBBP]]'Ÿ|ï¼óŽ»®]TT”ÔÖiNLL***Z
+¸Qrr2¾ûî;³ü}>>>fÿ‹&==VVVÌÙƳ:˜³:Ú“³^¯oói­˜˜¾ÁˆˆDݦ̽õ»
+æ¬欎îšs·)""2‹ˆˆ,""°ˆˆHÀb ""‹ˆˆš¼óùÌ™3(--ÕbÕšyúé§1jÔ(U×ÉœÕÁœÕÁœÕ£I1”––â›o¾···«W]aa!jkkUÿ3gu0gu0gõhöYIƒÁâ>q°£bbb4ûC"ÌYÌYÌY¼Æ@DD	XDD$`1‘€Å@DD	XDD$`1‘€Å@DD	XDD$°ˆbÐétÐét°²²‚‹‹öîÝ+ÌkiùŽX¸p!JKKq÷î]xyyÉÓ/_¾Œ‰'ÂÆÆ'NÄåË—;4¾¹Ó:çFkÖ¬éðØ–@뜳²²àêê
+kkk¸¹¹!77·Cã›;­s®¯¯Çš5k0hÐ èõz‹:¦-¢ @’$ܾ}6lÀ믿n’uÔ××C¯×ãŸÿü'ƍ'O_±b&Mš„êêjLš4	ááá&Y¿9Ð2g 8qâ6oÞl’õš-sÎÊÊBFFjjjŠ   “¬ßh™stt4222päÈÜ»w’$™dý¦`1ÅÐÈÊʪÃß«Óé…|...(** $$$@§ÓaÛ¶m9r$¼½½‘˜˜(7|nn.ÂÂÂ`kk‹°°0äää(²/æL‹œoݺ…àà`|üñÇŠìƒ%Ð"çÌÌLŒ1¶¶¶ðóóÃ>¨È¾˜3-rNMMņ
+0bÄ‹:[ ,¨t:lllðöÛo#%%¥Ãã<•••Xºt)BBB  aaa¨ªª‚¯¯/$I‚¯¯/®^½*7|UUúöí pppÀµk×:¿CfJËœ£¢¢°`Á<÷ÜsŠì‹9Ó2çFW®\ÁìÙ³‘˜˜Ø©}1gZæ|éÒ%äææâ€£££ðT–¹Óìï1´Wk§a666¨­­…  ¶¶¶¶¶­Ž³`ÁôêÕ.ÄòåˈÏ-6Þvpp at RRBCCaooÊÊJôïßW¯^…½½½R»ev´Ì911’$	Ë[Òéw{h™3 #   ëÖ­Ã/¼ È>™#­oLž<111ÈÍÍÅ‚ðâ‹/*µk&e1g­™8q"Þ{ï=ÔÖÖ¢¶¶ï½÷&MšÔêòÛ·oÇÏ?ÿŒmÛ¶aøðá žeË–!??%%%xýõ×!I’üŸhòäÉHHHÀ­[· ___UöÍœ¨‘s}}=$I’ÿ3wÕR¸5rNMMÅÌ™3‘’’‚ùó竲_æFœýüü ü¯4,éé$‹/†-[¶àäÉ“èׯúõ뇒’lÙ²¥Õå/^¼$$$ 55Už~üøqxyy¡ªª
+}úô¾'>>xøá‡qìØ1lذÁdûc®ÔÈ™ÔÉyÑ¢Eøá‡0uêTù•;µµµ&Û's¤FÎ6l@||<ìììðöÛocëÖ­&Û¥YÄSI÷{äèèèˆ#GŽ=VLLbbbšM/,, øúú6;#xüñÇqüøq£×a©´ÎÙØm±tZçÜ•³mJ뜈üü|£×aN,þŒˆˆ”Õ­Š¡»<RÒsVsVGw̹[µÅ@DD	XDD$`1‘€Å@DDÍÞàVXXˆØØX­V¯ª‚‚Í>_‰9«ƒ9«ƒ9«C“b>|8jkkQZZªÅêUgooQ£F©¾^æ¬æ¬æ¬MŠÁÍÍ
+nnnZ¬º[aÎê`Îê`Îêá5""°ˆˆHÀb ""‹ˆˆ,""°ˆˆHÀb ""âïcøöÛo‘žž®ô°ÝBii)ÜÝݍZ–9wsVsVG{r6–¢Åàææ†šš%‡ìVÜÝÝ1~üø6—cΝÜÕÁœÕalÎí¡h1xzzÂÓÓSÉ!©ÌYÌYÌÙüð	XDD$`1‘€Å@DD	XDD$`1‘Àè÷1|õÕWHNN6å¶‘‰ÁËË˨e*OOO\¿~½SEDDÚñôô„···QËUƒƒ¡3ÛDDD‚׈ˆHÀb ""‹ˆˆ,""°ˆˆHÀb ""‹ˆˆF½¡°°¦Þ""2!cßäfT1äçç#33Sñ¿+JDDê8uê®_¿®\1 ÀøñãÑ©
+#""m´ç³îxˆˆ,""°ˆˆHÀb ""‹ˆˆ,""°ˆˆHÀb ""‹ˆˆ,""˜u1899i½	DDÝŽIŠ¡   Ó¦Mƒ‹‹|}}ñé§Ÿšb5‚ΔHdd$¾ýö[ÔÕÕaöìÙ˜_DDÝ…IŠaùòå		Á7ß|ƒ´´4äåå™b5Š‘$	z½%%%5j”<ýÂ…¸pႆ[FD¤>“CïÞ½QYY‰²²2ôíÛ			ò¼Ó§OcúôépvvÆôéÓQVV (++ÃÌ™3áììÜìú_|qãÆ!33çΝÜ9s䳑“'OÊË·öèÞÉÉ	qqqpuu…¾úê+ @ZZœœœ°k×.L›6
+Ø¶mψ¨[3I1lÙ²—.]ÂÚµkáåå…Ý»wËóÂÃÀÒÒR <<\žþÒK/¡¬¬
 Lx”¸7¼@  ¦IDATþÉ'Ÿ`õêÕØºu+æÍ›‡+V ((§OŸÆ;#ÈÈHyùû=Â8p Nœ8×^{
++W® ãÔ©S˜0a.\¸€	&àäÉ“<K ¢nÍè¿ÇÐO<ñÖ­[ 8{ö,‚‚‚ðÒK/ Ν;‡€€ ØÚÚbîܹX¿~=  ¼¼°¶¶ÆŠŒŒÄæÍ›áêê
+ áÌ"<<\.NgÔ6Í™3¶¶¶˜7ož¼Î¦g·ÇŒƒ5kÖàÕW_íèîY4“œ1,[¶/^ĝ;wðïÿõõõò¼'Ÿ|ÙÙÙøù矑••ggg €‹‹vî܉;wîc¥¦¦"<<GŽ <ýôÓˆ—Ï,Ο? èÑ£~øá‡V·);;·nÝBvv6žzê) 
+gÁÁÁHOOǾ}û€.°ˆ¨[3I1øøø`áÂ…puuEBB¢££åy±±±øè£0räHìܹqqqòô¬¬,>\x$ïíííÛ·ãÏþ3¶nÝŠ¿þõ¯øä“Oàîî.\Sxùå—a0Z½>pùòeŒ3iiiÂö”””ÀÝÝÕÕÕèÝ»·ð=MÇç«“ˆ¨»ÐEEEIMQ¶$&&û§=œœxÝ€ˆºµäädèõzóûÞ¬ßàFDDêëÅÀ³""ãu‹b ""㱈ˆHÀb ""‹ˆˆ,""°ˆˆH èg%:u
+EEEJId£GÆøñãï»g²ÆÏí¡h1áØ±cðööVrX"E¢¦¦¦ÍÿH<žÉ{<·‡âŸ®j0Ú|Ë5‘–?âÅ<žÉܵçx6¯1‘€Å@DD	XDD$`1‘€Å@DD	XDD$`1‘€Å@DD‹-†ºº:h½m
+@]]Ö›AfŽÇ3™M‹A§Óµ8=++®®®°¶¶†››rss›-“™™‰±cÇ6›¾fÍaÜË—/câĉ°±±Áĉqùòe ÀÁƒáììøøøàûï¿ Ô××cÍš54hôz½<VÓ1ËÊÊàììŒ>ø@ž§Óé ×ë1xð`ìØ±C^v̘1ÈÌÌlo4dx<SWa–gYYYÈÈÈ@MM
+BCCÔl™ôôtaÚ‰'°yófaÚŠ+0iÒ$TWWcÒ¤I ,X° 			¨©©Áþðyztt4222päÈÜ»w’$	ãåååÁßß[¶lÁo¼!O—$	uuuHKKÃ’%KäéƒéééÊƒ,g²4Šºªš>"ñóóÃúõë›-S\\ùþ­[·Œ?þ>>>òôÜÜ\œ>}¶¶¶È# 4<’þ÷Èéðáà €ÔÔTlÚ´I^®©íÛ·#))	999pttluûû÷ï/ßvqqÁ—_~iÌnSÅã™,Yž14ºrå
+fÏžÄÄÄf󪪪`gg'ßŠŠÂ‚ðÜsÏ5[®oß¾  \»v
+ ’’‚7ß|½{÷FNNŽ<ýÒ¥KÈÍÍÅ< GGGìÝ»WkéÒ¥X±bE‹ÿ‰t:¬¬¬0}útlܸQžngg‡ü±ã!P—Áã™,…ÙCqq1¼¼¼†^x¡Ùü>}ú ¶¶V¾Ÿ˜˜ˆåË—7{ÕÞÞ••• €«W¯ÂÞÞ ðÒK/¡¢¢7oÞÄ”)SðØcÉËOž<×®]æM›"¯ãèÑ£kñTZ’$Ô××#''Ë–-“§×ÖÖâÑGíldáx<“%1ËbHMMÅÌ™3‘’’‚ùó緸̸qãpöìYù~}}=$I’ŸCmüwòäÉHHHÀ­[· ___ù{$I™3gŽÅ‹h8ÕÐâE:=zHIIiuûÿã@yy9<<<ÚµÿÔµðx&K£ù5†_¿’C’$,Z´ 0uêTyú7„SíÀÀ@´yÆÇÇ#   ?ü0<<<‘‘!¬wÀ€X¼x1"""  6lÀË/¿ŒY³faðàÁغu«0ž««+
+
+
+àçç‡ëׯ#22²ÙxIIIòòùùù-^l¤®‰Ç3ušï_!ÑÖô¦æÍ›×꣯¦ßÿøããøñãF¯càÀÈÏÏ¿ïòNNN8þ¼QÛ{âÄ	áTœº.ÏÔUh~ÆÐQ={ö”-™3KØFҏg2'fyˆˆ´Ãb ""‹ˆˆ,""°ˆˆHÀb ""‹ˆˆŠ¿¡°°±±±JK¤˜‚‚‚û~šhS<žÉܵçx6–¢Åàææ†šš\¼xQÉa‰åèèˆñãÇ·¹g²ÆÏí¡h1xzzÂÓÓSÉ!‰4Ã㙺+^c ""‹ˆˆ,""°ˆˆHÀb ""‹ˆˆ,""(ú>†S§N¡¨¨HÉ!»Ñ£G·ùfæÜyÌYÌYÆäÜŠCQQŽ;ooo%‡í6
+QSSÓæ˜9wsVsV‡±9·‡âŸ•d0­ô°ÝBLL***ŒZ–9wsVsVG{r6¯1‘€Å@DD	XDD$`1‘€Å@DD	XDD$`1‘€Å@DD‹-†ºº:¨¾Þ€€ ÔÕÕ©¾^­0gu0gu0gãhZ:®Õé_­ÉÌÌÄØ±cåû6l¬­­áææ†ÜÜ\ @VV\]]›Mo:vYYœñÁë×ëõ<x0vìØ!/;fÌdffv|§5ÀœÕÁœÕÁœMÏ,Ï$I‚$I÷]&==ƒA¾àÀ9rÕÕÕXµj4ü€322PSSƒÐÐP	ãäååÁßß[¶lÁo¼!lC]]ÒÒÒ°dÉyºÁ`@zzº{©=æ¬æ¬æ¬Å?]U-ÅÅÅpqq‘ïøá‡ €Û·oÃÊÊ
+ƒ
+ ¡¥ýüü°~ýzùþöíÛ‘””„œœ8::¶º®þýûË·]\\ðå—_*µf9«ƒ9«ƒ9Çb‹¡ªª
+vvv´ÆÓ<{{{<xP˜wåÊÌž=‰‰‰ò´¥K—bóæÍ-þpÇêÙ³'²³³åévvvøñÇ•Ú
+³ÇœÕÁœÕÁœc–O%£OŸ>¨­­¦I’„›7o"99¯¼òŠ<½¸¸^^^Ã/¼ O?zô(ÂÂÂZ<Å“$	õõõÈÉÉÁ²eËäéµµµxôÑGM°Gæ‰9«ƒ9«ƒ9Çb‹aܸq8{ö¬|?,,•••  ½^7n  RSS1sæL¤¤¤`þüùÂ8zô("""’’ÒêºÇ€òòrxxx(¹+f9«ƒ9«ƒ9Gó§’~ý
+I’„i·}Q)00rØ#GŽ„››®^½Š‘#GbçΝ €E‹ ¦N*oã \]]QPP ???\¿~‘‘‘Âz€¤¤$yùüüüf¢,sVsVs6-M‹¡µW´õÊ ˜7ožÐäÁÁÁîÐ:œœœpþüy£ÖâÄ	áÑ0gu0gu0gÓÓüŒ¡£zö쉌ŒÕ׫Å:µÄœÕÁœÕÁœc±×ˆˆÈ4XDD$`1‘€Å@DD	XDD$`1‘@ñ÷1"66Véa»…‚‚‚û~ZcS̹㘳:˜³:Ú“³±-777ÔÔÔàâÅ‹JÛm8::büøñm.Çœ;‡9«ƒ9«ÃØœÛCÑbðôô„§§§’CR˜³:˜³:˜³ùá5""°ˆˆHÀb ""‹ˆˆ,""°ˆˆHÀb ""¢ïc8uêŠŠŠ”²Û=zt›oVaΝǜÕÁœÕaLÎí¡h1aÿþý5j”’ÃvgΜAMMM›?`æÜ9ÌYÌYÆæÜŠVÒ¨Q£¢ô°ÝBzzºÑË2çŽcÎê`ÎêhOÎÆâ5""°ˆˆHÀb ""‹ˆˆ,""°ˆˆHÀb ""‹ˆˆ,""°ˆˆHÀb ""¦Å I²³³ñꫯbÊ”)˜?>>¬É¶ÄÇÇãüù󨫫Chh¨<ýêÕ«xë­·0eʼõÖ[¸zõª&Û×–³üe©,!ç‚‚,X° S¦LAHHNž<©Éöu†%äüùçŸãµ×^³Øœ5-†¬¬,äääàwÞÁÁƒ‡¯¿þZ“m‘$	:gΜÁ°aÃäéÉÉÉxæ™g°ÿ~<óÌ3HNNÖdû:ÃrÎËËC^^ž&Û¤KÈ9??ï¾û.öï߬_¿^“íëKȹ°°qqqØ·o~÷»ßaݺušl_G)þéªí±gϬ_¿NNN €"""BžöìYÄÅÅ¡¢¢C†Add$œáããƒY³faß¾}øì³ÏPQQøøxœ={¿ùÍo#FëòññAPPvïލ¾}ûbåÊ•>|8²³³±iÓ& uìÞ½yyy8yò$ÒÒÒ`mm9sæ 88X…d”e	9w–óêÕ«åicÇŽÅŽ;L‰IXBÎ+W® ܽ{z½¦ŽEQšž1TVVbȐ!­Î‹‹ÃŒ3°oß>̘1±±±ò¼¡C‡Ê
 ?˜˜Ìœ9@hh(âãã[¯_¿~سgfÍš…7 fÏž½{÷ÂÝÝyyypwwÇž={ä_V555èÝ»7 à‘GÁ7Ùw5YBÎ]%å\UU…Õ«WcéÒ¥ÝmÕYJÎ>>>˜:u*6n܈åË—+±ëªÑ´úöí‹ÿüç?­Î¯¨¨ÀôéÓakk‹iÓ¦¡¢¢Bžçëë½¾aóϝ;‡ØØXL:QQQ¸téR‹ã=ÿüó°±±ÁôéÓå±|||ðâ‹/¢¤¤>>>())¿¿?öìÙ x衇pýúu @uu5zè!Eö]M–sW`)9ÿë_ÿBhh(fÏž	&(±ëª²”œóòòpèÐ!,[¶ÑÑÑJìºj4-ÄÅÅ¡¼¼÷îÝÃÿû_ÄÅÅÉóŒÏ>û·o߯¡C‡„G	VVVòí§žz
+‘‘‘8tèòòòpôèÑ××8ÖáÇå±òòò0gμÿþûHIIÁŒ3—— À˜1c°k×.ܹs»ví‚»»»)¢0)Kȹ+°„œ8€U«Vaùòåðóó3E&g	9oÚ´I~@©ÓépóæMÅs0%M¯1̝;VVVX»v-¾ÿþ{ôïßóçϗ燇‡#>>‰‰‰2dˆð<bSü㑐€÷ßwîÜ€Ÿ¢¸rå
+üýýåç
+•••aÑ¢Eøú믛,^¼k×®Åoû[:ï¾û®»®*Kȹ髑o[ÚÓL–sãS!M×}àÀôêÕ«ã;®2KÈÙÉÉ	!!!¨®®Æ“O>‰wÞyG‰]W.**Jjë4'&&­Ü(99ß}÷Yþ‰>³ÿE“žž+++ælbÌYÌYíÉY¯×·ù´VLLßàFDD¢nSæÞú]sVsVGw͹Û‡Å@DD	XDD$`1‘€Å@DDMÞù|æÌ”––j±jÍ<ýôÓ5j”ªëdÎê`Îê`ÎêѤJKK‘úM*à­ÅÚ5PÕ©þfÎê(--Å7ß|oïîtaa!jkk™³‰i•3 åg% XÖv\ mþŽsV‰Á`°¸OÐ쨘˜Íþ0sV¯1‘€Å@DD	XDD$`1‘€Å@DD	XDD$`1‘€Å@DD	,£t¿|Yp°÷WóZZ¾#(p€Wëï踖œrîÂYët:èt:XYYÁÅÅ{÷îæµ´|G,\¸¥¥¥¸{÷.¼¼þtFF†
+kkk¸¹¹!77·Cã›;­sn\ã—ƒƒC‡Æ×‚e H nØ àu­£
+‰üÀ¸_­[2Ñ:͍–97®¿ä-Inß¾
+6àõ×Mt}}=ôz=þùÏbܸÿ}àÀ9rÕÕÕXµjM²~s eÎ’$É_ǏÇïÿ{“¬ß,§Yuâ{u ¢ <ˆ†GÄE¿LOøeÞ6 #Ñð1Õ‰èҏZÛ¤UΏ °ð[ ØaeÕñ u:¢¢¢ðàƒÂÅÅEE
+A'$$@§ÓaÛ¶m9r$¼½½‘˜˜(?"þðÃ1dÈèõzXYYaРAŠì‹9Ó"ç¦þò—¿`É’%ÞµYN1è Ø x@J'Æ ÀR !¿LPÀ
+T}\E—ÔÚ"-s– T¸ ài AX¿™Óét°±±ÁÛo¿””Ž=xð`TVVbéÒ¥	i:,,UUUðõõ…$IðõõÅÕ«W!Iÿ; u:lmmÒ©õ›;­s€/¾ø}úôÁ€:µ/jÒîï1´Wk¿¤m Ô¢áQ&~¹m{Ÿq 腆繗ÿ2­iÁ7Þv  ´#kÁÌ!ç~ þŒ†³‡.ê׿<ÙØØ ¶¶vv
+A×ÖÖÂÖ¶õ ,X€
 ^½zaáÂ…X¾¼!規Xo;88 ))	¡¡¡òúþùgìÛ·¯¼ò
+ÊËËÙ/s£uÎ °zõjÄÇÇwz_Ôd9g­™à=4ü¢ªýåö¤û,¿ÀÏhx:cø/Ó$ Ë ä(AÃsëº_)܏š9_ÿe|7E¶Ü¢Lœ8ï½÷jkkQ[[‹÷Þ{“&µôöíÛñóÏ?cÛ¶m>¼!hI’°lÙ2äç磤¤¯¿þ:$I’Y………¡²²  ×ëqãÆ
+ÓQ#g 8vìêêê0zôh“ï“’,¿¶ 8‰†G™ýÐðgË}–¿ˆ†G©	 R›L?ކWÈTèó«ïiú*™.þŠ™V©™ó 4\˜þXí¶0[¶lÁÉ“'ѯ_?ôë×%%%ز¥õ /^¼$$$ 5õA?~^^^¨ªªBŸ>bÐ#GŽ„››z÷îØØXìܹÓdûc®ÔÈh8[3É>˜’e<•t¿çúiÇX1¿|ýZá/ÿúþòeìú»æ¬ŠÖžÞ  GGG9b|Ð111ˆ‰itaaCо¾¾ðõƒFpp°Ñë°TZç Ÿþ¹Ñë0'–Æ@DDŠê^ÅÐM‘jŽ9«â~ˆI9Ý1çîUDDÔ&	XDD$`1‘€Å@DD	´{ƒ[!€XÍÖ®® ö­›9«¢°°±±Ý#è‚‚ØÛk4sV‡&Å0|øpÕ5ü±–îÀ5j”ê«eÎê>|8jkkQZÚ=‚¶··gÎ*Ð*g@£bpssƒ›[7ü„4•1gu0gu0gõð	XDD$`1‘€Å@DD	XDD$`1‘@ñ÷1|ûí·HOOWzØn¡´´îîîF-Ëœ;Ž9«ƒ9«£=9KÑbpssCMM’Cv+îîî?~|›Ë1çÎaÎê`Îê06çöP´<==áéé©äÔæ¬æ¬æl~xˆˆ,""°ˆˆHÀb ""‹ˆˆ,""°ˆˆH`ôû¾úê+$''›r[ˆˆÈDŠŠŠàååeÔ²Fƒ§§'®_¿Þ©"""íxzzÂÛÛÛ¨e*ƒÁ ƒÁЙm"""ÁkDD$`1‘€Å@DD	XDD$`1‘€Å@DDÁ`žþy­·ƒˆˆÌ@~~>þ?Í
+e=û&o    IEND®B`‚
\ No newline at end of file

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/images/hagrid.png
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/images/hagrid.png	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/doc/images/hagrid.png	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,76 +1,84 @@
 ‰PNG
 
    
-IHDR  *  "   &ƒ   bKGD ÿ ÿ ÿ ½§“    IDATxœíÝyxTõùÿÿׄµH ‘Ê!„=€°]­ –аˆ‚¨Ä€lbÄ%`Á…E£P•MÜ +e‘ð$¬‚ -K”V,
-@PCæûç—˜LÎLÎ{ÏÇuåº&gΜóžûžáÎÌd<111Þnݺ	    L°eË•Ubb¢Ók    IRRR’Bœ^    üƒ
-    ã0¨    0ƒ
-    ã0¨    0ƒ
-    ã0¨    0ƒ
-    ã0¨    0ƒ
-    ã¸bPÉÉÉQ\\œ#王‹SNNŽ#ç   ܪTƒÊ§Ÿ~ªV­Z©bÅŠjÒ¤‰Þ}÷Ý+:©Çã¹¢Ûù²dÉÝ|óÍÖ÷‹/Vdd¤*V¬¨¨¨(­Y³F’tôèQuéÒE•*UR—.]tôèQIRnn®Õ°aCU¬XQM›6Õ‚ò­×ãñ($$DõêÕÓÛo¿m]×®];-Y²Ä¯÷   ¸Ú•jP4hÆŽ«ììl­\¹R+W®ÔºJeáÂ…Šµ¾_¹r¥V­Z¥¬¬,Mš4I$;V]»vUVV–ºvíªqãÆI’’’’´bÅ
--_¾\çΝÓG}¤µk׿;‡×ëUNNŽRSS5bÄk{ll¬.\ø;	   \EJ5¨\{íµ:vì˜vîܩ믿^ï¼óŽ$ióæÍjÖ¬™rss%]úO}£Fô¯ýKÏ<óŒj×®m=+qùÙ”¼—÷ï߯N:YÏÔlÚ´ÉÚç¹çžShh¨Â´xñbMž<Y5kÖÔµ×^k=³±uëVEDDXë\°`êׯ¯•+WNuëÖ•$­Y³F			ª\¹²´zõjIÒœ9sôÆo¨E‹ªP¡‚"""4þ|Ÿu³.GDDhÛ¶m¥)#   €b”jPY¾|¹¾þúk%$$èw¿ûõò¨N:)22RË–-“$mܸQ‘‘‘ŠŒŒÔôéÓ•˜˜¨üQ^¯W^¯W’ò]~àôðÃëÌ™3JIIÑСC­sÖ¨QCß}÷,X ûï¿_µjÕÒÑ£Gõî»ïêñÇ—$effªjÕªùÖêñxT¹re
-6LsæÌ±ö«]»¶$©V­Z:uê”$é»ï¾SãÆ­Ûå¢ò¯\¹rêÝ»·^|ñEk{ÕªUuòäÉÒ”   @1<'Nô&&&–ú†{÷îU÷îÝuüøqIҁô§?ýIÛ¶mÓC=¤ª{÷îz÷Ýw5kÖ,íß¿_£FÒÔ©Såñx¬!E’*T¨ï
-éG¹¹¹òx<ºxñ¢BBB¬í¿þÞëõ*,,LPõêÕó­ñüùóZ¾|¹ž|òI<xPµjÕÒ¾}û¦ï¿ÿ^-Z´ÐñãÇU¯^=­]»ÖVò;ïe¯×«
-6hèС:tè$éôéÓŠŒŒÔ±cÇJ]C    %%%•þ=*ÔO?ý¤½{÷êâÅ‹ÖuŠŽŽÖÒ¥KuèÐ!uïÞ]’tß}÷éóÏ?×úõ땜œ,éÒ`ò¿ÿýϺmTT”Þzë-;wN^¯×z	™$k(ñõ½$µoß^°¾OHH°¨9sF’Ô³gO¥¤¤èÂ…JIIQ=$IC‡Õ#<¢ƒêâÅ‹ÖâËåcKÒÁƒ]äþ    J§|ivîÓ§î¸ãedd(<<\óæÍËwý”)SÔ¢E‹|/ºüªZµjiÒ¤I’¤‡~X7Ýt“Ο?/¯×«wß}WÇ×#<¢.HR¾g\Š3`À ¥¥¥YC«V­¥'N¨U«VZ´h‘$)99YqqqªV­š¢££µxñbIÒ_þòM:UÝ»w×÷߯ˆˆˆÑìòý¨
 S§ŽfÍšem_¿~½Xâµ   (Þ¿ô«0[¶lQÿþý•‘‘¡
-*øå˜%ñË/¿hРAÖàQ–âââôÎ;ï¨|ùRÍ|    |HJJ*Ý3*Eñx<ªR¥Š-ZT¦CŠté¥dN)’;/   àf~TJóR-    (J©ÞL    eA   €qT    ‡A   €qT    ‡A   €qJô牷lÙ¢´´´@¯0NLLŒºuëVä>äW+òøF> ßJ’©„ƒÊúõëµð½7tsǦ¶‹=;éôéÓʼn|àjD> ßÈà[Ió!•â£;5Õc“âl-&oÌZ.å–l_ò«
-ù |#€o¥ÉïQ   `    ÆaP   `    ÆaP   `    ÆaP   `œŽJIìÙqHÛ?ßïÏCѪ]£2ÿ€-ò`A> ßÈà›¿óá×AeÛæýÚôêÒ¡ƒ?øÕ¶]»t&ûÇ2ÿAC>Èàù |D>ü:¨HR—˜š<~¼¿øMÊk³õíyg~3E>`:òøF> ߑޣ   À8*    ŒÃ    À8*    ŒÃ    À8*    ŒÃ    À8*    ŒÃ    À8*    ŒãŠA%´ax@Ž›sñ¢âG>cBüÈG•sñ¢ÓË€aÈÇ%ä…!—†|\B>œãè Ú0\ï¾÷^mòè„	Ú»¿~ÉÉQ¯»ûYÛÿwì˜~ß¿¿Â"šè÷ýûëÇŽI’>\±RQ­ZZû-ÿt•򮮻V£ÆjÓ-VË?]e­ùòW^«?[¯v±ÝÑDwÝ÷'ýpâD‘çm®V®ÌwŒ—罞︗ÏS3ü&µèÔYK>üк®uËúpEþÛ#x™’_ï@åãÃO>QÌ­·éºÆêÚ»ÖoÚd‡|à2SòáëñJ>à$SòñþŠjߣ'ùÀsü•Eï ÿ=Z&çÊÍõ*$$DÛvîT»Ö­­íy!Q££õŸ/÷¨ct´žJL”$½÷ñÇêcí7rüxMŸ2EG¿Ú§i“'ëÑ	$I§¾ÎЩ¯3
-œoĸqJ|úiýgï—ùàƒzú…Ä"Ï'IsÞzK^¯W’ôKNŽðAãžú:C'ÔËÉÓ5ö©§­í]bbôÞÇÛ)cB>|=¾•V~¢7_ž¥ÿîýRìe݆| /òáëñJ>à4òñÏuŸiÙ‚ùúÏ—{4fÄŸ5”| ”T’Ÿ™¢ÑOþE¹¹¹®ûâ˽êr{oÕnÔX]nï­=ûöI’¶ñ…nî~‹nhÖ\ÏL›níàÐ!ÝÚï]×8BÑ·ôPúö’¤×RS­ß.tþýíê7 at sÞzËš¤Ó6nÔðøxUªTIÃããµþÿÛ(IÚ¹{·5lhÿƺu%IG’Tïw¿+ò¾]¾O—÷_›–Väù$©uóúÇš5’¤¥~¨^Ýc‹<ÇuµjY—5l¨]{ö¹?‚‹	ùð%Pùxó•—Õ4"B•*UR÷.]T¥Jë6äy™_Wò§™Ù}Q7Ö­+OHˆÊ…”S°0Iä%çø Ò¤qcÝÒµ«^}#µÀu#ƍÓàq:²g·ˆÓŸÇŽ“$=6ñ	
-×áÛUçú0kÿᏏՐûê¿ûö*ñ駬‰|x|¼¾þb—ºuî¤S_g¨[çN:¼s‡5¥ŸÊÊR­š5%I׆†êtvö¥í§Oëš<ò”Ä4tÔc
-‹h¢a		úëóÏyßþöÂzü©§T¿Uk}¶q£Ngey>IzdÈýõ•WåõzõZê›zðþû7´a¸®½©‘îý¿!zî/OZÛ¯¹æež:Uäš\Lȇ/ÊÇe??®ÁÇkÚ”ÉÖ6ò¼LÊǯ¯äN3%¡
-Ãu}“H=öÄJyáyIä%çø "IÃã‡hý¦Múׁƒù¶8tHƒãâT¥J
-êß_ÿ>xÐÚþ§þ÷è7¿ùî¿÷^kÿ=ûöéÏcÇéú&‘ê?$^‡¾þZÒ¥^è6JÛ´Y¡
-Õ¶i³njÛNó,$Õ¨^]'23%I'ORjÕ.Ý®F
-ûñGëøŒ£7f¾¤cÿþ—楤hø˜Ç‹¼_wþþ6}¹i£þ·ÿ+ÝÒµ«n¨S§ÈóIRÃúõt}X˜ÆMž¬Æááºáúë÷Ô×ÊÌ8¬Þþ»&=û¬µýܹsªZäš|œÎ‡/Ê‡$íØ½[½îî§áññº½gOk;ùÀ¯™Â¯ä&0!§¾ÎÐÿö¥¿>ÿœ=æÒíÈJȈAÅãñèoÏ?§ÇŸz*ßöÆ7ݤ…Ë–éüùóz{éR5iÜX’Ѩ‘.[¦.èÝ÷–Yû·lÖL¯ÎHÖw_í³lÒ¥ÞŸ‡ÆkÅ¢…J[±\ƒãâtêë
-<X’Û¹³^KMÕO?ý¤×RSÕ­sgIRÛÖ­­0J—†ŠËëÍû}Q¼^¯þ}ð žJLԐûî+ò|—xp¨ÞøûÛzøÿþ¯ØãŸ8™i]>üÍ7jÓªU±·Apq:¾*ó-ÒÀ¡êo/<¯{ûö-pò¼œÎ‡¯Ç+ù€	œÎÇSŸµ~1¢³çÎI"(9#éÒëÿÔÿž|ÛfMŸ¦yþ®z-[iþÂEzyú¥×K¾””¨W^CámÛéÛï¾³öŸ7ó%-þà5lÓ¶À_‰Øºc§¢Û¶Õ©ÓY
-­Q#ßy¦NzB›Ò·êÆ-µyëV=ûä$IR¿;ïÔ¦ôtk¿¿½ð¼êiÝд™ÆO™¢”^¤|çúõåšá7éƒî×ûôÖ¨‡*ò|—uŒŽÖ©¯3Ôáæv…Öêòq‡ŽzLÓŸ™bm߸e‹î¹ë®b*`äd>|=¾•„'&éøÉ“ê7økÿ¼¿y#ø5'óáëñJ>`
-'óÑ<2R]{÷QýV­õÒk³õƬ™’øù’óLœ8Ñ›˜ç¯N&))I‡¾Û¬Ç&Ź߳–Ës*T“Ǐ÷çóKNŽN­Ô—g9½”‰ù¨æ¾”¢òåÊ9½£¥¼6[ßžß_¢ÇóorŠ|Ž|¸ùðòáNäÃ?ȇ;"åý¹@·©P¾|ЄHRP­Á| ¾‘À7ò’2æ¥_    pƒ
-    ã0¨    0ƒ
-    ã0¨    0ƒ
-    ã0¨    0Žß?Geû®/”2{¶¿øÍÆôt5hUÍ‘s“˜Ž| ¾‘À·@äïƒJ«vt&ûGý÷Ü~ð«ú-«éæŽMËü¼äÁ€| ¾‘À·@äïƒJt§¦ŠîTö‚ù |#€oäW+Þ£   À8*    ŒÃ    À8*    ŒÃ    À8*    ŒÃ    À8~ý•=;iûç|Ìת]£2ÿÐ.ò`A> ßÈà›¿óá×AeÛæýÚðêСƒ?øÕ®]»t&ûÇ2ÿAC>Èàù |D>ü:¨HR‡4~üxð›Ù³gëäyg~3E>`:òøF> ߑޣ   À8*    ŒÃ    À8*    ŒÃ    À8*    ŒÃ    À8*    ŒÃ    À8*    ŒãŠA%<<Üé% Æ"€oäð|ÀiŽ*iiiºýöÛ¡=zèã?ø9}…n„	Ú¿¿rrrÔ¯_?kû±cÇÔ¿5iÒDýû÷×±cǾF@
-Ž|„‡‡[_ at Y
-†||òÉ'ºí¶Û¡>}úhÓ¦M_# G>V¬X¡ž={’ÉÑAe̘16l˜¾üòK¥¦¦jݺuŽ­Åëõ*$$D;wîTëÖ­­í‰‰‰ŠŽŽÖž={­ÄÄDÇÖˆ«K0ä###CŽ­W¯`ÈÇ'Ÿ|¢Y³féË/¿ÔàÁƒ5jÔ(ÇÖˆ«K0äã³Ï>ÓüùóµgÏýùÏ&(”£ƒJ5tüøqíÛ·Oµk×VJJŠuÝÞ½{Õ»wo5nÜX½{÷Ö¾}û$Iûöíӝwީƍ˜Þ7mÚ¤öíÛkÉ’%:tèî¹çë·	;vì°öÏûàÔÔT…‡‡ë½÷ÞÓí·ß®è­·Þ²®ß¸q£âããU©R%ÅÇÇkãÆeQ (ò8%òñòË/+""B•*UR—.]T¥J•²(
-ùxñÅU·n]…„„¨\¹r
-+‹Ò È8:¨¼þúëúöÛo5uêTuìØQï¿ÿ¾uݸqã§Ý»w+..NãÆ³¶ß}÷ÝÚ·o_¾ßä~ðÁš<y²Þ|óMÝ{ï½;v¬¨½{÷ê©§žÒ„	¬ýóþ8>>^»víR§N”‘‘¡N:iÇŽÖõYYYªY³¦$)44TÙÙÙeR ò8%˜òqüøq
->\“'OtY IÁ“ððpEFFê‰'žÐóÏ?_¥A)ïäÉ6l¨gŸ}V’tàÀ
-8Pwß}·$éСCŠ‹‹Såʕտ=÷Üs’¤ƒjÀ€ªX±b¾cM˜0AsçÎUóæÍ%]úÍÀ¸q㬠z<žBא÷·—/·k×NS¦LÑàÁƒU½zueffªV­Z:uꔪU«æÇ
- ¾C> §K>vïÞ­G}TcÆŒQÏž=ýu÷"K>222tá­]»VcÆŒÑgŸ}æ¯À%}FeôèÑúæ›oôóÏ?ëßÿþ·rss­ënºé&-[¶LçÏŸ×Ò¥KÕ¸qcIRDD„-Z¤Ÿþ9ß±æÍ›§qãÆiÕªU’¤fÍš)99ÙúÍÀáÇ%IåË—×?ü`Ý.##CñññZ¸p¡–/_®¸¸8eddX!êܹ³RSSõÓO?)55U;whM€Ë‚!€S‚!‹-Òƒ>¨çŸ^}ûö
-h=€¼‚!Ï>û¬233%I!!!:wî\à
-‚ åè rË-·hèСjÞ¼¹RRRò½Q}Ú´iúûßÿ®V­ZiÑ¢Eš>}ºµ}éÒ¥jÚ´i¾i½[·nš?¾žyæ½ùæ›z饗ôÁ¨mÛ¶ù^3yß}÷)666ßmwîÜ©¶mÛ*++K5jÔÈ·Æ'žxB[·nUË–-µuëVMš4)%,Á¼·å¯¡,C>&Mš¤“'OꁰŽóã?²,€¤àÈGdd¤úôé£Ö­[köìÙš9sf K‚ å™8q¢·¸¿d•””¤CßmÖc“âŠÜïYËõSf¨ÆïÏ5~5{öl<¿¿Dçßä6,ö/½‘¸	ù |#€oÈ‡+>ð   €»0¨    0ƒ
-    ã0¨    0ƒ
-    ã0¨    0ƒ
-    ã0¨    0Ny'Nºk×.¥§§;qjãµiÓF:t(rêç[Iêg:úëù°‡|¸ù°‡|¸ù°Ç©|8òŒJzzº6lØ ÇÃWž¯ôôt¥¥¥Q¿ ×Ïtô×^©Ÿ½ú™ŽþÚë/õ³W?ÓÑ_{ý¥~öêŽ<£"I±±±JLLtêôFJJJÒ‘#GJ´/õ+¨4õ3ý-ˆ|ØC>܍|ØC>܍|Øãd>x
-    ã0¨    0ƒ
-    ã0¨    0ƒ
-    ã0¨    0ƒ
-    ã0¨    0ƒ
-    ã0¨    0Ž+•œœÅÅÅ9½ŒbÅÅÅ)''Çée@ý܍þÚCý܍þÚCý܍þÚCýJ/(ÇSèö¥K—ªyóæªX±¢¢¢¢´fÍIÒ’%KtóÍ7ç»ý导Ž=ª.]º¨R¥JêÒ¥‹Ž=Zäq/›2eJ¾cå½¼oß>5nÜX¯½öZ¾s‡„„¨^½zzûí·­}Ûµk§%K–\IIJ…ú¹ýµ‡ú¹ýµ‡ú¹ýµ‡ú^P*¾,]ºT‹/Vvv¶FŽ©J’.\¨ØØXk?¯×+¯×[àöcÇŽU×®]•••¥®]»jܸqEW’¶oß®¹s纞uëÖ©oß¾zýõ×5|øð|çÏÉÉQjjªFŒamÕÂ…mÕÀêçnô×êçnô×êçnô×êç?A=¨,Y²D-Z´PåʕիW/]sÍ5’¤­[·*""¢ØÛ¯Y³F			ª\¹²´zõê"{áÂÅÇÇëwÞ)p¬ùóçküøñZ½zµºuëæóœaaaÖ刈mÛ¶­T÷ÙŸ¨Ÿ»Ñ_{¨Ÿ»Ñ_{¨Ÿ»Ñ_{¨Ÿÿ”wzþpìØ1õë×O3gΔ$effªjÕªÅÞ.33Sµk×–$ÕªUK§N*ò¸'NԐ!CÔ½{÷ÇzôÑG5wî\5hРÀu—Ÿz«P¡‚–-[fm¯ZµªNž<Y²;@ÔÏÝè¯=ÔÏÝè¯=ÔÏÝè¯=ÔϾ ~FEº4vìØQ			ºë®»$I5kÖÔÙ³g‹½mhh¨Ž?.I:qâ„BCC‹<îÌ™35fÌ«±y_û·víZ%$$úT™×ëUnn®V¯^­Ñ£G[ÛÏž=«k¯½ö
-îµÿP?w£¿öP?w£¿öP?w£¿öP?ÿêAeÞ¼yºóÎ;5gÎ
-4ÈÚÞ¾}{8p ØÛ÷ìÙS)))ºpá‚RRRÔ£G"››››ïõ„y_W­µk×jüøñš3gŽÏs^~àIÒÁƒ]ò;ìgÔÏÝè¯=ÔÏÝè¯=ÔÏÝè¯=ÔÏ‚æ¥_¿þ‹^¯W=ô$é¶Ûn³¶Ÿ9sFPZZšUäÂþ‚×ëUrr²âââT­Z5EGGkñâÅ’äó¸Å=]×¼ys¥¥¥©W¯^:}ú´&L˜ïœuêÔѬY³¬ýׯ_ŸïPDý܍þÚCý܍þÚCý܍þÚCý+(•Âþ"BQÛï½÷Þ|“¦¯ýn¼ñFmÞ¼¹ÄÇõµOÞËááá:|øp‰Žµ}ûö|Oµ
-õs7úkõs7úkõs7úkõ¼ TJ«B…
-Öôi2S×Hý܍þÚCý܍þÚCý܍þÚCýJ/¨ß£   ÀT    ‡A   €qT    ‡A   €qT    ‡A   €qû•-[¶hÚ´iNÞHiiijРA‰ö¥~•¦~¦£¿‘{ȇ»‘{ȇ»‘{œÌ‡#ƒJTT”²³³õÍ7ß8qzc5hÐ@:t(v?êW¸’ÖÏtô·päÃòánäÃòánäÃ'óáÈ £˜˜'Ní
-ÔÏÝè¯=ÔÏÝè¯=ÔÏÝè¯=ÔÏ<¼G   €qT    ‡A   €qT    ‡A   €qT    ‡A   €qù•]»v)==݉S¯M›6Å~¨õó­$õ3ýõ|ØC>܍|ØC>܍|ØãT>yF%==]6lÇãá+ÏWzzºÒÒÒ¨_€ëg:úk¯¿ÔÏ^ýLGíõ—úÙ«Ÿé诽þR?{õGžQ‘¤ØØX%&&:uz#%%%éÈ‘#%Ú—úTšú™ŽþD>ì!îF>ì!îF>ìq2¼G   €qT    ‡A   €qT    ‡A   €qT    ‡A   €qT    ‡A   €qT    Ç•ƒJNNŽâââÊü¼qqqÊÉÉ)óóúõs7úkõs7úkõs7úkõ+½ T<Ïí—¿òZ²d‰n¾ùfëûÜÜ\M™2EuëÖUHHHý§L™’o[ÞËûöíSãÆõÚk¯å;gHHˆêÕ«§·ß~ÛÚ·]»vZ²dÉ•ßÑ ¡~îFí¡~îFí¡~îFí¡~ƒŠ/^¯W^¯·Àö…*66Öú>11Q‹/ÖªU«tñâÅ|·Ù¾}»æÎ[èñ×­[§¾}ûêõ×_×ðáÃó7''G©©©1b„µ=66V.ôÃ=+ÔÏÝè¯=ÔÏÝè¯=ÔÏÝè¯=ÔÏ‚zPñeëÖ­Šˆˆ°¾Ÿ7ožf̘¡-Zä›F/\¸ øøx½óÎ;Ž1þ|?^«W¯V·nÝ|ž+,,̺¡mÛ¶ùé^8‡ú¹ýµ‡ú¹ýµ‡ú¹ýµ‡ú•ž+•ÌÌLU­ZÕúþÛo¿Õš5kT¥J5hÐ@}ô‘$iâĉ2dˆºwï^à>ú¨ÆŽ«
-¸Îãñ¨\¹rêÝ»·^|ñEk{ÕªUuòäIÿß¡2Fý܍þÚCý܍þÚCý܍þÚCýJÏ•ƒJÍš5uöìYëûÐÐPõìÙS§NÒ+¯¼¢aÆI’fΜ©1cÆXSlÞivíÚµJHH(ô©2¯×«ÜÜ\­^½Z£G¶¶Ÿ={V×^{m îV™¡~îFí¡~îFí¡~îFí¡~¥çÊA¥}ûö:pà€õ}¯^½$©@Ãsssó½Ž0ïk£££µvíZ?^sæÌñy®ãǏ[—<¨èèhÿ݇P?w£¿öP?w£¿öP?w£¿öP¿Ò+ïôJê×	Áëõú—¼^¯ ´´4«)3f
 ÌÐ}÷ݧ?þñªW¯žÞ|ó͝³yóæJKKS¯^½túôiM˜0!ß¹êÔ©£Y³fYû¯_¿^¼ò;@ÔÏÝè¯=ÔÏÝè¯=ÔÏÝè¯=Ô/°‚bP)ì/'µýÞ{ïÕ Aƒ¬ïo¸á­_¿¾ÄçÈ{9<<\O°¿  PIDAT‡.öœÒ¥¿Ð÷©6SP?w£¿öP?w£¿öP?w£¿öP¿ÀŠA¥´*T¨ Å‹—ùy8g P?w£¿öP?w£¿öP?w£¿öP¿Òså{T    7    ÆaP   `    ÆaP   `    ÆaP   `Ç>GeË–-š6mšS§7RZZš4hP¢}©_A¥©ŸéèoAäÃòánäÃòánäÃ'óáÈ ¥ììl}óÍ7NœÞX
-4P‡ŠÝú®¤õ3ý-ù°‡|¸ù°‡|¸ù°ÇÉ|82¨ÄÄÄ(&&ƉS»õs7úkõs7úkõs7úkõ3ïQ   `    ÆaP   `    ÆaP   `    ÆaP   `G>Ge×®]JOOwâÔŽiÓ¦ß>,‡ú¹ýµ‡ú¹ýµ‡ú¹ýµ‡ú™Ç‘A%==]+V¬PëÖ­8}™ûꫯ”í·õs7úkõs7úkõs7úkõ3#ƒŠ$µnÝZÆ
-sêôejáÂ…~?&õs7úkõs7úkõs7úkõ3ïQ   `    ÆaP   `    ÆaP   `    ÆaP   `    ÆaP   `    ÆaP   `œ T¼^¯–-[¦ÁƒëÖ[oÕ Aƒôé§Ÿúý<ÉÉÉ:|ø°rrr4räHkû‰'4jÔ(Ýzë­5j”Nœ8á÷s’Óõ»å–[¬/øŸÓý%%C>œátÉGɐg8Ý_òQ2Ws>‚bPYºt©V¯^­§žzJŸ|ò‰¦OŸ®={öøý<^¯WG_}õ•"##­í³gÏVË–-µbÅ
-µlÙR³gÏöû¹Ééú­[·NëÖ­óûùp‰Óý%%C>œátÉGɐg8Ý_òQ2Ws>Ê;½€’øðÃõÜsÏ)<<\’tÃ
-7hüøñÖõÐôéÓuäÈÕ¯__&LPãÆuË-·èü£–/_®þóŸ:r䈒““uàÀ]ýõ?~¼Z´h¡eË–é•W^‘¤|“ðû￯uëÖiÇŽJMMUÅŠuÏ=÷(>>¾l`“ÓõC`9Ý_òA>LætÉù0™Óý%ä£8AñŒÊñãÇU¿~}Ÿ×OŸ>]}úôÑòåËÕ§OM›6ͺ®I“&Vs“’’tçwjåÊ•9r¤’““%IýúõÓG}¤¶mÛjݺujÛ¶­>üðCëA­5jH’ªW¯®3gÎꮄÓõC`9Ý_òA>LætÉù0™Óý%ä£8AñŒJíÚµõŸÿüG
-6,ôú#GލwïÞªT©’n¿ýv½úê«Öu=zôPHÈ¥yìСCš6mšõ@ñx<’”ïµ}—/÷íÛW£FRß¾}õÛßþV§OŸVhh¨²²²ôÛßþ6 ÷3Pœ®Ëéþ’òa2§ûK>ȇɜî/ù Å	ŠA¥oß¾š>}ºÆŒ£ððp}ÿý÷zûí·­§×êÕ«§þóŸºõÖ[õü#ßt[®\9ër£FÔ·o_ÅÆÆªR¥JÖöuëÖéÕW_UçΝU¥J}üñÇzüñÇ­ëÛµk§÷Þ{O<ð€Þ{ï=µmÛ¶îµÿ8]?–Óý%—39Ý_òq	ù0“Óý%—ß‚bPéß¿¿Ê•+§©S§êûï¿WXX˜
-d]?nÜ8%''kæÌ™ª_¿~¾×æõä“O*%%EûÛßôóÏ?K’õôÙ¾}ûôÐCiÏž=&ú‡~XS§NÕwÜ¡&Mšèé§ŸÐ=
-§ëWØo®¦§-Íéþ’Kȇ™œî/ù¸„|˜Ééþ’KȇoA1¨x<õë×Oýúõ+ôúÈÈH½ñƶÿºY¿ûÝï4cÆŒBqùÍJmÛ¶-0Ñ_wÝuzùå—¯déFpº~niœî/ù¸„|˜Ééþ’Kȇ™œî/ù¸„|øo¦   puaP   `    ÆaP   `    ÆaP   `    ÆaP   `£?ðñ«¯¾ÒîÝ»^F‘š5k¦Ö­[;½ŒBQ?w£¿öP?w£¿öP?w£¿öP¿²cô ²{÷n}ùå—êÖ­›ÓK)Ô–-[t
 öìYcÔÏÝè¯=ÔÏÝè¯=ÔÏÝè¯=Ô¯ì=¨HRll¬^F¡’’’´gϧ—Q$êçnô×êçnô×êçnô×êW6x
-    ã0¨    0ƒ
-    ã0¨    0ƒ
-    ã0¨    0ƒ
-    ã0¨    0ƒ
-    ã0¨    0ƒ
-    ã¸jPñx<òx<*W®œ"""ôÑGØgèСڽ{·~ùåuìØÑÚ~ôèQuéÒE•*UR—.]tôèѲ\ºìÔïòm=OY.¥`§¿K—.UóæÍU±bEEEEiÍš5e¹t#Ø©ßâÅ‹yU×Ïtvú{Ù”)S®Úýõóãj­Ÿéìô777WS¦LQݺurUöØŸù¨U«VY.Ýq®T$Éëõê§Ÿ~ÒŒ3ôàƒ¸>77W!!!úüóÏÕ¾}{kûرcÕµkWeee©k×®7n\Y.ÛWZ?¯×+¯×[–KŸÒþ.]ºT‹/Vvv¶FŽ©–岍q¥õ[¹r¥V­Z¥¬¬,Mš4I(Ëe£„®´¿’´}ûv͝;·¬–j$;õ»ü3„Ÿ#æºÒþ&&&jñâÅZµj•.^¼xÕöØîÿ¯¼^¯6oÞ¬Gy¤,—í8×
-*—•+W.ß÷)))òx<zë­·ÔªU+uëÖM3gδ&û5kÖ(!!A•+WVBB‚V¯^íIJQÚú!¸”¶¿K–,Q‹-T¹reõêÕK×\sË6Fië·`ÁÕ¯__!!!*W®œêÖ­ëIJQB¥íï…¯wÞyljåçJ~~T¯^]U«VÕwÜ¡#GŽ”õ’Q
-¥íï¼yó4cÆµhÑ‚ÿ3ÈÞÿ¯žþy1¢¬–j×
-*G•*UÒc=¦9sæXÛ”™™©=zÈëõªG:qâ„5ÙgffªvíÚ’¤ZµjéÔ©SެßiWZ?»ý=vì˜úõë§™3g–õҍ`§~G•+WÖ°aÃòÝæ¸ÒþNœ8QC†Q÷îݝZº®´~^¯WYYYÊÈÈP³fÍ®ÚglMw¥ýýöÛoµfÍU©RE
-4(ôeOW»?7mÚ¤š5kªN:e½tG•wzþæë?Îy'ÓË—kÕª¥Y³fiäÈ‘
+IHDR  z  "   ¯ Ë   bKGD ÿ ÿ ÿ ½§“    IDATxœíÝy|wúÿñ÷‰µÓŠRSí()Ai"ÛW(UL§ZK¤c¨ -š‰Ði«k‚±M¢ŠÆÚjé6D¥_ZÔRJýÆV:¥¾E{9¿?"·ÙŽää¾Ï¹óz>y8¹Ï}îÏ}®^ï¤×Ùâs¶k×N     ß·qãF•W||¼Õç    ð€„„ùY}     ÏbÐ    ›aÐ    ›aÐ    ›aÐ    ›aÐ    ›aÐ    ›aÐ    ›aÐ    ›aÐ    ›±tÐs87´ýFdff*""¢ÄÇ)ŽˆˆeffZ²6    ÜРçp8´dÉ—m'NôÈ`–›Óé,ñ1–,Y¢æÍ›ß/^¼X
+6TÅŠ¤5kÖHʾO9_¹eee)>>^uëÖUÅŠÕ¨Q#½ûî»Æõ9·ñóóSíÚµµ`Á㺐<u    ³Üð3zS¦L1±ß~ûMóçÏ÷øIyBJJŠÂÃÍï?þøc}þùç:sæŒÆŒ£>}úHÊ*ó,´jÕ*­\¹Rçϟׇ~¨ÔÔT—}œN§233•œœ¬gŸ}ÖØ®”””Ò¹c    P„ô‚ƒƒõÑGI’.\¨®]»æÙ'çÙ®»îºK+W®”$mß¾]ÁÁÁ*_¾¼Ë³g¯½öšªV­ªêÕ«Ϙå\ïp8ò½~Ïž=jÕª•*V¬¨
+h̠
+yÎaóæÍ
+4¾÷Ýwu÷ÝwËÏÏOåʕӝwÞYèýœ9s¦æÌ™£ûî»O*TP`` æÍ›Wàþ5kÖ4.ê›o¾)ôø    PZnxÐ{î¹çôæ›oÊét*11QÏ<óLž}œN§®\¹¢…ê¹çž“$=ùä“êß¿¿ÎŸ?ïòš¿¿¿~þùg-X°@#GŽÌs¬ü®ïß¿¿ž~úi={V‰‰‰8p`žÛ¥§§«J•*.Û‡*W®¬ÁƒkæÌ™…ÞÏ£Gª~ýúÆíò{y§ÃáP¹råÔµkWMœ8ÑØ^¥J<y²Ðã   @iqÄÅÅ9ãããÝÛÙáÓéÔc=¦ZµjéĉZ¼x±±]’&Ož¬‰'êÈ‘#ÊÊÊ’ÃáPVV–*T¨ 3gÎèæ›ov9Þ•+WäçççrüÜÿæw}…
+\>ì$gÜjÖ¬©½{÷êÖ[ouÙ~ñâE­\¹R/¼ð‚öíÛ—ç¾å¨]»¶RSSaïú}r.;N}ùå—8p öïß/I:}ú´6l¨cÇŽ¹UW    𔄄„â}êæˆ#ô¯ýKÇÏs]\\œæÌ™£sçÎ飏>2£Æ+))I—/_vÙ?gˆ+H~×éwÞ1ž¼~È“¤x@{÷î5¾ŽŽÖñãǍcž={¶Ðu¨¿ýíoÚ·oŸ®\¹bqÉ9¶$íÛ·O¡¡¡…î    ¥¥Xƒ^Û¶måt:Õºuë<×ÅÆÆªW¯^ºãŽ;´mÛ6c{rr²’““uÓM7•øS:ß{ï=ÍŸ?_·Ýv[¾/©”¤>}ú(--Íø¾iÓ¦
+
+
+RÕªU5nÜ8-Z´H’\nŸûò?þñµiÓFíÛ·WåÊ•õ裏ê½÷ÞsY#çS7###5uêTcûºuëY¢û    ÅuC/Ýô%¿ýö›úöí«Å‹›¾vDD„.\¨òåË›¾6   €²-!!A¶D*T¨`ɐ'ɲu   @*æK7    Þ‹A    l†A    l†A    l†A    l†A    l†A    lÆ­¿£·qãF¥¥¥•ö¹ ¶¦víÚºy<ƒ¼æ!o€yÜɛ俠·nÝ:¥,›£æ-•øÄ€²jçÖý:}út‘Á$o@É‘7À<ä
+0»y“Üô$)´U#=7&¢D'”es¦®”²ÜÛ—¼%CÞ ó7À<7’7Þ£    6à    6à    6à    6à    6à    6à    6ãößÑsÇέûµåë=ž<$àš†Ô3ýÀ’7”Uä
+0yÌãé¼ytÐûæ«=Úðé^µiÑ“‡¼Ú7Û·ëlÆÓ’7”Eä
+0yÌSyóè 'ImÂZèåØXOðZ‰oÏÐO­y䑼¡¬!o€yÈ`žÒÈïÑ    ›aÐ    ›aÐ    ›aÐ    ›aÐ    ›aÐ    ›aÐ    ›aÐ    ›aÐ    ›aÐ    ›aÐó ÿºVŸ‚$)óÊE
+fõi¸-jè0e^¹bõiÀǐ·â!o(òV<ä
+ÅAÞŠ‡¼ÌÒAÏ¿n€Þ[¶,϶ü.týìrý´¤Ùyn·fÝ:ù×
+Ðg©©7´¾†¥]{öè·ÌLuz¼‡±ýçcÇôp¯^ªØ@÷꥟ËsÛ«>VPÓ&Æ÷þu\¾î	ɳ=·¬¬,%$NV£°–ªpq}AÛÝ©Î:ÕîÑ}­ZkÉŠÆu͚ܧ«\oÒCÞò*(oe$·ëó¶ò³Ï®êõêëþváZùÙç…kõëÞ^5èÏOüE¿œ8‘}ÜO>QØCu{ý@µíÚMë6l0ŽCÞ|yË« ¼Ôó¹‘7†¼åUPÞÞ_µJ<Ø‘¼•–?£·èýôß#GŠ}û™ï¼#§Ó)Iú-3S‹?ø Ï>Ióç둇;köü_ßÓ²²œòóóÓ7Û¶)¤Y3cû?ÞŒWËÐPýøÝNµ
+Õ‹ññyn»ì£Ô&,Ìøþԍ¯/_
 ¦yÂeûõ&ýëm½¿j•ÞwžNØoìSÐvɽúŸúá Nìß§iÆkä‹/ÛÛ„…iÙGÝh‰PäÍUAy+(#¹]Ÿ·¡±±?v¬Ž|¿[ã^~YÃF*ôXÏÆÄ(þ¥—ôã®ï4tÐ ½ôfv¦?üø͝6UÿÝõ÷ï§AÆ·!o¾…¼¹*(o…õ|ò†¢7Wåíßk¿ÐòwçéÇïvjijÏh y³5˽	¯ŒÕó/üCYYYź}³Æ÷éÓ5k$IKW¬P§öá.×þïõÓ‘£Jž6MGþY‡~üÑíõ¿ýn—Útéªõê«M—®Ú¹{·$i˷ߪyûªuoc½2n¼±ÿÞýûõPžº½~ B;<¨M[¶æ9¦Ý ½2n¼jÝÛXÍÛwЖo¿•$½œl<"Ôúá.êÑG3ßyÇx4#mýz
+‰ŠR¥J•4$*Jëþw}žcoÛ±CõêÖÍ·NoMŸ®ÁýkAe”$Í[´H¯£Fr8En—Š®ÿõn¯^ݸ\¯n]mß¹³ÐýáYäͽ¼¹ãú¼ýñÎ;%ÉÈHí»î*ôö95ÈÙ?5-M’4wú45
+T¥J•Ô¾MÝ|óÍÆmÈ›o!oîå­°žÏAÞPòæ^Þfüs¢þxçrøù©œ_9ÝQ³fžc“7û°|ÐkP¿¾:´m«ÍI.Öíÿ6`€þ9ý_r:z;y®]7Ì$/X¨˜áÃT¾\9Å>7\ɺ½þ³11ê×'B‡wîP¿>zfdŒ$鹸Ñ¥[·èŽ?\Ȑ¿Ô€'"õßÝ»ÿÒ‹Æ#×»«V-غEO=Ù_ÏōξmT”~øv»Úµn¥S?T»Ö­t`ÛVã‘’SgΨzµj’¤Ûüýu:##ÏqO>­ßåórÓ–­ò¿µªjÞ~{u”¤£ÇŽi݆
+º£Ñ½jÚ¦­>Y½ºÐíRÑõ—²ÝvO=õ~r€^ÿÇÆößýîwJ?uªÐs‚g‘7÷òæŽëó–ÿ¦N5hpt´þùÆë…Þ~Ò›oêï/¾¨»›6Óë×ëô™3.×ÿrü¸ú
+¢qc_6¶‘7ßBÞn,oùõ|ò†¢7÷óæ_7@hÐPύ­Ä7ßÈs\òf–z’4$j€ÖmØ ÿ·wŸËöJ+êü…Æ÷ç/\P¥J•\ö©{wmý¡fMżü²ê¨Öþ`\wùòe-XºTž*ÿºðìP-XºT—/_vký½û÷«_D„n¾ùfõíÕKÿÙ·ÏØþ—^=uÓM7鯽{ûïܽ[ÏŒŒÑ4T¯QÚÿÃùÞßÜ·Ý»¿¤ìæ­t¿Ò6|%ÿºJÛð•î	QÒ»ïJ’ªÞz«N¤§K’Nž:¥ª·Ü’ç¸þU«ºÔ+G|â$=30*ßsÉ­ê-·(¼ukÚñ­ÞzõUã‡FAÛ¥ÂëŸãÔ•~ð€>X0_c^{ÍØ~þüyUó÷/ò¼àYä­è¼¹ãú¼ýíùš3e²Žýçÿ))1QCFü½ÐÛ?òpg}·a½~Þó½:´m«ZwÜa\·uÇuz¼‡†DE©KÇŽÆvòæ{È›{y+¨çs7¸ƒ¼¹—·S?ÔÏ{¾×?ßx]O??"ÏqÉ›}xÅ çp84é×õ÷_tÙÚ\§O×ùtþÂMœ>]­BCóÜþÙA5gþ=ýä“.Û—¯\©àfÍ\Þ«¤å+Wºµ~ý{îQÊòåºxñ¢,]ªõëK’ëÕSÊòåºté’Þ[¶Üؿɽ÷ê_oMÐÑïw͘ŸÜ·
+¬WORvó>30J«¥(mÕJõ‹ˆÐ©jp¿~’¤ðÖ­õvr²._¾¬·““Õ®uë<Ç
+nÖ,σ¯6oVfæ5mÜ8ßsÉ
 -¼m£¹ÿ-h{Ž‚êŸŸ'ӍËÒýM›yxy+:oî¸>o'¯>š˜““n<ºèt:õŸ}ûôb|¼<‘ýÚy‹)rà Mzó
+õîÞ=ÏmÈ›o!oEç­¨ž—ÈÜCÞŠÎÛèW_3ž8ðóóÓ¹óçó—¼Ù‡WzRöëÿÒ«§Ë¶)		ÚñÝ.Õi®z!͵s×nM—ç¶-CCuꇃjÑ<Äeûìwçë©ëþÇí©~ý4'Ÿ7Ñæ·þÔñã”ôî|ÕnÒTóRiÚøì×OONˆ×ôÙs¢ŸŽ5öOš2Y‹?ø@uï.ôû~ü鈂Côvr²&'\ûP•Í[·)48X§NŸ‘Õª.·yuÌhmØ´Y¼¯‰¾Ú¼Y¯½0&Ïq{<òˆ6lÚä²-~R¢†D
+pÙ–ûÜr_~}ÌM™5KwÝÛXq¯¾¢é&º=GAõϽ^µ€{4pøsÿÊXcûúÕóÏÎ÷6(]ä­ð¼”‘Ü®ÏÛ¤7ßÐß_|Iµݫرc•øæ›…+'öý«ëÖUß~J’=zŒŽŸ<©ýúûç~d•¼ùòVxÞŠêy‰¼Á}ä­ð¼5nØPm»vÓÝM›iòÛ34gê”<Ç%oöላ‹sÆçó	޹%$$hÿѯôܘˆB÷›3u¥§üõrl¬'ÏÑVüëÜÐû€nÄo™™z:úy%O›Z*Ç÷´¨¡Ã4kr¢Ê—+gõ©”HâÛ3ôÓÅ=nå㦬º"oæ!oא·ü‘7Ï!oא·ü‘7Ï!oא·ü%$$¨¼'OÖªP¾¼Ï„R’O+p=ò˜‡¼æ!oöá5/Ý,+JëÑ y‘7À<ä
+0yƒ;ô    Àfô    Àfô    Àfô    Àfô    Àfô    Àf<þwô¶lÿV‰3fxú°€×Z¿i“ê4½Å’µÉÊò˜‡¼æ)¼ytÐkROg3.è¿ç÷xò°€W»»É-jÞ²‘éë’7”Eä
+0yÌSyóè Úª‘B[™ÿ(‹È`ò˜‡¼žÁ{ô    Àfô    Àfô    Àfô    Àfô    Àfô    Àfô    Àf<úwôvnݯ-_óÇ-Qö4
+©gú•%o(«È`ò˜ÇÓyóè ÷ÍW{ôå§{Õ¢EOðjÛ·o×ÙŒ¦ÿ"$o(‹È`ò˜§4òæÑAO’Z´h¡ØØXOðZ3fÌÐÉ‹Ö<òHÞP֐7À<
 ä
+0Oiä÷è   €Í0è   €Í0è   €Í0è   €Í0è   €Í0è   €Í0è   €Í0è   €Í0è   €Í0è   €ÍØbаú€2ƒ¼æ!o€yÈìÆÒA/--M]ºtQ`` |ðA}ôÑG¥¾fIB<jÔ(íÙ³G™™™êÑ£‡±ýرcêÕ«—4h ^½z騱cž8UÀ£ì’·€€ ãðVvÉÛ'Ÿ|¢Î;+00PݺuÓ†
+<qª€GÙ%o«V­RÇŽÉ<ÆÒAoĈ<x°¾ûî;%''kíÚµVžN‘œN§üüü´mÛ65kÖÌØ¯ÐÐPíܹS¡¡¡Š·ð,üÙ%oÔÁƒ-<3 hvÉÛ'Ÿ|¢©S§ê»ï¾S¿~ý4|øpÏÈŸ]òöÅ_hÞ¼yÚ¹s§žyæò†³tЫZµªŽ?®Ý»w«FJLL4®Ûµk—ºvíªúõë«k×®Ú½{·$i÷îÝzä‘GT¿~ý<¦lذA<ð€–,Y¢ýû÷«gϞƣ;[·n5ö/èÙ€€€ ?^7V‡ôí·ßJ’’““ eË–©K—.êÓ§ÞyçãëׯWTT”*Uª¤¨¨(­_¿¾Tꔄ]òø»ämÚ´i
+T¥J•Ô¦MÝ|óÍ¥R/ $ì’·‰'êÎ;ŸŸÊ•+§š5k–J½PvX:èÍž=[?ýô“^}õUµlÙRï¿ÿ¾q]LLŒ"""´cÇEDD(&&ÆØþøãk÷îÝ.êðÁzùå—5wî\õîÝ[#GŽTdd¤víÚ¥_|Q£F2ö/ìZµjiË–-êß¿¿F-IŠŠŠÒöíÛÕªU+<xP­ZµÒÖ­[cœ9sFÕªU“$ùûû+##ÃóÅJÈ.y|Ýòvüøq
+2D/¿ü²Gëx‚ò †
+jôèÑzã7<^+”-å­\¼nݺzíµ×$I{÷îUdd¤üqIÒþýû¡Ê•+«W¯^zýõ×%IûöíSŸ>}T±bE—c5J³fÍRãÆ%e?RcÚáp¸uN={öTåʕջwocÍ܏Öä\		ÑØ±cÕ¯_?Ýzë­JOOWõêÕuêÔ)ÝrË-Å-	Pjì’7ÀØ)o;vìаaÃ4bÄuìØ±Xõ J“òvðàA]ºtI©©©1b„¾øâ‹bՐ,~FïùçŸ×¡C‡ô믿ê?ÿù²²²Œëî¹ç-_¾\/^ÔÒ¥KU¿~}IR`` -Z¤_ýÕåXIIIЉ‰ÑçŸ.Iº÷Þ{5aÂ㑚H’Ê—/¯_~ù¥ÀsZ¾|¹.]º¤åË—«^½z’²C¥””­\¹R:xð ÊÖ­[+99Y—/_Vrr²Z·ní¹"b—¼¾À.y[´h‘
+¤7ÞxCÝ»w÷\ ²KÞ^{í5¥§§K’üüütþüyUe•¥ƒ^‡4pà@5nÜX‰‰‰.b2nÜ8ÍŸ?_M›6Õ¢E‹4~üxcûÒ¥KÕ¨Q#—GFÚµk§yóæé•W^Ñܹs5yòd}ðÁ
+vy
+õO<¡ðððßïsäÈ…„„(99Ùå|¶mÛ¦àà`9sFU«Vu¹ÍèÑ£µyóf5iÒD›7oÖ˜1c<V#ÀSì’·ÜÇçÓ7á­ì’·1cÆèäÉ“êß¿¿±Ö…<V'Àì’·†
+ª[·njÖ¬™f̘¡)S¦x¬F(›qqq΢>%2!!Aû~¥çÆDºßœ©+u9Ý_±±±ž<GÓð> ܰ3fèäÅ=nå㦬ºE~*+y
+FÞŠ‡¼¡8È[ñ7GiäÍ0    p
+ƒ^.<ú˜‡¼æ!o€yȼƒ    Øƒ    Øƒ    Øƒ    Øƒ    Øƒ    ØLy+ݾ}»6mÚdÅÒ¶qÿý÷«E‹…îCKΝ:{;ú äÈ›9È$òfò‰¼™Åª¼Y2èmÚ´I_~ù¥ÚµkgÅò>oãÆÊÈÈ(²a¨sɸ[goG”y3yƒDÞÌBÞ ‘7³X™7K=I
+W||¼UËû´„„>|Ø­}©sñÝH½}P|äÍä
+y3yƒDÞÌbeÞx    Øƒ    Øƒ    Øƒ    Øƒ    Øƒ    Øƒ    Øƒ    Øƒ    Øƒ    ØŒí½ÌÌLEDDX}EŠˆˆPff¦Õ§QlÔ}`ê‰>0u†D˜…:{–Oz‡#ßíK—.UãÆU±bEiÍš5yöY²d‰š7oîr¬œ¯ÜŽ9¢6mÚ¨R¥JjÓ¦Ž9âÖcÇŽu9VîË»wïVýúõõöÛo»¬íçç§ÚµkkÁ‚ƾ!!!Z²d‰»%)Ô}`ê‰>0u†D˜…:{Ÿô
+²téR-^¼X:t¨"##óì“’’¢ððpã{§Ó)§Ó™g¿‘#GªmÛ¶:sæŒÚ¶m«˜˜˜"ר²e‹fÍš•ï¹­]»VÝ»w×ìÙ³5dÈ—õ333•œœ¬gŸ}ÖØ®”””®¨3$úÀ,Ô}`ê‰>0u6ŸOzK–,Ñ}÷ݧʕ+«S§NúÝï~—gŸÍ›7+00°Èc­Y³FÑÑѪ\¹²¢££µzõêB׸té’¢¢¢´páÂ<Çš7ožbccµzõjµk×®À5kÖ¬i\Ô7ß|SäyZ:C¢ÌB!Ñf¡Îè³Pgó•·ú<áØ±cêÑ£‡¦L™’çºôôtU©R¥Èc¤§§«F’¤êÕ«ëÔ©S…®§¨}ûöyŽ5lØ0Íš5KuêÔÉs]ÎSÄ*TÐòåˍíUªTÑÉ“'‹<O+QgHôY¨3$úÀ,Ô}`êlŸ~FOÊžü[¶l©èèhýùÏÎs}µjÕtîܹ"ãïï¯ãǏK’Nœ8!ÿBט2eŠFŒa4@î×ø¦¦¦*:::ß§tN§²²²´zõj=ÿüóÆösçÎé¶Ûnsó^›:C¢ÌB!Ñf¡Îè³Pgsùô —””¤GyD3gÎTß¾}óÝçÐÞ½{‹<VÇŽ•˜˜¨K—.)11Q>ø`¡kdee¹¼n8÷ë‡CCC•ššªØØXÍœ9³À5sT’öíÛ§ÐÐÐ"ÏÓ
+Ô}`ê‰>0u†D˜…:›Ïg^ºyý§í8N=õÔS’¤Î;ÛÏž=ëò”oŸ>}”––füÇÈï“vœN§&L˜ ˆˆÝrË-
 
 
-ÕñãǦ'N(44´LÖkš+­‚ƒþnݺUqqqzöÙgu×]w~±²S?¯×«óçÏkùòåºÿþûuðàÁÀ/¥r¥ý9s¦¼^¯ÆŒcís5þÇîϏ뮻NÏ<óŒªW¯Ø…âŠØùÿUÏž=•””¤5kÖhȐ!úÃþP&k6‰Ý|Lž<YÉÉɁ]¤\÷ŒŠ/^¯W£GÖúõëµsçN=øàƒòz½Öƒ gÏžJIIÑ…”’’¢=z8¼b³W?·âú;oÞ<Ýy睚3gŽ
-äðjÍS\ýtüøqIRHHˆÎœ9ãärQJÅõ7777ßû+®Æ!¥(%ýùqúôi½ðÂŠŠŠrh¥¸Åõ·W¯^’þÿÿ„óò¯üJ’
-6(''GmÚ´qp¥Î¸jIÚ¼y³:vì¨ÌÌLÕ¬Y3ßuÉÉÉJKKSµjÕ´aÃ͘1áUš«¨úåýk-üå–àTTzè!ýðúí¶Û¬þž={Ö¡•š©¨úµjÕJQQQªQ£†¦M›¦E‹9´J\©¢ú‹â•äçG:uôùçŸó^Ÿ TTg̘¡äädU­ZU=ö˜Þ|óM‡Vi®âþ}™<y²X™ó\õÒ¯â~‹µeËIR=
-<crã7jóæÍ[[0°S?~ƒh>úkúÅÇÇ+>>>`kƒ}vú[šã¸ÿ¾¸›þÞpÃ
-Z¿~} –ìþûòÙgŸd]ÁàªzF   @p`P   `    ÆaP   `    ÆaP   `    ÆaP   `ã?ðqË–-š6mšÓË(TZZšBCC^F‘¨Ÿ»Ñ_{¨Ÿ»Ñ_{¨Ÿ»Ñ_{¨_Ù0zPiÚ´©Îž=«Ý»w;½”B…††ªuëÖN/Ã'êçnô×êçnô×êçnô×êWvŒT¢¢¢åô2‚õs7úkõs7úkõs7úkõ+;¼G   €qT    ‡A   €qT    ‡A   €qT    ‡A   €qû•ýû÷káÂ…N¾LíÞ½[mÛ¶õë1©Ÿ»Ñ_{¨Ÿ»Ñ_{¨Ÿ»Ñ_{¨ŸYT¢¢¢”íÄ©Ѷm[uèÐÁoÇ£~îFí¡~îFí¡~îFí¡~æqdP‰‰‰QLLŒ§vêçnô×êçnô×êçnô×êgÞ£   À8*    ŒÃ    À8*    ŒÃ    À8*    ŒÃ    À8~ÿ•/¾øB³gÏö÷a¿IOOW£VÕ97ù€éÈàù |D>ü:¨´j×Hg²Ô‰÷ûó°€_ÝÔ²šnîØ´ÌÏK>Èàù |D>ü:¨DwjªèNe` À7òøF>pµâ=*    ŒÃ    À8*    ŒÃ    À8*    ŒÃ    À8*    ŒSâÏQÙ³ãR_^ȵ FÙþù~uíаDû’\mÈàù |+M>J4¨ÄÄÄèôéÓRŽ­uA¥KûêÖ­[±û‘\Èàù |+i>$É3qâDobbb€—    %“””Ä{T    ˜‡A   €qT    ‡A   €qT    ‡A   €qT    Çëýýïïô:    @’´~ýzý?¹.t†?    IEND®B`‚
\ No newline at end of file
+ÕâÅ‹%É­5òÓ¸qc¥¥¥©S§N:}ú´F岿wÜ¡©S§û¯[·.ß7¥š:C¢ÌB!Ñf¡Îè³Pgïàƒ^~Ÿ¶SØöÜz÷îí2Ñt›?þñúê«¯ŠµFî}r_ЁÜ:Ö–-[\ž¶u†D˜…:C¢ÌB!Ñf¡ÎÞÃ'½’¨P¡‚1å{3_8ÇÂPgHôY¨3$úÀ,Ô}`êìY>ý=    @^z    `3z    `3z    `3z    `3z    `3z    `3–ý½7jܸqV-ïÓÒÒÒT§N·ö¥ÎÅw#uövôAñ‘7s7HäÍ,ä
+y3‹•y³dÐ
+
+RFF†:dÅò>¯N:jÑ¢E‘ûQç’q·ÎÞŽ>(òfò‰¼™…¼A"of±2o–zaaa
+³bé2…:C¢ÌB!Ñf¡Îè³PgßÅ{ô    Àfô    Àfô    Àfô    Àfô    Àfô    Àfô    Àf,ù;zÛ·oצM›¬XÚ6î¿ÿþ"ÿø"u.9wêìí胒#oæ oÈ›YÈ$òf«òfÉ ·iÓ&}ùå—j×®Ëû¼7*##£È†¡Î%ãn½}P2äÍä
+y3yƒDÞÌbeÞ,ô$)<<\ñññV-ïÓtøða·ö¥ÎÅw#uövôAñ‘7s7HäÍ,ä
+y3‹•yã=z    `3z    `3z    `3z    `3z    `3z    `3z    `3z    `3z    `3z    `3¶ô233aúºÊÌÌ4}]«PgHôY¨3$úÀ,Ô}`êìY>1è9Ž·ç|dÉ’%jÞ¼¹ñ}VV–ÆŽ«;ï¼S~~~yn;vìX—m¹/ïÞ½[õë××Ûo¿í²¾ŸŸŸj×®­û†„„hÉ’%7vG-F!Ñf¡Îè³PgHôY¨³÷ð‰A¯ N§SN§³Ð}RRRn|¯Å‹ëóÏ?ו+W\n¿eËÍš5+ßã¬]»VÝ»w×ìÙ³5dÈ—sÈÌÌTrr²ž}öYc{xx¸RRRŠyϼu†D˜…:C¢ÌB!Ñf¡ÎæóéAÏ›7oV`` ñ}RR’Þzë-Ýwß}.Sÿ¥K—¥…æ9Ƽyó«Õ«W«]»v®Uˆ¿òù  ðIDAT³fMãr`` ¾ùæÝïG!Ñf¡Îè³PgHôY¨³gÙ~ÐKOOW•*UŒïúé'­Y³F7ß|³êÔ©£?üP’§¨}ûöyŽ1lØ09RuêÔÉsÃáP¹råÔµkWMœ8ÑØ^¥J<yÒówÈKQgHôY¨3$úÀ,Ô}`êìY¶ôªU«¦sçÎßûûû«cÇŽ:uꔦOŸ®ÁƒK’¦L™¢#Fä~Ô 55UÑÑÑù>¥ët:•••¥Õ«WëùçŸ7¶Ÿ;wN·Ýv[iÝ-¯C!Ñf¡Îè³PgHôY¨³gÙ~Ð{à´wï^ãûN:IRžÆÈÊÊryípî× ‡††*55U±±±š9sfk?~ܸ¼oß>…††zîŽx9ê‰>0u†D˜…:C¢ÌB=«¼Õ'à®ë
 ?eÇétæû);׿ɳOŸ>JKK3þã½õÖ[zâ‰'ôØc©víÚš;w®[ë7nÜXiiiêÔ©“NŸ>­Q£F¹¬{ÇwhêÔ©ÆþëÖ­Sddä
+ÞKëQgHôY¨3$úÀ,Ô}`êì|bÐ+èzŠúäIêÝ»·úöík|_«V-­[·Îíõr_ЁÜZË–-.O	ûê‰>0u†D˜…:C¢ÌB½‡Oz%Q¡B-^¼Øôu­XÓJÔ}`ê‰>0u†D˜…:{–íߣ    e
+ƒ    Øƒ    Øƒ    Øƒ    Øƒ    Øƒ    ØŒeGoãÆ7nœUËû´´´4Õ©SÇ­}©sñÝH½}P|äÍä
+y3yƒDÞÌbeÞ,ô‚‚‚”‘‘¡C‡Y±¼Ï«S§ŽZ´hQä~Ô¹dÜ­³·£J†¼™ƒ¼A"of!oÈ›Y¬Ì›%ƒ^XX˜Â¬XºL¡Îè³PgHôY¨3$úÀ,ÔÙwñ=    °=    °=    °=    °=    °=    °=    °KþŽÞöíÛµiÓ&+–¶ûï¿¿È?¾HKΝ:{;ú äÈ›9È$òfò‰¼™Åª¼Y2èmÚ´I«V­R³fͬXÞç}ÿý÷ÊÈÈ(²a¨sɸ[goG”y3yƒDÞÌBÞ ‘7³X™7K=IjÖ¬™lÕò>-%%Åí}©sñÝH½}P|äÍä
+y3yƒDÞÌbeÞx    Øƒ    Øƒ    Øƒ    Øƒ    Øƒ    Øƒ    Øƒ    Øƒ    Øƒ    Øƒ    ØŒOzN§SË—/W¿~ýôÐC©oß¾úì³Ï,9—	&èÀÊÌÌÔСCí'NœÐðáÃõÐCiøðá:qâ„%çW¾Pç:_(¾Ðäͳțu|¡È›g‘7ëøB7Ï*ëyó‰AoéÒ¥Z½zµ^|ñE}òÉ'?~¼vîÜiɹ8N9}ÿý÷jذ¡±}ÆŒjÒ¤‰V­Z¥&MšhÆŒ–œ_IøB×®]«µk×ZrNe…/ôyó,òf_èòæYäÍ:¾ÐäͳÊzÞ|bÐ[±b…bccU¿~}•/_^µjÕRll¬qýÞ½{5hÐ uêÔIƒ
+Ò¾}û$eOëS§NÕC
 =$I:|ø°†ª‡zHýúõÓ®]»ò¬Õ¡C%%%©K—.êׯŸöìÙ#IZ¾|¹:tè Ï>ûLƒ
+Rtt´Þÿ}ã‘€­[·ªgÏžªX±¢zöì©­[·–vY<ÎêŒÒç}@ÞÈ›]øB7òf¾Ð䍼y’OzǏ×Ýwß]àõãǏW·nÝ´råJuëÖMãÆ3®kРñtqBB‚yä}üñÇ:t¨&L˜ïñn¿ýv­X±B=ö˜&Nœ(IêÑ£‡>üðCkíÚµ
+ÖŠ+ŒG222TµjUIÒ­·Þª³gÏzä¾›ÉêŒÒç}@ÞÈ›]øB7òf¾Ð䍼y’Oz5jÔЏ?þXàõ‡V×®]U¹reuéÒE‡6®{ðÁåç—}7÷ï߯qãÆ©sçΊ‹‹ÓO?ý”ïñ~øaUªTI]»v5ŽÕ¡C=úè£Ú¶m›:tè mÛ¶©{÷îZ±b…$é÷¿ÿ½NŸ>-I:sæŒ~ÿûß{ä¾›ÉêŒÒç}@ÞÈ›]øB7òf¾Ð䍼y’OzÝ»w×øñãµoß>]¹rEGÕøñãëk×®­ÿûߺ|ù²>ýôS—GÊ•+g\®W¯žF¥O?ýTk×®Ujjj¾ëåë³Ï>3޵víZõìÙS“&MÒÌ™3Õ­[7­]»VÝ»w—$…„„hÙ²eúõ×_µlÙ2—F)J•/Ô¥Ïú€¼‘7»ð…> oäÍ.|¡Èyó¤òVŸ€;zõê¥råÊéÕW_Õÿýßÿ©fÍšêÛ·¯q}LLŒ&L˜ )S¦èî»ïvypn/¼ð‚5iÒ$ýú믒”ïS¸ÇŽS÷îÝU£F
+=ÚØ¾{÷n=õÔSÚ¹sgžGXž~úi½úê«úÓŸþ¤
+襗^òÄ]7•/Ô9÷k«s.—µ§áK›/ôy»†¼ù6_èòv
+yóm¾ÐäíòVr>1è9õèÑC=zôÈ÷ú†
+jΜ9y¶_ÿì®»îÒ[o½UäzƒÖàÁƒólŸ>}º$)888Ï#,·ß~»¦M›Vä±½™/ÔÙŽ!ô6¾ÐäíòæÛ|¡ÈÛ5äÍ·ùB·kÈ[ÉùÄK7    îcлNY™ð­F!Ñf¡Îè³PgHôY¨sáô    Àfô    Àfô    Àfô    Àfô    Àfô    Àf¼ú¦ÿý÷Ú±c‡Õ§aª{ï½WÍš53uMê‰>0u†D˜…:C¢ÌB½Wz;vìPÒwIR;«ÏÄ$¥Ès‘¦7u†D˜…:CÊîƒï’’ÊRè\¤5y£Îرc‡’’’¬>
+SEZ”7êì]¼zГ$…KŠ·ú$L’ i§Ek‡‹:ƒ>0K¸¨3h“„‹:(›x    Øƒ    Øƒ    Øƒ    Øƒ    Øƒ    Øƒ    Øƒ    Øƒ    Øƒ    Øƒ    ØŒ½=ÇÕ¯r’%}xÝ
 uùí_%íô›¤–¹¶‘ÔFR¥«ÿ)æñ½Õuväú‚u¬îƒ¥’Kª()HÒšbßÛY]çÅ’ÊþuörV·Aޱ%8¶/°ºÎñ+Î8N9N]¹rE{÷îÕ£>êr]~ûÇœ9sÔ¬Y3U¨PA_ýµ±ÝÏÏOcÇŽÕ‘#G”••Uìã{;«ëœ³~Î׉'Šu|of¯AO’œ’.KzKÒ RZ#KÙ•ûZÒ¹¶”ÔVÒ™«ÿÆ”ÒúÞÀÊ:;¯~ÁzVöÁRe!’†JŠ,¥õ½•uþXÒçÊþ¹6FRŸRZE²²
+$i‹¤Y¥´®7±ºÎNñkÎ8UªTI#GŽÔìÙ³Ke
+???eee©eË–Ú¼y³±}ôèÑŠˆˆPçΝU®\99öû­¬³Ãá0¾Zµj¥3f”ÊúV²ß —£\	në'éwÊ~HoÓÕí‰W¯{GRSIí$Mѵ‡ÝÖHŠ–Tùê¿«Kp¾ÂŠ:ÃûXÑK$ݧì¼uºz{»³¢ÎïJº[Ù¿-ÊIº³ç °¢
+.IŠ’´°kû«~½Ý*©Š¤?I:\‚s€g\¹r¥Ø·u:JHHÐùóçµwï^µhÑB’-§Ó©'Ÿ|R;wîTZZš†n<c5xð`9R»ví²í³y׳¢Î¹½ðš>}z±ÏÁ[ÙoÐs(û¥“ÏIšY‚ãÔ–t\Ò0Iƒ¯n‹–”.éAe?Ôö ¤ºö°[º¤W/W—tªë{;+ëïá
+}pLReÿß’]Y]g‡²êÁ%\%beÄI ©}	ÖõVÖÙ©ì'ÏJºWö~¡‚·s:º|ù²&Ož¬§Ÿ~ºØÇùñÇU£F
+M:UIII’¤ÄÄDU«VM©©©r8JMMUõêՍgîîºë.uìØQ.\СC‡\^Òh7VÖ9GëÖ­•žž®Ÿþ¹D÷Å•·ú<® a ’¤sÊ~˜LW/W.ä8$ݤìҏ¸º-w_ä\®.iª²_:æ¯ìŸê5•ý“ÛÿÏÝ—XYgx«û`³¤I¯Iú󍜸±ºÎNI%­”ôWIûnàÜá1V¶Á”«ëçÞß®½Y7Iº]Ò+Ê~vÖ(èå’—/_V•*UtîÜ9IR•*UtéÒ¥3wî\]¼xQsæÌÑ?ÿùOI®ï5˹|âÄ	
+6LÓ¦MÓ©S§´fÍÅÅÅ©cÇŽš;w®>üðÃ|ï묬sŽW^yE11ö|¿•ýžÑ+HIo*û'󹫗Û²ÿ<eÿÍ;’]Ýæ”ô¼¤
 u’¶)ûÅûN]ûéÜQٯ˸tõß=xþ¾ÂŒ:Ãû™ÑI’QöCî}=yò>ÄŒ:G+û,)û7ÆYO<<ÅŒ6È’ëûÆì:äÆÌ_o§¯?È#gOZ¿~½ÆŒ£*Uª¨J•*3fŒþ÷ÿ·Àýû÷ﯛnºIO>ù¤öìÙ#){¸™4i’ÂÃìٳgËápÃÇêÕÙïýÉNÊÊË7s3£Î’ô?ÿó?*_¾¼¶oß^ê÷É
+egЛ-i«²&»]Ù?a{Ïç!e?Ì–¨ìÿ¡Ìñ•²?"+]Rµën3ARš¤[$}©ìwr—5fÔ9÷Ç‘ñÑdÞÉŒ>xJÒ/’:ëZœ+ù©û3êÜTÙÿ·YUÒ8I‹<pÞð(3Ú æþz»CÙÔR–Þé+
+¤ýòË/úå—_¬Aƒ
+þØž:uêèĉŠŽŽÖàÁƒí­ZµÒ×_­jÕª)==Ýå6#GŽTLLŒÎ;§É“'kÀ€¥v¼•u–²ŸÍKLL,•ûà
+ìõÒÍÂð¨£ìOŽsWÂÕ¯ëm¼úïƒÊûŒÝ•ýÜsÙ{`Ë;Ñæ°ºÎQW¿`)«ÛÀÝsñuV×Ùεõ%…}Êå¡C‡Ô¹sg·§¸¸¸<ÛÃÂÂ$I©©©JMMu¹îèÑ£
+w{
+_eu%©}{{¿ó¸ì<£    eƒ^~xHÍÔ}`êÑf¡Î
+Æ
+žCÆ     6à    6à    6à    6à    6à    6ãý0}£¤qVŸ„IÒ$ù[´6u†D˜…:C´Y¨3€²Ê«½F)ò\¤´Ãê31‰¿Ô¬Y3Ó—¥Îè³PgHÙ}p.2²,µey£ÎhÔ¨‘"##­>
+SYöû:{¯ô‚‚‚dõiØu†D˜…:C¢ÌB!Ñf¡ÎÞ‡÷è   €Í0è   €Í0è   €Í0è   €Í0è   €Í0è   €Í0è   €ÍXöwôöìÙ£””«–÷i;vìPpp°[ûRç⻑:{;ú øÈ›9È$òfò‰¼™ÅʼY2è)##Ê¥m!88X-Z´(r?ê\2îÖÙÛÑ%CÞÌAÞ ‘7³7HäÍ,VæÍ’A/,,LaaaV,]¦PgHôY¨3$úÀ,Ô}`êì»x    Øƒ    Øƒ    Øƒ    Øƒ    Øƒ    Øƒ    ØŒÇÿŽÞ·ß~«3fxú°€×Ú´i“ê5½Å’µÉÊò˜‡¼æ)¼ytÐkROg3.èÄ…=ž<,àÕîir‹š·ldúºä
+eyÌCÞ ó”FÞ<:è…¶j¤ÐVæÿ@ Ê"ò˜‡¼æ!o€gð=    °=    °=    °=    °=    °=    °=    °·ÿŽÞέû•<meiž`k[¾Þ£¶-꺵/yJ†¼æ!o€yn$on
+zaaa:}ú´”Y¢óÊ´6ÔQ»víŠÜ¼%GÞ ó7À<îæM’qqqÎøøøR>%    €x    Ø
+ƒ    Øƒ    Øƒ    Øƒ    Øƒ    Øƒ    ØŒ#<<ÜùðÃ[}     X·nþ?{¶¬sÔ!p    IEND®B`‚
\ No newline at end of file

Deleted: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/hwloc.am
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/hwloc.am	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/hwloc.am	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,5 +0,0 @@
-# Copyright 2009 INRIA, Université Bordeaux 1
-
-AM_CFLAGS   = $(GCC_CFLAGS)
-AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include
-AM_LDFLAGS  = -L$(top_builddir)/src

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/Makefile.am
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/Makefile.am	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/Makefile.am	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,23 +1,33 @@
-# Copyright 2009 INRIA, Université Bordeaux 1
-# Copyright 2009 Cisco Systems, Inc.  All rights reserved.
+# Copyright 2009      INRIA, Université Bordeaux 1
+# Copyright 2009-2010 Cisco Systems, Inc.  All rights reserved.
 
-include $(top_srcdir)/hwloc.am
+# Only install the headers if we're in standalone mode (meaning:
+# *don't* install the headers if we're in embedded mode).
 
+if HWLOC_BUILD_STANDALONE
 include_HEADERS = hwloc.h
 include_hwlocdir = $(includedir)/hwloc
-include_hwloc_HEADERS = hwloc/cpuset.h hwloc/helper.h hwloc/openfabrics-verbs.h
+include_hwloc_HEADERS = \
+        hwloc/cpuset.h \
+        hwloc/helper.h \
+        hwloc/openfabrics-verbs.h \
+        hwloc/rename.h
 nodist_include_hwloc_HEADERS = hwloc/config.h 
 
-noinst_HEADERS = private/private.h private/debug.h private/cpuset.h
+noinst_HEADERS = \
+        private/private.h \
+        private/debug.h \
+        private/misc.h \
+        private/cpuid.h
 
-if HAVE_LINUX
-include_hwloc_HEADERS += hwloc/linux.h hwloc/linux-libnuma.h
-else !HAVE_LINUX
-noinst_HEADERS += hwloc/linux.h hwloc/linux-libnuma.h
-endif !HAVE_LINUX
+if HWLOC_HAVE_LINUX
+include_hwloc_HEADERS += \
+        hwloc/linux.h \
+        hwloc/linux-libnuma.h
+endif HWLOC_HAVE_LINUX
 
-if HAVE_SCHED_SETAFFINITY
+if HWLOC_HAVE_SCHED_SETAFFINITY
 include_hwloc_HEADERS += hwloc/glibc-sched.h
-else !HAVE_SCHED_SETAFFINITY
-noinst_HEADERS += hwloc/glibc-sched.h
-endif !HAVE_SCHED_SETAFFINITY
+endif HWLOC_HAVE_SCHED_SETAFFINITY
+
+endif HWLOC_BUILD_STANDALONE

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/config.h.in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/config.h.in	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/config.h.in	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,5 +1,6 @@
-/*
+/* -*- c -*-
  * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
+ * Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
  * See COPYING in top-level directory.
  */
 
@@ -18,15 +19,79 @@
 # endif
 #endif
 
-/* Define to 1 on Linux */
-#undef HWLOC_LINUX_SYS
+#undef __hwloc_inline
 
-#undef HWLOC_HAVE_FFS
+/*
+ * Note: this is public.  We can not assume anything from the compiler used
+ * by the application and thus the HWLOC_HAVE_* macros below are not
+ * fetched from the autoconf result here. We only automatically use a few
+ * well-known easy cases.
+ */
 
-#undef HWLOC_HAVE_DECL_FFS
+/* Maybe before gcc 2.95 too */
+#if defined(HWLOC_HAVE_ATTRIBUTE_UNUSED) || (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95))
+# if (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)) || HWLOC_HAVE_ATTRIBUTE_UNUSED
+#  define __hwloc_attribute_unused __attribute__((__unused__))
+# else
+#  define __hwloc_attribute_unused
+# endif
+#else
+# define __hwloc_attribute_unused
+#endif
 
-#undef HWLOC_HAVE_FFSL
+#if defined(HWLOC_HAVE_ATTRIBUTE_MALLOC) || (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96))
+# if (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)) || HWLOC_HAVE_ATTRIBUTE_MALLOC
+#  define __hwloc_attribute_malloc __attribute__((__malloc__))
+# else
+#  define __hwloc_attribute_malloc
+# endif
+#else
+# define __hwloc_attribute_malloc
+#endif
 
+#if defined(HWLOC_HAVE_ATTRIBUTE_CONST) || (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95))
+# if (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)) || HWLOC_HAVE_ATTRIBUTE_CONST
+#  define __hwloc_attribute_const __attribute__((__const__))
+# else
+#  define __hwloc_attribute_const
+# endif
+#else
+# define __hwloc_attribute_const
+#endif
+
+#if defined(HWLOC_HAVE_ATTRIBUTE_PURE) || (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96))
+# if (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)) || HWLOC_HAVE_ATTRIBUTE_PURE
+#  define __hwloc_attribute_pure __attribute__((__pure__))
+# else
+#  define __hwloc_attribute_pure
+# endif
+#else
+# define __hwloc_attribute_pure
+#endif
+
+#if defined(HWLOC_HAVE_ATTRIBUTE_DEPRECATED) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3))
+# if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) || HWLOC_HAVE_ATTRIBUTE_DEPRECATED
+#  define __hwloc_attribute_deprecated __attribute__((__deprecated__))
+# else
+#  define __hwloc_attribute_deprecated
+# endif
+#else
+# define __hwloc_attribute_deprecated
+#endif
+
+#ifdef HWLOC_C_HAVE_VISIBILITY
+# if HWLOC_C_HAVE_VISIBILITY
+#  define HWLOC_DECLSPEC __attribute__((__visibility__("default")))
+# else
+#  define HWLOC_DECLSPEC
+# endif
+#else
+# define HWLOC_DECLSPEC
+#endif
+
+/* Define to 1 on Linux */
+#undef HWLOC_LINUX_SYS
+
 /* Define to 1 if the CPU_SET macro works */
 #undef HWLOC_HAVE_CPU_SET
 
@@ -61,4 +126,11 @@
 #  endif /* hwloc_thread_t */
 #endif /* HWLOC_HAVE_WINDOWS_H */
 
+/* Do we need to transform all the hwloc public symbol names? */
+#undef HWLOC_SYM_TRANSFORM
+
+/* If we are transforming, what are the prefixes? */
+#undef HWLOC_SYM_PREFIX
+#undef HWLOC_SYM_PREFIX_CAPS
+
 #endif /* HWLOC_CONFIG_H */

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/cpuset.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/cpuset.h	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/cpuset.h	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,5 +1,6 @@
 /*
  * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
+ * Copyright © 2009-2010 Cisco Systems, Inc.  All rights reserved.
  * See COPYING in top-level directory.
  */
 
@@ -34,17 +35,22 @@
  * CPU set allocation, freeing and copying.
  */
 
-/** \brief Allocate a new empty CPU set */
-hwloc_cpuset_t hwloc_cpuset_alloc(void);
+/** \brief Allocate a new empty CPU set.  
+    
+    \returns A valid CPU set or NULL.
 
+    The CPU set should be freed by a corresponding call to
+    hwloc_cpuset_free(). */
+HWLOC_DECLSPEC hwloc_cpuset_t hwloc_cpuset_alloc(void) __hwloc_attribute_malloc;
+
 /** \brief Free CPU set \p set */
-void hwloc_cpuset_free(hwloc_cpuset_t set);
+HWLOC_DECLSPEC void hwloc_cpuset_free(hwloc_cpuset_t set);
 
-/** \brief Duplicate CPU set \p set by allocating a new CPU set and copying its contents */
-hwloc_cpuset_t hwloc_cpuset_dup(hwloc_cpuset_t set);
+/** \brief Duplicate CPU set \p set by allocating a new CPU set and copying \p set's contents */
+HWLOC_DECLSPEC hwloc_cpuset_t hwloc_cpuset_dup(hwloc_const_cpuset_t set) __hwloc_attribute_malloc;
 
 /** \brief Copy the contents of CPU set \p src into the already allocated CPU set \p dst */
-void hwloc_cpuset_copy(hwloc_cpuset_t dst, hwloc_cpuset_t src);
+HWLOC_DECLSPEC void hwloc_cpuset_copy(hwloc_cpuset_t dst, hwloc_const_cpuset_t src);
 
 
 /*
@@ -58,133 +64,163 @@
  * \return the number of character that were actually written if not truncating,
  * or that would have been written  (not including the ending \\0).
  */
-int hwloc_cpuset_snprintf(char * __hwloc_restrict buf, size_t buflen, hwloc_const_cpuset_t set);
+HWLOC_DECLSPEC int hwloc_cpuset_snprintf(char * __hwloc_restrict buf, size_t buflen, hwloc_const_cpuset_t set);
 
 /** \brief Stringify a cpuset into a newly allocated string.
  *
  * \return the number of character that were actually written
  * (not including the ending \\0).
  */
-int hwloc_cpuset_asprintf(char ** strp, hwloc_const_cpuset_t set);
+HWLOC_DECLSPEC int hwloc_cpuset_asprintf(char ** strp, hwloc_const_cpuset_t set);
 
-/** \brief Parse a cpuset string.
+/** \brief Parse a cpuset string and stores it in CPU set \p set.
  *
  * Must start and end with a digit.
  */
-hwloc_cpuset_t hwloc_cpuset_from_string(const char * __hwloc_restrict string);
+HWLOC_DECLSPEC int hwloc_cpuset_from_string(hwloc_cpuset_t set, const char * __hwloc_restrict string);
 
 
-/** \brief
+/*
  *  Primitives & macros for building, modifying and consulting "sets" of cpus.
  */
 
-/** \brief Empty CPU set \p set */
-void hwloc_cpuset_zero(hwloc_cpuset_t set);
+/** \brief Empty the CPU set \p set */
+HWLOC_DECLSPEC void hwloc_cpuset_zero(hwloc_cpuset_t set);
 
-/** \brief Fill CPU set \p set */
-void hwloc_cpuset_fill(hwloc_cpuset_t set);
+/** \brief Fill CPU set \p set with all possible CPUs (even if those CPUs don't exist or are otherwise unavailable) */
+HWLOC_DECLSPEC void hwloc_cpuset_fill(hwloc_cpuset_t set);
 
 /** \brief Setup CPU set \p set from unsigned long \p mask */
-void hwloc_cpuset_from_ulong(hwloc_cpuset_t set, unsigned long mask);
+HWLOC_DECLSPEC void hwloc_cpuset_from_ulong(hwloc_cpuset_t set, unsigned long mask);
 
 /** \brief Setup CPU set \p set from unsigned long \p mask used as \p i -th subset */
-void hwloc_cpuset_from_ith_ulong(hwloc_cpuset_t set, int i, unsigned long mask);
+HWLOC_DECLSPEC void hwloc_cpuset_from_ith_ulong(hwloc_cpuset_t set, unsigned i, unsigned long mask);
 
 /** \brief Convert the beginning part of CPU set \p set into unsigned long \p mask */
-unsigned long hwloc_cpuset_to_ulong(hwloc_const_cpuset_t set);
+HWLOC_DECLSPEC unsigned long hwloc_cpuset_to_ulong(hwloc_const_cpuset_t set) __hwloc_attribute_pure;
 
 /** \brief Convert the \p i -th subset of CPU set \p set into unsigned long mask */
-unsigned long hwloc_cpuset_to_ith_ulong(hwloc_const_cpuset_t set, int i);
+HWLOC_DECLSPEC unsigned long hwloc_cpuset_to_ith_ulong(hwloc_const_cpuset_t set, unsigned i) __hwloc_attribute_pure;
 
-/** \brief Clear CPU set \p set and set CPU \p cpu */
-void hwloc_cpuset_cpu(hwloc_cpuset_t set, unsigned cpu);
+/** \brief Empty the CPU set \p set and add CPU \p cpu */
+HWLOC_DECLSPEC void hwloc_cpuset_cpu(hwloc_cpuset_t set, unsigned cpu);
 
-/** \brief Clear CPU set \p set and set all but the CPU \p cpu */
-void hwloc_cpuset_all_but_cpu(hwloc_cpuset_t set, unsigned cpu);
+/** \brief Empty the CPU set \p set and add all but the CPU \p cpu */
+HWLOC_DECLSPEC void hwloc_cpuset_all_but_cpu(hwloc_cpuset_t set, unsigned cpu);
 
 /** \brief Add CPU \p cpu in CPU set \p set */
-void hwloc_cpuset_set(hwloc_cpuset_t set, unsigned cpu);
+HWLOC_DECLSPEC void hwloc_cpuset_set(hwloc_cpuset_t set, unsigned cpu);
 
 /** \brief Add CPUs from \p begincpu to \p endcpu in CPU set \p set */
-void hwloc_cpuset_set_range(hwloc_cpuset_t set, unsigned begincpu, unsigned endcpu);
+HWLOC_DECLSPEC void hwloc_cpuset_set_range(hwloc_cpuset_t set, unsigned begincpu, unsigned endcpu);
 
 /** \brief Remove CPU \p cpu from CPU set \p set */
-void hwloc_cpuset_clr(hwloc_cpuset_t set, unsigned cpu);
+HWLOC_DECLSPEC void hwloc_cpuset_clr(hwloc_cpuset_t set, unsigned cpu);
 
+/** \brief Remove CPUs from \p begincpu to \p endcpu in CPU set \p set */
+HWLOC_DECLSPEC void hwloc_cpuset_clr_range(hwloc_cpuset_t set, unsigned begincpu, unsigned endcpu);
+
 /** \brief Test whether CPU \p cpu is part of set \p set */
-int hwloc_cpuset_isset(hwloc_const_cpuset_t set, unsigned cpu);
+HWLOC_DECLSPEC int hwloc_cpuset_isset(hwloc_const_cpuset_t set, unsigned cpu) __hwloc_attribute_pure;
 
-/** \brief Test whether set \p set is zero */
-int hwloc_cpuset_iszero(hwloc_const_cpuset_t set);
+/** \brief Test whether set \p set is empty */
+HWLOC_DECLSPEC int hwloc_cpuset_iszero(hwloc_const_cpuset_t set) __hwloc_attribute_pure;
 
-/** \brief Test whether set \p set is full */
-int hwloc_cpuset_isfull(hwloc_const_cpuset_t set);
+/** \brief Test whether set \p set is completely full */
+HWLOC_DECLSPEC int hwloc_cpuset_isfull(hwloc_const_cpuset_t set) __hwloc_attribute_pure;
 
 /** \brief Test whether set \p set1 is equal to set \p set2 */
-int hwloc_cpuset_isequal (hwloc_const_cpuset_t set1, hwloc_const_cpuset_t set2);
+HWLOC_DECLSPEC int hwloc_cpuset_isequal (hwloc_const_cpuset_t set1, hwloc_const_cpuset_t set2) __hwloc_attribute_pure;
 
 /** \brief Test whether sets \p set1 and \p set2 intersects */
-int hwloc_cpuset_intersects (hwloc_const_cpuset_t set1, hwloc_const_cpuset_t set2);
+HWLOC_DECLSPEC int hwloc_cpuset_intersects (hwloc_const_cpuset_t set1, hwloc_const_cpuset_t set2) __hwloc_attribute_pure;
 
 /** \brief Test whether set \p sub_set is part of set \p super_set */
-int hwloc_cpuset_isincluded (hwloc_const_cpuset_t sub_set, hwloc_const_cpuset_t super_set);
+HWLOC_DECLSPEC int hwloc_cpuset_isincluded (hwloc_const_cpuset_t sub_set, hwloc_const_cpuset_t super_set) __hwloc_attribute_pure;
 
-/** \brief Or set \p modifier_set into set \p set */
-void hwloc_cpuset_orset (hwloc_cpuset_t set, hwloc_const_cpuset_t modifier_set);
+/** \brief Or sets \p set1 and \p set2 and store the result in set \p res */
+HWLOC_DECLSPEC void hwloc_cpuset_or (hwloc_cpuset_t res, hwloc_const_cpuset_t set1, hwloc_const_cpuset_t set2);
 
-/** \brief And set \p modifier_set into set \p set */
-void hwloc_cpuset_andset (hwloc_cpuset_t set, hwloc_const_cpuset_t modifier_set);
+/** \brief And sets \p set1 and \p set2 and store the result in set \p res */
+HWLOC_DECLSPEC void hwloc_cpuset_and (hwloc_cpuset_t res, hwloc_const_cpuset_t set1, hwloc_const_cpuset_t set2);
 
-/** \brief Clear set \p modifier_set out of set \p set */
-void hwloc_cpuset_clearset (hwloc_cpuset_t set, hwloc_const_cpuset_t modifier_set);
+/** \brief And set \p set1 and the negation of \p set2 and store the result in set \p res */
+HWLOC_DECLSPEC void hwloc_cpuset_andnot (hwloc_cpuset_t res, hwloc_const_cpuset_t set1, hwloc_const_cpuset_t set2);
 
-/** \brief Xor set \p set with set \p modifier_set */
-void hwloc_cpuset_xorset (hwloc_cpuset_t set, hwloc_const_cpuset_t modifier_set);
+/** \brief Xor sets \p set1 and \p set2 and store the result in set \p res */
+HWLOC_DECLSPEC void hwloc_cpuset_xor (hwloc_cpuset_t res, hwloc_const_cpuset_t set1, hwloc_const_cpuset_t set2);
 
-/** \brief Compute the first CPU (least significant bit) in CPU set \p set */
-int hwloc_cpuset_first(hwloc_const_cpuset_t set);
+/** \brief Negate set \p set and store the result in set \p res */
+HWLOC_DECLSPEC void hwloc_cpuset_not (hwloc_cpuset_t res, hwloc_const_cpuset_t set);
 
-/** \brief Compute the last CPU (most significant bit) in CPU set \p set */
-int hwloc_cpuset_last(hwloc_const_cpuset_t set);
+/** \brief Compute the first CPU (least significant bit) in CPU set \p set
+ *
+ * \return -1 if no CPU is set.
+ */
+HWLOC_DECLSPEC int hwloc_cpuset_first(hwloc_const_cpuset_t set) __hwloc_attribute_pure;
 
+/** \brief Compute the last CPU (most significant bit) in CPU set \p set
+ *
+ * \return -1 if no CPU is set.
+ */
+HWLOC_DECLSPEC int hwloc_cpuset_last(hwloc_const_cpuset_t set) __hwloc_attribute_pure;
+
+/** \brief Compute the next CPU in CPU set \p set which is after CPU \p prev_cpu
+ *
+ * \return -1 if no CPU with higher index is set.
+ */
+HWLOC_DECLSPEC int hwloc_cpuset_next(hwloc_const_cpuset_t set, unsigned prev_cpu) __hwloc_attribute_pure;
+
 /** \brief Keep a single CPU among those set in CPU set \p set
  *
- * Might be used before binding so that the process does not
+ * May be useful before binding so that the process does not
  * have a chance of migrating between multiple logical CPUs
  * in the original mask.
  */
-void hwloc_cpuset_singlify(hwloc_cpuset_t set);
+HWLOC_DECLSPEC void hwloc_cpuset_singlify(hwloc_cpuset_t set);
 
-/** \brief Compar CPU sets \p set1 and \p set2 using their first set bit.
+/** \brief Compare CPU sets \p set1 and \p set2 using their lowest index CPU.
  *
  * Smaller least significant bit is smaller.
  * The empty CPU set is considered higher than anything.
  */
-int hwloc_cpuset_compar_first(hwloc_const_cpuset_t set1, hwloc_const_cpuset_t set2);
+HWLOC_DECLSPEC int hwloc_cpuset_compare_first(hwloc_const_cpuset_t set1, hwloc_const_cpuset_t set2) __hwloc_attribute_pure;
 
-/** \brief Compar CPU sets \p set1 and \p set2 using their last bits.
+/** \brief Compare CPU sets \p set1 and \p set2 using their highest index CPU.
  *
  * Higher most significant bit is higher.
  * The empty CPU set is considered lower than anything.
  */
-int hwloc_cpuset_compar(hwloc_const_cpuset_t set1, hwloc_const_cpuset_t set2);
+HWLOC_DECLSPEC int hwloc_cpuset_compare(hwloc_const_cpuset_t set1, hwloc_const_cpuset_t set2) __hwloc_attribute_pure;
 
-/** \brief Compute the weight of CPU set \p set */
-int hwloc_cpuset_weight(hwloc_const_cpuset_t set);
+/** \brief Compute the "weight" of CPU set \p set (i.e., number of
+ * CPUs that are in the set).
+ *
+ * \return the number of CPUs that are in the set.
+ */
+HWLOC_DECLSPEC int hwloc_cpuset_weight(hwloc_const_cpuset_t set) __hwloc_attribute_pure;
 
 /** \brief Loop macro iterating on CPU set \p set
+ * \hideinitializer
  *
- * It yields on each cpu that is member of the set. It uses variables \p set
- * (the cpu set) and \p cpu (the loop variable)
+ * \p cpu is the loop variable; it should be an unsigned int.  The
+ * first iteration will set \p cpu to the lowest index CPU in the set.
+ * Successive iterations will iterate through, in order, all remaining
+ * CPUs that in the set.  To be specific: each iteration will return a
+ * value for \p cpu such that hwloc_cpuset_isset(set, cpu) is true.
  */
 #define hwloc_cpuset_foreach_begin(cpu, set) \
-        for (cpu = 0; cpu < HWLOC_NBMAXCPUS; cpu++) \
-                if (hwloc_cpuset_isset(set, cpu)) {
-/** \brief End of loop
+do { \
+        for (cpu = hwloc_cpuset_first(set); \
+             (unsigned) cpu != (unsigned) -1; \
+             cpu = hwloc_cpuset_next(set, cpu)) { \
+/** \brief End of loop. Needs a terminating ';'.
+ * \hideinitializer
  *
  * \sa hwloc_cpuset_foreach_begin */
 #define hwloc_cpuset_foreach_end() \
-                }
+        } \
+} while (0)
 
 /** @} */
 

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/glibc-sched.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/glibc-sched.h	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/glibc-sched.h	2010-05-11 01:47:13 UTC (rev 6632)
@@ -16,6 +16,7 @@
 
 #include <hwloc.h>
 #include <hwloc/helper.h>
+#include <assert.h>
 
 #if !defined _GNU_SOURCE || !defined _SCHED_H
 #error sched.h must be included with _GNU_SOURCE defined
@@ -36,8 +37,8 @@
  *
  * \p schedsetsize should be sizeof(cpu_set_t) unless \p schedset was dynamically allocated with CPU_ALLOC
  */
-static __inline void
-hwloc_cpuset_to_glibc_sched_affinity(hwloc_topology_t topology, hwloc_cpuset_t hwlocset,
+static __hwloc_inline int
+hwloc_cpuset_to_glibc_sched_affinity(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_const_cpuset_t hwlocset,
 				    cpu_set_t *schedset, size_t schedsetsize)
 {
 #ifdef CPU_ZERO_S
@@ -54,6 +55,7 @@
     CPU_SET(cpu, schedset);
   hwloc_cpuset_foreach_end();
 #endif /* !CPU_ZERO_S */
+  return 0;
 }
 
 /** \brief Convert glibc sched affinity CPU set \p schedset into hwloc CPU set
@@ -63,11 +65,11 @@
  *
  * \p schedsetsize should be sizeof(cpu_set_t) unless \p schedset was dynamically allocated with CPU_ALLOC
  */
-static __inline hwloc_cpuset_t
-hwloc_cpuset_from_glibc_sched_affinity(hwloc_topology_t topology,
-				      const cpu_set_t *schedset, size_t schedsetsize)
+static __hwloc_inline int
+hwloc_cpuset_from_glibc_sched_affinity(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_cpuset_t hwlocset,
+                                       const cpu_set_t *schedset, size_t schedsetsize)
 {
-  hwloc_cpuset_t hwlocset = hwloc_cpuset_alloc();
+  hwloc_cpuset_zero(hwlocset);
 #ifdef CPU_ZERO_S
   int cpu, count;
   count = CPU_COUNT_S(schedsetsize, schedset);
@@ -91,7 +93,7 @@
     if (CPU_ISSET(cpu, schedset))
       hwloc_cpuset_set(hwlocset, cpu);
 #endif /* !CPU_ZERO_S */
-  return hwlocset;
+  return 0;
 }
 
 /** @} */

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/helper.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/helper.h	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/helper.h	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,6 +1,6 @@
 /*
  * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
- * Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
+ * Copyright © 2009-2010 Cisco Systems, Inc.  All rights reserved.
  * See COPYING in top-level directory.
  */
 
@@ -29,7 +29,7 @@
  * function returns the depth of the first "present" object typically found
  * inside \p type.
  */
-static __inline unsigned
+static __hwloc_inline int __hwloc_attribute_pure
 hwloc_get_type_or_below_depth (hwloc_topology_t topology, hwloc_obj_type_t type)
 {
   int depth = hwloc_get_type_depth(topology, type);
@@ -38,12 +38,12 @@
     return depth;
 
   /* find the highest existing level with type order >= */
-  for(depth = hwloc_get_type_depth(topology, HWLOC_OBJ_PROC); ; depth--)
+  for(depth = hwloc_get_type_depth(topology, HWLOC_OBJ_PU); ; depth--)
     if (hwloc_compare_types(hwloc_get_depth_type(topology, depth), type) < 0)
       return depth+1;
 
   /* Shouldn't ever happen, as there is always a SYSTEM level with lower order and known depth.  */
-  abort();
+  /* abort(); */
 }
 
 /** \brief Returns the depth of objects of type \p type or above
@@ -52,7 +52,7 @@
  * function returns the depth of the first "present" object typically
  * containing \p type.
  */
-static __inline unsigned
+static __hwloc_inline int __hwloc_attribute_pure
 hwloc_get_type_or_above_depth (hwloc_topology_t topology, hwloc_obj_type_t type)
 {
   int depth = hwloc_get_type_depth(topology, type);
@@ -65,8 +65,8 @@
     if (hwloc_compare_types(hwloc_get_depth_type(topology, depth), type) > 0)
       return depth-1;
 
-  /* Shouldn't ever happen, as there is always a PROC level with higher order and known depth.  */
-  abort();
+  /* Shouldn't ever happen, as there is always a PU level with higher order and known depth.  */
+  /* abort(); */
 }
 
 /** @} */
@@ -77,18 +77,45 @@
  * @{
  */
 
-/** \brief Returns the top-object of the topology-tree. Its type is ::HWLOC_OBJ_SYSTEM. */
-static __inline hwloc_obj_t
-hwloc_get_system_obj (hwloc_topology_t topology)
+/** \brief Returns the top-object of the topology-tree.
+ *
+ * Its type is typically ::HWLOC_OBJ_MACHINE but it could be different
+ * for complex topologies.  This function replaces the old deprecated
+ * hwloc_get_system_obj().
+ */
+static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+hwloc_get_root_obj (hwloc_topology_t topology)
 {
   return hwloc_get_obj_by_depth (topology, 0, 0);
 }
 
+/** \brief Returns the ancestor object of \p obj at depth \p depth. */
+static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+hwloc_get_ancestor_obj_by_depth (hwloc_topology_t topology __hwloc_attribute_unused, unsigned depth, hwloc_obj_t obj)
+{
+  hwloc_obj_t ancestor = obj;
+  if (obj->depth < depth)
+    return NULL;
+  while (ancestor && ancestor->depth > depth)
+    ancestor = ancestor->parent;
+  return ancestor;
+}
+
+/** \brief Returns the ancestor object of \p obj with type \p type. */
+static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+hwloc_get_ancestor_obj_by_type (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_type_t type, hwloc_obj_t obj)
+{
+  hwloc_obj_t ancestor = obj->parent;
+  while (ancestor && ancestor->type != type)
+    ancestor = ancestor->parent;
+  return ancestor;
+}
+
 /** \brief Returns the next object at depth \p depth.
  *
  * If \p prev is \c NULL, return the first object at depth \p depth.
  */
-static __inline hwloc_obj_t
+static __hwloc_inline hwloc_obj_t
 hwloc_get_next_obj_by_depth (hwloc_topology_t topology, unsigned depth, hwloc_obj_t prev)
 {
   if (!prev)
@@ -100,11 +127,11 @@
 
 /** \brief Returns the next object of type \p type.
  *
- * If \p prev is \c NULL, return the first object at type \p type.
- * If there are multiple or no depth for given type, return \c NULL and let the caller
- * fallback to hwloc_get_next_obj_by_depth().
+ * If \p prev is \c NULL, return the first object at type \p type.  If
+ * there are multiple or no depth for given type, return \c NULL and
+ * let the caller fallback to hwloc_get_next_obj_by_depth().
  */
-static __inline hwloc_obj_t
+static __hwloc_inline hwloc_obj_t
 hwloc_get_next_obj_by_type (hwloc_topology_t topology, hwloc_obj_type_t type,
 		   hwloc_obj_t prev)
 {
@@ -114,39 +141,57 @@
   return hwloc_get_next_obj_by_depth (topology, depth, prev);
 }
 
+/** \brief Returns the object of type ::HWLOC_OBJ_PU with \p os_index.
+ *
+ * \note The \p os_index field of object should most of the times only be
+ * used for pretty-printing purpose. Type ::HWLOC_OBJ_PU is the only case
+ * where \p os_index could actually be useful, when manually binding to
+ * processors.
+ * However, using CPU sets to hide this complexity should often be preferred.
+ */
+static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+hwloc_get_pu_obj_by_os_index(hwloc_topology_t topology, unsigned os_index)
+{
+  hwloc_obj_t obj = NULL;
+  while ((obj = hwloc_get_next_obj_by_type(topology, HWLOC_OBJ_PU, obj)) != NULL)
+    if (obj->os_index == os_index)
+      return obj;
+  return NULL;
+}
+
 /** \brief Return the next child.
  *
  * If \p prev is \c NULL, return the first child.
  */
-static __inline hwloc_obj_t
-hwloc_get_next_child (hwloc_topology_t topology, hwloc_obj_t father, hwloc_obj_t prev)
+static __hwloc_inline hwloc_obj_t
+hwloc_get_next_child (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_t parent, hwloc_obj_t prev)
 {
   if (!prev)
-    return father->first_child;
-  if (prev->father != father)
+    return parent->first_child;
+  if (prev->parent != parent)
     return NULL;
   return prev->next_sibling;
 }
 
-/** \brief Returns the common father object to objects lvl1 and lvl2 */
-static __inline hwloc_obj_t
-hwloc_get_common_ancestor_obj (hwloc_topology_t topology, hwloc_obj_t obj1, hwloc_obj_t obj2)
+/** \brief Returns the common parent object to objects lvl1 and lvl2 */
+static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+hwloc_get_common_ancestor_obj (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_t obj1, hwloc_obj_t obj2)
 {
   while (obj1->depth > obj2->depth)
-    obj1 = obj1->father;
+    obj1 = obj1->parent;
   while (obj2->depth > obj1->depth)
-    obj2 = obj2->father;
+    obj2 = obj2->parent;
   while (obj1 != obj2) {
-    obj1 = obj1->father;
-    obj2 = obj2->father;
+    obj1 = obj1->parent;
+    obj2 = obj2->parent;
   }
   return obj1;
 }
 
 /** \brief Returns true if _obj_ is inside the subtree beginning
     with \p subtree_root. */
-static __inline int
-hwloc_obj_is_in_subtree (hwloc_topology_t topology, hwloc_obj_t obj, hwloc_obj_t subtree_root)
+static __hwloc_inline int __hwloc_attribute_pure
+hwloc_obj_is_in_subtree (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_t obj, hwloc_obj_t subtree_root)
 {
   return hwloc_cpuset_isincluded(obj->cpuset, subtree_root->cpuset);
 }
@@ -159,21 +204,52 @@
  * @{
  */
 
+/** \brief Get the first largest object included in the given cpuset \p set.
+ *
+ * \return the first object that is included in \p set and whose parent is not.
+ *
+ * This is convenient for iterating over all largest objects within a CPU set
+ * by doing a loop getting the first largest object and clearing its CPU set
+ * from the remaining CPU set.
+ */
+static __hwloc_inline hwloc_obj_t
+hwloc_get_first_largest_obj_inside_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t set)
+{
+  hwloc_obj_t obj = hwloc_get_root_obj(topology);
+  if (!hwloc_cpuset_intersects(obj->cpuset, set))
+    return NULL;
+  while (!hwloc_cpuset_isincluded(obj->cpuset, set)) {
+    /* while the object intersects without being included, look at its children */
+    hwloc_obj_t child = NULL;
+    while ((child = hwloc_get_next_child(topology, obj, child)) != NULL) {
+      if (hwloc_cpuset_intersects(child->cpuset, set))
+	break;
+    }
+    if (!child)
+      /* no child intersects, return their father */
+      return obj;
+    /* found one intersecting child, look at its children */
+    obj = child;
+  }
+  /* obj is included, return it */
+  return obj;
+}
+
 /** \brief Get the set of largest objects covering exactly a given cpuset \p set
  *
  * \return the number of objects returned in \p objs.
  */
-extern int hwloc_get_largest_objs_inside_cpuset (hwloc_topology_t topology, hwloc_cpuset_t set,
+HWLOC_DECLSPEC int hwloc_get_largest_objs_inside_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t set,
 						 hwloc_obj_t * __hwloc_restrict objs, int max);
 
 /** \brief Return the next object at depth \p depth included in CPU set \p set.
  *
- * If \p prev is \c NULL, return the first object at depth \p depth included in \p set.
- * The next invokation should pass the previous return value in \p prev so as
- * to obtain the next object in \p set.
+ * If \p prev is \c NULL, return the first object at depth \p depth
+ * included in \p set.  The next invokation should pass the previous
+ * return value in \p prev so as to obtain the next object in \p set.
  */
-static __inline hwloc_obj_t
-hwloc_get_next_obj_inside_cpuset_by_depth (hwloc_topology_t topology, hwloc_cpuset_t set,
+static __hwloc_inline hwloc_obj_t
+hwloc_get_next_obj_inside_cpuset_by_depth (hwloc_topology_t topology, hwloc_const_cpuset_t set,
 					   unsigned depth, hwloc_obj_t prev)
 {
   hwloc_obj_t next = hwloc_get_next_obj_by_depth(topology, depth, prev);
@@ -184,11 +260,12 @@
 
 /** \brief Return the next object of type \p type included in CPU set \p set.
  *
- * If there are multiple or no depth for given type, return \c NULL and let the caller
- * fallback to hwloc_get_next_obj_inside_cpuset_by_depth().
+ * If there are multiple or no depth for given type, return \c NULL
+ * and let the caller fallback to
+ * hwloc_get_next_obj_inside_cpuset_by_depth().
  */
-static __inline hwloc_obj_t
-hwloc_get_next_obj_inside_cpuset_by_type (hwloc_topology_t topology, hwloc_cpuset_t set,
+static __hwloc_inline hwloc_obj_t
+hwloc_get_next_obj_inside_cpuset_by_type (hwloc_topology_t topology, hwloc_const_cpuset_t set,
 					  hwloc_obj_type_t type, hwloc_obj_t prev)
 {
   int depth = hwloc_get_type_depth(topology, type);
@@ -199,11 +276,11 @@
 
 /** \brief Return the \p index -th object at depth \p depth included in CPU set \p set.
  */
-static __inline hwloc_obj_t
-hwloc_get_obj_inside_cpuset_by_depth (hwloc_topology_t topology, hwloc_cpuset_t set,
+static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+hwloc_get_obj_inside_cpuset_by_depth (hwloc_topology_t topology, hwloc_const_cpuset_t set,
 				      unsigned depth, unsigned idx)
 {
-  int count = 0;
+  unsigned count = 0;
   hwloc_obj_t obj = hwloc_get_obj_by_depth (topology, depth, 0);
   while (obj) {
     if (hwloc_cpuset_isincluded(obj->cpuset, set)) {
@@ -218,11 +295,12 @@
 
 /** \brief Return the \p idx -th object of type \p type included in CPU set \p set.
  *
- * If there are multiple or no depth for given type, return \c NULL and let the caller
- * fallback to hwloc_get_obj_inside_cpuset_by_depth().
+ * If there are multiple or no depth for given type, return \c NULL
+ * and let the caller fallback to
+ * hwloc_get_obj_inside_cpuset_by_depth().
  */
-static __inline hwloc_obj_t
-hwloc_get_obj_inside_cpuset_by_type (hwloc_topology_t topology, hwloc_cpuset_t set,
+static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+hwloc_get_obj_inside_cpuset_by_type (hwloc_topology_t topology, hwloc_const_cpuset_t set,
 				     hwloc_obj_type_t type, unsigned idx)
 {
   int depth = hwloc_get_type_depth(topology, type);
@@ -232,8 +310,8 @@
 }
 
 /** \brief Return the number of objects at depth \p depth included in CPU set \p set. */
-static __inline unsigned
-hwloc_get_nbobjs_inside_cpuset_by_depth (hwloc_topology_t topology, hwloc_cpuset_t set,
+static __hwloc_inline unsigned __hwloc_attribute_pure
+hwloc_get_nbobjs_inside_cpuset_by_depth (hwloc_topology_t topology, hwloc_const_cpuset_t set,
 					 unsigned depth)
 {
   hwloc_obj_t obj = hwloc_get_obj_by_depth (topology, depth, 0);
@@ -248,11 +326,12 @@
 
 /** \brief Return the number of objects of type \p type included in CPU set \p set.
  *
- * If no object for that type exists inside CPU set \p set, 0 is returned.
- * If there are several levels with objects of that type inside CPU set \p set, -1 is returned.
+ * If no object for that type exists inside CPU set \p set, 0 is
+ * returned.  If there are several levels with objects of that type
+ * inside CPU set \p set, -1 is returned.
  */
-static __inline int
-hwloc_get_nbobjs_inside_cpuset_by_type (hwloc_topology_t topology, hwloc_cpuset_t set,
+static __hwloc_inline int __hwloc_attribute_pure
+hwloc_get_nbobjs_inside_cpuset_by_type (hwloc_topology_t topology, hwloc_const_cpuset_t set,
 					hwloc_obj_type_t type)
 {
   int depth = hwloc_get_type_depth(topology, type);
@@ -273,13 +352,18 @@
 
 /** \brief Get the child covering at least CPU set \p set.
  *
- * \return \c NULL if no child matches.
+ * \return \c NULL if no child matches or if \p set is empty.
  */
-static __inline hwloc_obj_t
-hwloc_get_child_covering_cpuset (hwloc_topology_t topology, hwloc_cpuset_t set,
-				hwloc_obj_t father)
+static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+hwloc_get_child_covering_cpuset (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_const_cpuset_t set,
+				hwloc_obj_t parent)
 {
-  hwloc_obj_t child = father->first_child;
+  hwloc_obj_t child;
+
+  if (hwloc_cpuset_iszero(set))
+    return NULL;
+
+  child = parent->first_child;
   while (child) {
     if (hwloc_cpuset_isincluded(set, child->cpuset))
       return child;
@@ -290,13 +374,16 @@
 
 /** \brief Get the lowest object covering at least CPU set \p set
  *
- * \return \c NULL if no object matches.
+ * \return \c NULL if no object matches or if \p set is empty.
  */
-static __inline hwloc_obj_t
-hwloc_get_obj_covering_cpuset (hwloc_topology_t topology, hwloc_cpuset_t set)
+static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+hwloc_get_obj_covering_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t set)
 {
-  struct hwloc_obj *current = hwloc_get_system_obj(topology);
+  struct hwloc_obj *current = hwloc_get_root_obj(topology);
 
+  if (hwloc_cpuset_iszero(set))
+    return NULL;
+
   if (!hwloc_cpuset_isincluded(set, current->cpuset))
     return NULL;
 
@@ -319,13 +406,13 @@
 
 /** \brief Iterate through same-depth objects covering at least CPU set \p set
  *
- * If object \p prev is \c NULL, return the first object at depth \p depth
- * covering at least part of CPU set \p set.
- * The next invokation should pass the previous return value in \p prev so as
+ * If object \p prev is \c NULL, return the first object at depth \p
+ * depth covering at least part of CPU set \p set.  The next
+ * invokation should pass the previous return value in \p prev so as
  * to obtain the next object covering at least another part of \p set.
  */
-static __inline hwloc_obj_t
-hwloc_get_next_obj_covering_cpuset_by_depth(hwloc_topology_t topology, hwloc_cpuset_t set,
+static __hwloc_inline hwloc_obj_t
+hwloc_get_next_obj_covering_cpuset_by_depth(hwloc_topology_t topology, hwloc_const_cpuset_t set,
 					    unsigned depth, hwloc_obj_t prev)
 {
   hwloc_obj_t next = hwloc_get_next_obj_by_depth(topology, depth, prev);
@@ -336,17 +423,18 @@
 
 /** \brief Iterate through same-type objects covering at least CPU set \p set
  *
- * If object \p prev is \c NULL, return the first object of type \p type
- * covering at least part of CPU set \p set.
- * The next invokation should pass the previous return value in \p prev so as
- * to obtain the next object of type \p type covering at least another part of \p set.
+ * If object \p prev is \c NULL, return the first object of type \p
+ * type covering at least part of CPU set \p set.  The next invokation
+ * should pass the previous return value in \p prev so as to obtain
+ * the next object of type \p type covering at least another part of
+ * \p set.
  *
  * If there are no or multiple depths for type \p type, \c NULL is returned.
  * The caller may fallback to hwloc_get_next_obj_covering_cpuset_by_depth()
  * for each depth.
  */
-static __inline hwloc_obj_t
-hwloc_get_next_obj_covering_cpuset_by_type(hwloc_topology_t topology, hwloc_cpuset_t set,
+static __hwloc_inline hwloc_obj_t
+hwloc_get_next_obj_covering_cpuset_by_type(hwloc_topology_t topology, hwloc_const_cpuset_t set,
 					   hwloc_obj_type_t type, hwloc_obj_t prev)
 {
   int depth = hwloc_get_type_depth(topology, type);
@@ -367,14 +455,14 @@
  *
  * \return \c NULL if no cache matches
  */
-static __inline hwloc_obj_t
-hwloc_get_cache_covering_cpuset (hwloc_topology_t topology, hwloc_cpuset_t set)
+static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+hwloc_get_cache_covering_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t set)
 {
   hwloc_obj_t current = hwloc_get_obj_covering_cpuset(topology, set);
   while (current) {
     if (current->type == HWLOC_OBJ_CACHE)
       return current;
-    current = current->father;
+    current = current->parent;
   }
   return NULL;
 }
@@ -383,15 +471,15 @@
  *
  * \return \c NULL if no cache matches
  */
-static __inline hwloc_obj_t
-hwloc_get_shared_cache_covering_obj (hwloc_topology_t topology, hwloc_obj_t obj)
+static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+hwloc_get_shared_cache_covering_obj (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_t obj)
 {
-  hwloc_obj_t current = obj->father;
+  hwloc_obj_t current = obj->parent;
   while (current) {
     if (!hwloc_cpuset_isequal(current->cpuset, obj->cpuset)
         && current->type == HWLOC_OBJ_CACHE)
       return current;
-    current = current->father;
+    current = current->parent;
   }
   return NULL;
 }
@@ -412,8 +500,62 @@
  *  \return the number of objects returned in \p objs.
  */
 /* TODO: rather provide an iterator? Provide a way to know how much should be allocated? By returning the total number of objects instead? */
-extern int hwloc_get_closest_objs (hwloc_topology_t topology, hwloc_obj_t src, hwloc_obj_t * __hwloc_restrict objs, int max);
+HWLOC_DECLSPEC unsigned hwloc_get_closest_objs (hwloc_topology_t topology, hwloc_obj_t src, hwloc_obj_t * __hwloc_restrict objs, unsigned max);
 
+/** \brief Find an object below another object, both specified by types and indexes.
+ *
+ * Start from the top system object and find object of type \p type1
+ * and index \p idx1.  Then look below this object and find another
+ * object of type \p type2 and index \p idx2.  Indexes are specified
+ * within the parent, not withing the entire system.
+ *
+ * For instance, if type1 is SOCKET, idx1 is 2, type2 is CORE and idx2
+ * is 3, return the fourth core object below the third socket.
+ */
+static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+hwloc_get_obj_below_by_type (hwloc_topology_t topology,
+			     hwloc_obj_type_t type1, unsigned idx1,
+			     hwloc_obj_type_t type2, unsigned idx2)
+{
+  hwloc_obj_t obj;
+
+  obj = hwloc_get_obj_by_type (topology, type1, idx1);
+  if (!obj)
+    return NULL;
+
+  return hwloc_get_obj_inside_cpuset_by_type(topology, obj->cpuset, type2, idx2);
+}
+
+/** \brief Find an object below a chain of objects specified by types and indexes.
+ *
+ * This is a generalized version of hwloc_get_obj_below_by_type().
+ *
+ * Arrays \p typev and \p idxv must contain \p nr types and indexes.
+ *
+ * Start from the top system object and walk the arrays \p typev and \p idxv.
+ * For each type and index couple in the arrays, look under the previously found
+ * object to find the index-th object of the given type.
+ * Indexes are specified within the parent, not withing the entire system.
+ *
+ * For instance, if nr is 3, typev contains NODE, SOCKET and CORE,
+ * and idxv contains 0, 1 and 2, return the third core object below
+ * the second socket below the first NUMA node.
+ */
+static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+hwloc_get_obj_below_array_by_type (hwloc_topology_t topology, int nr, hwloc_obj_type_t *typev, unsigned *idxv)
+{
+  hwloc_obj_t obj = hwloc_get_root_obj(topology);
+  int i;
+
+  for(i=0; i<nr; i++) {
+    obj = hwloc_get_obj_inside_cpuset_by_type(topology, obj->cpuset, typev[i], idxv[i]);
+    if (!obj)
+      return NULL;
+  }
+
+  return obj;
+}
+
 /** @} */
 
 
@@ -431,14 +573,15 @@
  * threads over a machine, giving each of them as much private cache as
  * possible and keeping them locally in number order.
  *
- * The caller may typicall want to additionally call hwloc_cpuset_singlify()
- * before binding a thread, so that it doesn't move at all.
+ * The caller may typically want to also call hwloc_cpuset_singlify()
+ * before binding a thread so that it does not move at all.
  */
-static __inline void
-hwloc_distribute(hwloc_topology_t topology, hwloc_obj_t root, hwloc_cpuset_t *cpuset, int n)
+static __hwloc_inline void
+hwloc_distribute(hwloc_topology_t topology, hwloc_obj_t root, hwloc_cpuset_t *cpuset, unsigned n)
 {
-  int i;
-  int chunk_size, complete_chunks;
+  unsigned i;
+  unsigned u;
+  unsigned chunk_size, complete_chunks;
   hwloc_cpuset_t *cpusetp;
 
   if (!root->arity || n == 1) {
@@ -461,12 +604,79 @@
     hwloc_distribute(topology, root->children[i], cpusetp, chunk_size);
 
   /* Now allocate not-so-complete chunks.  */
-  for ( ;
-       i < root->arity;
-       i++, cpusetp += chunk_size-1)
-    hwloc_distribute(topology, root->children[i], cpusetp, chunk_size-1);
+  for (u = i;
+       u < root->arity;
+       u++, cpusetp += chunk_size-1)
+    hwloc_distribute(topology, root->children[u], cpusetp, chunk_size-1);
 }
 
 /** @} */
 
+/** \defgroup hwlocality_helper_cpuset Cpuset Helpers
+ * @{
+ */
+/* \brief Get complete CPU set
+ *
+ * \return the complete CPU set of logical processors of the system. If the
+ * topology is the result of a combination of several systems, NULL is
+ * returned.
+ *
+ * \note The returned cpuset is not newly allocated and should thus not be
+ * changed or freed; hwloc_cpuset_dup must be used to obtain a local copy.
+ */
+static __hwloc_inline hwloc_const_cpuset_t __hwloc_attribute_pure
+hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)
+{
+  return hwloc_get_root_obj(topology)->complete_cpuset;
+}
+
+/* \brief Get topology CPU set
+ *
+ * \return the CPU set of logical processors of the system for which hwloc
+ * provides topology information. This is equivalent to the cpuset of the
+ * system object. If the topology is the result of a combination of several
+ * systems, NULL is returned.
+ *
+ * \note The returned cpuset is not newly allocated and should thus not be
+ * changed or freed; hwloc_cpuset_dup must be used to obtain a local copy.
+ */
+static __hwloc_inline hwloc_const_cpuset_t __hwloc_attribute_pure
+hwloc_topology_get_topology_cpuset(hwloc_topology_t topology)
+{
+  return hwloc_get_root_obj(topology)->cpuset;
+}
+
+/** \brief Get online CPU set
+ *
+ * \return the CPU set of online logical processors of the system. If the
+ * topology is the result of a combination of several systems, NULL is
+ * returned.
+ *
+ * \note The returned cpuset is not newly allocated and should thus not be
+ * changed or freed; hwloc_cpuset_dup must be used to obtain a local copy.
+ */
+static __hwloc_inline hwloc_const_cpuset_t __hwloc_attribute_pure
+hwloc_topology_get_online_cpuset(hwloc_topology_t topology)
+{
+  return hwloc_get_root_obj(topology)->online_cpuset;
+}
+
+/** \brief Get allowed CPU set
+ *
+ * \return the CPU set of allowed logical processors of the system. If the
+ * topology is the result of a combination of several systems, NULL is
+ * returned.
+ *
+ * \note The returned cpuset is not newly allocated and should thus not be
+ * changed or freed, hwloc_cpuset_dup must be used to obtain a local copy.
+ */
+static __hwloc_inline hwloc_const_cpuset_t __hwloc_attribute_pure
+hwloc_topology_get_allowed_cpuset(hwloc_topology_t topology)
+{
+  return hwloc_get_root_obj(topology)->allowed_cpuset;
+}
+
+
+/** @} */
+
 #endif /* HWLOC_HELPER_H */

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/linux-libnuma.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/linux-libnuma.h	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/linux-libnuma.h	2010-05-11 01:47:13 UTC (rev 6632)
@@ -15,7 +15,6 @@
 
 #include <hwloc.h>
 #include <numa.h>
-#include <assert.h>
 
 
 /** \defgroup hwlocality_linux_libnuma_ulongs Helpers for manipulating Linux libnuma unsigned long masks
@@ -33,14 +32,14 @@
  * or any other function that takes an array of unsigned long and a maximal
  * node number as input parameter.
  */
-static __inline void
-hwloc_cpuset_to_linux_libnuma_ulongs(hwloc_topology_t topology, hwloc_cpuset_t cpuset,
+static __hwloc_inline int
+hwloc_cpuset_to_linux_libnuma_ulongs(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset,
 				    unsigned long *mask, unsigned long *maxnode)
 {
   unsigned long outmaxnode = -1;
   hwloc_obj_t node = NULL;
   unsigned nbnodes = hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_NODE);
-  int i;
+  unsigned i;
 
   for(i=0; i<*maxnode/HWLOC_BITS_PER_LONG; i++)
     mask[i] = 0;
@@ -62,6 +61,7 @@
   }
 
   *maxnode = outmaxnode+1;
+  return 0;
 }
 
 /** \brief Convert the array of unsigned long \p mask into hwloc CPU set
@@ -73,36 +73,35 @@
  * that takes an array of unsigned long as output parameter (and possibly
  * a maximal node number as input parameter).
  */
-static __inline hwloc_cpuset_t
-hwloc_cpuset_from_linux_libnuma_ulongs(hwloc_topology_t topology,
+static __hwloc_inline int
+hwloc_cpuset_from_linux_libnuma_ulongs(hwloc_topology_t topology, hwloc_cpuset_t cpuset,
 				      const unsigned long *mask, unsigned long maxnode)
 {
-  hwloc_cpuset_t cpuset;
   hwloc_obj_t node;
   int depth;
-  int i;
+  unsigned i;
 
   depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
-  assert(depth != HWLOC_TYPE_DEPTH_MULTIPLE);
+  /* cannot be HWLOC_TYPE_DEPTH_MULTIPLE */
 
   if (depth == HWLOC_TYPE_DEPTH_UNKNOWN) {
     /* if no numa, libnuma assumes we have a single node */
     if (mask[0] & 1)
-      cpuset = hwloc_cpuset_dup(hwloc_get_system_obj(topology)->cpuset);
+      hwloc_cpuset_copy(cpuset, hwloc_topology_get_complete_cpuset(topology));
     else
-      cpuset = hwloc_cpuset_alloc();
+      hwloc_cpuset_zero(cpuset);
 
   } else {
-    cpuset = hwloc_cpuset_alloc();
+    hwloc_cpuset_zero(cpuset);
     for(i=0; i<maxnode; i++)
       if (mask[i/HWLOC_BITS_PER_LONG] & (1 << (i% HWLOC_BITS_PER_LONG))) {
 	node = hwloc_get_obj_by_depth(topology, depth, i);
 	if (node)
-	  hwloc_cpuset_orset(cpuset, node->cpuset);
+	  hwloc_cpuset_or(cpuset, cpuset, node->cpuset);
       }
   }
 
-  return cpuset;
+  return 0;
 }
 
 /** @} */
@@ -120,9 +119,11 @@
  *
  * This function may be used before calling many numa_ functions
  * that use a struct bitmask as an input parameter.
+ *
+ * \return newly allocated struct bitmask.
  */
-static __inline struct bitmask *
-hwloc_cpuset_to_linux_libnuma_bitmask(hwloc_topology_t topology, hwloc_cpuset_t cpuset)
+static __hwloc_inline struct bitmask * __hwloc_attribute_malloc
+hwloc_cpuset_to_linux_libnuma_bitmask(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset)
 {
   struct bitmask *bitmask;
   hwloc_obj_t node = NULL;
@@ -152,36 +153,35 @@
  * This function may be used after calling many numa_ functions
  * that use a struct bitmask as an output parameter.
  */
-static __inline hwloc_cpuset_t
-hwloc_cpuset_from_linux_libnuma_bitmask(hwloc_topology_t topology,
+static __hwloc_inline int
+hwloc_cpuset_from_linux_libnuma_bitmask(hwloc_topology_t topology, hwloc_cpuset_t cpuset,
 				       const struct bitmask *bitmask)
 {
-  hwloc_cpuset_t cpuset;
   hwloc_obj_t node;
   int depth;
   int i;
 
   depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
-  assert(depth != HWLOC_TYPE_DEPTH_MULTIPLE);
+  /* cannot be HWLOC_TYPE_DEPTH_MULTIPLE */
 
   if (depth == HWLOC_TYPE_DEPTH_UNKNOWN) {
     /* if no numa, libnuma assumes we have a single node */
     if (numa_bitmask_isbitset(bitmask, 0))
-      cpuset = hwloc_cpuset_dup(hwloc_get_system_obj(topology)->cpuset);
+      hwloc_cpuset_copy(cpuset, hwloc_topology_get_complete_cpuset(topology));
     else
-      cpuset = hwloc_cpuset_alloc();
+      hwloc_cpuset_zero(cpuset);
 
   } else {
-    cpuset = hwloc_cpuset_alloc();
+    hwloc_cpuset_zero(cpuset);
     for(i=0; i<NUMA_NUM_NODES; i++)
       if (numa_bitmask_isbitset(bitmask, i)) {
 	node = hwloc_get_obj_by_depth(topology, depth, i);
 	if (node)
-	  hwloc_cpuset_orset(cpuset, node->cpuset);
+	  hwloc_cpuset_or(cpuset, cpuset, node->cpuset);
       }
   }
 
-  return cpuset;
+  return 0;
 }
 
 /** @} */
@@ -199,8 +199,8 @@
  * This function may be used before calling some old libnuma functions
  * that use a nodemask_t as an input parameter.
  */
-static __inline void
-hwloc_cpuset_to_linux_libnuma_nodemask(hwloc_topology_t topology, hwloc_cpuset_t cpuset,
+static __hwloc_inline int
+hwloc_cpuset_to_linux_libnuma_nodemask(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset,
 				      nodemask_t *nodemask)
 {
   hwloc_obj_t node = NULL;
@@ -216,6 +216,8 @@
     if (!hwloc_cpuset_iszero(cpuset))
       nodemask_set(nodemask, 0);
   }
+
+  return 0;
 }
 
 /** \brief Convert libnuma nodemask \p nodemask into hwloc CPU set \p cpuset
@@ -223,36 +225,35 @@
  * This function may be used before calling some old libnuma functions
  * that use a nodemask_t as an output parameter.
  */
-static __inline hwloc_cpuset_t
-hwloc_cpuset_from_linux_libnuma_nodemask(hwloc_topology_t topology,
+static __hwloc_inline int
+hwloc_cpuset_from_linux_libnuma_nodemask(hwloc_topology_t topology, hwloc_cpuset_t cpuset,
 					const nodemask_t *nodemask)
 {
-  hwloc_cpuset_t cpuset;
   hwloc_obj_t node;
   int depth;
   int i;
 
   depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
-  assert(depth != HWLOC_TYPE_DEPTH_MULTIPLE);
+  /* cannot be HWLOC_TYPE_DEPTH_MULTIPLE */
 
   if (depth == HWLOC_TYPE_DEPTH_UNKNOWN) {
     /* if no numa, libnuma assumes we have a single node */
     if (nodemask_isset(nodemask, 0))
-      cpuset = hwloc_cpuset_dup(hwloc_get_system_obj(topology)->cpuset);
+      hwloc_cpuset_copy(cpuset, hwloc_topology_get_complete_cpuset(topology));
     else
-      cpuset = hwloc_cpuset_alloc();
+      hwloc_cpuset_zero(cpuset);
 
   } else {
-    cpuset = hwloc_cpuset_alloc();
+    hwloc_cpuset_zero(cpuset);
     for(i=0; i<NUMA_NUM_NODES; i++)
       if (nodemask_isset(nodemask, i)) {
 	node = hwloc_get_obj_by_depth(topology, depth, i);
 	if (node)
-	  hwloc_cpuset_orset(cpuset, node->cpuset);
+	  hwloc_cpuset_or(cpuset, cpuset, node->cpuset);
       }
   }
 
-  return cpuset;
+  return 0;
 }
 
 /** @} */

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/linux.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/linux.h	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/linux.h	2010-05-11 01:47:13 UTC (rev 6632)
@@ -16,7 +16,11 @@
 #include <hwloc.h>
 #include <stdio.h>
 
-/** \defgroup hwlocality_linux_cpumap Helpers for manipulating linux kernel cpumap files
+/** \defgroup hwlocality_linux Linux-only helpers
+ *
+ * This includes helpers for manipulating linux kernel cpumap files, and hwloc
+ * equivalents of the Linux sched_setaffinity and sched_getaffinity system calls.
+ *
  * @{
  */
 
@@ -25,8 +29,22 @@
  * Might be used when reading CPU set from sysfs attributes such as topology
  * and caches for processors, or local_cpus for devices.
  */
-extern hwloc_cpuset_t hwloc_linux_parse_cpumap_file(FILE *file);
+HWLOC_DECLSPEC int hwloc_linux_parse_cpumap_file(FILE *file, hwloc_cpuset_t set);
 
+/** \brief Bind a thread \p tid on cpus given in cpuset \p set
+ *
+ * The behavior is exactly the same as the Linux sched_setaffinity system call,
+ * but uses a hwloc cpuset.
+ */
+HWLOC_DECLSPEC int hwloc_linux_set_tid_cpubind(hwloc_topology_t topology, pid_t tid, hwloc_const_cpuset_t set);
+
+/** \brief Get the current binding of thread \p tid
+ *
+ * The behavior is exactly the same as the Linux sched_setaffinity system call,
+ * but uses a hwloc cpuset.
+ */
+HWLOC_DECLSPEC int hwloc_linux_get_tid_cpubind(hwloc_topology_t topology, pid_t tid, hwloc_cpuset_t set);
+
 /** @} */
 
 #endif /* HWLOC_GLIBC_SCHED_H */

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/openfabrics-verbs.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/openfabrics-verbs.h	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/openfabrics-verbs.h	2010-05-11 01:47:13 UTC (rev 6632)
@@ -35,31 +35,31 @@
  * This function is currently only implemented in a meaningful way for
  * Linux; other systems will simply get a full cpuset.
  */
-static __inline hwloc_cpuset_t
-hwloc_ibv_get_device_cpuset(struct ibv_device *ibdev)
+static __hwloc_inline int
+hwloc_ibv_get_device_cpuset(hwloc_topology_t topology __hwloc_attribute_unused,
+			    struct ibv_device *ibdev, hwloc_cpuset_t set)
 {
-#if defined(HWLOC_LINUX_SYS)
+#ifdef HWLOC_LINUX_SYS
   /* If we're on Linux, use the verbs-provided sysfs mechanism to
      get the local cpus */
 #define HWLOC_OPENFABRICS_VERBS_SYSFS_PATH_MAX 128
   char path[HWLOC_OPENFABRICS_VERBS_SYSFS_PATH_MAX];
   FILE *sysfile = NULL;
-  hwloc_cpuset_t set;
 
   sprintf(path, "/sys/class/infiniband/%s/device/local_cpus",
 	  ibv_get_device_name(ibdev));
   sysfile = fopen(path, "r");
   if (!sysfile)
-    return NULL;
+    return -1;
 
-  set = hwloc_linux_parse_cpumap_file(sysfile);
+  hwloc_linux_parse_cpumap_file(sysfile, set);
 
   fclose(sysfile);
-  return set;
 #else
   /* Non-Linux systems simply get a full cpuset */
-  return hwloc_cpuset_dup(hwloc_get_system_obj(topology)->cpuset);
+  hwloc_cpuset_copy(set, hwloc_topology_get_complete_cpuset(topology));
 #endif
+  return 0;
 }
 
 /** @} */

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/rename.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/rename.h	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc/rename.h	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,317 @@
+/*
+ * Copyright © 2009-2010 Cisco Systems, Inc.  All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#ifndef HWLOC_RENAME_H
+#define HWLOC_RENAME_H
+
+#include <hwloc/config.h>
+
+/* Only enact these defines if we're actually renaming the symbols
+   (i.e., avoid trying to have no-op defines if we're *not*
+   renaming). */
+
+#if HWLOC_SYM_TRANSFORM
+
+/* Use a preprocessor two-step in order to get the prefixing right.
+   Make 2 macros: HWLOC_NAME and HWLOC_NAME_CAPS for renaming
+   things. */
+
+#define HWLOC_MUNGE_NAME(a, b) HWLOC_MUNGE_NAME2(a, b)
+#define HWLOC_MUNGE_NAME2(a, b) a ## b
+#define HWLOC_NAME(name) HWLOC_MUNGE_NAME(HWLOC_SYM_PREFIX, hwloc_ ## name)
+#define HWLOC_NAME_CAPS(name) HWLOC_MUNGE_NAME(HWLOC_SYM_PREFIX_CAPS, hwloc_ ## name)
+
+/* Now define all the "real" names to be the prefixed names.  This
+   allows us to use the real names throughout the code base (i.e.,
+   "hwloc_<foo>"); the preprocessor will adjust to have the prefixed
+   name under the covers. */
+
+/* Names from hwloc.h */
+
+#define hwloc_topology HWLOC_NAME(topology)
+#define hwloc_topology_t HWLOC_NAME(topology_t)
+
+#define HWLOC_OBJ_SYSTEM HWLOC_NAME_CAPS(OBJ_SYSTEM)
+#define HWLOC_OBJ_MACHINE HWLOC_NAME_CAPS(OBJ_MACHINE)
+#define HWLOC_OBJ_NODE HWLOC_NAME_CAPS(OBJ_NODE)
+#define HWLOC_OBJ_SOCKET HWLOC_NAME_CAPS(OBJ_SOCKET)
+#define HWLOC_OBJ_CACHE HWLOC_NAME_CAPS(OBJ_CACHE)
+#define HWLOC_OBJ_CORE HWLOC_NAME_CAPS(OBJ_CORE)
+#define HWLOC_OBJ_PU HWLOC_NAME_CAPS(OBJ_PU)
+#define HWLOC_OBJ_MISC HWLOC_NAME_CAPS(OBJ_MISC)
+#define HWLOC_OBJ_GROUP HWLOC_NAME_CAPS(OBJ_GROUP)
+
+#define hwloc_obj_type_t HWLOC_NAME(obj_type_t)
+
+#define hwloc_compare_types HWLOC_NAME(compare_types)
+
+#define HWLOC_TYPE_UNORDERED HWLOC_NAME_CAPS(TYPE_UNORDERED)
+
+#define hwloc_obj_memory_s HWLOC_NAME(obj_memory_s)
+
+#define hwloc_obj HWLOC_NAME(obj)
+#define hwloc_obj_t HWLOC_NAME(obj_t)
+
+#define hwloc_obj_attr_u HWLOC_NAME(obj_attr_u)
+#define hwloc_cache_attr_s HWLOC_NAME(cache_attr_s)
+#define hwloc_memory_attr_s HWLOC_NAME(cache_memory_s)
+#define hwloc_machine_attr_s HWLOC_NAME(cache_machine_s)
+#define hwloc_misc_attr_s HWLOC_NAME(cache_misc_s)
+
+#define hwloc_topology_init HWLOC_NAME(topology_init)
+#define hwloc_topology_load HWLOC_NAME(topology_load)
+#define hwloc_topology_destroy HWLOC_NAME(topology_destroy)
+#define hwloc_topology_check HWLOC_NAME(topology_check)
+#define hwloc_topology_ignore_type HWLOC_NAME(topology_ignore_type)
+#define hwloc_topology_ignore_type_keep_structure HWLOC_NAME(topology_ignore_type_keep_structure)
+#define hwloc_topology_ignore_all_keep_structure HWLOC_NAME(topology_ignore_all_keep_structure)
+
+#define hwloc_topology_flags_e HWLOC_NAME(topology_flags_e)
+
+#define HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM HWLOC_NAME_CAPS(TOPOLOGY_FLAG_WHOLE_SYSTEM)
+#define HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM HWLOC_NAME_CAPS(TOPOLOGY_FLAG_IS_THISSYSTEM)
+
+#define hwloc_topology_set_flags HWLOC_NAME(topology_set_flags)
+#define hwloc_topology_set_fsroot HWLOC_NAME(topology_set_fsroot)
+#define hwloc_topology_set_pid HWLOC_NAME(topology_set_pid)
+#define hwloc_topology_set_synthetic HWLOC_NAME(topology_set_synthetic)
+#define hwloc_topology_set_xml HWLOC_NAME(topology_set_xml)
+
+#define hwloc_topology_support HWLOC_NAME(topology_support)
+#define hwloc_topology_get_support HWLOC_NAME(topology_get_support)
+#define hwloc_topology_export_xml HWLOC_NAME(topology_export_xml)
+
+#define hwloc_topology_insert_misc_object_by_cpuset HWLOC_NAME(topology_insert_misc_object_by_cpuset)
+#define hwloc_topology_insert_misc_object_by_parent HWLOC_NAME(topology_insert_misc_object_by_parent)
+
+#define hwloc_topology_get_depth HWLOC_NAME(topology_get_depth)
+#define hwloc_get_type_depth HWLOC_NAME(get_type_depth)
+
+#define HWLOC_TYPE_DEPTH_UNKNOWN HWLOC_NAME_CAPS(TYPE_DEPTH_UNKNOWN)
+#define HWLOC_TYPE_DEPTH_MULTIPLE HWLOC_NAME_CAPS(TYPE_DEPTH_MULTIPLE)
+
+#define hwloc_get_depth_type HWLOC_NAME(get_depth_type)
+#define hwloc_get_nbobjs_by_depth HWLOC_NAME(get_nbobjs_by_depth)
+#define hwloc_get_nbobjs_by_type HWLOC_NAME(get_nbobjs_by_type)
+
+#define hwloc_topology_is_thissystem HWLOC_NAME(topology_is_thissystem)
+
+#define hwloc_get_obj_by_depth HWLOC_NAME(get_obj_by_depth )
+#define hwloc_get_obj_by_type HWLOC_NAME(get_obj_by_type )
+
+#define hwloc_obj_type_string HWLOC_NAME(obj_type_string )
+#define hwloc_obj_type_of_string HWLOC_NAME(obj_type_of_string )
+#define hwloc_obj_type_snprintf HWLOC_NAME(obj_type_snprintf )
+#define hwloc_obj_attr_snprintf HWLOC_NAME(obj_attr_snprintf )
+#define hwloc_obj_snprintf HWLOC_NAME(obj_snprintf)
+#define hwloc_obj_cpuset_snprintf HWLOC_NAME(obj_cpuset_snprintf)
+
+#define HWLOC_CPUBIND_PROCESS HWLOC_NAME_CAPS(CPUBIND_PROCESS)
+#define HWLOC_CPUBIND_THREAD HWLOC_NAME_CAPS(CPUBIND_THREAD)
+#define HWLOC_CPUBIND_STRICT HWLOC_NAME_CAPS(CPUBIND_STRICT)
+
+#define hwloc_cpubind_policy_t HWLOC_NAME(hwloc_cpubind_policy_t)
+
+#define hwloc_set_cpubind HWLOC_NAME(set_cpubind)
+#define hwloc_get_cpubind HWLOC_NAME(get_cpubind)
+#define hwloc_set_proc_cpubind HWLOC_NAME(set_proc_cpubind)
+#define hwloc_get_proc_cpubind HWLOC_NAME(get_proc_cpubind)
+#define hwloc_set_thread_cpubind HWLOC_NAME(set_thread_cpubind)
+#define hwloc_get_thread_cpubind HWLOC_NAME(get_thread_cpubind)
+
+/* hwloc/cpuset.h */
+
+#define hwloc_cpuset HWLOC_NAME(cpuset)
+#define hwloc_cpuset_s HWLOC_NAME(cpuset_s)
+#define hwloc_cpuset_t HWLOC_NAME(cpuset_t)
+#define hwloc_const_cpuset_t HWLOC_NAME(const_cpuset_t)
+
+#define hwloc_cpuset_alloc HWLOC_NAME(cpuset_alloc)
+#define hwloc_cpuset_free HWLOC_NAME(cpuset_free)
+#define hwloc_cpuset_dup HWLOC_NAME(cpuset_dup)
+#define hwloc_cpuset_copy HWLOC_NAME(cpuset_copy)
+#define hwloc_cpuset_snprintf HWLOC_NAME(cpuset_snprintf)
+#define hwloc_cpuset_asprintf HWLOC_NAME(cpuset_asprintf)
+#define hwloc_cpuset_from_string HWLOC_NAME(cpuset_from_string)
+#define hwloc_cpuset_zero HWLOC_NAME(cpuset_zero)
+#define hwloc_cpuset_fill HWLOC_NAME(cpuset_fill)
+#define hwloc_cpuset_from_ulong HWLOC_NAME(cpuset_from_ulong)
+
+#define hwloc_cpuset_from_ith_ulong HWLOC_NAME(cpuset_from_ith_ulong)
+#define hwloc_cpuset_to_ulong HWLOC_NAME(cpuset_to_ulong)
+#define hwloc_cpuset_to_ith_ulong HWLOC_NAME(cpuset_to_ith_ulong)
+#define hwloc_cpuset_cpu HWLOC_NAME(cpuset_cpu)
+#define hwloc_cpuset_all_but_cpu HWLOC_NAME(cpuset_all_but_cpu)
+#define hwloc_cpuset_set HWLOC_NAME(cpuset_set)
+#define hwloc_cpuset_set_range HWLOC_NAME(cpuset_set_range)
+#define hwloc_cpuset_clr HWLOC_NAME(cpuset_clr)
+#define hwloc_cpuset_clr_range HWLOC_NAME(cpuset_clr_range)
+#define hwloc_cpuset_isset HWLOC_NAME(cpuset_isset)
+#define hwloc_cpuset_iszero HWLOC_NAME(cpuset_iszero)
+#define hwloc_cpuset_isfull HWLOC_NAME(cpuset_isfull)
+#define hwloc_cpuset_isequal HWLOC_NAME(cpuset_isequal)
+#define hwloc_cpuset_intersects HWLOC_NAME(cpuset_intersects)
+#define hwloc_cpuset_isincluded HWLOC_NAME(cpuset_isincluded)
+#define hwloc_cpuset_or HWLOC_NAME(cpuset_or)
+#define hwloc_cpuset_and HWLOC_NAME(cpuset_and)
+#define hwloc_cpuset_andnot HWLOC_NAME(cpuset_andnot)
+#define hwloc_cpuset_xor HWLOC_NAME(cpuset_xor)
+#define hwloc_cpuset_not HWLOC_NAME(cpuset_not)
+#define hwloc_cpuset_first HWLOC_NAME(cpuset_first)
+#define hwloc_cpuset_last HWLOC_NAME(cpuset_last)
+#define hwloc_cpuset_next HWLOC_NAME(cpuset_next)
+#define hwloc_cpuset_singlify HWLOC_NAME(cpuset_singlify)
+#define hwloc_cpuset_compare_first HWLOC_NAME(cpuset_compare_first)
+#define hwloc_cpuset_compare HWLOC_NAME(cpuset_compare)
+#define hwloc_cpuset_weight HWLOC_NAME(cpuset_weight)
+
+/* hwloc/helper.h */
+
+#define hwloc_get_type_or_below_depth HWLOC_NAME(get_type_or_below_depth)
+#define hwloc_get_type_or_above_depth HWLOC_NAME(get_type_or_above_depth)
+#define hwloc_get_root_obj HWLOC_NAME(get_root_obj)
+#define hwloc_get_system_obj HWLOC_NAME(get_system_obj)
+#define hwloc_get_ancestor_obj_by_depth HWLOC_NAME(get_ancestor_obj_by_depth)
+#define hwloc_get_ancestor_obj_by_type HWLOC_NAME(get_ancestor_obj_by_type)
+#define hwloc_get_next_obj_by_depth HWLOC_NAME(get_next_obj_by_depth)
+#define hwloc_get_next_obj_by_type HWLOC_NAME(get_next_obj_by_type)
+#define hwloc_get_pu_obj_by_os_index HWLOC_NAME(get_pu_obj_by_os_index)
+#define hwloc_get_next_child HWLOC_NAME(get_next_child)
+#define hwloc_get_common_ancestor_obj HWLOC_NAME(get_common_ancestor_obj)
+#define hwloc_obj_is_in_subtree HWLOC_NAME(obj_is_in_subtree)
+
+#define hwloc_get_first_largest_obj_inside_cpuset HWLOC_NAME(get_first_largest_obj_inside_cpuset)
+#define hwloc_get_largest_objs_inside_cpuset HWLOC_NAME(get_largest_objs_inside_cpuset)
+#define hwloc_get_next_obj_inside_cpuset_by_depth HWLOC_NAME(get_next_obj_inside_cpuset_by_depth)
+
+#define hwloc_get_next_obj_inside_cpuset_by_type HWLOC_NAME(get_next_obj_inside_cpuset_by_type)
+#define hwloc_get_obj_inside_cpuset_by_depth HWLOC_NAME(get_obj_inside_cpuset_by_depth)
+#define hwloc_get_obj_inside_cpuset_by_type HWLOC_NAME(get_obj_inside_cpuset_by_type)
+#define hwloc_get_nbobjs_inside_cpuset_by_depth HWLOC_NAME(get_nbobjs_inside_cpuset_by_depth)
+#define hwloc_get_nbobjs_inside_cpuset_by_type HWLOC_NAME(get_nbobjs_inside_cpuset_by_type)
+#define hwloc_get_child_covering_cpuset HWLOC_NAME(get_child_covering_cpuset)
+#define hwloc_get_obj_covering_cpuset HWLOC_NAME(get_obj_covering_cpuset)
+#define hwloc_get_next_obj_covering_cpuset_by_depth HWLOC_NAME(get_next_obj_covering_cpuset_by_depth)
+#define hwloc_get_next_obj_covering_cpuset_by_type HWLOC_NAME(get_next_obj_covering_cpuset_by_type)
+#define hwloc_get_cache_covering_cpuset HWLOC_NAME(get_cache_covering_cpuset)
+#define hwloc_get_shared_cache_covering_obj HWLOC_NAME(get_shared_cache_covering_obj)
+#define hwloc_get_closest_objs HWLOC_NAME(get_closest_objs)
+#define hwloc_get_obj_below_by_type HWLOC_NAME(get_obj_below_by_type)
+#define hwloc_get_obj_below_array_by_type HWLOC_NAME(get_obj_below_array_by_type)
+#define hwloc_distribute HWLOC_NAME(distribute)
+#define hwloc_topology_get_complete_cpuset HWLOC_NAME(topology_get_complete_cpuset)
+#define hwloc_topology_get_topology_cpuset HWLOC_NAME(topology_get_topology_cpuset)
+#define hwloc_topology_get_online_cpuset HWLOC_NAME(topology_get_online_cpuset)
+#define hwloc_topology_get_allowed_cpuset HWLOC_NAME(topology_get_allowed_cpuset)
+
+/* glibc-sched.h */
+
+#define hwloc_cpuset_to_glibc_sched_affinity HWLOC_NAME(cpuset_to_glibc_sched_affinity)
+#define hwloc_cpuset_from_glibc_sched_affinity HWLOC_NAME(cpuset_from_glibc_sched_affinity)
+
+/* linux-libnuma.h */
+
+#define hwloc_cpuset_to_linux_libnuma_ulongs HWLOC_NAME(cpuset_to_linux_libnuma_ulongs)
+#define hwloc_cpuset_from_linux_libnuma_ulongs HWLOC_NAME(cpuset_from_linux_libnuma_ulongs)
+#define hwloc_cpuset_to_linux_libnuma_bitmask HWLOC_NAME(cpuset_to_linux_libnuma_bitmask)
+#define hwloc_cpuset_from_linux_libnuma_bitmask HWLOC_NAME(cpuset_from_linux_libnuma_bitmask)
+#define hwloc_cpuset_to_linux_libnuma_nodemask HWLOC_NAME(cpuset_to_linux_libnuma_nodemask)
+#define hwloc_cpuset_from_linux_libnuma_nodemask HWLOC_NAME(cpuset_from_linux_libnuma_nodemask)
+
+/* linux.h */
+
+#define hwloc_linux_parse_cpumap_file HWLOC_NAME(linux_parse_cpumap_file)
+#define hwloc_linux_set_tid_cpubind HWLOC_NAME(linux_set_tid_cpubind)
+#define hwloc_linux_get_tid_cpubind HWLOC_NAME(linux_get_tid_cpubind)
+
+/* openfabrics-verbs.h */
+
+#define hwloc_ibv_get_device_cpuset HWLOC_NAME(ibv_get_device_cpuset)
+
+/* private/misc.h */
+
+#define hwloc_snprintf HWLOC_NAME(snprintf)
+#define hwloc_namecoloncmp HWLOC_NAME(namecoloncmp)
+#define hwloc_weight_long HWLOC_NAME(weight_long)
+
+/* private/cpuid.h */
+
+#define hwloc_have_cpuid HWLOC_NAME(have_cpuid)
+#define hwloc_cpuid HWLOC_NAME(cpuid)
+
+/* private/private.h */
+
+#define hwloc_ignore_type_e HWLOC_NAME(ignore_type_e)
+
+#define HWLOC_IGNORE_TYPE_NEVER HWLOC_NAME_CAPS(IGNORE_TYPE_NEVER)
+#define HWLOC_IGNORE_TYPE_KEEP_STRUCTURE HWLOC_NAME_CAPS(IGNORE_TYPE_KEEP_STRUCTURE)
+#define HWLOC_IGNORE_TYPE_ALWAYS HWLOC_NAME_CAPS(IGNORE_TYPE_ALWAYS)
+
+#define hwloc_backend_e HWLOC_NAME(backend_e)
+
+#define HWLOC_BACKEND_NONE HWLOC_NAME_CAPS(BACKEND_NONE)
+#define HWLOC_BACKEND_SYNTHETIC HWLOC_NAME_CAPS(BACKEND_SYNTHETIC)
+#define HWLOC_BACKEND_SYSFS HWLOC_NAME_CAPS(BACKEND_SYSFS)
+#define HWLOC_BACKEND_XML HWLOC_NAME_CAPS(BACKEND_XML)
+
+#define hwloc_backend_t HWLOC_NAME(backend_t)
+
+#define hwloc_backend_params_u HWLOC_NAME(backend_params_u)
+#define hwloc_backend_params_sysfs_s HWLOC_NAME(backend_params_sysfs_s)
+#define hwloc_backend_params_osf HWLOC_NAME(backend_params_osf)
+#define hwloc_backend_params_xml_s HWLOC_NAME(backend_params_xml_s)
+#define hwloc_backend_params_synthetic_s HWLOC_NAME(backend_params_synthetic_s)
+
+#define hwloc_setup_pu_level HWLOC_NAME(setup_pu_level)
+#define hwloc_setup_misc_level_from_distances HWLOC_NAME(setup_misc_level_from_distances)
+#define hwloc_get_sysctlbyname HWLOC_NAME(get_sysctlbyname)
+#define hwloc_get_sysctl HWLOC_NAME(get_sysctl)
+#define hwloc_fallback_nbprocessors HWLOC_NAME(fallback_nbprocessors)
+
+#define hwloc_look_linux HWLOC_NAME(look_linux)
+#define hwloc_set_linux_hooks HWLOC_NAME(set_linux_hooks)
+#define hwloc_backend_sysfs_init HWLOC_NAME(backend_sysfs_init)
+#define hwloc_backend_sysfs_exit HWLOC_NAME(backend_sysfs_exit)
+
+#define hwloc_backend_xml_init HWLOC_NAME(backend_xml_init)
+#define hwloc_look_xml HWLOC_NAME(look_xml)
+#define hwloc_backend_xml_exit HWLOC_NAME(backend_xml_exit)
+
+#define hwloc_look_solaris HWLOC_NAME(look_solaris)
+#define hwloc_set_solaris_hooks HWLOC_NAME(set_solaris_hooks)
+
+#define hwloc_look_aix HWLOC_NAME(look_aix)
+#define hwloc_set_aix_hooks HWLOC_NAME(set_aix_hooks)
+
+#define hwloc_look_osf HWLOC_NAME(look_osf)
+#define hwloc_set_osf_hooks HWLOC_NAME(set_osf_hooks)
+
+#define hwloc_look_windows HWLOC_NAME(look_windows)
+#define hwloc_set_windows_hooks HWLOC_NAME(set_windows_hooks)
+
+#define hwloc_look_darwin HWLOC_NAME(look_darwin)
+#define hwloc_set_darwin_hooks HWLOC_NAME(set_darwin_hooks)
+
+#define hwloc_look_freebsd HWLOC_NAME(look_freebsd)
+#define hwloc_set_freebsd_hooks HWLOC_NAME(set_freebsd_hooks)
+
+#define hwloc_look_hpux HWLOC_NAME(look_hpux)
+#define hwloc_set_hpux_hooks HWLOC_NAME(set_hpux_hooks)
+
+#define hwloc_look_x86 HWLOC_NAME(look_x86)
+
+#define hwloc_backend_synthetic_init HWLOC_NAME(backend_synthetic_init)
+#define hwloc_backend_synthetic_exit HWLOC_NAME(backend_synthetic_exit)
+#define hwloc_look_synthetic  HWLOC_NAME(look_synthetic )
+
+#define hwloc_insert_object_by_cpuset HWLOC_NAME(insert_object_by_cpuset)
+#define hwloc_insert_object_by_parent HWLOC_NAME(insert_object_by_parent)
+#define hwloc_cpuset_printf_value HWLOC_NAME(cpuset_printf_value)
+#define hwloc_alloc_setup_object HWLOC_NAME(alloc_setup_object)
+#define hwloc_setup_level HWLOC_NAME(setup_level)
+
+#endif /* HWLOC_SYM_TRANSFORM */
+
+#endif /* HWLOC_RENAME_H */

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc.h	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/hwloc.h	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,6 +1,6 @@
 /*
  * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
- * Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
+ * Copyright © 2009-2010 Cisco Systems, Inc.  All rights reserved.
  * See COPYING in top-level directory.
  */
 
@@ -17,8 +17,14 @@
 #include <sys/types.h>
 #include <stdio.h>
 #include <limits.h>
+#include <stdint.h>
 
 /*
+ * Symbol transforms
+ */
+#include <hwloc/rename.h>
+
+/*
  * Cpuset bitmask definitions
  */
 
@@ -26,6 +32,17 @@
 
 
 
+/** \defgroup hwlocality_api_version API version
+ * @{
+ */
+
+/** \brief Indicate at build time which hwloc API version is being used. */
+#define HWLOC_API_VERSION 0x00010000
+
+/** @} */
+
+
+
 /** \defgroup hwlocality_topology Topology context
  * @{
  */
@@ -58,6 +75,7 @@
 			  * like Kerrighed.
 			  */
   HWLOC_OBJ_MACHINE,	/**< \brief Machine.
+			  * The typical root object type.
 			  * A set of processors and memory with cache
 			  * coherency.
 			  */
@@ -76,7 +94,7 @@
 			  * A computation unit (may be shared by several
 			  * logical processors).
 			  */
-  HWLOC_OBJ_PROC,	/**< \brief (Logical) Processor.
+  HWLOC_OBJ_PU,		/**< \brief Processing Unit, or (Logical) Processor.
 			  * An execution unit (may share a core with some
 			  * other logical processors, e.g. in the case of
 			  * an SMT core).
@@ -85,31 +103,46 @@
 			  * thus be used as fallback when others are not.
 			  */
 
-  HWLOC_OBJ_MISC,	/**< \brief Miscellaneous objects.
+  HWLOC_OBJ_GROUP,	/**< \brief Group objects.
 			  * Objects which do not fit in the above but are
 			  * detected by hwloc and are useful to take into
 			  * account for affinity. For instance, some OSes
 			  * expose their arbitrary processors aggregation this
-			  * way.
+			  * way.  And hwloc may insert such objects to group
+			  * NUMA nodes according to their distances.
+			  *
+			  * These objects are ignored when they do not bring
+			  * any structure.
 			  */
+
+  HWLOC_OBJ_MISC 	/**< \brief Miscellaneous objects.
+			  * Objects without particular meaning, that can e.g. be
+			  * added by the application for its own use.
+			  */
 } hwloc_obj_type_t;
 
 /** \brief Compare the depth of two object types
  *
  * Types shouldn't be compared as they are, since newer ones may be added in
  * the future.  This function returns less than, equal to, or greater than zero
- * if \p type1 is considered to be respectively higher than, equal to, or deeper
- * than \p type2 in the hierarchy.  If the types can not be compared (because
- * it does not make sense), HWLOC_TYPE_UNORDERED is returned.  Object types
- * containing CPUs can always be compared.
+ * respectively if \p type1 objects usually include \p type2 objects, are the
+ * same as \p type2 objects, or are included in \p type2 objects. If the types
+ * can not be compared (because neither is usually contained in the other),
+ * HWLOC_TYPE_UNORDERED is returned.  Object types containing CPUs can always
+ * be compared (usually, a system contains machines which contain nodes which
+ * contain sockets which contain caches, which contain cores, which contain
+ * processors).
  *
- * \note HWLOC_OBJ_SYSTEM will always be the highest, and
- * HWLOC_OBJ_PROC will always be the deepest.
+ * \note HWLOC_OBJ_PU will always be the deepest.
+ * \note This does not mean that the actual topology will respect that order:
+ * e.g. as of today cores may also contain caches, and sockets may also contain
+ * nodes. This is thus just to be seen as a fallback comparison method.
  */
-int hwloc_compare_types (hwloc_obj_type_t type1, hwloc_obj_type_t type2);
+HWLOC_DECLSPEC int hwloc_compare_types (hwloc_obj_type_t type1, hwloc_obj_type_t type2) __hwloc_attribute_const;
 
-/** \brief Value returned by hwloc_compare_types when types can not be compared. */
-#define HWLOC_TYPE_UNORDERED INT_MAX
+enum hwloc_compare_types_e {
+    HWLOC_TYPE_UNORDERED = INT_MAX	/**< \brief Value returned by hwloc_compare_types when types can not be compared. \hideinitializer */
+};
 
 /** @} */
 
@@ -121,6 +154,23 @@
 
 union hwloc_obj_attr_u;
 
+/** \brief Object memory */
+struct hwloc_obj_memory_s {
+  uint64_t total_memory; /**< \brief Total memory (in bytes) in this object and its children */
+  uint64_t local_memory; /**< \brief Local memory (in bytes) */
+
+  unsigned page_types_len; /**< \brief Size of array \p page_types */
+  /** \brief Array of local memory page types, \c NULL if no local memory and \p page_types is 0.
+   *
+   * The array is sorted by increasing \p size fields.
+   * It contains \p page_types_len slots.
+   */
+  struct hwloc_obj_memory_page_type_s {
+    uint64_t size;	/**< \brief Size of pages */
+    uint64_t count;	/**< \brief Number of pages of this size */
+  } * page_types;
+};
+
 /** \brief Structure of a topology object
  *
  * Applications mustn't modify any field except ::userdata .
@@ -128,9 +178,12 @@
 struct hwloc_obj {
   /* physical information */
   hwloc_obj_type_t type;		/**< \brief Type of object */
-  signed os_index;			/**< \brief OS-provided physical index number */
+  unsigned os_index;			/**< \brief OS-provided physical index number */
   char *name;				/**< \brief Object description if any */
 
+  /** \brief Memory attributes */
+  struct hwloc_obj_memory_s memory;
+
   /** \brief Object type-specific Attributes */
   union hwloc_obj_attr_u *attr;
 
@@ -138,14 +191,16 @@
   unsigned depth;			/**< \brief Vertical index in the hierarchy */
   unsigned logical_index;		/**< \brief Horizontal index in the whole list of similar objects,
 					 * could be a "cousin_rank" since it's the rank within the "cousin" list below */
+  signed os_level;			/**< \brief OS-provided physical level, -1 if unknown or meaningless */
+
   struct hwloc_obj *next_cousin;	/**< \brief Next object of same type */
   struct hwloc_obj *prev_cousin;	/**< \brief Previous object of same type */
 
-  /* father */
-  struct hwloc_obj *father;		/**< \brief Father, \c NULL if root (system object) */
-  unsigned sibling_rank;		/**< \brief Index in father's \c children[] array */
-  struct hwloc_obj *next_sibling;	/**< \brief Next object below the same father*/
-  struct hwloc_obj *prev_sibling;	/**< \brief Previous object below the same father */
+  /* parent */
+  struct hwloc_obj *parent;		/**< \brief Parent, \c NULL if root (system object) */
+  unsigned sibling_rank;		/**< \brief Index in parent's \c children[] array */
+  struct hwloc_obj *next_sibling;	/**< \brief Next object below the same parent */
+  struct hwloc_obj *prev_sibling;	/**< \brief Previous object below the same parent */
 
   /* children */
   unsigned arity;			/**< \brief Number of children */
@@ -157,38 +212,103 @@
   void *userdata;			/**< \brief Application-given private data pointer, initialized to \c NULL, use it as you wish */
 
   /* cpuset */
-  hwloc_cpuset_t cpuset;		/**< \brief CPUs covered by this object */
+  hwloc_cpuset_t cpuset;		/**< \brief CPUs covered by this object
+                                          *
+                                          * This is the set of CPUs for which there are PU objects in the topology
+                                          * under this object, i.e. which are known to be physically contained in this
+                                          * object and known how (the children path between this object and the PU
+                                          * objects).
+                                          *
+                                          * If the HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM configuration flag is set, some of
+                                          * these CPUs may be offline, or not allowed for binding, see online_cpuset
+                                          * and allowed_cpuset.
+                                          *
+                                          * \note Its value must not be changed, hwloc_cpuset_dup must be used instead.
+                                          */
+  hwloc_cpuset_t complete_cpuset;       /**< \brief The complete CPU set of logical processors of this object,
+                                          *
+                                          * This includes not only the same as the cpuset field, but also the CPUs for
+                                          * which topology information is unknown or incomplete, and the CPUs that are
+                                          * ignored when the HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM flag is not set.
+                                          * Thus no corresponding PU object may be found in the topology, because the
+                                          * precise position is undefined. It is however known that it would be somewhere
+                                          * under this object.
+                                          *
+                                          * \note Its value must not be changed, hwloc_cpuset_dup must be used instead.
+                                          */
+  hwloc_cpuset_t online_cpuset;         /**< \brief The CPU set of online logical processors
+                                          *
+                                          * This includes the CPUs contained in this object that are online, i.e. draw
+                                          * power and can execute threads.  It may however not be allowed to bind to
+                                          * them due to administration rules, see allowed_cpuset.
+                                          *
+                                          * \note Its value must not be changed, hwloc_cpuset_dup must be used instead.
+                                          */
+  hwloc_cpuset_t allowed_cpuset;        /**< \brief The CPU set of allowed logical processors
+                                          *
+                                          * This includes the CPUs contained in this object which are allowed for
+                                          * binding, i.e. passing them to the hwloc binding functions should not return
+                                          * permission errors.  This is usually restricted by administration rules.
+                                          * Some of them may however be offline so binding to them may still not be
+                                          * possible, see online_cpuset.
+                                          *
+                                          * \note Its value must not be changed, hwloc_cpuset_dup must be used instead.
+                                          */
 
-  signed os_level;			/**< \brief OS-provided physical level */
+  hwloc_cpuset_t nodeset;               /**< \brief NUMA nodes covered by this object or containing this object
+                                          *
+                                          * This is the set of NUMA nodes for which there are NODE objects in the
+                                          * topology under or above this object, i.e. which are known to be physically
+                                          * contained in this object or containing it and known how (the children path
+                                          * between this object and the NODE objects).
+                                          *
+                                          * If the HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM configuration flag is set, some of
+                                          * these nodes may not be allowed for allocation, see allowed_nodeset.
+                                          *
+                                          * \note Its value must not be changed, hwloc_cpuset_dup must be used instead.
+                                          */
+  hwloc_cpuset_t complete_nodeset;      /**< \brief The complete NUMA node set of this object,
+                                          *
+                                          * This includes not only the same as the nodeset field, but also the NUMA
+                                          * nodes for which topology information is unknown or incomplete, and the nodes
+                                          * that are ignored when the HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM flag is not set.
+                                          * Thus no corresponding NODE object may be found in the topology, because the
+                                          * precise position is undefined. It is however known that it would be
+                                          * somewhere under this object.
+                                          *
+                                          * \note Its value must not be changed, hwloc_cpuset_dup must be used instead.
+                                          */
+  hwloc_cpuset_t allowed_nodeset;       /**< \brief The set of allowed NUMA memory nodes
+                                          *
+                                          * This includes the NUMA memory nodes contained in this object which are
+                                          * allowed for memory allocation, i.e. passing them to NUMA node-directed
+                                          * memory allocation should not return permission errors. This is usually
+                                          * restricted by administration rules.
+                                          *
+                                          * \note Its value must not be changed, hwloc_cpuset_dup must be used instead.
+                                          */
 };
+/**
+ * \brief Convenience typedef; a pointer to a struct hwloc_obj.
+ */
 typedef struct hwloc_obj * hwloc_obj_t;
 
 /** \brief Object type-specific Attributes */
 union hwloc_obj_attr_u {
   /** \brief Cache-specific Object Attributes */
   struct hwloc_cache_attr_s {
-    unsigned long memory_kB;		  /**< \brief Size of cache */
+    uint64_t size;			  /**< \brief Size of cache in bytes */
     unsigned depth;			  /**< \brief Depth of cache */
   } cache;
-  /** \brief Node-specific Object Attributes */
-  struct hwloc_memory_attr_s {
-    unsigned long memory_kB;		  /**< \brief Size of memory node */
-    unsigned long huge_page_free;	  /**< \brief Number of available huge pages */
-  } node;
   /** \brief Machine-specific Object Attributes */
   struct hwloc_machine_attr_s {
     char *dmi_board_vendor;		  /**< \brief DMI board vendor name */
     char *dmi_board_name;		  /**< \brief DMI board model name */
-    unsigned long memory_kB;		  /**< \brief Size of memory node */
-    unsigned long huge_page_free;	  /**< \brief Number of available huge pages */
-    unsigned long huge_page_size_kB;	  /**< \brief Size of huge pages */
   } machine;
-  /** \brief System-specific Object Attributes */
-  struct hwloc_machine_attr_s system;
-  /** \brief Misc-specific Object Attributes */
-  struct hwloc_misc_attr_s {
-    unsigned depth;			  /**< \brief Depth of misc object */
-  } misc;
+  /** \brief Group-specific Object Attributes */
+  struct hwloc_group_attr_s {
+    unsigned depth;			  /**< \brief Depth of group object */
+  } group;
 };
 
 /** @} */
@@ -205,7 +325,7 @@
  *
  * \return 0 on success, -1 on error.
  */
-extern int hwloc_topology_init (hwloc_topology_t *topologyp);
+HWLOC_DECLSPEC int hwloc_topology_init (hwloc_topology_t *topologyp);
 
 /** \brief Build the actual topology
  *
@@ -219,19 +339,19 @@
  *
  * \sa hwlocality_configuration
  */
-extern int hwloc_topology_load(hwloc_topology_t topology);
+HWLOC_DECLSPEC int hwloc_topology_load(hwloc_topology_t topology);
 
 /** \brief Terminate and free a topology context
  *
  * \param topology is the topology to be freed
  */
-extern void hwloc_topology_destroy (hwloc_topology_t topology);
+HWLOC_DECLSPEC void hwloc_topology_destroy (hwloc_topology_t topology);
 
 /** \brief Run internal checks on a topology structure
  *
  * \param topology is the topology to be checked
  */
-extern void hwloc_topology_check(hwloc_topology_t topology);
+HWLOC_DECLSPEC void hwloc_topology_check(hwloc_topology_t topology);
 
 /** @} */
 
@@ -252,7 +372,8 @@
  * file as if hwloc_topology_set_xml() had been called.
  * HWLOC_FSROOT switches to reading the topology from the specified Linux
  * filesystem root as if hwloc_topology_set_fsroot() had been called.
- * Finally, HWLOC_THISSYSTEM enforces the value of the is_thissystem field.
+ * Finally, HWLOC_THISSYSTEM enforces the return value of
+ * hwloc_topology_is_thissystem().
  *
  * @{
  */
@@ -260,45 +381,49 @@
 /** \brief Ignore an object type.
  *
  * Ignore all objects from the given type.
- * The top-level type HWLOC_OBJ_SYSTEM and bottom-level type HWLOC_OBJ_PROC may
- * not be ignored.
+ * The bottom-level type HWLOC_OBJ_PU may not be ignored.
+ * The top-level object of the hierarchy will never be ignored, even if this function
+ * succeeds.
  */
-extern int hwloc_topology_ignore_type(hwloc_topology_t topology, hwloc_obj_type_t type);
+HWLOC_DECLSPEC int hwloc_topology_ignore_type(hwloc_topology_t topology, hwloc_obj_type_t type);
 
 /** \brief Ignore an object type if it does not bring any structure.
  *
  * Ignore all objects from the given type as long as they do not bring any structure:
- * Each ignored object should have a single children or be the only child of its father.
- * The top-level type HWLOC_OBJ_SYSTEM and bottom-level type HWLOC_OBJ_PROC may
- * not be ignored.
+ * Each ignored object should have a single children or be the only child of its parent.
+ * The bottom-level type HWLOC_OBJ_PU may not be ignored.
  */
-extern int hwloc_topology_ignore_type_keep_structure(hwloc_topology_t topology, hwloc_obj_type_t type);
+HWLOC_DECLSPEC int hwloc_topology_ignore_type_keep_structure(hwloc_topology_t topology, hwloc_obj_type_t type);
 
 /** \brief Ignore all objects that do not bring any structure.
  *
  * Ignore all objects that do not bring any structure:
- * Each ignored object should have a single children or be the only child of its father.
+ * Each ignored object should have a single children or be the only child of its parent.
  */
-extern int hwloc_topology_ignore_all_keep_structure(hwloc_topology_t topology);
+HWLOC_DECLSPEC int hwloc_topology_ignore_all_keep_structure(hwloc_topology_t topology);
 
 /** \brief Flags to be set onto a topology context before load.
  *
  * Flags should be given to hwloc_topology_set_flags().
  */
 enum hwloc_topology_flags_e {
-  /* \brief Detect the whole system, ignore reservations that may have been setup by the administrator.
+  HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM = (1<<0),
+ /**< \brief Detect the whole system, ignore reservations and offline settings.
+   * \hideinitializer
    *
    * Gather all resources, even if some were disabled by the administrator.
-   * For instance, ignore Linux Cpusets and gather all processors and memory nodes.
+   * For instance, ignore Linux Cpusets and gather all processors and memory nodes,
+   * and ignore the fact that some resources may be offline.
    */
-  HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM = (1<<0),
 
-  /* \brief Assume that the selected backend provides the topology for the
+  HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM = (1<<1)
+ /**< \brief Assume that the selected backend provides the topology for the
    * system on which we are running.
+   * \hideinitializer
    *
-   * This forces is_thissystem to 1, i.e. makes hwloc assume that the selected
-   * backend provides the topology for the system on which we are running, even
-   * if it is not the OS-specific backend but the XML backend for instance.
+   * This forces hwloc_topology_is_thissystem to return 1, i.e. makes hwloc assume that
+   * the selected backend provides the topology for the system on which we are running,
+   * even if it is not the OS-specific backend but the XML backend for instance.
    * This means making the binding functions actually call the OS-specific
    * system calls and really do binding, while the XML backend would otherwise
    * provide empty hooks just returning success.
@@ -310,21 +435,20 @@
    * save it to an XML file, and quickly reload it later through the XML
    * backend, but still having binding functions actually do bind.
    */
-  HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM = (1<<1),
 };
 
 /** \brief Set OR'ed flags to non-yet-loaded topology.
  *
  * Set a OR'ed set of hwloc_topology_flags_e onto a topology that was not yet loaded.
  */
-extern int hwloc_topology_set_flags (hwloc_topology_t topology, unsigned long flags);
+HWLOC_DECLSPEC int hwloc_topology_set_flags (hwloc_topology_t topology, unsigned long flags);
 
 /** \brief Change the file-system root path when building the topology from sysfs/procfs.
  *
  * On Linux system, use sysfs and procfs files as if they were mounted on the given
  * \p fsroot_path instead of the main file-system root. Setting the environment
  * variable HWLOC_FSROOT may also result in this behavior.
- * Not using the main file-system root causes hwloc_topology_is_thissystem field
+ * Not using the main file-system root causes hwloc_topology_is_thissystem()
  * to return 0.
  *
  * \note For conveniency, this backend provides empty binding hooks which just
@@ -332,20 +456,37 @@
  * HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM has to be set to assert that the loaded
  * file is really the underlying system.
  */
-extern int hwloc_topology_set_fsroot(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict fsroot_path);
+HWLOC_DECLSPEC int hwloc_topology_set_fsroot(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict fsroot_path);
 
+/** \brief Change which pid the topology is viewed from
+ *
+ * On some systems, processes may have different views of the machine, for
+ * instance the set of allowed CPUs. By default, hwloc exposes the view from
+ * the current process. Calling hwloc_topology_set_pid() permits to make it
+ * expose the topology of the machine from the point of view of another
+ * process.
+ *
+ * \note hwloc_pid_t is pid_t on unix platforms, and HANDLE on native Windows
+ * platforms
+ * \note The ENOSYS error is returned on platforms that does not support this
+ * feature.
+ */
+HWLOC_DECLSPEC int hwloc_topology_set_pid(hwloc_topology_t __hwloc_restrict topology, hwloc_pid_t pid);
+
 /** \brief Enable synthetic topology.
  *
  * Gather topology information from the given \p description
  * which should be a comma separated string of numbers describing
  * the arity of each level.
  * Each number may be prefixed with a type and a colon to enforce the type
- * of a level.
+ * of a level.  If only some level types are enforced, hwloc will try to
+ * choose the other types according to usual topologies, but it may fail
+ * and you may have to specify more level types manually.
  *
  * \note For conveniency, this backend provides empty binding hooks which just
  * return success.
  */
-extern int hwloc_topology_set_synthetic(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict description);
+HWLOC_DECLSPEC int hwloc_topology_set_synthetic(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict description);
 
 /** \brief Enable XML-file based topology.
  *
@@ -358,21 +499,97 @@
  * HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM has to be set to assert that the loaded
  * file is really the underlying system.
  */
-extern int hwloc_topology_set_xml(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict xmlpath);
+HWLOC_DECLSPEC int hwloc_topology_set_xml(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict xmlpath);
 
+/** \brief Flags describing actual discovery support for this topology. */
+struct hwloc_topology_discovery_support {
+  /** \brief Detecting the number of PU objects is supported. */
+  unsigned char pu;
+};
+
+/** \brief Flags describing actual binding support for this topology. */
+struct hwloc_topology_cpubind_support {
+  /** Binding the whole current process is supported.  */
+  unsigned char set_thisproc_cpubind;
+  /** Getting the binding of the whole current process is supported.  */
+  unsigned char get_thisproc_cpubind;
+  /** Binding a whole given process is supported.  */
+  unsigned char set_proc_cpubind;
+  /** Getting the binding of a whole given process is supported.  */
+  unsigned char get_proc_cpubind;
+  /** Binding the current thread only is supported.  */
+  unsigned char set_thisthread_cpubind;
+  /** Getting the binding of the current thread only is supported.  */
+  unsigned char get_thisthread_cpubind;
+  /** Binding a given thread only is supported.  */
+  unsigned char set_thread_cpubind;
+  /** Getting the binding of a given thread only is supported.  */
+  unsigned char get_thread_cpubind;
+};
+
+/** \brief Set of flags describing actual support for this topology.
+ *
+ * This is retrieved with hwloc_topology_get_support() and will be valid until
+ * the topology object is destroyed.  Note: the values are correct only after
+ * discovery.
+ */
+struct hwloc_topology_support {
+  struct hwloc_topology_discovery_support *discovery;
+  struct hwloc_topology_cpubind_support *cpubind;
+};
+
+/** \brief Retrieve the topology support. */
+HWLOC_DECLSPEC const struct hwloc_topology_support *hwloc_topology_get_support(hwloc_topology_t __hwloc_restrict topology);
+
 /** @} */
 
 
 
+/** \defgroup hwlocality_tinker Tinker with topologies.
+ * @{
+ */
+
+/** \brief Export the topology into an XML file.
+ *
+ * This file may be loaded later through hwloc_topology_set_xml().
+ */
+HWLOC_DECLSPEC void hwloc_topology_export_xml(hwloc_topology_t topology, const char *xmlpath);
+
+/** \brief Add a MISC object to the topology
+ *
+ * A new MISC object will be created and inserted into the topology at the
+ * position given by cpuset.
+ *
+ * cpuset and name will be copied.
+ *
+ * \return the newly-created object
+ */
+HWLOC_DECLSPEC hwloc_obj_t hwloc_topology_insert_misc_object_by_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, const char *name);
+
+/** \brief Add a MISC object to the topology
+ *
+ * A new MISC object will be created and inserted into the topology at the
+ * position given by parent.
+ *
+ * name will be copied.
+ *
+ * \return the newly-created object
+ */
+HWLOC_DECLSPEC hwloc_obj_t hwloc_topology_insert_misc_object_by_parent(hwloc_topology_t topology, hwloc_obj_t parent, const char *name);
+
+/** @} */
+
+
+
 /** \defgroup hwlocality_information Get some Topology Information
  * @{
  */
 
 /** \brief Get the depth of the hierachical tree of objects.
  *
- * This is the depth of HWLOC_OBJ_PROC objects plus one.
+ * This is the depth of HWLOC_OBJ_PU objects plus one.
  */
-extern unsigned hwloc_topology_get_depth(hwloc_topology_t  __hwloc_restrict topology);
+HWLOC_DECLSPEC unsigned hwloc_topology_get_depth(hwloc_topology_t __hwloc_restrict topology) __hwloc_attribute_pure;
 
 /** \brief Returns the depth of objects of type \p type.
  *
@@ -383,22 +600,28 @@
  * If type is absent but a similar type is acceptable, see also
  * hwloc_get_type_or_below_depth() and hwloc_get_type_or_above_depth().
  */
-extern int hwloc_get_type_depth (hwloc_topology_t topology, hwloc_obj_type_t type);
-#define HWLOC_TYPE_DEPTH_UNKNOWN -1 /**< \brief No object of given type exists in the topology. */
-#define HWLOC_TYPE_DEPTH_MULTIPLE -2 /**< \brief Objects of given type exist at different depth in the topology. */
+HWLOC_DECLSPEC int hwloc_get_type_depth (hwloc_topology_t topology, hwloc_obj_type_t type);
 
-/** \brief Returns the type of objects at depth \p depth. */
-extern hwloc_obj_type_t hwloc_get_depth_type (hwloc_topology_t topology, unsigned depth);
+enum hwloc_get_type_depth_e {
+    HWLOC_TYPE_DEPTH_UNKNOWN = -1, /**< \brief No object of given type exists in the topology. \hideinitializer */
+    HWLOC_TYPE_DEPTH_MULTIPLE = -2 /**< \brief Objects of given type exist at different depth in the topology. \hideinitializer */
+};
 
+/** \brief Returns the type of objects at depth \p depth.
+ *
+ * \return -1 if depth \p depth does not exist.
+ */
+HWLOC_DECLSPEC hwloc_obj_type_t hwloc_get_depth_type (hwloc_topology_t topology, unsigned depth) __hwloc_attribute_pure;
+
 /** \brief Returns the width of level at depth \p depth */
-extern unsigned hwloc_get_nbobjs_by_depth (hwloc_topology_t topology, unsigned depth);
+HWLOC_DECLSPEC unsigned hwloc_get_nbobjs_by_depth (hwloc_topology_t topology, unsigned depth) __hwloc_attribute_pure;
 
 /** \brief Returns the width of level type \p type
  *
  * If no object for that type exists, 0 is returned.
  * If there are several levels with objects of that type, -1 is returned.
  */
-static __inline int
+static __hwloc_inline int __hwloc_attribute_pure
 hwloc_get_nbobjs_by_type (hwloc_topology_t topology, hwloc_obj_type_t type)
 {
 	int depth = hwloc_get_type_depth(topology, type);
@@ -416,7 +639,7 @@
  * \return 0 instead (for instance if using another file-system root,
  * a XML topology file, or a synthetic topology).
  */
-extern int hwloc_topology_is_thissystem(hwloc_topology_t  __hwloc_restrict topology);
+HWLOC_DECLSPEC int hwloc_topology_is_thissystem(hwloc_topology_t  __hwloc_restrict topology) __hwloc_attribute_pure;
 
 /** @} */
 
@@ -427,7 +650,7 @@
  */
 
 /** \brief Returns the topology object at index \p index from depth \p depth */
-extern hwloc_obj_t hwloc_get_obj_by_depth (hwloc_topology_t topology, unsigned depth, unsigned idx);
+HWLOC_DECLSPEC hwloc_obj_t hwloc_get_obj_by_depth (hwloc_topology_t topology, unsigned depth, unsigned idx) __hwloc_attribute_pure;
 
 /** \brief Returns the topology object at index \p index with type \p type
  *
@@ -435,7 +658,7 @@
  * If there are several levels with objects of that type, \c NULL is returned
  * and ther caller may fallback to hwloc_get_obj_by_depth().
  */
-static __inline hwloc_obj_t
+static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
 hwloc_get_obj_by_type (hwloc_topology_t topology, hwloc_obj_type_t type, unsigned idx)
 {
   int depth = hwloc_get_type_depth(topology, type);
@@ -455,13 +678,41 @@
  */
 
 /** \brief Return a stringified topology object type */
-extern const char * hwloc_obj_type_string (hwloc_obj_type_t type);
+HWLOC_DECLSPEC const char * hwloc_obj_type_string (hwloc_obj_type_t type) __hwloc_attribute_const;
 
-/** \brief Return an object type from the string */
-extern hwloc_obj_type_t hwloc_obj_type_of_string (const char * string);
+/** \brief Return an object type from the string
+ *
+ * \return -1 if unrecognized.
+ */
+HWLOC_DECLSPEC hwloc_obj_type_t hwloc_obj_type_of_string (const char * string) __hwloc_attribute_pure;
 
+/** \brief Stringify the type of a given topology object into a human-readable form.
+ *
+ * It differs from hwloc_obj_type_string() because it prints type attributes such
+ * as cache depth.
+ *
+ * \return how many characters were actually written (not including the ending \\0).
+ */
+HWLOC_DECLSPEC int hwloc_obj_type_snprintf(char * __hwloc_restrict string, size_t size, hwloc_obj_t obj,
+				   int verbose);
+
+/** \brief Stringify the attributes of a given topology object into a human-readable form.
+ *
+ * Attribute values are separated by \p separator.
+ *
+ * Only the major attributes are printed in non-verbose mode.
+ *
+ * \return how many characters were actually written (not including the ending \\0).
+ */
+HWLOC_DECLSPEC int hwloc_obj_attr_snprintf(char * __hwloc_restrict string, size_t size, hwloc_obj_t obj, const char * __hwloc_restrict separator,
+				   int verbose);
+
 /** \brief Stringify a given topology object into a human-readable form.
  *
+ * \note This function is deprecated in favor of hwloc_obj_type_snprintf()
+ * and hwloc_obj_attr_snprintf() since it is not very flexible and
+ * only prints physical/OS indexes.
+ *
  * Fill string \p string up to \p size characters with the description
  * of topology object \p obj in topology \p topology.
  *
@@ -473,14 +724,14 @@
  *
  * \return how many characters were actually written (not including the ending \\0).
  */
-extern int hwloc_obj_snprintf(char * __hwloc_restrict string, size_t size,
+HWLOC_DECLSPEC int hwloc_obj_snprintf(char * __hwloc_restrict string, size_t size,
 			     hwloc_topology_t topology, hwloc_obj_t obj,
 			     const char * __hwloc_restrict indexprefix, int verbose);
 
 /** \brief Stringify the cpuset containing a set of objects.
  *
  * \return how many characters were actually written (not including the ending \\0). */
-extern int hwloc_obj_cpuset_snprintf(char * __hwloc_restrict str, size_t size, size_t nobj, const hwloc_obj_t * __hwloc_restrict objs);
+HWLOC_DECLSPEC int hwloc_obj_cpuset_snprintf(char * __hwloc_restrict str, size_t size, size_t nobj, const hwloc_obj_t * __hwloc_restrict objs);
 
 /** @} */
 
@@ -529,9 +780,12 @@
  */
 typedef enum {
   HWLOC_CPUBIND_PROCESS = (1<<0), /**< \brief Bind all threads of the current multithreaded process.
-                                   * This may not be supported by some OSes (e.g. Linux). */
-  HWLOC_CPUBIND_THREAD = (1<<1),  /**< \brief Bind current thread of current process */
-  HWLOC_CPUBIND_STRICT = (1<<2),  /**< \brief Request for strict binding from the OS
+                                   * This may not be supported by some OSes (e.g. Linux).
+                                   * \hideinitializer */
+  HWLOC_CPUBIND_THREAD = (1<<1),  /**< \brief Bind current thread of current process.
+                                   * \hideinitializer */
+  HWLOC_CPUBIND_STRICT = (1<<2)   /**< \brief Request for strict binding from the OS.
+                                   * \hideinitializer
                                    *
                                    * By default, when the designated CPUs are
                                    * all busy while other CPUs are idle, OSes
@@ -548,14 +802,30 @@
                                    * possible (implementation reason) or not
                                    * allowed (administrative reasons), and the
                                    * function will fail in that case.
+				   *
+				   * When retrieving the binding of a process,
+				   * this flag checks whether all its threads
+				   * actually have the same binding.
+				   * If the flag is not given, the binding of
+				   * each thread will be accumulated.
+				   *
+				   * \note This flag is meaningless when retrieving
+				   * the binding of a thread.
                                    */
 } hwloc_cpubind_policy_t;
 
 /** \brief Bind current process or thread on cpus given in cpuset \p set
+ *
+ * \return ENOSYS if the action is not supported
+ * \return EXDEV if the binding cannot be enforced
  */
-extern int hwloc_set_cpubind(hwloc_topology_t topology, const hwloc_cpuset_t set,
+HWLOC_DECLSPEC int hwloc_set_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t set,
 			    int policy);
 
+/** \brief Get current process or thread binding
+ */
+HWLOC_DECLSPEC int hwloc_get_cpubind(hwloc_topology_t topology, hwloc_cpuset_t set, int policy);
+
 /** \brief Bind a process \p pid on cpus given in cpuset \p set
  *
  * \note hwloc_pid_t is pid_t on unix platforms, and HANDLE on native Windows
@@ -563,8 +833,17 @@
  *
  * \note HWLOC_CPUBIND_THREAD can not be used in \p policy.
  */
-extern int hwloc_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, const hwloc_cpuset_t set, int policy);
+HWLOC_DECLSPEC int hwloc_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t set, int policy);
 
+/** \brief Get the current binding of process \p pid
+ *
+ * \note hwloc_pid_t is pid_t on unix platforms, and HANDLE on native Windows
+ * platforms
+ *
+ * \note HWLOC_CPUBIND_THREAD can not be used in \p policy.
+ */
+HWLOC_DECLSPEC int hwloc_get_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int policy);
+
 /** \brief Bind a thread \p tid on cpus given in cpuset \p set
  *
  * \note hwloc_thread_t is pthread_t on unix platforms, and HANDLE on native
@@ -573,9 +852,20 @@
  * \note HWLOC_CPUBIND_PROCESS can not be used in \p policy.
  */
 #ifdef hwloc_thread_t
-extern int hwloc_set_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t tid, const hwloc_cpuset_t set, int policy);
+HWLOC_DECLSPEC int hwloc_set_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t tid, hwloc_const_cpuset_t set, int policy);
 #endif
 
+/** \brief Get the current binding of thread \p tid
+ *
+ * \note hwloc_thread_t is pthread_t on unix platforms, and HANDLE on native
+ * Windows platforms
+ *
+ * \note HWLOC_CPUBIND_PROCESS can not be used in \p policy.
+ */
+#ifdef hwloc_thread_t
+HWLOC_DECLSPEC int hwloc_get_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t tid, hwloc_cpuset_t set, int policy);
+#endif
+
 /** @} */
 
 

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/private/cpuid.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/private/cpuid.h	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/private/cpuid.h	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,72 @@
+/*
+ * Copyright © 2010 CNRS, INRIA, Université Bordeaux 1
+ * Copyright © 2010 Cisco Systems, Inc.  All rights reserved.
+ *
+ * See COPYING in top-level directory.
+ */
+
+/* Internals for x86's cpuid.  */
+
+#ifndef HWLOC_PRIVATE_CPUID_H
+#define HWLOC_PRIVATE_CPUID_H
+
+#ifdef HWLOC_X86_32_ARCH
+static inline int hwloc_have_cpuid(void)
+{
+  int ret;
+  unsigned tmp, tmp2;
+  asm(
+      "mov $0,%0\n\t"   /* Not supported a priori */
+
+      "pushfl   \n\t"   /* Save flags */
+
+      "pushfl   \n\t"                                           \
+      "pop %1   \n\t"   /* Get flags */                         \
+
+#define TRY_TOGGLE                                              \
+      "xor $0x00200000,%1\n\t"        /* Try to toggle ID */    \
+      "mov %1,%2\n\t"   /* Save expected value */               \
+      "push %1  \n\t"                                           \
+      "popfl    \n\t"   /* Try to toggle */                     \
+      "pushfl   \n\t"                                           \
+      "pop %1   \n\t"                                           \
+      "cmp %1,%2\n\t"   /* Compare with expected value */       \
+      "jnz Lhwloc1\n\t"   /* Unexpected, failure */               \
+
+      TRY_TOGGLE        /* Try to set/clear */
+      TRY_TOGGLE        /* Try to clear/set */
+
+      "mov $1,%0\n\t"   /* Passed the test! */
+
+      "Lhwloc1: \n\t"
+      "popfl    \n\t"   /* Restore flags */
+
+      : "=r" (ret), "=&r" (tmp), "=&r" (tmp2));
+  return ret;
+}
+#endif /* HWLOC_X86_32_ARCH */
+#ifdef HWLOC_X86_64_ARCH
+static inline int hwloc_have_cpuid(void) { return 1; }
+#endif /* HWLOC_X86_64_ARCH */
+
+static inline void hwloc_cpuid(unsigned *eax, unsigned *ebx, unsigned *ecx, unsigned *edx)
+{
+  asm(
+#ifdef HWLOC_X86_32_ARCH 
+  "push %%ebx\n\t"
+#endif
+  "cpuid\n\t"
+#ifdef HWLOC_X86_32_ARCH 
+  "mov %%ebx,%1\n\t"
+  "pop %%ebx\n\t"
+#endif
+  : "+a" (*eax),
+#ifdef HWLOC_X86_32_ARCH 
+    "=r" (*ebx),
+#else
+    "=b" (*ebx),
+#endif
+    "+c" (*ecx), "=d" (*edx));
+}
+
+#endif /* HWLOC_PRIVATE_CPUID_H */

Deleted: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/private/cpuset.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/private/cpuset.h	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/private/cpuset.h	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,336 +0,0 @@
-/*
- * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
- * See COPYING in top-level directory.
- */
-
-/* Internals for cpuset API.  */
-
-#ifndef HWLOC_PRIVATE_CPUSET_H
-#define HWLOC_PRIVATE_CPUSET_H
-
-#include <hwloc/config.h>
-#include <private/config.h>
-
-#include <sys/types.h>
-#include <inttypes.h>
-#include <stdlib.h>
-#include <string.h>
-#include <strings.h>
-
-
-/**
- * Cpuset internals.
- */
-
-/* size and count of subsets within a set */
-#define HWLOC_CPUSUBSET_SIZE	HWLOC_BITS_PER_LONG
-#define HWLOC_CPUSUBSET_COUNT	((HWLOC_NBMAXCPUS+HWLOC_CPUSUBSET_SIZE-1)/HWLOC_CPUSUBSET_SIZE)
-
-/* magic number */
-#define HWLOC_CPUSET_MAGIC 0x20091007
-
-/* actual opaque type internals */
-struct hwloc_cpuset_s {
-	unsigned long s[HWLOC_CPUSUBSET_COUNT];
-#ifdef HWLOC_DEBUG
-	int magic;
-#endif
-};
-
-/* extract a subset from a set using an index or a cpu */
-#define HWLOC_CPUSUBSET_SUBSET(set,x)		((set).s[x])
-#define HWLOC_CPUSUBSET_INDEX(cpu)		((cpu)/(HWLOC_CPUSUBSET_SIZE))
-#define HWLOC_CPUSUBSET_CPUSUBSET(set,cpu)	HWLOC_CPUSUBSET_SUBSET(set,HWLOC_CPUSUBSET_INDEX(cpu))
-
-/* predefined subset values */
-#define HWLOC_CPUSUBSET_VAL(cpu)		(1UL<<((cpu)%(HWLOC_CPUSUBSET_SIZE)))
-#define HWLOC_CPUSUBSET_ZERO		0UL
-#define HWLOC_CPUSUBSET_FULL		~0UL
-
-/* Strings always use 32bit groups */
-#define HWLOC_PRIxCPUSUBSET		"%08lx"
-#define HWLOC_CPUSET_SUBSTRING_SIZE	32
-#define HWLOC_CPUSET_SUBSTRING_COUNT	((HWLOC_NBMAXCPUS+HWLOC_CPUSET_SUBSTRING_SIZE-1)/HWLOC_CPUSET_SUBSTRING_SIZE)
-#define HWLOC_CPUSET_SUBSTRING_LENGTH	(HWLOC_CPUSET_SUBSTRING_SIZE/4)
-
-
-/**
- * ffsl helpers.
- */
-
-#ifdef __GNUC__
-
-#  if (__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4))
-     /* Starting from 3.4, gcc has a long variant.  */
-#    define hwloc_ffsl(x) __builtin_ffsl(x)
-#  else
-#    define hwloc_ffs(x) __builtin_ffs(x)
-#    define HWLOC_NEED_FFSL
-#  endif
-
-#elif defined(HWLOC_HAVE_FFSL)
-
-#  ifndef HWLOC_HAVE_DECL_FFSL
-extern int ffsl(long);
-#  endif
-
-#  define hwloc_ffsl(x) ffsl(x)
-
-#elif defined(HWLOC_HAVE_FFS)
-
-#  ifndef HWLOC_HAVE_DECL_FFS
-extern int ffs(int);
-#  endif
-
-#  define hwloc_ffs(x) ffs(x)
-#  define HWLOC_NEED_FFSL
-
-#else /* no ffs implementation */
-
-static __inline int hwloc_ffsl(unsigned long x)
-{
-	int i;
-
-	if (!x)
-		return 0;
-
-	i = 1;
-#if HWLOC_BITS_PER_LONG >= 64
-	if (!(x & 0xfffffffful)) {
-		x >>= 32;
-		i += 32;
-	}
-#endif
-	if (!(x & 0xffffu)) {
-		x >>= 16;
-		i += 16;
-	}
-	if (!(x & 0xff)) {
-		x >>= 8;
-		i += 8;
-	}
-	if (!(x & 0xf)) {
-		x >>= 4;
-		i += 4;
-	}
-	if (!(x & 0x3)) {
-		x >>= 2;
-		i += 2;
-	}
-	if (!(x & 0x1)) {
-		x >>= 1;
-		i += 1;
-	}
-
-	return i;
-}
-
-#endif
-
-#ifdef HWLOC_NEED_FFSL
-
-/* We only have an int ffs(int) implementation, build a long one.  */
-
-/* First make it 32 bits if it was only 16.  */
-static __inline int hwloc_ffs32(unsigned long x)
-{
-#if HWLOC_BITS_PER_INT == 16
-	int low_ffs, hi_ffs;
-
-	low_ffs = hwloc_ffs(x & 0xfffful);
-	if (low_ffs)
-		return low_ffs;
-
-	hi_ffs = hwloc_ffs(x >> 16);
-	if (hi_ffs)
-		return hi_ffs + 16;
-
-	return 0;
-#else
-	return hwloc_ffs(x);
-#endif
-}
-
-/* Then make it 64 bit if longs are.  */
-static __inline int hwloc_ffsl(unsigned long x)
-{
-#if HWLOC_BITS_PER_LONG == 64
-	int low_ffs, hi_ffs;
-
-	low_ffs = hwloc_ffs32(x & 0xfffffffful);
-	if (low_ffs)
-		return low_ffs;
-
-	hi_ffs = hwloc_ffs32(x >> 32);
-	if (hi_ffs)
-		return hi_ffs + 32;
-
-	return 0;
-#else
-	return hwloc_ffs32(x);
-#endif
-}
-#endif
-
-/**
- * flsl helpers.
- */
-#ifdef __GNUC_____
-
-#  if (__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4))
-#    define hwloc_flsl(x) (x ? 8*sizeof(long) - __builtin_clzl(x) : 0)
-#  else
-#    define hwloc_fls(x) (x ? 8*sizeof(int) - __builtin_clz(x) : 0)
-#    define HWLOC_NEED_FLSL
-#  endif
-
-#elif defined(HWLOC_HAVE_FLSL)
-
-#  ifndef HWLOC_HAVE_DECL_FLSL
-extern int flsl(long);
-#  endif
-
-#  define hwloc_flsl(x) flsl(x)
-
-#elif defined(HWLOC_HAVE_CLZL)
-
-#  ifndef HWLOC_HAVE_DECL_CLZL
-extern int clzl(long);
-#  endif
-
-#  define hwloc_flsl(x) (x ? 8*sizeof(long) - clzl(x) : 0)
-
-#elif defined(HWLOC_HAVE_FLS)
-
-#  ifndef HWLOC_HAVE_DECL_FLS
-extern int fls(int);
-#  endif
-
-#  define hwloc_fls(x) fls(x)
-#  define HWLOC_NEED_FLSL
-
-#elif defined(HWLOC_HAVE_CLZ)
-
-#  ifndef HWLOC_HAVE_DECL_CLZ
-extern int clz(int);
-#  endif
-
-#  define hwloc_fls(x) (x ? 8*sizeof(int) - clz(x) : 0)
-#  define HWLOC_NEED_FLSL
-
-#else /* no fls implementation */
-
-static __inline int hwloc_flsl(unsigned long x)
-{
-	int i = 0;
-
-	if (!x)
-		return 0;
-
-	i = 1;
-#if HWLOC_BITS_PER_LONG >= 64
-	if ((x & 0xffffffff00000000ul)) {
-		x >>= 32;
-		i += 32;
-	}
-#endif
-	if ((x & 0xffff0000u)) {
-		x >>= 16;
-		i += 16;
-	}
-	if ((x & 0xff00)) {
-		x >>= 8;
-		i += 8;
-	}
-	if ((x & 0xf0)) {
-		x >>= 4;
-		i += 4;
-	}
-	if ((x & 0xc)) {
-		x >>= 2;
-		i += 2;
-	}
-	if ((x & 0x2)) {
-		x >>= 1;
-		i += 1;
-	}
-
-	return i;
-}
-
-#endif
-
-#ifdef HWLOC_NEED_FLSL
-
-/* We only have an int fls(int) implementation, build a long one.  */
-
-/* First make it 32 bits if it was only 16.  */
-static __inline int hwloc_fls32(unsigned long x)
-{
-#if HWLOC_BITS_PER_INT == 16
-	int low_fls, hi_fls;
-
-	hi_fls = hwloc_fls(x >> 16);
-	if (hi_fls)
-		return hi_fls + 16;
-
-	low_fls = hwloc_fls(x & 0xfffful);
-	if (low_fls)
-		return low_fls;
-
-	return 0;
-#else
-	return hwloc_fls(x);
-#endif
-}
-
-/* Then make it 64 bit if longs are.  */
-static __inline int hwloc_flsl(unsigned long x)
-{
-#if HWLOC_BITS_PER_LONG == 64
-	int low_fls, hi_fls;
-
-	hi_fls = hwloc_fls32(x >> 32);
-	if (hi_fls)
-		return hi_fls + 32;
-
-	low_fls = hwloc_fls32(x & 0xfffffffful);
-	if (low_fls)
-		return low_fls;
-
-	return 0;
-#else
-	return hwloc_fls32(x);
-#endif
-}
-#endif
-
-static __inline int hwloc_weight_long(unsigned long w)
-{
-#if HWLOC_BITS_PER_LONG == 32
-#if (__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__) >= 4)
-	return __builtin_popcount(w);
-#else
-	unsigned int res = (w & 0x55555555) + ((w >> 1) & 0x55555555);
-	res = (res & 0x33333333) + ((res >> 2) & 0x33333333);
-	res = (res & 0x0F0F0F0F) + ((res >> 4) & 0x0F0F0F0F);
-	res = (res & 0x00FF00FF) + ((res >> 8) & 0x00FF00FF);
-	return (res & 0x0000FFFF) + ((res >> 16) & 0x0000FFFF);
-#endif
-#else /* HWLOC_BITS_PER_LONG == 32 */
-#if (__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__) >= 4)
-	return __builtin_popcountll(w);
-#else
-	unsigned long res;
-	res = (w & 0x5555555555555555ul) + ((w >> 1) & 0x5555555555555555ul);
-	res = (res & 0x3333333333333333ul) + ((res >> 2) & 0x3333333333333333ul);
-	res = (res & 0x0F0F0F0F0F0F0F0Ful) + ((res >> 4) & 0x0F0F0F0F0F0F0F0Ful);
-	res = (res & 0x00FF00FF00FF00FFul) + ((res >> 8) & 0x00FF00FF00FF00FFul);
-	res = (res & 0x0000FFFF0000FFFFul) + ((res >> 16) & 0x0000FFFF0000FFFFul);
-	return (res & 0x00000000FFFFFFFFul) + ((res >> 32) & 0x00000000FFFFFFFFul);
-#endif
-#endif /* HWLOC_BITS_PER_LONG == 64 */
-}
-
-
-#endif /* HWLOC_PRIVATE_CPUSET_H */

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/private/debug.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/private/debug.h	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/private/debug.h	2010-05-11 01:47:13 UTC (rev 6632)
@@ -14,17 +14,17 @@
 #define hwloc_debug(s, ...) fprintf(stderr, s, ##__VA_ARGS__)
 #define hwloc_debug_cpuset(fmt, cpuset) do { \
   char *s= hwloc_cpuset_printf_value(cpuset); \
-  fprintf(stderr, s, cpuset); \
+  fprintf(stderr, fmt, s); \
   free(s); \
 } while (0)
 #define hwloc_debug_1arg_cpuset(fmt, arg1, cpuset) do { \
   char *s= hwloc_cpuset_printf_value(cpuset); \
-  fprintf(stderr, s, arg1, cpuset); \
+  fprintf(stderr, fmt, arg1, s); \
   free(s); \
 } while (0)
 #define hwloc_debug_2args_cpuset(fmt, arg1, arg2, cpuset) do { \
   char *s= hwloc_cpuset_printf_value(cpuset); \
-  fprintf(stderr, s, arg1, arg2, cpuset); \
+  fprintf(stderr, fmt, arg1, arg2, s); \
   free(s); \
 } while (0)
 #else

Copied: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/private/misc.h (from rev 6631, mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/private/cpuset.h)
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/private/misc.h	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/private/misc.h	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,315 @@
+/*
+ * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
+ * See COPYING in top-level directory.
+ */
+
+/* Misc internals routines.  */
+
+#ifndef HWLOC_PRIVATE_MISC_H
+#define HWLOC_PRIVATE_MISC_H
+
+#include <hwloc/config.h>
+#include <private/config.h>
+#include <private/private.h>
+
+
+/* On some systems, snprintf returns the size of written data, not the actually
+ * required size.  hwloc_snprintf always report the actually required size. */
+int hwloc_snprintf(char *str, size_t size, const char *format, ...) __hwloc_attribute_format(printf, 3, 4);
+
+/* Check whether needle matches the beginning of haystack, at least n, and up
+ * to a colon or \0 */
+HWLOC_DECLSPEC
+int hwloc_namecoloncmp(const char *haystack, const char *needle, size_t n);
+
+/* Compile-time assertion */
+#define HWLOC_BUILD_ASSERT(condition) ((void)sizeof(char[1 - 2*!(condition)]))
+
+
+/**
+ * ffsl helpers.
+ */
+
+#ifdef __GNUC__
+
+#  if (__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4))
+     /* Starting from 3.4, gcc has a long variant.  */
+#    define hwloc_ffsl(x) __builtin_ffsl(x)
+#  else
+#    define hwloc_ffs(x) __builtin_ffs(x)
+#    define HWLOC_NEED_FFSL
+#  endif
+
+#elif defined(HWLOC_HAVE_FFSL)
+
+#  ifndef HWLOC_HAVE_DECL_FFSL
+extern int ffsl(long) __hwloc_attribute_const;
+#  endif
+
+#  define hwloc_ffsl(x) ffsl(x)
+
+#elif defined(HWLOC_HAVE_FFS)
+
+#  ifndef HWLOC_HAVE_DECL_FFS
+extern int ffs(int) __hwloc_attribute_const;
+#  endif
+
+#  define hwloc_ffs(x) ffs(x)
+#  define HWLOC_NEED_FFSL
+
+#else /* no ffs implementation */
+
+static inline int __hwloc_attribute_const
+hwloc_ffsl(unsigned long x)
+{
+	int i;
+
+	if (!x)
+		return 0;
+
+	i = 1;
+#if HWLOC_BITS_PER_LONG >= 64
+	if (!(x & 0xfffffffful)) {
+		x >>= 32;
+		i += 32;
+	}
+#endif
+	if (!(x & 0xffffu)) {
+		x >>= 16;
+		i += 16;
+	}
+	if (!(x & 0xff)) {
+		x >>= 8;
+		i += 8;
+	}
+	if (!(x & 0xf)) {
+		x >>= 4;
+		i += 4;
+	}
+	if (!(x & 0x3)) {
+		x >>= 2;
+		i += 2;
+	}
+	if (!(x & 0x1)) {
+		x >>= 1;
+		i += 1;
+	}
+
+	return i;
+}
+
+#endif
+
+#ifdef HWLOC_NEED_FFSL
+
+/* We only have an int ffs(int) implementation, build a long one.  */
+
+/* First make it 32 bits if it was only 16.  */
+static inline int __hwloc_attribute_const
+hwloc_ffs32(unsigned long x)
+{
+#if HWLOC_BITS_PER_INT == 16
+	int low_ffs, hi_ffs;
+
+	low_ffs = hwloc_ffs(x & 0xfffful);
+	if (low_ffs)
+		return low_ffs;
+
+	hi_ffs = hwloc_ffs(x >> 16);
+	if (hi_ffs)
+		return hi_ffs + 16;
+
+	return 0;
+#else
+	return hwloc_ffs(x);
+#endif
+}
+
+/* Then make it 64 bit if longs are.  */
+static inline int __hwloc_attribute_const
+hwloc_ffsl(unsigned long x)
+{
+#if HWLOC_BITS_PER_LONG == 64
+	int low_ffs, hi_ffs;
+
+	low_ffs = hwloc_ffs32(x & 0xfffffffful);
+	if (low_ffs)
+		return low_ffs;
+
+	hi_ffs = hwloc_ffs32(x >> 32);
+	if (hi_ffs)
+		return hi_ffs + 32;
+
+	return 0;
+#else
+	return hwloc_ffs32(x);
+#endif
+}
+#endif
+
+/**
+ * flsl helpers.
+ */
+#ifdef __GNUC_____
+
+#  if (__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4))
+#    define hwloc_flsl(x) (x ? 8*sizeof(long) - __builtin_clzl(x) : 0)
+#  else
+#    define hwloc_fls(x) (x ? 8*sizeof(int) - __builtin_clz(x) : 0)
+#    define HWLOC_NEED_FLSL
+#  endif
+
+#elif defined(HWLOC_HAVE_FLSL)
+
+#  ifndef HWLOC_HAVE_DECL_FLSL
+extern int flsl(long) __hwloc_attribute_const;
+#  endif
+
+#  define hwloc_flsl(x) flsl(x)
+
+#elif defined(HWLOC_HAVE_CLZL)
+
+#  ifndef HWLOC_HAVE_DECL_CLZL
+extern int clzl(long) __hwloc_attribute_const;
+#  endif
+
+#  define hwloc_flsl(x) (x ? 8*sizeof(long) - clzl(x) : 0)
+
+#elif defined(HWLOC_HAVE_FLS)
+
+#  ifndef HWLOC_HAVE_DECL_FLS
+extern int fls(int) __hwloc_attribute_const;
+#  endif
+
+#  define hwloc_fls(x) fls(x)
+#  define HWLOC_NEED_FLSL
+
+#elif defined(HWLOC_HAVE_CLZ)
+
+#  ifndef HWLOC_HAVE_DECL_CLZ
+extern int clz(int) __hwloc_attribute_const;
+#  endif
+
+#  define hwloc_fls(x) (x ? 8*sizeof(int) - clz(x) : 0)
+#  define HWLOC_NEED_FLSL
+
+#else /* no fls implementation */
+
+static inline int __hwloc_attribute_const
+hwloc_flsl(unsigned long x)
+{
+	int i = 0;
+
+	if (!x)
+		return 0;
+
+	i = 1;
+#if HWLOC_BITS_PER_LONG >= 64
+	if ((x & 0xffffffff00000000ul)) {
+		x >>= 32;
+		i += 32;
+	}
+#endif
+	if ((x & 0xffff0000u)) {
+		x >>= 16;
+		i += 16;
+	}
+	if ((x & 0xff00)) {
+		x >>= 8;
+		i += 8;
+	}
+	if ((x & 0xf0)) {
+		x >>= 4;
+		i += 4;
+	}
+	if ((x & 0xc)) {
+		x >>= 2;
+		i += 2;
+	}
+	if ((x & 0x2)) {
+		x >>= 1;
+		i += 1;
+	}
+
+	return i;
+}
+
+#endif
+
+#ifdef HWLOC_NEED_FLSL
+
+/* We only have an int fls(int) implementation, build a long one.  */
+
+/* First make it 32 bits if it was only 16.  */
+static inline int __hwloc_attribute_const
+hwloc_fls32(unsigned long x)
+{
+#if HWLOC_BITS_PER_INT == 16
+	int low_fls, hi_fls;
+
+	hi_fls = hwloc_fls(x >> 16);
+	if (hi_fls)
+		return hi_fls + 16;
+
+	low_fls = hwloc_fls(x & 0xfffful);
+	if (low_fls)
+		return low_fls;
+
+	return 0;
+#else
+	return hwloc_fls(x);
+#endif
+}
+
+/* Then make it 64 bit if longs are.  */
+static inline int __hwloc_attribute_const
+hwloc_flsl(unsigned long x)
+{
+#if HWLOC_BITS_PER_LONG == 64
+	int low_fls, hi_fls;
+
+	hi_fls = hwloc_fls32(x >> 32);
+	if (hi_fls)
+		return hi_fls + 32;
+
+	low_fls = hwloc_fls32(x & 0xfffffffful);
+	if (low_fls)
+		return low_fls;
+
+	return 0;
+#else
+	return hwloc_fls32(x);
+#endif
+}
+#endif
+
+static inline int __hwloc_attribute_const
+hwloc_weight_long(unsigned long w)
+{
+#if HWLOC_BITS_PER_LONG == 32
+#if (__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__) >= 4)
+	return __builtin_popcount(w);
+#else
+	unsigned int res = (w & 0x55555555) + ((w >> 1) & 0x55555555);
+	res = (res & 0x33333333) + ((res >> 2) & 0x33333333);
+	res = (res & 0x0F0F0F0F) + ((res >> 4) & 0x0F0F0F0F);
+	res = (res & 0x00FF00FF) + ((res >> 8) & 0x00FF00FF);
+	return (res & 0x0000FFFF) + ((res >> 16) & 0x0000FFFF);
+#endif
+#else /* HWLOC_BITS_PER_LONG == 32 */
+#if (__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__) >= 4)
+	return __builtin_popcountll(w);
+#else
+	unsigned long res;
+	res = (w & 0x5555555555555555ul) + ((w >> 1) & 0x5555555555555555ul);
+	res = (res & 0x3333333333333333ul) + ((res >> 2) & 0x3333333333333333ul);
+	res = (res & 0x0F0F0F0F0F0F0F0Ful) + ((res >> 4) & 0x0F0F0F0F0F0F0F0Ful);
+	res = (res & 0x00FF00FF00FF00FFul) + ((res >> 8) & 0x00FF00FF00FF00FFul);
+	res = (res & 0x0000FFFF0000FFFFul) + ((res >> 16) & 0x0000FFFF0000FFFFul);
+	return (res & 0x00000000FFFFFFFFul) + ((res >> 32) & 0x00000000FFFFFFFFul);
+#endif
+#endif /* HWLOC_BITS_PER_LONG == 64 */
+}
+
+
+#endif /* HWLOC_PRIVATE_MISC_H */

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/private/private.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/private/private.h	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/include/private/private.h	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,6 +1,7 @@
 /*
- * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
- * Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
+ * Copyright © 2009      CNRS, INRIA, Université Bordeaux 1
+ * Copyright © 2009-2010 Cisco Systems, Inc.  All rights reserved.
+ *
  * See COPYING in top-level directory.
  */
 
@@ -14,13 +15,22 @@
 #include <hwloc/cpuset.h>
 #include <private/debug.h>
 
-#include <assert.h>
 #include <string.h>
 
+#ifdef HWLOC_HAVE_ATTRIBUTE_FORMAT
+# if HWLOC_HAVE_ATTRIBUTE_FORMAT
+#  define __hwloc_attribute_format(type, str, arg)  __attribute__((__format__(type, str, arg)))
+# else
+#  define __hwloc_attribute_format(type, str, arg)
+# endif
+#else
+# define __hwloc_attribute_format(type, str, arg)
+#endif
+
 enum hwloc_ignore_type_e {
   HWLOC_IGNORE_TYPE_NEVER = 0,
   HWLOC_IGNORE_TYPE_KEEP_STRUCTURE,
-  HWLOC_IGNORE_TYPE_ALWAYS,
+  HWLOC_IGNORE_TYPE_ALWAYS
 };
 
 /* Maximal value of an object type */
@@ -30,12 +40,15 @@
 typedef enum hwloc_backend_e {
   HWLOC_BACKEND_NONE,
   HWLOC_BACKEND_SYNTHETIC,
-#ifdef LINUX_SYS
+#ifdef HWLOC_LINUX_SYS
   HWLOC_BACKEND_SYSFS,
 #endif
-#ifdef HAVE_XML
+#ifdef HWLOC_HAVE_XML
   HWLOC_BACKEND_XML,
 #endif
+  /* This value is only here so that we can end the enum list without
+     a comma (thereby preventing compiler warnings) */
+  HWLOC_BACKEND_MAX
 } hwloc_backend_t;
 
 struct hwloc_topology {
@@ -47,34 +60,40 @@
   enum hwloc_ignore_type_e ignored_types[HWLOC_OBJ_TYPE_MAX];
   int is_thissystem;
   int is_loaded;
+  hwloc_pid_t pid;                                      /* Process ID the topology is view from, 0 for self */
 
-  int (*set_cpubind)(hwloc_topology_t topology, hwloc_cpuset_t set, int strict);
-  int (*set_thisproc_cpubind)(hwloc_topology_t topology, hwloc_cpuset_t set, int strict);
-  int (*set_thisthread_cpubind)(hwloc_topology_t topology, hwloc_cpuset_t set, int strict);
-  int (*set_proc_cpubind)(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int strict);
+  int (*set_thisproc_cpubind)(hwloc_topology_t topology, hwloc_const_cpuset_t set, int policy);
+  int (*get_thisproc_cpubind)(hwloc_topology_t topology, hwloc_cpuset_t set, int policy);
+  int (*set_thisthread_cpubind)(hwloc_topology_t topology, hwloc_const_cpuset_t set, int policy);
+  int (*get_thisthread_cpubind)(hwloc_topology_t topology, hwloc_cpuset_t set, int policy);
+  int (*set_proc_cpubind)(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t set, int policy);
+  int (*get_proc_cpubind)(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int policy);
 #ifdef hwloc_thread_t
-  int (*set_thread_cpubind)(hwloc_topology_t topology, hwloc_thread_t tid, hwloc_cpuset_t set, int strict);
+  int (*set_thread_cpubind)(hwloc_topology_t topology, hwloc_thread_t tid, hwloc_const_cpuset_t set, int policy);
+  int (*get_thread_cpubind)(hwloc_topology_t topology, hwloc_thread_t tid, hwloc_cpuset_t set, int policy);
 #endif
 
+  struct hwloc_topology_support support;
+
   hwloc_backend_t backend_type;
   union hwloc_backend_params_u {
-#ifdef LINUX_SYS
+#ifdef HWLOC_LINUX_SYS
     struct hwloc_backend_params_sysfs_s {
       /* sysfs backend parameters */
       int root_fd; /* The file descriptor for the file system root, used when browsing, e.g., Linux' sysfs and procfs. */
     } sysfs;
-#endif /* LINUX_SYS */
-#if defined(OSF_SYS) || defined(HWLOC_COMPILE_PORTS)
+#endif /* HWLOC_LINUX_SYS */
+#if defined(HWLOC_OSF_SYS) || defined(HWLOC_COMPILE_PORTS)
     struct hwloc_backend_params_osf {
       int nbnodes;
     } osf;
-#endif /* OSF_SYS */
-#ifdef HAVE_XML
+#endif /* HWLOC_OSF_SYS */
+#ifdef HWLOC_HAVE_XML
     struct hwloc_backend_params_xml_s {
       /* xml backend parameters */
       void *doc;
     } xml;
-#endif /* HAVE_XML */
+#endif /* HWLOC_HAVE_XML */
     struct hwloc_backend_params_synthetic_s {
       /* synthetic backend parameters */
 #define HWLOC_SYNTHETIC_MAX_DEPTH 128
@@ -87,83 +106,120 @@
 };
 
 
-extern void hwloc_setup_proc_level(struct hwloc_topology *topology, unsigned nb_processors, hwloc_cpuset_t online_cpuset);
+extern void hwloc_setup_pu_level(struct hwloc_topology *topology, unsigned nb_pus);
 extern void hwloc_setup_misc_level_from_distances(struct hwloc_topology *topology, unsigned nbobjs, struct hwloc_obj **objs, unsigned *_distances/*[nbnobjs][nbobjs]*/);
-extern unsigned hwloc_fallback_nbprocessors(void);
+extern int hwloc_get_sysctlbyname(const char *name, int *n);
+extern int hwloc_get_sysctl(int name[], unsigned namelen, int *n);
+extern unsigned hwloc_fallback_nbprocessors(struct hwloc_topology *topology);
 
-#if defined(LINUX_SYS)
+#if defined(HWLOC_LINUX_SYS)
 extern void hwloc_look_linux(struct hwloc_topology *topology);
 extern void hwloc_set_linux_hooks(struct hwloc_topology *topology);
 extern int hwloc_backend_sysfs_init(struct hwloc_topology *topology, const char *fsroot_path);
 extern void hwloc_backend_sysfs_exit(struct hwloc_topology *topology);
-#endif /* LINUX_SYS */
+#endif /* HWLOC_LINUX_SYS */
 
-#ifdef HAVE_XML
+#ifdef HWLOC_HAVE_XML
 extern int hwloc_backend_xml_init(struct hwloc_topology *topology, const char *xmlpath);
 extern void hwloc_look_xml(struct hwloc_topology *topology);
 extern void hwloc_backend_xml_exit(struct hwloc_topology *topology);
-#endif /* HAVE_XML */
+#endif /* HWLOC_HAVE_XML */
 
-#ifdef SOLARIS_SYS
+#ifdef HWLOC_SOLARIS_SYS
 extern void hwloc_look_solaris(struct hwloc_topology *topology);
 extern void hwloc_set_solaris_hooks(struct hwloc_topology *topology);
-#endif /* SOLARIS_SYS */
+#endif /* HWLOC_SOLARIS_SYS */
 
-#ifdef AIX_SYS
+#ifdef HWLOC_AIX_SYS
 extern void hwloc_look_aix(struct hwloc_topology *topology);
 extern void hwloc_set_aix_hooks(struct hwloc_topology *topology);
-#endif /* AIX_SYS */
+#endif /* HWLOC_AIX_SYS */
 
-#ifdef OSF_SYS
+#ifdef HWLOC_OSF_SYS
 extern void hwloc_look_osf(struct hwloc_topology *topology);
 extern void hwloc_set_osf_hooks(struct hwloc_topology *topology);
-#endif /* OSF_SYS */
+#endif /* HWLOC_OSF_SYS */
 
-#ifdef WIN_SYS
+#ifdef HWLOC_WIN_SYS
 extern void hwloc_look_windows(struct hwloc_topology *topology);
 extern void hwloc_set_windows_hooks(struct hwloc_topology *topology);
-#endif /* WIN_SYS */
+#endif /* HWLOC_WIN_SYS */
 
-#ifdef DARWIN_SYS
+#ifdef HWLOC_DARWIN_SYS
 extern void hwloc_look_darwin(struct hwloc_topology *topology);
 extern void hwloc_set_darwin_hooks(struct hwloc_topology *topology);
-#endif /* DARWIN_SYS */
+#endif /* HWLOC_DARWIN_SYS */
 
-#ifdef HPUX_SYS
+#ifdef HWLOC_FREEBSD_SYS
+extern void hwloc_look_freebsd(struct hwloc_topology *topology);
+extern void hwloc_set_freebsd_hooks(struct hwloc_topology *topology);
+#endif /* HWLOC_FREEBSD_SYS */
+
+#ifdef HWLOC_HPUX_SYS
 extern void hwloc_look_hpux(struct hwloc_topology *topology);
 extern void hwloc_set_hpux_hooks(struct hwloc_topology *topology);
-#endif /* HPUX_SYS */
+#endif /* HWLOC_HPUX_SYS */
 
+extern void hwloc_look_x86(struct hwloc_topology *topology, unsigned nbprocs);
+
 extern int hwloc_backend_synthetic_init(struct hwloc_topology *topology, const char *description);
 extern void hwloc_backend_synthetic_exit(struct hwloc_topology *topology);
 extern void hwloc_look_synthetic (struct hwloc_topology *topology);
 
-extern void hwloc_add_object(struct hwloc_topology *topology, hwloc_obj_t obj);
+/*
+ * Add an object to the topology.
+ * It is sorted along the tree of other objects according to the inclusion of
+ * cpusets, to eventually be added as a child of the smallest object including
+ * this object.
+ *
+ * If the cpuset is empty, the type of the object (and maybe some attributes)
+ * must be enough to find where to insert the object. This is especially true
+ * for NUMA nodes with memory and no CPUs.
+ *
+ * The given object should not have children.
+ *
+ * This shall only be called before levels are built.
+ */
+extern void hwloc_insert_object_by_cpuset(struct hwloc_topology *topology, hwloc_obj_t obj);
 
+/*
+ * Insert an object somewhere in the topology.
+ *
+ * It is added as the last child of the given parent.
+ * The cpuset is completely ignored, so strange objects such as I/O devices should
+ * preferably be inserted with this.
+ *
+ * The given object may have children.
+ *
+ * Remember to call topology_connect() afterwards to fix handy pointers.
+ */
+extern void hwloc_insert_object_by_parent(struct hwloc_topology *topology, hwloc_obj_t parent, hwloc_obj_t obj);
 
 /** \brief Return a locally-allocated stringified cpuset for printf-like calls. */
-static __inline char *
-hwloc_cpuset_printf_value(hwloc_cpuset_t cpuset)
+static inline char *
+hwloc_cpuset_printf_value(hwloc_const_cpuset_t cpuset)
 {
   char *buf;
   hwloc_cpuset_asprintf(&buf, cpuset);
   return buf;
 }
 
-static __inline struct hwloc_obj *
+static inline struct hwloc_obj *
 hwloc_alloc_setup_object(hwloc_obj_type_t type, signed idx)
 {
   struct hwloc_obj *obj = malloc(sizeof(*obj));
-  assert(obj);
   memset(obj, 0, sizeof(*obj));
   obj->type = type;
   obj->os_index = idx;
   obj->os_level = -1;
   obj->attr = malloc(sizeof(*obj->attr));
+  memset(obj->attr, 0, sizeof(*obj->attr));
   /* do not allocate the cpuset here, let the caller do it */
   return obj;
 }
 
+extern void free_object(hwloc_obj_t obj);
+
 #define hwloc_object_cpuset_from_array(l, _value, _array, _max) do {	\
 		struct hwloc_obj *__l = (l);				\
 		unsigned int *__a = (_array);				\
@@ -177,11 +233,11 @@
 /* Configures an array of NUM objects of type TYPE with physical IDs OSPHYSIDS
  * and for which processors have ID PROC_PHYSIDS, and add them to the topology.
  * */
-static __inline void
+static inline void
 hwloc_setup_level(int procid_max, unsigned num, unsigned *osphysids, unsigned *proc_physids, struct hwloc_topology *topology, hwloc_obj_type_t type)
 {
   struct hwloc_obj *obj;
-  int j;
+  unsigned j;
 
   hwloc_debug("%d %s\n", num, hwloc_obj_type_string(type));
 
@@ -192,13 +248,9 @@
       hwloc_debug_2args_cpuset("%s %d has cpuset %s\n",
 		 hwloc_obj_type_string(type),
 		 j, obj->cpuset);
-      hwloc_add_object(topology, obj);
+      hwloc_insert_object_by_cpuset(topology, obj);
     }
-  hwloc_debug("\n");
+  hwloc_debug("%s", "\n");
 }
 
-/* On some systems, snprintf returns the size of written data, not the actually
- * required size.  hwloc_snprintf always report the actually required size. */
-int hwloc_snprintf(char *str, size_t size, const char *format, ...);
-
 #endif /* HWLOC_PRIVATE_H */

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/Makefile.am
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/Makefile.am	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/Makefile.am	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,88 +1,113 @@
-# Copyright 2009 INRIA, Université Bordeaux 1
+# Copyright © 2009      INRIA, Université Bordeaux 1
+# Copyright © 2009-2010 Cisco Systems, Inc.  All rights reserved.
 
-include $(top_srcdir)/hwloc.am
+AM_CFLAGS = $(HWLOC_CFLAGS)
+AM_CPPFLAGS = $(HWLOC_CPPFLAGS)
+AM_LDFLAGS = $(HWLOC_LDFLAGS)
 
-AM_CFLAGS += $(XML_CFLAGS)
+EXTRA_DIST = dolib.c
 
+# If we're in standalone mode, build the installable library.
+# Otherwise, build the embedded library.
+
+if HWLOC_BUILD_STANDALONE
 lib_LTLIBRARIES = libhwloc.la
+else
+noinst_LTLIBRARIES = libhwloc_embedded.la
+endif
 
-EXTRA_DIST = dolib.c
+# Sources and ldflags
 
-libhwloc_la_SOURCES = topology.c traversal.c topology-synthetic.c bind.c cpuset.c
-libhwloc_la_LDFLAGS = -version-number $(libhwloc_so_version) $(XML_LIBS)
+sources = \
+        topology.c \
+        traversal.c \
+        topology-synthetic.c \
+        bind.c \
+        cpuset.c \
+        misc.c
+ldflags =
 
-if HAVE_GCC
-libhwloc_la_LDFLAGS += -no-undefined
-endif
+# Conditionally add to the sources and ldflags
 
-if HAVE_WINDOWS
-libhwloc_la_LDFLAGS += -Xlinker --output-def -Xlinker .libs/libhwloc.def
+if HWLOC_HAVE_XML
+sources += topology-xml.c
+endif HWLOC_HAVE_XML
 
-if HAVE_MS_LIB
+if HWLOC_HAVE_SOLARIS
+sources += topology-solaris.c
+endif HWLOC_HAVE_SOLARIS
+
+if HWLOC_HAVE_LINUX
+sources += topology-linux.c
+endif HWLOC_HAVE_LINUX
+
+if HWLOC_HAVE_AIX
+sources += topology-aix.c
+ldflags += -lpthread
+endif HWLOC_HAVE_AIX
+
+if HWLOC_HAVE_OSF
+sources += topology-osf.c
+ldflags += -lnuma -lpthread
+endif HWLOC_HAVE_OSF
+
+if HWLOC_HAVE_HPUX
+sources += topology-hpux.c
+ldflags += -lpthread
+endif HWLOC_HAVE_HPUX
+
+if HWLOC_HAVE_WINDOWS
+sources += topology-windows.c
+endif HWLOC_HAVE_WINDOWS
+
+if HWLOC_HAVE_DARWIN
+sources += topology-darwin.c
+endif HWLOC_HAVE_DARWIN
+
+if HWLOC_HAVE_FREEBSD
+sources += topology-freebsd.c
+endif HWLOC_HAVE_FREEBSD
+
+if HWLOC_HAVE_GCC
+ldflags += -no-undefined
+endif HWLOC_HAVE_GCC
+
+if HWLOC_HAVE_WINDOWS
+ldflags += -Xlinker --output-def -Xlinker .libs/libhwloc.def
+
+if HWLOC_HAVE_MS_LIB
 .libs/libhwloc.lib: libhwloc.la dolib
 	./dolib "$(HWLOC_MS_LIB)" X86 .libs/libhwloc.def libhwloc-$(HWLOC_SOVERSION) .libs/libhwloc.lib
 all-local: .libs/libhwloc.lib
-endif
+endif HWLOC_HAVE_MS_LIB
 
 install-exec-hook:
 	$(INSTALL) .libs/libhwloc.def $(DESTDIR)$(libdir)
-if HAVE_MS_LIB
+if HWLOC_HAVE_MS_LIB
 	$(INSTALL) .libs/libhwloc.lib $(DESTDIR)$(libdir)
 	$(INSTALL) .libs/libhwloc.exp $(DESTDIR)$(libdir)
-endif
-endif
+endif HWLOC_HAVE_MS_LIB
+endif HWLOC_HAVE_WINDOWS
 
-if HAVE_XML
-libhwloc_la_SOURCES += topology-xml.c
-else !HAVE_XML
-EXTRA_DIST += topology-xml.c
-endif !HAVE_XML
+if HWLOC_HAVE_CPUID
+sources += topology-x86.c
+endif HWLOC_HAVE_CPUID
 
-if HAVE_SOLARIS
-libhwloc_la_SOURCES += topology-solaris.c
-else !HAVE_SOLARIS
-EXTRA_DIST += topology-solaris.c
-endif !HAVE_SOLARIS
+# Installable library
 
-if HAVE_LINUX
-libhwloc_la_SOURCES += topology-linux.c
-else !HAVE_LINUX
-EXTRA_DIST += topology-linux.c
-endif !HAVE_LINUX
+libhwloc_la_SOURCES = $(sources)
+libhwloc_la_LDFLAGS = $(ldflags) -version-number $(libhwloc_so_version) $(HWLOC_XML_LIBS)
 
-if HAVE_AIX
-libhwloc_la_SOURCES += topology-aix.c
-libhwloc_la_LDFLAGS += -lpthread
-else !HAVE_AIX
-EXTRA_DIST += topology-aix.c
-endif !HAVE_AIX
+# Embedded library (note the lack of a .so version number -- that
+# intentionally only appears in the installable library)
 
-if HAVE_OSF
-libhwloc_la_SOURCES += topology-osf.c
-libhwloc_la_LDFLAGS += -lnuma -lpthread
-else !HAVE_OSF
-EXTRA_DIST += topology-osf.c
-endif !HAVE_OSF
+libhwloc_embedded_la_SOURCES = $(sources)
+libhwloc_embedded_la_LDFLAGS = $(ldflags) $(HWLOC_XML_LIBS)
 
-if HAVE_HPUX
-libhwloc_la_SOURCES += topology-hpux.c
-libhwloc_la_LDFLAGS += -lpthread
-else !HAVE_HPUX
-EXTRA_DIST += topology-hpux.c
-endif !HAVE_HPUX
+# XML data (only install if we're building in standalone mode)
 
-if HAVE_WINDOWS
-libhwloc_la_SOURCES += topology-windows.c
-else !HAVE_WINDOWS
-EXTRA_DIST += topology-windows.c
-endif !HAVE_WINDOWS
-
-if HAVE_DARWIN
-libhwloc_la_SOURCES += topology-darwin.c
-else !HAVE_DARWIN
-EXTRA_DIST += topology-darwin.c
-endif !HAVE_DARWIN
-
+if HWLOC_BUILD_STANDALONE
 xml_DATA = $(srcdir)/hwloc.dtd
 xmldir = $(pkgdatadir)
 EXTRA_DIST += hwloc.dtd
+endif

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/bind.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/bind.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/bind.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -10,32 +10,55 @@
 
 #include <errno.h>
 
-/* TODO: GNU_SYS, FREEBSD_SYS, DARWIN_SYS, IRIX_SYS, HPUX_SYS
- * IRIX: see _DSM_MUSTRUN */
+/* TODO: HWLOC_GNU_SYS, HWLOC_IRIX_SYS,
+ * IRIX: see _DSM_MUSTRUN
+ *
+ * We could use glibc's sched_setaffinity generically when it is available
+ *
+ * Darwin and OpenBSD don't seem to have binding facilities.
+ */
 
-int
-hwloc_set_cpubind(hwloc_topology_t topology, hwloc_cpuset_t set, int policy)
+static hwloc_const_cpuset_t
+hwloc_fix_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t set)
 {
-  int strict = !!(policy & HWLOC_CPUBIND_STRICT);
-  hwloc_cpuset_t system_set = hwloc_get_system_obj(topology)->cpuset;
+  hwloc_const_cpuset_t topology_set = hwloc_topology_get_topology_cpuset(topology);
+  hwloc_const_cpuset_t complete_set = hwloc_topology_get_complete_cpuset(topology);
 
-  if (hwloc_cpuset_isfull(set))
-    set = system_set;
+  if (!topology_set) {
+    /* The topology is composed of several systems, the cpuset is ambiguous. */
+    errno = EXDEV;
+    return NULL;
+  }
 
-  if (!hwloc_cpuset_isincluded(set, system_set)) {
+  if (!hwloc_cpuset_isincluded(set, complete_set)) {
     errno = EINVAL;
-    return -1;
+    return NULL;
   }
 
+  if (hwloc_cpuset_isincluded(topology_set, set))
+    set = complete_set;
+
+  return set;
+}
+
+int
+hwloc_set_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t set, int policy)
+{
+  set = hwloc_fix_cpubind(topology, set);
+  if (!set)
+    return -1;
+
   if (policy & HWLOC_CPUBIND_PROCESS) {
     if (topology->set_thisproc_cpubind)
-      return topology->set_thisproc_cpubind(topology, set, strict);
+      return topology->set_thisproc_cpubind(topology, set, policy);
   } else if (policy & HWLOC_CPUBIND_THREAD) {
     if (topology->set_thisthread_cpubind)
-      return topology->set_thisthread_cpubind(topology, set, strict);
+      return topology->set_thisthread_cpubind(topology, set, policy);
   } else {
-    if (topology->set_cpubind)
-      return topology->set_cpubind(topology, set, strict);
+    if (topology->set_thisproc_cpubind)
+      return topology->set_thisproc_cpubind(topology, set, policy);
+    else if (topology->set_thisthread_cpubind)
+      return topology->set_thisthread_cpubind(topology, set, policy);
   }
 
   errno = ENOSYS;
@@ -43,47 +66,73 @@
 }
 
 int
-hwloc_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int policy)
+hwloc_get_cpubind(hwloc_topology_t topology, hwloc_cpuset_t set, int policy)
 {
-  int strict = !!(policy & HWLOC_CPUBIND_STRICT);
-  hwloc_cpuset_t system_set = hwloc_get_system_obj(topology)->cpuset;
+  if (policy & HWLOC_CPUBIND_PROCESS) {
+    if (topology->get_thisproc_cpubind)
+      return topology->get_thisproc_cpubind(topology, set, policy);
+  } else if (policy & HWLOC_CPUBIND_THREAD) {
+    if (topology->get_thisthread_cpubind)
+      return topology->get_thisthread_cpubind(topology, set, policy);
+  } else {
+    if (topology->get_thisproc_cpubind)
+      return topology->get_thisproc_cpubind(topology, set, policy);
+    else if (topology->get_thisthread_cpubind)
+      return topology->get_thisthread_cpubind(topology, set, policy);
+  }
 
-  if (hwloc_cpuset_isfull(set))
-    set = hwloc_get_system_obj(topology)->cpuset;
+  errno = ENOSYS;
+  return -1;
+}
 
-  if (!hwloc_cpuset_isincluded(set, system_set)) {
-    errno = EINVAL;
+int
+hwloc_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t set, int policy)
+{
+  set = hwloc_fix_cpubind(topology, set);
+  if (!set)
     return -1;
-  }
 
   if (topology->set_proc_cpubind)
-    return topology->set_proc_cpubind(topology, pid, set, strict);
+    return topology->set_proc_cpubind(topology, pid, set, policy);
 
   errno = ENOSYS;
   return -1;
 }
 
-#ifdef hwloc_thread_t
 int
-hwloc_set_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t tid, hwloc_cpuset_t set, int policy)
+hwloc_get_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int policy)
 {
-  int strict = !!(policy & HWLOC_CPUBIND_STRICT);
-  hwloc_cpuset_t system_set = hwloc_get_system_obj(topology)->cpuset;
+  if (topology->get_proc_cpubind)
+    return topology->get_proc_cpubind(topology, pid, set, policy);
 
-  if (hwloc_cpuset_isfull(set))
-    set = hwloc_get_system_obj(topology)->cpuset;
+  errno = ENOSYS;
+  return -1;
+}
 
-  if (!hwloc_cpuset_isincluded(set, system_set)) {
-    errno = EINVAL;
+#ifdef hwloc_thread_t
+int
+hwloc_set_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t tid, hwloc_const_cpuset_t set, int policy)
+{
+  set = hwloc_fix_cpubind(topology, set);
+  if (!set)
     return -1;
-  }
 
   if (topology->set_thread_cpubind)
-    return topology->set_thread_cpubind(topology, tid, set, strict);
+    return topology->set_thread_cpubind(topology, tid, set, policy);
 
   errno = ENOSYS;
   return -1;
 }
+
+int
+hwloc_get_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t tid, hwloc_cpuset_t set, int policy)
+{
+  if (topology->get_thread_cpubind)
+    return topology->get_thread_cpubind(topology, tid, set, policy);
+
+  errno = ENOSYS;
+  return -1;
+}
 #endif
 
 /* TODO: memory bind */

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/cpuset.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/cpuset.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/cpuset.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -5,7 +5,7 @@
  */
 
 #include <private/config.h>
-#include <private/cpuset.h>
+#include <private/misc.h>
 #include <private/private.h>
 #include <hwloc/cpuset.h>
 
@@ -13,8 +13,23 @@
 #include <stdio.h>
 #include <assert.h>
 #include <errno.h>
+#include <ctype.h>
 
+/* size and count of subsets within a set */
+#define HWLOC_CPUSUBSET_SIZE	HWLOC_BITS_PER_LONG
+#define HWLOC_CPUSUBSET_COUNT	((HWLOC_NBMAXCPUS+HWLOC_CPUSUBSET_SIZE-1)/HWLOC_CPUSUBSET_SIZE)
 
+/* magic number */
+#define HWLOC_CPUSET_MAGIC 0x20091007
+
+/* actual opaque type internals */
+struct hwloc_cpuset_s {
+	unsigned long s[HWLOC_CPUSUBSET_COUNT];
+#ifdef HWLOC_DEBUG
+	int magic;
+#endif
+};
+
 /* overzealous check in debug-mode, not as powerful as valgrind but still useful */
 #ifdef HWLOC_DEBUG
 #define HWLOC__CPUSET_CHECK(set) assert((set)->magic == HWLOC_CPUSET_MAGIC)
@@ -22,55 +37,40 @@
 #define HWLOC__CPUSET_CHECK(set)
 #endif
 
-int hwloc_snprintf(char *str, size_t size, const char *format, ...)
-{
-  int ret;
-  va_list ap;
-  static char bin;
+/* extract a subset from a set using an index or a cpu */
+#define HWLOC_CPUSUBSET_SUBSET(set,x)		((set).s[x])
+#define HWLOC_CPUSUBSET_INDEX(cpu)		((cpu)/(HWLOC_CPUSUBSET_SIZE))
+#define HWLOC_CPUSUBSET_CPUSUBSET(set,cpu)	HWLOC_CPUSUBSET_SUBSET(set,HWLOC_CPUSUBSET_INDEX(cpu))
 
-  /* Some systems crash on str == NULL */
-  if (!size) {
-    str = &bin;
-    size = 1;
-  }
+/* predefined subset values */
+#define HWLOC_CPUSUBSET_VAL(cpu)		(1UL<<((cpu)%(HWLOC_CPUSUBSET_SIZE)))
+#define HWLOC_CPUSUBSET_ZERO		0UL
+#define HWLOC_CPUSUBSET_FULL		~0UL
 
-  va_start(ap, format);
-  ret = vsnprintf(str, size, format, ap);
-  va_end(ap);
+/* Strings always use 32bit groups */
+#define HWLOC_PRIxCPUSUBSET		"%08lx"
+#define HWLOC_CPUSET_SUBSTRING_SIZE	32
+#define HWLOC_CPUSET_SUBSTRING_COUNT	((HWLOC_NBMAXCPUS+HWLOC_CPUSET_SUBSTRING_SIZE-1)/HWLOC_CPUSET_SUBSTRING_SIZE)
+#define HWLOC_CPUSET_SUBSTRING_LENGTH	(HWLOC_CPUSET_SUBSTRING_SIZE/4)
 
-  if (ret >= 0 && ret != size-1)
-    return ret;
-
-  /* vsnprintf returned size-1 or -1. That could be a system which reports the
-   * written data and not the actually required room. Try increasing buffer
-   * size to get the latter. */
-
-  do {
-    size *= 2;
-    str = malloc(size);
-    va_start(ap, format);
-    errno = 0;
-    ret = vsnprintf(str, size, format, ap);
-    va_end(ap);
-    free(str);
-  } while (ret == size-1 || (ret < 0 && !errno));
-
-  return ret;
-}
-
 struct hwloc_cpuset_s * hwloc_cpuset_alloc(void)
 {
   struct hwloc_cpuset_s * set;
   set = calloc(sizeof(*set), 1);
+  if (!set)
+    return NULL;
+
 #ifdef HWLOC_DEBUG
-  if (set)
-    set->magic = HWLOC_CPUSET_MAGIC;
+  set->magic = HWLOC_CPUSET_MAGIC;
 #endif
   return set;
 }
 
 void hwloc_cpuset_free(struct hwloc_cpuset_s * set)
 {
+  if (!set)
+    return;
+
   HWLOC__CPUSET_CHECK(set);
 #ifdef HWLOC_DEBUG
   set->magic = 0;
@@ -79,23 +79,21 @@
   free(set);
 }
 
-struct hwloc_cpuset_s * hwloc_cpuset_dup(struct hwloc_cpuset_s * old)
+struct hwloc_cpuset_s * hwloc_cpuset_dup(const struct hwloc_cpuset_s * old)
 {
   struct hwloc_cpuset_s * new;
 
   HWLOC__CPUSET_CHECK(old);
 
   new = malloc(sizeof(*new));
-  if (new) {
-#ifdef HWLOC_DEBUG
-    new->magic = HWLOC_CPUSET_MAGIC;
-#endif
-    memcpy(new, old, sizeof(*new));
-  }
+  if (!new)
+    return NULL;
+
+  memcpy(new, old, sizeof(*new));
   return new;
 }
 
-void hwloc_cpuset_copy(struct hwloc_cpuset_s * dst, struct hwloc_cpuset_s * src)
+void hwloc_cpuset_copy(struct hwloc_cpuset_s * dst, const struct hwloc_cpuset_s * src)
 {
   HWLOC__CPUSET_CHECK(dst);
   HWLOC__CPUSET_CHECK(src);
@@ -134,12 +132,12 @@
 
     if (accum & accum_mask) {
       /* print the whole subset if not empty */
-      res = hwloc_snprintf(tmp, size, needcomma ? "," HWLOC_PRIxCPUSUBSET : HWLOC_PRIxCPUSUBSET,
+        res = hwloc_snprintf(tmp, size, needcomma ? ",0x" HWLOC_PRIxCPUSUBSET : "0x" HWLOC_PRIxCPUSUBSET,
 		     (accum & accum_mask) >> (HWLOC_BITS_PER_LONG - HWLOC_CPUSET_SUBSTRING_SIZE));
       needcomma = 1;
     } else if (i == -1 && accumed == HWLOC_CPUSET_SUBSTRING_SIZE) {
       /* print a single 0 to mark the last subset */
-      res = hwloc_snprintf(tmp, size, needcomma ? ",0" : "0");
+      res = hwloc_snprintf(tmp, size, needcomma ? ",0x0" : "0x0");
     } else if (needcomma) {
       res = hwloc_snprintf(tmp, size, ",");
     } else {
@@ -180,17 +178,14 @@
   return hwloc_cpuset_snprintf(buf, len+1, set);
 }
 
-struct hwloc_cpuset_s * hwloc_cpuset_from_string(const char * __hwloc_restrict string)
+int hwloc_cpuset_from_string(struct hwloc_cpuset_s *set, const char * __hwloc_restrict string)
 {
-  struct hwloc_cpuset_s * set;
-  char * current = (char *) string;
+  const char * current = string;
   int count=0, i;
   unsigned long accum = 0;
   int accumed = 0;
 
-  set = hwloc_cpuset_alloc();
-  if (!set)
-    return NULL;
+  hwloc_cpuset_zero(set);
 
   while (*current != '\0') {
     unsigned long val;
@@ -211,7 +206,7 @@
     }
     if (*next != ',')
       break;
-    current = next+1;
+    current = (const char*) next+1;
     if (count == HWLOC_CPUSUBSET_COUNT)
       break;
   }
@@ -229,7 +224,7 @@
   for( ; i<HWLOC_CPUSUBSET_COUNT; i++)
     set->s[i] = 0;
 
-  return set;
+  return 0;
 }
 
 void hwloc_cpuset_zero(struct hwloc_cpuset_s * set)
@@ -263,9 +258,9 @@
 		HWLOC_CPUSUBSET_SUBSET(*set,i) = HWLOC_CPUSUBSET_ZERO;
 }
 
-void hwloc_cpuset_from_ith_ulong(struct hwloc_cpuset_s *set, int i, unsigned long mask)
+void hwloc_cpuset_from_ith_ulong(struct hwloc_cpuset_s *set, unsigned i, unsigned long mask)
 {
-	int j;
+	unsigned j;
 
 	HWLOC__CPUSET_CHECK(set);
 
@@ -282,7 +277,7 @@
 	return HWLOC_CPUSUBSET_SUBSET(*set,0);
 }
 
-unsigned long hwloc_cpuset_to_ith_ulong(const struct hwloc_cpuset_s *set, int i)
+unsigned long hwloc_cpuset_to_ith_ulong(const struct hwloc_cpuset_s *set, unsigned i)
 {
 	HWLOC__CPUSET_CHECK(set);
 
@@ -314,7 +309,7 @@
 
 void hwloc_cpuset_set_range(struct hwloc_cpuset_s * set, unsigned begincpu, unsigned endcpu)
 {
-	int i;
+	unsigned i;
 
 	HWLOC__CPUSET_CHECK(set);
 
@@ -329,6 +324,16 @@
 	HWLOC_CPUSUBSET_CPUSUBSET(*set,cpu) &= ~HWLOC_CPUSUBSET_VAL(cpu);
 }
 
+void hwloc_cpuset_clr_range(struct hwloc_cpuset_s * set, unsigned begincpu, unsigned endcpu)
+{
+	unsigned i;
+
+	HWLOC__CPUSET_CHECK(set);
+
+	for (i=begincpu; i<=endcpu; i++)
+		HWLOC_CPUSUBSET_CPUSUBSET(*set,i) &= ~HWLOC_CPUSUBSET_VAL(i);
+}
+
 int hwloc_cpuset_isset(const struct hwloc_cpuset_s * set, unsigned cpu)
 {
 	HWLOC__CPUSET_CHECK(set);
@@ -399,48 +404,63 @@
 	return 1;
 }
 
-void hwloc_cpuset_orset (struct hwloc_cpuset_s *set, const struct hwloc_cpuset_s *modifier_set)
+void hwloc_cpuset_or (struct hwloc_cpuset_s *res, const struct hwloc_cpuset_s *set1, const struct hwloc_cpuset_s *set2)
 {
 	int i;
 
-	HWLOC__CPUSET_CHECK(set);
-	HWLOC__CPUSET_CHECK(modifier_set);
+	HWLOC__CPUSET_CHECK(res);
+	HWLOC__CPUSET_CHECK(set1);
+	HWLOC__CPUSET_CHECK(set2);
 
 	for(i=0; i<HWLOC_CPUSUBSET_COUNT; i++)
-		HWLOC_CPUSUBSET_SUBSET(*set,i) |= HWLOC_CPUSUBSET_SUBSET(*modifier_set,i);
+		HWLOC_CPUSUBSET_SUBSET(*res,i) = HWLOC_CPUSUBSET_SUBSET(*set1,i) | HWLOC_CPUSUBSET_SUBSET(*set2,i);
 }
 
-void hwloc_cpuset_andset (struct hwloc_cpuset_s *set, const struct hwloc_cpuset_s *modifier_set)
+void hwloc_cpuset_and (struct hwloc_cpuset_s *res, const struct hwloc_cpuset_s *set1, const struct hwloc_cpuset_s *set2)
 {
 	int i;
 
-	HWLOC__CPUSET_CHECK(set);
-	HWLOC__CPUSET_CHECK(modifier_set);
+	HWLOC__CPUSET_CHECK(res);
+	HWLOC__CPUSET_CHECK(set1);
+	HWLOC__CPUSET_CHECK(set2);
 
 	for(i=0; i<HWLOC_CPUSUBSET_COUNT; i++)
-		HWLOC_CPUSUBSET_SUBSET(*set,i) &= HWLOC_CPUSUBSET_SUBSET(*modifier_set,i);
+		HWLOC_CPUSUBSET_SUBSET(*res,i) = HWLOC_CPUSUBSET_SUBSET(*set1,i) & HWLOC_CPUSUBSET_SUBSET(*set2,i);
 }
 
-void hwloc_cpuset_clearset (struct hwloc_cpuset_s *set, const struct hwloc_cpuset_s *modifier_set)
+void hwloc_cpuset_andnot (struct hwloc_cpuset_s *res, const struct hwloc_cpuset_s *set1, const struct hwloc_cpuset_s *set2)
 {
 	int i;
 
-	HWLOC__CPUSET_CHECK(set);
-	HWLOC__CPUSET_CHECK(modifier_set);
+	HWLOC__CPUSET_CHECK(res);
+	HWLOC__CPUSET_CHECK(set1);
+	HWLOC__CPUSET_CHECK(set2);
 
 	for(i=0; i<HWLOC_CPUSUBSET_COUNT; i++)
-		HWLOC_CPUSUBSET_SUBSET(*set,i) &= ~HWLOC_CPUSUBSET_SUBSET(*modifier_set,i);
+		HWLOC_CPUSUBSET_SUBSET(*res,i) = HWLOC_CPUSUBSET_SUBSET(*set1,i) & ~HWLOC_CPUSUBSET_SUBSET(*set2,i);
 }
 
-void hwloc_cpuset_xorset (struct hwloc_cpuset_s *set, const struct hwloc_cpuset_s *modifier_set)
+void hwloc_cpuset_xor (struct hwloc_cpuset_s *res, const struct hwloc_cpuset_s *set1, const struct hwloc_cpuset_s *set2)
 {
 	int i;
 
+	HWLOC__CPUSET_CHECK(res);
+	HWLOC__CPUSET_CHECK(set1);
+	HWLOC__CPUSET_CHECK(set2);
+
+	for(i=0; i<HWLOC_CPUSUBSET_COUNT; i++)
+		HWLOC_CPUSUBSET_SUBSET(*res,i) = HWLOC_CPUSUBSET_SUBSET(*set1,i) ^ HWLOC_CPUSUBSET_SUBSET(*set2,i);
+}
+
+void hwloc_cpuset_not (struct hwloc_cpuset_s *res, const struct hwloc_cpuset_s *set)
+{
+	int i;
+
+	HWLOC__CPUSET_CHECK(res);
 	HWLOC__CPUSET_CHECK(set);
-	HWLOC__CPUSET_CHECK(modifier_set);
 
 	for(i=0; i<HWLOC_CPUSUBSET_COUNT; i++)
-		HWLOC_CPUSUBSET_SUBSET(*set,i) ^= HWLOC_CPUSUBSET_SUBSET(*modifier_set,i);
+		HWLOC_CPUSUBSET_SUBSET(*res,i) = ~HWLOC_CPUSUBSET_SUBSET(*set,i);
 }
 
 int hwloc_cpuset_first(const struct hwloc_cpuset_s * set)
@@ -451,9 +471,9 @@
 
 	for(i=0; i<HWLOC_CPUSUBSET_COUNT; i++) {
 		/* subsets are unsigned longs, use ffsl */
-		int _ffs = hwloc_ffsl(HWLOC_CPUSUBSET_SUBSET(*set,i));
-		if (_ffs>0)
-			return _ffs - 1 + HWLOC_CPUSUBSET_SIZE*i;
+		unsigned long w = HWLOC_CPUSUBSET_SUBSET(*set,i);
+		if (w)
+			return hwloc_ffsl(w) - 1 + HWLOC_CPUSUBSET_SIZE*i;
 	}
 
 	return -1;
@@ -467,14 +487,36 @@
 
 	for(i=HWLOC_CPUSUBSET_COUNT-1; i>=0; i--) {
 		/* subsets are unsigned longs, use flsl */
-		int _fls = hwloc_flsl(HWLOC_CPUSUBSET_SUBSET(*set,i));
-		if (_fls>0)
-			return _fls - 1 + HWLOC_CPUSUBSET_SIZE*i;
+		unsigned long w = HWLOC_CPUSUBSET_SUBSET(*set,i);
+		if (w)
+			return hwloc_flsl(w) - 1 + HWLOC_CPUSUBSET_SIZE*i;
 	}
 
 	return -1;
 }
 
+int hwloc_cpuset_next(const struct hwloc_cpuset_s * set, unsigned prev_cpu)
+{
+	unsigned i = HWLOC_CPUSUBSET_INDEX(prev_cpu + 1);
+
+	HWLOC__CPUSET_CHECK(set);
+
+	for(; i<HWLOC_CPUSUBSET_COUNT; i++) {
+		/* subsets are unsigned longs, use ffsl */
+		unsigned long w = HWLOC_CPUSUBSET_SUBSET(*set,i);
+
+		/* if the prev cpu is in the same word as the possible next one,
+		   we need to mask out previous cpus */
+		if (HWLOC_CPUSUBSET_INDEX(prev_cpu) == i)
+			w &= ~((HWLOC_CPUSUBSET_VAL(prev_cpu) << 1) - 1);
+
+		if (w)
+			return hwloc_ffsl(w) - 1 + HWLOC_CPUSUBSET_SIZE*i;
+	}
+
+	return -1;
+}
+
 void hwloc_cpuset_singlify(struct hwloc_cpuset_s * set)
 {
 	int i,found = 0;
@@ -487,8 +529,9 @@
 			continue;
 		} else {
 			/* subsets are unsigned longs, use ffsl */
-			int _ffs = hwloc_ffsl(HWLOC_CPUSUBSET_SUBSET(*set,i));
-			if (_ffs>0) {
+			unsigned long w = HWLOC_CPUSUBSET_SUBSET(*set,i);
+			if (w) {
+				int _ffs = hwloc_ffsl(w);
 				HWLOC_CPUSUBSET_SUBSET(*set,i) = HWLOC_CPUSUBSET_VAL(_ffs-1);
 				found = 1;
 			}
@@ -496,7 +539,7 @@
 	}
 }
 
-int hwloc_cpuset_compar_first(const struct hwloc_cpuset_s * set1, const struct hwloc_cpuset_s * set2)
+int hwloc_cpuset_compare_first(const struct hwloc_cpuset_s * set1, const struct hwloc_cpuset_s * set2)
 {
 	int i;
 
@@ -504,20 +547,22 @@
 	HWLOC__CPUSET_CHECK(set2);
 
 	for(i=0; i<HWLOC_CPUSUBSET_COUNT; i++) {
-		int _ffs1 = hwloc_ffsl(HWLOC_CPUSUBSET_SUBSET(*set1,i));
-		int _ffs2 = hwloc_ffsl(HWLOC_CPUSUBSET_SUBSET(*set2,i));
-		if (!_ffs1 && !_ffs2)
-			continue;
-		/* if both have a bit set, compar for real */
-		if (_ffs1 && _ffs2)
-			return _ffs1-_ffs2;
-		/* one is empty, and it is considered higher, so reverse-compar them */
-		return _ffs2-_ffs1;
+		unsigned long w1 = HWLOC_CPUSUBSET_SUBSET(*set1,i);
+		unsigned long w2 = HWLOC_CPUSUBSET_SUBSET(*set2,i);
+		if (w1 || w2) {
+			int _ffs1 = hwloc_ffsl(HWLOC_CPUSUBSET_SUBSET(*set1,i));
+			int _ffs2 = hwloc_ffsl(HWLOC_CPUSUBSET_SUBSET(*set2,i));
+			/* if both have a bit set, compare for real */
+			if (_ffs1 && _ffs2)
+				return _ffs1-_ffs2;
+			/* one is empty, and it is considered higher, so reverse-compare them */
+			return _ffs2-_ffs1;
+		}
 	}
 	return 0;
 }
 
-int hwloc_cpuset_compar(const struct hwloc_cpuset_s * set1, const struct hwloc_cpuset_s * set2)
+int hwloc_cpuset_compare(const struct hwloc_cpuset_s * set1, const struct hwloc_cpuset_s * set2)
 {
 	int i;
 

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/hwloc.dtd
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/hwloc.dtd	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/hwloc.dtd	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,12 +1,26 @@
+<!ELEMENT topology (object)+>
 <!ELEMENT root (object)+>
 
-<!ELEMENT object (object)*>
-<!ATTLIST object type (System | Machine | Misc | NUMANode | Socket| Cache | Core | Proc) #REQUIRED>
+<!ELEMENT object (page_type*,object*)>
+<!ATTLIST object type (System | Machine | Misc | Group | NUMANode | Socket| Cache | Core | PU) #REQUIRED>
+<!ATTLIST object os_level CDATA "-1" >
 <!ATTLIST object os_index CDATA "-1" >
-<!ATTLIST object cpuset CDATA "0" >
+<!ATTLIST object name CDATA "" >
 <!ATTLIST object dmi_board_vendor CDATA "" >
 <!ATTLIST object dmi_board_name CDATA "" >
-<!ATTLIST object memory_kB CDATA "0" >
+<!ATTLIST object local_memory CDATA "0" >
+<!ATTLIST object cache_size CDATA "0" >
 <!ATTLIST object huge_page_size_kB CDATA "0" >
 <!ATTLIST object huge_page_free CDATA "0" >
 <!ATTLIST object depth CDATA "-1" >
+<!ATTLIST object cpuset CDATA "0" >
+<!ATTLIST object complete_cpuset CDATA "" >
+<!ATTLIST object online_cpuset CDATA "" >
+<!ATTLIST object allowed_cpuset CDATA "" >
+<!ATTLIST object nodeset CDATA "" >
+<!ATTLIST object complete_nodeset CDATA "" >
+<!ATTLIST object allowed_nodeset CDATA "" >
+
+<!ELEMENT page_type EMPTY>
+<!ATTLIST page_type size CDATA #REQUIRED>
+<!ATTLIST page_type count CDATA #REQUIRED>

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/misc.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/misc.c	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/misc.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,65 @@
+/*
+ * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
+ * Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <private/config.h>
+#include <private/misc.h>
+
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <ctype.h>
+
+int hwloc_snprintf(char *str, size_t size, const char *format, ...)
+{
+  int ret;
+  va_list ap;
+  static char bin;
+
+  /* Some systems crash on str == NULL */
+  if (!size) {
+    str = &bin;
+    size = 1;
+  }
+
+  va_start(ap, format);
+  ret = vsnprintf(str, size, format, ap);
+  va_end(ap);
+
+  if (ret >= 0 && (size_t) ret != size-1)
+    return ret;
+
+  /* vsnprintf returned size-1 or -1. That could be a system which reports the
+   * written data and not the actually required room. Try increasing buffer
+   * size to get the latter. */
+
+  do {
+    size *= 2;
+    str = malloc(size);
+    va_start(ap, format);
+    errno = 0;
+    ret = vsnprintf(str, size, format, ap);
+    va_end(ap);
+    free(str);
+  } while ((size_t) ret == size-1 || (ret < 0 && !errno));
+
+  return ret;
+}
+
+int hwloc_namecoloncmp(const char *haystack, const char *needle, size_t n)
+{
+  size_t i = 0;
+  while (*haystack && *haystack != ':') {
+    int ha = *haystack++;
+    int low_h = tolower(ha);
+    int ne = *needle++;
+    int low_n = tolower(ne);
+    if (low_h != low_n)
+      return 1;
+    i++;
+  }
+  return i < n;
+}

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-aix.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-aix.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-aix.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -7,7 +7,6 @@
 
 #include <private/config.h>
 
-#include <assert.h>
 #include <sys/types.h>
 #include <dirent.h>
 #include <unistd.h>
@@ -26,39 +25,42 @@
 #include <sys/thread.h>
 
 static int
-hwloc_aix_set_sth_cpubind(hwloc_topology_t topology, rstype_t what, rsid_t who, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_aix_set_sth_cpubind(hwloc_topology_t topology, rstype_t what, rsid_t who, hwloc_const_cpuset_t hwloc_set, int policy __hwloc_attribute_unused)
 {
   rsethandle_t rset, rad;
-  hwloc_obj_t objs[2];
-  int n;
+  hwloc_obj_t obj;
   int res = -1;
 
-  if (hwloc_cpuset_isequal(hwloc_set, hwloc_get_system_obj(topology)->cpuset)) {
+  /* The resulting binding is always strict */
+
+  if (hwloc_cpuset_isequal(hwloc_set, hwloc_topology_get_complete_cpuset(topology))) {
     if (ra_detachrset(what, who, 0))
       return -1;
     return 0;
   }
 
-  n = hwloc_get_largest_objs_inside_cpuset(topology, hwloc_set, objs, 2);
-  if (n > 1 || objs[0]->os_level == -1) {
+  obj = hwloc_get_first_largest_obj_inside_cpuset(topology, hwloc_set);
+  if (!hwloc_cpuset_isequal(obj->cpuset, hwloc_set) || obj->os_level == -1) {
     /* Does not correspond to exactly one radset, not possible */
     errno = EXDEV;
     return -1;
   }
 
-  rset = rs_alloc(RS_PARTITION);
+  if ((topology->flags & HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM))
+    rset = rs_alloc(RS_ALL);
+  else
+    rset = rs_alloc(RS_PARTITION);
   rad = rs_alloc(RS_EMPTY);
-  if (rs_getrad(rset, rad, objs[0]->os_level, objs[0]->os_index, 0)) {
-    fprintf(stderr,"rs_getrad(%d,%d) failed: %s\n", objs[0]->os_level, objs[0]->os_index, strerror(errno));
+  if (rs_getrad(rset, rad, obj->os_level, obj->os_index, 0)) {
+    fprintf(stderr,"rs_getrad(%d,%u) failed: %s\n", obj->os_level, obj->os_index, strerror(errno));
     goto out;
   }
 
-  /* TODO: ra_getrset to get binding information */
   /* TODO: memory binding and policy (P_DEFAULT / P_FIRST_TOUCH / P_BALANCED)
    * ra_mmap to allocation on an rset
    */
 
-  if (ra_attachrset(what, who, rset, 0)) {
+  if (ra_attachrset(what, who, rad, 0)) {
     res = -1;
     goto out;
   }
@@ -72,41 +74,96 @@
 }
 
 static int
-hwloc_aix_set_thisproc_cpubind(hwloc_topology_t topology, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_aix_get_sth_cpubind(hwloc_topology_t topology, rstype_t what, rsid_t who, hwloc_cpuset_t hwloc_set, int policy __hwloc_attribute_unused)
 {
+  rsethandle_t rset;
+  unsigned cpu, maxcpus;
+  int res = -1;
+
+  rset = rs_alloc(RS_EMPTY);
+
+  if (ra_getrset(what, who, 0, rset) == -1)
+    goto out;
+
+  hwloc_cpuset_zero(hwloc_set);
+  maxcpus = rs_getinfo(rset, R_MAXPROCS, 0);
+  for (cpu = 0; cpu < maxcpus; cpu++)
+    if (rs_op(RS_TESTRESOURCE, rset, NULL, R_PROCS, cpu) == 1)
+      hwloc_cpuset_set(hwloc_set, cpu);
+  hwloc_cpuset_and(hwloc_set, hwloc_set, hwloc_topology_get_complete_cpuset(topology));
+  res = 0;
+
+out:
+  rs_free(rset);
+  return res;
+}
+
+static int
+hwloc_aix_set_thisproc_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t hwloc_set, int policy)
+{
   rsid_t who = { .at_pid = getpid() };
-  return hwloc_aix_set_sth_cpubind(topology, R_PROCESS, who, hwloc_set, strict);
+  return hwloc_aix_set_sth_cpubind(topology, R_PROCESS, who, hwloc_set, policy);
 }
 
 static int
-hwloc_aix_set_thisthread_cpubind(hwloc_topology_t topology, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_aix_get_thisproc_cpubind(hwloc_topology_t topology, hwloc_cpuset_t hwloc_set, int policy)
 {
+  rsid_t who = { .at_pid = getpid() };
+  return hwloc_aix_get_sth_cpubind(topology, R_PROCESS, who, hwloc_set, policy);
+}
+
+static int
+hwloc_aix_set_thisthread_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t hwloc_set, int policy)
+{
   rsid_t who = { .at_tid = thread_self() };
-  return hwloc_aix_set_sth_cpubind(topology, R_THREAD, who, hwloc_set, strict);
+  return hwloc_aix_set_sth_cpubind(topology, R_THREAD, who, hwloc_set, policy);
 }
 
 static int
-hwloc_aix_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_aix_get_thisthread_cpubind(hwloc_topology_t topology, hwloc_cpuset_t hwloc_set, int policy)
 {
+  rsid_t who = { .at_tid = thread_self() };
+  return hwloc_aix_get_sth_cpubind(topology, R_THREAD, who, hwloc_set, policy);
+}
+
+static int
+hwloc_aix_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t hwloc_set, int policy)
+{
   rsid_t who = { .at_pid = pid };
-  return hwloc_aix_set_sth_cpubind(topology, R_PROCESS, who, hwloc_set, strict);
+  return hwloc_aix_set_sth_cpubind(topology, R_PROCESS, who, hwloc_set, policy);
 }
 
 static int
-hwloc_aix_set_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t pthread, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_aix_get_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t hwloc_set, int policy)
 {
+  rsid_t who = { .at_pid = pid };
+  return hwloc_aix_get_sth_cpubind(topology, R_PROCESS, who, hwloc_set, policy);
+}
+
+static int
+hwloc_aix_set_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t pthread, hwloc_const_cpuset_t hwloc_set, int policy)
+{
   struct __pthrdsinfo info;
   int size;
   if (pthread_getthrds_np(&pthread, PTHRDSINFO_QUERY_TID, &info, sizeof(info), NULL, &size))
     return -1;
-  rsid_t who = { .at_tid = info.__pi_tid };
-  return hwloc_aix_set_sth_cpubind(topology, R_THREAD, who, hwloc_set, strict);
+  {
+    rsid_t who = { .at_tid = info.__pi_tid };
+    return hwloc_aix_set_sth_cpubind(topology, R_THREAD, who, hwloc_set, policy);
+  }
 }
 
 static int
-hwloc_aix_set_cpubind(hwloc_topology_t topology, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_aix_get_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t pthread, hwloc_cpuset_t hwloc_set, int policy)
 {
-  return hwloc_aix_set_thisproc_cpubind(topology, hwloc_set, strict);
+  struct __pthrdsinfo info;
+  int size;
+  if (pthread_getthrds_np(&pthread, PTHRDSINFO_QUERY_TID, &info, sizeof(info), NULL, &size))
+    return -1;
+  {
+    rsid_t who = { .at_tid = info.__pi_tid };
+    return hwloc_aix_get_sth_cpubind(topology, R_THREAD, who, hwloc_set, policy);
+  }
 }
 
 static void
@@ -114,7 +171,7 @@
 {
   rsethandle_t rset, rad;
   int i,maxcpus,j;
-  unsigned nbnodes;
+  int nbnodes;
   struct hwloc_obj *obj;
 
   if ((topology->flags & HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM))
@@ -138,20 +195,29 @@
 
     /* It seems logical processors are numbered from 1 here, while the
      * bindprocessor functions numbers them from 0... */
-    obj = hwloc_alloc_setup_object(type, i - (type == HWLOC_OBJ_PROC));
+    obj = hwloc_alloc_setup_object(type, i - (type == HWLOC_OBJ_PU));
     obj->cpuset = hwloc_cpuset_alloc();
     obj->os_level = sdl;
     switch(type) {
       case HWLOC_OBJ_NODE:
-	obj->attr->node.memory_kB = 0; /* TODO: odd, rs_getinfo(rad, R_MEMSIZE, 0) << 10 returns the total memory ... */
-	obj->attr->node.huge_page_free = 0; /* TODO: rs_getinfo(rset, R_LGPGFREE, 0) / hugepagesize */
+	obj->nodeset = hwloc_cpuset_alloc();
+	hwloc_cpuset_set(obj->nodeset, i);
+	obj->memory.local_memory = 0; /* TODO: odd, rs_getinfo(rad, R_MEMSIZE, 0) << 10 returns the total memory ... */
+	obj->memory.page_types_len = 2;
+	obj->memory.page_types = malloc(2*sizeof(*obj->memory.page_types));
+	memset(obj->memory.page_types, 0, 2*sizeof(*obj->memory.page_types));
+	obj->memory.page_types[0].size = getpagesize();
+#ifdef HAVE__SC_LARGE_PAGESIZE
+	obj->memory.page_types[1].size = sysconf(_SC_LARGE_PAGESIZE);
+#endif
+	/* TODO: obj->memory.page_types[1].count = rs_getinfo(rset, R_LGPGFREE, 0) / hugepagesize */
 	break;
       case HWLOC_OBJ_CACHE:
-	obj->attr->cache.memory_kB = 0; /* TODO: ? */
+	obj->attr->cache.size = 0; /* TODO: ? */
 	obj->attr->cache.depth = 2;
 	break;
-      case HWLOC_OBJ_MISC:
-	obj->attr->misc.depth = level;
+      case HWLOC_OBJ_GROUP:
+	obj->attr->group.depth = level;
       default:
 	break;
     }
@@ -163,7 +229,7 @@
     hwloc_debug_2args_cpuset("%s %d has cpuset %s\n",
 	       hwloc_obj_type_string(type),
 	       i, obj->cpuset);
-    hwloc_add_object(topology, obj);
+    hwloc_insert_object_by_cpuset(topology, obj);
   }
 
   rs_free(rset);
@@ -173,7 +239,7 @@
 void
 hwloc_look_aix(struct hwloc_topology *topology)
 {
-  unsigned i;
+  int i;
   /* TODO: R_LGPGDEF/R_LGPGFREE for large pages */
 
   for (i=0; i<=rs_getinfo(NULL, R_MAXSDL, 0); i++)
@@ -216,15 +282,16 @@
       if (i == rs_getinfo(NULL, R_MAXSDL, 0))
 	{
 	  hwloc_debug("looking AIX max sdl %d\n", i);
-	  look_rset(i, HWLOC_OBJ_PROC, topology, i);
+	  look_rset(i, HWLOC_OBJ_PU, topology, i);
 	  known = 1;
+          topology->support.discovery->pu = 1;
 	}
 
       /* Don't know how it should be rendered, make a misc object for it.  */
       if (!known)
 	{
 	  hwloc_debug("looking AIX unknown sdl %d\n", i);
-	  look_rset(i, HWLOC_OBJ_MISC, topology, i);
+	  look_rset(i, HWLOC_OBJ_GROUP, topology, i);
 	}
     }
 }
@@ -232,9 +299,12 @@
 void
 hwloc_set_aix_hooks(struct hwloc_topology *topology)
 {
-  topology->set_cpubind = hwloc_aix_set_cpubind;
   topology->set_proc_cpubind = hwloc_aix_set_proc_cpubind;
+  topology->get_proc_cpubind = hwloc_aix_get_proc_cpubind;
   topology->set_thread_cpubind = hwloc_aix_set_thread_cpubind;
+  topology->get_thread_cpubind = hwloc_aix_get_thread_cpubind;
   topology->set_thisproc_cpubind = hwloc_aix_set_thisproc_cpubind;
+  topology->get_thisproc_cpubind = hwloc_aix_get_thisproc_cpubind;
   topology->set_thisthread_cpubind = hwloc_aix_set_thisthread_cpubind;
+  topology->get_thisthread_cpubind = hwloc_aix_get_thisthread_cpubind;
 }

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-darwin.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-darwin.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-darwin.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,16 +1,18 @@
 /*
  * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
+ * Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
  * See COPYING in top-level directory.
  */
 
 /* Detect topology change: registering for power management changes and check
  * if for example hw.activecpu changed */
 
+/* Apparently, Darwin people do not _want_ to provide binding functions.  */
+
 #include <private/config.h>
 
 #include <sys/types.h>
 #include <sys/sysctl.h>
-#include <sys/types.h>
 #include <stdlib.h>
 #include <inttypes.h>
 
@@ -18,127 +20,132 @@
 #include <private/private.h>
 #include <private/debug.h>
 
-static int get_sysctl(const char *name, int *res)
-{
-  int n;
-  size_t size = sizeof(n);
-  if (sysctlbyname(name, &n, &size, NULL, 0))
-    return -1;
-  if (size != sizeof(n))
-    return -1;
-  *res = n;
-  return 0;
-}
-
 void
 hwloc_look_darwin(struct hwloc_topology *topology)
 {
-  int nprocs;
-  int npackages;
-  int i, j, cpu;
+  int _nprocs;
+  unsigned nprocs;
+  int _npackages;
+  unsigned i, j, cpu;
   struct hwloc_obj *obj;
   size_t size;
 
-  if (get_sysctl("hw.ncpu", &nprocs))
+  if (hwloc_get_sysctlbyname("hw.ncpu", &_nprocs) || _nprocs <= 0)
     return;
+  nprocs = _nprocs;
+  topology->support.discovery->pu = 1;
 
-  hwloc_debug("%d procs\n", nprocs);
+  hwloc_debug("%u procs\n", nprocs);
 
-  if (!get_sysctl("hw.packages", &npackages)) {
-    int cores_per_package;
-    int logical_per_package;
+  if (!hwloc_get_sysctlbyname("hw.packages", &_npackages) && _npackages > 0) {
+    unsigned npackages = _npackages;
+    int _cores_per_package;
+    int _logical_per_package;
+    unsigned logical_per_package;
 
-    hwloc_debug("%d packages\n", npackages);
+    hwloc_debug("%u packages\n", npackages);
 
-    if (get_sysctl("machdep.cpu.logical_per_package", &logical_per_package))
+    if (!hwloc_get_sysctlbyname("machdep.cpu.logical_per_package", &_logical_per_package) && _logical_per_package > 0)
+      logical_per_package = _logical_per_package;
+    else
       /* Assume the trivia.  */
       logical_per_package = nprocs / npackages;
 
-    hwloc_debug("%d threads per package\n", logical_per_package);
+    hwloc_debug("%u threads per package\n", logical_per_package);
 
-    assert(nprocs == npackages * logical_per_package);
 
-    for (i = 0; i < npackages; i++) {
-      obj = hwloc_alloc_setup_object(HWLOC_OBJ_SOCKET, i);
-      obj->cpuset = hwloc_cpuset_alloc();
-      for (cpu = i*logical_per_package; cpu < (i+1)*logical_per_package; cpu++)
-	hwloc_cpuset_set(obj->cpuset, cpu);
+    if (nprocs == npackages * logical_per_package)
+      for (i = 0; i < npackages; i++) {
+        obj = hwloc_alloc_setup_object(HWLOC_OBJ_SOCKET, i);
+        obj->cpuset = hwloc_cpuset_alloc();
+        for (cpu = i*logical_per_package; cpu < (i+1)*logical_per_package; cpu++)
+          hwloc_cpuset_set(obj->cpuset, cpu);
 
-      hwloc_debug_1arg_cpuset("package %d has cpuset %s\n",
-		 i, obj->cpuset);
-      hwloc_add_object(topology, obj);
-    }
+        hwloc_debug_1arg_cpuset("package %u has cpuset %s\n",
+                   i, obj->cpuset);
+        hwloc_insert_object_by_cpuset(topology, obj);
+      }
 
-    if (!get_sysctl("machdep.cpu.cores_per_package", &cores_per_package)) {
-      hwloc_debug("%d cores per package\n", cores_per_package);
+    if (!hwloc_get_sysctlbyname("machdep.cpu.cores_per_package", &_cores_per_package) && _cores_per_package > 0) {
+      unsigned cores_per_package = _cores_per_package;
+      hwloc_debug("%u cores per package\n", cores_per_package);
 
-      assert(!(logical_per_package % cores_per_package));
+      if (!(logical_per_package % cores_per_package))
+        for (i = 0; i < npackages * cores_per_package; i++) {
+          obj = hwloc_alloc_setup_object(HWLOC_OBJ_CORE, i);
+          obj->cpuset = hwloc_cpuset_alloc();
+          for (cpu = i*(logical_per_package/cores_per_package);
+               cpu < (i+1)*(logical_per_package/cores_per_package);
+               cpu++)
+            hwloc_cpuset_set(obj->cpuset, cpu);
 
-      for (i = 0; i < npackages * cores_per_package; i++) {
-	obj = hwloc_alloc_setup_object(HWLOC_OBJ_CORE, i);
-	obj->cpuset = hwloc_cpuset_alloc();
-	for (cpu = i*(logical_per_package/cores_per_package);
-	     cpu < (i+1)*(logical_per_package/cores_per_package);
-	     cpu++)
-	  hwloc_cpuset_set(obj->cpuset, cpu);
-
-        hwloc_debug_1arg_cpuset("core %d has cpuset %s\n",
-		   i, obj->cpuset);
-	hwloc_add_object(topology, obj);
-      }
+          hwloc_debug_1arg_cpuset("core %u has cpuset %s\n",
+                     i, obj->cpuset);
+          hwloc_insert_object_by_cpuset(topology, obj);
+        }
     }
   }
 
   if (!sysctlbyname("hw.cacheconfig", NULL, &size, NULL, 0)) {
-    int n = size / sizeof(uint64_t);
+    unsigned n = size / sizeof(uint64_t);
     uint64_t cacheconfig[n];
     uint64_t cachesize[n];
 
-    assert(!sysctlbyname("hw.cacheconfig", cacheconfig, &size, NULL, 0));
+    if ((!sysctlbyname("hw.cacheconfig", cacheconfig, &size, NULL, 0))) {
+      memset(cachesize, 0, sizeof(cachesize));
+      size = sizeof(cachesize);
+      sysctlbyname("hw.cachesize", cachesize, &size, NULL, 0);
 
-    memset(cachesize, 0, sizeof(cachesize));
-    size = sizeof(cachesize);
-    sysctlbyname("hw.cachesize", cachesize, &size, NULL, 0);
+      hwloc_debug("%s", "caches");
+      for (i = 0; i < n && cacheconfig[i]; i++)
+        hwloc_debug(" %"PRIu64"(%"PRIu64"kB)", cacheconfig[i], cachesize[i] / 1024);
 
-    hwloc_debug("caches");
-    for (i = 0; i < n && cacheconfig[i]; i++)
-      hwloc_debug(" %"PRId64"(%"PRId64"kB)", cacheconfig[i], cachesize[i] / 1024);
+      /* Now we know how many caches there are */
+      n = i;
+      hwloc_debug("\n%u cache levels\n", n - 1);
 
-    /* Now we know how many caches there are */
-    n = i;
-    hwloc_debug("\n%d cache levels\n", n - 1);
+      for (i = 0; i < n; i++) {
+        for (j = 0; j < (nprocs / cacheconfig[i]); j++) {
+          obj = hwloc_alloc_setup_object(i?HWLOC_OBJ_CACHE:HWLOC_OBJ_NODE, j);
+          if (!i) {
+            obj->nodeset = hwloc_cpuset_alloc();
+            hwloc_cpuset_set(obj->nodeset, j);
+          }
+          obj->cpuset = hwloc_cpuset_alloc();
+          for (cpu = j*cacheconfig[i];
+               cpu < ((j+1)*cacheconfig[i]);
+               cpu++)
+            hwloc_cpuset_set(obj->cpuset, cpu);
 
-    for (i = 0; i < n; i++) {
-      for (j = 0; j < nprocs / cacheconfig[i]; j++) {
-	obj = hwloc_alloc_setup_object(i?HWLOC_OBJ_CACHE:HWLOC_OBJ_NODE, j);
-	obj->cpuset = hwloc_cpuset_alloc();
-	for (cpu = j*cacheconfig[i];
-	     cpu < (j+1)*cacheconfig[i];
-	     cpu++)
-	  hwloc_cpuset_set(obj->cpuset, cpu);
+          if (i) {
+            hwloc_debug_2args_cpuset("L%ucache %u has cpuset %s\n",
+                i, j, obj->cpuset);
+            obj->attr->cache.depth = i;
+            obj->attr->cache.size = cachesize[i];
+          } else {
+            hwloc_debug_1arg_cpuset("node %u has cpuset %s\n",
+                j, obj->cpuset);
+	    obj->memory.local_memory = cachesize[i];
+	    obj->memory.page_types_len = 2;
+	    obj->memory.page_types = malloc(2*sizeof(*obj->memory.page_types));
+	    memset(obj->memory.page_types, 0, 2*sizeof(*obj->memory.page_types));
+	    obj->memory.page_types[0].size = getpagesize();
+#ifdef HAVE__SC_LARGE_PAGESIZE
+	    obj->memory.page_types[1].size = sysconf(_SC_LARGE_PAGESIZE);
+#endif
+          }
 
-	if (i) {
-          hwloc_debug_2args_cpuset("L%dcache %d has cpuset %s\n",
-	      i, j, obj->cpuset);
-	  obj->attr->cache.depth = i;
-	  obj->attr->cache.memory_kB = cachesize[i] / 1024;
-	} else {
-          hwloc_debug_1arg_cpuset("node %d has cpuset %s\n",
-	      j, obj->cpuset);
-	  obj->attr->node.memory_kB = cachesize[i] / 1024;
-	  obj->attr->node.huge_page_free = 0; /* TODO */
-	}
-
-	hwloc_add_object(topology, obj);
+          hwloc_insert_object_by_cpuset(topology, obj);
+        }
       }
     }
   }
 
-  /* add PROC objects */
-  hwloc_setup_proc_level(topology, nprocs, NULL);
+  /* add PU objects */
+  hwloc_setup_pu_level(topology, nprocs);
 }
 
 void
-hwloc_set_darwin_hooks(struct hwloc_topology *topology)
+hwloc_set_darwin_hooks(struct hwloc_topology *topology __hwloc_attribute_unused)
 {
 }

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-freebsd.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-freebsd.c	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-freebsd.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,195 @@
+/*
+ * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
+ * See COPYING in top-level directory.
+ */
+
+#include <private/config.h>
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <inttypes.h>
+#include <sys/param.h>
+#include <pthread.h>
+#ifdef HAVE_PTHREAD_NP_H
+#include <pthread_np.h>
+#endif
+#ifdef HAVE_SYS_CPUSET_H
+#include <sys/cpuset.h>
+#endif
+
+#include <hwloc.h>
+#include <private/private.h>
+#include <private/debug.h>
+
+#ifdef HAVE_SYS_CPUSET_H
+static void
+hwloc_freebsd_bsd2hwloc(hwloc_cpuset_t hwloc_cpuset, const cpuset_t *cpuset)
+{
+  unsigned cpu;
+  hwloc_cpuset_zero(hwloc_cpuset);
+  for (cpu = 0; cpu < HWLOC_NBMAXCPUS && cpu < CPU_SETSIZE; cpu++)
+    if (CPU_ISSET(cpu, cpuset))
+      hwloc_cpuset_set(hwloc_cpuset, cpu);
+}
+
+static void
+hwloc_freebsd_hwloc2bsd(hwloc_const_cpuset_t hwloc_cpuset, cpuset_t *cpuset)
+{
+  unsigned cpu;
+  CPU_ZERO(cpuset);
+  for (cpu = 0; cpu < HWLOC_NBMAXCPUS && cpu < CPU_SETSIZE; cpu++)
+    if (hwloc_cpuset_isset(hwloc_cpuset, cpu))
+      CPU_SET(cpu, cpuset);
+}
+
+static int
+hwloc_freebsd_set_sth_affinity(hwloc_topology_t topology __hwloc_attribute_unused, cpulevel_t level, cpuwhich_t which, id_t id, hwloc_const_cpuset_t hwloc_cpuset, int policy __hwloc_attribute_unused)
+{
+  cpuset_t cpuset;
+
+  hwloc_freebsd_hwloc2bsd(hwloc_cpuset, &cpuset);
+
+  if (cpuset_setaffinity(level, which, id, sizeof(cpuset), &cpuset))
+    return -1;
+
+  return 0;
+}
+
+static int
+hwloc_freebsd_get_sth_affinity(hwloc_topology_t topology __hwloc_attribute_unused, cpulevel_t level, cpuwhich_t which, id_t id, hwloc_cpuset_t hwloc_cpuset, int policy __hwloc_attribute_unused)
+{
+  cpuset_t cpuset;
+
+  if (cpuset_getaffinity(level, which, id, sizeof(cpuset), &cpuset))
+    return -1;
+
+  hwloc_freebsd_bsd2hwloc(hwloc_cpuset, &cpuset);
+  return 0;
+}
+
+static int
+hwloc_freebsd_set_thisproc_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t hwloc_cpuset, int policy)
+{
+  return hwloc_freebsd_set_sth_affinity(topology, CPU_LEVEL_WHICH, CPU_WHICH_PID, -1, hwloc_cpuset, policy);
+}
+
+static int
+hwloc_freebsd_get_thisproc_cpubind(hwloc_topology_t topology, hwloc_cpuset_t hwloc_cpuset, int policy)
+{
+  return hwloc_freebsd_get_sth_affinity(topology, CPU_LEVEL_WHICH, CPU_WHICH_PID, -1, hwloc_cpuset, policy);
+}
+
+static int
+hwloc_freebsd_set_thisthread_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t hwloc_cpuset, int policy)
+{
+  return hwloc_freebsd_set_sth_affinity(topology, CPU_LEVEL_WHICH, CPU_WHICH_TID, -1, hwloc_cpuset, policy);
+}
+
+static int
+hwloc_freebsd_get_thisthread_cpubind(hwloc_topology_t topology, hwloc_cpuset_t hwloc_cpuset, int policy)
+{
+  return hwloc_freebsd_get_sth_affinity(topology, CPU_LEVEL_WHICH, CPU_WHICH_TID, -1, hwloc_cpuset, policy);
+}
+
+static int
+hwloc_freebsd_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t hwloc_cpuset, int policy)
+{
+  return hwloc_freebsd_set_sth_affinity(topology, CPU_LEVEL_WHICH, CPU_WHICH_PID, pid, hwloc_cpuset, policy);
+}
+
+static int
+hwloc_freebsd_get_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t hwloc_cpuset, int policy)
+{
+  return hwloc_freebsd_get_sth_affinity(topology, CPU_LEVEL_WHICH, CPU_WHICH_PID, pid, hwloc_cpuset, policy);
+}
+
+#ifdef hwloc_thread_t
+
+#if HAVE_DECL_PTHREAD_SETAFFINITY_NP
+#pragma weak pthread_setaffinity_np
+static int
+hwloc_freebsd_set_thread_cpubind(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_thread_t tid, hwloc_const_cpuset_t hwloc_cpuset, int policy __hwloc_attribute_unused)
+{
+  int err;
+  cpuset_t cpuset;
+
+  if (!pthread_setaffinity_np) {
+    errno = ENOSYS;
+    return -1;
+  }
+
+  hwloc_freebsd_hwloc2bsd(hwloc_cpuset, &cpuset);
+
+  err = pthread_setaffinity_np(tid, sizeof(cpuset), &cpuset);
+
+  if (err) {
+    errno = err;
+    return -1;
+  }
+
+  return 0;
+}
+#endif
+
+#if HAVE_DECL_PTHREAD_GETAFFINITY_NP
+#pragma weak pthread_getaffinity_np
+static int
+hwloc_freebsd_get_thread_cpubind(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_thread_t tid, hwloc_cpuset_t hwloc_cpuset, int policy __hwloc_attribute_unused)
+{
+  int err;
+  cpuset_t cpuset;
+
+  if (!pthread_getaffinity_np) {
+    errno = ENOSYS;
+    return -1;
+  }
+
+  err = pthread_getaffinity_np(tid, sizeof(cpuset), &cpuset);
+
+  if (err) {
+    errno = err;
+    return -1;
+  }
+
+  hwloc_freebsd_bsd2hwloc(hwloc_cpuset, &cpuset);
+  return 0;
+}
+#endif
+#endif
+#endif
+
+void
+hwloc_look_freebsd(struct hwloc_topology *topology)
+{
+  unsigned nbprocs = hwloc_fallback_nbprocessors(topology);
+
+#ifdef HAVE__SC_LARGE_PAGESIZE
+  topology->levels[0][0]->attr->machine.huge_page_size_kB = sysconf(_SC_LARGE_PAGESIZE);
+#endif
+
+  hwloc_set_freebsd_hooks(topology);
+  hwloc_look_x86(topology, nbprocs);
+
+  hwloc_setup_pu_level(topology, nbprocs);
+}
+
+void
+hwloc_set_freebsd_hooks(struct hwloc_topology *topology)
+{
+#ifdef HAVE_SYS_CPUSET_H
+  topology->set_thisproc_cpubind = hwloc_freebsd_set_thisproc_cpubind;
+  topology->get_thisproc_cpubind = hwloc_freebsd_get_thisproc_cpubind;
+  topology->set_thisthread_cpubind = hwloc_freebsd_set_thisthread_cpubind;
+  topology->get_thisthread_cpubind = hwloc_freebsd_get_thisthread_cpubind;
+  topology->set_proc_cpubind = hwloc_freebsd_set_proc_cpubind;
+  topology->get_proc_cpubind = hwloc_freebsd_get_proc_cpubind;
+#ifdef hwloc_thread_t
+#if HAVE_DECL_PTHREAD_SETAFFINITY_NP
+  topology->set_thread_cpubind = hwloc_freebsd_set_thread_cpubind;
+#endif
+#if HAVE_DECL_PTHREAD_GETAFFINITY_NP
+  topology->get_thread_cpubind = hwloc_freebsd_get_thread_cpubind;
+#endif
+#endif
+#endif
+}

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-hpux.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-hpux.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-hpux.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -18,7 +18,6 @@
 
 #include <private/config.h>
 
-#include <assert.h>
 #include <sys/types.h>
 #include <unistd.h>
 #include <string.h>
@@ -33,26 +32,25 @@
 #include <pthread.h>
 
 static ldom_t
-hwloc_hpux_find_ldom(hwloc_topology_t topology, hwloc_cpuset_t hwloc_set)
+hwloc_hpux_find_ldom(hwloc_topology_t topology, hwloc_const_cpuset_t hwloc_set)
 {
   int has_numa = sysconf(_SC_CCNUMA_SUPPORT) == 1;
-  int n;
-  hwloc_obj_t objs[2];
+  hwloc_obj_t obj;
 
   if (!has_numa)
     return -1;
 
-  n = hwloc_get_largest_objs_inside_cpuset(topology, hwloc_set, objs, 2);
-  if (n > 1 || objs[0]->type != HWLOC_OBJ_NODE) {
+  obj = hwloc_get_first_largest_obj_inside_cpuset(topology, hwloc_set);
+  if (!hwloc_cpuset_isequal(obj->cpuset, hwloc_set) || obj->type != HWLOC_OBJ_NODE) {
     /* Does not correspond to exactly one node */
     return -1;
   }
 
-  return objs[0]->os_index;
+  return obj->os_index;
 }
 
 static spu_t
-hwloc_hpux_find_spu(hwloc_topology_t topology, hwloc_cpuset_t hwloc_set)
+hwloc_hpux_find_spu(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_const_cpuset_t hwloc_set)
 {
   spu_t cpu;
 
@@ -62,8 +60,9 @@
   return -1;
 }
 
+/* Note: get_cpubind not available on HP-UX */
 static int
-hwloc_hpux_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_hpux_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t hwloc_set, int policy)
 {
   ldom_t ldom;
   spu_t cpu;
@@ -72,7 +71,7 @@
   mpctl(MPC_SETLDOM, MPC_LDOMFLOAT, pid);
   mpctl(MPC_SETPROCESS, MPC_SPUFLOAT, pid);
 
-  if (hwloc_cpuset_isequal(hwloc_set, hwloc_get_system_obj(topology)->cpuset))
+  if (hwloc_cpuset_isequal(hwloc_set, hwloc_topology_get_complete_cpuset(topology)))
     return 0;
 
   ldom = hwloc_hpux_find_ldom(topology, hwloc_set);
@@ -81,27 +80,21 @@
 
   cpu = hwloc_hpux_find_spu(topology, hwloc_set);
   if (cpu != -1)
-    return mpctl(strict ? MPC_SETPROCESS_FORCE : MPC_SETPROCESS, cpu, pid);
+    return mpctl(policy & HWLOC_CPUBIND_STRICT ? MPC_SETPROCESS_FORCE : MPC_SETPROCESS, cpu, pid);
 
   errno = EXDEV;
   return -1;
 }
 
 static int
-hwloc_hpux_set_thisproc_cpubind(hwloc_topology_t topology, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_hpux_set_thisproc_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t hwloc_set, int policy)
 {
-  return hwloc_hpux_set_proc_cpubind(topology, MPC_SELFPID, hwloc_set, strict);
+  return hwloc_hpux_set_proc_cpubind(topology, MPC_SELFPID, hwloc_set, policy);
 }
 
-static int
-hwloc_hpux_set_cpubind(hwloc_topology_t topology, hwloc_cpuset_t hwloc_set, int strict)
-{
-  return hwloc_hpux_set_thisproc_cpubind(topology, hwloc_set, strict);
-}
-
 #ifdef hwloc_thread_t
 static int
-hwloc_hpux_set_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t pthread, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_hpux_set_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t pthread, hwloc_const_cpuset_t hwloc_set, int policy)
 {
   ldom_t ldom, ldom2;
   spu_t cpu, cpu2;
@@ -110,7 +103,7 @@
   pthread_ldom_bind_np(&ldom2, PTHREAD_LDOMFLOAT_NP, pthread);
   pthread_processor_bind_np(PTHREAD_BIND_ADVISORY_NP, &cpu2, PTHREAD_SPUFLOAT_NP, pthread);
 
-  if (hwloc_cpuset_isequal(hwloc_set, hwloc_get_system_obj(topology)->cpuset))
+  if (hwloc_cpuset_isequal(hwloc_set, hwloc_topology_get_complete_cpuset(topology)))
     return 0;
 
   ldom = hwloc_hpux_find_ldom(topology, hwloc_set);
@@ -119,16 +112,16 @@
 
   cpu = hwloc_hpux_find_spu(topology, hwloc_set);
   if (cpu != -1)
-    return pthread_processor_bind_np(strict ? PTHREAD_BIND_FORCED_NP : PTHREAD_BIND_ADVISORY_NP, &cpu2, cpu, pthread);
+    return pthread_processor_bind_np(policy & HWLOC_CPUBIND_STRICT ? PTHREAD_BIND_FORCED_NP : PTHREAD_BIND_ADVISORY_NP, &cpu2, cpu, pthread);
 
   errno = EXDEV;
   return -1;
 }
 
 static int
-hwloc_hpux_set_thisthread_cpubind(hwloc_topology_t topology, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_hpux_set_thisthread_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t hwloc_set, int policy)
 {
-  return hwloc_hpux_set_thread_cpubind(topology, PTHREAD_SELFTID_NP, hwloc_set, strict);
+  return hwloc_hpux_set_thread_cpubind(topology, PTHREAD_SELFTID_NP, hwloc_set, policy);
 }
 #endif
 
@@ -141,6 +134,10 @@
   ldom_t currentnode;
   int i, nbnodes = 0;
 
+#ifdef HAVE__SC_LARGE_PAGESIZE
+  topology->levels[0][0]->attr->machine.huge_page_size_kB = sysconf(_SC_LARGE_PAGESIZE);
+#endif
+
   if (has_numa) {
     nbnodes = mpctl(topology->flags & HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM ?
       MPC_GETNUMLDOMS_SYS : MPC_GETNUMLDOMS, 0, 0);
@@ -156,6 +153,8 @@
       hwloc_debug("node %d is %d\n", i, currentnode);
       nodes[i] = obj = hwloc_alloc_setup_object(HWLOC_OBJ_NODE, currentnode);
       obj->cpuset = hwloc_cpuset_alloc();
+      obj->nodeset = hwloc_cpuset_alloc();
+      hwloc_cpuset_set(obj->nodeset, currentnode);
       /* TODO: obj->attr->node.memory_kB */
       /* TODO: obj->attr->node.huge_page_free */
 
@@ -169,7 +168,7 @@
   currentcpu = mpctl(topology->flags & HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM ?
       MPC_GETFIRSTSPU_SYS : MPC_GETFIRSTSPU, 0,0);
   while (currentcpu != -1) {
-    obj = hwloc_alloc_setup_object(HWLOC_OBJ_PROC, currentcpu);
+    obj = hwloc_alloc_setup_object(HWLOC_OBJ_PU, currentcpu);
     obj->cpuset = hwloc_cpuset_alloc();
     hwloc_cpuset_set(obj->cpuset, currentcpu);
 
@@ -178,17 +177,20 @@
     if (nodes) {
       /* Add this cpu to its node */
       currentnode = mpctl(MPC_SPUTOLDOM, currentcpu, 0);
-      if (nodes[i]->os_index != currentnode)
+      if ((ldom_t) nodes[i]->os_index != currentnode)
         for (i = 0; i < nbnodes; i++)
-          if (nodes[i]->os_index == currentnode)
+          if ((ldom_t) nodes[i]->os_index == currentnode)
             break;
-      assert(i < nbnodes);
-      hwloc_cpuset_set(nodes[i]->cpuset, currentcpu);
-      hwloc_debug("is in node %d\n", i);
+      if (i < nbnodes) {
+        hwloc_cpuset_set(nodes[i]->cpuset, currentcpu);
+        hwloc_debug("is in node %d\n", i);
+      } else {
+        hwloc_debug("%s", "is in no node?!\n");
+      }
     }
 
     /* Add cpu */
-    hwloc_add_object(topology, obj);
+    hwloc_insert_object_by_cpuset(topology, obj);
 
     currentcpu = mpctl(topology->flags & HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM ?
       MPC_GETNEXTSPU_SYS : MPC_GETNEXTSPU, currentcpu, 0);
@@ -197,15 +199,16 @@
   if (nodes) {
     /* Add nodes */
     for (i = 0 ; i < nbnodes ; i++)
-      hwloc_add_object(topology, nodes[i]);
+      hwloc_insert_object_by_cpuset(topology, nodes[i]);
     free(nodes);
   }
+
+  topology->support.discovery->pu = 1;
 }
 
 void
 hwloc_set_hpux_hooks(struct hwloc_topology *topology)
 {
-  topology->set_cpubind = hwloc_hpux_set_cpubind;
   topology->set_proc_cpubind = hwloc_hpux_set_proc_cpubind;
   topology->set_thisproc_cpubind = hwloc_hpux_set_thisproc_cpubind;
 #ifdef hwloc_thread_t

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-linux.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-linux.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-linux.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -18,6 +18,7 @@
 #include <dirent.h>
 #include <unistd.h>
 #include <sys/types.h>
+#include <sys/stat.h>
 #include <sched.h>
 #include <pthread.h>
 
@@ -54,26 +55,62 @@
 #         warning "don't know the syscall number for sched_setaffinity on this architecture, will not support binding"
 #         define sched_setaffinity(pid, lg, mask) (errno = ENOSYS, -1)
 #       endif
-#       ifndef sched_setaffinity
-          _syscall3(int, sched_setaffinity, pid_t, pid, unsigned int, lg, unsigned long *, mask);
+#    endif
+#    ifndef sched_setaffinity
+       _syscall3(int, sched_setaffinity, pid_t, pid, unsigned int, lg, const void *, mask);
+#    endif
+#    ifndef __NR_sched_getaffinity
+#       ifdef __i386__
+#         define __NR_sched_getaffinity 242
+#       elif defined(__x86_64__)
+#         define __NR_sched_getaffinity 204
+#       elif defined(__ia64__)
+#         define __NR_sched_getaffinity 1232
+#       elif defined(__hppa__)
+#         define __NR_sched_getaffinity 212
+#       elif defined(__alpha__)
+#         define __NR_sched_getaffinity 396
+#       elif defined(__s390__)
+#         define __NR_sched_getaffinity 240
+#       elif defined(__sparc__)
+#         define __NR_sched_getaffinity 260
+#       elif defined(__m68k__)
+#         define __NR_sched_getaffinity 312
+#       elif defined(__powerpc__) || defined(__ppc__) || defined(__PPC__) || defined(__powerpc64__) || defined(__ppc64__)
+#         define __NR_sched_getaffinity 223
+#       elif defined(__arm__)
+#         define __NR_sched_getaffinity 242
+#       elif defined(__cris__)
+#         define __NR_sched_getaffinity 242
+/*#       elif defined(__mips__)
+  #         define __NR_sched_getaffinity TODO (32/64/nabi) */
+#       else
+#         warning "don't know the syscall number for sched_getaffinity on this architecture, will not support getting binding"
+#         define sched_getaffinity(pid, lg, mask) (errno = ENOSYS, -1)
 #       endif
 #    endif
+#    ifndef sched_getaffinity
+       _syscall3(int, sched_getaffinity, pid_t, pid, unsigned int, lg, void *, mask);
+#    endif
 #endif
 
 #ifdef HAVE_OPENAT
+/* Use our own filesystem functions if we have openat */
 
-/* Use our own filesystem functions.  */
-#define hwloc_fopen(p, m, d)   hwloc_fopenat(p, m, d)
-#define hwloc_access(p, m, d)  hwloc_accessat(p, m, d)
-#define hwloc_opendir(p, d)    hwloc_opendirat(p, d)
-
 static FILE *
 hwloc_fopenat(const char *path, const char *mode, int fsroot_fd)
 {
   int fd;
   const char *relative_path;
 
-  assert(!(fsroot_fd < 0));
+  if (fsroot_fd < 0) {
+    errno = EBADF;
+    return NULL;
+  }
+  if (strcmp(mode, "r")) {
+    errno = ENOTSUP;
+    return NULL;
+  }
 
   /* Skip leading slashes.  */
   for (relative_path = path; *relative_path == '/'; relative_path++);
@@ -90,12 +127,15 @@
 {
   const char *relative_path;
 
-  assert(!(fsroot_fd < 0));
+  if (fsroot_fd < 0) {
+    errno = EBADF;
+    return -1;
+  }
 
   /* Skip leading slashes.  */
   for (relative_path = path; *relative_path == '/'; relative_path++);
 
-  return faccessat(fsroot_fd, relative_path, O_RDONLY, 0);
+  return faccessat(fsroot_fd, relative_path, mode, 0);
 }
 
 static DIR*
@@ -114,26 +154,73 @@
   return fdopendir(dir_fd);
 }
 
-#else /* !HAVE_OPENAT */
+#endif /* HAVE_OPENAT */
 
-#define hwloc_fopen(p, m, d)   fopen(p, m)
-#define hwloc_access(p, m, d)  access(p, m)
-#define hwloc_opendir(p, d)    opendir(p)
+/* Static inline version of fopen so that we can use openat if we have
+   it, but still preserve compiler parameter checking */
+static inline FILE *
+hwloc_fopen(const char *p, const char *m, int d __hwloc_attribute_unused)
+{ 
+#ifdef HAVE_OPENAT
+    return hwloc_fopenat(p, m, d);
+#else
+    return fopen(p, m); 
+#endif
+}
 
-#endif /* !HAVE_OPENAT */
+/* Static inline version of access so that we can use openat if we have
+   it, but still preserve compiler parameter checking */
+static inline int 
+hwloc_access(const char *p, int m, int d __hwloc_attribute_unused)
+{ 
+#ifdef HAVE_OPENAT
+    return hwloc_accessat(p, m, d);
+#else
+    return access(p, m); 
+#endif
+}
 
-static int
-hwloc_linux_set_tid_cpubind(hwloc_topology_t topology, pid_t tid, hwloc_cpuset_t hwloc_set, int strict)
+/* Static inline version of opendir so that we can use openat if we have
+   it, but still preserve compiler parameter checking */
+static inline DIR *
+hwloc_opendir(const char *p, int d __hwloc_attribute_unused)
+{ 
+#ifdef HAVE_OPENAT
+    return hwloc_opendirat(p, d);
+#else
+    return opendir(p); 
+#endif
+}
+
+int
+hwloc_linux_set_tid_cpubind(hwloc_topology_t topology __hwloc_attribute_unused, pid_t tid, hwloc_const_cpuset_t hwloc_set)
 {
-
   /* TODO Kerrighed: Use
    * int migrate (pid_t pid, int destination_node);
    * int migrate_self (int destination_node);
    * int thread_migrate (int thread_id, int destination_node);
    */
 
-/* TODO: use dynamic size cpusets */
-#ifdef HWLOC_HAVE_CPU_SET
+  /* The resulting binding is always strict */
+
+#if defined(HWLOC_HAVE_CPU_SET_S) && !defined(HWLOC_HAVE_OLD_SCHED_SETAFFINITY) && CPU_SETSIZE < HWLOC_NBMAXCPUS
+  cpu_set_t *plinux_set;
+  unsigned cpu;
+  size_t setsize = CPU_ALLOC_SIZE(HWLOC_NBMAXCPUS);
+  int err;
+
+  plinux_set = CPU_ALLOC(HWLOC_NBMAXCPUS);
+
+  CPU_ZERO_S(setsize, plinux_set);
+  hwloc_cpuset_foreach_begin(cpu, hwloc_set)
+    CPU_SET_S(cpu, setsize, plinux_set);
+  hwloc_cpuset_foreach_end();
+
+  err = sched_setaffinity(tid, setsize, plinux_set);
+
+  CPU_FREE(plinux_set);
+  return err;
+#elif defined(HWLOC_HAVE_CPU_SET)
   cpu_set_t linux_set;
   unsigned cpu;
 
@@ -142,40 +229,315 @@
     CPU_SET(cpu, &linux_set);
   hwloc_cpuset_foreach_end();
 
-#ifdef HAVE_OLD_SCHED_SETAFFINITY
+#ifdef HWLOC_HAVE_OLD_SCHED_SETAFFINITY
   return sched_setaffinity(tid, &linux_set);
-#else /* HAVE_OLD_SCHED_SETAFFINITY */
+#else /* HWLOC_HAVE_OLD_SCHED_SETAFFINITY */
   return sched_setaffinity(tid, sizeof(linux_set), &linux_set);
-#endif /* HAVE_OLD_SCHED_SETAFFINITY */
-#else /* CPU_SET */
+#endif /* HWLOC_HAVE_OLD_SCHED_SETAFFINITY */
+#else /* !CPU_SET */
   unsigned long mask = hwloc_cpuset_to_ulong(hwloc_set);
 
-#ifdef HAVE_OLD_SCHED_SETAFFINITY
+#ifdef HWLOC_HAVE_OLD_SCHED_SETAFFINITY
   return sched_setaffinity(tid, (void*) &mask);
-#else /* HAVE_OLD_SCHED_SETAFFINITY */
+#else /* HWLOC_HAVE_OLD_SCHED_SETAFFINITY */
   return sched_setaffinity(tid, sizeof(mask), (void*) &mask);
-#endif /* HAVE_OLD_SCHED_SETAFFINITY */
-#endif /* CPU_SET */
+#endif /* HWLOC_HAVE_OLD_SCHED_SETAFFINITY */
+#endif /* !CPU_SET */
 }
 
+int
+hwloc_linux_get_tid_cpubind(hwloc_topology_t topology __hwloc_attribute_unused, pid_t tid, hwloc_cpuset_t hwloc_set)
+{
+  int err;
+  /* TODO Kerrighed */
+
+#if defined(HWLOC_HAVE_CPU_SET_S) && !defined(HWLOC_HAVE_OLD_SCHED_SETAFFINITY) && CPU_SETSIZE < HWLOC_NBMAXCPUS
+  cpu_set_t *plinux_set;
+  unsigned cpu;
+  size_t setsize = CPU_ALLOC_SIZE(HWLOC_NBMAXCPUS);
+
+  plinux_set = CPU_ALLOC(HWLOC_NBMAXCPUS);
+
+  err = sched_getaffinity(tid, setsize, plinux_set);
+
+  if (err < 0) {
+    CPU_FREE(plinux_set);
+    return -1;
+  }
+
+  hwloc_cpuset_zero(hwloc_set);
+  for(cpu=0; cpu<HWLOC_NBMAXCPUS; cpu++)
+    if (CPU_ISSET_S(cpu, setsize, plinux_set))
+      hwloc_cpuset_set(hwloc_set, cpu);
+
+  CPU_FREE(plinux_set);
+#elif defined(HWLOC_HAVE_CPU_SET)
+  cpu_set_t linux_set;
+  unsigned cpu;
+
+#ifdef HWLOC_HAVE_OLD_SCHED_SETAFFINITY
+  err = sched_getaffinity(tid, &linux_set);
+#else /* HWLOC_HAVE_OLD_SCHED_SETAFFINITY */
+  err = sched_getaffinity(tid, sizeof(linux_set), &linux_set);
+#endif /* HWLOC_HAVE_OLD_SCHED_SETAFFINITY */
+  if (err < 0)
+    return -1;
+
+  hwloc_cpuset_zero(hwloc_set);
+  for(cpu=0; cpu<CPU_SETSIZE; cpu++)
+    if (CPU_ISSET(cpu, &linux_set))
+      hwloc_cpuset_set(hwloc_set, cpu);
+#else /* !CPU_SET */
+  unsigned long mask;
+
+#ifdef HWLOC_HAVE_OLD_SCHED_SETAFFINITY
+  err = sched_getaffinity(tid, (void*) &mask);
+#else /* HWLOC_HAVE_OLD_SCHED_SETAFFINITY */
+  err = sched_getaffinity(tid, sizeof(mask), (void*) &mask);
+#endif /* HWLOC_HAVE_OLD_SCHED_SETAFFINITY */
+  if (err < 0)
+    return -1;
+
+  hwloc_cpuset_from_ulong(hwloc_set, mask);
+#endif /* !CPU_SET */
+
+  return 0;
+}
+
+/* Get the array of tids of a process from the task directory in /proc */
 static int
-hwloc_linux_set_cpubind(hwloc_topology_t topology, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_linux_get_proc_tids(DIR *taskdir, unsigned *nr_tidsp, pid_t ** tidsp)
 {
-  return hwloc_linux_set_tid_cpubind(topology, 0, hwloc_set, strict);
+  struct dirent *dirent;
+  unsigned nr_tids = 0;
+  unsigned max_tids = 32;
+  pid_t *tids;
+  struct stat sb;
+
+  /* take the number of links as a good estimate for the number of tids */
+  if (fstat(dirfd(taskdir), &sb) == 0)
+    max_tids = sb.st_nlink;
+
+  tids = malloc(max_tids*sizeof(pid_t));
+  if (!tids) {
+    errno = ENOMEM;
+    return -1;
+  }
+
+  rewinddir(taskdir);
+
+  while ((dirent = readdir(taskdir)) != NULL) {
+    if (nr_tids == max_tids) {
+      pid_t *newtids;
+      max_tids += 8;
+      newtids = realloc(tids, max_tids*sizeof(pid_t));
+      if (!newtids) {
+        free(tids);
+        errno = ENOMEM;
+        return -1;
+      }
+      tids = newtids;
+    }
+    if (!strcmp(dirent->d_name, ".") || !strcmp(dirent->d_name, ".."))
+      continue;
+    tids[nr_tids++] = atoi(dirent->d_name);
+  }
+
+  *nr_tidsp = nr_tids;
+  *tidsp = tids;
+  return 0;
 }
 
+/* Callbacks for binding each process sub-tid */
+typedef int (*hwloc_linux_foreach_proc_tid_cb_t)(hwloc_topology_t topology, pid_t tid, void *data, int idx, int policy);
+
 static int
-hwloc_linux_set_thisthread_cpubind(hwloc_topology_t topology, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_linux_foreach_proc_tid_set_cpubind_cb(hwloc_topology_t topology, pid_t tid, void *data, int idx __hwloc_attribute_unused, int policy __hwloc_attribute_unused)
 {
-  return hwloc_linux_set_tid_cpubind(topology, 0, hwloc_set, strict);
+  hwloc_cpuset_t cpuset = data;
+  return hwloc_linux_set_tid_cpubind(topology, tid, cpuset);
 }
 
+static int
+hwloc_linux_foreach_proc_tid_get_cpubind_cb(hwloc_topology_t topology, pid_t tid, void *data, int idx, int policy)
+{
+  hwloc_cpuset_t *cpusets = data;
+  hwloc_cpuset_t cpuset = cpusets[0];
+  hwloc_cpuset_t tidset = cpusets[1];
+
+  if (hwloc_linux_get_tid_cpubind(topology, tid, tidset))
+    return -1;
+
+  /* reset the cpuset on first iteration */
+  if (!idx)
+    hwloc_cpuset_zero(cpuset);
+
+  if (policy & HWLOC_CPUBIND_STRICT) {
+    /* if STRICT, we want all threads to have the same binding */
+    if (!idx) {
+      /* this is the first thread, copy its binding */
+      hwloc_cpuset_copy(cpuset, tidset);
+    } else if (!hwloc_cpuset_isequal(cpuset, tidset)) {
+      /* this is not the first thread, and it's binding is different */
+      errno = EXDEV;
+      return -1;
+    }
+  } else {
+    /* if not STRICT, just OR all thread bindings */
+    hwloc_cpuset_or(cpuset, cpuset, tidset);
+  }
+  return 0;
+}
+
+/* Call the callback for each process tid. */
+static int
+hwloc_linux_foreach_proc_tid(hwloc_topology_t topology,
+			     pid_t pid, hwloc_linux_foreach_proc_tid_cb_t cb,
+			     void *data, int policy)
+{
+  char taskdir_path[128];
+  DIR *taskdir;
+  pid_t *tids, *newtids;
+  unsigned i, nr, newnr;
+  int err;
+
+  if (pid)
+    snprintf(taskdir_path, sizeof(taskdir_path), "/proc/%u/task", (unsigned) pid);
+  else
+    snprintf(taskdir_path, sizeof(taskdir_path), "/proc/self/task");
+
+  taskdir = opendir(taskdir_path);
+  if (!taskdir) {
+    errno = ENOSYS;
+    err = -1;
+    goto out;
+  }
+
+  /* read the current list of threads */
+  err = hwloc_linux_get_proc_tids(taskdir, &nr, &tids);
+  if (err < 0)
+    goto out_with_dir;
+
+ retry:
+  /* apply the callback to all threads */
+  for(i=0; i<nr; i++) {
+    err = cb(topology, tids[i], data, i, policy);
+    if (err < 0)
+      goto out_with_tids;
+  }
+
+  /* re-read the list of thread and retry if it changed in the meantime */
+  err = hwloc_linux_get_proc_tids(taskdir, &newnr, &newtids);
+  if (err < 0)
+    goto out_with_tids;
+  if (newnr != nr || memcmp(newtids, tids, nr*sizeof(pid_t))) {
+    free(tids);
+    tids = newtids;
+    nr = newnr;
+    goto retry;
+  }
+
+  err = 0;
+  free(newtids);
+ out_with_tids:
+  free(tids);
+ out_with_dir:
+  closedir(taskdir);
+ out:
+  return err;
+}
+
+static int
+hwloc_linux_set_pid_cpubind(hwloc_topology_t topology, pid_t pid, hwloc_const_cpuset_t hwloc_set, int policy)
+{
+  return hwloc_linux_foreach_proc_tid(topology, pid,
+				      hwloc_linux_foreach_proc_tid_set_cpubind_cb,
+				      (void*) hwloc_set, policy);
+}
+
+static int
+hwloc_linux_get_pid_cpubind(hwloc_topology_t topology, pid_t pid, hwloc_cpuset_t hwloc_set, int policy)
+{
+  hwloc_cpuset_t tidset = hwloc_cpuset_alloc();
+  hwloc_cpuset_t cpusets[2] = { hwloc_set, tidset };
+  int ret;
+  ret = hwloc_linux_foreach_proc_tid(topology, pid,
+					 hwloc_linux_foreach_proc_tid_get_cpubind_cb,
+					 (void*) cpusets, policy);
+  hwloc_cpuset_free(tidset);
+  return ret;
+}
+
+static int
+hwloc_linux_set_proc_cpubind(hwloc_topology_t topology, pid_t pid, hwloc_const_cpuset_t hwloc_set, int policy)
+{
+  if (pid == 0)
+    pid = topology->pid;
+  if (policy & HWLOC_CPUBIND_THREAD)
+    return hwloc_linux_set_tid_cpubind(topology, pid, hwloc_set);
+  else
+    return hwloc_linux_set_pid_cpubind(topology, pid, hwloc_set, policy);
+}
+
+static int
+hwloc_linux_get_proc_cpubind(hwloc_topology_t topology, pid_t pid, hwloc_cpuset_t hwloc_set, int policy)
+{
+  if (pid == 0)
+    pid = topology->pid;
+  if (policy & HWLOC_CPUBIND_THREAD)
+    return hwloc_linux_get_tid_cpubind(topology, pid, hwloc_set);
+  else
+    return hwloc_linux_get_pid_cpubind(topology, pid, hwloc_set, policy);
+}
+
+static int
+hwloc_linux_set_thisproc_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t hwloc_set, int policy)
+{
+  return hwloc_linux_set_pid_cpubind(topology, topology->pid, hwloc_set, policy);
+}
+
+static int
+hwloc_linux_get_thisproc_cpubind(hwloc_topology_t topology, hwloc_cpuset_t hwloc_set, int policy)
+{
+  return hwloc_linux_get_pid_cpubind(topology, topology->pid, hwloc_set, policy);
+}
+
+static int
+hwloc_linux_set_thisthread_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t hwloc_set, int policy __hwloc_attribute_unused)
+{
+  if (topology->pid) {
+    errno = ENOSYS;
+    return -1;
+  }
+  return hwloc_linux_set_tid_cpubind(topology, 0, hwloc_set);
+}
+
+static int
+hwloc_linux_get_thisthread_cpubind(hwloc_topology_t topology, hwloc_cpuset_t hwloc_set, int policy __hwloc_attribute_unused)
+{
+  if (topology->pid) {
+    errno = ENOSYS;
+    return -1;
+  }
+  return hwloc_linux_get_tid_cpubind(topology, 0, hwloc_set);
+}
+
 #if HAVE_DECL_PTHREAD_SETAFFINITY_NP
 #pragma weak pthread_setaffinity_np
 
 static int
-hwloc_linux_set_thread_cpubind(hwloc_topology_t topology, pthread_t tid, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_linux_set_thread_cpubind(hwloc_topology_t topology, pthread_t tid, hwloc_const_cpuset_t hwloc_set, int policy __hwloc_attribute_unused)
 {
+  int err;
+
+  if (topology->pid) {
+    errno = ENOSYS;
+    return -1;
+  }
+
+  if (tid == pthread_self())
+    return hwloc_linux_set_tid_cpubind(topology, 0, hwloc_set);
+
   if (!pthread_setaffinity_np) {
     /* ?! Application uses set_thread_cpubind, but doesn't link against libpthread ?! */
     errno = ENOSYS;
@@ -188,33 +550,116 @@
    */
 
 #ifdef HWLOC_HAVE_CPU_SET
-  cpu_set_t linux_set;
-  unsigned cpu;
+  /* Use a separate block so that we can define specific variable
+     types here */
+  {
+     cpu_set_t linux_set;
+     unsigned cpu;
 
-  CPU_ZERO(&linux_set);
-  hwloc_cpuset_foreach_begin(cpu, hwloc_set)
-    CPU_SET(cpu, &linux_set);
-  hwloc_cpuset_foreach_end();
+     CPU_ZERO(&linux_set);
+     hwloc_cpuset_foreach_begin(cpu, hwloc_set)
+         CPU_SET(cpu, &linux_set);
+     hwloc_cpuset_foreach_end();
 
-#ifdef HAVE_OLD_SCHED_SETAFFINITY
-  return pthread_setaffinity_np(tid, &linux_set);
-#else /* HAVE_OLD_SCHED_SETAFFINITY */
-  return pthread_setaffinity_np(tid, sizeof(linux_set), &linux_set);
-#endif /* HAVE_OLD_SCHED_SETAFFINITY */
+#ifdef HWLOC_HAVE_OLD_SCHED_SETAFFINITY
+     err = pthread_setaffinity_np(tid, &linux_set);
+#else /* HWLOC_HAVE_OLD_SCHED_SETAFFINITY */
+     err = pthread_setaffinity_np(tid, sizeof(linux_set), &linux_set);
+#endif /* HWLOC_HAVE_OLD_SCHED_SETAFFINITY */
+  }
 #else /* CPU_SET */
-  unsigned long mask = hwloc_cpuset_to_ulong(hwloc_set);
+  /* Use a separate block so that we can define specific variable
+     types here */
+  {
+      unsigned long mask = hwloc_cpuset_to_ulong(hwloc_set);
 
-#ifdef HAVE_OLD_SCHED_SETAFFINITY
-  return pthread_setaffinity_np(tid, (void*) &mask);
-#else /* HAVE_OLD_SCHED_SETAFFINITY */
-  return pthread_setaffinity_np(tid, sizeof(mask), (void*) &mask);
-#endif /* HAVE_OLD_SCHED_SETAFFINITY */
+#ifdef HWLOC_HAVE_OLD_SCHED_SETAFFINITY
+      err = pthread_setaffinity_np(tid, (void*) &mask);
+#else /* HWLOC_HAVE_OLD_SCHED_SETAFFINITY */
+      err = pthread_setaffinity_np(tid, sizeof(mask), (void*) &mask);
+#endif /* HWLOC_HAVE_OLD_SCHED_SETAFFINITY */
+  }
 #endif /* CPU_SET */
+
+  if (err) {
+    errno = err;
+    return -1;
+  }
+  return 0;
 }
 #endif /* HAVE_DECL_PTHREAD_SETAFFINITY_NP */
 
+#if HAVE_DECL_PTHREAD_GETAFFINITY_NP
+#pragma weak pthread_getaffinity_np
+
+static int
+hwloc_linux_get_thread_cpubind(hwloc_topology_t topology, pthread_t tid, hwloc_cpuset_t hwloc_set, int policy __hwloc_attribute_unused)
+{
+  int err;
+
+  if (topology->pid) {
+    errno = ENOSYS;
+    return -1;
+  }
+
+  if (tid == pthread_self())
+    return hwloc_linux_get_tid_cpubind(topology, 0, hwloc_set);
+
+  if (!pthread_getaffinity_np) {
+    /* ?! Application uses get_thread_cpubind, but doesn't link against libpthread ?! */
+    errno = ENOSYS;
+    return -1;
+  }
+  /* TODO Kerrighed */
+
+#ifdef HWLOC_HAVE_CPU_SET
+  /* Use a separate block so that we can define specific variable
+     types here */
+  {
+     cpu_set_t linux_set;
+     unsigned cpu;
+
+#ifdef HWLOC_HAVE_OLD_SCHED_SETAFFINITY
+     err = pthread_getaffinity_np(tid, &linux_set);
+#else /* HWLOC_HAVE_OLD_SCHED_SETAFFINITY */
+     err = pthread_getaffinity_np(tid, sizeof(linux_set), &linux_set);
+#endif /* HWLOC_HAVE_OLD_SCHED_SETAFFINITY */
+     if (err) {
+        errno = err;
+        return -1;
+     }
+
+     hwloc_cpuset_zero(hwloc_set);
+     for(cpu=0; cpu<CPU_SETSIZE; cpu++)
+       if (CPU_ISSET(cpu, &linux_set))
+	 hwloc_cpuset_set(hwloc_set, cpu);
+  }
+#else /* CPU_SET */
+  /* Use a separate block so that we can define specific variable
+     types here */
+  {
+      unsigned long mask;
+
+#ifdef HWLOC_HAVE_OLD_SCHED_SETAFFINITY
+      err = pthread_getaffinity_np(tid, (void*) &mask);
+#else /* HWLOC_HAVE_OLD_SCHED_SETAFFINITY */
+      err = pthread_getaffinity_np(tid, sizeof(mask), (void*) &mask);
+#endif /* HWLOC_HAVE_OLD_SCHED_SETAFFINITY */
+      if (err) {
+        errno = err;
+        return -1;
+      }
+
+     hwloc_cpuset_from_ulong(hwloc_set, mask);
+  }
+#endif /* CPU_SET */
+
+  return 0;
+}
+#endif /* HAVE_DECL_PTHREAD_GETAFFINITY_NP */
+
 int
-hwloc_backend_sysfs_init(struct hwloc_topology *topology, const char *fsroot_path)
+hwloc_backend_sysfs_init(struct hwloc_topology *topology, const char *fsroot_path __hwloc_attribute_unused)
 {
 #ifdef HAVE_OPENAT
   int root;
@@ -278,26 +723,25 @@
 #define KERNEL_CPU_MAP_LEN (KERNEL_CPU_MASK_BITS/4+2)
 #define MAX_KERNEL_CPU_MASK ((HWLOC_NBMAXCPUS+KERNEL_CPU_MASK_BITS-1)/KERNEL_CPU_MASK_BITS)
 
-hwloc_cpuset_t
-hwloc_linux_parse_cpumap_file(FILE *file)
+int
+hwloc_linux_parse_cpumap_file(FILE *file, hwloc_cpuset_t set)
 {
-  char string[KERNEL_CPU_MAP_LEN]; /* enough for a shared map mask (32bits hexa) */
   unsigned long maps[MAX_KERNEL_CPU_MASK];
-  hwloc_cpuset_t set;
+  unsigned long map;
   int nr_maps = 0;
+  int n;
 
   int i;
 
-  /* allocate and reset to zero first */
-  set = hwloc_cpuset_alloc();
+  /* reset to zero first */
+  hwloc_cpuset_zero(set);
 
   /* parse the whole mask */
-  while (fgets(string, KERNEL_CPU_MAP_LEN, file) && *string != '\0') /* read one kernel cpu mask and the ending comma */
+  while (fscanf(file, "%lx,", &map) == 1) /* read one kernel cpu mask and the ending comma */
     {
-      unsigned long map;
-      assert(!(nr_maps == MAX_KERNEL_CPU_MASK)); /* too many cpumasks in this cpumap */
+      if (nr_maps == MAX_KERNEL_CPU_MASK)
+        break; /* too many cpumasks in this cpumap */
 
-      map = strtoul(string, NULL, 16);
       if (!map && !nr_maps)
 	/* ignore the first map if it's empty */
 	continue;
@@ -308,14 +752,16 @@
     }
 
   /* check that the map can be stored in our cpuset */
-  assert(!(nr_maps*KERNEL_CPU_MASK_BITS > HWLOC_NBMAXCPUS));
+  n = nr_maps*KERNEL_CPU_MASK_BITS;
+  if (n > HWLOC_NBMAXCPUS)
+    n = HWLOC_NBMAXCPUS;
 
   /* convert into a set */
-  for(i=0; i<nr_maps*KERNEL_CPU_MASK_BITS; i++)
+  for(i=0; i<n; i++)
     if (maps[i/KERNEL_CPU_MASK_BITS] & 1<<(i%KERNEL_CPU_MASK_BITS))
       hwloc_cpuset_set(set, i);
 
-  return set;
+  return 0;
 }
 
 static hwloc_cpuset_t
@@ -328,78 +774,245 @@
   if (!file)
     return NULL;
 
-  set = hwloc_linux_parse_cpumap_file(file);
+  set = hwloc_cpuset_alloc();
+  hwloc_linux_parse_cpumap_file(file, set);
 
   fclose(file);
   return set;
 }
 
-static int
-hwloc_read_cpuset_mask(const char *filename, const char *type, char *info, int infomax, int fsroot_fd)
+static char *
+hwloc_strdup_mntpath(const char *escapedpath, size_t length)
 {
-#define CPUSET_NAME_LEN 64
+  char *path = malloc(length+1);
+  const char *src = escapedpath, *tmp = src;
+  char *dst = path;
+
+  while ((tmp = strchr(src, '\\')) != NULL) {
+    strncpy(dst, src, tmp-src);
+    dst += tmp-src;
+    if (!strncmp(tmp+1, "040", 3))
+      *dst = ' ';
+    else if (!strncmp(tmp+1, "011", 3))
+      *dst = '	';
+    else if (!strncmp(tmp+1, "012", 3))
+      *dst = '\n';
+    else
+      *dst = '\\';
+    dst++;
+    src = tmp+4;
+  }
+
+  strcpy(dst, src);
+
+  return path;
+}
+
+static void
+hwloc_find_linux_cpuset_mntpnt(char **cgroup_mntpnt, char **cpuset_mntpnt, int fsroot_fd)
+{
+#define PROC_MOUNT_LINE_LEN 128
+  char line[PROC_MOUNT_LINE_LEN];
+  FILE *fd;
+
+  *cgroup_mntpnt = NULL;
+  *cpuset_mntpnt = NULL;
+
+  /* ideally we should use setmntent, getmntent, hasmntopt and endmntent,
+   * but they do not support fsroot_fd.
+   */
+
+  fd = hwloc_fopen("/proc/mounts", "r", fsroot_fd);
+  if (!fd)
+    return;
+
+  while (fgets(line, sizeof(line), fd)) {
+    char *path;
+    char *type;
+    char *tmp;
+
+    /* path is after first field and a space */
+    tmp = strchr(line, ' ');
+    if (!tmp)
+      continue;
+    path = tmp+1;
+
+    /* type is after path, which may not contain spaces since the kernel escaped them to \040
+     * (see the manpage of getmntent) */
+    tmp = strchr(path, ' ');
+    if (!tmp)
+      continue;
+    type = tmp+1;
+    /* mark the end of path to ease upcoming strdup */
+    *tmp = '\0';
+
+    if (!strncmp(type, "cpuset ", 7)) {
+      /* found a cpuset mntpnt */
+      hwloc_debug("Found cpuset mount point on %s\n", path);
+      *cpuset_mntpnt = hwloc_strdup_mntpath(path, type-path);
+      break;
+    } else if (!strncmp(type, "cgroup ", 7)) {
+      /* found a cgroup mntpnt */
+      char *opt, *opts;
+
+      /* find options */
+      tmp = strchr(type, ' ');
+      if (!tmp)
+	continue;
+      opts = tmp+1;
+
+      /* find "cpuset" option */
+      while ((opt = strsep(&opts, ",")) && strcmp(opt, "cpuset"))
+        ; /* continue */
+      if (!opt)
+	continue;
+
+      hwloc_debug("Found cgroup/cpuset mount point on %s\n", path);
+      *cgroup_mntpnt = hwloc_strdup_mntpath(path, type-path);
+      break;
+    }
+  }
+
+  fclose(fd);
+}
+
+/*
+ * Linux cpusets may be managed directly or through cgroup.
+ * If cgroup is used, tasks get a /proc/pid/cgroup which may contain a
+ * single line %d:cpuset:<name>. If cpuset are used they get /proc/pid/cpuset
+ * containing <name>.
+ */
+static char *
+hwloc_read_linux_cpuset_name(int fsroot_fd, hwloc_pid_t pid)
+{
+#define CPUSET_NAME_LEN 128
   char cpuset_name[CPUSET_NAME_LEN];
-#define CPUSET_FILENAME_LEN 64
-  char cpuset_filename[CPUSET_FILENAME_LEN];
+  FILE *fd;
   char *tmp;
-  FILE *fd;
 
+  /* check whether a cgroup-cpuset is enabled */
+  if (!pid)
+    fd = hwloc_fopen("/proc/self/cgroup", "r", fsroot_fd);
+  else {
+    char path[] = "/proc/XXXXXXXXXX/cgroup";
+    snprintf(path, sizeof(path), "/proc/%d/cgroup", pid);
+    fd = hwloc_fopen(path, "r", fsroot_fd);
+  }
+  if (fd) {
+    /* find a cpuset line */
+#define CGROUP_LINE_LEN 256
+    char line[CGROUP_LINE_LEN];
+    while (fgets(line, sizeof(line), fd)) {
+      char *end, *colon = strchr(line, ':');
+      if (!colon)
+	continue;
+      if (strncmp(colon, ":cpuset:", 8))
+	continue;
+
+      /* found a cgroup-cpuset line, return the name */
+      fclose(fd);
+      end = strchr(colon, '\n');
+      if (end)
+	*end = '\0';
+      hwloc_debug("Found cgroup-cpuset %s\n", colon+8);
+      return strdup(colon+8);
+    }
+    fclose(fd);
+  }
+
   /* check whether a cpuset is enabled */
-  fd = hwloc_fopen(filename, "r", fsroot_fd);
-  if (!fd)
-    return 0;
+  if (!pid)
+    fd = hwloc_fopen("/proc/self/cpuset", "r", fsroot_fd);
+  else {
+    char path[] = "/proc/XXXXXXXXXX/cpuset";
+    snprintf(path, sizeof(path), "/proc/%d/cpuset", pid);
+    fd = hwloc_fopen(path, "r", fsroot_fd);
+  }
+  if (!fd) {
+    /* found nothing */
+    hwloc_debug("%s", "No cgroup or cpuset found\n");
+    return NULL;
+  }
 
+  /* found a cpuset, return the name */
   tmp = fgets(cpuset_name, sizeof(cpuset_name), fd);
   fclose(fd);
   if (!tmp)
-    return 0;
-
+    return NULL;
   tmp = strchr(cpuset_name, '\n');
   if (tmp)
     *tmp = '\0';
+  hwloc_debug("Found cpuset %s\n", cpuset_name);
+  return strdup(cpuset_name);
+}
 
-  /* read the cpuset */
-  snprintf(cpuset_filename, CPUSET_FILENAME_LEN, "/dev/cpuset%s/%s", cpuset_name, type);
-  hwloc_debug("Trying to read cpuset file <%s>\n", cpuset_filename);
-  fd = hwloc_fopen(cpuset_filename, "r", fsroot_fd);
-  if (!fd) {
-    snprintf(cpuset_filename, CPUSET_FILENAME_LEN, "/cpusets%s/%s", cpuset_name, type);
+/*
+ * Then, the cpuset description is available from either the cgroup or
+ * the cpuset filesystem (usually mounted in / or /dev) where there
+ * are cgroup<name>/cpuset.{cpus,mems} or cpuset<name>/{cpus,mems} files.
+ */
+static char *
+hwloc_read_linux_cpuset_mask(const char *cgroup_mntpnt, const char *cpuset_mntpnt, const char *cpuset_name, const char *attr_name, int fsroot_fd)
+{
+#define CPUSET_FILENAME_LEN 256
+  char cpuset_filename[CPUSET_FILENAME_LEN];
+  FILE *fd;
+  char *info = NULL, *tmp;
+  ssize_t ssize;
+  size_t size;
+
+  if (cgroup_mntpnt) {
+    /* try to read the cpuset from cgroup */
+    snprintf(cpuset_filename, CPUSET_FILENAME_LEN, "%s%s/cpuset.%s", cgroup_mntpnt, cpuset_name, attr_name);
+    hwloc_debug("Trying to read cgroup file <%s>\n", cpuset_filename);
+    fd = hwloc_fopen(cpuset_filename, "r", fsroot_fd);
+    if (fd)
+      goto gotfile;
+  } else if (cpuset_mntpnt) {
+    /* try to read the cpuset directly */
+    snprintf(cpuset_filename, CPUSET_FILENAME_LEN, "%s%s/%s", cpuset_mntpnt, cpuset_name, attr_name);
     hwloc_debug("Trying to read cpuset file <%s>\n", cpuset_filename);
     fd = hwloc_fopen(cpuset_filename, "r", fsroot_fd);
+    if (fd)
+      goto gotfile;
   }
 
-  if (!fd)
-    return 0;
+  /* found no cpuset description, ignore it */
+  hwloc_debug("Couldn't find cpuset <%s> description, ignoring\n", cpuset_name);
+  goto out;
 
-  tmp = fgets(info, infomax, fd);
+gotfile:
+  ssize = getline(&info, &size, fd);
   fclose(fd);
-  if (!tmp)
-    return 0;
+  if (ssize < 0)
+    goto out;
+  if (!info)
+    goto out;
 
   tmp = strchr(info, '\n');
   if (tmp)
     *tmp = '\0';
 
-  return 1;
+out:
+  return info;
 }
 
 static void
 hwloc_admin_disable_set_from_cpuset(struct hwloc_topology *topology,
-				   const char *path,
-				   const char *name,
-				   hwloc_cpuset_t admin_disabled_set)
+				    const char *cgroup_mntpnt, const char *cpuset_mntpnt, const char *cpuset_name,
+				    const char *attr_name,
+				    hwloc_cpuset_t admin_enabled_cpus_set)
 {
-#define CPUSET_MASK_LEN 64
-  char cpuset_mask[CPUSET_MASK_LEN];
+  char *cpuset_mask;
   char *current, *comma, *tmp;
   int prevlast, nextfirst, nextlast; /* beginning/end of enabled-segments */
-  int ret;
 
-  ret = hwloc_read_cpuset_mask(path, name, cpuset_mask, CPUSET_MASK_LEN, topology->backend_params.sysfs.root_fd);
-  if (!ret)
+  cpuset_mask = hwloc_read_linux_cpuset_mask(cgroup_mntpnt, cpuset_mntpnt, cpuset_name,
+					     attr_name, topology->backend_params.sysfs.root_fd);
+  if (!cpuset_mask)
     return;
 
-  hwloc_debug("found cpuset %s: %s\n", name, cpuset_mask);
+  hwloc_debug("found cpuset %s: %s\n", attr_name, cpuset_mask);
 
   current = cpuset_mask;
   prevlast = -1;
@@ -417,8 +1030,8 @@
     else
       nextlast = nextfirst;
     if (prevlast+1 <= nextfirst-1) {
-      hwloc_debug("%s [%d:%d] excluded by cpuset\n", name, prevlast+1, nextfirst-1);
-      hwloc_cpuset_set_range(admin_disabled_set, prevlast+1, nextfirst-1);
+      hwloc_debug("%s [%d:%d] excluded by cpuset\n", attr_name, prevlast+1, nextfirst-1);
+      hwloc_cpuset_clr_range(admin_enabled_cpus_set, prevlast+1, nextfirst-1);
     }
 
     /* switch to next enabled-segment */
@@ -431,36 +1044,50 @@
   /* disable after last enabled-segment */
   nextfirst = HWLOC_NBMAXCPUS;
   if (prevlast+1 <= nextfirst-1) {
-    hwloc_debug("%s [%d:%d] excluded by cpuset\n", name, prevlast+1, nextfirst-1);
-    hwloc_cpuset_set_range(admin_disabled_set, prevlast+1, nextfirst-1);
+    hwloc_debug("%s [%d:%d] excluded by cpuset\n", attr_name, prevlast+1, nextfirst-1);
+    hwloc_cpuset_clr_range(admin_enabled_cpus_set, prevlast+1, nextfirst-1);
   }
+
+  free(cpuset_mask);
 }
 
 static void
 hwloc_get_procfs_meminfo_info(struct hwloc_topology *topology,
-			     const char *path,
-			     unsigned long *mem_size_kB,
-			     unsigned long *huge_page_size_kB,
-			     unsigned long *huge_page_free)
+			     const char *path, struct hwloc_obj_memory_s *memory)
 {
   char string[64];
   FILE *fd;
 
+  if (topology->is_thissystem) {
+    memory->page_types_len = 2;
+    memory->page_types = malloc(2*sizeof(*memory->page_types));
+    memset(memory->page_types, 0, 2*sizeof(*memory->page_types));
+
+  /* Try to get the hugepage size from sysconf in case we fail to get it from /proc/meminfo later */
+#ifdef HAVE__SC_LARGE_PAGESIZE
+    memory->page_types[1].size = sysconf(_SC_LARGE_PAGESIZE);
+#endif
+    memory->page_types[0].size = getpagesize();
+  }
+
   fd = hwloc_fopen(path, "r", topology->backend_params.sysfs.root_fd);
   if (!fd)
     return;
 
   while (fgets(string, sizeof(string), fd) && *string != '\0')
     {
-      unsigned long number;
-      if (sscanf(string, "MemTotal: %lu kB", &number) == 1)
-	*mem_size_kB = number;
-      else if (sscanf(string, "Hugepagesize: %lu", &number) == 1)
-	*huge_page_size_kB = number;
-      else if (sscanf(string, "HugePages_Free: %lu", &number) == 1)
-	*huge_page_free = number;
+      unsigned long long number;
+      if (sscanf(string, "MemTotal: %llu kB", &number) == 1)
+	memory->local_memory = number << 10;
+      else if (memory->page_types && sscanf(string, "Hugepagesize: %llu", &number) == 1)
+	memory->page_types[1].size = number << 10;
+      else if (memory->page_types && sscanf(string, "HugePages_Free: %llu", &number) == 1)
+	memory->page_types[1].count = number;
     }
 
+  if (memory->page_types)
+    memory->page_types[0].count = (memory->local_memory - memory->page_types[1].count*memory->page_types[1].size) / memory->page_types[0].size;
+
   fclose(fd);
 }
 
@@ -468,10 +1095,8 @@
 
 static void
 hwloc_sysfs_node_meminfo_info(struct hwloc_topology *topology,
-			     const char *syspath,
-			     int node,
-			     unsigned long *mem_size_kB,
-			     unsigned long *huge_page_free)
+			     const char *syspath, int node,
+			     struct hwloc_obj_memory_s *memory)
 {
   char path[SYSFS_NUMA_NODE_PATH_LEN];
   char string[64];
@@ -482,15 +1107,28 @@
   if (!fd)
     return;
 
+  if (topology->is_thissystem) {
+    memory->page_types_len = 2;
+    memory->page_types = malloc(2*sizeof(*memory->page_types));
+    memset(memory->page_types, 0, 2*sizeof(*memory->page_types));
+  }
+
   while (fgets(string, sizeof(string), fd) && *string != '\0')
     {
-      unsigned long number;
-      if (sscanf(string, "Node %d MemTotal: %lu kB", &node, &number) == 2)
-	*mem_size_kB = number;
-      else if (sscanf(string, "Node %d HugePages_Free: %lu kB", &node, &number) == 2)
-	*huge_page_free = number;
+      unsigned long long number;
+      if (sscanf(string, "Node %d MemTotal: %llu kB", &node, &number) == 2)
+	memory->local_memory = number << 10;
+      else if (memory->page_types && sscanf(string, "Node %d HugePages_Free: %llu kB", &node, &number) == 2)
+	memory->page_types[1].count = number;
     }
 
+  if (memory->page_types) {
+    /* hwloc_get_procfs_meminfo_info must have been called earlier */
+    memory->page_types[1].size = topology->levels[0][0]->memory.page_types[1].size;
+    memory->page_types[0].size = getpagesize();
+    memory->page_types[0].count = (memory->local_memory - memory->page_types[1].count*memory->page_types[1].size) / memory->page_types[0].size;
+  }
+
   fclose(fd);
 }
 
@@ -525,10 +1163,7 @@
 }
 
 static void
-look_sysfsnode(struct hwloc_topology *topology,
-	       const char *path,
-	       hwloc_cpuset_t admin_disabled_cpus_set,
-	       hwloc_cpuset_t admin_disabled_mems_set)
+look_sysfsnode(struct hwloc_topology *topology, const char *path, unsigned *found)
 {
   unsigned osnode;
   unsigned nbnodes = 1;
@@ -536,6 +1171,8 @@
   struct dirent *dirent;
   hwloc_obj_t node;
 
+  *found = 0;
+
   dir = hwloc_opendir(path, topology->backend_params.sysfs.root_fd);
   if (dir)
     {
@@ -562,47 +1199,39 @@
       for (osnode=0; osnode < nbnodes; osnode++) {
           char nodepath[SYSFS_NUMA_NODE_PATH_LEN];
           hwloc_cpuset_t cpuset;
-          unsigned long size = -1;
-          unsigned long hpfree = -1;
-          
+
           sprintf(nodepath, "%s/node%u/cpumap", path, osnode);
           cpuset = hwloc_parse_cpumap(nodepath, topology->backend_params.sysfs.root_fd);
           if (!cpuset)
               continue;
-          
-          /* clear disabled cpus */
-          hwloc_cpuset_clearset(cpuset, admin_disabled_cpus_set);
-          
-          if (hwloc_cpuset_isset(admin_disabled_mems_set, osnode)) {
-              size = 0; hpfree = 0;
-          } else
-              hwloc_sysfs_node_meminfo_info(topology, path, osnode, &size, &hpfree);
-          
+
           node = hwloc_alloc_setup_object(HWLOC_OBJ_NODE, osnode);
           node->cpuset = cpuset;
-          node->attr->node.memory_kB = size;
-          node->attr->node.huge_page_free = hpfree;
-          node->cpuset = cpuset;
-          
+          node->nodeset = hwloc_cpuset_alloc();
+          hwloc_cpuset_set(node->nodeset, osnode);
+
+          hwloc_sysfs_node_meminfo_info(topology, path, osnode, &node->memory);
+
           hwloc_debug_1arg_cpuset("os node %u has cpuset %s\n",
                                   osnode, node->cpuset);
-          hwloc_add_object(topology, node);
+          hwloc_insert_object_by_cpuset(topology, node);
           nodes[osnode] = node;
-          
+
           sprintf(nodepath, "%s/node%u/distance", path, osnode);
           hwloc_parse_node_distance(nodepath, nbnodes, distances[osnode], topology->backend_params.sysfs.root_fd);
       }
-      
+
       hwloc_setup_misc_level_from_distances(topology, nbnodes, nodes, (unsigned*) distances);
   }
+
+  *found = nbnodes;
 }
 
 /* Look at Linux' /sys/devices/system/cpu/cpu%d/topology/ */
 static void
-look_sysfscpu(struct hwloc_topology *topology, const char *path,
-	      hwloc_cpuset_t admin_disabled_cpus_set)
+look_sysfscpu(struct hwloc_topology *topology, const char *path)
 {
-  hwloc_cpuset_t cpuset;
+  hwloc_cpuset_t cpuset; /* Set of cpus for which we have topology information */
 #define CPU_TOPOLOGY_STR_LEN 128
   char str[CPU_TOPOLOGY_STR_LEN];
   DIR *dir;
@@ -623,23 +1252,13 @@
 	continue;
       cpu = strtoul(dirent->d_name+3, NULL, 0);
 
-      assert(cpu < HWLOC_NBMAXCPUS);
+      if (cpu >= HWLOC_NBMAXCPUS)
+        continue;
 
-      /* check whether cpusets exclude this cpu */
-      if (hwloc_cpuset_isset(admin_disabled_cpus_set, cpu)) {
-	hwloc_debug("os proc %lu is disabled by the administrator\n", cpu);
-	continue;
-      }
+      /* Maybe we don't have topology information but at least it exists */
+      hwloc_cpuset_set(topology->levels[0][0]->complete_cpuset, cpu);
 
-      /* check whether the kernel exports topology information for this cpu */
-      sprintf(str, "%s/cpu%lu/topology", path, cpu);
-      if (hwloc_access(str, X_OK, topology->backend_params.sysfs.root_fd) < 0 && errno == ENOENT) {
-	hwloc_debug("os proc %lu has no accessible %s/cpu%lu/topology\n",
-		   cpu, path, cpu);
-	continue;
-      }
-
-      /* check whether this processor is offline */
+      /* check whether this processor is online */
       sprintf(str, "%s/cpu%lu/online", path, cpu);
       fd = hwloc_fopen(str, "r", topology->backend_params.sysfs.root_fd);
       if (fd) {
@@ -649,19 +1268,28 @@
 	    hwloc_debug("os proc %lu is online\n", cpu);
 	  } else {
 	    hwloc_debug("os proc %lu is offline\n", cpu);
-	    continue;
+            hwloc_cpuset_clr(topology->levels[0][0]->online_cpuset, cpu);
 	  }
 	} else {
 	  fclose(fd);
 	}
       }
 
+      /* check whether the kernel exports topology information for this cpu */
+      sprintf(str, "%s/cpu%lu/topology", path, cpu);
+      if (hwloc_access(str, X_OK, topology->backend_params.sysfs.root_fd) < 0 && errno == ENOENT) {
+	hwloc_debug("os proc %lu has no accessible %s/cpu%lu/topology\n",
+		   cpu, path, cpu);
+	continue;
+      }
+
       hwloc_cpuset_set(cpuset, cpu);
     }
     closedir(dir);
   }
 
-  hwloc_debug_1arg_cpuset("found %d cpus, cpuset %s\n",
+  topology->support.discovery->pu = 1;
+  hwloc_debug_1arg_cpuset("found %d cpu topologies, cpuset %s\n",
 	     hwloc_cpuset_weight(cpuset), cpuset);
 
   hwloc_cpuset_foreach_begin(i, cpuset)
@@ -677,20 +1305,18 @@
 
       sprintf(str, "%s/cpu%d/topology/core_siblings", path, i);
       socketset = hwloc_parse_cpumap(str, topology->backend_params.sysfs.root_fd);
-      assert(socketset);
-      hwloc_cpuset_clearset(socketset, admin_disabled_cpus_set);
-      assert(hwloc_cpuset_weight(socketset) >= 1);
+      if (socketset && hwloc_cpuset_weight(socketset) >= 1) {
+        if (hwloc_cpuset_first(socketset) == i) {
+          /* first cpu in this socket, add the socket */
+          socket = hwloc_alloc_setup_object(HWLOC_OBJ_SOCKET, mysocketid);
+          socket->cpuset = socketset;
+          hwloc_debug_1arg_cpuset("os socket %u has cpuset %s\n",
+                     mysocketid, socketset);
+          hwloc_insert_object_by_cpuset(topology, socket);
+        } else
+          hwloc_cpuset_free(socketset);
+      }
 
-      if (hwloc_cpuset_first(socketset) == i) {
-	/* first cpu in this socket, add the socket */
-	socket = hwloc_alloc_setup_object(HWLOC_OBJ_SOCKET, mysocketid);
-	socket->cpuset = socketset;
-        hwloc_debug_1arg_cpuset("os socket %u has cpuset %s\n",
-		   mysocketid, socketset);
-	hwloc_add_object(topology, socket);
-      } else
-	free(socketset);
-
       /* look at the core */
       mycoreid = 0; /* shut-up the compiler */
       sprintf(str, "%s/cpu%d/topology/core_id", path, i);
@@ -698,31 +1324,27 @@
 
       sprintf(str, "%s/cpu%d/topology/thread_siblings", path, i);
       coreset = hwloc_parse_cpumap(str, topology->backend_params.sysfs.root_fd);
-      assert(coreset);
-      hwloc_cpuset_clearset(coreset, admin_disabled_cpus_set);
-      assert(hwloc_cpuset_weight(coreset) >= 1);
+      if (coreset && hwloc_cpuset_weight(coreset) >= 1) {
+        if (hwloc_cpuset_first(coreset) == i) {
+          core = hwloc_alloc_setup_object(HWLOC_OBJ_CORE, mycoreid);
+          core->cpuset = coreset;
+          hwloc_debug_1arg_cpuset("os core %u has cpuset %s\n",
+                     mycoreid, coreset);
+          hwloc_insert_object_by_cpuset(topology, core);
+        } else
+          hwloc_cpuset_free(coreset);
+      }
 
-      if (hwloc_cpuset_first(coreset) == i) {
-	core = hwloc_alloc_setup_object(HWLOC_OBJ_CORE, mycoreid);
-	core->cpuset = coreset;
-        hwloc_debug_1arg_cpuset("os core %u has cpuset %s\n",
-		   mycoreid, coreset);
-	hwloc_add_object(topology, core);
-      } else
-	free(coreset);
-
       /* look at the thread */
       threadset = hwloc_cpuset_alloc();
       hwloc_cpuset_cpu(threadset, i);
-      hwloc_cpuset_clearset(threadset, admin_disabled_cpus_set);
-      assert(hwloc_cpuset_weight(threadset) == 1);
 
       /* add the thread */
-      thread = hwloc_alloc_setup_object(HWLOC_OBJ_PROC, i);
+      thread = hwloc_alloc_setup_object(HWLOC_OBJ_PU, i);
       thread->cpuset = threadset;
       hwloc_debug_1arg_cpuset("thread %d has cpuset %s\n",
 		 i, threadset);
-      hwloc_add_object(topology, thread);
+      hwloc_insert_object_by_cpuset(topology, thread);
 
       /* look at the caches */
       for(j=0; j<10; j++) {
@@ -772,23 +1394,23 @@
 
 	sprintf(mappath, "%s/cpu%d/cache/index%d/shared_cpu_map", path, i, j);
 	cacheset = hwloc_parse_cpumap(mappath, topology->backend_params.sysfs.root_fd);
-	assert(cacheset);
-	hwloc_cpuset_clearset(cacheset, admin_disabled_cpus_set);
-	if (hwloc_cpuset_weight(cacheset) < 1)
-	  /* mask is wrong (happens on ia64), assumes it's not shared */
-	  hwloc_cpuset_cpu(cacheset, i);
+        if (cacheset) {
+          if (hwloc_cpuset_weight(cacheset) < 1)
+            /* mask is wrong (happens on ia64), assumes it's not shared */
+            hwloc_cpuset_cpu(cacheset, i);
 
-	if (hwloc_cpuset_first(cacheset) == i) {
-	  /* first cpu in this cache, add the cache */
-	  cache = hwloc_alloc_setup_object(HWLOC_OBJ_CACHE, -1);
-	  cache->attr->cache.memory_kB = kB;
-	  cache->attr->cache.depth = depth+1;
-	  cache->cpuset = cacheset;
-          hwloc_debug_1arg_cpuset("cache depth %d has cpuset %s\n",
-		     depth, cacheset);
-	  hwloc_add_object(topology, cache);
-	} else
-	  free(cacheset);
+          if (hwloc_cpuset_first(cacheset) == i) {
+            /* first cpu in this cache, add the cache */
+            cache = hwloc_alloc_setup_object(HWLOC_OBJ_CACHE, -1);
+            cache->attr->cache.size = kB << 10;
+            cache->attr->cache.depth = depth+1;
+            cache->cpuset = cacheset;
+            hwloc_debug_1arg_cpuset("cache depth %d has cpuset %s\n",
+                       depth, cacheset);
+            hwloc_insert_object_by_cpuset(topology, cache);
+          } else
+            hwloc_cpuset_free(cacheset);
+        }
       }
     }
   hwloc_cpuset_foreach_end();
@@ -803,8 +1425,7 @@
 #      define COREID "core id"
 static int
 look_cpuinfo(struct hwloc_topology *topology, const char *path,
-	     hwloc_cpuset_t online_cpuset,
-	     hwloc_cpuset_t admin_disabled_cpus_set)
+	     hwloc_cpuset_t online_cpuset)
 {
   FILE *fd;
   char str[strlen(PHYSID)+1+9+1+1];
@@ -819,10 +1440,12 @@
   unsigned numprocs=0;
   unsigned numsockets=0;
   unsigned numcores=0;
-  long physid;
-  long coreid;
-  long processor = -1;
-  int i;
+  unsigned long physid;
+  unsigned long coreid;
+  unsigned long processor = (unsigned long) -1;
+  unsigned i;
+  hwloc_cpuset_t cpuset;
+  hwloc_obj_t obj;
 
   for (i = 0; i < HWLOC_NBMAXCPUS; i++) {
     proc_physids[i] = -1;
@@ -833,17 +1456,16 @@
     core_osphysids[i] = -1;
   }
 
-  hwloc_cpuset_zero(online_cpuset);
-
   if (!(fd=hwloc_fopen(path,"r", topology->backend_params.sysfs.root_fd)))
     {
-      hwloc_debug("could not open /proc/cpuinfo\n");
+      hwloc_debug("%s", "could not open /proc/cpuinfo\n");
       return -1;
     }
 
+  cpuset = hwloc_cpuset_alloc();
   /* Just record information and count number of sockets and cores */
 
-  hwloc_debug("\n\n * Topology extraction from /proc/cpuinfo *\n\n");
+  hwloc_debug("%s", "\n\n * Topology extraction from /proc/cpuinfo *\n\n");
   while (fgets(str,sizeof(str),fd)!=NULL)
     {
 #      define getprocnb_begin(field, var)		     \
@@ -853,24 +1475,31 @@
 	var = strtoul(c,&endptr,0);			     \
 	if (endptr==c)							\
 	  {								\
-	    fprintf(stderr,"no number in "field" field of /proc/cpuinfo\n"); \
-	    break;							\
+            hwloc_debug("%s", "no number in "field" field of /proc/cpuinfo\n"); \
+            hwloc_cpuset_free(cpuset);					\
+            return -1;							\
 	  }								\
-	else if (var==LONG_MIN)						\
+	else if (var==ULONG_MAX)						\
 	  {								\
-	    fprintf(stderr,"too small "field" number in /proc/cpuinfo\n"); \
-	    break;							\
+            hwloc_debug("%s", "too big "field" number in /proc/cpuinfo\n"); \
+            hwloc_cpuset_free(cpuset);					\
+            return -1;							\
 	  }								\
-	else if (var==LONG_MAX)						\
-	  {								\
-	    fprintf(stderr,"too big "field" number in /proc/cpuinfo\n"); \
-	    break;							\
-	  }								\
-	hwloc_debug(field " %ld\n", var)
+	hwloc_debug(field " %lu\n", var)
 #      define getprocnb_end()			\
       }
       getprocnb_begin(PROCESSOR,processor);
-      hwloc_cpuset_set(online_cpuset, processor);
+      hwloc_cpuset_set(cpuset, processor);
+
+      obj = hwloc_alloc_setup_object(HWLOC_OBJ_PU, processor);
+      obj->cpuset = hwloc_cpuset_alloc();
+      hwloc_cpuset_cpu(obj->cpuset, processor);
+
+      hwloc_debug_2args_cpuset("cpu %u (os %lu) has cpuset %s\n",
+		 numprocs, processor, obj->cpuset);
+      numprocs++;
+      hwloc_insert_object_by_cpuset(topology, obj);
+
       getprocnb_end() else
       getprocnb_begin(PHYSID,physid);
       proc_osphysids[processor]=physid;
@@ -878,7 +1507,7 @@
 	if (physid == osphysids[i])
 	  break;
       proc_physids[processor]=i;
-      hwloc_debug("%ld on socket %d (%lx)\n", processor, i, physid);
+      hwloc_debug("%lu on socket %u (%lx)\n", processor, i, physid);
       if (i==numsockets)
 	osphysids[(numsockets)++] = physid;
       getprocnb_end() else
@@ -887,7 +1516,6 @@
 	if (coreid == oscoreids[i] && proc_osphysids[processor] == core_osphysids[i])
 	  break;
       proc_coreids[processor]=i;
-      hwloc_debug("%ld on core %d (%lx:%x)\n", processor, i, coreid, proc_osphysids[processor]);
       if (i==numcores)
 	{
 	  core_osphysids[numcores] = proc_osphysids[processor];
@@ -905,38 +1533,31 @@
     }
   fclose(fd);
 
+  if (processor == (unsigned long) -1) {
+    hwloc_cpuset_free(cpuset);
+    return -1;
+  }
+
+  topology->support.discovery->pu = 1;
   /* setup the final number of procs */
   procid_max = processor + 1;
-  numprocs = hwloc_cpuset_weight(online_cpuset);
+  hwloc_cpuset_copy(online_cpuset, cpuset);
+  hwloc_cpuset_free(cpuset);
 
-  /* clear admin-disabled cpus */
-  hwloc_cpuset_foreach_begin(i, online_cpuset) {
-    if (hwloc_cpuset_isset(admin_disabled_cpus_set, i)) {
-      hwloc_cpuset_clr(online_cpuset, i);
-      proc_osphysids[i] = -1;
-      proc_physids[i] = -1;
-      proc_coreids[i] = -1;
-    }
-  } hwloc_cpuset_foreach_end();
-
   hwloc_debug("%u online processors found, with id max %u\n", numprocs, procid_max);
-  hwloc_debug_cpuset("online processor cpuset: %s\n",
-	     online_cpuset);
+  hwloc_debug_cpuset("online processor cpuset: %s\n", online_cpuset);
 
-  hwloc_debug("\n * Topology summary *\n");
-  hwloc_debug("%d processors (%d max id)\n", numprocs, procid_max);
+  hwloc_debug("%s", "\n * Topology summary *\n");
+  hwloc_debug("%u processors (%u max id)\n", numprocs, procid_max);
 
-  hwloc_debug("%d sockets\n", numsockets);
+  hwloc_debug("%u sockets\n", numsockets);
   if (numsockets>0)
     hwloc_setup_level(procid_max, numsockets, osphysids, proc_physids, topology, HWLOC_OBJ_SOCKET);
 
-  hwloc_debug("%d cores\n", numcores);
+  hwloc_debug("%u cores\n", numcores);
   if (numcores>0)
     hwloc_setup_level(procid_max, numcores, oscoreids, proc_coreids, topology, HWLOC_OBJ_CORE);
 
-  /* setup the cpu level, removing nonfirst threads */
-  hwloc_setup_proc_level(topology, numprocs, online_cpuset);
-
   return 0;
 }
 
@@ -981,13 +1602,23 @@
 void
 hwloc_look_linux(struct hwloc_topology *topology)
 {
-  hwloc_cpuset_t admin_disabled_cpus_set, admin_disabled_mems_set, online_set;
   DIR *nodes_dir;
+  unsigned nbnodes;
+  char *cpuset_mntpnt, *cgroup_mntpnt, *cpuset_name;
   int err;
 
-  admin_disabled_cpus_set = hwloc_cpuset_alloc();
-  admin_disabled_mems_set = hwloc_cpuset_alloc();
-  online_set = hwloc_cpuset_alloc();
+  /* Gather the list of admin-disabled cpus and mems */
+  hwloc_find_linux_cpuset_mntpnt(&cgroup_mntpnt, &cpuset_mntpnt, topology->backend_params.sysfs.root_fd);
+  if (cgroup_mntpnt || cpuset_mntpnt) {
+    cpuset_name = hwloc_read_linux_cpuset_name(topology->backend_params.sysfs.root_fd, topology->pid);
+    if (cpuset_name) {
+      hwloc_admin_disable_set_from_cpuset(topology, cgroup_mntpnt, cpuset_mntpnt, cpuset_name, "cpus", topology->levels[0][0]->allowed_cpuset);
+      hwloc_admin_disable_set_from_cpuset(topology, cgroup_mntpnt, cpuset_mntpnt, cpuset_name, "mems", topology->levels[0][0]->allowed_nodeset);
+      free(cpuset_name);
+    }
+    free(cgroup_mntpnt);
+    free(cpuset_mntpnt);
+  }
 
   nodes_dir = hwloc_opendir("/proc/nodes", topology->backend_params.sysfs.root_fd);
   if (nodes_dir) {
@@ -995,40 +1626,37 @@
     struct dirent *dirent;
     char path[128];
     hwloc_obj_t machine;
+    hwloc_cpuset_t machine_online_set;
 
-    topology->levels[0][0]->attr->system.memory_kB = 0;
-    topology->levels[0][0]->attr->system.huge_page_free = 0;
+    /* replace top-level object type with SYSTEM and add some MACHINE underneath */
+
+    topology->levels[0][0]->type = HWLOC_OBJ_SYSTEM;
+    topology->levels[0][0]->name = strdup("Kerrighed");
+
     /* No cpuset support for now.  */
     /* No sys support for now.  */
     while ((dirent = readdir(nodes_dir)) != NULL) {
       unsigned long node;
       if (strncmp(dirent->d_name, "node", 4))
 	continue;
+      machine_online_set = hwloc_cpuset_alloc();
       node = strtoul(dirent->d_name+4, NULL, 0);
       snprintf(path, sizeof(path), "/proc/nodes/node%lu/cpuinfo", node);
-      err = look_cpuinfo(topology, path, online_set, admin_disabled_cpus_set);
-      if (err < 0) {
-	fprintf(stderr, "/proc/cpuinfo missing, required for kerrighed support\n");
-	abort();
-      }
+      err = look_cpuinfo(topology, path, machine_online_set);
+      if (err < 0)
+        continue;
+      hwloc_cpuset_or(topology->levels[0][0]->online_cpuset, topology->levels[0][0]->online_cpuset, machine_online_set);
       machine = hwloc_alloc_setup_object(HWLOC_OBJ_MACHINE, node);
-      machine->cpuset = hwloc_cpuset_dup(online_set);
+      machine->cpuset = machine_online_set;
       machine->attr->machine.dmi_board_name = NULL;
       machine->attr->machine.dmi_board_vendor = NULL;
       hwloc_debug_1arg_cpuset("machine number %lu has cpuset %s\n",
-		 node, online_set);
-      hwloc_add_object(topology, machine);
+		 node, machine_online_set);
+      hwloc_insert_object_by_cpuset(topology, machine);
 
       snprintf(path, sizeof(path), "/proc/nodes/node%lu/meminfo", node);
-      /* Compute the machine memory and huge page */
-      hwloc_get_procfs_meminfo_info(topology,
-				   path,
-				   &machine->attr->machine.memory_kB,
-				   &machine->attr->machine.huge_page_size_kB,
-				   &machine->attr->machine.huge_page_free);
-				   /* FIXME: gather page_size_kB as well? MaMI needs it */
-      topology->levels[0][0]->attr->system.memory_kB += machine->attr->machine.memory_kB;
-      topology->levels[0][0]->attr->system.huge_page_free += machine->attr->machine.huge_page_free;
+      /* Get the machine memory attributes */
+      hwloc_get_procfs_meminfo_info(topology, path, &machine->memory);
 
       /* Gather DMI info */
       /* FIXME: get the right DMI info of each machine */
@@ -1038,58 +1666,60 @@
     }
     closedir(nodes_dir);
   } else {
-    /* Gather the list of admin-disabled cpus and mems */
-    if (!(topology->flags & HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM)) {
-      hwloc_admin_disable_set_from_cpuset(topology, "/proc/self/cpuset", "cpus", admin_disabled_cpus_set);
-      hwloc_admin_disable_set_from_cpuset(topology, "/proc/self/cpuset", "mems", admin_disabled_mems_set);
+    /* Get the machine memory attributes */
+    hwloc_get_procfs_meminfo_info(topology, "/proc/meminfo", &topology->levels[0][0]->memory);
+
+    /* Gather NUMA information. Must be after hwloc_get_procfs_meminfo_info so that the hugepage size is known */
+    look_sysfsnode(topology, "/sys/devices/system/node", &nbnodes);
+
+    /* if we found some numa nodes, the machine object has no local memory */
+    if (nbnodes) {
+      topology->levels[0][0]->memory.local_memory = 0;
+      if (topology->levels[0][0]->memory.page_types) {
+        topology->levels[0][0]->memory.page_types[0].count = 0;
+        topology->levels[0][0]->memory.page_types[1].count = 0;
+      }
     }
 
-    /* Gather NUMA information */
-    look_sysfsnode(topology, "/sys/devices/system/node", admin_disabled_cpus_set, admin_disabled_mems_set);
-
     /* Gather the list of cpus now */
     if (getenv("HWLOC_LINUX_USE_CPUINFO")
-	|| hwloc_access("/sys/devices/system/cpu/cpu0/topology/core_id", R_OK, topology->backend_params.sysfs.root_fd) < 0
-	|| hwloc_access("/sys/devices/system/cpu/cpu0/topology/core_siblings", R_OK, topology->backend_params.sysfs.root_fd) < 0
-	|| hwloc_access("/sys/devices/system/cpu/cpu0/topology/physical_package_id", R_OK, topology->backend_params.sysfs.root_fd) < 0
-	|| hwloc_access("/sys/devices/system/cpu/cpu0/topology/thread_siblings", R_OK, topology->backend_params.sysfs.root_fd) < 0) {
+	|| hwloc_access("/sys/devices/system/cpu/cpu0/topology", R_OK, topology->backend_params.sysfs.root_fd) < 0) {
 	/* revert to reading cpuinfo only if /sys/.../topology unavailable (before 2.6.16) */
-      err = look_cpuinfo(topology, "/proc/cpuinfo", online_set, admin_disabled_cpus_set);
+      err = look_cpuinfo(topology, "/proc/cpuinfo", topology->levels[0][0]->online_cpuset);
       if (err < 0) {
-	fprintf(stderr, "sysfs topology not found, and /proc/cpuinfo missing\n");
-	abort();
+        if (topology->is_thissystem)
+          hwloc_setup_pu_level(topology, hwloc_fallback_nbprocessors(topology));
+        else
+          /* fsys-root but not this system, no way, assume there's just 1
+           * processor :/ */
+          hwloc_setup_pu_level(topology, 1);
       }
     } else {
-      look_sysfscpu(topology, "/sys/devices/system/cpu", admin_disabled_cpus_set);
+      look_sysfscpu(topology, "/sys/devices/system/cpu");
     }
 
-    /* Compute the whole system memory and huge page */
-    hwloc_get_procfs_meminfo_info(topology,
-				 "/proc/meminfo",
-				 &topology->levels[0][0]->attr->system.memory_kB,
-				 &topology->levels[0][0]->attr->system.huge_page_size_kB,
-				 &topology->levels[0][0]->attr->system.huge_page_free);
-				 /* FIXME: gather page_size_kB as well? MaMI needs it */
-
     /* Gather DMI info */
     hwloc__get_dmi_info(topology,
-		       &topology->levels[0][0]->attr->system.dmi_board_vendor,
-		       &topology->levels[0][0]->attr->system.dmi_board_name);
+		       &topology->levels[0][0]->attr->machine.dmi_board_vendor,
+		       &topology->levels[0][0]->attr->machine.dmi_board_name);
   }
-
-  hwloc_cpuset_free(admin_disabled_cpus_set);
-  hwloc_cpuset_free(admin_disabled_mems_set);
-  hwloc_cpuset_free(online_set);
 }
 
 void
 hwloc_set_linux_hooks(struct hwloc_topology *topology)
 {
-  topology->set_cpubind = hwloc_linux_set_cpubind;
+  topology->set_thisthread_cpubind = hwloc_linux_set_thisthread_cpubind;
+  topology->get_thisthread_cpubind = hwloc_linux_get_thisthread_cpubind;
+  topology->set_thisproc_cpubind = hwloc_linux_set_thisproc_cpubind;
+  topology->get_thisproc_cpubind = hwloc_linux_get_thisproc_cpubind;
+  topology->set_proc_cpubind = hwloc_linux_set_proc_cpubind;
+  topology->get_proc_cpubind = hwloc_linux_get_proc_cpubind;
 #if HAVE_DECL_PTHREAD_SETAFFINITY_NP
   topology->set_thread_cpubind = hwloc_linux_set_thread_cpubind;
 #endif /* HAVE_DECL_PTHREAD_SETAFFINITY_NP */
-  topology->set_thisthread_cpubind = hwloc_linux_set_thisthread_cpubind;
+#if HAVE_DECL_PTHREAD_GETAFFINITY_NP
+  topology->get_thread_cpubind = hwloc_linux_get_thread_cpubind;
+#endif /* HAVE_DECL_PTHREAD_GETAFFINITY_NP */
 }
 
 /* TODO mbind, setpolicy */

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-osf.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-osf.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-osf.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -5,7 +5,6 @@
 
 #include <private/config.h>
 
-#include <assert.h>
 #include <sys/types.h>
 #include <dirent.h>
 #include <unistd.h>
@@ -25,7 +24,7 @@
 #include <cpuset.h>
 
 static int
-prepare_radset(hwloc_topology_t topology, radset_t *radset, hwloc_cpuset_t hwloc_set)
+prepare_radset(hwloc_topology_t topology, radset_t *radset, hwloc_const_cpuset_t hwloc_set)
 {
   unsigned cpu;
   cpuset_t target_cpuset;
@@ -38,7 +37,7 @@
   cpuemptyset(target_cpuset);
   hwloc_cpuset_foreach_begin(cpu, hwloc_set)
     cpuaddset(target_cpuset, cpu);
-  hwloc_cpuset_foreach_end()
+  hwloc_cpuset_foreach_end();
 
   cpusetcreate(&cpuset);
   cpusetcreate(&xor_cpuset);
@@ -69,12 +68,14 @@
   return ret;
 }
 
+/* Note: get_cpubind not available on OSF */
+
 static int
-hwloc_osf_set_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_osf_set_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_const_cpuset_t hwloc_set, int policy)
 {
   radset_t radset;
 
-  if (hwloc_cpuset_isequal(hwloc_set, hwloc_get_system_obj(topology)->cpuset)) {
+  if (hwloc_cpuset_isequal(hwloc_set, hwloc_topology_get_complete_cpuset(topology))) {
     if ((errno = pthread_rad_detach(thread)))
       return -1;
     return 0;
@@ -83,7 +84,7 @@
   if (!prepare_radset(topology, &radset, hwloc_set))
     return -1;
 
-  if (strict) {
+  if (policy & HWLOC_CPUBIND_STRICT) {
     if ((errno = pthread_rad_bind(thread, radset, RAD_INSIST | RAD_WAIT)))
       return -1;
   } else {
@@ -96,11 +97,11 @@
 }
 
 static int
-hwloc_osf_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_osf_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t hwloc_set, int policy)
 {
   radset_t radset;
 
-  if (hwloc_cpuset_isequal(hwloc_set, hwloc_get_system_obj(topology)->cpuset)) {
+  if (hwloc_cpuset_isequal(hwloc_set, hwloc_topology_get_complete_cpuset(topology))) {
     if (rad_detach_pid(pid))
       return -1;
     return 0;
@@ -109,7 +110,7 @@
   if (!prepare_radset(topology, &radset, hwloc_set))
     return -1;
 
-  if (strict) {
+  if (policy & HWLOC_CPUBIND_STRICT) {
     if (rad_bind_pid(pid, radset, RAD_INSIST | RAD_WAIT))
       return -1;
   } else {
@@ -122,23 +123,17 @@
 }
 
 static int
-hwloc_osf_set_thisthread_cpubind(hwloc_topology_t topology, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_osf_set_thisthread_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t hwloc_set, int policy)
 {
-  return hwloc_osf_set_thread_cpubind(topology, pthread_self(), hwloc_set, strict);
+  return hwloc_osf_set_thread_cpubind(topology, pthread_self(), hwloc_set, policy);
 }
 
 static int
-hwloc_osf_set_thisproc_cpubind(hwloc_topology_t topology, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_osf_set_thisproc_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t hwloc_set, int policy)
 {
-  return hwloc_osf_set_proc_cpubind(topology, getpid(), hwloc_set, strict);
+  return hwloc_osf_set_proc_cpubind(topology, getpid(), hwloc_set, policy);
 }
 
-static int
-hwloc_osf_set_cpubind(hwloc_topology_t topology, hwloc_cpuset_t hwloc_set, int strict)
-{
-  return hwloc_osf_set_thisproc_cpubind(topology, hwloc_set, strict);
-}
-
 /* TODO: memory
  *
  * nmadvise(addr,len), nmmap()
@@ -175,7 +170,7 @@
       .nattr_flags = 0,
     };
 
-    for (radid = 0; radid < nbnodes; radid++) {
+    for (radid = 0; radid < (radid_t) nbnodes; radid++) {
       rademptyset(radset);
       radaddset(radset, radid);
       cpuemptyset(cpuset);
@@ -186,8 +181,14 @@
 
       nodes[radid] = obj = hwloc_alloc_setup_object(HWLOC_OBJ_NODE, radid);
       obj->cpuset = hwloc_cpuset_alloc();
-      obj->attr->node.memory_kB = rad_get_physmem(radid) * getpagesize() / 1024;
-      obj->attr->node.huge_page_free = 0;
+      obj->memory.local_memory = rad_get_physmem(radid) * getpagesize();
+      obj->memory.page_types_len = 2;
+      obj->memory.page_types = malloc(2*sizeof(*obj->memory.page_types));
+      memset(obj->memory.page_types, 0, 2*sizeof(*obj->memory.page_types));
+      obj->memory.page_types[0].size = getpagesize();
+#ifdef HAVE__SC_LARGE_PAGESIZE
+      obj->memory.page_types[1].size = sysconf(_SC_LARGE_PAGESIZE);
+#endif
 
       cursor = SET_CURSOR_INIT;
       while((cpuid = cpu_foreach(cpuset, 0, &cursor)) != CPU_NONE)
@@ -196,10 +197,10 @@
       hwloc_debug_1arg_cpuset("node %d has cpuset %s\n",
 		 radid, obj->cpuset);
 
-      hwloc_add_object(topology, obj);
+      hwloc_insert_object_by_cpuset(topology, obj);
 
       nfound = 0;
-      for (radid2 = 0; radid2 < nbnodes; radid2++)
+      for (radid2 = 0; radid2 < (radid_t) nbnodes; radid2++)
 	distances[radid][radid2] = RAD_DIST_REMOTE;
       for (distance = RAD_DIST_LOCAL; distance < RAD_DIST_REMOTE; distance++) {
 	attr.nattr_distance = distance;
@@ -226,14 +227,13 @@
   radsetdestroy(&radset);
   cpusetdestroy(&cpuset);
 
-  /* add PROC objects */
-  hwloc_setup_proc_level(topology, hwloc_fallback_nbprocessors(), NULL);
+  /* add PU objects */
+  hwloc_setup_pu_level(topology, hwloc_fallback_nbprocessors(topology));
 }
 
 void
 hwloc_set_osf_hooks(struct hwloc_topology *topology)
 {
-  topology->set_cpubind = hwloc_osf_set_cpubind;
   topology->set_thread_cpubind = hwloc_osf_set_thread_cpubind;
   topology->set_thisthread_cpubind = hwloc_osf_set_thisthread_cpubind;
   topology->set_proc_cpubind = hwloc_osf_set_proc_cpubind;

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-solaris.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-solaris.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-solaris.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -10,19 +10,22 @@
 
 #include <stdio.h>
 #include <errno.h>
-#include <assert.h>
 #include <dirent.h>
 #include <unistd.h>
 #include <sys/types.h>
 #include <sys/processor.h>
 #include <sys/procset.h>
 
+/* Note: get_cpubind not available on Solaris */
+/* TODO: try to use pset (restricted to super-user) to support cpusets with weigth > 1? */
 static int
-hwloc_solaris_set_sth_cpubind(hwloc_topology_t topology, idtype_t idtype, id_t id, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_solaris_set_sth_cpubind(hwloc_topology_t topology, idtype_t idtype, id_t id, hwloc_const_cpuset_t hwloc_set, int policy __hwloc_attribute_unused)
 {
   unsigned target;
 
-  if (hwloc_cpuset_isequal(hwloc_set, hwloc_get_system_obj(topology)->cpuset)) {
+  /* The resulting binding is always strict */
+
+  if (hwloc_cpuset_isequal(hwloc_set, hwloc_topology_get_complete_cpuset(topology))) {
     if (processor_bind(idtype, id, PBIND_NONE, NULL) != 0)
       return -1;
     return 0;
@@ -43,29 +46,23 @@
 }
 
 static int
-hwloc_solaris_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_solaris_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t hwloc_set, int policy)
 {
-  return hwloc_solaris_set_sth_cpubind(topology, P_PID, pid, hwloc_set, strict);
+  return hwloc_solaris_set_sth_cpubind(topology, P_PID, pid, hwloc_set, policy);
 }
 
 static int
-hwloc_solaris_set_thisproc_cpubind(hwloc_topology_t topology, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_solaris_set_thisproc_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t hwloc_set, int policy)
 {
-  return hwloc_solaris_set_sth_cpubind(topology, P_PID, P_MYID, hwloc_set, strict);
+  return hwloc_solaris_set_sth_cpubind(topology, P_PID, P_MYID, hwloc_set, policy);
 }
 
 static int
-hwloc_solaris_set_cpubind(hwloc_topology_t topology, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_solaris_set_thisthread_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t hwloc_set, int policy)
 {
-  return hwloc_solaris_set_thisproc_cpubind(topology, hwloc_set, strict);
+  return hwloc_solaris_set_sth_cpubind(topology, P_LWPID, P_MYID, hwloc_set, policy);
 }
 
-static int
-hwloc_solaris_set_thisthread_cpubind(hwloc_topology_t topology, hwloc_cpuset_t hwloc_set, int strict)
-{
-  return hwloc_solaris_set_sth_cpubind(topology, P_LWPID, P_MYID, hwloc_set, strict);
-}
-
 /* TODO: thread, maybe not easy because of the historical n:m implementation */
 
 #ifdef HAVE_LIBLGRP
@@ -87,6 +84,8 @@
     processorid_t cpuids[n];
 
     obj = hwloc_alloc_setup_object(HWLOC_OBJ_NODE, lgrp);
+    obj->nodeset = hwloc_cpuset_alloc();
+    hwloc_cpuset_set(obj->nodeset, lgrp);
     obj->cpuset = hwloc_cpuset_alloc();
     glob_lgrps[(*curlgrp)++] = obj;
 
@@ -99,10 +98,16 @@
 	lgrp, obj->cpuset);
 
     /* or LGRP_MEM_SZ_FREE */
-    obj->attr->node.huge_page_free = 0; /* TODO */
     hwloc_debug("node %ld has %lldkB\n", lgrp, mem_size/1024);
-    obj->attr->node.memory_kB = mem_size / 1024;
-    hwloc_add_object(topology, obj);
+    obj->memory.local_memory = mem_size;
+    obj->memory.page_types_len = 2;
+    obj->memory.page_types = malloc(2*sizeof(*obj->memory.page_types));
+    memset(obj->memory.page_types, 0, 2*sizeof(*obj->memory.page_types));
+    obj->memory.page_types[0].size = getpagesize();
+#ifdef HAVE__SC_LARGE_PAGESIZE
+    obj->memory.page_types[1].size = sysconf(_SC_LARGE_PAGESIZE);
+#endif
+    hwloc_insert_object_by_cpuset(topology, obj);
   }
 
   n = lgrp_children(cookie, lgrp, NULL, 0);
@@ -126,12 +131,12 @@
   lgrp_cookie_t cookie;
   unsigned curlgrp = 0;
   int nlgrps;
+  lgrp_id_t root;
 
   if ((topology->flags & HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM))
     cookie = lgrp_init(LGRP_VIEW_OS);
   else
     cookie = lgrp_init(LGRP_VIEW_CALLER);
-  lgrp_id_t root;
   if (cookie == LGRP_COOKIE_NONE)
     {
       hwloc_debug("lgrp_init failed: %s\n", strerror(errno));
@@ -158,7 +163,7 @@
 #ifdef HAVE_LIBKSTAT
 #include <kstat.h>
 static void
-hwloc_look_kstat(struct hwloc_topology *topology, unsigned *nbprocs, hwloc_cpuset_t online_cpuset)
+hwloc_look_kstat(struct hwloc_topology *topology, unsigned *nbprocs)
 {
   kstat_ctl_t *kc = kstat_open();
   kstat_t *ksp;
@@ -170,7 +175,6 @@
   unsigned osphysids[HWLOC_NBMAXCPUS];
 
   unsigned proc_coreids[HWLOC_NBMAXCPUS];
-  unsigned proc_oscoreids[HWLOC_NBMAXCPUS];
   unsigned oscoreids[HWLOC_NBMAXCPUS];
 
   unsigned core_osphysids[HWLOC_NBMAXCPUS];
@@ -187,7 +191,6 @@
       return;
     }
 
-  hwloc_cpuset_zero(online_cpuset);
   for (ksp = kc->kc_chain; ksp; ksp = ksp->ks_next)
     {
       if (strncmp("cpu_info", ksp->ks_module, 8))
@@ -203,7 +206,6 @@
       proc_physids[cpuid] = -1;
       proc_osphysids[cpuid] = -1;
       proc_coreids[cpuid] = -1;
-      proc_oscoreids[cpuid] = -1;
 
       if (kstat_read(kc, ksp, NULL) == -1)
 	{
@@ -224,13 +226,14 @@
 	}
 
       procid_max++;
-      hwloc_debug("cpu%d's state is %s\n", cpuid, stat->value.c);
+      hwloc_debug("cpu%u's state is %s\n", cpuid, stat->value.c);
       if (strcmp(stat->value.c, "on-line"))
-	/* not online, ignore for chip and core ids */
-	continue;
+	/* not online */
+        hwloc_cpuset_clr(topology->levels[0][0]->online_cpuset, cpuid);
 
-      hwloc_cpuset_set(online_cpuset, cpuid);
+      (*nbprocs)++;
 
+
       if (look_chips) do {
 	/* Get Chip ID */
 	stat = (kstat_named_t *) kstat_data_lookup(ksp, "chip_id");
@@ -305,7 +308,6 @@
 	    look_cores = 0;
 	    continue;
 	}
-	proc_oscoreids[cpuid] = coreid;
 	for (i = 0; i < numcores; i++)
 	  if (coreid == oscoreids[i] && proc_osphysids[cpuid] == core_osphysids[i])
 	    break;
@@ -323,8 +325,6 @@
        * however. */
     }
 
-  *nbprocs = hwloc_cpuset_weight(online_cpuset);
-
   if (look_chips)
     hwloc_setup_level(procid_max, numsockets, osphysids, proc_physids, topology, HWLOC_OBJ_SOCKET);
 
@@ -339,23 +339,20 @@
 void
 hwloc_look_solaris(struct hwloc_topology *topology)
 {
-  hwloc_cpuset_t online_cpuset = hwloc_cpuset_alloc();
-  unsigned nbprocs = hwloc_fallback_nbprocessors ();
+  unsigned nbprocs = hwloc_fallback_nbprocessors (topology);
 #ifdef HAVE_LIBLGRP
   hwloc_look_lgrp(topology);
 #endif /* HAVE_LIBLGRP */
-  hwloc_cpuset_fill(online_cpuset);
 #ifdef HAVE_LIBKSTAT
-  hwloc_look_kstat(topology, &nbprocs, online_cpuset);
+  nbprocs = 0;
+  hwloc_look_kstat(topology, &nbprocs);
 #endif /* HAVE_LIBKSTAT */
-  hwloc_setup_proc_level(topology, nbprocs, online_cpuset);
-  free(online_cpuset);
+  hwloc_setup_pu_level(topology, nbprocs);
 }
 
 void
 hwloc_set_solaris_hooks(struct hwloc_topology *topology)
 {
-  topology->set_cpubind = hwloc_solaris_set_cpubind;
   topology->set_proc_cpubind = hwloc_solaris_set_proc_cpubind;
   topology->set_thisproc_cpubind = hwloc_solaris_set_thisproc_cpubind;
   topology->set_thisthread_cpubind = hwloc_solaris_set_thisthread_cpubind;

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-synthetic.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-synthetic.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-synthetic.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -7,6 +7,7 @@
 #include <private/config.h>
 #include <hwloc.h>
 #include <private/private.h>
+#include <private/misc.h>
 #include <private/debug.h>
 
 #include <limits.h>
@@ -21,17 +22,16 @@
 {
   const char *pos, *next_pos;
   unsigned long item, count;
-  int i;
-  int cache_depth = 0, misc_depth = 0;
+  unsigned i;
+  int cache_depth = 0, group_depth = 0;
   int nb_machine_levels = 0, nb_node_levels = 0;
+  int nb_pu_levels = 0;
+  int nb_pu = 1;
 
   assert(topology->backend_type == HWLOC_BACKEND_NONE);
 
-  topology->backend_params.synthetic.type[0] = HWLOC_OBJ_SYSTEM;
-  topology->backend_params.synthetic.id[0] = 0;
-
   for (pos = description, count = 1; *pos; pos = next_pos) {
-#define HWLOC_OBJ_TYPE_UNKNOWN -1
+#define HWLOC_OBJ_TYPE_UNKNOWN ((unsigned) -1)
     hwloc_obj_type_t type = HWLOC_OBJ_TYPE_UNKNOWN;
 
     while (*pos == ' ')
@@ -41,20 +41,24 @@
       break;
 
     if (*pos < '0' || *pos > '9') {
-      if (!hwloc_strncasecmp(pos, "machines", 2))
+      if (!hwloc_namecoloncmp(pos, "machines", 2)) {
 	type = HWLOC_OBJ_MACHINE;
-      else if (!hwloc_strncasecmp(pos, "nodes", 1))
+      } else if (!hwloc_namecoloncmp(pos, "nodes", 1))
 	type = HWLOC_OBJ_NODE;
-      else if (!hwloc_strncasecmp(pos, "sockets", 1))
+      else if (!hwloc_namecoloncmp(pos, "sockets", 1))
 	type = HWLOC_OBJ_SOCKET;
-      else if (!hwloc_strncasecmp(pos, "cores", 2))
+      else if (!hwloc_namecoloncmp(pos, "cores", 2))
 	type = HWLOC_OBJ_CORE;
-      else if (!hwloc_strncasecmp(pos, "caches", 2))
+      else if (!hwloc_namecoloncmp(pos, "caches", 2))
 	type = HWLOC_OBJ_CACHE;
-      else if (!hwloc_strncasecmp(pos, "procs", 1))
-	type = HWLOC_OBJ_PROC;
-      else if (!hwloc_strncasecmp(pos, "misc", 2))
+      else if (!hwloc_namecoloncmp(pos, "pus", 1) || !hwloc_namecoloncmp(pos, "procs", 1) /* backward compatiblity with 0.9 */)
+	type = HWLOC_OBJ_PU;
+      else if (!hwloc_namecoloncmp(pos, "misc", 2))
 	type = HWLOC_OBJ_MISC;
+      else if (!hwloc_namecoloncmp(pos, "group", 2))
+	type = HWLOC_OBJ_GROUP;
+      else
+        fprintf(stderr, "Unknown object type `%s'\n", pos);
 
       next_pos = strchr(pos, ':');
       if (!next_pos) {
@@ -69,9 +73,21 @@
       return -1;
     }
 
-    assert(count + 1 < HWLOC_SYNTHETIC_MAX_DEPTH);
-    assert(item <= UINT_MAX);
+    if (count + 1 >= HWLOC_SYNTHETIC_MAX_DEPTH) {
+      fprintf(stderr,"Too many synthetic levels, max %d\n", HWLOC_SYNTHETIC_MAX_DEPTH);
+      return -1;
+    }
+    if (item > UINT_MAX) {
+      fprintf(stderr,"Too big arity, max %u\n", UINT_MAX);
+      return -1;
+    }
 
+    nb_pu *= item;
+    if (nb_pu > HWLOC_NBMAXCPUS) {
+      fprintf(stderr, "To many PUs, max %u\n", HWLOC_NBMAXCPUS);
+      return -1;
+    }
+
     topology->backend_params.synthetic.arity[count-1] = (unsigned)item;
     topology->backend_params.synthetic.type[count] = type;
     topology->backend_params.synthetic.id[count] = 0;
@@ -83,42 +99,48 @@
     return -1;
   }
 
-  for(i=0; i<count; i++) {
+  for(i=count-1; i>0; i--) {
     hwloc_obj_type_t type;
 
     type = topology->backend_params.synthetic.type[i];
 
     if (type == HWLOC_OBJ_TYPE_UNKNOWN) {
-      switch (count-1-i) {
-      case 0: type = HWLOC_OBJ_PROC; break;
-      case 1: type = HWLOC_OBJ_CORE; break;
-      case 2: type = HWLOC_OBJ_CACHE; break;
-      case 3: type = HWLOC_OBJ_SOCKET; break;
-      case 4: type = HWLOC_OBJ_NODE; break;
-      case 5: type = HWLOC_OBJ_MACHINE; break;
-      default: type = HWLOC_OBJ_MISC; break;
+      if (i == count-1)
+	type = HWLOC_OBJ_PU;
+      else {
+	switch (topology->backend_params.synthetic.type[i+1]) {
+	case HWLOC_OBJ_PU: type = HWLOC_OBJ_CORE; break;
+	case HWLOC_OBJ_CORE: type = HWLOC_OBJ_CACHE; break;
+	case HWLOC_OBJ_CACHE: type = HWLOC_OBJ_SOCKET; break;
+	case HWLOC_OBJ_SOCKET: type = HWLOC_OBJ_NODE; break;
+	case HWLOC_OBJ_NODE:
+	case HWLOC_OBJ_GROUP: type = HWLOC_OBJ_GROUP; break;
+	case HWLOC_OBJ_MACHINE:
+	case HWLOC_OBJ_MISC: type = HWLOC_OBJ_MISC; break;
+	default:
+	  assert(0);
+	}
       }
       topology->backend_params.synthetic.type[i] = type;
     }
     switch (type) {
+      case HWLOC_OBJ_PU:
+	if (nb_pu_levels) {
+	    fprintf(stderr,"synthetic string can not have several PU levels\n");
+	    return -1;
+	}
+	nb_pu_levels++;
+	break;
       case HWLOC_OBJ_CACHE:
 	cache_depth++;
 	break;
-      case HWLOC_OBJ_MISC:
-	misc_depth++;
+      case HWLOC_OBJ_GROUP:
+	group_depth++;
 	break;
       case HWLOC_OBJ_NODE:
-	if (nb_node_levels) {
-	    fprintf(stderr,"synthetic string can not have several NUMA node levels\n");
-	    return -1;
-	}
 	nb_node_levels++;
 	break;
       case HWLOC_OBJ_MACHINE:
-	if (nb_machine_levels) {
-	    fprintf(stderr,"synthetic string can not have several machine levels\n");
-	    return -1;
-	}
 	nb_machine_levels++;
 	break;
       default:
@@ -126,6 +148,27 @@
     }
   }
 
+  if (nb_pu_levels > 1) {
+    fprintf(stderr,"synthetic string can not have several PU levels\n");
+    return -1;
+  }
+  if (nb_node_levels > 1) {
+    fprintf(stderr,"synthetic string can not have several NUMA node levels\n");
+    return -1;
+  }
+  if (nb_machine_levels > 1) {
+    fprintf(stderr,"synthetic string can not have several machine levels\n");
+    return -1;
+  }
+
+  if (nb_machine_levels)
+    topology->backend_params.synthetic.type[0] = HWLOC_OBJ_SYSTEM;
+  else {
+    topology->backend_params.synthetic.type[0] = HWLOC_OBJ_MACHINE;
+    nb_machine_levels++;
+  }
+  topology->backend_params.synthetic.id[0] = 0;
+
   if (cache_depth == 1)
     /* if there is a single cache level, make it L2 */
     cache_depth = 2;
@@ -133,18 +176,12 @@
   for (i=0; i<count; i++) {
     hwloc_obj_type_t type = topology->backend_params.synthetic.type[i];
 
-    if (type == HWLOC_OBJ_MISC)
-      topology->backend_params.synthetic.depth[i] = misc_depth--;
+    if (type == HWLOC_OBJ_GROUP)
+      topology->backend_params.synthetic.depth[i] = group_depth--;
     else if (type == HWLOC_OBJ_CACHE)
       topology->backend_params.synthetic.depth[i] = cache_depth--;
   }
 
-  /* last level must be PROC */
-  if (topology->backend_params.synthetic.type[count-1] != HWLOC_OBJ_PROC) {
-    fprintf(stderr,"synthetic string needs to have a number of processors\n");
-    return -1;
-  }
-
   topology->backend_type = HWLOC_BACKEND_SYNTHETIC;
   topology->backend_params.synthetic.arity[count-1] = 0;
   topology->is_thissystem = 0;
@@ -170,10 +207,8 @@
 static unsigned
 hwloc__look_synthetic(struct hwloc_topology *topology,
     int level, unsigned first_cpu,
-    unsigned long *parent_memory_kB,
     hwloc_cpuset_t parent_cpuset)
 {
-  unsigned long my_memory = 0, *pmemory = parent_memory_kB;
   hwloc_obj_t obj;
   unsigned i;
   hwloc_obj_type_t type = topology->backend_params.synthetic.type[level];
@@ -182,13 +217,13 @@
   switch (type) {
     case HWLOC_OBJ_MISC:
       break;
+    case HWLOC_OBJ_GROUP:
+      break;
     case HWLOC_OBJ_SYSTEM:
       /* Shouldn't happen.  */
       abort();
       break;
     case HWLOC_OBJ_MACHINE:
-      /* Gather memory size from memory nodes for this machine */
-      pmemory = &my_memory;
       break;
     case HWLOC_OBJ_NODE:
       break;
@@ -198,47 +233,49 @@
       break;
     case HWLOC_OBJ_CORE:
       break;
-    case HWLOC_OBJ_PROC:
+    case HWLOC_OBJ_PU:
       break;
   }
 
   obj = hwloc_alloc_setup_object(type, topology->backend_params.synthetic.id[level]++);
   obj->cpuset = hwloc_cpuset_alloc();
 
-  if (type == HWLOC_OBJ_PROC) {
-    assert(topology->backend_params.synthetic.arity[level] == 0);
+  if (!topology->backend_params.synthetic.arity[level]) {
     hwloc_cpuset_set(obj->cpuset, first_cpu++);
   } else {
-    assert(topology->backend_params.synthetic.arity[level] != 0);
     for (i = 0; i < topology->backend_params.synthetic.arity[level]; i++)
-      first_cpu = hwloc__look_synthetic(topology, level + 1, first_cpu, pmemory, obj->cpuset);
+      first_cpu = hwloc__look_synthetic(topology, level + 1, first_cpu, obj->cpuset);
   }
 
-  hwloc_add_object(topology, obj);
+  if (type == HWLOC_OBJ_NODE) {
+    obj->nodeset = hwloc_cpuset_alloc();
+    hwloc_cpuset_set(obj->nodeset, obj->os_index);
+  }
 
-  hwloc_cpuset_orset(parent_cpuset, obj->cpuset);
+  hwloc_insert_object_by_cpuset(topology, obj);
 
+  hwloc_cpuset_or(parent_cpuset, parent_cpuset, obj->cpuset);
+
   /* post-hooks */
   switch (type) {
     case HWLOC_OBJ_MISC:
-      obj->attr->misc.depth = topology->backend_params.synthetic.depth[level];
       break;
+    case HWLOC_OBJ_GROUP:
+      obj->attr->group.depth = topology->backend_params.synthetic.depth[level];
+      break;
     case HWLOC_OBJ_SYSTEM:
       abort();
       break;
     case HWLOC_OBJ_MACHINE:
-      obj->attr->machine.memory_kB = my_memory;
-      obj->attr->machine.dmi_board_vendor = NULL;
-      obj->attr->machine.dmi_board_name = NULL;
-      obj->attr->machine.huge_page_size_kB = 0;
-      obj->attr->machine.huge_page_free = 0;
-      *parent_memory_kB += obj->attr->machine.memory_kB;
       break;
     case HWLOC_OBJ_NODE:
-      /* 1GB in memory nodes.  */
-      obj->attr->node.memory_kB = 1024*1024;
-      *parent_memory_kB += obj->attr->node.memory_kB;
-      obj->attr->node.huge_page_free = 0;
+      /* 1GB in memory nodes, 256k 4k-pages.  */
+      obj->memory.local_memory = 1024*1024*1024;
+      obj->memory.page_types_len = 1;
+      obj->memory.page_types = malloc(sizeof(*obj->memory.page_types));
+      memset(obj->memory.page_types, 0, sizeof(*obj->memory.page_types));
+      obj->memory.page_types[0].size = 4096;
+      obj->memory.page_types[0].count = 256*1024;
       break;
     case HWLOC_OBJ_SOCKET:
       break;
@@ -246,14 +283,14 @@
       obj->attr->cache.depth = topology->backend_params.synthetic.depth[level];
       if (obj->attr->cache.depth == 1)
 	/* 32Kb in L1 */
-	obj->attr->cache.memory_kB = 32*1024;
+	obj->attr->cache.size = 32*1024;
       else
 	/* *4 at each level, starting from 1MB for L2 */
-	obj->attr->cache.memory_kB = 256*1024 << (2*obj->attr->cache.depth);
+	obj->attr->cache.size = 256*1024 << (2*obj->attr->cache.depth);
       break;
     case HWLOC_OBJ_CORE:
       break;
-    case HWLOC_OBJ_PROC:
+    case HWLOC_OBJ_PU:
       break;
   }
 
@@ -266,8 +303,14 @@
   hwloc_cpuset_t cpuset = hwloc_cpuset_alloc();
   unsigned first_cpu = 0, i;
 
+  topology->support.discovery->pu = 1;
+
+  /* update first level type according to the synthetic type array */
+  topology->levels[0][0]->type = topology->backend_params.synthetic.type[0];
+
   for (i = 0; i < topology->backend_params.synthetic.arity[0]; i++)
-    first_cpu = hwloc__look_synthetic(topology, 1, first_cpu, &topology->levels[0][0]->attr->system.memory_kB, cpuset);
+    first_cpu = hwloc__look_synthetic(topology, 1, first_cpu, cpuset);
 
-  free(cpuset);
+  hwloc_cpuset_free(cpuset);
 }
+

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-windows.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-windows.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-windows.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -82,15 +82,16 @@
 #ifndef HAVE_PROCESSOR_RELATIONSHIP
 typedef struct _PROCESSOR_RELATIONSHIP {
   BYTE Flags;
-  ULONGLONG Reserved[2];
-  GROUP_AFFINITY GroupMask;
+  BYTE Reserved[21];
+  WORD GroupCount;
+  GROUP_AFFINITY GroupMask[ANYSIZE_ARRAY];
 } PROCESSOR_RELATIONSHIP, *PPROCESSOR_RELATIONSHIP;
 #endif
 
 #ifndef HAVE_NUMA_NODE_RELATIONSHIP
 typedef struct _NUMA_NODE_RELATIONSHIP {
   DWORD NodeNumber;
-  ULONGLONG Reserved[2];
+  BYTE Reserved[20];
   GROUP_AFFINITY GroupMask;
 } NUMA_NODE_RELATIONSHIP, *PNUMA_NODE_RELATIONSHIP;
 #endif
@@ -102,7 +103,7 @@
   WORD LineSize;
   DWORD CacheSize;
   PROCESSOR_CACHE_TYPE Type;
-  ULONGLONG Reserved[2];
+  BYTE Reserved[20];
   GROUP_AFFINITY GroupMask;
 } CACHE_RELATIONSHIP, *PCACHE_RELATIONSHIP;
 #endif
@@ -111,8 +112,8 @@
 typedef struct _PROCESSOR_GROUP_INFO {
   BYTE MaximumProcessorCount;
   BYTE ActiveProcessorCount;
+  BYTE Reserved[38];
   KAFFINITY ActiveProcessorMask;
-  ULONGLONG Reserved[4];
 } PROCESSOR_GROUP_INFO, *PPROCESSOR_GROUP_INFO;
 #endif
 
@@ -140,10 +141,13 @@
 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX;
 #endif
 
+/* TODO: SetThreadIdealProcessor */
+
 static int
-hwloc_win_set_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_win_set_thread_cpubind(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_thread_t thread, hwloc_const_cpuset_t hwloc_set, int policy __hwloc_attribute_unused)
 {
-  /* TODO: groups */
+  /* TODO: groups SetThreadGroupAffinity */
+  /* The resulting binding is always strict */
   DWORD mask = hwloc_cpuset_to_ulong(hwloc_set);
   if (!SetThreadAffinityMask(thread, mask))
     return -1;
@@ -151,15 +155,16 @@
 }
 
 static int
-hwloc_win_set_thisthread_cpubind(hwloc_topology_t topology, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_win_set_thisthread_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t hwloc_set, int policy)
 {
-  return hwloc_win_set_thread_cpubind(topology, GetCurrentThread(), hwloc_set, strict);
+  return hwloc_win_set_thread_cpubind(topology, GetCurrentThread(), hwloc_set, policy);
 }
 
 static int
-hwloc_win_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t proc, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_win_set_proc_cpubind(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_pid_t proc, hwloc_const_cpuset_t hwloc_set, int policy __hwloc_attribute_unused)
 {
   /* TODO: groups */
+  /* The resulting binding is always strict */
   DWORD mask = hwloc_cpuset_to_ulong(hwloc_set);
   if (!SetProcessAffinityMask(proc, mask))
     return -1;
@@ -167,23 +172,36 @@
 }
 
 static int
-hwloc_win_set_thisproc_cpubind(hwloc_topology_t topology, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_win_get_proc_cpubind(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_pid_t proc, hwloc_cpuset_t hwloc_set, int policy __hwloc_attribute_unused)
 {
-  return hwloc_win_set_proc_cpubind(topology, GetCurrentProcess(), hwloc_set, strict);
+  DWORD proc_mask, sys_mask;
+  /* TODO: groups */
+  if (!GetProcessAffinityMask(proc, &proc_mask, &sys_mask))
+    return -1;
+  hwloc_cpuset_from_ulong(hwloc_set, proc_mask);
+  return 0;
 }
 
 static int
-hwloc_win_set_cpubind(hwloc_topology_t topology, hwloc_cpuset_t hwloc_set, int strict)
+hwloc_win_set_thisproc_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t hwloc_set, int policy)
 {
-  return hwloc_win_set_thisproc_cpubind(topology, hwloc_set, strict);
+  return hwloc_win_set_proc_cpubind(topology, GetCurrentProcess(), hwloc_set, policy);
 }
 
+static int
+hwloc_win_get_thisproc_cpubind(hwloc_topology_t topology, hwloc_cpuset_t hwloc_cpuset, int policy)
+{
+  return hwloc_win_get_proc_cpubind(topology, GetCurrentProcess(), hwloc_cpuset, policy);
+}
+
 void
 hwloc_look_windows(struct hwloc_topology *topology)
 {
   BOOL WINAPI (*GetLogicalProcessorInformationProc)(PSYSTEM_LOGICAL_PROCESSOR_INFORMATION Buffer, PDWORD ReturnLength);
   BOOL WINAPI (*GetLogicalProcessorInformationExProc)(LOGICAL_PROCESSOR_RELATIONSHIP relationship, PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Buffer, PDWORD ReturnLength);
   BOOL WINAPI (*GetNumaAvailableMemoryNodeProc)(UCHAR Node, PULONGLONG AvailableBytes);
+  BOOL WINAPI (*GetNumaAvailableMemoryNodeExProc)(USHORT Node, PULONGLONG AvailableBytes);
+
   DWORD length;
 
   HMODULE kernel32;
@@ -192,9 +210,16 @@
   if (kernel32) {
     GetLogicalProcessorInformationProc = GetProcAddress(kernel32, "GetLogicalProcessorInformation");
     GetNumaAvailableMemoryNodeProc = GetProcAddress(kernel32, "GetNumaAvailableMemoryNode");
+    GetNumaAvailableMemoryNodeExProc = GetProcAddress(kernel32, "GetNumaAvailableMemoryNodeEx");
+    GetLogicalProcessorInformationExProc = GetProcAddress(kernel32, "GetLogicalProcessorInformationEx");
 
-    if (GetLogicalProcessorInformationProc) {
+    if (!GetLogicalProcessorInformationExProc && GetLogicalProcessorInformationProc) {
       PSYSTEM_LOGICAL_PROCESSOR_INFORMATION procInfo;
+      unsigned id;
+      unsigned i;
+      struct hwloc_obj *obj;
+      hwloc_obj_type_t type;
+
       length = 0;
       procInfo = NULL;
 
@@ -203,15 +228,9 @@
 	  break;
 	if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
 	  return;
-	free(procInfo);
-	procInfo = malloc(length);
+	procInfo = realloc(procInfo, length);
       }
 
-      unsigned id;
-      int i;
-      struct hwloc_obj *obj;
-      hwloc_obj_type_t type;
-
       for (i = 0; i < length / sizeof(*procInfo); i++) {
 
         /* Ignore non-data caches */
@@ -237,49 +256,54 @@
 	    break;
 	  case RelationGroup:
 	  default:
-	    type = HWLOC_OBJ_MISC;
+	    type = HWLOC_OBJ_GROUP;
 	    break;
 	}
 
 	obj = hwloc_alloc_setup_object(type, id);
         obj->cpuset = hwloc_cpuset_alloc();
-	hwloc_debug("%s#%d mask %lx\n", hwloc_obj_type_string(type), id, procInfo[i].ProcessorMask);
+	hwloc_debug("%s#%u mask %lx\n", hwloc_obj_type_string(type), id, procInfo[i].ProcessorMask);
 	hwloc_cpuset_from_ulong(obj->cpuset, procInfo[i].ProcessorMask);
 
 	switch (type) {
 	  case HWLOC_OBJ_NODE:
 	    {
 	      ULONGLONG avail;
-	      if (GetNumaAvailableMemoryNodeProc && GetNumaAvailableMemoryNodeProc(id, &avail))
-		obj->attr->node.memory_kB = avail >> 10;
-	      else
-		obj->attr->node.memory_kB = 0;
-	      obj->attr->node.huge_page_free = 0; /* TODO */
+	      obj->nodeset = hwloc_cpuset_alloc();
+	      hwloc_cpuset_set(obj->nodeset, id);
+	      if ((GetNumaAvailableMemoryNodeExProc && GetNumaAvailableMemoryNodeExProc(id, &avail))
+	       || (GetNumaAvailableMemoryNodeProc && GetNumaAvailableMemoryNodeProc(id, &avail)))
+		obj->memory.local_memory = avail;
+	      obj->memory.page_types_len = 1;
+	      obj->memory.page_types = malloc(sizeof(*obj->memory.page_types));
+	      memset(obj->memory.page_types, 0, sizeof(*obj->memory.page_types));
+#ifdef HAVE__SC_LARGE_PAGESIZE
+	      obj->memory.page_types[0].size = sysconf(_SC_LARGE_PAGESIZE);
+#endif
 	      break;
 	    }
 	  case HWLOC_OBJ_CACHE:
-	    obj->attr->cache.memory_kB = procInfo[i].Cache.Size >> 10;
+	    obj->attr->cache.size = procInfo[i].Cache.Size;
 	    obj->attr->cache.depth = procInfo[i].Cache.Level;
 	    break;
-	  case HWLOC_OBJ_MISC:
-	    obj->attr->misc.depth = procInfo[i].Relationship == RelationGroup;
+	  case HWLOC_OBJ_GROUP:
+	    obj->attr->group.depth = procInfo[i].Relationship == RelationGroup;
 	    break;
 	  default:
 	    break;
 	}
-	hwloc_add_object(topology, obj);
+	hwloc_insert_object_by_cpuset(topology, obj);
       }
 
       free(procInfo);
     }
 
-    GetLogicalProcessorInformationExProc = GetProcAddress(kernel32, "GetLogicalProcessorInformationEx");
-
-    /* Disabled for now as it wasn't tested at all.  */
-    if (0 && GetLogicalProcessorInformationExProc) {
+    if (GetLogicalProcessorInformationExProc) {
       PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX procInfoTotal, procInfo;
 
-      fprintf(stderr,"Note: GetLogicalProcessorInformationEx was never tested yet!\n");
+      unsigned id;
+      struct hwloc_obj *obj;
+      hwloc_obj_type_t type;
 
       length = 0;
       procInfoTotal = NULL;
@@ -289,19 +313,14 @@
 	  break;
 	if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
 	  return;
-	free(procInfoTotal);
-	procInfo = malloc(length);
+        procInfoTotal = realloc(procInfoTotal, length);
       }
 
-      signed id;
-      struct hwloc_obj *obj;
-      hwloc_obj_type_t type;
-      KAFFINITY mask;
-      WORD group;
-
       for (procInfo = procInfoTotal;
 	   (void*) procInfo < (void*) ((unsigned long) procInfoTotal + length);
 	   procInfo = (void*) ((unsigned long) procInfo + procInfo->Size)) {
+        unsigned num, i;
+        GROUP_AFFINITY *GroupMask;
 
         /* Ignore non-data caches */
 	if (procInfo->Relationship == RelationCache &&
@@ -313,34 +332,36 @@
 	switch (procInfo->Relationship) {
 	  case RelationNumaNode:
 	    type = HWLOC_OBJ_NODE;
-	    mask = procInfo->NumaNode.GroupMask.Mask;
-	    group = procInfo->NumaNode.GroupMask.Group;
+            num = 1;
+            GroupMask = &procInfo->NumaNode.GroupMask;
 	    id = procInfo->NumaNode.NodeNumber;
 	    break;
 	  case RelationProcessorPackage:
 	    type = HWLOC_OBJ_SOCKET;
-	    mask = procInfo->Processor.GroupMask.Mask;
-	    group = procInfo->Processor.GroupMask.Group;
+            num = procInfo->Processor.GroupCount;
+            GroupMask = procInfo->Processor.GroupMask;
 	    break;
 	  case RelationCache:
 	    type = HWLOC_OBJ_CACHE;
-	    mask = procInfo->Cache.GroupMask.Mask;
-	    group = procInfo->Cache.GroupMask.Group;
+            num = 1;
+            GroupMask = &procInfo->Cache.GroupMask;
 	    break;
 	  case RelationProcessorCore:
 	    type = HWLOC_OBJ_CORE;
-	    mask = procInfo->Processor.GroupMask.Mask;
-	    group = procInfo->Processor.GroupMask.Group;
+            num = procInfo->Processor.GroupCount;
+            GroupMask = procInfo->Processor.GroupMask;
 	    break;
 	  case RelationGroup:
 	    /* So strange an interface... */
 	    for (id = 0; id < procInfo->Group.ActiveGroupCount; id++) {
-	      obj = hwloc_alloc_setup_object(HWLOC_OBJ_MISC, id);
+              KAFFINITY mask;
+	      obj = hwloc_alloc_setup_object(HWLOC_OBJ_GROUP, id);
 	      obj->cpuset = hwloc_cpuset_alloc();
 	      mask = procInfo->Group.GroupInfo[id].ActiveProcessorMask;
-	      hwloc_debug("group %d mask %lx\n", id, mask);
+	      hwloc_debug("group %u %d cpus mask %lx\n", id,
+                  procInfo->Group.GroupInfo[id].ActiveProcessorCount, mask);
 	      hwloc_cpuset_from_ith_ulong(obj->cpuset, id, mask);
-	      hwloc_add_object(topology, obj);
+	      hwloc_insert_object_by_cpuset(topology, obj);
 	    }
 	    continue;
 	  default:
@@ -350,38 +371,53 @@
 
 	obj = hwloc_alloc_setup_object(type, id);
         obj->cpuset = hwloc_cpuset_alloc();
-	hwloc_debug("%s#%d mask %d:%lx\n", hwloc_obj_type_string(type), id, group, mask);
-	hwloc_cpuset_from_ith_ulong(obj->cpuset, group, mask);
+        for (i = 0; i < num; i++) {
+          hwloc_debug("%s#%u %d: mask %d:%lx\n", hwloc_obj_type_string(type), id, i, GroupMask[i].Group, GroupMask[i].Mask);
+          hwloc_cpuset_from_ith_ulong(obj->cpuset, GroupMask[i].Group, GroupMask[i].Mask);
+        }
 
 	switch (type) {
 	  case HWLOC_OBJ_NODE:
-	    obj->attr->node.memory_kB = 0; /* TODO GetNumaAvailableMemoryNodeEx  */
-	    obj->attr->node.huge_page_free = 0; /* TODO */
-	    break;
+	    {
+	      ULONGLONG avail;
+	      obj->nodeset = hwloc_cpuset_alloc();
+	      hwloc_cpuset_set(obj->nodeset, id);
+	      if ((GetNumaAvailableMemoryNodeExProc && GetNumaAvailableMemoryNodeExProc(id, &avail))
+	       || (GetNumaAvailableMemoryNodeProc && GetNumaAvailableMemoryNodeProc(id, &avail)))
+	        obj->memory.local_memory = avail;
+	      obj->memory.page_types_len = 1;
+	      obj->memory.page_types = malloc(sizeof(*obj->memory.page_types));
+	      memset(obj->memory.page_types, 0, sizeof(*obj->memory.page_types));
+#ifdef HAVE__SC_LARGE_PAGESIZE
+	      obj->memory.page_types[0].size = sysconf(_SC_LARGE_PAGESIZE);
+#endif
+	      break;
+	    }
 	  case HWLOC_OBJ_CACHE:
-	    obj->attr->cache.memory_kB = procInfo->Cache.CacheSize >> 10;
+	    obj->attr->cache.size = procInfo->Cache.CacheSize;
 	    obj->attr->cache.depth = procInfo->Cache.Level;
 	    break;
 	  default:
 	    break;
 	}
-	hwloc_add_object(topology, obj);
+	hwloc_insert_object_by_cpuset(topology, obj);
       }
       free(procInfoTotal);
     }
   }
 
-  /* add PROC objects */
-  hwloc_setup_proc_level(topology, hwloc_fallback_nbprocessors(), NULL);
+  /* add PU objects */
+  hwloc_setup_pu_level(topology, hwloc_fallback_nbprocessors(topology));
 }
 
 void
 hwloc_set_windows_hooks(struct hwloc_topology *topology)
 {
-  topology->set_cpubind = hwloc_win_set_cpubind;
   topology->set_proc_cpubind = hwloc_win_set_proc_cpubind;
+  topology->get_proc_cpubind = hwloc_win_get_proc_cpubind;
   topology->set_thread_cpubind = hwloc_win_set_thread_cpubind;
   topology->set_thisproc_cpubind = hwloc_win_set_thisproc_cpubind;
+  topology->get_thisproc_cpubind = hwloc_win_get_thisproc_cpubind;
   topology->set_thisthread_cpubind = hwloc_win_set_thisthread_cpubind;
 }
 

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-x86.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-x86.c	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-x86.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,427 @@
+/*
+ * Copyright © 2010 CNRS, INRIA, Université Bordeaux 1
+ * Copyright © 2010 Cisco Systems, Inc.  All rights reserved.
+ *
+ * See COPYING in top-level directory.
+ */
+
+#include <private/config.h>
+#include <hwloc.h>
+#include <private/private.h>
+#include <private/debug.h>
+#include <private/cpuid.h>
+#include <private/misc.h>
+
+struct cacheinfo {
+  unsigned type;
+  unsigned level;
+  unsigned nbthreads_sharing;
+
+  unsigned linesize;
+  unsigned linepart;
+  unsigned ways;
+  unsigned sets;
+  unsigned size;
+};
+
+struct procinfo {
+  unsigned present;
+  unsigned apicid;
+  unsigned max_log_proc;
+  unsigned max_nbcores;
+  unsigned max_nbthreads;
+  unsigned socketid;
+  unsigned logprocid;
+  unsigned threadid;
+  unsigned coreid;
+  unsigned numcaches;
+  struct cacheinfo *cache;
+};
+
+enum cpuid_type {
+  intel,
+  amd,
+  unknown
+};
+
+static void fill_amd_cache(struct procinfo *infos, unsigned level, unsigned cpuid)
+{
+  struct cacheinfo *cache;
+  unsigned cachenum;
+  unsigned size = 0;
+
+  cachenum = infos->numcaches++;
+  infos->cache = realloc(infos->cache, infos->numcaches*sizeof(*infos->cache));
+  cache = &infos->cache[cachenum];
+
+  if (level == 1)
+    size = ((cpuid >> 24)) << 10;
+  else if (level == 2)
+    size = ((cpuid >> 16)) << 10;
+  else if (level == 3)
+    size = ((cpuid >> 18)) << 19;
+  if (!size)
+    return;
+
+  cache->type = 1;
+  cache->level = level;
+  if (level <= 2)
+    cache->nbthreads_sharing = 1;
+  else
+    cache->nbthreads_sharing = infos->max_log_proc;
+  cache->linesize = cpuid & 0xff;
+  cache->linepart = 0;
+  if (level == 1)
+    cache->ways = (cpuid >> 16) & 0xff;
+  else {
+    static const unsigned ways_tab[] = { 0, 1, 2, 0, 4, 0, 8, 0, 16, 0, 32, 48, 64, 96, 128, -1 };
+    unsigned ways = (cpuid >> 12) & 0xf;
+    cache->ways = ways_tab[ways];
+  }
+  cache->size = size;
+  cache->sets = 0;
+
+  hwloc_debug("cache L%u t%u linesize %u ways %u size %uKB\n", cache->level, cache->nbthreads_sharing, cache->linesize, cache->ways, cache->size >> 10);
+}
+
+/* Fetch information from the processor itself thanks to cpuid and store it in
+ * infos for summarize to analyze them globally */
+static void look_proc(struct procinfo *infos, unsigned highest_cpuid, unsigned highest_ext_cpuid, enum cpuid_type cpuid_type)
+{
+  unsigned eax, ebx, ecx = 0, edx;
+  unsigned cachenum;
+  struct cacheinfo *cache;
+
+  infos->present = 1;
+
+  eax = 0x01;
+  hwloc_cpuid(&eax, &ebx, &ecx, &edx);
+  infos->apicid = ebx >> 24;
+  if (edx & (1 << 28))
+    infos->max_log_proc = 1 << hwloc_flsl(((ebx >> 16) & 0xff) - 1);
+  else
+    infos->max_log_proc = 1;
+  hwloc_debug("APIC ID 0x%02x max_log_proc %u\n", infos->apicid, infos->max_log_proc);
+  infos->socketid = infos->apicid / infos->max_log_proc;
+  infos->logprocid = infos->apicid % infos->max_log_proc;
+  infos->coreid = (unsigned) -1;
+  infos->threadid = (unsigned) -1;
+  hwloc_debug("phys %u thread %u\n", infos->socketid, infos->logprocid);
+
+  /* Intel doesn't actually provide 0x80000008 information */
+  if (cpuid_type != intel && highest_ext_cpuid >= 0x80000008) {
+    unsigned coreidsize;
+    eax = 0x80000008;
+    hwloc_cpuid(&eax, &ebx, &ecx, &edx);
+    coreidsize = (ecx >> 12) & 0xf;
+    hwloc_debug("core ID size: %u\n", coreidsize);
+    if (!coreidsize) {
+      infos->max_nbcores = (ecx & 0xff) + 1;
+    } else 
+      infos->max_nbcores = 1 << coreidsize;
+    hwloc_debug("Thus max # of cores: %u\n", infos->max_nbcores);
+    /* Still no multithreaded AMD */
+    infos->max_nbthreads = 1 ;
+    hwloc_debug("and max # of threads: %u\n", infos->max_nbthreads);
+    infos->threadid = infos->logprocid % infos->max_nbthreads;
+    infos->coreid = infos->logprocid / infos->max_nbthreads;
+    hwloc_debug("this is thread %u of core %u\n", infos->threadid, infos->coreid);
+  }
+
+  infos->numcaches = 0;
+  infos->cache = NULL;
+
+  /* Intel doesn't actually provide 0x80000005 information */
+  if (cpuid_type != intel && highest_ext_cpuid >= 0x80000005) {
+    eax = 0x80000005;
+    hwloc_cpuid(&eax, &ebx, &ecx, &edx);
+    fill_amd_cache(infos, 1, ecx);
+  }
+
+  /* Intel doesn't actually provide 0x80000006 information */
+  if (cpuid_type != intel && highest_ext_cpuid >= 0x80000006) {
+    eax = 0x80000006;
+    hwloc_cpuid(&eax, &ebx, &ecx, &edx);
+    fill_amd_cache(infos, 2, ecx);
+    fill_amd_cache(infos, 3, edx);
+  }
+
+  /* AMD doesn't actually provide 0x80000008 information */
+  if (cpuid_type != amd && highest_cpuid >= 0x04) {
+    cachenum = 0;
+    for (cachenum = 0; ; cachenum++) {
+      unsigned type;
+      eax = 0x04;
+      ecx = cachenum;
+      hwloc_cpuid(&eax, &ebx, &ecx, &edx);
+
+      type = eax & 0x1f;
+
+      hwloc_debug("cache %u type %u\n", cachenum, type);
+
+      if (type == 0)
+	break;
+      if (type == 2)
+	/* Instruction cache */
+	continue;
+      infos->numcaches++;
+    }
+
+    cache = infos->cache = malloc(infos->numcaches * sizeof(*infos->cache));
+
+    for (cachenum = 0; ; cachenum++) {
+      unsigned linesize, linepart, ways, sets;
+      unsigned type;
+      eax = 0x04;
+      ecx = cachenum;
+      hwloc_cpuid(&eax, &ebx, &ecx, &edx);
+
+      type = eax & 0x1f;
+
+      if (type == 0)
+	break;
+      if (type == 2)
+	/* Instruction cache */
+	continue;
+
+      cache->type = type;
+
+      cache->level = (eax >> 5) & 0x7;
+      cache->nbthreads_sharing = ((eax >> 14) & 0xfff) + 1;
+      infos->max_nbcores = ((eax >> 26) & 0x3f) + 1;
+
+      cache->linesize = linesize = (ebx & 0xfff) + 1;
+      cache->linepart = linepart = ((ebx >> 12) & 0x3ff) + 1;
+      cache->ways = ways = ((ebx >> 22) & 0x3ff) + 1;
+      cache->sets = sets = ecx + 1;
+      cache->size = linesize * linepart * ways * sets;
+
+      hwloc_debug("cache %u type %u L%u t%u c%u linesize %u linepart %u ways %u sets %u, size %uKB\n", cachenum, cache->type, cache->level, cache->nbthreads_sharing, infos->max_nbcores, linesize, linepart, ways, sets, cache->size >> 10);
+      infos->max_nbthreads = infos->max_log_proc / infos->max_nbcores;
+      hwloc_debug("thus %u threads\n", infos->max_nbthreads);
+      infos->threadid = infos->logprocid % infos->max_nbthreads;
+      infos->coreid = infos->logprocid / infos->max_nbthreads;
+      hwloc_debug("this is thread %u of core %u\n", infos->threadid, infos->coreid);
+
+      cache++;
+    }
+  }
+}
+
+/* Analyse information stored in infos, and build topology levels accordingly */
+static void summarize(hwloc_topology_t topology, struct procinfo *infos, unsigned nbprocs)
+{
+  hwloc_cpuset_t complete_cpuset = hwloc_cpuset_alloc();
+  unsigned i, j;
+
+  for (i = 0; i < nbprocs; i++)
+    if (infos[i].present)
+      hwloc_cpuset_set(complete_cpuset, i);
+
+  /* Look for sockets */
+  {
+    hwloc_cpuset_t sockets_cpuset = hwloc_cpuset_dup(complete_cpuset);
+    hwloc_cpuset_t socket_cpuset;
+    hwloc_obj_t socket;
+
+    while ((i = hwloc_cpuset_first(sockets_cpuset)) != (unsigned) -1) {
+      unsigned socketid = infos[i].socketid;
+
+      socket_cpuset = hwloc_cpuset_alloc();
+      hwloc_cpuset_zero(socket_cpuset);
+      for (j = i; j < nbprocs; j++) {
+        if (infos[j].socketid == socketid) {
+          hwloc_cpuset_set(socket_cpuset, j);
+          hwloc_cpuset_clr(sockets_cpuset, j);
+        }
+      }
+      socket = hwloc_alloc_setup_object(HWLOC_OBJ_SOCKET, socketid);
+      socket->cpuset = socket_cpuset;
+      hwloc_debug_1arg_cpuset("os socket %u has cpuset %s\n",
+          socketid, socket_cpuset);
+      hwloc_insert_object_by_cpuset(topology, socket);
+    }
+    hwloc_cpuset_free(sockets_cpuset);
+  }
+
+  /* Look for cores */
+  {
+    hwloc_cpuset_t cores_cpuset = hwloc_cpuset_dup(complete_cpuset);
+    hwloc_cpuset_t core_cpuset;
+    hwloc_obj_t core;
+
+    while ((i = hwloc_cpuset_first(cores_cpuset)) != (unsigned) -1) {
+      unsigned socketid = infos[i].socketid;
+      unsigned coreid = infos[i].coreid;
+
+      if (coreid == (unsigned) -1) {
+        hwloc_cpuset_clr(cores_cpuset, i);
+	continue;
+      }
+
+      core_cpuset = hwloc_cpuset_alloc();
+      hwloc_cpuset_zero(core_cpuset);
+      for (j = i; j < nbprocs; j++) {
+	if (infos[j].coreid == (unsigned) -1) {
+	  hwloc_cpuset_clr(cores_cpuset, j);
+	  continue;
+	}
+
+        if (infos[j].socketid == socketid && infos[j].coreid == coreid) {
+          hwloc_cpuset_set(core_cpuset, j);
+          hwloc_cpuset_clr(cores_cpuset, j);
+        }
+      }
+      core = hwloc_alloc_setup_object(HWLOC_OBJ_CORE, coreid);
+      core->cpuset = core_cpuset;
+      hwloc_debug_1arg_cpuset("os core %u has cpuset %s\n",
+          coreid, core_cpuset);
+      hwloc_insert_object_by_cpuset(topology, core);
+    }
+    hwloc_cpuset_free(cores_cpuset);
+  }
+
+  /* Look for caches */
+  /* First find max level */
+  unsigned level = 0, l;
+  for (i = 0; i < nbprocs; i++)
+    for (j = 0; j < infos[i].numcaches; j++)
+      if (infos[i].cache[j].level > level)
+        level = infos[i].cache[j].level;
+
+  while (level > 0) {
+    /* Look for caches at level level */
+    {
+      hwloc_cpuset_t caches_cpuset = hwloc_cpuset_dup(complete_cpuset);
+      hwloc_cpuset_t cache_cpuset;
+      hwloc_obj_t cache;
+
+      while ((i = hwloc_cpuset_first(caches_cpuset)) != (unsigned) -1) {
+        unsigned socketid = infos[i].socketid;
+
+        for (l = 0; l < infos[i].numcaches; l++) {
+          if (infos[i].cache[l].level == level)
+            break;
+        }
+        if (l == infos[i].numcaches) {
+          /* no cache Llevel in i, odd */
+          hwloc_cpuset_clr(caches_cpuset, i);
+          continue;
+        }
+
+        {
+          unsigned cacheid = infos[i].apicid / infos[i].cache[l].nbthreads_sharing;
+
+          cache_cpuset = hwloc_cpuset_alloc();
+          hwloc_cpuset_zero(cache_cpuset);
+          for (j = i; j < nbprocs; j++) {
+            unsigned l2;
+            for (l2 = 0; l2 < infos[j].numcaches; l2++) {
+              if (infos[j].cache[l2].level == level)
+                break;
+            }
+            if (l2 == infos[j].numcaches) {
+              /* no cache Llevel in j, odd */
+              hwloc_cpuset_clr(caches_cpuset, j);
+              continue;
+            }
+            if (infos[j].socketid == socketid && infos[j].apicid / infos[j].cache[l2].nbthreads_sharing == cacheid) {
+              hwloc_cpuset_set(cache_cpuset, j);
+              hwloc_cpuset_clr(caches_cpuset, j);
+            }
+          }
+          cache = hwloc_alloc_setup_object(HWLOC_OBJ_CACHE, cacheid);
+          cache->attr->cache.depth = level;
+          cache->attr->cache.size = infos[i].cache[l].size;
+          cache->cpuset = cache_cpuset;
+          hwloc_debug_2args_cpuset("os L%u cache %u has cpuset %s\n",
+              level, cacheid, cache_cpuset);
+          hwloc_insert_object_by_cpuset(topology, cache);
+        }
+      }
+      hwloc_cpuset_free(caches_cpuset);
+    }
+    level--;
+  }
+
+  for (i = 0; i < nbprocs; i++)
+    free(infos[i].cache);
+}
+
+#define INTEL_EBX ('G' | ('e'<<8) | ('n'<<16) | ('u'<<24))
+#define INTEL_EDX ('i' | ('n'<<8) | ('e'<<16) | ('I'<<24))
+#define INTEL_ECX ('n' | ('t'<<8) | ('e'<<16) | ('l'<<24))
+
+#define AMD_EBX ('A' | ('u'<<8) | ('t'<<16) | ('h'<<24))
+#define AMD_EDX ('e' | ('n'<<8) | ('t'<<16) | ('i'<<24))
+#define AMD_ECX ('c' | ('A'<<8) | ('M'<<16) | ('D'<<24))
+
+void hwloc_look_x86(struct hwloc_topology *topology, unsigned nbprocs)
+{
+    /* This function must always be here, but it's ok if it's empty. */
+#if defined(HWLOC_HAVE_CPUID)
+  unsigned eax, ebx, ecx = 0, edx;
+  hwloc_cpuset_t orig_cpuset;
+  unsigned i;
+  unsigned highest_cpuid;
+  unsigned highest_ext_cpuid;
+  struct procinfo infos[nbprocs];
+  enum cpuid_type cpuid_type = unknown;
+
+  if (!hwloc_have_cpuid())
+    return;
+
+  eax = 0x00;
+  hwloc_cpuid(&eax, &ebx, &ecx, &edx);
+  highest_cpuid = eax;
+  if (ebx == INTEL_EBX && ecx == INTEL_ECX && edx == INTEL_EDX)
+    cpuid_type = intel;
+  if (ebx == AMD_EBX && ecx == AMD_ECX && edx == AMD_EDX)
+    cpuid_type = amd;
+
+  hwloc_debug("highest cpuid %x, cpuid type %u\n", highest_cpuid, cpuid_type);
+  if (highest_cpuid < 0x01)
+    return;
+
+  eax = 0x80000000;
+  hwloc_cpuid(&eax, &ebx, &ecx, &edx);
+  highest_ext_cpuid = eax;
+
+  hwloc_debug("highest extended cpuid %x\n", highest_ext_cpuid);
+
+  orig_cpuset = hwloc_cpuset_alloc();
+
+  if (topology->get_thisthread_cpubind && topology->set_thisthread_cpubind) {
+    if (!topology->get_thisthread_cpubind(topology, orig_cpuset, HWLOC_CPUBIND_STRICT)) {
+      hwloc_cpuset_t cpuset = hwloc_cpuset_alloc();
+      for (i = 0; i < nbprocs; i++) {
+        hwloc_cpuset_cpu(cpuset, i);
+        if (topology->set_thisthread_cpubind(topology, cpuset, HWLOC_CPUBIND_STRICT))
+          continue;
+        look_proc(&infos[i], highest_cpuid, highest_ext_cpuid, cpuid_type);
+      }
+      hwloc_cpuset_free(cpuset);
+      topology->set_thisthread_cpubind(topology, orig_cpuset, 0);
+      hwloc_cpuset_free(orig_cpuset);
+      summarize(topology, infos, nbprocs);
+      return;
+    }
+  }
+  if (topology->get_thisproc_cpubind && topology->set_thisproc_cpubind) {
+    if (!topology->get_thisproc_cpubind(topology, orig_cpuset, HWLOC_CPUBIND_STRICT)) {
+      hwloc_cpuset_t cpuset = hwloc_cpuset_alloc();
+      for (i = 0; i < nbprocs; i++) {
+        hwloc_cpuset_cpu(cpuset, i);
+        if (topology->set_thisproc_cpubind(topology, cpuset, HWLOC_CPUBIND_STRICT))
+          continue;
+        look_proc(&infos[i], highest_cpuid, highest_ext_cpuid, cpuid_type);
+      }
+      hwloc_cpuset_free(cpuset);
+      topology->set_thisproc_cpubind(topology, orig_cpuset, 0);
+      hwloc_cpuset_free(orig_cpuset);
+      summarize(topology, infos, nbprocs);
+      return;
+    }
+  }
+#endif
+}

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-xml.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-xml.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology-xml.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,5 +1,6 @@
 /*
  * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
+ * Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
  * See COPYING in top-level directory.
  */
 
@@ -8,12 +9,13 @@
 #include <private/private.h>
 #include <private/debug.h>
 
-#ifdef HAVE_XML
+#ifdef HWLOC_HAVE_XML
 
 #include <libxml/parser.h>
 #include <libxml/tree.h>
 
 #include <assert.h>
+#include <strings.h>
 
 int
 hwloc_backend_xml_init(struct hwloc_topology *topology, const char *xmlpath)
@@ -28,8 +30,6 @@
   if (!doc)
     return -1;
 
-  /* TODO: warn if dtd is not hwloc.dtd? */
-
   topology->backend_params.xml.doc = doc;
   topology->is_thissystem = 0;
   topology->backend_type = HWLOC_BACKEND_XML;
@@ -45,271 +45,498 @@
   topology->backend_type = HWLOC_BACKEND_NONE;
 }
 
+/******************************
+ ********* XML import *********
+ ******************************/
+
 static void
-hwloc__process_root_attr(struct hwloc_topology *topology,
-			const xmlChar *_name, const xmlChar *_value)
+hwloc__xml_import_topology_attr(struct hwloc_topology *topology __hwloc_attribute_unused,
+				const xmlChar *_name, const xmlChar *_value __hwloc_attribute_unused)
 {
   const char *name = (const char *) _name;
-/* unused for now   const char *value = (const char *) _value; */
 
   fprintf(stderr, "ignoring unknown root attribute %s\n", name);
 }
 
 static void
-hwloc__process_object_attr(struct hwloc_topology *topology, struct hwloc_obj *obj,
-			  const xmlChar *_name, const xmlChar *_value)
+hwloc__xml_import_pagetype_attr(struct hwloc_topology *topology __hwloc_attribute_unused, struct hwloc_obj_memory_page_type_s *page_type,
+				const xmlChar *_name, const xmlChar *_value)
 {
   const char *name = (const char *) _name;
   const char *value = (const char *) _value;
 
+  if (!strcmp(name, "size"))
+    page_type->size = strtoul(value, NULL, 10);
+  else if (!strcmp(name, "count"))
+    page_type->count = strtoul(value, NULL, 10);
+
+  else
+    fprintf(stderr, "ignoring unknown pagetype attribute %s\n", name);
+}
+
+static void
+hwloc__xml_import_object_attr(struct hwloc_topology *topology __hwloc_attribute_unused, struct hwloc_obj *obj,
+			      const xmlChar *_name, const xmlChar *_value)
+{
+  const char *name = (const char *) _name;
+  const char *value = (const char *) _value;
+
   if (!strcmp(name, "type")) {
     /* already handled */
     return;
   }
 
+  else if (!strcmp(name, "os_level"))
+    obj->os_level = strtoul(value, NULL, 10);
   else if (!strcmp(name, "os_index"))
     obj->os_index = strtoul(value, NULL, 10);
-  else if (!strcmp(name, "cpuset"))
-    obj->cpuset = hwloc_cpuset_from_string(value);
+  else if (!strcmp(name, "cpuset")) {
+    obj->cpuset = hwloc_cpuset_alloc();
+    hwloc_cpuset_from_string(obj->cpuset, value);
+  } else if (!strcmp(name, "complete_cpuset")) {
+    obj->complete_cpuset = hwloc_cpuset_alloc();
+    hwloc_cpuset_from_string(obj->complete_cpuset,value);
+  } else if (!strcmp(name, "online_cpuset")) {
+    obj->online_cpuset = hwloc_cpuset_alloc();
+    hwloc_cpuset_from_string(obj->online_cpuset, value);
+  } else if (!strcmp(name, "allowed_cpuset")) {
+    obj->allowed_cpuset = hwloc_cpuset_alloc();
+    hwloc_cpuset_from_string(obj->allowed_cpuset, value);
+  } else if (!strcmp(name, "nodeset")) {
+    obj->nodeset = hwloc_cpuset_alloc();
+    hwloc_cpuset_from_string(obj->nodeset, value);
+  } else if (!strcmp(name, "complete_nodeset")) {
+    obj->complete_nodeset = hwloc_cpuset_alloc();
+    hwloc_cpuset_from_string(obj->complete_nodeset, value);
+  } else if (!strcmp(name, "allowed_nodeset")) {
+    obj->allowed_nodeset = hwloc_cpuset_alloc();
+    hwloc_cpuset_from_string(obj->allowed_nodeset, value);
+  } else if (!strcmp(name, "name"))
+    obj->name = strdup(value);
 
-  else if (!strcmp(name, "memory_kB")) {
+  else if (!strcmp(name, "cache_size")) {
+    unsigned long long lvalue = strtoull(value, NULL, 10);
+    if (obj->type == HWLOC_OBJ_CACHE)
+      obj->attr->cache.size = lvalue;
+    else
+      fprintf(stderr, "ignoring cache_size attribute for non-cache object type\n");
+  }
+
+  else if (!strcmp(name, "local_memory"))
+    obj->memory.local_memory = strtoull(value, NULL, 10);
+
+  else if (!strcmp(name, "depth")) {
     unsigned long lvalue = strtoul(value, NULL, 10);
     switch (obj->type) {
       case HWLOC_OBJ_CACHE:
-	obj->attr->cache.memory_kB = lvalue;
+	obj->attr->cache.depth = lvalue;
 	break;
-      case HWLOC_OBJ_NODE:
-	obj->attr->node.memory_kB = lvalue;
+      case HWLOC_OBJ_GROUP:
+	obj->attr->group.depth = lvalue;
 	break;
-      case HWLOC_OBJ_MACHINE:
-	obj->attr->machine.memory_kB = lvalue;
-	break;
-      case HWLOC_OBJ_SYSTEM:
-	obj->attr->system.memory_kB = lvalue;
-	break;
       default:
-	fprintf(stderr, "ignoring memory_kB attribute for object type without memory\n");
+	fprintf(stderr, "ignoring depth attribute for object type without depth\n");
 	break;
     }
   }
 
-  else if (!strcmp(name, "depth")) {
-    unsigned long lvalue = strtoul(value, NULL, 10);
+  else if (!strcmp(name, "dmi_board_vendor")) {
     switch (obj->type) {
-      case HWLOC_OBJ_CACHE:
-	obj->attr->cache.depth = lvalue;
+      case HWLOC_OBJ_MACHINE:
+	obj->attr->machine.dmi_board_vendor = strdup(value);
 	break;
-      case HWLOC_OBJ_MISC:
-	obj->attr->misc.depth = lvalue;
-	break;
       default:
-	fprintf(stderr, "ignoring depth attribute for object type without depth\n");
+	fprintf(stderr, "ignoring dmi_board_vendor attribute for object type without DMI board\n");
 	break;
     }
   }
 
-  else if (!strcmp(name, "huge_page_free")) {
-    unsigned long lvalue = strtoul(value, NULL, 10);
+  else if (!strcmp(name, "dmi_board_name")) {
     switch (obj->type) {
-      case HWLOC_OBJ_NODE:
-	obj->attr->node.huge_page_free = lvalue;
-	break;
       case HWLOC_OBJ_MACHINE:
-	obj->attr->machine.huge_page_free = lvalue;
+	obj->attr->machine.dmi_board_name = strdup(value);
 	break;
-      case HWLOC_OBJ_SYSTEM:
-	obj->attr->system.huge_page_free = lvalue;
-	break;
       default:
-	fprintf(stderr, "ignoring huge_page_free attribute for object type without huge pages\n");
+	fprintf(stderr, "ignoring dmi_board_name attribute for object type without DMI board\n");
 	break;
     }
   }
 
-  else if (!strcmp(name, "huge_page_size_kB")) {
-    unsigned long lvalue = strtoul(value, NULL, 10);
+
+
+  /*************************
+   * deprecated (from 0.9)
+   */
+  else if (!strcmp(name, "memory_kB")) {
+    unsigned long long lvalue = strtoull(value, NULL, 10);
     switch (obj->type) {
+      case HWLOC_OBJ_CACHE:
+	obj->attr->cache.size = lvalue << 10;
+	break;
+      case HWLOC_OBJ_NODE:
       case HWLOC_OBJ_MACHINE:
-	obj->attr->machine.huge_page_size_kB = lvalue;
-	break;
       case HWLOC_OBJ_SYSTEM:
-	obj->attr->system.huge_page_size_kB = strtoul(value, NULL, 10);
+	obj->memory.local_memory = lvalue << 10;
 	break;
       default:
-	fprintf(stderr, "ignoring huge_page_size_kB attribute for object type without huge pages\n");
+	fprintf(stderr, "ignoring memory_kB attribute for object type without memory\n");
 	break;
     }
   }
-
-  else if (!strcmp(name, "dmi_board_vendor")) {
+  else if (!strcmp(name, "huge_page_size_kB")) {
+    unsigned long lvalue = strtoul(value, NULL, 10);
     switch (obj->type) {
+      case HWLOC_OBJ_NODE:
       case HWLOC_OBJ_MACHINE:
-	obj->attr->machine.dmi_board_vendor = strdup(value);
-	break;
       case HWLOC_OBJ_SYSTEM:
-	obj->attr->system.dmi_board_vendor = strdup(value);
+	if (!obj->memory.page_types) {
+	  obj->memory.page_types = malloc(sizeof(*obj->memory.page_types));
+	  obj->memory.page_types_len = 1;
+	}
+	obj->memory.page_types[0].size = lvalue << 10;
 	break;
       default:
-	fprintf(stderr, "ignoring dmi_board_vendor attribute for object type without DMI board\n");
+	fprintf(stderr, "ignoring huge_page_size_kB attribute for object type without huge pages\n");
 	break;
     }
   }
-
-  else if (!strcmp(name, "dmi_board_name")) {
+  else if (!strcmp(name, "huge_page_free")) {
+    unsigned long lvalue = strtoul(value, NULL, 10);
     switch (obj->type) {
+      case HWLOC_OBJ_NODE:
       case HWLOC_OBJ_MACHINE:
-	obj->attr->machine.dmi_board_name = strdup(value);
-	break;
       case HWLOC_OBJ_SYSTEM:
-	obj->attr->system.dmi_board_name = strdup(value);
+	if (!obj->memory.page_types) {
+	  obj->memory.page_types = malloc(sizeof(*obj->memory.page_types));
+	  obj->memory.page_types_len = 1;
+	}
+	obj->memory.page_types[0].count = lvalue;
 	break;
       default:
-	fprintf(stderr, "ignoring dmi_board_name attribute for object type without DMI board\n");
+	fprintf(stderr, "ignoring huge_page_free attribute for object type without huge pages\n");
 	break;
     }
   }
+  /*
+   * end of deprecated (from 0.9)
+   *******************************/
 
+
+
   else
     fprintf(stderr, "ignoring unknown object attribute %s\n", name);
 }
 
-static void
-hwloc__look_xml_attr(struct hwloc_topology *topology, struct hwloc_obj *obj,
-		    const xmlChar *attrname, xmlNode *node)
+static const xmlChar *
+hwloc__xml_import_attr_value(xmlAttr *attr)
 {
+  xmlNode *subnode;
   /* use the first valid attribute content */
-  for (; node; node = node->next) {
-    if (node->type == XML_TEXT_NODE) {
-      if (node->content && node->content[0] != '\0' && node->content[0] != '\n') {
-	if (obj)
-	  hwloc__process_object_attr(topology, obj, attrname, node->content);
-	else
-	  hwloc__process_root_attr(topology, attrname, node->content);
-	break;
-      }
+  for (subnode = attr->children; subnode; subnode = subnode->next) {
+    if (subnode->type == XML_TEXT_NODE) {
+      if (subnode->content && subnode->content[0] != '\0' && subnode->content[0] != '\n')
+	return subnode->content;
     } else {
-	fprintf(stderr, "ignoring unexpected xml attr node type %u name %s\n", node->type, (const char*) node->name);
+      fprintf(stderr, "ignoring unexpected xml attr node type %u\n", subnode->type);
     }
   }
+  return NULL;
 }
 
 static void
-hwloc__look_xml_node(struct hwloc_topology *topology, xmlNode *node, int depth)
+hwloc__xml_import_pagetype_node(struct hwloc_topology *topology, struct hwloc_obj_memory_page_type_s *pagetype, xmlNode *node)
 {
-  for (; node; node = node->next) {
-    if (node->type == XML_ELEMENT_NODE) {
-      xmlAttr *attr = NULL;
-      struct hwloc_obj *obj = NULL;
+  xmlAttr *attr = NULL;
 
-      if (depth == 0) {
-	/* root node should be in root class */
-	if (strcmp((const char *) node->name, "root"))
-	  fprintf(stderr, "root node of class `%s' instead of `root'\n", (const char*) node->name);
+  for (attr = node->properties; attr; attr = attr->next) {
+    if (attr->type == XML_ATTRIBUTE_NODE) {
+      const xmlChar *value = hwloc__xml_import_attr_value(attr);
+      if (value)
+	hwloc__xml_import_pagetype_attr(topology, pagetype, attr->name, value);
+      else
+	fprintf(stderr, "ignoring unexpected xml pagetype attr name `%s' with no value\n", (const char*) attr->name);
+    } else {
+      fprintf(stderr, "ignoring unexpected xml pagetype attr type %u\n", attr->type);
+    }
+  }
+}
 
-	/* no object yet */
+static void hwloc__xml_import_node(struct hwloc_topology *topology, struct hwloc_obj *parent, xmlNode *node, int depth);
 
-      } else {
-	/* object node should be in object class */
-	if (strcmp((const char*) node->name, "object"))
-	  fprintf(stderr, "object node of class `%s' instead of `object'\n", (const char*) node->name);
+static void
+hwloc__xml_import_object_node(struct hwloc_topology *topology, struct hwloc_obj *parent, struct hwloc_obj *obj, xmlNode *node, int depth)
+{
+  xmlAttr *attr = NULL;
 
-	if (depth > 1)
-	  obj = hwloc_alloc_setup_object(HWLOC_OBJ_TYPE_MAX, -1);
-	else
-	  obj = topology->levels[0][0];
+  /* first determine the object type */
+  for (attr = node->properties; attr; attr = attr->next) {
+    if (attr->type == XML_ATTRIBUTE_NODE && !strcmp((const char*) attr->name, "type")) {
+      const xmlChar *value = hwloc__xml_import_attr_value(attr);
+      if (!value) {
+	fprintf(stderr, "ignoring xml object without type attr %s\n", (const char*) value);
+	return;
       }
-
-      /* first determine the object type */
-      for (attr = node->properties; attr; attr = attr->next) {
-	if (attr->type == XML_ATTRIBUTE_NODE) {
-	  xmlNode *node;
-	  for (node = attr->children; node; node = node->next) {
-	    if (node->type == XML_TEXT_NODE) {
-	      if (node->content && node->content[0] != '\0' && node->content[0] != '\n') {
-		if (!strcmp((const char*) attr->name, "type")) {
-		  obj->type = hwloc_obj_type_of_string((const char*) node->content);
-		  if (obj->type == HWLOC_OBJ_TYPE_MAX)
-		    fprintf(stderr, "ignoring unknown object type %s\n", (const char*) node->content);
-		  else
-		    break;
-		}
-	      }
-	    } else {
-		fprintf(stderr, "ignoring unexpected xml attr node type %u name %s\n", node->type, (const char*) node->name);
-	    }
-	  }
-	  if (obj->type == HWLOC_OBJ_TYPE_MAX) {
-	    fprintf(stderr, "ignoring attributes of object without type\n");
-	    return;
-	  }
-	} else {
-	  fprintf(stderr, "ignoring unexpected xml attr type %u\n", attr->type);
-	}
+      obj->type = hwloc_obj_type_of_string((const char*) value);
+      if (obj->type == (hwloc_obj_type_t)-1) {
+	fprintf(stderr, "ignoring unknown object type %s\n", (const char*) value);
+	return;
       }
+      break;
+    } else {
+      fprintf(stderr, "ignoring unexpected xml attr type %u\n", attr->type);
+    }
+  }
+  if (obj->type == HWLOC_OBJ_TYPE_MAX) {
+    fprintf(stderr, "ignoring object without type\n");
+    return;
+  }
 
-      /* process attributes */
-      for (attr = node->properties; attr; attr = attr->next) {
-	if (attr->type == XML_ATTRIBUTE_NODE) {
-	  if (attr->children)
-	    hwloc__look_xml_attr(topology, obj, attr->name, attr->children);
-	} else {
-	  fprintf(stderr, "ignoring unexpected xml attr type %u\n", attr->type);
-	}
-      }
+  /* process attributes now that the type is known */
+  for (attr = node->properties; attr; attr = attr->next) {
+    if (attr->type == XML_ATTRIBUTE_NODE) {
+      const xmlChar *value = hwloc__xml_import_attr_value(attr);
+      if (value)
+	hwloc__xml_import_object_attr(topology, obj, attr->name, value);
+      else
+	fprintf(stderr, "ignoring unexpected xml object attr name `%s' with no value\n", (const char*) attr->name);
+    } else {
+      fprintf(stderr, "ignoring unexpected xml object attr type %u\n", attr->type);
+    }
+  }
 
-      if (depth == 0) {
-	/* no object in xml doc root */
-	assert (!obj);
+  if (depth > 0) { /* root object is already in place */
+    /* add object */
+    hwloc_insert_object_by_parent(topology, parent, obj);
+  }
 
-      } else if (depth == 1) {
-	/* system object is already there */
-	if (obj->type != HWLOC_OBJ_SYSTEM) {
-	  fprintf(stderr, "enforcing System type in top level instead of %s\n",
-		  hwloc_obj_type_string(obj->type));
-	  obj->type = HWLOC_OBJ_SYSTEM;
-	}
+  /* process children */
+  if (node->children)
+    hwloc__xml_import_node(topology, obj, node->children, depth+1);
+}
 
+
+static void
+hwloc__xml_import_node(struct hwloc_topology *topology, struct hwloc_obj *parent, xmlNode *node, int depth)
+{
+  for (; node; node = node->next) {
+    if (node->type == XML_ELEMENT_NODE) {
+      if (!strcmp((const char*) node->name, "object")) {
+	/* object attributes */
+	struct hwloc_obj *obj;
+	if (depth)
+	  obj = hwloc_alloc_setup_object(HWLOC_OBJ_TYPE_MAX, -1);
+	else
+	  obj = topology->levels[0][0];
+	hwloc__xml_import_object_node(topology, parent, obj, node, depth);
+
+      } else if (!strcmp((const char*) node->name, "page_type")) {
+	int idx = parent->memory.page_types_len;
+	parent->memory.page_types = realloc(parent->memory.page_types, (idx+1)*sizeof(*parent->memory.page_types));
+	hwloc__xml_import_pagetype_node(topology, &parent->memory.page_types[idx], node);
+	parent->memory.page_types_len = idx+1;
+
       } else {
-	/* add object */
-	if (obj->type >= HWLOC_OBJ_TYPE_MAX) {
-	  fprintf(stderr, "ignoring object with invalid type %u\n", obj->type);
-	  free(obj);
-	} else if (obj->type == HWLOC_OBJ_SYSTEM) {
-	  fprintf(stderr, "ignoring system object at invalid depth %d\n", depth);
-	  free(obj);
-	} else {
-	  if (!hwloc_cpuset_isincluded(obj->cpuset, topology->levels[0][0]->cpuset)) {
-            char *s1 = hwloc_cpuset_printf_value(obj->cpuset), *s2 = hwloc_cpuset_printf_value(topology->levels[0][0]->cpuset);
-	    fprintf(stderr, "ignoring object (cpuset %s) not covered by system (cpuset %s)\n", s1, s2);
-            free(s1);
-            free(s2);
-          }
-	  else
-	    hwloc_add_object(topology, obj);
-	}
+	/* unknown class */
+	fprintf(stderr, "ignoring unexpected node class `%s'\n", (const char*) node->name);
+	continue;
       }
 
-      /* process children */
-      if (node->children)
-	hwloc__look_xml_node(topology, node->children, depth+1);
-
     } else if (node->type == XML_TEXT_NODE) {
       if (node->content && node->content[0] != '\0' && node->content[0] != '\n')
-	fprintf(stderr, "ignoring object text content %s\n", (const char*) node->content);      
+	fprintf(stderr, "ignoring object text content %s\n", (const char*) node->content);
     } else {
       fprintf(stderr, "ignoring unexpected xml node type %u\n", node->type);
     }
   }
 }
 
+static void
+hwloc__xml_import_topology_node(struct hwloc_topology *topology, xmlNode *node)
+{
+  xmlAttr *attr = NULL;
+
+  if (strcmp((const char *) node->name, "topology") && strcmp((const char *) node->name, "root")) {
+    /* root node should be in "topology" class (or "root" if importing from < 1.0) */
+    fprintf(stderr, "ignoring object of class `%s' not at the top the xml hierarchy\n", (const char *) node->name);
+    return;
+  }
+
+  /* process attributes */
+  for (attr = node->properties; attr; attr = attr->next) {
+    if (attr->type == XML_ATTRIBUTE_NODE) {
+      const xmlChar *value = hwloc__xml_import_attr_value(attr);
+      if (value)
+	hwloc__xml_import_topology_attr(topology, attr->name, value);
+      else
+	fprintf(stderr, "ignoring unexpected xml root attr name `%s' with no value\n", (const char*) attr->name);
+    } else {
+      fprintf(stderr, "ignoring unexpected xml root attr type %u\n", attr->type);
+    }
+  }
+
+  /* process children */
+  if (node->children)
+    hwloc__xml_import_node(topology, NULL, node->children, 0);
+}
+
 void
 hwloc_look_xml(struct hwloc_topology *topology)
 {
   xmlNode* root_node;
+  xmlDtd *dtd;
 
+  topology->support.discovery->pu = 1;
+
+  dtd = xmlGetIntSubset((xmlDoc*) topology->backend_params.xml.doc);
+  if (!dtd)
+    fprintf(stderr, "Loading XML topology without DTD\n");
+  else if (strcmp((char *) dtd->SystemID, "hwloc.dtd"))
+    fprintf(stderr, "Loading XML topology with wrong DTD SystemID (%s instead of %s)\n",
+	    (char *) dtd->SystemID, "hwloc.dtd");
+
   root_node = xmlDocGetRootElement((xmlDoc*) topology->backend_params.xml.doc);
 
-  hwloc__look_xml_node(topology, root_node, 0);
+  hwloc__xml_import_topology_node(topology, root_node);
+  if (root_node->next)
+    fprintf(stderr, "ignoring non-first root nodes\n");
+
+  /* TODO: abort if we got an invalid topology or so */
 }
 
-#endif /* HAVE_XML */
+/******************************
+ ********* XML export *********
+ ******************************/
+
+static void
+hwloc__xml_export_object (hwloc_topology_t topology, hwloc_obj_t obj, xmlNodePtr root_node)
+{
+  xmlNodePtr node = NULL, ptnode = NULL;
+  char *cpuset = NULL;
+  char tmp[255];
+  unsigned i;
+
+  /* xmlNewChild() creates a new node, which is "attached" as child node
+   * of root_node node. */
+  node = xmlNewChild(root_node, NULL, BAD_CAST "object", NULL);
+  xmlNewProp(node, BAD_CAST "type", BAD_CAST hwloc_obj_type_string(obj->type));
+  sprintf(tmp, "%d", obj->os_level);
+  xmlNewProp(node, BAD_CAST "os_level", BAD_CAST tmp);
+  if (obj->os_index != (unsigned) -1) {
+    sprintf(tmp, "%u", obj->os_index);
+    xmlNewProp(node, BAD_CAST "os_index", BAD_CAST tmp);
+  }
+  if (obj->cpuset) {
+    hwloc_cpuset_asprintf(&cpuset, obj->cpuset);
+    xmlNewProp(node, BAD_CAST "cpuset", BAD_CAST cpuset);
+    free(cpuset);
+  }
+  if (obj->complete_cpuset) {
+    hwloc_cpuset_asprintf(&cpuset, obj->complete_cpuset);
+    xmlNewProp(node, BAD_CAST "complete_cpuset", BAD_CAST cpuset);
+    free(cpuset);
+  }
+  if (obj->online_cpuset) {
+    hwloc_cpuset_asprintf(&cpuset, obj->online_cpuset);
+    xmlNewProp(node, BAD_CAST "online_cpuset", BAD_CAST cpuset);
+    free(cpuset);
+  }
+  if (obj->allowed_cpuset) {
+    hwloc_cpuset_asprintf(&cpuset, obj->allowed_cpuset);
+    xmlNewProp(node, BAD_CAST "allowed_cpuset", BAD_CAST cpuset);
+    free(cpuset);
+  }
+  if (obj->nodeset) {
+    hwloc_cpuset_asprintf(&cpuset, obj->nodeset);
+    xmlNewProp(node, BAD_CAST "nodeset", BAD_CAST cpuset);
+    free(cpuset);
+  }
+  if (obj->complete_nodeset) {
+    hwloc_cpuset_asprintf(&cpuset, obj->complete_nodeset);
+    xmlNewProp(node, BAD_CAST "complete_nodeset", BAD_CAST cpuset);
+    free(cpuset);
+  }
+  if (obj->allowed_nodeset) {
+    hwloc_cpuset_asprintf(&cpuset, obj->allowed_nodeset);
+    xmlNewProp(node, BAD_CAST "allowed_nodeset", BAD_CAST cpuset);
+    free(cpuset);
+  }
+
+  if (obj->name)
+    xmlNewProp(node, BAD_CAST "name", BAD_CAST obj->name);
+
+  switch (obj->type) {
+  case HWLOC_OBJ_CACHE:
+    sprintf(tmp, "%llu", (unsigned long long) obj->attr->cache.size);
+    xmlNewProp(node, BAD_CAST "cache_size", BAD_CAST tmp);
+    sprintf(tmp, "%u", obj->attr->cache.depth);
+    xmlNewProp(node, BAD_CAST "depth", BAD_CAST tmp);
+    break;
+  case HWLOC_OBJ_MACHINE:
+    if (obj->attr->machine.dmi_board_vendor)
+      xmlNewProp(node, BAD_CAST "dmi_board_vendor", BAD_CAST obj->attr->machine.dmi_board_vendor);
+    if (obj->attr->machine.dmi_board_name)
+      xmlNewProp(node, BAD_CAST "dmi_board_name", BAD_CAST obj->attr->machine.dmi_board_name);
+    break;
+  case HWLOC_OBJ_GROUP:
+    sprintf(tmp, "%u", obj->attr->group.depth);
+    xmlNewProp(node, BAD_CAST "depth", BAD_CAST tmp);
+    break;
+  default:
+    break;
+  }
+
+  if (obj->memory.local_memory) {
+    sprintf(tmp, "%llu", (unsigned long long) obj->memory.local_memory);
+    xmlNewProp(node, BAD_CAST "local_memory", BAD_CAST tmp);
+  }
+  for(i=0; i<obj->memory.page_types_len; i++) {
+    ptnode = xmlNewChild(node, NULL, BAD_CAST "page_type", NULL);
+    sprintf(tmp, "%llu", (unsigned long long) obj->memory.page_types[i].size);
+    xmlNewProp(ptnode, BAD_CAST "size", BAD_CAST tmp);
+    sprintf(tmp, "%llu", (unsigned long long) obj->memory.page_types[i].count);
+    xmlNewProp(ptnode, BAD_CAST "count", BAD_CAST tmp);
+  }
+
+  if (obj->arity) {
+    unsigned x;
+    for (x=0; x<obj->arity; x++)
+      hwloc__xml_export_object (topology, obj->children[x], node);
+  }
+}
+
+static void
+hwloc__xml_export_topology_info (hwloc_topology_t topology __hwloc_attribute_unused, xmlNodePtr root_node __hwloc_attribute_unused)
+{
+}
+
+void hwloc_topology_export_xml(hwloc_topology_t topology, const char *filename)
+{
+  xmlDocPtr doc = NULL;       /* document pointer */
+  xmlNodePtr root_node = NULL; /* root pointer */
+  xmlDtdPtr dtd = NULL;       /* DTD pointer */
+
+  LIBXML_TEST_VERSION;
+
+  /* Creates a new document, a node and set it as a root node. */
+  doc = xmlNewDoc(BAD_CAST "1.0");
+  root_node = xmlNewNode(NULL, BAD_CAST "topology");
+  xmlDocSetRootElement(doc, root_node);
+
+  /* Creates a DTD declaration. Isn't mandatory. */
+  dtd = xmlCreateIntSubset(doc, BAD_CAST "topology", NULL, BAD_CAST "hwloc.dtd");
+
+  hwloc__xml_export_object (topology, hwloc_get_root_obj(topology), root_node);
+
+  hwloc__xml_export_topology_info (topology, root_node);
+
+  /* Dumping document to stdio or file. */
+  xmlSaveFormatFileEnc(filename, doc, "UTF-8", 1);
+
+  /* Free the document. */
+  xmlFreeDoc(doc);
+
+  /* Free the global variables that may have been allocated by the parser. */
+  xmlCleanupParser();
+}
+
+#endif /* HWLOC_HAVE_XML */

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/topology.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,6 +1,6 @@
 /*
  * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
- * Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
+ * Copyright © 2009-2010 Cisco Systems, Inc.  All rights reserved.
  * See COPYING in top-level directory.
  */
 
@@ -29,40 +29,93 @@
 #include <mach/mach_host.h>
 #endif
 
-#ifdef WIN_SYS
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+
+#ifdef HAVE_SYS_SYSCTL_H
+#include <sys/sysctl.h>
+#endif
+
+#ifdef HWLOC_WIN_SYS
 #include <windows.h>
 #endif
 
+static void
+hwloc_topology_clear (struct hwloc_topology *topology);
+
+#if defined(HAVE_SYSCTLBYNAME)
+int hwloc_get_sysctlbyname(const char *name, int *ret)
+{
+  int n;
+  size_t size = sizeof(n);
+  if (sysctlbyname(name, &n, &size, NULL, 0))
+    return -1;
+  if (size != sizeof(n))
+    return -1;
+  *ret = n;
+  return 0;
+}
+#endif
+
+#if defined(HAVE_SYSCTL)
+int hwloc_get_sysctl(int name[], unsigned namelen, int *ret)
+{
+  int n;
+  size_t size = sizeof(n);
+  if (sysctl(name, namelen, &n, &size, NULL, 0))
+    return -1;
+  if (size != sizeof(n))
+    return -1;
+  *ret = n;
+  return 0;
+}
+#endif
+
 /* Return the OS-provided number of processors.  Unlike other methods such as
    reading sysfs on Linux, this method is not virtualizable; thus it's only
    used as a fall-back method, allowing `hwloc_set_fsroot ()' to
    have the desired effect.  */
 unsigned
-hwloc_fallback_nbprocessors(void) {
+hwloc_fallback_nbprocessors(struct hwloc_topology *topology) {
+  int n;
 #if HAVE_DECL__SC_NPROCESSORS_ONLN
-  return sysconf(_SC_NPROCESSORS_ONLN);
+  n = sysconf(_SC_NPROCESSORS_ONLN);
 #elif HAVE_DECL__SC_NPROC_ONLN
-  return sysconf(_SC_NPROC_ONLN);
+  n = sysconf(_SC_NPROC_ONLN);
 #elif HAVE_DECL__SC_NPROCESSORS_CONF
-  return sysconf(_SC_NPROCESSORS_CONF);
+  n = sysconf(_SC_NPROCESSORS_CONF);
 #elif HAVE_DECL__SC_NPROC_CONF
-  return sysconf(_SC_NPROC_CONF);
+  n = sysconf(_SC_NPROC_CONF);
 #elif defined(HAVE_HOST_INFO) && HAVE_HOST_INFO
   struct host_basic_info info;
   mach_msg_type_number_t count = HOST_BASIC_INFO_COUNT;
   host_info(mach_host_self(), HOST_BASIC_INFO, (integer_t*) &info, &count);
-  return info.avail_cpus;
-#elif defined(WIN_SYS)
+  n = info.avail_cpus;
+#elif defined(HAVE_SYSCTLBYNAME)
+  int n;
+  if (hwloc_get_sysctlbyname("hw.ncpu", &n))
+    n = -1;
+#elif defined(HAVE_SYSCTL) && HAVE_DECL_CTL_HW && HAVE_DECL_HW_NCPU
+  static int name[2] = {CTL_HW, HW_NPCU};
+  if (hwloc_get_sysctl(name, sizeof(name)/sizeof(*name)), &n)
+    n = -1;
+#elif defined(HWLOC_WIN_SYS)
   SYSTEM_INFO sysinfo;
   GetSystemInfo(&sysinfo);
-  return sysinfo.dwNumberOfProcessors;
+  n = sysinfo.dwNumberOfProcessors;
 #else
 #ifdef __GNUC__
 #warning No known way to discover number of available processors on this system
 #warning hwloc_fallback_nbprocessors will default to 1
 #endif
-  return 1;
+  n = -1;
 #endif
+  if (n >= 1)
+    topology->support.discovery->pu = 1;
+  else
+    n = 1;
+  return n;
 }
 
 /*
@@ -71,7 +124,6 @@
  */
 static unsigned
 hwloc_setup_group_from_min_distance_clique(unsigned nbobjs,
-					  struct hwloc_obj **objs,
 					  unsigned *_distances,
 					  unsigned *groupids)
 {
@@ -111,7 +163,7 @@
 	    hwloc_cpuset_isset(closest_objs_set, k) &&
 	    (*distances)[j][k] != min_distance) {
 	  /* the minimal-distance graph is not complete. abort */
-	  hwloc_debug("found incomplete minimal-distance graph, aborting\n");
+	  hwloc_debug("%s", "found incomplete minimal-distance graph, aborting\n");
 	  return 0;
 	}
 
@@ -123,7 +175,7 @@
 	groupids[j] = groupid;
     hwloc_debug("found complete graph with %u objects with minimal distance %u\n",
 	       size, min_distance);
-    free(closest_objs_set);
+    hwloc_cpuset_free(closest_objs_set);
   }
 
   /* return the last id, since it's also the number of used group ids */
@@ -136,7 +188,6 @@
  */
 static unsigned
 hwloc_setup_group_from_min_distance_transitivity(unsigned nbobjs,
-						struct hwloc_obj **objs,
 						unsigned *_distances,
 						unsigned *groupids)
 {
@@ -195,7 +246,7 @@
 	groupids[j] = groupid;
     hwloc_debug("found transitive graph with %u objects with minimal distance %u\n",
 	       size, min_distance);
-    free(closest_objs_set);
+    hwloc_cpuset_free(closest_objs_set);
   }
 
   /* return the last id, since it's also the number of used group ids */
@@ -215,7 +266,7 @@
 {
   unsigned (*distances)[nbobjs][nbobjs] = (unsigned (*)[nbobjs][nbobjs])_distances;
   unsigned groupids[nbobjs];
-  int nbgroups;
+  unsigned nbgroups;
   unsigned i,j;
 
   hwloc_debug("trying to group %s objects into misc objects according to physical distances\n",
@@ -224,15 +275,15 @@
   if (nbobjs <= 2)
     return;
 
-  nbgroups = hwloc_setup_group_from_min_distance_clique(nbobjs, objs, _distances, groupids);
+  nbgroups = hwloc_setup_group_from_min_distance_clique(nbobjs, _distances, groupids);
   if (!nbgroups) {
-    nbgroups = hwloc_setup_group_from_min_distance_transitivity(nbobjs, objs, _distances, groupids);
+    nbgroups = hwloc_setup_group_from_min_distance_transitivity(nbobjs, _distances, groupids);
     if (!nbgroups)
       return;
   }
 
   if (nbgroups == 1) {
-    hwloc_debug("ignoring misc object with all objects\n");
+    hwloc_debug("%s", "ignoring misc object with all objects\n");
     return;
   }
 
@@ -247,18 +298,18 @@
       for(i=0; i<nbgroups; i++) {
           /* create the misc object */
           hwloc_obj_t misc_obj;
-          misc_obj = hwloc_alloc_setup_object(HWLOC_OBJ_MISC, -1);
+          misc_obj = hwloc_alloc_setup_object(HWLOC_OBJ_GROUP, -1);
           misc_obj->cpuset = hwloc_cpuset_alloc();
           hwloc_cpuset_zero(misc_obj->cpuset);
-          misc_obj->attr->misc.depth = depth;
+          misc_obj->attr->group.depth = depth;
           for (j=0; j<nbobjs; j++)
               if (groupids[j] == i+1) {
-                  hwloc_cpuset_orset(misc_obj->cpuset, objs[j]->cpuset);
+                  hwloc_cpuset_or(misc_obj->cpuset, misc_obj->cpuset, objs[j]->cpuset);
                   groupsizes[i]++;
               }
           hwloc_debug_1arg_cpuset("adding misc object with %u objects and cpuset %s\n",
                                   groupsizes[i], misc_obj->cpuset);
-          hwloc_add_object(topology, misc_obj);
+          hwloc_insert_object_by_cpuset(topology, misc_obj);
           groupobjs[i] = misc_obj;
       }
       
@@ -271,11 +322,11 @@
           for(j=0; j<nbgroups; j++)
               groupdistances[i][j] /= groupsizes[i]*groupsizes[j];
 #ifdef HWLOC_DEBUG
-      hwloc_debug("group distances:\n");
+      hwloc_debug("%s", "group distances:\n");
       for(i=0; i<nbgroups; i++) {
           for(j=0; j<nbgroups; j++)
               hwloc_debug("%u ", groupdistances[i][j]);
-          hwloc_debug("\n");
+          hwloc_debug("%s", "\n");
       }
 #endif
       
@@ -299,17 +350,17 @@
     return;
 
 #ifdef HWLOC_DEBUG
-  hwloc_debug("node distance matrix:\n");
-  hwloc_debug("   ");
+  hwloc_debug("%s", "node distance matrix:\n");
+  hwloc_debug("%s", "   ");
   for(j=0; j<nbobjs; j++)
-    hwloc_debug(" %3d", j);
-  hwloc_debug("\n");
+    hwloc_debug(" %3u", j);
+  hwloc_debug("%s", "\n");
 
   for(i=0; i<nbobjs; i++) {
-    hwloc_debug("%3d", i);
+    hwloc_debug("%3u", i);
     for(j=0; j<nbobjs; j++)
-      hwloc_debug(" %3d", (*distances)[i][j]);
-    hwloc_debug("\n");
+      hwloc_debug(" %3u", (*distances)[i][j]);
+    hwloc_debug("%s", "\n");
   }
 #endif
 
@@ -336,61 +387,93 @@
 
 /*
  * Use the given number of processors and the optional online cpuset if given
- * to set a Proc level.
+ * to set a PU level.
  */
 void
-hwloc_setup_proc_level(struct hwloc_topology *topology,
-		      unsigned nb_processors,
-		      hwloc_cpuset_t online_cpuset)
+hwloc_setup_pu_level(struct hwloc_topology *topology,
+		     unsigned nb_pus)
 {
   struct hwloc_obj *obj;
   unsigned oscpu,cpu;
 
-  hwloc_debug("\n\n * CPU cpusets *\n\n");
-  for (cpu=0,oscpu=0; cpu<nb_processors; oscpu++)
+  hwloc_debug("%s", "\n\n * CPU cpusets *\n\n");
+  for (cpu=0,oscpu=0; cpu<nb_pus; oscpu++)
     {
-      if (online_cpuset && !hwloc_cpuset_isset(online_cpuset, oscpu))
-       continue;
-
-      obj = hwloc_alloc_setup_object(HWLOC_OBJ_PROC, oscpu);
+      obj = hwloc_alloc_setup_object(HWLOC_OBJ_PU, oscpu);
       obj->cpuset = hwloc_cpuset_alloc();
       hwloc_cpuset_cpu(obj->cpuset, oscpu);
 
-      hwloc_debug_2args_cpuset("cpu %d (os %d) has cpuset %s\n",
+      hwloc_debug_2args_cpuset("cpu %u (os %u) has cpuset %s\n",
 		 cpu, oscpu, obj->cpuset);
-      hwloc_add_object(topology, obj);
+      hwloc_insert_object_by_cpuset(topology, obj);
 
       cpu++;
     }
 }
 
-/* Just for debugging.  */
 static void
-print_objects(struct hwloc_topology *topology, int indent, hwloc_obj_t obj)
+print_object(struct hwloc_topology *topology, int indent __hwloc_attribute_unused, hwloc_obj_t obj)
 {
   char line[256], *cpuset = NULL;
   hwloc_debug("%*s", 2*indent, "");
   hwloc_obj_snprintf(line, sizeof(line), topology, obj, "#", 1);
   hwloc_debug("%s", line);
-  hwloc_cpuset_asprintf(&cpuset, obj->cpuset);
-  hwloc_debug(" %s", cpuset);
-  free(cpuset);
+  if (obj->cpuset) {
+    hwloc_cpuset_asprintf(&cpuset, obj->cpuset);
+    hwloc_debug(" cpuset %s", cpuset);
+    free(cpuset);
+  }
+  if (obj->complete_cpuset) {
+    hwloc_cpuset_asprintf(&cpuset, obj->complete_cpuset);
+    hwloc_debug(" complete %s", cpuset);
+    free(cpuset);
+  }
+  if (obj->online_cpuset) {
+    hwloc_cpuset_asprintf(&cpuset, obj->online_cpuset);
+    hwloc_debug(" online %s", cpuset);
+    free(cpuset);
+  }
+  if (obj->allowed_cpuset) {
+    hwloc_cpuset_asprintf(&cpuset, obj->allowed_cpuset);
+    hwloc_debug(" allowed %s", cpuset);
+    free(cpuset);
+  }
+  if (obj->nodeset) {
+    hwloc_cpuset_asprintf(&cpuset, obj->nodeset);
+    hwloc_debug(" nodeset %s", cpuset);
+    free(cpuset);
+  }
+  if (obj->complete_nodeset) {
+    hwloc_cpuset_asprintf(&cpuset, obj->complete_nodeset);
+    hwloc_debug(" completeN %s", cpuset);
+    free(cpuset);
+  }
+  if (obj->allowed_nodeset) {
+    hwloc_cpuset_asprintf(&cpuset, obj->allowed_nodeset);
+    hwloc_debug(" allowedN %s", cpuset);
+    free(cpuset);
+  }
   if (obj->arity)
-    hwloc_debug(" arity %d", obj->arity);
-  hwloc_debug("\n");
+    hwloc_debug(" arity %u", obj->arity);
+  hwloc_debug("%s", "\n");
+}
+
+/* Just for debugging.  */
+static void
+print_objects(struct hwloc_topology *topology __hwloc_attribute_unused, int indent __hwloc_attribute_unused, hwloc_obj_t obj __hwloc_attribute_unused)
+{
+#ifdef HWLOC_DEBUG
+  print_object(topology, indent, obj);
   for (obj = obj->first_child; obj; obj = obj->next_sibling)
     print_objects(topology, indent + 1, obj);
+#endif
 }
 
 /* Free an object and all its content.  */
-static void
+void
 free_object(hwloc_obj_t obj)
 {
   switch (obj->type) {
-  case HWLOC_OBJ_SYSTEM:
-    free(obj->attr->system.dmi_board_vendor);
-    free(obj->attr->system.dmi_board_name);
-    break;
   case HWLOC_OBJ_MACHINE:
     free(obj->attr->machine.dmi_board_vendor);
     free(obj->attr->machine.dmi_board_name);
@@ -398,10 +481,17 @@
   default:
     break;
   }
+  free(obj->memory.page_types);
   free(obj->attr);
   free(obj->children);
   free(obj->name);
-  free(obj->cpuset);
+  hwloc_cpuset_free(obj->cpuset);
+  hwloc_cpuset_free(obj->complete_cpuset);
+  hwloc_cpuset_free(obj->online_cpuset);
+  hwloc_cpuset_free(obj->allowed_cpuset);
+  hwloc_cpuset_free(obj->nodeset);
+  hwloc_cpuset_free(obj->complete_nodeset);
+  hwloc_cpuset_free(obj->allowed_nodeset);
   free(obj);
 }
 
@@ -416,32 +506,35 @@
 enum hwloc_type_cmp_e {
   HWLOC_TYPE_HIGHER,
   HWLOC_TYPE_DEEPER,
-  HWLOC_TYPE_EQUAL,
+  HWLOC_TYPE_EQUAL
 };
 
-static const int obj_type_order[] = {
+static const unsigned obj_type_order[] = {
   [HWLOC_OBJ_SYSTEM] = 0,
   [HWLOC_OBJ_MACHINE] = 1,
-  [HWLOC_OBJ_MISC] = 2,
+  [HWLOC_OBJ_GROUP] = 2,
   [HWLOC_OBJ_NODE] = 3,
   [HWLOC_OBJ_SOCKET] = 4,
   [HWLOC_OBJ_CACHE] = 5,
   [HWLOC_OBJ_CORE] = 6,
-  [HWLOC_OBJ_PROC] = 7,
+  [HWLOC_OBJ_PU] = 7,
+  [HWLOC_OBJ_MISC] = 8,
 };
 
 static const hwloc_obj_type_t obj_order_type[] = {
   [0] = HWLOC_OBJ_SYSTEM,
   [1] = HWLOC_OBJ_MACHINE,
-  [2] = HWLOC_OBJ_MISC,
+  [2] = HWLOC_OBJ_GROUP,
   [3] = HWLOC_OBJ_NODE,
   [4] = HWLOC_OBJ_SOCKET,
   [5] = HWLOC_OBJ_CACHE,
   [6] = HWLOC_OBJ_CORE,
-  [7] = HWLOC_OBJ_PROC,
+  [7] = HWLOC_OBJ_PU,
+  [8] = HWLOC_OBJ_MISC
 };
 
-static int hwloc_get_type_order(hwloc_obj_type_t type)
+static unsigned __hwloc_attribute_const
+hwloc_get_type_order(hwloc_obj_type_t type)
 {
   return obj_type_order[type];
 }
@@ -453,7 +546,9 @@
 
 int hwloc_compare_types (hwloc_obj_type_t type1, hwloc_obj_type_t type2)
 {
-  return hwloc_get_type_order(type1) - hwloc_get_type_order(type2);
+  unsigned order1 = hwloc_get_type_order(type1);
+  unsigned order2 = hwloc_get_type_order(type2);
+  return order1 - order2;
 }
 
 static enum hwloc_type_cmp_e
@@ -472,11 +567,11 @@
       return HWLOC_TYPE_HIGHER;
   }
 
-  /* Misc objects have the same types but can have different depths.  */
-  if (obj1->type == HWLOC_OBJ_MISC) {
-    if (obj1->attr->misc.depth < obj2->attr->misc.depth)
+  /* Group objects have the same types but can have different depths.  */
+  if (obj1->type == HWLOC_OBJ_GROUP) {
+    if (obj1->attr->group.depth < obj2->attr->group.depth)
       return HWLOC_TYPE_DEEPER;
-    else if (obj1->attr->misc.depth > obj2->attr->misc.depth)
+    else if (obj1->attr->group.depth > obj2->attr->group.depth)
       return HWLOC_TYPE_HIGHER;
   }
 
@@ -492,13 +587,14 @@
   HWLOC_OBJ_INCLUDED,	/**< \brief Strictly included into */
   HWLOC_OBJ_CONTAINS,	/**< \brief Strictly contains */
   HWLOC_OBJ_INTERSECTS,	/**< \brief Intersects, but no inclusion! */
-  HWLOC_OBJ_DIFFERENT,	/**< \brief No intersection */
+  HWLOC_OBJ_DIFFERENT	/**< \brief No intersection */
 };
 
 static int
 hwloc_obj_cmp(hwloc_obj_t obj1, hwloc_obj_t obj2)
 {
-  if (hwloc_cpuset_iszero(obj1->cpuset) || hwloc_cpuset_iszero(obj2->cpuset))
+  if (!obj1->cpuset || hwloc_cpuset_iszero(obj1->cpuset)
+      || !obj2->cpuset || hwloc_cpuset_iszero(obj2->cpuset))
     return HWLOC_OBJ_DIFFERENT;
 
   if (hwloc_cpuset_isequal(obj1->cpuset, obj2->cpuset)) {
@@ -510,7 +606,19 @@
 	return HWLOC_OBJ_INCLUDED;
       case HWLOC_TYPE_HIGHER:
 	return HWLOC_OBJ_CONTAINS;
+
       case HWLOC_TYPE_EQUAL:
+        if (obj1->type == HWLOC_OBJ_MISC) {
+          /* Misc objects may vary by name */
+          int res = strcmp(obj1->name, obj2->name);
+          if (res < 0)
+            return HWLOC_OBJ_INCLUDED;
+          if (res > 0)
+            return HWLOC_OBJ_CONTAINS;
+          if (res == 0)
+            return HWLOC_OBJ_EQUAL;
+        }
+
 	/* Same level cpuset and type!  Let's hope it's coherent.  */
 	return HWLOC_OBJ_EQUAL;
     }
@@ -543,39 +651,69 @@
  * complete.
  */
 
+#define merge_index(new, old, field, type) \
+  if ((old)->field == (type) -1) \
+    (old)->field = (new)->field;
 #define merge_sizes(new, old, field) \
   if (!(old)->field) \
     (old)->field = (new)->field;
+#ifdef HWLOC_DEBUG
 #define check_sizes(new, old, field) \
-  merge_sizes(new, old, field) \
   if ((new)->field) \
     assert((old)->field == (new)->field)
+#else
+#define check_sizes(new, old, field)
+#endif
 
 /* Try to insert OBJ in CUR, recurse if needed */
 static void
-add_object(struct hwloc_topology *topology, hwloc_obj_t cur, hwloc_obj_t obj)
+hwloc__insert_object_by_cpuset(struct hwloc_topology *topology, hwloc_obj_t cur, hwloc_obj_t obj)
 {
-  hwloc_obj_t child, container, *cur_children, *obj_children, next_child;
+  hwloc_obj_t child, container, *cur_children, *obj_children, next_child = NULL;
   int put;
 
   /* Make sure we haven't gone too deep.  */
-  assert(hwloc_cpuset_isincluded(obj->cpuset, cur->cpuset));
+  if (!hwloc_cpuset_isincluded(obj->cpuset, cur->cpuset)) {
+    fprintf(stderr,"recursion has gone too deep?!\n");
+    return;
+  }
 
   /* Check whether OBJ is included in some child.  */
   container = NULL;
   for (child = cur->first_child; child; child = child->next_sibling) {
     switch (hwloc_obj_cmp(obj, child)) {
       case HWLOC_OBJ_EQUAL:
-	assert(hwloc_cpuset_isequal(obj->cpuset, child->cpuset));
-	assert(obj->os_index == child->os_index);
+        merge_index(obj, child, os_level, signed);
+	if (obj->os_level != child->os_level) {
+          fprintf(stderr, "Different OS level\n");
+          return;
+        }
+        merge_index(obj, child, os_index, unsigned);
+	if (obj->os_index != child->os_index) {
+          fprintf(stderr, "Different OS indexes\n");
+          return;
+        }
 	switch(obj->type) {
 	  case HWLOC_OBJ_NODE:
 	    /* Do not check these, it may change between calls */
-	    merge_sizes(obj, child, attr->node.memory_kB);
-	    merge_sizes(obj, child, attr->node.huge_page_free);
+	    merge_sizes(obj, child, memory.local_memory);
+	    merge_sizes(obj, child, memory.total_memory);
+	    /* if both objects have a page_types array, just keep the biggest one for now */
+	    if (obj->memory.page_types_len && child->memory.page_types_len)
+	      hwloc_debug("%s", "merging page_types by keeping the biggest one only\n");
+	    if (obj->memory.page_types_len < child->memory.page_types_len) {
+	      free(obj->memory.page_types);
+	    } else {
+	      free(child->memory.page_types);
+	      child->memory.page_types_len = obj->memory.page_types_len;
+	      child->memory.page_types = obj->memory.page_types;
+	      obj->memory.page_types = NULL;
+	      obj->memory.page_types_len = 0;
+	    }
 	    break;
 	  case HWLOC_OBJ_CACHE:
-	    check_sizes(obj, child, attr->cache.memory_kB);
+	    merge_sizes(obj, child, attr->cache.size);
+	    check_sizes(obj, child, attr->cache.size);
 	    break;
 	  default:
 	    break;
@@ -608,7 +746,7 @@
 
   if (container) {
     /* OBJ is strictly contained is some child of CUR, go deeper.  */
-    add_object(topology, container, obj);
+    hwloc__insert_object_by_cpuset(topology, container, obj);
     return;
   }
 
@@ -636,7 +774,7 @@
 
       case HWLOC_OBJ_DIFFERENT:
 	/* Leave CHILD in CUR.  */
-	if (!put && hwloc_cpuset_compar_first(obj->cpuset, child->cpuset) < 0) {
+	if (!put && hwloc_cpuset_compare_first(obj->cpuset, child->cpuset) < 0) {
 	  /* Sort children by cpuset: put OBJ before CHILD in CUR's children.  */
 	  *cur_children = obj;
 	  cur_children = &obj->next_sibling;
@@ -673,109 +811,453 @@
 }
 
 void
-hwloc_add_object(struct hwloc_topology *topology, hwloc_obj_t obj)
+hwloc_insert_object_by_cpuset(struct hwloc_topology *topology, hwloc_obj_t obj)
 {
-  if (topology->ignored_types[obj->type] == HWLOC_IGNORE_TYPE_ALWAYS) {
-    free_object(obj);
-    return;
+  /* Start at the top.  */
+  /* Add the cpuset to the top */
+  hwloc_cpuset_or(topology->levels[0][0]->complete_cpuset, topology->levels[0][0]->complete_cpuset, obj->cpuset);
+  if (obj->nodeset)
+    hwloc_cpuset_or(topology->levels[0][0]->complete_nodeset, topology->levels[0][0]->complete_nodeset, obj->nodeset);
+  hwloc__insert_object_by_cpuset(topology, topology->levels[0][0], obj);
+}
+
+void
+hwloc_insert_object_by_parent(struct hwloc_topology *topology, hwloc_obj_t parent, hwloc_obj_t obj)
+{
+  hwloc_obj_t child, next_child = obj->first_child;
+  hwloc_obj_t *current;
+
+  /* Append to the end of the list */
+  for (current = &parent->first_child; *current; current = &(*current)->next_sibling)
+    ;
+  *current = obj;
+  obj->next_sibling = NULL;
+  obj->first_child = NULL;
+
+  /* Use the new object to insert children */
+  parent = obj;
+
+  /* Recursively insert children below */
+  while (next_child) {
+    child = next_child;
+    next_child = child->next_sibling;
+    hwloc_insert_object_by_parent(topology, parent, child);
   }
+}
 
-  /* Start at the top.  */
-  add_object(topology, topology->levels[0][0], obj);
+static void
+hwloc_connect(hwloc_obj_t parent);
+/* Adds a misc object _after_ detection, and thus has to reconnect all the pointers */
+hwloc_obj_t
+hwloc_topology_insert_misc_object_by_cpuset(struct hwloc_topology *topology, hwloc_const_cpuset_t cpuset, const char *name)
+{
+  hwloc_obj_t obj = hwloc_alloc_setup_object(HWLOC_OBJ_MISC, -1);
+  obj->cpuset = hwloc_cpuset_dup(cpuset);
+  if (name)
+    obj->name = strdup(name);
+
+  hwloc_insert_object_by_cpuset(topology, obj);
+
+  hwloc_connect(topology->levels[0][0]);
+
+  return obj;
 }
 
-/*
- * traverse the whole tree in a deletion-safe way, calling node_before at
- * nodes, leaf at leaves, and node_after when back at nodes, passing data along
- * the way through nodes. data returned by leaf() is ignored.
- *
- * Hooks can modify the pointer they're given to remove or replace themselves.
- */
+hwloc_obj_t
+hwloc_topology_insert_misc_object_by_parent(struct hwloc_topology *topology, hwloc_obj_t parent, const char *name)
+{
+  hwloc_obj_t obj = hwloc_alloc_setup_object(HWLOC_OBJ_MISC, -1);
+  if (parent->cpuset)
+    obj->cpuset = hwloc_cpuset_dup(parent->cpuset);
+  if (name)
+    obj->name = strdup(name);
+
+  hwloc_insert_object_by_parent(topology, parent, obj);
+
+  hwloc_connect(topology->levels[0][0]);
+
+  return obj;
+}
+
+/* Traverse children of a parent in a safe way: reread the next pointer as
+ * appropriate to prevent crash on child deletion:  */
+#define for_each_child_safe(child, parent, pchild) \
+  for (pchild = &(parent)->first_child, child = *pchild; \
+       child; \
+       /* Check whether the current child was not dropped.  */ \
+       (*pchild == child ? pchild = &(child->next_sibling) : NULL), \
+       /* Get pointer to next childect.  */ \
+        child = *pchild)
+
+static int hwloc_memory_page_type_compare(const void *_a, const void *_b)
+{
+  const struct hwloc_obj_memory_page_type_s *a = _a;
+  const struct hwloc_obj_memory_page_type_s *b = _b;
+  /* consider 0 as larger so that 0-size page_type go to the end */
+  return b->size ? (int)(a->size - b->size) : -1;
+}
+
+/* Propagate memory counts */
 static void
-traverse(hwloc_topology_t topology,
-	 hwloc_obj_t *father,
-	 void (*node_before)(hwloc_topology_t topology, hwloc_obj_t *obj, void *),
-	 void (*leaf)(hwloc_topology_t topology, hwloc_obj_t *obj, void *),
-	 void (*node_after)(hwloc_topology_t topology, hwloc_obj_t *obj, void *),
-	 void *data)
+propagate_total_memory(hwloc_obj_t obj)
 {
-  hwloc_obj_t *pobj, obj;
+  hwloc_obj_t *temp, child;
+  unsigned i;
 
-  if (!(*father)->first_child) {
-    if (leaf)
-      leaf(topology, father, data);
-    return;
+  /* Propagate memory up */
+  for_each_child_safe(child, obj, temp) {
+    propagate_total_memory(child);
+    obj->memory.total_memory += child->memory.total_memory;
   }
-  if (node_before)
-    node_before(topology, father, data);
-  if (!(*father))
-    return;
-  for (pobj = &(*father)->first_child, obj = *pobj;
-       obj;
-       /* Check whether the current obj was dropped.  */
-       (*pobj == obj ? pobj = &(*pobj)->next_sibling : NULL),
-       /* Get pointer to next object.  */
-	obj = *pobj)
-    traverse(topology, pobj, node_before, leaf, node_after, data);
-  if (node_after)
-    node_after(topology, father, data);
+  obj->memory.total_memory += obj->memory.local_memory;
+
+  /* By the way, sort the page_type array.
+   * Cannot do it on insert since some backends (e.g. XML) add page_types after inserting the object.
+   */
+  qsort(obj->memory.page_types, obj->memory.page_types_len, sizeof(*obj->memory.page_types), hwloc_memory_page_type_compare);
+  /* Ignore 0-size page_types, they are at the end */
+  for(i=obj->memory.page_types_len; i>=1; i--)
+    if (obj->memory.page_types[i-1].size)
+      break;
+  obj->memory.page_types_len = i;
 }
 
+/* Collect the cpuset of all the PU objects. */
 static void
-get_proc_cpuset(hwloc_topology_t topology, hwloc_obj_t *obj, void *data)
+collect_proc_cpuset(hwloc_obj_t obj, hwloc_obj_t sys)
 {
-  hwloc_cpuset_t cpuset = data;
-  if ((*obj)->type != HWLOC_OBJ_PROC)
-    return;
-  hwloc_cpuset_orset(cpuset, (*obj)->cpuset);
+  hwloc_obj_t child, *temp;
+
+  if (sys) {
+    /* We are already given a pointer to a system object */
+    if (obj->type == HWLOC_OBJ_PU)
+      hwloc_cpuset_or(sys->cpuset, sys->cpuset, obj->cpuset);
+  } else {
+    if (obj->cpuset) {
+      /* This object is the root of a machine */
+      sys = obj;
+      /* Assume no PU for now */
+      hwloc_cpuset_zero(obj->cpuset);
+    }
+  }
+
+  for_each_child_safe(child, obj, temp)
+    collect_proc_cpuset(child, sys);
 }
 
+/* While traversing down and up, propagate the offline/disallowed cpus by
+ * and'ing them to and from the first object that has a cpuset */
 static void
-apply_cpuset(hwloc_topology_t topology, hwloc_obj_t *obj, void *data)
+propagate_unused_cpuset(hwloc_obj_t obj, hwloc_obj_t sys)
 {
-  hwloc_cpuset_t cpuset = data;
-  hwloc_cpuset_andset((*obj)->cpuset, cpuset);
+  hwloc_obj_t child, *temp;
+
+  if (obj->cpuset) {
+    if (sys) {
+      /* We are already given a pointer to an system object, update it and update ourselves */
+      hwloc_cpuset_t mask = hwloc_cpuset_alloc();
+
+      /* Apply the topology cpuset */
+      hwloc_cpuset_and(obj->cpuset, obj->cpuset, sys->cpuset);
+
+      /* Update complete cpuset down */
+      if (obj->complete_cpuset) {
+	hwloc_cpuset_and(obj->complete_cpuset, obj->complete_cpuset, sys->complete_cpuset);
+      } else {
+	obj->complete_cpuset = hwloc_cpuset_dup(sys->complete_cpuset);
+	hwloc_cpuset_and(obj->complete_cpuset, obj->complete_cpuset, obj->cpuset);
+      }
+
+      /* Update online cpusets */
+      if (obj->online_cpuset) {
+	/* Update ours */
+	hwloc_cpuset_and(obj->online_cpuset, obj->online_cpuset, sys->online_cpuset);
+
+	/* Update the given cpuset, but only what we know */
+	hwloc_cpuset_copy(mask, obj->cpuset);
+	hwloc_cpuset_not(mask, mask);
+	hwloc_cpuset_or(mask, mask, obj->online_cpuset);
+	hwloc_cpuset_and(sys->online_cpuset, sys->online_cpuset, mask);
+      } else {
+	/* Just take it as such */
+	obj->online_cpuset = hwloc_cpuset_dup(sys->online_cpuset);
+	hwloc_cpuset_and(obj->online_cpuset, obj->online_cpuset, obj->cpuset);
+      }
+
+      /* Update allowed cpusets */
+      if (obj->allowed_cpuset) {
+	/* Update ours */
+	hwloc_cpuset_and(obj->allowed_cpuset, obj->allowed_cpuset, sys->allowed_cpuset);
+
+	/* Update the given cpuset, but only what we know */
+	hwloc_cpuset_copy(mask, obj->cpuset);
+	hwloc_cpuset_not(mask, mask);
+	hwloc_cpuset_or(mask, mask, obj->allowed_cpuset);
+	hwloc_cpuset_and(sys->allowed_cpuset, sys->allowed_cpuset, mask);
+      } else {
+	/* Just take it as such */
+	obj->allowed_cpuset = hwloc_cpuset_dup(sys->allowed_cpuset);
+	hwloc_cpuset_and(obj->allowed_cpuset, obj->allowed_cpuset, obj->cpuset);
+      }
+
+      hwloc_cpuset_free(mask);
+    } else {
+      /* This object is the root of a machine */
+      sys = obj;
+      /* Apply complete cpuset to cpuset, online_cpuset and allowed_cpuset, it
+       * will automatically be applied below */
+      if (obj->complete_cpuset)
+        hwloc_cpuset_and(obj->cpuset, obj->cpuset, obj->complete_cpuset);
+      else
+        obj->complete_cpuset = hwloc_cpuset_dup(obj->cpuset);
+      if (obj->online_cpuset)
+        hwloc_cpuset_and(obj->online_cpuset, obj->online_cpuset, obj->complete_cpuset);
+      else
+        obj->online_cpuset = hwloc_cpuset_dup(obj->complete_cpuset);
+      if (obj->allowed_cpuset)
+        hwloc_cpuset_and(obj->allowed_cpuset, obj->allowed_cpuset, obj->complete_cpuset);
+      else
+        obj->allowed_cpuset = hwloc_cpuset_dup(obj->complete_cpuset);
+    }
+  }
+
+  for_each_child_safe(child, obj, temp)
+    propagate_unused_cpuset(child, sys);
 }
 
+/* Propagate nodesets up and down */
 static void
-do_free_object(hwloc_topology_t topology, hwloc_obj_t *obj, void *data)
+propagate_nodeset(hwloc_obj_t obj, hwloc_obj_t sys)
 {
-  free_object(*obj);
+  hwloc_obj_t child, *temp;
+  hwloc_cpuset_t parent_nodeset = NULL;
+  int parent_weight = 0;
+
+  if (!sys && obj->nodeset) {
+    sys = obj;
+    if (!obj->complete_nodeset)
+      obj->complete_nodeset = hwloc_cpuset_dup(obj->nodeset);
+    if (!obj->allowed_nodeset)
+      obj->allowed_nodeset = hwloc_cpuset_dup(obj->complete_nodeset);
+  }
+
+  if (sys) {
+    if (obj->nodeset) {
+      /* Some existing nodeset coming from above, to possibly propagate down */
+      parent_nodeset = obj->nodeset;
+      parent_weight = hwloc_cpuset_weight(parent_nodeset);
+    } else
+      obj->nodeset = hwloc_cpuset_alloc();
+  }
+
+  for_each_child_safe(child, obj, temp) {
+    /* Propagate singleton nodesets down */
+    if (parent_weight == 1) {
+      if (!child->nodeset)
+        child->nodeset = hwloc_cpuset_dup(obj->nodeset);
+      else if (!hwloc_cpuset_isequal(child->nodeset, parent_nodeset)) {
+        hwloc_debug_cpuset("Oops, parent nodeset %s", parent_nodeset);
+        hwloc_debug_cpuset(" is different from child nodeset %s, ignoring the child one\n", child->nodeset);
+        hwloc_cpuset_copy(child->nodeset, parent_nodeset);
+      }
+    }
+
+    /* Recurse */
+    propagate_nodeset(child, sys);
+
+    /* Propagate children nodesets up */
+    if (sys && child->nodeset)
+      hwloc_cpuset_or(obj->nodeset, obj->nodeset, child->nodeset);
+  }
 }
 
+/* Propagate allowed and complete nodesets */
+static void
+propagate_nodesets(hwloc_obj_t obj)
+{
+  hwloc_cpuset_t mask = hwloc_cpuset_alloc();
+  hwloc_obj_t child, *temp;
+
+  for_each_child_safe(child, obj, temp) {
+    if (obj->nodeset) {
+      /* Update complete nodesets down */
+      if (child->complete_nodeset) {
+        hwloc_cpuset_and(child->complete_nodeset, child->complete_nodeset, obj->complete_nodeset);
+      } else if (child->nodeset) {
+        child->complete_nodeset = hwloc_cpuset_dup(obj->complete_nodeset);
+        hwloc_cpuset_and(child->complete_nodeset, child->complete_nodeset, child->nodeset);
+      } /* else the child doesn't have nodeset information, we can not provide a complete nodeset */
+
+      /* Update allowed nodesets down */
+      if (child->allowed_nodeset) {
+        hwloc_cpuset_and(child->allowed_nodeset, child->allowed_nodeset, obj->allowed_nodeset);
+      } else if (child->nodeset) {
+        child->allowed_nodeset = hwloc_cpuset_dup(obj->allowed_nodeset);
+        hwloc_cpuset_and(child->allowed_nodeset, child->allowed_nodeset, child->nodeset);
+      }
+    }
+
+    propagate_nodesets(child);
+
+    if (obj->nodeset) {
+      /* Update allowed nodesets up */
+      if (child->nodeset && child->allowed_nodeset) {
+        hwloc_cpuset_copy(mask, child->nodeset);
+        hwloc_cpuset_not(mask, mask);
+        hwloc_cpuset_or(mask, mask, child->allowed_nodeset);
+        hwloc_cpuset_and(obj->allowed_nodeset, obj->allowed_nodeset, mask);
+      }
+    }
+  }
+  hwloc_cpuset_free(mask);
+
+  if (obj->nodeset) {
+    /* Apply complete nodeset to nodeset and allowed_nodeset */
+    if (obj->complete_nodeset)
+      hwloc_cpuset_and(obj->nodeset, obj->nodeset, obj->complete_nodeset);
+    else
+      obj->complete_nodeset = hwloc_cpuset_dup(obj->nodeset);
+    if (obj->allowed_nodeset)
+      hwloc_cpuset_and(obj->allowed_nodeset, obj->allowed_nodeset, obj->complete_nodeset);
+    else
+      obj->allowed_nodeset = hwloc_cpuset_dup(obj->complete_nodeset);
+  }
+}
+
+static void
+apply_nodeset(hwloc_obj_t obj, hwloc_obj_t sys)
+{
+  unsigned i;
+  hwloc_obj_t child, *temp;
+
+  if (sys) {
+    if (obj->type == HWLOC_OBJ_NODE && obj->os_index != (unsigned) -1 &&
+        !hwloc_cpuset_isset(sys->allowed_nodeset, obj->os_index)) {
+      hwloc_debug("Dropping memory from disallowed node %u\n", obj->os_index);
+      obj->memory.local_memory = 0;
+      obj->memory.total_memory = 0;
+      for(i=0; i<obj->memory.page_types_len; i++)
+	obj->memory.page_types[i].count = 0;
+    }
+  } else {
+    if (obj->allowed_nodeset) {
+      sys = obj;
+    }
+  }
+
+  for_each_child_safe(child, obj, temp)
+    apply_nodeset(child, sys);
+}
+
+static void
+remove_unused_cpusets(hwloc_obj_t obj)
+{
+  hwloc_obj_t child, *temp;
+
+  if (obj->cpuset) {
+    hwloc_cpuset_and(obj->cpuset, obj->cpuset, obj->online_cpuset);
+    hwloc_cpuset_and(obj->cpuset, obj->cpuset, obj->allowed_cpuset);
+  }
+
+  for_each_child_safe(child, obj, temp)
+    remove_unused_cpusets(child);
+}
+
+static void
+drop_object(hwloc_obj_t *pparent)
+{
+  hwloc_obj_t parent = *pparent;
+  hwloc_obj_t child = parent->first_child;
+  /* Replace object with its list of children */
+  if (child) {
+    *pparent = child;
+    while (child->next_sibling)
+      child = child->next_sibling;
+    child->next_sibling = parent->next_sibling;
+  } else
+    *pparent = parent->next_sibling;
+  /* Remove ignored object */
+  free_object(parent);
+}
+
+/* Remove all ignored objects.  */
+static void
+remove_ignored(hwloc_topology_t topology, hwloc_obj_t *pparent)
+{
+  hwloc_obj_t parent = *pparent, child, *pchild;
+
+  for_each_child_safe(child, parent, pchild)
+    remove_ignored(topology, pchild);
+
+  if (topology->ignored_types[parent->type] == HWLOC_IGNORE_TYPE_ALWAYS) {
+    hwloc_debug("%s", "\nDropping ignored object ");
+    print_object(topology, 0, parent);
+    drop_object(pparent);
+  }
+}
+
+static void
+do_free_object(hwloc_obj_t *pobj)
+{
+  hwloc_obj_t obj = *pobj, child, *pchild;
+
+  for_each_child_safe(child, obj, pchild)
+    do_free_object(pchild);
+
+  *pobj = obj->next_sibling;
+  free_object(obj);
+}
+
 /* Remove all children whose cpuset is empty, except NUMA nodes
  * since we want to keep memory information.  */
 static void
-remove_empty(hwloc_topology_t topology, hwloc_obj_t *obj, void *data)
+remove_empty(hwloc_topology_t topology, hwloc_obj_t *pobj)
 {
-  if ((*obj)->type != HWLOC_OBJ_NODE && hwloc_cpuset_iszero((*obj)->cpuset)) {
+  hwloc_obj_t obj = *pobj, child, *pchild;
+
+  for_each_child_safe(child, obj, pchild)
+    remove_empty(topology, pchild);
+
+  if (obj->type != HWLOC_OBJ_NODE
+      && obj->cpuset
+      && hwloc_cpuset_iszero(obj->cpuset)) {
     /* Remove empty children */
-    traverse(topology, obj, NULL, NULL, do_free_object, NULL);
-    *obj = (*obj)->next_sibling;
+    hwloc_debug("%s", "\nRemoving empty object ");
+    print_object(topology, 0, obj);
+    do_free_object(pobj);
   }
 }
 
 /*
- * Merge with the only child if either the father or the child has a type to be
+ * Merge with the only child if either the parent or the child has a type to be
  * ignored while keeping structure
  */
 static void
-merge_useless_child(hwloc_topology_t topology, hwloc_obj_t *pfather, void *data)
+merge_useless_child(hwloc_topology_t topology, hwloc_obj_t *pparent)
 {
-  hwloc_obj_t father = *pfather, child = father->first_child;
-  if (child->next_sibling)
-    /* There are several children, it's useful to keep them.  */
+  hwloc_obj_t parent = *pparent, child, *pchild;
+
+  for_each_child_safe(child, parent, pchild)
+    merge_useless_child(topology, pchild);
+
+  child = parent->first_child;
+  if (!child || child->next_sibling)
+    /* There are no or several children, it's useful to keep them.  */
     return;
 
   /* TODO: have a preference order?  */
-  if (topology->ignored_types[father->type] == HWLOC_IGNORE_TYPE_KEEP_STRUCTURE) {
-    /* Father can be ignored in favor of the child.  */
-    *pfather = child;
-    child->next_sibling = father->next_sibling;
-    free_object(father);
+  if (topology->ignored_types[parent->type] == HWLOC_IGNORE_TYPE_KEEP_STRUCTURE) {
+    /* Parent can be ignored in favor of the child.  */
+    hwloc_debug("%s", "\nIgnoring parent ");
+    print_object(topology, 0, parent);
+    *pparent = child;
+    child->next_sibling = parent->next_sibling;
+    free_object(parent);
   } else if (topology->ignored_types[child->type] == HWLOC_IGNORE_TYPE_KEEP_STRUCTURE) {
-    /* Child can be ignored in favor of the father.  */
-    father->first_child = child->first_child;
+    /* Child can be ignored in favor of the parent.  */
+    hwloc_debug("%s", "\nIgnoring child ");
+    print_object(topology, 0, child);
+    parent->first_child = child->first_child;
     free_object(child);
   }
 }
@@ -784,32 +1266,32 @@
  * Initialize handy pointers in the whole topology
  */
 static void
-hwloc_connect(hwloc_obj_t father)
+hwloc_connect(hwloc_obj_t parent)
 {
   unsigned n;
   hwloc_obj_t child, prev_child = NULL;
 
-  for (n = 0, child = father->first_child;
+  for (n = 0, child = parent->first_child;
        child;
        n++,   prev_child = child, child = child->next_sibling) {
-    child->father = father;
+    child->parent = parent;
     child->sibling_rank = n;
     child->prev_sibling = prev_child;
   }
-  father->last_child = prev_child;
+  parent->last_child = prev_child;
 
-  father->arity = n;
+  parent->arity = n;
+  free(parent->children);
   if (!n) {
-    father->children = NULL;
+    parent->children = NULL;
     return;
   }
 
-  father->children = malloc(n * sizeof(*father->children));
-  assert(father->children);
-  for (n = 0, child = father->first_child;
+  parent->children = malloc(n * sizeof(*parent->children));
+  for (n = 0, child = parent->first_child;
        child;
        n++,   child = child->next_sibling) {
-    father->children[n] = child;
+    parent->children[n] = child;
     hwloc_connect(child);
   }
 }
@@ -836,43 +1318,79 @@
  * Empty binding hooks always returning success
  */
 
-static int dontset_cpubind(hwloc_topology_t topology, hwloc_cpuset_t set, int strict)
+static int dontset_thisthread_cpubind(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_const_cpuset_t set __hwloc_attribute_unused, int policy __hwloc_attribute_unused)
 {
   return 0;
 }
-static int dontset_thisproc_cpubind(hwloc_topology_t topology, hwloc_cpuset_t set, int strict)
+static int dontget_thisthread_cpubind(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_cpuset_t set, int policy __hwloc_attribute_unused)
 {
+  hwloc_cpuset_copy(set, hwloc_topology_get_complete_cpuset(topology));
   return 0;
 }
-static int dontset_thisthread_cpubind(hwloc_topology_t topology, hwloc_cpuset_t set, int strict)
+static int dontset_thisproc_cpubind(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_const_cpuset_t set __hwloc_attribute_unused, int policy __hwloc_attribute_unused)
 {
   return 0;
 }
-static int dontset_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int strict)
+static int dontget_thisproc_cpubind(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_cpuset_t set, int policy __hwloc_attribute_unused)
 {
+  hwloc_const_cpuset_t cpuset = hwloc_topology_get_complete_cpuset(topology);
+  if (cpuset) {
+    hwloc_cpuset_copy(set,cpuset);
+    return 0;
+  } else
+    return -1;
+}
+static int dontset_proc_cpubind(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_pid_t pid __hwloc_attribute_unused, hwloc_const_cpuset_t set __hwloc_attribute_unused, int policy __hwloc_attribute_unused)
+{
   return 0;
 }
+static int dontget_proc_cpubind(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_pid_t pid __hwloc_attribute_unused, hwloc_cpuset_t cpuset, int policy __hwloc_attribute_unused)
+{
+  hwloc_cpuset_copy(cpuset, hwloc_topology_get_complete_cpuset(topology));
+  return 0;
+}
 #ifdef hwloc_thread_t
-static int dontset_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t tid, hwloc_cpuset_t set, int strict)
+static int dontset_thread_cpubind(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_thread_t tid __hwloc_attribute_unused, hwloc_const_cpuset_t set __hwloc_attribute_unused, int policy __hwloc_attribute_unused)
 {
   return 0;
 }
+static int dontget_thread_cpubind(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_thread_t tid __hwloc_attribute_unused, hwloc_cpuset_t cpuset, int policy __hwloc_attribute_unused)
+{
+  hwloc_cpuset_copy(cpuset, hwloc_topology_get_complete_cpuset(topology));
+  return 0;
+}
 #endif
 
+static void alloc_cpusets(hwloc_obj_t obj)
+{
+  obj->cpuset = hwloc_cpuset_alloc();
+  obj->complete_cpuset = hwloc_cpuset_alloc();
+  obj->online_cpuset = hwloc_cpuset_alloc();
+  obj->allowed_cpuset = hwloc_cpuset_alloc();
+  obj->nodeset = hwloc_cpuset_alloc();
+  obj->complete_nodeset = hwloc_cpuset_alloc();
+  obj->allowed_nodeset = hwloc_cpuset_alloc();
+  hwloc_cpuset_fill(obj->cpuset);
+  hwloc_cpuset_zero(obj->complete_cpuset);
+  hwloc_cpuset_fill(obj->online_cpuset);
+  hwloc_cpuset_fill(obj->allowed_cpuset);
+  hwloc_cpuset_zero(obj->nodeset);
+  hwloc_cpuset_zero(obj->complete_nodeset);
+  hwloc_cpuset_fill(obj->allowed_nodeset);
+}
 
 /* Main discovery loop */
-static void
+static int
 hwloc_discover(struct hwloc_topology *topology)
 {
   unsigned l, i=0, taken_i, new_i, j;
   hwloc_obj_t *objs, *taken_objs, *new_objs, top_obj;
   unsigned n_objs, n_taken_objs, n_new_objs;
 
-  assert(topology!=NULL);
-
   if (topology->backend_type == HWLOC_BACKEND_SYNTHETIC) {
+    alloc_cpusets(topology->levels[0][0]);
     hwloc_look_synthetic(topology);
-#ifdef HAVE_XML
+#ifdef HWLOC_HAVE_XML
   } else if (topology->backend_type == HWLOC_BACKEND_XML) {
     hwloc_look_xml(topology);
 #endif
@@ -881,85 +1399,152 @@
   /* Raw detection, from coarser levels to finer levels for more efficiency.  */
 
   /* hwloc_look_* functions should use hwloc_obj_add to add objects initialized
-   * through hwloc_alloc_setup_object. For node levels, memory_Kb and huge_page_free
-   * must be initialized. For cache levels, memory_kB and attr->cache.depth must be
-   * initialized, for misc levels, attr->misc.depth must be initialized
+   * through hwloc_alloc_setup_object. For node levels, nodeset, memory_Kb and
+   * huge_page_free must be initialized. For cache levels, memory_kB and
+   * attr->cache.depth must be initialized. For misc levels, attr->misc.depth
+   * must be initialized.
    */
 
-  /* There must be at least a PROC object for each logical processor, at worse
-   * produced by hwloc_setup_proc_level()
+  /* There must be at least a PU object for each logical processor, at worse
+   * produced by hwloc_setup_pu_level()
    */
 
+  /* To be able to just use hwloc_insert_object_by_cpuset to insert the object
+   * in the topology according to the cpuset, the cpuset field must be
+   * initialized.
+   */
+
   /* If the OS can provide NUMA distances, it should call
    * hwloc_setup_misc_level_from_distances() to automatically group NUMA nodes
    * into misc objects.
    */
 
+  /* A priori, All processors are visible in the topology, online, and allowed
+   * for the application.
+   *
+   * - If some processors exist but topology information is unknown for them
+   *   (and thus the backend couldn't create objects for them), they should be
+   *   added to the complete_cpuset field of the lowest object where the object
+   *   could reside.
+   *
+   * - If some processors are not online, they should be dropped from the
+   *   online_cpuset field.
+   *
+   * - If some processors are not allowed for the application (e.g. for
+   *   administration reasons), they should be dropped from the allowed_cpuset
+   *   field.
+   *
+   * The same applies to the node sets complete_nodeset and allowed_cpuset.
+   *
+   * If such field doesn't exist yet, it can be allocated, and initialized to
+   * zero (for complete), or to full (for online and allowed). The values are
+   * automatically propagated to the whole tree after detection.
+   *
+   * Here, we only allocate cpusets for the root object.
+   */
+
+    alloc_cpusets(topology->levels[0][0]);
+
   /* Each OS type should also fill the bind functions pointers, at least the
    * set_cpubind one
    */
 
-#    ifdef LINUX_SYS
+#    ifdef HWLOC_LINUX_SYS
 #      define HAVE_OS_SUPPORT
     hwloc_look_linux(topology);
-#    endif /* LINUX_SYS */
+#    endif /* HWLOC_LINUX_SYS */
 
-#    ifdef  AIX_SYS
+#    ifdef HWLOC_AIX_SYS
 #      define HAVE_OS_SUPPORT
     hwloc_look_aix(topology);
-#    endif /* AIX_SYS */
+#    endif /* HWLOC_AIX_SYS */
 
-#    ifdef  OSF_SYS
+#    ifdef HWLOC_OSF_SYS
 #      define HAVE_OS_SUPPORT
     hwloc_look_osf(topology);
-#    endif /* OSF_SYS */
+#    endif /* HWLOC_OSF_SYS */
 
-#    ifdef  SOLARIS_SYS
+#    ifdef HWLOC_SOLARIS_SYS
 #      define HAVE_OS_SUPPORT
     hwloc_look_solaris(topology);
-#    endif /* SOLARIS_SYS */
+#    endif /* HWLOC_SOLARIS_SYS */
 
-#    ifdef  WIN_SYS
+#    ifdef HWLOC_WIN_SYS
 #      define HAVE_OS_SUPPORT
     hwloc_look_windows(topology);
-#    endif /* WIN_SYS */
+#    endif /* HWLOC_WIN_SYS */
 
-#    ifdef  DARWIN_SYS
+#    ifdef HWLOC_DARWIN_SYS
 #      define HAVE_OS_SUPPORT
     hwloc_look_darwin(topology);
-#    endif /* DARWIN_SYS */
+#    endif /* HWLOC_DARWIN_SYS */
 
-#    ifdef  HPUX_SYS
+#    ifdef HWLOC_FREEBSD_SYS
 #      define HAVE_OS_SUPPORT
+    hwloc_look_freebsd(topology);
+#    endif /* HWLOC_FREEBSD_SYS */
+
+#    ifdef HWLOC_HPUX_SYS
+#      define HAVE_OS_SUPPORT
     hwloc_look_hpux(topology);
-#    endif /* HPUX_SYS */
+#    endif /* HWLOC_HPUX_SYS */
 
 #    ifndef HAVE_OS_SUPPORT
-    hwloc_setup_proc_level(topology, hwloc_fallback_nbprocessors (), NULL);
+    hwloc_setup_pu_level(topology, hwloc_fallback_nbprocessors(topology));
 #    endif /* Unsupported OS */
   }
 
   print_objects(topology, 0, topology->levels[0][0]);
 
   /* First tweak a bit to clean the topology.  */
+  hwloc_debug("%s", "\nRestrict topology cpusets to existing PU and NODE objects\n");
+  collect_proc_cpuset(topology->levels[0][0], NULL);
 
-  hwloc_debug("\nComputing the system cpuset by ORing all Proc objects\n");
-  hwloc_cpuset_zero(topology->levels[0][0]->cpuset);
-  traverse(topology, &topology->levels[0][0], NULL, get_proc_cpuset, NULL, topology->levels[0][0]->cpuset);
+  hwloc_debug("%s", "\nPropagate offline and disallowed cpus down and up\n");
+  propagate_unused_cpuset(topology->levels[0][0], NULL);
 
-  hwloc_debug("\nApplying the system cpuset to all nodes\n");
-  traverse(topology, &topology->levels[0][0], apply_cpuset, apply_cpuset, NULL, topology->levels[0][0]->cpuset);
+  if (topology->levels[0][0]->complete_nodeset && hwloc_cpuset_iszero(topology->levels[0][0]->complete_nodeset)) {
+    /* No nodeset, drop all of them */
+    hwloc_cpuset_free(topology->levels[0][0]->nodeset);
+    topology->levels[0][0]->nodeset = NULL;
+    hwloc_cpuset_free(topology->levels[0][0]->complete_nodeset);
+    topology->levels[0][0]->complete_nodeset = NULL;
+    hwloc_cpuset_free(topology->levels[0][0]->allowed_nodeset);
+    topology->levels[0][0]->allowed_nodeset = NULL;
+  }
+  hwloc_debug("%s", "\nPropagate nodesets\n");
+  propagate_nodeset(topology->levels[0][0], NULL);
+  propagate_nodesets(topology->levels[0][0]);
 
-  hwloc_debug("\nRemoving empty objects except numa nodes\n");
-  traverse(topology, &topology->levels[0][0], remove_empty, remove_empty, NULL, NULL);
+  print_objects(topology, 0, topology->levels[0][0]);
 
+  if (!(topology->flags & HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM)) {
+    hwloc_debug("%s", "\nRemoving unauthorized and offline cpusets from all cpusets\n");
+    remove_unused_cpusets(topology->levels[0][0]);
+
+    hwloc_debug("%s", "\nRemoving disallowed memory according to nodesets\n");
+    apply_nodeset(topology->levels[0][0], NULL);
+
+    print_objects(topology, 0, topology->levels[0][0]);
+  }
+
+  hwloc_debug("%s", "\nRemoving ignored objects\n");
+  remove_ignored(topology, &topology->levels[0][0]);
+
   print_objects(topology, 0, topology->levels[0][0]);
 
-  hwloc_debug("\nRemoving objects whose type has HWLOC_IGNORE_TYPE_KEEP_STRUCTURE and have only one child or are the only child\n");
-  traverse(topology, &topology->levels[0][0], NULL, NULL, merge_useless_child, NULL);
+  hwloc_debug("%s", "\nRemoving empty objects except numa nodes and PCI devices\n");
+  remove_empty(topology, &topology->levels[0][0]);
 
-  hwloc_debug("\nOk, finished tweaking, now connect\n");
+  print_objects(topology, 0, topology->levels[0][0]);
 
+  hwloc_debug("%s", "\nRemoving objects whose type has HWLOC_IGNORE_TYPE_KEEP_STRUCTURE and have only one child or are the only child\n");
+  merge_useless_child(topology, &topology->levels[0][0]);
+
+  print_objects(topology, 0, topology->levels[0][0]);
+
+  hwloc_debug("%s", "\nOk, finished tweaking, now connect\n");
+
   /* Now connect handy pointers.  */
 
   hwloc_connect(topology->levels[0][0]);
@@ -971,21 +1556,30 @@
   /* initialize all depth to unknown */
   for (l=1; l < HWLOC_OBJ_TYPE_MAX; l++)
     topology->type_depth[l] = HWLOC_TYPE_DEPTH_UNKNOWN;
-  topology->type_depth[HWLOC_OBJ_SYSTEM] = 0;
+  topology->type_depth[topology->levels[0][0]->type] = 0;
 
   /* Start with children of the whole system.  */
   l = 0;
   n_objs = topology->levels[0][0]->arity;
   objs = malloc(n_objs * sizeof(objs[0]));
-  assert(objs);
+  if (!objs) {
+    errno = ENOMEM;
+    hwloc_topology_clear(topology);
+    return -1;
+  }
   memcpy(objs, topology->levels[0][0]->children, n_objs * sizeof(objs[0]));
 
   /* Keep building levels while there are objects left in OBJS.  */
   while (n_objs) {
 
-    /* First find which type of object is the topmost.  */
-    top_obj = objs[0];
-    for (i = 1; i < n_objs; i++) {
+    /* First find which type of object is the topmost.
+     * Don't use PU if there are other types since we want to keep PU at the bottom.
+     */
+    for (i = 0; i < n_objs; i++)
+      if (objs[i]->type != HWLOC_OBJ_PU)
+        break;
+    top_obj = i == n_objs ? objs[0] : objs[i];
+    for (i = 0; i < n_objs; i++) {
       if (hwloc_type_cmp(top_obj, objs[i]) != HWLOC_TYPE_EQUAL) {
 	if (find_same_type(objs[i], top_obj)) {
 	  /* OBJS[i] is strictly above an object of the same type as TOP_OBJ, so it
@@ -1025,9 +1619,11 @@
 	new_objs[new_i++] = objs[i];
 
 
+#ifdef HWLOC_DEBUG
     /* Make sure we didn't mess up.  */
     assert(taken_i == n_taken_objs);
     assert(new_i == n_objs - n_taken_objs + n_new_objs);
+#endif
 
     /* Ok, put numbers in the level.  */
     for (i = 0; i < n_taken_objs; i++) {
@@ -1041,10 +1637,10 @@
 
     /* One more level!  */
     if (top_obj->type == HWLOC_OBJ_CACHE)
-      hwloc_debug("--- Cache level depth %d", top_obj->attr->cache.depth);
+      hwloc_debug("--- Cache level depth %u", top_obj->attr->cache.depth);
     else
       hwloc_debug("--- %s level", hwloc_obj_type_string(top_obj->type));
-    hwloc_debug(" has number %d\n\n", topology->nb_levels);
+    hwloc_debug(" has number %u\n\n", topology->nb_levels);
 
     if (topology->type_depth[top_obj->type] == HWLOC_TYPE_DEPTH_UNKNOWN)
       topology->type_depth[top_obj->type] = topology->nb_levels;
@@ -1066,54 +1662,101 @@
   /* It's empty now.  */
   free(objs);
 
+  /* accumulate children memory in total_memory fields (only once parent is set) */
+  hwloc_debug("%s", "\nPropagate total memory up\n");
+  propagate_total_memory(topology->levels[0][0]);
+
   if (topology->flags & HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM)
     topology->is_thissystem = 1;
 
   if (topology->is_thissystem) {
-#    ifdef LINUX_SYS
+#    ifdef HWLOC_LINUX_SYS
     hwloc_set_linux_hooks(topology);
-#    endif /* LINUX_SYS */
+#    endif /* HWLOC_LINUX_SYS */
 
-#    ifdef  AIX_SYS
+#    ifdef HWLOC_AIX_SYS
     hwloc_set_aix_hooks(topology);
-#    endif /* AIX_SYS */
+#    endif /* HWLOC_AIX_SYS */
 
-#    ifdef  OSF_SYS
+#    ifdef HWLOC_OSF_SYS
     hwloc_set_osf_hooks(topology);
-#    endif /* OSF_SYS */
+#    endif /* HWLOC_OSF_SYS */
 
-#    ifdef  SOLARIS_SYS
+#    ifdef HWLOC_SOLARIS_SYS
     hwloc_set_solaris_hooks(topology);
-#    endif /* SOLARIS_SYS */
+#    endif /* HWLOC_SOLARIS_SYS */
 
-#    ifdef  WIN_SYS
+#    ifdef HWLOC_WIN_SYS
     hwloc_set_windows_hooks(topology);
-#    endif /* WIN_SYS */
+#    endif /* HWLOC_WIN_SYS */
 
-#    ifdef  DARWIN_SYS
+#    ifdef HWLOC_DARWIN_SYS
     hwloc_set_darwin_hooks(topology);
-#    endif /* DARWIN_SYS */
+#    endif /* HWLOC_DARWIN_SYS */
 
-#    ifdef  HPUX_SYS
+#    ifdef HWLOC_FREEBSD_SYS
+    hwloc_set_freebsd_hooks(topology);
+#    endif /* HWLOC_FREEBSD_SYS */
+
+#    ifdef HWLOC_HPUX_SYS
     hwloc_set_hpux_hooks(topology);
-#    endif /* HPUX_SYS */
+#    endif /* HWLOC_HPUX_SYS */
   } else {
-    topology->set_cpubind = dontset_cpubind;
+    topology->set_thisproc_cpubind = dontset_thisproc_cpubind;
+    topology->get_thisproc_cpubind = dontget_thisproc_cpubind;
+    topology->set_thisthread_cpubind = dontset_thisthread_cpubind;
+    topology->get_thisthread_cpubind = dontget_thisthread_cpubind;
     topology->set_proc_cpubind = dontset_proc_cpubind;
+    topology->get_proc_cpubind = dontget_proc_cpubind;
 #ifdef hwloc_thread_t
     topology->set_thread_cpubind = dontset_thread_cpubind;
+    topology->get_thread_cpubind = dontget_thread_cpubind;
 #endif
-    topology->set_thisproc_cpubind = dontset_thisproc_cpubind;
-    topology->set_thisthread_cpubind = dontset_thisthread_cpubind;
   }
+
+  /* if not is_thissystem, set_cpubind is fake
+   * and get_cpubind returns the whole system cpuset,
+   * so don't report that set/get_cpubind as supported
+   */
+  if (topology->is_thissystem) {
+#define DO(kind) \
+    if (topology->kind) \
+      topology->support.cpubind->kind = 1;
+    DO(set_thisproc_cpubind);
+    DO(get_thisproc_cpubind);
+    DO(set_proc_cpubind);
+    DO(get_proc_cpubind);
+    DO(set_thisthread_cpubind);
+    DO(get_thisthread_cpubind);
+    DO(set_thread_cpubind);
+    DO(get_thread_cpubind);
+  }
+
+  return 0;
 }
 
+/* To be before discovery is actually launched,
+ * Resets everything in case a previous load initialized some stuff.
+ */
 static void
 hwloc_topology_setup_defaults(struct hwloc_topology *topology)
 {
-  struct hwloc_obj *system_obj;
+  struct hwloc_obj *root_obj;
   int i;
 
+  /* reset support */
+  topology->set_thisproc_cpubind = NULL;
+  topology->get_thisproc_cpubind = NULL;
+  topology->set_thisthread_cpubind = NULL;
+  topology->get_thisthread_cpubind = NULL;
+  topology->set_proc_cpubind = NULL;
+  topology->get_proc_cpubind = NULL;
+#ifdef hwloc_thread_t
+  topology->set_thread_cpubind = NULL;
+  topology->get_thread_cpubind = NULL;
+#endif
+  memset(topology->support.discovery, 0, sizeof(*topology->support.discovery));
+  memset(topology->support.cpubind, 0, sizeof(*topology->support.cpubind));
 
   /* No objects by default but System on top by default */
   memset(topology->level_nbobjects, 0, sizeof(topology->level_nbobjects));
@@ -1122,25 +1765,16 @@
   topology->nb_levels = 1; /* there's at least SYSTEM */
   topology->levels[0] = malloc (sizeof (struct hwloc_obj));
   topology->level_nbobjects[0] = 1;
-  topology->type_depth[HWLOC_OBJ_SYSTEM] = 0;
 
-  /* Create the actual System object */
-  system_obj = hwloc_alloc_setup_object(HWLOC_OBJ_SYSTEM, 0);
-  system_obj->cpuset = hwloc_cpuset_alloc();
-  system_obj->depth = 0;
-  system_obj->logical_index = 0;
-  system_obj->sibling_rank = 0;
-  system_obj->attr->system.memory_kB = 0;
-  system_obj->attr->system.huge_page_free = 0;
-#ifdef HAVE__SC_LARGE_PAGESIZE
-  system_obj->attr->system.huge_page_size_kB = sysconf(_SC_LARGE_PAGESIZE);
-#else /* HAVE__SC_LARGE_PAGESIZE */
-  system_obj->attr->system.huge_page_size_kB = 0;
-#endif /* HAVE__SC_LARGE_PAGESIZE */
-  system_obj->attr->system.dmi_board_vendor = NULL;
-  system_obj->attr->system.dmi_board_name = NULL;
-  hwloc_cpuset_fill(system_obj->cpuset);
-  topology->levels[0][0] = system_obj;
+  /* Create the actual machine object, but don't touch its attributes yet
+   * since the OS backend may still change the object into something else
+   * (for instance System)
+   */
+  root_obj = hwloc_alloc_setup_object(HWLOC_OBJ_MACHINE, 0);
+  root_obj->depth = 0;
+  root_obj->logical_index = 0;
+  root_obj->sibling_rank = 0;
+  topology->levels[0][0] = root_obj;
 }
 
 int
@@ -1158,17 +1792,15 @@
   topology->flags = 0;
   topology->is_thissystem = 1;
   topology->backend_type = HWLOC_BACKEND_NONE; /* backend not specified by default */
-  topology->set_cpubind = NULL;
-  topology->set_proc_cpubind = NULL;
-#ifdef hwloc_thread_t
-  topology->set_thread_cpubind = NULL;
-#endif
-  topology->set_thisproc_cpubind = NULL;
-  topology->set_thisthread_cpubind = NULL;
+  topology->pid = 0;
+
+  topology->support.discovery = malloc(sizeof(*topology->support.discovery));
+  topology->support.cpubind = malloc(sizeof(*topology->support.cpubind));
+
   /* Only ignore useless cruft by default */
   for(i=0; i< HWLOC_OBJ_TYPE_MAX; i++)
     topology->ignored_types[i] = HWLOC_IGNORE_TYPE_NEVER;
-  topology->ignored_types[HWLOC_OBJ_MISC] = HWLOC_IGNORE_TYPE_KEEP_STRUCTURE;
+  topology->ignored_types[HWLOC_OBJ_GROUP] = HWLOC_IGNORE_TYPE_KEEP_STRUCTURE;
 
   /* Make the topology look like something coherent but empty */
   hwloc_topology_setup_defaults(topology);
@@ -1181,12 +1813,12 @@
 hwloc_backend_exit(struct hwloc_topology *topology)
 {
   switch (topology->backend_type) {
-#ifdef LINUX_SYS
+#ifdef HWLOC_LINUX_SYS
   case HWLOC_BACKEND_SYSFS:
     hwloc_backend_sysfs_exit(topology);
     break;
 #endif
-#ifdef HAVE_XML
+#ifdef HWLOC_HAVE_XML
   case HWLOC_BACKEND_XML:
     hwloc_backend_xml_exit(topology);
     break;
@@ -1202,20 +1834,33 @@
 }
 
 int
-hwloc_topology_set_fsroot(struct hwloc_topology *topology, const char *fsroot_path)
+hwloc_topology_set_fsroot(struct hwloc_topology *topology, const char *fsroot_path __hwloc_attribute_unused)
 {
   /* cleanup existing backend */
   hwloc_backend_exit(topology);
 
-#ifdef LINUX_SYS
+#ifdef HWLOC_LINUX_SYS
   if (hwloc_backend_sysfs_init(topology, fsroot_path) < 0)
     return -1;
-#endif /* LINUX_SYS */
+#endif /* HWLOC_LINUX_SYS */
 
   return 0;
 }
 
 int
+hwloc_topology_set_pid(struct hwloc_topology *topology __hwloc_attribute_unused,
+                       hwloc_pid_t pid __hwloc_attribute_unused)
+{
+#ifdef HWLOC_LINUX_SYS
+  topology->pid = pid;
+  return 0;
+#else /* HWLOC_LINUX_SYS */
+  errno = ENOSYS;
+  return -1;
+#endif /* HWLOC_LINUX_SYS */
+}
+
+int
 hwloc_topology_set_synthetic(struct hwloc_topology *topology, const char *description)
 {
   /* cleanup existing backend */
@@ -1225,16 +1870,18 @@
 }
 
 int
-hwloc_topology_set_xml(struct hwloc_topology *topology, const char *xmlpath)
+hwloc_topology_set_xml(struct hwloc_topology *topology __hwloc_attribute_unused,
+                       const char *xmlpath __hwloc_attribute_unused)
 {
-#ifdef HAVE_XML
+#ifdef HWLOC_HAVE_XML
   /* cleanup existing backend */
   hwloc_backend_exit(topology);
 
   return hwloc_backend_xml_init(topology, xmlpath);
-#else /* HAVE_XML */
+#else /* HWLOC_HAVE_XML */
+  errno = ENOSYS;
   return -1;
-#endif /* !HAVE_XML */
+#endif /* !HWLOC_HAVE_XML */
 }
 
 int
@@ -1247,17 +1894,17 @@
 int
 hwloc_topology_ignore_type(struct hwloc_topology *topology, hwloc_obj_type_t type)
 {
-  if (type >= HWLOC_OBJ_TYPE_MAX)
+  if (type >= HWLOC_OBJ_TYPE_MAX) {
+    errno = EINVAL;
     return -1;
+  }
 
-  if (type == HWLOC_OBJ_SYSTEM)
-    /* we don't want 2 heads */
+  if (type == HWLOC_OBJ_PU) {
+    /* we need the PU level */
+    errno = EINVAL;
     return -1;
+  }
 
-  if (type == HWLOC_OBJ_PROC)
-    /* we need the proc level */
-    return -1;
-
   topology->ignored_types[type] = HWLOC_IGNORE_TYPE_ALWAYS;
   return 0;
 }
@@ -1265,17 +1912,17 @@
 int
 hwloc_topology_ignore_type_keep_structure(struct hwloc_topology *topology, hwloc_obj_type_t type)
 {
-  if (type >= HWLOC_OBJ_TYPE_MAX)
+  if (type >= HWLOC_OBJ_TYPE_MAX) {
+    errno = EINVAL;
     return -1;
+  }
 
-  if (type == HWLOC_OBJ_SYSTEM)
-    /* we don't want 2 heads */
+  if (type == HWLOC_OBJ_PU) {
+    /* we need the PU level */
+    errno = EINVAL;
     return -1;
+  }
 
-  if (type == HWLOC_OBJ_PROC)
-    /* we need the proc level */
-    return -1;
-
   topology->ignored_types[type] = HWLOC_IGNORE_TYPE_KEEP_STRUCTURE;
   return 0;
 }
@@ -1285,20 +1932,27 @@
 {
   unsigned type;
   for(type=0; type<HWLOC_OBJ_TYPE_MAX; type++)
-    if (type != HWLOC_OBJ_SYSTEM && type != HWLOC_OBJ_PROC)
+    if (type != HWLOC_OBJ_PU)
       topology->ignored_types[type] = HWLOC_IGNORE_TYPE_KEEP_STRUCTURE;
   return 0;
 }
 
 static void
+hwloc_topology_clear_tree (struct hwloc_topology *topology, struct hwloc_obj *root)
+{
+  unsigned i;
+  for(i=0; i<root->arity; i++)
+    hwloc_topology_clear_tree (topology, root->children[i]);
+  free_object (root);
+}
+
+static void
 hwloc_topology_clear (struct hwloc_topology *topology)
 {
-  unsigned l,i;
-  for (l=0; l<topology->nb_levels; l++) {
-    for (i=0; i<topology->level_nbobjects[l]; i++)
-      free_object(topology->levels[l][i]);
+  unsigned l;
+  hwloc_topology_clear_tree (topology, topology->levels[0][0]);
+  for (l=0; l<topology->nb_levels; l++)
     free(topology->levels[l]);
-  }
 }
 
 void
@@ -1306,6 +1960,8 @@
 {
   hwloc_topology_clear(topology);
   hwloc_backend_exit(topology);
+  free(topology->support.discovery);
+  free(topology->support.cpubind);
   free(topology);
 }
 
@@ -1313,6 +1969,7 @@
 hwloc_topology_load (struct hwloc_topology *topology)
 {
   char *local_env;
+  int err;
 
   if (topology->is_loaded) {
     hwloc_topology_clear(topology);
@@ -1321,7 +1978,7 @@
   }
 
   /* enforce backend anyway if a FORCE variable was given */
-#ifdef LINUX_SYS
+#ifdef HWLOC_LINUX_SYS
   {
     char *fsroot_path_env = getenv("HWLOC_FORCE_FSROOT");
     if (fsroot_path_env) {
@@ -1330,7 +1987,7 @@
     }
   }
 #endif
-#ifdef HAVE_XML
+#ifdef HWLOC_HAVE_XML
   {
     char *xmlpath_env = getenv("HWLOC_FORCE_XMLFILE");
     if (xmlpath_env) {
@@ -1341,36 +1998,38 @@
 #endif
 
   /* only apply non-FORCE variables if we have not changed the backend yet */
-#ifdef LINUX_SYS
+#ifdef HWLOC_LINUX_SYS
   if (topology->backend_type == HWLOC_BACKEND_NONE) {
     char *fsroot_path_env = getenv("HWLOC_FSROOT");
     if (fsroot_path_env)
       hwloc_backend_sysfs_init(topology, fsroot_path_env);
   }
 #endif
-#ifdef HAVE_XML
+#ifdef HWLOC_HAVE_XML
   if (topology->backend_type == HWLOC_BACKEND_NONE) {
-    char *xmlpath_env = getenv("HWLOC_FORCE_XMLFILE");
+    char *xmlpath_env = getenv("HWLOC_XMLFILE");
     if (xmlpath_env)
       hwloc_backend_xml_init(topology, xmlpath_env);
   }
 #endif
-  if (topology->backend_type == HWLOC_BACKEND_NONE) {
-    local_env = getenv("HWLOC_THISSYSTEM");
-    if (local_env)
-      topology->is_thissystem = atoi(local_env);
-  }
 
+  /* always apply non-FORCE THISSYSTEM since it was explicitly designed to override setups from other backends */
+  local_env = getenv("HWLOC_THISSYSTEM");
+  if (local_env)
+    topology->is_thissystem = atoi(local_env);
+
   /* if we haven't chosen the backend, set the OS-specific one if needed */
   if (topology->backend_type == HWLOC_BACKEND_NONE) {
-#ifdef LINUX_SYS
+#ifdef HWLOC_LINUX_SYS
     if (hwloc_backend_sysfs_init(topology, "/") < 0)
       return -1;
 #endif
   }
 
   /* actual topology discovery */
-  hwloc_discover(topology);
+  err = hwloc_discover(topology);
+  if (err < 0)
+    return err;
 
   /* enforce THISSYSTEM if given in a FORCE variable */
   local_env = getenv("HWLOC_FORCE_THISSYSTEM");
@@ -1398,56 +2057,62 @@
   return topology->nb_levels;
 }
 
-
-/* check children between a father object */
+/* check children between a parent object */
 static void
-hwloc__check_children(struct hwloc_topology *topology, struct hwloc_obj *father)
+hwloc__check_children(struct hwloc_obj *parent)
 {
-  hwloc_cpuset_t remaining_father_set;
-  int j;
+  hwloc_cpuset_t remaining_parent_set;
+  unsigned j;
 
-  if (!father->arity) {
-    /* check whether that father has no children for real */
-    assert(!father->children);
-    assert(!father->first_child);
-    assert(!father->last_child);
+  if (!parent->arity) {
+    /* check whether that parent has no children for real */
+    assert(!parent->children);
+    assert(!parent->first_child);
+    assert(!parent->last_child);
     return;
   }
-  /* check whether that father has children for real */
-  assert(father->children);
-  assert(father->first_child);
-  assert(father->last_child);
+  /* check whether that parent has children for real */
+  assert(parent->children);
+  assert(parent->first_child);
+  assert(parent->last_child);
 
   /* first child specific checks */
-  assert(father->first_child->sibling_rank == 0);
-  assert(father->first_child == father->children[0]);
-  assert(father->first_child->prev_sibling == NULL);
+  assert(parent->first_child->sibling_rank == 0);
+  assert(parent->first_child == parent->children[0]);
+  assert(parent->first_child->prev_sibling == NULL);
 
   /* last child specific checks */
-  assert(father->last_child->sibling_rank == father->arity-1);
-  assert(father->last_child == father->children[father->arity-1]);
-  assert(father->last_child->next_sibling == NULL);
+  assert(parent->last_child->sibling_rank == parent->arity-1);
+  assert(parent->last_child == parent->children[parent->arity-1]);
+  assert(parent->last_child->next_sibling == NULL);
 
-  remaining_father_set = hwloc_cpuset_dup(father->cpuset);
-  for(j=0; j<father->arity; j++) {
-    /* check that child cpuset is included in the father */
-    assert(hwloc_cpuset_isincluded(father->children[j]->cpuset, remaining_father_set));
-    /* check that children are correctly ordered (see below), empty ones may be anywhere */
-    if (!hwloc_cpuset_iszero(father->children[j]->cpuset))
-      assert(hwloc_cpuset_first(father->children[j]->cpuset) == hwloc_cpuset_first(remaining_father_set));
-    /* clear previously used father cpuset bits so that we actually checked above
-     * that children cpusets do not intersect and are ordered properly
-     */
-    hwloc_cpuset_clearset(remaining_father_set, father->children[j]->cpuset);
+  if (parent->cpuset) {
+    remaining_parent_set = hwloc_cpuset_dup(parent->cpuset);
+    for(j=0; j<parent->arity; j++) {
+      if (!parent->children[j]->cpuset)
+	continue;
+      /* check that child cpuset is included in the parent */
+      assert(hwloc_cpuset_isincluded(parent->children[j]->cpuset, remaining_parent_set));
+      /* check that children are correctly ordered (see below), empty ones may be anywhere */
+      if (!hwloc_cpuset_iszero(parent->children[j]->cpuset)) {
+        int firstchild = hwloc_cpuset_first(parent->children[j]->cpuset);
+        int firstparent = hwloc_cpuset_first(remaining_parent_set);
+        assert(firstchild == firstparent);
+      }
+      /* clear previously used parent cpuset bits so that we actually checked above
+       * that children cpusets do not intersect and are ordered properly
+       */
+      hwloc_cpuset_andnot(remaining_parent_set, remaining_parent_set, parent->children[j]->cpuset);
+    }
+    assert(hwloc_cpuset_iszero(remaining_parent_set));
+    hwloc_cpuset_free(remaining_parent_set);
   }
-  assert(hwloc_cpuset_iszero(remaining_father_set));
-  free(remaining_father_set);
 
   /* checks for all children */
-  for(j=1; j<father->arity; j++) {
-    assert(father->children[j]->sibling_rank == j);
-    assert(father->children[j-1]->next_sibling == father->children[j]);
-    assert(father->children[j]->prev_sibling == father->children[j-1]);
+  for(j=1; j<parent->arity; j++) {
+    assert(parent->children[j]->sibling_rank == j);
+    assert(parent->children[j-1]->next_sibling == parent->children[j]);
+    assert(parent->children[j]->prev_sibling == parent->children[j-1]);
   }
 }
 
@@ -1456,32 +2121,28 @@
 hwloc_topology_check(struct hwloc_topology *topology)
 {
   struct hwloc_obj *obj;
-  int i,j;
   hwloc_obj_type_t type;
-  unsigned depth;
+  unsigned i, j, depth;
 
   /* check type orders */
-  for (type = HWLOC_OBJ_SYSTEM; type < HWLOC_OBJ_TYPE_MAX; type++)
+  for (type = HWLOC_OBJ_SYSTEM; type < HWLOC_OBJ_TYPE_MAX; type++) {
     assert(hwloc_get_order_type(hwloc_get_type_order(type)) == type);
-  for (i = hwloc_get_order_type(HWLOC_OBJ_SYSTEM); i <= hwloc_get_order_type(HWLOC_OBJ_CORE); i++)
-    assert(hwloc_get_type_order(hwloc_get_order_type(i)) == i);
-
-  /* check that first level is SYSTEM */
-  assert(hwloc_get_depth_type(topology, 0) == HWLOC_OBJ_SYSTEM);
-  /* check that last level is PROC */
-  assert(hwloc_get_depth_type(topology, hwloc_topology_get_depth(topology)-1) == HWLOC_OBJ_PROC);
-  /* check that other levels are neither PROC nor SYSTEM */
-  for(i=1; i<hwloc_topology_get_depth(topology)-1; i++) {
-    assert(hwloc_get_depth_type(topology, i) != HWLOC_OBJ_SYSTEM);
-    assert(hwloc_get_depth_type(topology, i) != HWLOC_OBJ_PROC);
   }
+  for (i = hwloc_get_type_order(HWLOC_OBJ_SYSTEM);
+       i <= hwloc_get_type_order(HWLOC_OBJ_CORE); i++) {
+    assert(i == hwloc_get_type_order(hwloc_get_order_type(i)));
+  }
 
+  /* check that last level is PU */
+  assert(hwloc_get_depth_type(topology, hwloc_topology_get_depth(topology)-1) == HWLOC_OBJ_PU);
+  /* check that other levels are not PU */
+  for(i=1; i<hwloc_topology_get_depth(topology)-1; i++)
+    assert(hwloc_get_depth_type(topology, i) != HWLOC_OBJ_PU);
+
   /* top-level specific checks */
   assert(hwloc_get_nbobjs_by_depth(topology, 0) == 1);
-  obj = hwloc_get_system_obj(topology);
+  obj = hwloc_get_root_obj(topology);
   assert(obj);
-  /* top-level object must be SYSTEM */
-  assert(obj->type == HWLOC_OBJ_SYSTEM);
 
   depth = hwloc_topology_get_depth(topology);
 
@@ -1503,8 +2164,22 @@
 	assert(prev->next_cousin == obj);
 	assert(obj->prev_cousin == prev);
       }
+      if (obj->complete_cpuset) {
+        if (obj->cpuset)
+          assert(hwloc_cpuset_isincluded(obj->cpuset, obj->complete_cpuset));
+        if (obj->online_cpuset)
+          assert(hwloc_cpuset_isincluded(obj->online_cpuset, obj->complete_cpuset));
+        if (obj->allowed_cpuset)
+          assert(hwloc_cpuset_isincluded(obj->allowed_cpuset, obj->complete_cpuset));
+      }
+      if (obj->complete_nodeset) {
+        if (obj->nodeset)
+          assert(hwloc_cpuset_isincluded(obj->nodeset, obj->complete_nodeset));
+        if (obj->allowed_nodeset)
+          assert(hwloc_cpuset_isincluded(obj->allowed_nodeset, obj->complete_nodeset));
+      }
       /* check children */
-      hwloc__check_children(topology, obj);
+      hwloc__check_children(obj);
       prev = obj;
     }
 
@@ -1515,8 +2190,8 @@
 
     /* check type */
     assert(hwloc_get_depth_type(topology, i) == obj->type);
-    assert(hwloc_get_type_depth(topology, obj->type) == i
-	   || hwloc_get_type_depth(topology, obj->type) == HWLOC_TYPE_DEPTH_MULTIPLE);
+    assert(i == (unsigned) hwloc_get_type_depth(topology, obj->type) ||
+           HWLOC_TYPE_DEPTH_MULTIPLE == hwloc_get_type_depth(topology, obj->type));
 
     /* check last object of the level */
     obj = hwloc_get_obj_by_depth(topology, i, width-1);
@@ -1533,9 +2208,13 @@
   for(j=0; j<hwloc_get_nbobjs_by_depth(topology, depth-1); j++) {
     obj = hwloc_get_obj_by_depth(topology, depth-1, j);
     assert(obj);
-    assert(obj->arity == 0);
-    assert(obj->children == NULL);
-    /* bottom-level object must always be PROC */
-    assert(obj->type == HWLOC_OBJ_PROC);
+    /* bottom-level object must always be PU */
+    assert(obj->type == HWLOC_OBJ_PU);
   }
 }
+
+const struct hwloc_topology_support *
+hwloc_topology_get_support(struct hwloc_topology * topology)
+{
+  return &topology->support;
+}

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/traversal.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/traversal.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/src/traversal.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -7,10 +7,9 @@
 #include <private/config.h>
 #include <hwloc.h>
 #include <private/private.h>
+#include <private/misc.h>
 #include <private/debug.h>
 
-#include <assert.h>
-
 int
 hwloc_get_type_depth (struct hwloc_topology *topology, hwloc_obj_type_t type)
 {
@@ -21,7 +20,7 @@
 hwloc_get_depth_type (hwloc_topology_t topology, unsigned depth)
 {
   if (depth >= topology->nb_levels)
-    return HWLOC_OBJ_TYPE_MAX; /* FIXME: add an invalid value ? */
+    return (hwloc_obj_type_t) -1;
   return topology->levels[depth][0]->type;
 }
 
@@ -43,11 +42,11 @@
   return topology->levels[depth][idx];
 }
 
-int hwloc_get_closest_objs (struct hwloc_topology *topology, struct hwloc_obj *src, struct hwloc_obj **objs, int max)
+unsigned hwloc_get_closest_objs (struct hwloc_topology *topology, struct hwloc_obj *src, struct hwloc_obj **objs, unsigned max)
 {
   struct hwloc_obj *parent, *nextparent, **src_objs;
   int i,src_nbobjects;
-  int stored = 0;
+  unsigned stored = 0;
 
   src_nbobjects = topology->level_nbobjects[src->depth];
   src_objs = topology->levels[src->depth];
@@ -55,7 +54,7 @@
   parent = src;
   while (stored < max) {
     while (1) {
-      nextparent = parent->father;
+      nextparent = parent->parent;
       if (!nextparent)
 	goto out;
       if (!hwloc_cpuset_isequal(parent->cpuset, nextparent->cpuset))
@@ -80,14 +79,15 @@
 }
 
 static int
-hwloc__get_largest_objs_inside_cpuset (struct hwloc_obj *current, hwloc_cpuset_t set,
+hwloc__get_largest_objs_inside_cpuset (struct hwloc_obj *current, hwloc_const_cpuset_t set,
 				       struct hwloc_obj ***res, int *max)
 {
   int gotten = 0;
-  int i;
+  unsigned i;
 
   /* the caller must ensure this */
-  assert(*max > 0);
+  if (*max <= 0)
+    return 0;
 
   if (hwloc_cpuset_isequal(current->cpuset, set)) {
     **res = current;
@@ -101,15 +101,15 @@
     int ret;
 
     /* split out the cpuset part corresponding to this child and see if there's anything to do */
-    hwloc_cpuset_andset(subset, current->children[i]->cpuset);
+    hwloc_cpuset_and(subset, subset, current->children[i]->cpuset);
     if (hwloc_cpuset_iszero(subset)) {
-      free(subset);
+      hwloc_cpuset_free(subset);
       continue;
     }
 
     ret = hwloc__get_largest_objs_inside_cpuset (current->children[i], subset, res, max);
     gotten += ret;
-    free(subset);
+    hwloc_cpuset_free(subset);
 
     /* if no more room to store remaining objects, return what we got so far */
     if (!*max)
@@ -120,7 +120,7 @@
 }
 
 int
-hwloc_get_largest_objs_inside_cpuset (struct hwloc_topology *topology, hwloc_cpuset_t set,
+hwloc_get_largest_objs_inside_cpuset (struct hwloc_topology *topology, hwloc_const_cpuset_t set,
 				      struct hwloc_obj **objs, int max)
 {
   struct hwloc_obj *current = topology->levels[0][0];
@@ -142,11 +142,12 @@
     case HWLOC_OBJ_SYSTEM: return "System";
     case HWLOC_OBJ_MACHINE: return "Machine";
     case HWLOC_OBJ_MISC: return "Misc";
+    case HWLOC_OBJ_GROUP: return "Group";
     case HWLOC_OBJ_NODE: return "NUMANode";
     case HWLOC_OBJ_SOCKET: return "Socket";
     case HWLOC_OBJ_CACHE: return "Cache";
     case HWLOC_OBJ_CORE: return "Core";
-    case HWLOC_OBJ_PROC: return "Proc";
+    case HWLOC_OBJ_PU: return "PU";
     default: return "Unknown";
     }
 }
@@ -154,93 +155,133 @@
 hwloc_obj_type_t
 hwloc_obj_type_of_string (const char * string)
 {
-  if (!strcmp(string, "System")) return HWLOC_OBJ_SYSTEM;
-  if (!strcmp(string, "Machine")) return HWLOC_OBJ_MACHINE;
-  if (!strcmp(string, "Misc")) return HWLOC_OBJ_MISC;
-  if (!strcmp(string, "NUMANode")) return HWLOC_OBJ_NODE;
-  if (!strcmp(string, "Socket")) return HWLOC_OBJ_SOCKET;
-  if (!strcmp(string, "Cache")) return HWLOC_OBJ_CACHE;
-  if (!strcmp(string, "Core")) return HWLOC_OBJ_CORE;
-  if (!strcmp(string, "Proc")) return HWLOC_OBJ_PROC;
-  return HWLOC_OBJ_TYPE_MAX;
+  if (!strcasecmp(string, "System")) return HWLOC_OBJ_SYSTEM;
+  if (!strcasecmp(string, "Machine")) return HWLOC_OBJ_MACHINE;
+  if (!strcasecmp(string, "Misc")) return HWLOC_OBJ_MISC;
+  if (!strcasecmp(string, "Group")) return HWLOC_OBJ_GROUP;
+  if (!strcasecmp(string, "NUMANode") || !strcasecmp(string, "Node")) return HWLOC_OBJ_NODE;
+  if (!strcasecmp(string, "Socket")) return HWLOC_OBJ_SOCKET;
+  if (!strcasecmp(string, "Cache")) return HWLOC_OBJ_CACHE;
+  if (!strcasecmp(string, "Core")) return HWLOC_OBJ_CORE;
+  if (!strcasecmp(string, "PU") || !strcasecmp(string, "proc") /* backward compatiliby with 0.9 */) return HWLOC_OBJ_PU;
+  return (hwloc_obj_type_t) -1;
 }
 
-#define hwloc_memory_size_printf_value(_size) \
-  (_size) < (10*1024) ? (_size) : (_size) < (10*1024*1024) ? (_size)>>10 : (_size)>>20
-#define hwloc_memory_size_printf_unit(_size) \
-  (_size) < (10*1024) ? "KB" : (_size) < (10*1024*1024) ? "MB" : "GB"
+#define hwloc_memory_size_printf_value(_size, _verbose) \
+  ((_size) < (10ULL<<20) || _verbose ? (((_size)>>9)+1)>>1 : (_size) < (10ULL<<30) ? (((_size)>>19)+1)>>1 : (((_size)>>29)+1)>>1)
+#define hwloc_memory_size_printf_unit(_size, _verbose) \
+  ((_size) < (10ULL<<20) || _verbose ? "KB" : (_size) < (10ULL<<30) ? "MB" : "GB")
 
 int
-hwloc_obj_snprintf(char *string, size_t size,
-		  struct hwloc_topology *topology, struct hwloc_obj *l, const char *_indexprefix, int verbose)
+hwloc_obj_type_snprintf(char * __hwloc_restrict string, size_t size, hwloc_obj_t obj, int verbose)
 {
-  hwloc_obj_type_t type = l->type;
-  const char *indexprefix = _indexprefix ? _indexprefix : "#";
-  char os_index[12] = "";
-
-  if (l->os_index != -1)
-    snprintf(os_index, 12, "%s%d", indexprefix, l->os_index);
-
+  hwloc_obj_type_t type = obj->type;
   switch (type) {
-  case HWLOC_OBJ_SOCKET:
-  case HWLOC_OBJ_CORE:
-    return hwloc_snprintf(string, size, "%s%s", hwloc_obj_type_string(type), os_index);
   case HWLOC_OBJ_MISC:
-	  /* TODO: more pretty presentation? */
-    return hwloc_snprintf(string, size, "%s%u%s", hwloc_obj_type_string(type), l->attr->misc.depth, os_index);
-  case HWLOC_OBJ_PROC:
-    return hwloc_snprintf(string, size, "P%s", os_index);
   case HWLOC_OBJ_SYSTEM:
-    if (verbose)
-      return hwloc_snprintf(string, size, "%s(%lu%s HP=%lu*%lukB %s %s)", hwloc_obj_type_string(type),
-		      hwloc_memory_size_printf_value(l->attr->system.memory_kB),
-		      hwloc_memory_size_printf_unit(l->attr->system.memory_kB),
-		      l->attr->system.huge_page_free, l->attr->system.huge_page_size_kB,
-		      l->attr->system.dmi_board_vendor?l->attr->system.dmi_board_vendor:"",
-		      l->attr->system.dmi_board_name?l->attr->system.dmi_board_name:"");
-    else
-      return hwloc_snprintf(string, size, "%s(%lu%s)", hwloc_obj_type_string(type),
-		      hwloc_memory_size_printf_value(l->attr->system.memory_kB),
-		      hwloc_memory_size_printf_unit(l->attr->system.memory_kB));
   case HWLOC_OBJ_MACHINE:
-    if (verbose)
-      return hwloc_snprintf(string, size, "%s(%lu%s HP=%lu*%lukB %s %s)", hwloc_obj_type_string(type),
-		      hwloc_memory_size_printf_value(l->attr->machine.memory_kB),
-		      hwloc_memory_size_printf_unit(l->attr->machine.memory_kB),
-		      l->attr->machine.huge_page_free, l->attr->machine.huge_page_size_kB,
-		      l->attr->machine.dmi_board_vendor?l->attr->machine.dmi_board_vendor:"",
-		      l->attr->machine.dmi_board_name?l->attr->machine.dmi_board_name:"");
-    else
-      return hwloc_snprintf(string, size, "%s%s(%lu%s)", hwloc_obj_type_string(type), os_index,
-		      hwloc_memory_size_printf_value(l->attr->machine.memory_kB),
-		      hwloc_memory_size_printf_unit(l->attr->machine.memory_kB));
   case HWLOC_OBJ_NODE:
-    return hwloc_snprintf(string, size, "%s%s(%lu%s)",
-		    verbose ? hwloc_obj_type_string(type) : "Node", os_index,
-		    hwloc_memory_size_printf_value(l->attr->node.memory_kB),
-		    hwloc_memory_size_printf_unit(l->attr->node.memory_kB));
+  case HWLOC_OBJ_SOCKET:
+  case HWLOC_OBJ_CORE:
+  case HWLOC_OBJ_PU:
+    return hwloc_snprintf(string, size, "%s", hwloc_obj_type_string(type));
   case HWLOC_OBJ_CACHE:
-    return hwloc_snprintf(string, size, "L%u%s%s(%lu%s)", l->attr->cache.depth,
-		      verbose ? hwloc_obj_type_string(type) : "", os_index,
-		    hwloc_memory_size_printf_value(l->attr->node.memory_kB),
-		    hwloc_memory_size_printf_unit(l->attr->node.memory_kB));
+    return hwloc_snprintf(string, size, "L%u%s", obj->attr->cache.depth, verbose ? hwloc_obj_type_string(type): "");
+  case HWLOC_OBJ_GROUP:
+	  /* TODO: more pretty presentation? */
+    return hwloc_snprintf(string, size, "%s%u", hwloc_obj_type_string(type), obj->attr->group.depth);
   default:
     *string = '\0';
     return 0;
   }
 }
 
+int
+hwloc_obj_attr_snprintf(char * __hwloc_restrict string, size_t size, hwloc_obj_t obj, const char * separator, int verbose)
+{
+  char memory[64] = "";
+  char specific[64] = "";
+  const char *specificseparator;
+
+  if (verbose) {
+    if (obj->memory.local_memory)
+      hwloc_snprintf(memory, sizeof(memory), "local=%lu%s%stotal=%lu%s",
+		     (unsigned long) hwloc_memory_size_printf_value(obj->memory.total_memory, verbose),
+		     hwloc_memory_size_printf_unit(obj->memory.total_memory, verbose),
+		     separator,
+		     (unsigned long) hwloc_memory_size_printf_value(obj->memory.local_memory, verbose),
+		     hwloc_memory_size_printf_unit(obj->memory.local_memory, verbose));
+    else if (obj->memory.total_memory)
+      hwloc_snprintf(memory, sizeof(memory), "total=%lu%s",
+		     (unsigned long) hwloc_memory_size_printf_value(obj->memory.total_memory, verbose),
+		     hwloc_memory_size_printf_unit(obj->memory.total_memory, verbose));
+  } else {
+    if (obj->memory.total_memory)
+      hwloc_snprintf(memory, sizeof(memory), "%lu%s",
+		     (unsigned long) hwloc_memory_size_printf_value(obj->memory.total_memory, verbose),
+		     hwloc_memory_size_printf_unit(obj->memory.total_memory, verbose));
+  }
+
+  switch (obj->type) {
+  case HWLOC_OBJ_MACHINE:
+    if (verbose)
+      hwloc_snprintf(specific, sizeof(specific), "%s%s%s",
+		     obj->attr->machine.dmi_board_vendor ? obj->attr->machine.dmi_board_vendor : "",
+		     obj->attr->machine.dmi_board_vendor && obj->attr->machine.dmi_board_name ? separator : "",
+		     obj->attr->machine.dmi_board_name ? obj->attr->machine.dmi_board_name : "");
+    break;
+  case HWLOC_OBJ_CACHE:
+    hwloc_snprintf(specific, sizeof(specific), "%lu%s",
+		   (unsigned long) hwloc_memory_size_printf_value(obj->attr->cache.size, verbose),
+		   hwloc_memory_size_printf_unit(obj->attr->cache.size, verbose));
+    break;
+  default:
+    break;
+  }
+
+  /* does the type-specific attribute string need separator prefix ? */
+  specificseparator = *memory && *specific ? separator : "";
+
+  return hwloc_snprintf(string, size, "%s%s%s",
+			memory,
+			specificseparator, specific);
+}
+
+
+int
+hwloc_obj_snprintf(char *string, size_t size,
+    struct hwloc_topology *topology __hwloc_attribute_unused, struct hwloc_obj *l, const char *_indexprefix, int verbose)
+{
+  const char *indexprefix = _indexprefix ? _indexprefix : "#";
+  char os_index[12] = "";
+  char type[64];
+  char attr[128];
+  int attrlen;
+
+  if (l->os_index != (unsigned) -1) {
+    hwloc_snprintf(os_index, 12, "%s%u", indexprefix, l->os_index);
+  }
+
+  hwloc_obj_type_snprintf(type, sizeof(type), l, verbose);
+  attrlen = hwloc_obj_attr_snprintf(attr, sizeof(attr), l, " ", verbose);
+
+  if (attrlen)
+    return hwloc_snprintf(string, size, "%s%s(%s)", type, os_index, attr);
+  else
+    return hwloc_snprintf(string, size, "%s%s", type, os_index);
+}
+
 int hwloc_obj_cpuset_snprintf(char *str, size_t size, size_t nobj, struct hwloc_obj * const *objs)
 {
   hwloc_cpuset_t set = hwloc_cpuset_alloc();
   int res;
-  int i;
+  unsigned i;
 
   hwloc_cpuset_zero(set);
   for(i=0; i<nobj; i++)
-    hwloc_cpuset_orset(set, objs[i]->cpuset);
+    hwloc_cpuset_or(set, set, objs[i]->cpuset);
 
   res = hwloc_cpuset_snprintf(str, size, set);
-  free(set);
+  hwloc_cpuset_free(set);
   return res;
 }

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/Makefile.am
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/Makefile.am	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/Makefile.am	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,10 +1,15 @@
 # Copyright 2009 INRIA, Université Bordeaux 1
-# Copyright 2009 Cisco Systems, Inc.  All rights reserved.
+# Copyright © 2009-2010 Cisco Systems, Inc.  All rights reserved.
 
-include $(top_srcdir)/hwloc.am
+AM_CFLAGS = $(HWLOC_CFLAGS)
+AM_CPPFLAGS = $(HWLOC_CPPFLAGS)
+AM_LDFLAGS = $(HWLOC_LDFLAGS)
 
-SUBDIRS = linux ports
+SUBDIRS = linux ports xml
 
+LIBS =
+
+if HWLOC_BUILD_TESTS
 check_PROGRAMS = hwloc_cpuset_string \
 	hwloc_get_closest_objs \
 	hwloc_get_obj_covering_cpuset \
@@ -13,45 +18,44 @@
 	hwloc_get_next_obj_covering_cpuset \
 	hwloc_get_obj_inside_cpuset \
 	hwloc_get_shared_cache_covering_obj \
+	hwloc_get_obj_below_array_by_type \
 	hwloc_cpuset_first_last_weight \
 	hwloc_cpuset_singlify \
 	hwloc_type_depth \
 	hwloc_bind \
 	hwloc_object_userdata \
 	hwloc_synthetic \
-	hwloc_is_thissystem
+	hwloc_is_thissystem \
+	hwloc_insert_misc
 
-EXTRA_DIST = 
-
-if HAVE_LINUX_LIBNUMA
+if HWLOC_HAVE_LINUX_LIBNUMA
 check_PROGRAMS += linux-libnuma
-else !HAVE_LINUX_LIBNUMA
-EXTRA_DIST += linux-libnuma.c
-endif !HAVE_LINUX_LIBNUMA
+endif HWLOC_HAVE_LINUX_LIBNUMA
 
-if HAVE_SCHED_SETAFFINITY
+if HWLOC_HAVE_SCHED_SETAFFINITY
 check_PROGRAMS += glibc-sched
-else !HAVE_SCHED_SETAFFINITY
-EXTRA_DIST += glibc-sched.c
-endif !HAVE_SCHED_SETAFFINITY
+endif HWLOC_HAVE_SCHED_SETAFFINITY
 
-if HAVE_LIBIBVERBS
+if HWLOC_HAVE_LIBIBVERBS
 check_PROGRAMS += openfabrics-verbs
-else !HAVE_LIBIBVERBS
-EXTRA_DIST += openfabrics-verbs.c
-endif !HAVE_LIBIBVERBS
+endif HWLOC_HAVE_LIBIBVERBS
 
 TESTS = $(check_PROGRAMS)
 
-if HAVE_XML
-TESTS += lstopo_xml.sh
+# The library has a different name depending on whether we are
+# building in standalone or embedded mode.
+if HWLOC_BUILD_STANDALONE
+hwloc_lib = libhwloc.la
+else
+hwloc_lib = libhwloc_embedded.la
 endif
 
-LIBS = $(top_builddir)/src/libhwloc.la
+LIBS += $(HWLOC_top_builddir)/src/$(hwloc_lib)
 
 linux_libnuma_LDFLAGS = -lnuma
 openfabrics_verbs_LDFLAGS = -libverbs
-if HAVE_WINDOWS
-else
+if !HWLOC_HAVE_WINDOWS
 hwloc_bind_LDFLAGS = -lpthread
-endif
+endif !HWLOC_HAVE_WINDOWS
+
+endif HWLOC_BUILD_TESTS

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/Makefile.am
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/Makefile.am	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/Makefile.am	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,20 @@
+# Copyright © 2009-2010 Cisco Systems, Inc.  All rights reserved.
+
+ACLOCAL_AMFLAGS = -I./config -I./hwloc-tree/config
+
+SUBDIRS = hwloc-tree
+
+AM_CPPFLAGS = $(HWLOC_EMBEDDED_CPPFLAGS)
+
+TESTS = main
+
+noinst_PROGRAMS = main
+noinst_LTLIBRARIES = libdo_test.la
+
+libdo_test_la_SOURCES = do_test.c
+
+main_SOURCES = main.c
+main_LDADD = $(HWLOC_EMBEDDED_LDADD) libdo_test.la
+main_DEPENDENCIES = libdo_test.la
+
+EXTRA_DIST = run-embedded-tests.sh

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/README.txt
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/README.txt	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/README.txt	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,24 @@
+This test is meant to be run manually; it is not part of "make check".
+
+Someday I may figure out how to make this part of "make check", but
+today is not that day.  :-)
+
+You need to expand a distribution hwloc tarball in this directory and
+rename the top-level directory from hwloc-<version>/ to hwloc-tree/.
+Then run ./autogen.sh, ./configure, and make.  
+
+The test is that:
+
+ - autogen.sh runs properly and to completion
+ - configure runs properly and to completion
+ - make runs properly and to completion
+ - you can run the resulting "./main" executable and it properly shows
+   the hwloc depth of the current machine
+
+If you look at configure.ac, you see that it uses the HWLOC m4 macros
+to build the hwloc located at hwloc-tree/, and renames all the symbols
+from "hwloc_<foo>" to "mytest_<foo>".  The main.c source calls several
+hwloc functions via the "mytest_<foo>" symbols.  
+
+Bottom line: if the "main" executable runs and prints the current
+depth, the embedding should be working properly.

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/autogen.sh
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/autogen.sh	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/autogen.sh	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,2 @@
+:
+autoreconf -ivf


Property changes on: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/autogen.sh
___________________________________________________________________
Added: svn:executable
   + *

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/configure.ac
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/configure.ac	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/configure.ac	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,34 @@
+# Copyright © 2009-2010 Cisco Systems, Inc.  All rights reserved.
+
+AC_INIT([hwloc-embedded-test], [1.0], [http://www.open-mpi.org/community/help], [hwloc-embedded-test])
+AC_PREREQ([2.63])
+AC_CONFIG_AUX_DIR([./config])
+AC_CONFIG_MACRO_DIR([./config])
+AC_CANONICAL_TARGET
+AM_INIT_AUTOMAKE([1.10 dist-bzip2 foreign subdir-objects tar-ustar -Wall -Werror])
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+AC_PROG_CC
+
+cat <<EOF
+
+=== Configuring hwloc (embedded mode)
+EOF
+
+HWLOC_SET_SYMBOL_PREFIX([mytest_])
+HWLOC_SETUP_CORE([hwloc-tree], [hwloc_setup=happy], [hwloc_setup=unhappy])
+AS_IF([test "$hwloc_setup" = "unhappy"],
+      [AC_MSG_ERROR([Cannot continue])])
+HWLOC_DO_AM_CONDITIONALS
+
+cat <<EOF
+=== Done configuring hwloc (embedded mode)
+
+EOF
+
+AM_ENABLE_SHARED
+AM_DISABLE_STATIC
+AM_PROG_LIBTOOL
+
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/do_test.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/do_test.c	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/do_test.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,33 @@
+#include <hwloc.h>
+#include <stdio.h>
+
+/* The body of the test is in a separate .c file and a separate
+   library, just to ensure that hwloc didn't force compilation with
+   visibility flags enabled. */
+
+int do_test(void)
+{
+    mytest_hwloc_topology_t topology;
+    unsigned depth;
+    hwloc_cpuset_t cpu_set;
+
+    /* Just call a bunch of functions to see if we can link and run */
+
+    printf("*** Test 1: cpuset alloc\n");
+    cpu_set = mytest_hwloc_cpuset_alloc();
+    if (NULL == cpu_set) return 1;
+    printf("*** Test 2: topology init\n");
+    if (0 != mytest_hwloc_topology_init(&topology)) return 1;
+    printf("*** Test 3: topology load\n");
+    if (0 != mytest_hwloc_topology_load(topology)) return 1;
+    printf("*** Test 4: topology get depth\n");
+    depth = mytest_hwloc_topology_get_depth(topology);
+    if (depth < 0) return 1;
+    printf("    Max depth: %u\n", depth);
+    printf("*** Test 5: topology destroy\n");
+    mytest_hwloc_topology_destroy(topology);
+    printf("*** Test 6: cpuset free\n");
+    mytest_hwloc_cpuset_free(cpu_set);
+
+    return 0;
+}

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/main.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/main.c	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/main.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,19 @@
+/*
+ * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
+ * Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+#include <stdio.h>
+
+extern int do_test(void);
+
+
+int main(int argc, char *argv[])
+{
+    /* Make the test be in a separate library that will fail to link
+       properly if hwloc forces compilation with visibility
+       enabled. */
+    return do_test();
+}

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/run-embedded-tests.sh
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/run-embedded-tests.sh	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/run-embedded-tests.sh	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,128 @@
+#!/bin/bash -o pipefail
+#
+# Copyright © 2010 Cisco Systems, Inc.  All rights reserved.
+#
+# Simple script to help test embedding:
+#
+#     ./run-embedded-tests.sh <tarball_name>
+#
+
+tarball=$1
+if test "$tarball" = ""; then
+    echo "Usage: $0 <tarball_name>"
+    exit 1
+elif test ! -r $tarball; then
+    echo cannot read tarball: $tarball
+    exit 1
+fi
+
+#---------------------------------------------------------------------
+
+i=1
+last_print=
+print() {
+    last_print="=== $i: $*"
+    echo $last_print
+    i=`expr $i + 1`
+}
+
+#---------------------------------------------------------------------
+
+try() {
+    cmd=$*
+    eval $cmd
+    status=$?
+    if test "$status" != "0"; then
+        echo "Command failed (status $status): $cmd"
+        echo "Last print was: $last_print"
+        exit 1
+    fi
+}
+
+#---------------------------------------------------------------------
+
+do_build() {
+    print Running $1 configure...
+    try $2/configure 2>&1 | tee config.out
+    if test "$?" != 0; then exit $?; fi
+
+    print Running make
+    try make 2>&1 | tee make.out
+    if test "$?" != 0; then exit $?; fi
+
+    print Running make check
+    try make check 2>&1 | tee check.out
+    if test "$?" != 0; then exit $?; fi
+
+    print Running make clean
+    try make clean 2>&1 | tee clean.out
+    if test "$?" != 0; then exit $?; fi
+
+    print Running make distclean
+    try make distclean 2>&1 | tee distclean.out
+    if test "$?" != 0; then exit $?; fi
+}
+
+#---------------------------------------------------------------------
+
+# Get tarball name
+print Got tarball: $tarball
+
+# Get the version
+ver=`echo $tarball | sed -e 's/^.*hwloc-//' -e 's/.tar.*$//'`
+print Got version: $ver
+
+# Extract
+print Extracting tarball...
+rm -rf hwloc-$ver
+if test "`echo $tarball | grep .tar.bz2`" != ""; then
+    try tar jxf $tarball
+else
+    try tar zxf $tarball
+fi
+
+print Removing old tree...
+rm -rf hwloc-tree
+mv hwloc-$ver hwloc-tree
+
+# Autogen
+print Running autogen...
+try ./autogen.sh
+
+# Do it normally (non-VPATH)
+do_build non-VPATH .
+
+# Do a VPATH in the same tree that we just setup
+mkdir build
+cd build
+do_build VPATH ..
+
+cd ..
+rm -rf build
+
+# Now whack the tree and do a clean VPATH
+print Re-extracting tarball...
+rm -rf hwloc-$ver
+if test "`echo $tarball | grep .tar.bz2`" != ""; then
+    try tar jxf $tarball
+else
+    try tar zxf $tarball
+fi
+
+print Removing old tree...
+rm -rf hwloc-tree
+mv hwloc-$ver hwloc-tree
+
+# Autogen
+print Running autogen...
+try ./autogen.sh
+
+# Run it again on a clean VPATH
+mkdir build
+cd build
+do_build VPATH-clean ..
+
+cd ..
+rm -rf build
+
+print All tests passed!


Property changes on: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/embedded/run-embedded-tests.sh
___________________________________________________________________
Added: svn:executable
   + *

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/glibc-sched.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/glibc-sched.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/glibc-sched.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,11 +1,13 @@
 /*
  * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
+ * Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
  * See COPYING in top-level directory.
  */
 
 #define _GNU_SOURCE
 #include <sched.h>
 #include <assert.h>
+#include <private/config.h>
 #include <hwloc.h>
 #include <hwloc/glibc-sched.h>
 
@@ -24,9 +26,9 @@
   hwloc_topology_load(topology);
   depth = hwloc_topology_get_depth(topology);
 
-  hwlocset = hwloc_cpuset_dup(hwloc_get_system_obj(topology)->cpuset);
+  hwlocset = hwloc_cpuset_dup(hwloc_topology_get_complete_cpuset(topology));
   hwloc_cpuset_to_glibc_sched_affinity(topology, hwlocset, &schedset, sizeof(schedset));
-#ifdef HAVE_OLD_SCHED_SETAFFINITY
+#ifdef HWLOC_HAVE_OLD_SCHED_SETAFFINITY
   err = sched_setaffinity(0, sizeof(schedset));
 #else
   err = sched_setaffinity(0, sizeof(schedset), &schedset);
@@ -34,23 +36,27 @@
   assert(!err);
   hwloc_cpuset_free(hwlocset);
 
-#ifdef HAVE_OLD_SCHED_SETAFFINITY
+#ifdef HWLOC_HAVE_OLD_SCHED_SETAFFINITY
   err = sched_getaffinity(0, sizeof(schedset));
 #else
   err = sched_getaffinity(0, sizeof(schedset), &schedset);
 #endif
   assert(!err);
-  hwlocset = hwloc_cpuset_from_glibc_sched_affinity(topology, &schedset, sizeof(schedset));
-  assert(hwloc_cpuset_isequal(hwlocset, hwloc_get_system_obj(topology)->cpuset));
+  hwlocset = hwloc_cpuset_alloc();
+  hwloc_cpuset_from_glibc_sched_affinity(topology, hwlocset, &schedset, sizeof(schedset));
+  assert(hwloc_cpuset_isincluded(hwlocset, hwloc_topology_get_complete_cpuset(topology)));
+  hwloc_cpuset_andnot(hwlocset, hwlocset, hwloc_topology_get_online_cpuset(topology));
+  hwloc_cpuset_andnot(hwlocset, hwlocset, hwloc_topology_get_allowed_cpuset(topology));
+  assert(hwloc_cpuset_iszero(hwlocset));
   hwloc_cpuset_free(hwlocset);
 
   obj = hwloc_get_obj_by_depth(topology, depth-1, hwloc_get_nbobjs_by_depth(topology, depth-1) - 1);
   assert(obj);
-  assert(obj->type == HWLOC_OBJ_PROC);
+  assert(obj->type == HWLOC_OBJ_PU);
 
   hwlocset = hwloc_cpuset_dup(obj->cpuset);
   hwloc_cpuset_to_glibc_sched_affinity(topology, hwlocset, &schedset, sizeof(schedset));
-#ifdef HAVE_OLD_SCHED_SETAFFINITY
+#ifdef HWLOC_HAVE_OLD_SCHED_SETAFFINITY
   err = sched_setaffinity(0, sizeof(schedset));
 #else
   err = sched_setaffinity(0, sizeof(schedset), &schedset);
@@ -58,13 +64,14 @@
   assert(!err);
   hwloc_cpuset_free(hwlocset);
 
-#ifdef HAVE_OLD_SCHED_SETAFFINITY
+#ifdef HWLOC_HAVE_OLD_SCHED_SETAFFINITY
   err = sched_getaffinity(0, sizeof(schedset));
 #else
   err = sched_getaffinity(0, sizeof(schedset), &schedset);
 #endif
   assert(!err);
-  hwlocset = hwloc_cpuset_from_glibc_sched_affinity(topology, &schedset, sizeof(schedset));
+  hwlocset = hwloc_cpuset_alloc();
+  hwloc_cpuset_from_glibc_sched_affinity(topology, hwlocset, &schedset, sizeof(schedset));
   assert(hwloc_cpuset_isequal(hwlocset, obj->cpuset));
   hwloc_cpuset_free(hwlocset);
 

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_bind.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_bind.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_bind.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -7,36 +7,65 @@
 #include <string.h>
 #include <errno.h>
 
+#include <private/config.h>
 #include <hwloc.h>
 #include <private/config.h>
 
 /* check the binding functions */
 hwloc_topology_t topology;
+const struct hwloc_topology_support *support;
 
-static void result(const char *msg, int err)
+static void result_set(const char *msg, int err, int supported)
 {
+  const char *errmsg = strerror(errno);
   if (err)
-    printf("%-30s: FAILED (%d, %s)\n", msg, errno, strerror(errno));
+    printf("%-40s: FAILED (%d, %s)%s\n", msg, errno, errmsg, supported ? "" : " (expected)");
   else
-    printf("%-30s: OK\n", msg);
+    printf("%-40s: OK%s\n", msg, supported ? "" : " (unexpected)");
 }
 
-static void test(hwloc_cpuset_t cpuset, int flags)
+static void result_get(const char *msg, hwloc_const_cpuset_t expected, hwloc_const_cpuset_t result, int err, int supported)
 {
-  result("Bind singlethreaded process", hwloc_set_cpubind(topology, cpuset, flags));
-  result("Bind this thread", hwloc_set_cpubind(topology, cpuset, flags | HWLOC_CPUBIND_THREAD));
-  result("Bind this whole process", hwloc_set_cpubind(topology, cpuset, flags | HWLOC_CPUBIND_PROCESS));
+  const char *errmsg = strerror(errno);
+  if (err)
+    printf("%-40s: FAILED (%d, %s)%s\n", msg, errno, errmsg, supported ? "" : " (expected)");
+  else if (hwloc_cpuset_isequal(expected, result))
+    printf("%-40s: OK%s\n", msg, supported ? "" : " (unexpected)");
+  else {
+    char *expected_s, *result_s;
+    hwloc_cpuset_asprintf(&expected_s, expected);
+    hwloc_cpuset_asprintf(&result_s, result);
+    printf("%-40s: expected %s, got %s\n", msg, expected_s, result_s);
+  }
+}
 
-#ifdef WIN_SYS
-  result("Bind process", hwloc_set_proc_cpubind(topology, GetCurrentProcess(), cpuset, flags | HWLOC_CPUBIND_PROCESS));
-  result("Bind thread", hwloc_set_thread_cpubind(topology, GetCurrentThread(), cpuset, flags | HWLOC_CPUBIND_THREAD));
-#else /* !WIN_SYS */
-  result("Bind process", hwloc_set_proc_cpubind(topology, getpid(), cpuset, flags | HWLOC_CPUBIND_PROCESS));
+static void test(hwloc_const_cpuset_t cpuset, int flags)
+{
+  hwloc_cpuset_t new_cpuset = hwloc_cpuset_alloc();
+  result_set("Bind this singlethreaded process", hwloc_set_cpubind(topology, cpuset, flags), support->cpubind->set_thisproc_cpubind || support->cpubind->set_thisthread_cpubind);
+  result_get("Get  this singlethreaded process", cpuset, new_cpuset, hwloc_get_cpubind(topology, new_cpuset, flags), support->cpubind->get_thisproc_cpubind || support->cpubind->get_thisthread_cpubind);
+  result_set("Bind this thread", hwloc_set_cpubind(topology, cpuset, flags | HWLOC_CPUBIND_THREAD), support->cpubind->set_thisthread_cpubind);
+  result_get("Get  this thread", cpuset, new_cpuset, hwloc_get_cpubind(topology, new_cpuset, flags | HWLOC_CPUBIND_THREAD), support->cpubind->get_thisthread_cpubind);
+  result_set("Bind this whole process", hwloc_set_cpubind(topology, cpuset, flags | HWLOC_CPUBIND_PROCESS), support->cpubind->set_thisproc_cpubind);
+  result_get("Get  this whole process", cpuset, new_cpuset, hwloc_get_cpubind(topology, new_cpuset, flags | HWLOC_CPUBIND_PROCESS), support->cpubind->get_thisproc_cpubind);
+
+#ifdef HWLOC_WIN_SYS
+  result_set("Bind process", hwloc_set_proc_cpubind(topology, GetCurrentProcess(), cpuset, flags | HWLOC_CPUBIND_PROCESS), support->cpubind->set_proc_cpubind);
+  result_get("Get  process", cpuset, new_cpuset, hwloc_get_proc_cpubind(topology, GetCurrentProcess(), new_cpuset, flags | HWLOC_CPUBIND_PROCESS), support->cpubind->get_proc_cpubind);
+  result_set("Bind thread", hwloc_set_thread_cpubind(topology, GetCurrentThread(), cpuset, flags | HWLOC_CPUBIND_THREAD), support->cpubind->set_thread_cpubind);
+  result_get("Get  thread", cpuset, new_cpuset, hwloc_get_thread_cpubind(topology, GetCurrentThread(), new_cpuset, flags | HWLOC_CPUBIND_THREAD), support->cpubind->get_thread_cpubind);
+#else /* !HWLOC_WIN_SYS */
+  result_set("Bind whole process", hwloc_set_proc_cpubind(topology, getpid(), cpuset, flags | HWLOC_CPUBIND_PROCESS), support->cpubind->set_proc_cpubind);
+  result_get("Get  whole process", cpuset, new_cpuset, hwloc_get_proc_cpubind(topology, getpid(), new_cpuset, flags | HWLOC_CPUBIND_PROCESS), support->cpubind->get_proc_cpubind);
+  result_set("Bind process", hwloc_set_proc_cpubind(topology, getpid(), cpuset, flags), support->cpubind->set_proc_cpubind);
+  result_get("Get  process", cpuset, new_cpuset, hwloc_get_proc_cpubind(topology, getpid(), new_cpuset, flags), support->cpubind->get_proc_cpubind);
 #ifdef hwloc_thread_t
-  result("Bind thread", hwloc_set_thread_cpubind(topology, pthread_self(), cpuset, flags | HWLOC_CPUBIND_THREAD));
+  result_set("Bind thread", hwloc_set_thread_cpubind(topology, pthread_self(), cpuset, flags), support->cpubind->set_thread_cpubind);
+  result_get("Get  thread", cpuset, new_cpuset, hwloc_get_thread_cpubind(topology, pthread_self(), new_cpuset, flags), support->cpubind->get_thread_cpubind);
 #endif
-#endif /* !WIN_SYS */
+#endif /* !HWLOC_WIN_SYS */
   printf("\n");
+  hwloc_cpuset_free(new_cpuset);
 }
 
 int main(void)
@@ -48,7 +77,9 @@
   hwloc_topology_init(&topology);
   hwloc_topology_load(topology);
 
-  obj = hwloc_get_system_obj(topology);
+  support = hwloc_topology_get_support(topology);
+
+  obj = hwloc_get_root_obj(topology);
   set = hwloc_cpuset_dup(obj->cpuset);
 
   while (hwloc_cpuset_isequal(obj->cpuset, set)) {

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_cpuset_first_last_weight.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_cpuset_first_last_weight.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_cpuset_first_last_weight.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -3,26 +3,41 @@
  * See COPYING in top-level directory.
  */
 
+#include <private/config.h>
 #include <hwloc.h>
 
 #include <assert.h>
 
-/* check hwloc_cpuset_first(), _last() and _weight() */
+/* check hwloc_cpuset_first(), _last(), _next() and _weight() */
 
-int main()
+int main(void)
 {
   hwloc_cpuset_t set;
+  int i, cpu, expected_cpu;
 
   /* empty set */
   set = hwloc_cpuset_alloc();
   assert(hwloc_cpuset_first(set) == -1);
   assert(hwloc_cpuset_last(set) == -1);
+  assert(hwloc_cpuset_next(set, 0) == -1);
   assert(hwloc_cpuset_weight(set) == 0);
 
   /* full set */
   hwloc_cpuset_fill(set);
   assert(hwloc_cpuset_first(set) == 0);
   assert(hwloc_cpuset_last(set) == HWLOC_NBMAXCPUS-1);
+  assert(hwloc_cpuset_next(set, 0) == 1);
+  assert(hwloc_cpuset_next(set, 1) == 2);
+  assert(hwloc_cpuset_next(set, 2) == 3);
+  assert(hwloc_cpuset_next(set, 30) == 31);
+  assert(hwloc_cpuset_next(set, 31) == 32);
+  assert(hwloc_cpuset_next(set, 32) == 33);
+  assert(hwloc_cpuset_next(set, 62) == 63);
+  assert(hwloc_cpuset_next(set, 63) == 64);
+  assert(hwloc_cpuset_next(set, 64) == 65);
+  assert(hwloc_cpuset_next(set, HWLOC_NBMAXCPUS-3) == HWLOC_NBMAXCPUS-2);
+  assert(hwloc_cpuset_next(set, HWLOC_NBMAXCPUS-2) == HWLOC_NBMAXCPUS-1);
+  assert(hwloc_cpuset_next(set, HWLOC_NBMAXCPUS-1) == -1);
   assert(hwloc_cpuset_weight(set) == HWLOC_NBMAXCPUS);
 
   /* custom sets */
@@ -30,16 +45,37 @@
   hwloc_cpuset_set_range(set, 36, 59);
   assert(hwloc_cpuset_first(set) == 36);
   assert(hwloc_cpuset_last(set) == 59);
+  assert(hwloc_cpuset_next(set, 0) == 36);
+  assert(hwloc_cpuset_next(set, 36) == 37);
+  assert(hwloc_cpuset_next(set, 59) == -1);
   assert(hwloc_cpuset_weight(set) == 24);
   hwloc_cpuset_set_range(set, 136, 259);
   assert(hwloc_cpuset_first(set) == 36);
   assert(hwloc_cpuset_last(set) == 259);
+  assert(hwloc_cpuset_next(set, 59) == 136);
+  assert(hwloc_cpuset_next(set, 259) == -1);
   assert(hwloc_cpuset_weight(set) == 148);
   hwloc_cpuset_clr(set, 199);
   assert(hwloc_cpuset_first(set) == 36);
   assert(hwloc_cpuset_last(set) == 259);
+  assert(hwloc_cpuset_next(set, 198) == 200);
+  assert(hwloc_cpuset_next(set, 199) == 200);
   assert(hwloc_cpuset_weight(set) == 147);
 
+  i = 0;
+  hwloc_cpuset_foreach_begin(cpu, set) {
+    if (0 <= i && i < 24)
+      expected_cpu = i + 36;
+    else if (24 <= i && i < 87)
+      expected_cpu = i + 112;
+    else if (87 <= i && i < 147)
+      expected_cpu = i + 113;
+
+    assert(expected_cpu == cpu);
+
+    i++;
+  } hwloc_cpuset_foreach_end();
+
   hwloc_cpuset_free(set);
 
   return 0;

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_cpuset_singlify.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_cpuset_singlify.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_cpuset_singlify.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,8 +1,10 @@
 /*
  * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
+ * Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
  * See COPYING in top-level directory.
  */
 
+#include <private/config.h>
 #include <hwloc.h>
 
 #include <stdlib.h>
@@ -12,7 +14,7 @@
 
 /* check hwloc_cpuset_singlify() */
 
-int main()
+int main(void)
 {
   hwloc_cpuset_t orig, expected;
 
@@ -28,7 +30,7 @@
   hwloc_cpuset_singlify(orig);
   hwloc_cpuset_zero(expected);
   hwloc_cpuset_set(expected, 0);
-  assert(!hwloc_cpuset_compar(orig, expected));
+  assert(!hwloc_cpuset_compare(orig, expected));
 
   /* actual non-trivial set */
   hwloc_cpuset_zero(orig);
@@ -38,7 +40,7 @@
   hwloc_cpuset_singlify(orig);
   hwloc_cpuset_zero(expected);
   hwloc_cpuset_set(expected, 45);
-  assert(!hwloc_cpuset_compar(orig, expected));
+  assert(!hwloc_cpuset_compare(orig, expected));
 
   hwloc_cpuset_free(orig);
   hwloc_cpuset_free(expected);

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_cpuset_string.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_cpuset_string.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_cpuset_string.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -3,6 +3,7 @@
  * See COPYING in top-level directory.
  */
 
+#include <private/config.h>
 #include <hwloc.h>
 
 #include <stdlib.h>
@@ -12,7 +13,7 @@
 
 /* check hwloc_cpuset_asprintf(), hwloc_obj_cpuset_snprintf() and hwloc_cpuset_from_string() */
 
-int main()
+int main(void)
 {
   hwloc_topology_t topology;
   unsigned depth;
@@ -26,12 +27,13 @@
   hwloc_topology_load(topology);
   depth = hwloc_topology_get_depth(topology);
 
-  obj = hwloc_get_system_obj(topology);
+  obj = hwloc_get_root_obj(topology);
   stringlen = hwloc_cpuset_asprintf(&string, obj->cpuset);
   printf("system cpuset is %s\n", string);
-  set = hwloc_cpuset_from_string(string);
+  set = hwloc_cpuset_alloc();
+  hwloc_cpuset_from_string(set, string);
   assert(hwloc_cpuset_isequal(set, obj->cpuset));
-  free(set);
+  hwloc_cpuset_free(set);
   printf("system cpuset converted back and forth, ok\n");
 
   printf("truncating system cpuset to NULL buffer\n");
@@ -54,64 +56,66 @@
   assert(string[0] == 0);
   assert(string[1] == 'X');
 
-  printf("truncating system cpuset to 8 chars (single 32bit subset except last char)\n");
-  memset(string, 'X', 9);
-  string[9] = 0;
-  len = hwloc_obj_cpuset_snprintf(string, 8, 1, &obj);
+  printf("truncating system cpuset to 10 chars (single 32bit subset except last char)\n");
+  memset(string, 'X', 11);
+  string[11] = 0;
+  len = hwloc_obj_cpuset_snprintf(string, 10, 1, &obj);
   printf("got %s\n", string);
   assert(len == stringlen);
-  assert(string[6] == 'f');
-  assert(string[7] == 0);
-  assert(string[8] == 'X');
+  assert(string[8] == 'f');
+  assert(string[9] == 0);
+  assert(string[10] == 'X');
 
-  printf("truncating system cpuset to 9 chars (single 32bit subset)\n");
-  memset(string, 'X', 10);
-  string[10] = 0;
-  len = hwloc_obj_cpuset_snprintf(string, 9, 1, &obj);
+  printf("truncating system cpuset to 11 chars (single 32bit subset)\n");
+  memset(string, 'X', 12);
+  string[12] = 0;
+  len = hwloc_obj_cpuset_snprintf(string, 11, 1, &obj);
   printf("got %s\n", string);
   assert(len == stringlen);
-  assert(string[7] == 'f');
-  assert(string[8] == 0);
-  assert(string[9] == 'X');
+  assert(string[9] == 'f');
+  assert(string[10] == 0);
+  assert(string[11] == 'X');
 
-  printf("truncating system cpuset to 19 chars (two 32bit subsets with ending comma)\n");
-  memset(string, 'X', 20);
-  string[20] = 0;
-  len = hwloc_obj_cpuset_snprintf(string, 19, 1, &obj);
+  printf("truncating system cpuset to 23 chars (two 32bit subsets with ending comma)\n");
+  memset(string, 'X', 24);
+  string[24] = 0;
+  len = hwloc_obj_cpuset_snprintf(string, 23, 1, &obj);
   printf("got %s\n", string);
   assert(len == stringlen);
-  assert(string[16] == 'f');
-  assert(string[17] == ',');
-  assert(string[18] == 0);
-  assert(string[19] == 'X');
+  assert(string[20] == 'f');
+  assert(string[21] == ',');
+  assert(string[22] == 0);
+  assert(string[23] == 'X');
 
-  printf("truncating system cpuset to 41 chars (truncate to four and a half 32bit subsets)\n");
-  memset(string, 'X', 42);
-  string[42] = 0;
-  len = hwloc_obj_cpuset_snprintf(string, 41, 1, &obj);
+  printf("truncating system cpuset to 51 chars (truncate to four and a half 32bit subsets)\n");
+  memset(string, 'X', 52);
+  string[52] = 0;
+  len = hwloc_obj_cpuset_snprintf(string, 51, 1, &obj);
   printf("got %s\n", string);
   assert(len == stringlen);
-  assert(string[39] == 'f');
-  assert(string[40] == 0);
-  assert(string[41] == 'X');
+  assert(string[49] == 'f');
+  assert(string[50] == 0);
+  assert(string[51] == 'X');
 
   obj = hwloc_get_obj_by_depth(topology, depth-1, 0);
   hwloc_obj_cpuset_snprintf(string, stringlen+1, 1, &obj);
   printf("first cpu cpuset is %s\n", string);
-  set = hwloc_cpuset_from_string(string);
+  set = hwloc_cpuset_alloc();
+  hwloc_cpuset_from_string(set, string);
   assert(hwloc_cpuset_isequal(set, obj->cpuset));
-  free(set);
+  hwloc_cpuset_free(set);
   printf("first cpu cpuset converted back and forth, ok\n");
 
   obj = hwloc_get_obj_by_depth(topology, depth-1, hwloc_get_nbobjs_by_depth(topology, depth-1) - 1);
   hwloc_obj_cpuset_snprintf(string, stringlen+1, 1, &obj);
   printf("last cpu cpuset is %s\n", string);
-  set = hwloc_cpuset_from_string(string);
+  set = hwloc_cpuset_alloc();
+  hwloc_cpuset_from_string(set, string);
   assert(hwloc_cpuset_isequal(set, obj->cpuset));
-  free(set);
+  hwloc_cpuset_free(set);
   printf("last cpu cpuset converted back and forth, ok\n");
 
-//  hwloc_cpuset_from_string("1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,4,8,10,20\n", &set);
+//  hwloc_cpuset_from_string(set, "1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,4,8,10,20\n");
 //  char *s = hwloc_cpuset_printf_value(&set);
 //  printf("%s\n", s);
 //  free(s);

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_cache_covering_cpuset.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_cache_covering_cpuset.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_cache_covering_cpuset.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -3,6 +3,7 @@
  * See COPYING in top-level directory.
  */
 
+#include <private/config.h>
 #include <hwloc.h>
 
 #include <stdlib.h>
@@ -14,7 +15,7 @@
 
 #define SYNTHETIC_TOPOLOGY_DESCRIPTION "6 5 4 3 2" /* 736bits wide topology */
 
-int main()
+int main(void)
 {
   hwloc_topology_t topology;
   hwloc_obj_t obj, cache;
@@ -29,13 +30,13 @@
   set = hwloc_cpuset_alloc();
   obj = hwloc_get_obj_by_depth(topology, 5, CPUINDEX);
   assert(obj);
-  hwloc_cpuset_orset(set, obj->cpuset);
+  hwloc_cpuset_or(set, set, obj->cpuset);
   cache = hwloc_get_cache_covering_cpuset(topology, set);
   assert(cache);
   assert(cache->type == HWLOC_OBJ_CACHE);
   assert(cache->logical_index == CPUINDEX/2/3);
   assert(hwloc_obj_is_in_subtree(topology, obj, cache));
-  free(set);
+  hwloc_cpuset_free(set);
 
   /* check the cache above two nearby cpus */
 #define CPUINDEX1 180
@@ -43,17 +44,17 @@
   set = hwloc_cpuset_alloc();
   obj = hwloc_get_obj_by_depth(topology, 5, CPUINDEX1);
   assert(obj);
-  hwloc_cpuset_orset(set, obj->cpuset);
+  hwloc_cpuset_or(set, set, obj->cpuset);
   obj = hwloc_get_obj_by_depth(topology, 5, CPUINDEX2);
   assert(obj);
-  hwloc_cpuset_orset(set, obj->cpuset);
+  hwloc_cpuset_or(set, set, obj->cpuset);
   cache = hwloc_get_cache_covering_cpuset(topology, set);
   assert(cache);
   assert(cache->type == HWLOC_OBJ_CACHE);
   assert(cache->logical_index == CPUINDEX1/2/3);
   assert(cache->logical_index == CPUINDEX2/2/3);
   assert(hwloc_obj_is_in_subtree(topology, obj, cache));
-  free(set);
+  hwloc_cpuset_free(set);
 
   /* check no cache above two distant cpus */
 #undef CPUINDEX1
@@ -61,22 +62,22 @@
   set = hwloc_cpuset_alloc();
   obj = hwloc_get_obj_by_depth(topology, 5, CPUINDEX1);
   assert(obj);
-  hwloc_cpuset_orset(set, obj->cpuset);
+  hwloc_cpuset_or(set, set, obj->cpuset);
   obj = hwloc_get_obj_by_depth(topology, 5, CPUINDEX2);
   assert(obj);
-  hwloc_cpuset_orset(set, obj->cpuset);
+  hwloc_cpuset_or(set, set, obj->cpuset);
   cache = hwloc_get_cache_covering_cpuset(topology, set);
   assert(!cache);
-  free(set);
+  hwloc_cpuset_free(set);
 
   /* check no cache above higher level */
   set = hwloc_cpuset_alloc();
   obj = hwloc_get_obj_by_depth(topology, 2, 0);
   assert(obj);
-  hwloc_cpuset_orset(set, obj->cpuset);
+  hwloc_cpuset_or(set, set, obj->cpuset);
   cache = hwloc_get_cache_covering_cpuset(topology, set);
   assert(!cache);
-  free(set);
+  hwloc_cpuset_free(set);
 
   hwloc_topology_destroy(topology);
 

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_closest_objs.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_closest_objs.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_closest_objs.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -3,6 +3,7 @@
  * See COPYING in top-level directory.
  */
 
+#include <private/config.h>
 #include <hwloc.h>
 
 #include <stdlib.h>
@@ -20,15 +21,16 @@
  */
 
 int
-main (int argc, char *argv[])
+main (void)
 {
   hwloc_topology_t topology;
   unsigned depth;
   hwloc_obj_t last;
   hwloc_obj_t *closest;
-  int found;
+  unsigned found;
   int err;
   unsigned numprocs;
+  hwloc_obj_t ancestor;
 
   err = hwloc_topology_init (&topology);
   if (err)
@@ -52,7 +54,7 @@
 
   /* get closest levels */
   found = hwloc_get_closest_objs (topology, last, closest, numprocs);
-  printf("looked for %u closest entries, found %d\n", numprocs, found);
+  printf("looked for %u closest entries, found %u\n", numprocs, found);
   assert(found == numprocs-1);
 
   /* check first found is closest */
@@ -63,10 +65,10 @@
   assert(closest[found/2/3-1] == hwloc_get_obj_by_depth(topology, depth-1, 1*3*4*5+2*4*5+3*5-1 /* last of third quarter of third third of second half */));
 
   /* get ancestor of last and less close object */
-  hwloc_obj_t ancestor = hwloc_get_common_ancestor_obj(topology, last, closest[found-1]);
+  ancestor = hwloc_get_common_ancestor_obj(topology, last, closest[found-1]);
   assert(hwloc_obj_is_in_subtree(topology, last, ancestor));
   assert(hwloc_obj_is_in_subtree(topology, closest[found-1], ancestor));
-  assert(ancestor == hwloc_get_system_obj(topology));
+  assert(ancestor == hwloc_get_root_obj(topology));
   printf("ancestor type %u depth %u number %u is system level\n",
 	 ancestor->type, ancestor->depth, ancestor->logical_index);
 

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_largest_objs_inside_cpuset.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_largest_objs_inside_cpuset.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_largest_objs_inside_cpuset.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -3,6 +3,7 @@
  * See COPYING in top-level directory.
  */
 
+#include <private/config.h>
 #include <hwloc.h>
 
 #include <stdlib.h>
@@ -10,7 +11,9 @@
 #include <string.h>
 #include <assert.h>
 
-/* check hwloc_get_largest_objs_inside_cpuset() */
+/* check hwloc_get_largest_objs_inside_cpuset()
+ * and hwloc_get_first_largest_obj_inside_cpuset()
+ */
 
 #define SYNTHETIC_TOPOLOGY_DESCRIPTION "6 5 4 3 2" /* 736bits wide topology */
 
@@ -20,7 +23,7 @@
 
 #define OBJ_MAX 16
 
-int main()
+int main(void)
 {
   hwloc_topology_t topology;
   unsigned depth;
@@ -35,10 +38,12 @@
   depth = hwloc_topology_get_depth(topology);
 
   /* just get the system object */
-  obj = hwloc_get_system_obj(topology);
+  obj = hwloc_get_root_obj(topology);
   ret = hwloc_get_largest_objs_inside_cpuset(topology, obj->cpuset, objs, 1);
   assert(ret == 1);
   assert(objs[0] == obj);
+  objs[0] = hwloc_get_first_largest_obj_inside_cpuset(topology, obj->cpuset);
+  assert(objs[0] == obj);
 
   /* just get the very last object */
   obj = hwloc_get_obj_by_depth(topology, depth-1, hwloc_get_nbobjs_by_depth(topology, depth-1)-1);
@@ -50,28 +55,46 @@
   set = hwloc_cpuset_alloc();
   ret = hwloc_get_largest_objs_inside_cpuset(topology, set, objs, 1);
   assert(ret == 0);
-  free(set);
+  objs[0] = hwloc_get_first_largest_obj_inside_cpuset(topology, set);
+  assert(objs[0] == NULL);
+  hwloc_cpuset_free(set);
 
   /* try an impossible one */
-  set = hwloc_cpuset_from_string(GIVEN_TOOLARGE_CPUSET_STRING);
+  set = hwloc_cpuset_alloc();
+  hwloc_cpuset_from_string(set, GIVEN_TOOLARGE_CPUSET_STRING);
   ret = hwloc_get_largest_objs_inside_cpuset(topology, set, objs, 1);
   assert(ret == -1);
-  free(set);
+  objs[0] = hwloc_get_first_largest_obj_inside_cpuset(topology, set);
+  assert(objs[0] == NULL);
+  hwloc_cpuset_free(set);
 
   /* try a harder one with 1 obj instead of 2 needed */
-  set = hwloc_cpuset_from_string(GIVEN_LARGESPLIT_CPUSET_STRING);
+  set = hwloc_cpuset_alloc();
+  hwloc_cpuset_from_string(set, GIVEN_LARGESPLIT_CPUSET_STRING);
   ret = hwloc_get_largest_objs_inside_cpuset(topology, set, objs, 1);
   assert(ret == 1);
   assert(objs[0] == hwloc_get_obj_by_depth(topology, depth-1, 0));
+  objs[0] = hwloc_get_first_largest_obj_inside_cpuset(topology, set);
+  assert(objs[0] == hwloc_get_obj_by_depth(topology, depth-1, 0));
   /* try a harder one with lots of objs instead of 2 needed */
   ret = hwloc_get_largest_objs_inside_cpuset(topology, set, objs, 2);
   assert(ret == 2);
   assert(objs[0] == hwloc_get_obj_by_depth(topology, depth-1, 0));
   assert(objs[1] == hwloc_get_obj_by_depth(topology, depth-1, hwloc_get_nbobjs_by_depth(topology, depth-1)-1));
-  free(set);
+  objs[0] = hwloc_get_first_largest_obj_inside_cpuset(topology, set);
+  hwloc_cpuset_andnot(set, set, objs[0]->cpuset);
+  objs[1] = hwloc_get_first_largest_obj_inside_cpuset(topology, set);
+  hwloc_cpuset_andnot(set, set, objs[1]->cpuset);
+  objs[2] = hwloc_get_first_largest_obj_inside_cpuset(topology, set);
+  assert(objs[0] == hwloc_get_obj_by_depth(topology, depth-1, 0));
+  assert(objs[1] == hwloc_get_obj_by_depth(topology, depth-1, hwloc_get_nbobjs_by_depth(topology, depth-1)-1));
+  assert(objs[2] == NULL);
+  assert(hwloc_cpuset_iszero(set));
+  hwloc_cpuset_free(set);
 
   /* try a very hard one */
-  set = hwloc_cpuset_from_string(GIVEN_HARD_CPUSET_STRING);
+  set = hwloc_cpuset_alloc();
+  hwloc_cpuset_from_string(set, GIVEN_HARD_CPUSET_STRING);
   ret = hwloc_get_largest_objs_inside_cpuset(topology, set, objs, OBJ_MAX);
   assert(objs[0] == hwloc_get_obj_by_depth(topology, 5, 29));
   assert(objs[1] == hwloc_get_obj_by_depth(topology, 3, 5));
@@ -80,7 +103,7 @@
   assert(objs[4] == hwloc_get_obj_by_depth(topology, 2, 2));
   assert(objs[5] == hwloc_get_obj_by_depth(topology, 4, 36));
   assert(objs[6] == hwloc_get_obj_by_depth(topology, 5, 74));
-  free(set);
+  hwloc_cpuset_free(set);
 
   hwloc_topology_destroy(topology);
 

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_next_obj_covering_cpuset.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_next_obj_covering_cpuset.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_next_obj_covering_cpuset.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -3,6 +3,7 @@
  * See COPYING in top-level directory.
  */
 
+#include <private/config.h>
 #include <hwloc.h>
 
 #include <stdlib.h>
@@ -15,7 +16,7 @@
  */
 
 int
-main (int argc, char *argv[])
+main (void)
 {
   hwloc_topology_t topology;
   hwloc_cpuset_t set;
@@ -27,14 +28,16 @@
   if (err)
     return EXIT_FAILURE;
 
+  set = hwloc_cpuset_alloc();
 
 
+
   hwloc_topology_set_synthetic (topology, "nodes:8 cores:2 1");
   err = hwloc_topology_load (topology);
   if (err)
     return EXIT_FAILURE;
 
-  set = hwloc_cpuset_from_string("00008f18");
+  hwloc_cpuset_from_string(set, "00008f18");
 
   obj = hwloc_get_next_obj_covering_cpuset_by_type(topology, set, HWLOC_OBJ_NODE, NULL);
   assert(obj == hwloc_get_obj_by_depth(topology, 1, 1));
@@ -49,16 +52,14 @@
   obj = hwloc_get_next_obj_covering_cpuset_by_type(topology, set, HWLOC_OBJ_NODE, obj);
   assert(!obj);
 
-  free(set);
 
 
-
-  hwloc_topology_set_synthetic (topology, "ndoes:2 socket:5 cores:3 4");
+  hwloc_topology_set_synthetic (topology, "nodes:2 socket:5 cores:3 4");
   err = hwloc_topology_load (topology);
   if (err)
     return EXIT_FAILURE;
 
-  set = hwloc_cpuset_from_string("0ff08000");
+  hwloc_cpuset_from_string(set, "0ff08000");
 
   depth = hwloc_get_type_depth(topology, HWLOC_OBJ_SOCKET);
   assert(depth == 2);
@@ -69,9 +70,9 @@
   obj = hwloc_get_next_obj_covering_cpuset_by_depth(topology, set, depth, obj);
   assert(!obj);
 
-  free(set);
 
 
+  hwloc_cpuset_free(set);
 
   hwloc_topology_destroy (topology);
 

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_obj_below_array_by_type.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_obj_below_array_by_type.c	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_obj_below_array_by_type.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,79 @@
+/*
+ * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
+ * See COPYING in top-level directory.
+ */
+
+#include <private/config.h>
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+/*
+ * check hwloc_get_obj_below_array_by_type()
+ */
+
+int
+main (void)
+{
+  hwloc_topology_t topology;
+  hwloc_obj_t obj;
+  hwloc_obj_type_t typev[4];
+  unsigned idxv[4];
+  int err;
+
+  err = hwloc_topology_init (&topology);
+  if (err)
+    return EXIT_FAILURE;
+
+  hwloc_topology_set_synthetic (topology, "node:3 socket:3 core:3 proc:3");
+
+  err = hwloc_topology_load (topology);
+  if (err)
+    return EXIT_FAILURE;
+
+
+  /* find the first thread */
+  typev[0] = HWLOC_OBJ_NODE;   idxv[0] = 0;
+  typev[1] = HWLOC_OBJ_SOCKET; idxv[1] = 0;
+  typev[2] = HWLOC_OBJ_CORE;   idxv[2] = 0;
+  typev[3] = HWLOC_OBJ_PU;   idxv[3] = 0;
+  obj = hwloc_get_obj_below_array_by_type(topology, 4, typev, idxv);
+  assert(obj == hwloc_get_obj_by_depth(topology, 4, 0));
+
+  /* find the last core */
+  typev[0] = HWLOC_OBJ_NODE;   idxv[0] = 2;
+  typev[1] = HWLOC_OBJ_SOCKET; idxv[1] = 2;
+  typev[2] = HWLOC_OBJ_CORE;   idxv[2] = 2;
+  obj = hwloc_get_obj_below_array_by_type(topology, 3, typev, idxv);
+  assert(obj == hwloc_get_obj_by_depth(topology, 3, 26));
+
+  /* misc tests */
+
+  typev[0] = HWLOC_OBJ_SOCKET; idxv[0] = 2;
+  obj = hwloc_get_obj_below_array_by_type(topology, 1, typev, idxv);
+  assert(obj == hwloc_get_obj_by_depth(topology, 2, 2));
+
+  typev[0] = HWLOC_OBJ_NODE;   idxv[0] = 2;
+  typev[1] = HWLOC_OBJ_CORE;   idxv[1] = 2;
+  obj = hwloc_get_obj_below_array_by_type(topology, 2, typev, idxv);
+  assert(obj == hwloc_get_obj_by_depth(topology, 3, 20));
+  /* check that hwloc_get_obj_below_by_type works as well */
+  obj = hwloc_get_obj_below_by_type(topology, typev[0], idxv[0], typev[1], idxv[1]);
+  assert(obj == hwloc_get_obj_by_depth(topology, 3, 20));
+
+  typev[0] = HWLOC_OBJ_SOCKET; idxv[0] = 1;
+  typev[1] = HWLOC_OBJ_PU;   idxv[1] = 1;
+  obj = hwloc_get_obj_below_array_by_type(topology, 2, typev, idxv);
+  assert(obj == hwloc_get_obj_by_depth(topology, 4, 10));
+  /* check that hwloc_get_obj_below_by_type works as well */
+  obj = hwloc_get_obj_below_by_type(topology, typev[0], idxv[0], typev[1], idxv[1]);
+  assert(obj == hwloc_get_obj_by_depth(topology, 4, 10));
+
+
+  hwloc_topology_destroy (topology);
+
+  return EXIT_SUCCESS;
+}

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_obj_covering_cpuset.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_obj_covering_cpuset.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_obj_covering_cpuset.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -3,6 +3,7 @@
  * See COPYING in top-level directory.
  */
 
+#include <private/config.h>
 #include <hwloc.h>
 
 #include <stdlib.h>
@@ -14,12 +15,12 @@
 
 #define SYNTHETIC_TOPOLOGY_DESCRIPTION "6 5 4 3 2" /* 736bits wide topology */
 
-#define GIVEN_CPUSET_STRING "0,0fff,f0000000"
-#define EXPECTED_CPUSET_STRING "0000ffff,ff000000"
-#define GIVEN_LARGESPLIT_CPUSET_STRING "8000,,,,,,,,,,,,,,,,,,,,,,1" /* first and last(735th) bit set */
-#define GIVEN_TOOLARGE_CPUSET_STRING "10000,,,,,,,,,,,,,,,,,,,,,,0" /* 736th bit is too large for the 720-wide topology */
+#define GIVEN_CPUSET_STRING "0x0,0x0fff,0xf0000000"
+#define EXPECTED_CPUSET_STRING "0x0000ffff,0xff000000"
+#define GIVEN_LARGESPLIT_CPUSET_STRING "0x8000,,,,,,,,,,,,,,,,,,,,,,0x1" /* first and last(735th) bit set */
+#define GIVEN_TOOLARGE_CPUSET_STRING "0x10000,,,,,,,,,,,,,,,,,,,,,,0x0" /* 736th bit is too large for the 720-wide topology */
 
-int main()
+int main(void)
 {
   hwloc_topology_t topology;
   char *string = NULL;
@@ -29,8 +30,9 @@
   hwloc_topology_init(&topology);
   hwloc_topology_set_synthetic(topology, SYNTHETIC_TOPOLOGY_DESCRIPTION);
   hwloc_topology_load(topology);
+  set = hwloc_cpuset_alloc();
 
-  set = hwloc_cpuset_from_string(GIVEN_CPUSET_STRING);
+  hwloc_cpuset_from_string(set, GIVEN_CPUSET_STRING);
   obj = hwloc_get_obj_covering_cpuset(topology, set);
 
   assert(obj);
@@ -43,22 +45,20 @@
 	  GIVEN_CPUSET_STRING, string, EXPECTED_CPUSET_STRING);
   assert(!strcmp(EXPECTED_CPUSET_STRING, string));
   free(string);
-  free(set);
 
-  set = hwloc_cpuset_from_string(GIVEN_LARGESPLIT_CPUSET_STRING);
+  hwloc_cpuset_from_string(set, GIVEN_LARGESPLIT_CPUSET_STRING);
   obj = hwloc_get_obj_covering_cpuset(topology, set);
-  assert(obj == hwloc_get_system_obj(topology));
+  assert(obj == hwloc_get_root_obj(topology));
   fprintf(stderr, "found system as covering object of first+last cpus cpuset %s\n",
 	  GIVEN_LARGESPLIT_CPUSET_STRING);
-  free(set);
 
-  set = hwloc_cpuset_from_string(GIVEN_TOOLARGE_CPUSET_STRING);
+  hwloc_cpuset_from_string(set, GIVEN_TOOLARGE_CPUSET_STRING);
   obj = hwloc_get_obj_covering_cpuset(topology, set);
   assert(!obj);
   fprintf(stderr, "found no covering object for too-large cpuset %s\n",
 	  GIVEN_TOOLARGE_CPUSET_STRING);
-  free(set);
 
+  hwloc_cpuset_free(set);
   hwloc_topology_destroy(topology);
 
   return EXIT_SUCCESS;

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_obj_inside_cpuset.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_obj_inside_cpuset.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_obj_inside_cpuset.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -3,6 +3,7 @@
  * See COPYING in top-level directory.
  */
 
+#include <private/config.h>
 #include <hwloc.h>
 
 #include <stdlib.h>
@@ -15,7 +16,7 @@
  */
 
 int
-main (int argc, char *argv[])
+main (void)
 {
   hwloc_topology_t topology;
   hwloc_obj_t obj, root;
@@ -32,26 +33,26 @@
     return EXIT_FAILURE;
 
   /* there is no second system object */
-  root = hwloc_get_system_obj (topology);
+  root = hwloc_get_root_obj (topology);
   obj = hwloc_get_obj_inside_cpuset_by_type(topology, root->cpuset, HWLOC_OBJ_SYSTEM, 1);
   assert(!obj);
 
   /* first system object is the top-level object of the topology */
-  obj = hwloc_get_obj_inside_cpuset_by_type(topology, root->cpuset, HWLOC_OBJ_SYSTEM, 0);
-  assert(obj == hwloc_get_system_obj(topology));
+  obj = hwloc_get_obj_inside_cpuset_by_type(topology, root->cpuset, HWLOC_OBJ_MACHINE, 0);
+  assert(obj == hwloc_get_root_obj(topology));
 
   /* first next-object object is the top-level object of the topology */
-  obj = hwloc_get_next_obj_inside_cpuset_by_type(topology, root->cpuset, HWLOC_OBJ_SYSTEM, NULL);
-  assert(obj == hwloc_get_system_obj(topology));
+  obj = hwloc_get_next_obj_inside_cpuset_by_type(topology, root->cpuset, HWLOC_OBJ_MACHINE, NULL);
+  assert(obj == hwloc_get_root_obj(topology));
   /* there is no next object after the system object */
   obj = hwloc_get_next_obj_inside_cpuset_by_type(topology, root->cpuset, HWLOC_OBJ_SYSTEM, obj);
   assert(!obj);
 
-  /* check last proc */
-  obj = hwloc_get_obj_inside_cpuset_by_type(topology, root->cpuset, HWLOC_OBJ_PROC, 2*3*4*5*6-1);
+  /* check last PU */
+  obj = hwloc_get_obj_inside_cpuset_by_type(topology, root->cpuset, HWLOC_OBJ_PU, 2*3*4*5*6-1);
   assert(obj == hwloc_get_obj_by_depth(topology, 5, 2*3*4*5*6-1));
-  /* there is no next proc after the last one */
-  obj = hwloc_get_next_obj_inside_cpuset_by_type(topology, root->cpuset, HWLOC_OBJ_PROC, obj);
+  /* there is no next PU after the last one */
+  obj = hwloc_get_next_obj_inside_cpuset_by_type(topology, root->cpuset, HWLOC_OBJ_PU, obj);
   assert(!obj);
 
 
@@ -64,9 +65,9 @@
   assert(hwloc_get_nbobjs_inside_cpuset_by_type(topology, root->cpuset, HWLOC_OBJ_CACHE) == 12);
 
 
-  /* check first proc of second socket */
+  /* check first PU of second socket */
   root = hwloc_get_obj_by_depth(topology, 2, 1);
-  obj = hwloc_get_obj_inside_cpuset_by_type(topology, root->cpuset, HWLOC_OBJ_PROC, 0);
+  obj = hwloc_get_obj_inside_cpuset_by_type(topology, root->cpuset, HWLOC_OBJ_PU, 0);
   assert(obj == hwloc_get_obj_by_depth(topology, 5, 4*5*6));
 
   /* check third core of third socket */

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_shared_cache_covering_obj.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_shared_cache_covering_obj.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_get_shared_cache_covering_obj.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -3,6 +3,7 @@
  * See COPYING in top-level directory.
  */
 
+#include <private/config.h>
 #include <hwloc.h>
 
 #include <stdlib.h>
@@ -15,7 +16,7 @@
 #define SYNTHETIC_TOPOLOGY_DESCRIPTION_SHARED "6 5 4 3 2" /* 736bits wide topology */
 #define SYNTHETIC_TOPOLOGY_DESCRIPTION_NONSHARED "6 5 4 1 2" /* 736bits wide topology */
 
-int main()
+int main(void)
 {
   hwloc_topology_t topology;
   hwloc_obj_t obj, cache;

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_insert_misc.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_insert_misc.c	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_insert_misc.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,31 @@
+/*
+ * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
+ * See COPYING in top-level directory.
+ */
+
+#include <private/config.h>
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+int main(void)
+{
+  hwloc_topology_t topology;
+  hwloc_cpuset_t cpuset;
+  hwloc_obj_t obj;
+
+  hwloc_topology_init(&topology);
+  hwloc_topology_load(topology);
+  hwloc_topology_check(topology);
+  cpuset = hwloc_cpuset_alloc();
+  hwloc_cpuset_set(cpuset, 0);
+  obj = hwloc_topology_insert_misc_object_by_cpuset(topology, cpuset, "test");
+  hwloc_topology_insert_misc_object_by_parent(topology, obj, "test2");
+  hwloc_topology_check(topology);
+  hwloc_topology_destroy(topology);
+
+  return 0;
+}

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_is_thissystem.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_is_thissystem.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_is_thissystem.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -3,6 +3,7 @@
  * See COPYING in top-level directory.
  */
 
+#include <private/config.h>
 #include <hwloc.h>
 
 #include <stdlib.h>
@@ -15,8 +16,9 @@
 
 static void result(const char *msg, int err)
 {
+  const char *errmsg = strerror(errno);
   if (err)
-    printf("%-30s: FAILED (%d, %s)\n", msg, errno, strerror(errno));
+    printf("%-30s: FAILED (%d, %s)\n", msg, errno, errmsg);
   else
     printf("%-30s: OK\n", msg);
 }
@@ -32,7 +34,7 @@
   hwloc_topology_load(topology);
   assert(hwloc_topology_is_thissystem(topology));
 
-  cpuset = hwloc_cpuset_dup(hwloc_get_system_obj(topology)->cpuset);
+  cpuset = hwloc_cpuset_dup(hwloc_topology_get_complete_cpuset(topology));
   result("Binding with OS backend", hwloc_set_cpubind(topology, cpuset, 0));
 
   hwloc_topology_destroy(topology);
@@ -64,7 +66,7 @@
 
   hwloc_topology_destroy(topology);
 
-  free(cpuset);
+  hwloc_cpuset_free(cpuset);
 
   return 0;
 }

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_object_userdata.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_object_userdata.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_object_userdata.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -3,6 +3,7 @@
  * See COPYING in top-level directory.
  */
 
+#include <private/config.h>
 #include <hwloc.h>
 
 #include <stdlib.h>

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_synthetic.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_synthetic.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_synthetic.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -3,6 +3,7 @@
  * See COPYING in top-level directory.
  */
 
+#include <private/config.h>
 #include <hwloc.h>
 
 #include <stdlib.h>
@@ -16,7 +17,7 @@
 {
   hwloc_topology_t topology;
   unsigned depth;
-  int i,j, width;
+  unsigned i,j, width;
 
   /* check a synthetic topology */
   hwloc_topology_init(&topology);

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_type_depth.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_type_depth.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/hwloc_type_depth.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -3,6 +3,7 @@
  * See COPYING in top-level directory.
  */
 
+#include <private/config.h>
 #include <hwloc.h>
 
 #include <stdio.h>
@@ -12,9 +13,9 @@
  * and hwloc_get_depth_type()
  */
 
-#define SYNTHETIC_TOPOLOGY_DESCRIPTION "machine:3 misc:2 core:3 cache:2 cache:2 2"
+#define SYNTHETIC_TOPOLOGY_DESCRIPTION "machine:3 group:2 group:2 core:3 cache:2 cache:2 2"
 
-int main()
+int main(void)
 {
   hwloc_topology_t topology;
 
@@ -22,27 +23,27 @@
   hwloc_topology_set_synthetic(topology, SYNTHETIC_TOPOLOGY_DESCRIPTION);
   hwloc_topology_load(topology);
 
-  assert(hwloc_topology_get_depth(topology) == 7);
+  assert(hwloc_topology_get_depth(topology) == 8);
 
   assert(hwloc_get_depth_type(topology, 0) == HWLOC_OBJ_SYSTEM);
   assert(hwloc_get_depth_type(topology, 1) == HWLOC_OBJ_MACHINE);
-  assert(hwloc_get_depth_type(topology, 2) == HWLOC_OBJ_MISC);
-  assert(hwloc_get_depth_type(topology, 3) == HWLOC_OBJ_CORE);
-  assert(hwloc_get_depth_type(topology, 4) == HWLOC_OBJ_CACHE);
+  assert(hwloc_get_depth_type(topology, 2) == HWLOC_OBJ_GROUP);
+  assert(hwloc_get_depth_type(topology, 3) == HWLOC_OBJ_GROUP);
+  assert(hwloc_get_depth_type(topology, 4) == HWLOC_OBJ_CORE);
   assert(hwloc_get_depth_type(topology, 5) == HWLOC_OBJ_CACHE);
-  assert(hwloc_get_depth_type(topology, 6) == HWLOC_OBJ_PROC);
+  assert(hwloc_get_depth_type(topology, 6) == HWLOC_OBJ_CACHE);
+  assert(hwloc_get_depth_type(topology, 7) == HWLOC_OBJ_PU);
 
   assert(hwloc_get_type_depth(topology, HWLOC_OBJ_MACHINE) == 1);
-  assert(hwloc_get_type_depth(topology, HWLOC_OBJ_MISC) == 2);
-  assert(hwloc_get_type_depth(topology, HWLOC_OBJ_CORE) == 3);
-  assert(hwloc_get_type_depth(topology, HWLOC_OBJ_PROC) == 6);
+  assert(hwloc_get_type_depth(topology, HWLOC_OBJ_CORE) == 4);
+  assert(hwloc_get_type_depth(topology, HWLOC_OBJ_PU) == 7);
 
   assert(hwloc_get_type_depth(topology, HWLOC_OBJ_NODE) == HWLOC_TYPE_DEPTH_UNKNOWN);
-  assert(hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_NODE) == 2);
-  assert(hwloc_get_type_or_below_depth(topology, HWLOC_OBJ_NODE) == 3);
+  assert(hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_NODE) == 3);
+  assert(hwloc_get_type_or_below_depth(topology, HWLOC_OBJ_NODE) == 4);
   assert(hwloc_get_type_depth(topology, HWLOC_OBJ_SOCKET) == HWLOC_TYPE_DEPTH_UNKNOWN);
-  assert(hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_SOCKET) == 2);
-  assert(hwloc_get_type_or_below_depth(topology, HWLOC_OBJ_SOCKET) == 3);
+  assert(hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_SOCKET) == 3);
+  assert(hwloc_get_type_or_below_depth(topology, HWLOC_OBJ_SOCKET) == 4);
   assert(hwloc_get_type_depth(topology, HWLOC_OBJ_CACHE) == HWLOC_TYPE_DEPTH_MULTIPLE);
   assert(hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_CACHE) == HWLOC_TYPE_DEPTH_MULTIPLE);
   assert(hwloc_get_type_or_below_depth(topology, HWLOC_OBJ_CACHE) == HWLOC_TYPE_DEPTH_MULTIPLE);

Deleted: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ibverbs.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ibverbs.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ibverbs.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,44 +0,0 @@
-/*
- * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
- * See COPYING in top-level directory.
- */
-
-#include <stdio.h>
-#include <assert.h>
-#include <infiniband/verbs.h>
-#include <hwloc.h>
-#include <hwloc/ibverbs.h>
-
-/* check the ibverbs helpers */
-
-int main() {
-  struct ibv_device **dev_list, *dev;
-  int count, i;
-
-  dev_list = ibv_get_device_list(&count);
-  if (!dev_list) {
-    fprintf(stderr, "ibv_get_device_list failed\n");
-    return 0;
-  }
-  printf("ibv_get_device_list found %d devices\n", count);
-
-  for(i=0; i<count; i++) {
-    hwloc_cpuset_t set;
-    dev = dev_list[i];
-
-    if (hwloc_ibverbs_get_device_cpuset(dev, &set) < 0) {
-      printf("failed to get cpuset for device %d (%s)\n",
-	     i, ibv_get_device_name(dev));
-    } else {
-      char *cpuset_string = NULL;
-      hwloc_cpuset_asprintf(&cpuset_string, set);
-      printf("got cpuset %s for device %d (%s)\n",
-	     cpuset_string, i, ibv_get_device_name(dev));
-      free(cpuset_string);
-    }
-  }
-
-  ibv_free_device_list(dev_list);
-
-  return 0;
-}

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.tar.gz
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.tar.gz	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.tar.gz	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,100 +1,81 @@
-‹ TGJ í_s;’åïëøSðq7bÔƒÿEö[÷8&Æ1Û³ÛíØØ'F™¤%†%’ARîëùô[ )]’EŠ…J Ûºy~ž;m[eBª¬ 	ê§ipwÃÅÔLî&«çÍl»ù—_²¢*ïãÿêʫݟµs»ÿ=ð‹ÖF9ãŒ±æ—æ‹ªR¿|Þoã2Ï›m½~ùr¿¼œ/Þ¸n¶Þp|C¼è‹ñ_­—“|ABüu¨bü}ó{ÄŸƒ7âßüa¾øº¤·öñ¾ã•uMüµuÖkeCÿàšn` èMßFxüc¤g›ÍrýO¨ßg‹ér=žO›?ýéyû0[lç“?ýåã‡æY|­Ÿæ?š¯hÿái9=þSó{k÷¿,ê§YóçÏõãà_—ëÙ ùgƒÿ½ÚÎÖËÅÿØ>ýÏÁ½´4ÿa³­VóÅý®Ùøéù÷ÿŽŸ§‡jøk‡I=y˜
-6óÿŽŸª•qƒÿøó‡ÕÏÍ|Ò´°ûÕ‡ÍüK³ûMóóa[m¾ðú‘ñ/ö_ªWóÉþ+:|˜/æÛy󇿌W]=Ç/þ˜mâodz_'³Õv¾\þ.*a:xœ}o~ææ#>ü}õzõcÝ´Þü¡ùgƒïO³Át6Xmfƒíf2xÚ¬«z6xšÌ“_‡»ö›Ùjð´]7_¹_©“§å÷æ²müg6&_Ÿ7ƒ§§__m>aÓ|ZóŸ<l››æ‡oîõ¯ñë³_·»KÆËÕvðø4°ÓÅòïñ/w¿¬g«ñýr9¬óÁcýðuÜ\3yZg÷õäLJ/ËûåÓ|o
-:ü¡	ÊßþןOî¸ûæ;»7àð]¾Ü><ãúq~¿xjž’ý_ÖÓisÇ7»Ëâç:5ø2ßn/aûçîÿæû|½mž”«æ;^žêEÓLüœ?6wnðµ¹Ùß›ÿ¶ÛՇǨþÝ< úúZµP´y@‡ú§@Í;{@uŸtØ~@
-Ðæ­F?ýj7è=è¨ý€Z< Vÿ¡yÀ~öÔ½³ÔôèAj? èûâýïæ½ÞƒÝ~@=Ð÷ñ€†wö€Ú>=¨i? èû˜ƒV¿›ôÔ¶Ð
-èûx@‡ïìu}zP×~@‡x@ßÇ:úÝ< oô ¾ý€Žð€¾T¿·T’ïÓ…^H%iä’vhõó?¢ï-™tý}£½”LB6é½<¢ï-úô¢ÒIù¤Ý#:üùÑ÷–Pºþˆ¾Ñ‹^H(id”ÞË#úÞRJU^Ô^H)iä”ÞË#úÞ’J×Ñ뽨½TÒÈ*ýÄoôünTÀÍþïÍìñk–M )þÿªù½Ò¾
-þnÅÿ7´6ÞöÿßâolÿÊhÿ?ÿ2}~zú®^*oé[…à†þƒk:ûÓý?¾rôÏAœ­†vTFƒ`õ°™’k§¬˜àƒ©Âp80ΆѠª®™TªýKƒj¦óMܺrfà|ê!T*^ß|D¯7Õèåz=ÊŽ†ÍtטA0ÎÇËGCkªÁH7é—ÍÀšjþ臶¹¨ÒJ›vœ¨Ákóv´6ßdl¤ydâ•Îx;tëâ?¶/W63io®	£vŸFNÇg†Í_†—ë|ó]…æsŒ2ñ³šÉrseÕ|Xó‰&¶«_Í·è}ü~Bó-ÄlžÚaóý‡Us7]sošïQ­CüР‚ªâŸO>®iIéÑ®‰QÂîgŽš»²ûÀà_®kâcì°¹±*þë&F»ïÐ7#å@[sÜvóÙÍM¬âŸG¦QZs¡ŽšÖü»“oR7aÑÆ„æfªQ0£ª	ÿ°*£îO.5Í7®uü;o­ß}—#U57l÷m6¹°‰r»Û3Tj‡ÍïÆÆkìo„‹ß¥‰ßy¡xÝ0×ü0ntÒp5Ò»F¬«Üî9Ó¾ùÌ®‘ÝsѼYn×±]«ªæiqÕàõçlýú{­ÝîI¯³û[×<šG´#üÉø…_ø…_ø…_ø…_øõŽ~}˜lÝœ±fhÜè×íüiÖ̍6V)S½dbf›
-½Ùýy3^?/óÅý@þüåq9ù6›6÷~eËÊå÷ÿ͏œ5€º­ÿêæÌZ§ãúŸ«tÀú/×ã?}Ÿ7ºÈðt‹¿
-VWFYë¿X‹ø³p;þÍï·³'Êcÿ¸þWäxèÿæK}ŸŽýÿoë¿F9úo,$Å?.~öxÒâ_5ñ×Ö ÿg!=þÛåjù¸¼ÿÑýAH¿5
-õÿX Äû°žÕÓñ‹ìz1Àî­ü¿ÖgñÆ;äÿ8ØÀýÎÞjAWú±ŽWõä[}?ϧ—Û¸©ÿ¦³?Õ¥|€þ9°¾hú&﫚?&]ÿÎkøXÀÀ/ªþoÏþûÌÿ}e=ôÏÁ> tBÉ÷þ?~œo.û…{Ìÿ­ÂøÏB€ðE“kü¿®þ.úwçëU…ó?Xwz Á¤ë¹hd2Ki#*üíýçã¿ñó4Ô/štýïÊ$¹ ºåU0^i÷ÿcƒFþ—ƒ¾ñŸ/¦³_M·Ç GþßäÿY Æ?–¹ÙÆíù8_ÿw^cüç ›ùÌÄBÔÿ« ¾ŒWõz;Å›NÛH^ÿ³ÊaýÌÿeCÔÿöÇ*Ãø¯ÏçÍøú?,|^Ì¿ÎgSôB!êW˜ñVéù?ÖÿY0P¾hˆúŸ,fëÙbòcÿpy9à¶þíyþßkøÿY€d¨ëõz67_xà >þÇB`Ð?ðÿȆ¨ÿ¿×?6ãå×q½Ù,'óz;ÿ>ßþ8o#yü·JkìÿaA£M¾ñÿ©^]iãöú_kÿ¯sðÿ°° öÿJ…¨ÿÅóÓ—Ù:Î â¿»ÒÆíñߟë¿ù
-ôÏAÌÿCûr!é_ô¡þÄøgòïÿp˜ÿ1àþ
-Qÿåü_Ð?ðɆ¨ÿ<þ¯Öû_3üCÿ,|¬·5º ¹õ_Îÿ…õ0þˆ¨ÿrþ/ø?Y€ÿK6Ôõ¿bþ/ìÿdöÙõŸÉÿÕZÿÓ8ÿìÿM¾ñ?³ÿúgᐅÿK(Dýgòµê?zäÿxð3 ɐô¯ú¿PÿbüËù¿°ÿ‡ø¿dCÔ9ÿôÏò¿²!ê?Sý¯öøóÿxø´Øl×Ï“Øi£'Qÿåü_Èÿ²€ñ_6Dý—ó!ÿÃü_²¡®ÿóÁÿÉü_²!꿜ÿõ?Y@öW6ùÆÿÌþ/蟅Cþþ/¡õ_Îÿ…õàÿ’Mªþ;ùxBTxwÿWhô¯­ÿ‹…ôø¿žÿÞ¹ôøÛæ:ÄŸBü·ëY=oæ_šûvÿƽI›ÿÇøãpþ/0LdBÐÿ«÷oUO¾Õ÷³ñ|z¹´õ¿¨ÿJáü_ÿ—
-Aÿ“åúºæI׿Cý&°ð'ªþoÏþûÌÿ}eQÿ…C&èd’ïýÿº¨Çüßâü_°ú/›\ãÿö¿Äüßný¯
-¨ÿÀ‚¹³è“®ÿå"ZýSÚˆ
-Iã¿ñó°þ'›týïý?)mtËÿª`¼ÒÊØ¨ë‘ÿe¡oüç?vj£Gþß#þ<㟩þO8_ÿ‡ÿ—‰xþ'* É…¨ÿõ¾þÖÿXÀü_6Dýgªÿs>ÿCý?.>/æ_ç³)z¡õ_ þÏÞÿSaýŸäÿdCԁú?»ü¿Wðÿ³€ú?²¡®ÿå¯ÿ³Ëÿ‹ù?ÿeCÔ¦ú?ö|ý¯ù#ôρF0ÑäÿsÕÿ	ûú?ðÿ°pˆ Þ„BÔ¦ú?þ\ÿ^¡þ/1ÿíË…¤UÐÿeáÿâ€ÿç¿ò¿˜ÿ±€óßdCÔ9ÿôÏü_²!ê?ÿ«õþ眇þYøXoktr!꿜ÿë?,`ü—
-Qÿåü_ð² ÿ—l¨ëÅü_ØÿÉü_²!ê¿Àùo{ÿÎáú—M¾ñ?¯ÿþo^°èdBԁóßþ/¬ÿ³€óßdCÒ¿.èÿrðq@Œ9ÿöÿ° ÿ—lˆú/çÿ‚þY@þW6DýgªÿÕÿqþŸ›íúy;mô!꿜ÿù_0þˆ¨ÿrþ/äX€ÿK6Ôõ¿bþ/ø?Y@öG6Dý—ó¡þ'пlòÿ™ý_Ð?/	Xt2!꿜ÿëÿ,Àÿ%›Týû¤“?÷D…w÷Uþµ58ÿ‘…ôø¿žÿÞ¹ôø[ûÄ¿<„øoÖ³z:ÞÌ¿4÷íþ{“6ÿñÆ£þ‡õ…I€Lúõþ­êÉ·ú~6žO/·‘¶þõ_)õ0û—
-Aÿ“åúºæI׿óùàÿ‘
-Uÿ·gÿ}æÿ¾Býö°˜ÿ%ßûÿuPù¿…ÿá‹&×øÿ†ý/1ÿ·[ÿ«*äÿXpwè$“®ÿå"ZýSÚˆ
-Iã¿ñóðþ/›týïý?)mtËÿª`¼ÒÊØ¨ò¿ôÿáüÇNmôÈÿû€ü?ÄøgªÿÎ×ÿqþñüOT ’QÿêÿTûú?XÿcóÙõŸ©þÏùü¯ÿ
-ôÏÁçÅüë|6E/ ¢þÔÿÙé?`ÿðÿɆ¨ÿõvù¯áÿgõdC]ÿË_ÿg—ÿóý—
-Qÿ™êÿØóõ?­±ÿ‡ÐH&ßøŸ«þÏnü—Cÿæ_ðÿ…¨ÿLõü¹þ=êÿñóÿо\HúWåü_¾‚ÿ‹büœÿ¶ÏÿbþÇΓ
-Qÿåü_Ð?ðɆ¨ÿ<þ¯ÖûŸsúgác½­ÑÈ…¨ÿRþ/_aý‡Œÿ²!꿜ÿþOàÿ’
-uý¯˜ÿû?Y€ÿK6Dý8ÿíàÿ‚ÿ“ìÿM¾ñ?³ÿúgáÐÿÂÿ%¢þœÿvðaýŸœÿ&’þuÁú_¨ÿÆ1þåü_ØÿÃü_²!꿜ÿúgù_ÙõŸ©þW{üÇù<|Zl¶ëçIì´Ñ„¨ÿrõ¿ÿeã¿lˆú/çÿBþ‡ø¿dC]ÿ+æÿ‚ÿ“ø¿dCÔ9ÿê²€ì¯lòÿ™ý_Ð?‡þþ/¡õ_Îÿ…õàÿ’M’þӏþÝq[ÿÇõB£pþêNc	@0©ã¿M:ùwOTxwÿçNÿÖø?9Hÿv¹Z>.ïtÒâ¿óÿê
-õY Äû°žÕÓñfþ¥¹o÷oÜ›ïÿÆcýŸ…C†˜È„ ÿWï爵|«ïgãùôréù¿Jy¬ÿ± ÿlúŸ,××5Lºþ×ØÿÉô/ªþoÏþûÌÿ}eáÿcá	º™ä{ÿ¿n ì1ÿ·¨ÿÀƒ…ðE“küÃþÛ'ÿ_ÔfÁÜ¡LºþÓM Qá¡óøóƬÿ³€÷Ù¤ëïÿKi£[þWã•VÆFý[ÿå oüç¿vj£Gþç?2AŒ¦ú_¡]ÿ+`üç žÿ‹
-`r!êç?¾s0ÿ—
-Qÿ™êû›«±þÇÂçÅüë|6E/ ¢þÔÿ
-ûó1ÿg»ÿdCÔ?Î|ç þ—l¨ë8ÿñ}ƒì¿lˆúÏTÿË¢þ×?ÐH&ßøóß#‡`ÿ¯PˆúÏTÿË£þ×?ˆ˜ÿ‡öåBÒ¿*áÿ
-{ÿ—ƒÿ‹büœÿxÈÿbý—œÿ(¢þø¿ÂÞÿý³ ÿ—lˆúÏãÿjÕuõßxøXoktr!꿜ÿþo0þˆ¨ÿþ¯°ó)ø?Y€ÿK6Ôõ¿üþ¯°óYäX€ÿK6Dý8ÿq·þ§ö±€ý²É7þçòíÆg¡€ÿK(Dý8ÿ1ìý_Xÿgç?ʆ¤]Ðÿåáÿâ€ÿrþ/øÿY€ÿK6Dý—óAÿ, ÿ+¢þ3ÕÿjÿúgáÓb³]?Ob§ž@ Dý—ó!ÿËÆÙõ_Îÿ…üðɆºþWÌÿÿ'ðɆ¨ÿbþ/ú, û+›|ã^ÿêòpˆ ü_B!꿜ÿëÿ,Àÿ%›Týϧi‡þÒÇÿeTÿ½â?y^¯g‹íxºžŸ­o¶q{þw¾þã›ëÑÿsPOVóq*F‘ô¿lä¿X®Çëå[mÜžÿ×ÿ	ZCÿ,<Íϐ¾\’ô¿ZÏ6îSÛH׿ÁøÏ„ºÓú—Kêø¯]êÛ_âûŸk¾n´­*¼ÿqÐ#þÛåjù¸¼ÿÑùAH¿5Þ"þPâ¿}XÏêéx3ÿÒܸûë7')ÿ³‹h ŒÿìbÓü‡9€L(úÝüµª'ßêûÙx>½ØÆíù¿9Ó¥
-üŸ,T¾h(úŸ,×W5Lºþ¯àÿ`¿lÈú¿9ûï5ÿW¨ÿËC¼ýÌÿÅ’ñýÿêÛã¿=ŸÿÛ€ú_,hìÿM¶ñŸ´ÿ+œë_9¬ÿ± €’é¡ÿå"îõNhc§ð¤÷ã+ÌÿY@ýÙôÐÿ~HBÝò¿*¯´26ê·ÿùßòôŽÿnéôôÈÿ‹ü?Ôøw) ›>ÿwÞ`ÿM‡‹
-°‚¡ê¿KØäüŸU. ÿÇæÿ²¡ê¿KØÛù¿óù_3þÃÿÏÂçÅüë|6E/ ªþ»€MÿÑÿ
-ý—ÕdCÕ—°=òÿ> ÿÇê¿Ê†¼þס lºþC¥¡àÿ‘
-Uÿ]
-À&ëß*°ÿ‡ Édÿ¯€½½þ×òÿ{
-ÿ»Ø(øÿ¥BÕ—°·ÇßÒ?üÿ<Äü?´/šþU9ÿ—†ÿ‹jüóø¿\+ÿ‹ù8ÿ[6Tý—òyèŸø¿dCÕÿWëýÏyý³ð±ÞÖèäBÕ1ÿÖXÀø/ªþ‹ù¿àÿdþ/ِ×ÿJù¿ àÿ’
-Uÿyü_­õ?°ÿ‹ìÿMÆñ?¯ÿúgaÿ—T¨úÏãÿ:Ïÿü8ÿ[64ýërþ/ÿÔøóaÿðɆªÿbþ/èŸäeCÕžú_íñçÿñði±Ù®Ÿ'±ÏFO ªþ‹ù¿Pÿ—Œÿ²¡ê¿˜ÿùàÿ’
-yý¯”ÿúgþ/ÙPõ_Ìÿ…ú, û+›Œã^ÿôÏÂ.6
-þ/©Põ_Ìÿ…õàÿ’M’þWËM<î;åìßÈmýÕ°!žÿiÞÿYP8þ[4ÉãÊÁ¿¢Â;û?wú×Öàü_Òã¿]®–ËûÝ„ôø[]9ÄŸBü·ëY=ÇÁ|qÿƽIzÿßÅ?‡ý,¼,Àb ‚þ_­¿«zò­¾ŸçÓËm$­ÿïô_)óYÀŸlúŸ,××5Lºþ×¨ÿÆü²¡êÿöì¿ÏüßWðÿópˆ€E7 “|ïÿÿ_kþoÆ0þË&×ø]ý‰ùÿýú_ÿ?ê=€dÒõ¿\ĝ>)mD…‡¤ñß þP¿lÒõ¿·ÿ¥´Ñ-ÿ«‚ñJ+c£þ­Gþ—…¾ñ?ÿÚ©ùøó@Œ—ò_æÿá|ýß9Ôg!žÿ‹
-`r!ê¿Kù¯ôõ?«ÖÿxÀü_6Dýw)ÿÕ!ÿw>ÿk®Æþ?>/æ_ç³)z¡õߥüW/ÿO…õ`ü•
-Qÿ]Ê¥ÕÿÙçÿ½‚ÿŸÔÿ’
-uý¯Cù¯ãóðþ/¢þ»”ÿJÿ­ÒûXЀdòÿWËõÙÿë,ü?,¼LÀÐÈ„¨ÿ.å¿zÔÿ	^¡þ?1ÿíË…¤UÐÿ…óY Æ?“ÿë|ÿ‡Ãü	œÿ(¢þKù¿lý³€õ_ÙõŸÇÿÕzÿk®†þYøXoktr!꿜ÿë?,`ü—
-Qÿåü_ð² ÿ—l¨ëÅü_ØÿÉÆÙõŸÉÿÕZÿÓ
-þO`üM¾ñ?³ÿúgá¥F7 ¢þ3ù¿Zõò<àüGِôßñ0¸¨ðdÿ—…ÿ‹bü‹ù¿öÿ° ÿ—lˆú/Wÿúg뿲!ê?Sý¯öøóÿxø´Øl×Ï“Øi£'Qÿåü_Èÿ²€ñ_6Dý—ó!ÿÃü_²¡®ÿóÁÿÉÆÙõ_Îÿ…úŸ, û+›|ãfÿôÏÂKŒn@&Dý—òyäÿx€ÿK6©úwI'î‰
-ïîÿªýkkpþ#éñ=ÿ½séñ·&öÿˆyñß>¬gõt¼™iîÛý÷&mþãŒGýP˜È„ ÿWïߪž|«ïgãùôriëQÿ•òXÿg³Ùô?Y®¯kþ˜tý;¯‘ÿg¿l¨ú¿=ûï3ÿ÷ê¿ð°€E7 ”|ïÿ×
-@=æÿþ?`ÿ“M®ñÿ
-û_bþo·þWUÈÿ±àî<z Á¤ë¹ˆVÿ”6¢ÂCÒøo¼ÁüŸøe“®ÿ½ÿ'¥nù_ŒWZ5Âoôo}…ü/}ã8ÿ±S=òÿ> ÿÏ1þ™êÿ„óõœÿÂD<ÿ€äBԁú?Õ¾þÖÿXÀü_6Dýgªÿs>ÿsÎk蟃ϋù×ùlŠ^@(Dý¨ÿ³ÓÀþàÿ“
-Qÿêÿìòÿ^ÃÿÏêÿȆºþ—¿þÏ.ÿæÿ,@þ²!ê?Sý{¾þ§5öÿ° : ÉäÿsÕÿٍÿÎÁÿÃÂË,z™õŸ©þ?׿Gý?bþÚ—IÿªœÿËø¿8 Æ¿Àùoÿæ,àü7Ùõ_Îÿý³ ÿ—lˆúÏãÿj½ÿ9ç¡>ÖÛ]€\ˆú/åÿòÖXÀø/¢þËù¿àÿdþ/ÙP×ÿJù¿,ö² ùˆ¨ÿç¿ü_ð²€ý²É7þgöAÿ, ÿ—Pˆú/pþÛÁÿ…õpþ›lHú×ý_¨ÿÆ1þåü_ØÿÃü_²!꿜ÿúgù_ÙõŸ©þW{üÇù<|Zl¶ëçIì´Ñ„¨ÿrþ/äYÀø/¢þËù¿ÿaþ/ÙP×ÿŠÕÿ‚ÿ“È_6Dý—ó¡þ'ÈþÊ&ßøŸÙÿý³p ü_B!꿜ÿëÿ,Àÿ%›TýëŽg>ÞÙÿÕ¼ø+£måáÿâ Gü_€ïÚFzü­‰ç?!þå¡Äû°žÕÓñfþ¥¹q÷×oNÒüÿ`qþ7ûÙ¿Âü_(ý¿šÿVõä[}?ϧÛHZÿÛé¿Òç²€òÿ²¡è²\_Õü1éúw> þøeCÖÿÍÙ¯ù¿Âúñö[ÌÿÅ’ñýÿªèöøoÏçÿÖÃÿË–ÿe“mü'ùÿ¹þÎàA›;mш¥‡þ—‹èõOhc§ð¤÷ã+ÌÿYÀþÙôÐÿÞ ”ÐF·ü¯
-Æ+­Œúwç±Ð;þ‡ »´Ñ#ÿ,òÿ,Pãߥ Púüßyƒý?,Äó?QH.Týw) ”œÿ³ÊyäÿXÀü_6Týw) t;ÿw>ÿkÆìÿaáóbþu>›¢
-Uÿ]
- %ÿƏú, ý'ªþ» ê‘ÿ÷ù?PÿG6äõ¿€Òõ*
-ý³ ÿl¨úïR (YÿVé€ý?,hl MÆñÿj Ûë-ÿ¿×ðÿ°°_~…ÿ_*Týw) t{ü÷-ýÃÿÏCÌÿCûr¡é_óœÿÆ5þyü_®•ÿÅüœÿ&ªþ‹ù¿ àÿ’
-UÿYü_­÷?ç
-ôÏÂÇz[£Uÿ¥ü_ë?,`ü—
-UÿÅü_ð² ÿ—lÈë¥ü_Ð?ðɆªÿ<þ¯ÖúŸØÿÅä/›Œã^ÿôÏÂîö+ø¿¤BÕÿ×yþ?xäÿxÀùo²¡é_—«ÿ¥àÿâ€ÿbþ/ìÿaþ/ÙPõ_Ìÿý³€ü¯l¨úÏSÿ«=þãü?>-6Ûõó$öÙè	BÕ±ú_¨ÿËÆÙPõ_Ìÿ…üðɆ¼þWÊÿý³€ôl¨ú/æÿBý? Ùdÿóú¿ v·_Áÿ%ªþ‹ù¿°þÏü_²IÖ¿M9ùsOTxšÿKÛ
-ç²Ð#þ¯ç¿wm#=þÖxƒøs@‰ÿöa=«§ãÍüKsãî¯ßœó‹ú/<ìV_0ÿEÿ¯Þ¿U=ùVßÏÆóéÅ6Òóÿ•68ÿ“”ÿ—
-Eÿ“åúªæI׿óõŸX€ÿG6dýßœý÷šÿÇ’Ð?;÷æÿbÉøþÕ t{üoùÿl€ÿ—m¡|Édÿ¯Ûÿ:è?œë¿¹úç@›;t‚é¡ÿå"ZýÚØ)<éýßø
-óðþ/›úßûÚè–ÿUÁx¥•±QÿÎâü/zÇÿpþc—6zäÿƒEþŸjüóÔÿ9Ÿÿ;oPÿ™…xþ'* É…ªÿbõÿcóÙPõŸ§þÏùü¯ÿ±ÿ‡…Ï‹ù×ùlŠ^@(Tý«ÿƒýÿ,`÷l¨ú/Vÿù?PÿG6äõ¿Rõ ü—
-UÿyêÿØvýìÿaAch2ŽÿyëÿÀÿÃÂnõEÁÿ/ªþóÔÿñ-ýÃÿÏCÌÿCûr¡é_áü·w5þ8ÿí}ƒóßdCÕ?Î{ßÀÿ%ªþ³ø¿Zï8ÿ‹õ¶F ªþqþÛûã¿l¨úÇùoïø¿dC^ÿÃùoïø¿dCÕ?Î{ß`ÿ‡l2Žÿ8ÿí²ë}ü_R¡ê翽opþ›lhú×åü_þ/¨ñ/æÿÂþàÿ’
-UÿÅü_Ð?Èÿʆªÿ<õ¿Úã?ÎÿãáÓb³]?ObŸž@ Týó¡þ/ÿeCÕ1ÿò?,Àÿ%òú_)ÿôÏü_²¡ê¿˜ÿõÿX@öW6Çÿ¼þ/蟅]ï«àÿ’
-UÿÅü_Xÿgþ/Ù¤ê¿[ůS¢ÂÓÎÿÔV£þéñ=þ½sÝâèÿmˆþ?]YÄŸBü·ëY=oæ_šûvÿƽIšÿï⌃ÿ›…—` ‚þ_­«zò­¾ŸçÓËm$­ÿíô_)‡ó?YÀ‹¿lúŸ,××5Lºþ×¨ÿÄô/ªþoÏþûÌÿ}ÿ/‡À ”|ïÿÿOkþoÆ0þË&×ø]ý‰ù¿ýú_ÿ/êK’I×ÿ>ýŸÒFzþÏXü}ã8þ­S=òñçÿ.å?:Œÿá|ýÏ9Ôe!žÿ‡
- r!ê¿Kùô÷«ÞÿyÀì_6Dýw)ÿÑaýÿ|þçâåÐ?Ÿó¯óÙ½€PˆúïRþ£Wþ¿Âúpÿˆ¨ÿ.å?Òöÿïó^ÁÿËêȆºþסüGñ?‹ù?Èÿˆ¨ÿ.å?ÒÇ«´‚ÿŸÐH&ßøµüGŸýÎÂÿËÂKÐÈ„¨ÿ.å?:Œÿþ\ÿ^¡þ/1ÿíË…¤ÿŽÅ@¢Â“ý_8ÿ‰bü3ù¿Îýßó?&pþ“lˆú/åÿ²ôÏ^üdCÔÿWëý¯¹úgác½­ÑÈ…¨ÿrþ/¬ÿ°€ñ_6Dý—óÁÿÉü_²¡®ÿóaÿ'ðɆ¨ÿLþ¯ÖúŸVð²€ý²É7þgöAÿ,¼D Ý€LˆúÏäÿjÕsÈÿñ€óŸdCÒ¿.èÿ2ðq@Œ9ÿöÿ° ÿ—lˆú/çÿ‚þYÀ‹ŸlˆúÏTÿ«=þãü/>-6Ûõó$vÚè	BÔ9ÿò¿,`ü—
-Qÿåü_Èÿ° ÿ—l¨ëÅü_ð² ÿ—lˆú/çÿBýOý•M¾ñ?³ÿúgá%èdBÔ9ÿÖÿY€ÿK6©ú&ü¹'*¼»ÿ«jô¯­Uðqÿ×óŸ;·‘kâú/â_Bü·ëY=}=üzióÿÿ`<üß,ìï¿Â2 Púõþ­êÉ·ú~6žO/·‘¶þõ_©€ó?Y@úO6ýO–ëëš?&]ÿÎÔb¿l¨ú¿=ûï3ÿ÷öÿð°»ÿó©ä{ÿ¿n ê1ÿ·ã?C_4¹Æÿ7ì‰ù¿Ýú_UÁÿËÂðn„@0éú_.¢Õ?¥¨ð4þo0ÿgÆÙ¤ëïÿIi£[þWã•VÆFýÛ`‘ÿå oüç?vj£GþßäÿY Æ?SýŸp¾þï<öÿ°ÏÿD ¹õ_ þO÷ÿ8¬ÿñ€ù¿lˆúÏTÿç|þ׌ÿØÿÃÂçÅüë|6E/ ¢þÔÿÙé? þØý#¢þÔÿÙåÿ½†ÿŸÔÿ‘
-uý/ýŸ]þ?8ÌÿY€ÿG6DýgªÿcÏ×ÿ´Áþt@ ™|ã®ú?»ñõ¿™8¬¿Âÿ/¢þ3Õÿñçú÷õ¿Yˆùh_.$ý«‚þ/œÿÆ1þΫpþ#8ÿM6Dýó)èŸø¿dCÔÿWëýÏ9ý³ð±ÞÖèäBÔ9ÿÖXÀø/¢þËù¿àÿdþ/ÙP×ÿŠù¿°ÿ“ø¿dCԁóßöþ/
-ÿ'Øÿ!›|ãfÿôÏÂþþÃÿ
 %¢þœÿ¶÷!ÿÇΓ
-Iÿº ÿõßX Æ¿˜ÿËcÿðɆ¨ÿrõ¿ ÿ•
-Qÿ™êµÇœÿÇçÅf»~žÄN=@ˆú/çÿBþ—Œÿ²!꿜ÿùàÿ’
-uý¯˜ÿþOàÿ’
-Qÿåü_¨ÿɲ¿²É7þgöAÿ,ìï?ü_R!꿘ÿù?àÿ’MªþGI'î‰
-Oóik5ü_¤Çÿõü÷Îm¤Çßåñß>¬gõt¼™iîÛý÷¦Çüß þûåÌÿ¥BÐÿ«÷oUO¾Õ÷³ñ|z¹ôõÿJœÿÉÒ²!è²\_×ü1éúwÞ þðÿȆªÿÛ³ÿ>ó_9¬ÿ±°»ÿó©ä{ÿ¿n ê1ÿ·8ÿƒ‡„/š\ãÿö¿>ù¿ª‚ÿ—…áz ɤ빈Vÿ”6¢ÂCÒøo¼ÅüŸ¼ÿË&]ÿ{ÿOJÝò¿*¯´26ê߇ü/}ã8ÿ±S=òÿ> ÿÏ1þ™êÿ„výìÿa!žÿ‰
- at r!ê¿\ý¬ÿ±€ù¿lˆúÏTÿç|þ׌ÿØÿÃÂçÅüë|6E/ ¢þËÕÿÁú?Øý#¢þËÕÿÿŸÔÿ‘
-uý¯XýÌÿY@ö_6Dýgªÿc[õöÿ° : ÉäÿóÖÿÁù<ì§_ðÿK…¨ÿLõ|»þê³óÿо\HúW8ÿí½CŒ?Î{çàü7ÙõóßÞ9ðɆ¨ÿ<þ¯ÖûÎãâc½­ÑÈ…¨œÿöÎÁø/¢þqþÛ;þ/ÙP×ÿpþÛûþ/ÙõóßÞ9Øÿ!›|ã?Î{ì»_ø¿¤BÔ?Î{çàü7ِô¯ú¿PÿbüËù¿°ÿ‡ø¿dCÔ9ÿôÏò¿²!ê?Sý¯öøóÿxø´Øl×Ï“Øi£'Qÿåü_Èÿ²€ñ_6Dý—ó!ÿÃü_²¡®ÿóÁÿÉü_²!꿜ÿõ?Y@öW6ùÆÿÌþ/蟅}÷ÿ—Tˆú/çÿÂú?ðÉ&UÿÚ'ý¹#*¼³ÿË5_7Ú5ÿ=âÿz |×6Òão‡ÿJü·ëY=oæ_šwýæ$ÍÿwñÖ`ýŸ…xû‡
-ó©Pôÿjþ[Õ“oõýl<Ÿ^l#iýo§ÿJ[ìÿ`¡‚ðECÑÿd¹¾ªùcÒõï|…÷àÿ‘
-Yÿ7gÿ½æÿÍ#ôÏA¼ýÌÿÅ’ñýÿªèöøoÏçÿ6èŸí¡|ÉdÿIþ¿p®…ú/<hw‡. at 0=ô¿\D¯B;…'½ÿ_aþÏÞÿeÓCÿ{PBÝò¿*¯´26êß9ü/½ã8 ²K=òÿÁ"ÿÏ5þ]
- ¥Ïÿ78ÿ…xþ'* É…ªÿ.€’óV¡þ˜ÿˆªÿ.€nçÿÎçÍøý¿,|^Ì¿ÎgSôB¡ê¿K äñ߸àQÿ‡ìþ‘
-Uÿ]
- õÈÿû€ü¨ÿ#òú_‡@éúêñ€ä¿l¨úïR (Yÿ¶¹ûXÐú—LÆñÿj Ûë-ÿ¿Gý/âíÇþ_¹Põߥ Ðíñß·ôÿ?1ÿíË…¦UÎÿeàÿâ€ÿ<þ/×ÊÿbþÇΓ
-Uÿ¥ü_úgþ/ÙPõŸÅÿÕzÿsÞ@ÿ,|¬·5º ¹Põ_Ìÿ…õ0þˆªÿbþ/ø?Y€ÿK6äõ¿Rþ/èŸø¿dCÕÿWkýOìÿbû?d“qüÏëÿ‚þYˆ·þ/¹PõŸÇÿužÿù?pþ›lhú×åü_þ/¨ñ/åÿ2ØÿÃü_²¡ê¿Xý/èŸäeCÕžú_íñçÿñði±Ù®Ÿ'±ÏFO ªþ‹ù¿Pÿ—Œÿ²¡ê¿˜ÿùàÿ’
-yý¯”ÿúgþ/ÙPõ_Ìÿ…ú, û+›Œã^ÿôÏB¼ýðÉ…ªÿRþ/äÿx€ÿK6Éúïfù:!*<Íÿ¥m…óYèÿ×óß»¶‘kšË(ñß>¬gõt¼™inÜýõ›Ócþo
-ê?° / ˜È„¢ÿWïߪž|«ïgãùôbéùÿJìÿfËÿ²¡è²\_Õü1éúwÈÿ3ÿlÈú¿9ûï5ÿ– 蟁ÝýŸ`þ/•ŒïÿW
-@·Çÿ–ÿÏzäÿXИ ˆ&ÛøÝþ×Aÿá\ÿÊaý­îЦ‡þ—‹hõOhc§ð¤÷ã+ÌÿY€öeÓCÿ{ÿOBÝò¿*¯´26ê¿é
-ÿå wüç?vi£Gþ?XäÿY Æ?OýŸóù?Îã"žÿ‰
- at r¡ê¿ØùoÈÿ±€ù¿l¨úÏSÿç|þç¼ÑÐ?Ÿó¯óÙ½€P¨ú/VÿûXÀîÙPõ_¬þò, þlÈë¥êÿ@ÿ, ù/ªþóÔÿ±íú?ØÿÂпd2ŽÿyëÿÀÿÃÂîþcÿ¯X¨úÏSÿǷσÿŸ…˜ÿ‡öåBÓ¿*æÿ2þ/¨ñ/uþæ<àü7ÙPõ_Ìÿý³€å_ÙPõŸÅÿÕzÿsÞ@ÿ,|¬·5º ¹Põ_Êÿå°þÃÆÙPõ_Ìÿÿ'ðɆ¼þWÊÿý³ ÿ—l¨ú/vþö±€ý²É8þçõAÿ,ìî?ü_b¡ê¿ÔùoÈÿñ€óßdCÓ·Ãà¢Â“ý_ü_Pã_Ìÿ…ý?,Àÿ%ªþ‹ù¿ °ü+ªþóÔÿjÿ8ÿ‡O‹Ívý<‰}6zPõ_Ìÿ…ú¿,`ü—
-UÿÅü_Èÿ° ÿ—lÈë¥ü_Ð?ðɆªÿbþ/ÔÿcÙ_Ùdÿóú¿ v÷þ/±Põ_Ìÿ…õàÿ’M²þ»•ü:!*¼³ÿËVþµSþ/zÄÿõü÷®m$Åïÿ3þ?(ñß>¬gõt¼™inÜýõ›ÓcþoqþûéæÿR¡èÿÕû·ª'ßêûÙx>½ØFzþ¿Ò¨ÿă‡ðECÑÿd¹¾ªùcÒõï<Îÿà¿lÈú¿9ûï5ÿ]ôÏÀîþO0ÿ—JÆ÷ÿ« ÛãËÿg½‡þ9ÐP¾h²ÿ×íôÎõ¯ÖÿXÐê@ÁôÐÿr­þ	mìÞõý—ÿ‹/ Ð?оlzèïÿIh£[þWã•VÆFý;ëÿå wüç?vi£Gþõ˜ Æ?OýŸóù¿óç?°ÏÿD ¹Põú?ïÌÿeCÕžú?çó?ç
-ÞÿYø¼˜Ï¦è„BÕ?êÿ¼o°ûG6Tý£þÏûõdC^ÿCýŸw
-ü?²¡ê?OýÛ®ÿƒý?,è ýK&ãøú?ïÝýÇþ_±PõŸ§þo×ÿÿŸ…˜ÿ‡öåBÓ·b at Qáiõl°þ/¨ñÏ~þÛ.þÈÿróßdCÕvÿWÔ¿U.@ÿ,Àÿ%ªþ³ø¿Žßÿã¿…þYøXoktr¡ê?»ÿk¯ÿà‘ÿaã¿l¨úÏîÿÚé¿òë¿,Àÿ%òú_nÿ×Nÿ¡ÒÐ?ðɆªÿìç¿í×ÿtÀþo°ÿC6Çÿ<þ¯ýøúLìÓ¯ðI…ªÿìç¿ôü8ÿM64ýërõ¿ü_PãŸÝÿõRÿùàÿ’
-U
 ÿÅü_ØÿËò¿²¡ê?Oý¯¶ÿÛBÿ,|Zl¶ëçIì³Ñ„ªÿbþ/Ôÿdã¿l¨ú/æÿBþ‡ø¿dC^ÿ+Uÿùàÿ’
-UÿÅü_¨ÿ˲¿²É8þç­ÿ…õ?öéWø¿¤BÕvÿ×Ký/äÿY€ÿK6Iúß4ÂŸŽŸ&ãÕòïè7õ÷xò÷Í6¢Â»Ÿÿý{Uaýü²Iÿ«”ƒD…§ÕÿÓç¿òÿírµ|\Þÿèþ ¤Çß…ú,â¿}XÏêéx3ÿòøö4 éý¿ÿàþ/û 1
-
-Aÿ¯ÖßU=ùVßÏÆóéå6’×ÿM¥<ÖÿY°¾húŸ,××5LºþQÿ™øÿdCÕÿíÙŸù¿¯,ÖÿXØ`‚ù¿Pò½ÿSü­ù¿…ÿ‡
-ÂM®ñÿºú{Õ©*äÿYwè$“®ÿå"îôIi#-ÿõo¼ÁüŸ¼ÿË&]ÿ{û_JÝò¿*¯´26ê߃ü/}ã8þµS=òÿ> ÿÏ1þ]Êu˜ÿ‡óõçqþ7ñü_T “Qÿ]Êõªÿ…õ?0ÿ—
-Qÿ]ÊuÈÿÏÿšñõXø¼˜Ï¦è„BÔ—ò_½ê)¬ÿ³€Ý²!ê¿Kù¯^õ¿pþ¨ÿ%êú_‡ò_=ÆÿÓ…Ð?Èþˆ¨ÿ.å¿ÒÇ«´Æþt@ ™|ãÿÕò_}öÿ:ÿû `ÿ¯TˆúïRþ«ÃøïÛç¿¢þ1ÿíË…¤UÐÿ¥áÿâ€ÿLþ¯ÖùO˜ÿ1óeCÔ1ÿ—‚þY€ÿK6DýçñµÞÿœóÐ?ëm. at .Dý—óaý‡Œÿ²!꿜ÿþOàÿ’
-uý¯˜ÿû?Y€ÿK6DýgòµÏÔð²€ý²É7þgöAÿ,ì ÿ—TˆúÏäÿjÕôÈÿñ€óeCÒ¿.èÿBý7ˆñ/çÿÂþàÿ’
-Qÿåü_Ð?Èÿʆ¨ÿLõ¿Úã?ÎÿãáÓb³]?Ob§ž@ Dý—ó!ÿËÆÙõ_Îÿ…üðɆºþWÌÿÿ'ðɆ¨ÿrþ/ÔÿdÙ_Ùäÿ3û¿ ö€ÿK*Dý—óaýŸø¿dÓYÿ‹å4íÔÏ߈
-ïìÿrÍ׍Úíÿ†ÿ«<iñÿ¯£éïˆôøëûÄ¿<}âß\eRÚØÅ¿ªnÄß(gœÚÄó]¬ÿgþPê§>ñïÿ닽HšÿíôoÂûæÎbþ'˜>úo^úêF5;€[ú×¾¥ÿe!Ærü0߬V#¥m}ØýÕÓ|³¨ýï¿.׳ùý¢ùã|±­gõ÷Ùîß8;}x\Fÿo|2ÚTf¨GÆXnfëÃ_mУ&þèg~BzŽÿ6¥^ó?ƒù}âÿ4{š/¾.;·q£ÿ×F·úÿæý?þs×Gþ2{úÛr[?þq°ch‡Ã †ƒo>ºàßÖ³Ùá냡1adÍéŸ7³é˃FÊ¡
-Güi²ý€x…«†ÇM|ZÔ§—4EPG|œ¯·?Ž>`Çñÿw=ßξԓo¼rÁ¿ÍgÿUßÏ6/oôñ7ù—zµ:ú!?ÉñO±X.N>a0¨‚;º ~ñoõ—Ç£+´:þþóßþ:þ¼h»æš×KŽ/øóòy1™ýœÌ¿=­.~Â_ë/§ÿÞé“hþõÿÌ&õüé·ï¡äñOñ×Ï‹õþ’×;N~̾ßßÉñÑs£Ú_=zh.|õ¯ÏëÕëWÿÑZHŸþÚ¼ü×ÍÚµ›ïÿö|ýÏZÔÿãÁ¨¦w˜óÿƒ…ÐsþÝìq›ú?öìõ¯°þÇÃ!^&iú_.â6Ô6Ò×ÿM\€þPwp€K&}üïxèÛ½òÿùúÄŸ%ÿ‹üê;€%ÓGÿùó¿­÷?‹õ^ó¿~䛘h–þuÇé_FΛÊg­ña¤íÌÏIýsäÿPÿ‡‡}JF]Èÿ…Jý–ïQçù¿0ùP™ÓŽóڍ´²Çœçÿœvt|ÁyþÏ83…£näÿÔ­üŸjåÿ°鞎›hçÿ¼2Ã㟢•ÿsÍ|tA;ÿ§õÉ'ÜÈÿ©[ù?u+ÿ§Zù??²CsrÁYþχƝ\ÐÊÿy?<¾à­üŸz3ÿ§ÿûyèùþ§SÚèãÿ‰ý?ü?åé–ü/ê±p)ù‹ü¯zöÿIÒìÕÿôÿôŒùü?ÖYxÑáË$]ÿKþ/ÖBþ¯<}âŸ?ÿZù?ÔÿâA»;íÑù‹¥þ³çÿÜ…üÎcá5ÿç|œaRöod³M„GFçþ¼ñ0—ýäôÿµKh£Çû¿÷ØÿÉBŸø³ìÿDÿÏÂ>%WÝÚÿYµ÷ºQ5t§œîÿ´1§xtAkÿç@û£
-¢U{ÿçÀ½9ºàFþ·º•ÿ­Úû?vtò=\Úÿi/¸°ÿӝ|“ö†ÇwòFþ·º•ÿ­nå«û?ÒÇ?E{ÿçÀN.håµ7ÇM¼•ÿ­ÞÌÿVÈÿþ<ôéÿ9òF£ÿçàRòo ¡E)ôœÿÏÿ`ÿ7ñöOšÿ x™ô}ÿOÉÍôzÿ·xÿç -þ«åf3o^ÒÚ¸ÿiíÿµù°ÿW6iú¨7ñ¬—Ä6zè_[¬ÿ± ýË&}þçxü?þúÄŸcÿ¿Æþ_†w#ôÿ‚é£ÿüþÛöÿÀÿÇ«ÿGëPù¡J1 9¥Oª¿ë`ŒS' ë°²øSÓGÿ,þ¬ÿ³°OÉ»[þ×öXÌÙ§þoGG;ÆÝÿ‡¯Üñ
 íú߯Ÿ4qÃÿánù?\Ûÿ¡«*_pÉÿ1<þ.ø?üɍºTÿû¨@€»åÿp·üî–ÿÃ]ðX_ꏎl.î’ÿ#œ\ð–ÿýéÿpðü<ôéÿYöcý…SÛöK£çúOyÿÖX8ô¿¼Pzê˜ÒFÿ‡«°ÿƒ…žñ¥´Ñ+þðÿ°Ï“ÿ³ÈÿqÐ'þ,ûÿ±þÇ‚VwÀåÒGÿùóUký§Bý?^óÆÙ¡Ž‚IË V'ÀãgØàíiPÁbðÓÒGÿ,ù?ø¿Yاdü­üŸ¿°ÿ;أ̙oçÿ\ówü	íüŸu'´÷[3<nâFþÏßÊÿùû¿C¥N~Šù¿;þ)Úù¿;þ„Kû¿O>áFþÏßÊÿù[ù?)ÿwœ½óóêø›¼ÿ«Žª¹û7óþÍüŸGþïç¡OÿÏ’ÿÃù,´v~#ÿ'Šžë?åó¨ÿÀÂîþOÿ“JOýë”@zä¼óÈÿpÐ7þ)}s¯ø;ÄŸƒôøžüŸBþƒ>ño®J
-Mý»€þŸ…žñ/þ3ü¿,¸;T—Lý³ÔÇû?¯ùß*T•r„ÓŸ«`\ó§™_¬+üäôÑ?KþúgaŸ’3·ò¿æÂþÏaÓÓÎö*Ž/hçOr¯æBþ7W7·ò¿æVþ×\Øÿ©üI—ò¿áø>´ó¿M/wÜÄ…üo8:æÚÜÊÿš[ù_s+ÿknåÍ¥üoÿ˜ò¿#w|Á[ù_ófþ× ÿûóÐóý/åø~ïÿXÿc¡OüYòÿð±ÐÚù‹ü¿(zöÿåÏÿÅú/0/“týžüŸCþƒ>ñgÙÿ‡ùÚÜiþ.—>úÏžÿñ8ÿ÷Åoù«*3¬tRP;
-') á¨‰óq
-¨2£‘™ÐÅüœôÑ?KþõYØ/ɇ[ùŸpaÿ_Ó[„ÓÎöÿùãcáBþÇÙ£ÜK¸ÿ©ôÉ7ò?áVþ'\ÈÿhuòM^Üÿwü	—ÎÕÇŸpiÿßèø‚ùŸp+ÿnåÂ¥ó_½=Ö…ü2Çá¾tþëÉóðVþ'¼™ÿ	Èÿü<ô|ÿÓ&¡ùï*ä8è–óQÿ‘…K‡ÿ"ÿ#‡¾ý¿Mh£Oÿß\†þŸžñ/¿ÿõŸXØ¿ðéJ%]ÿ–'ÿ§‘ÿã Oü›«BJ=ÆðþÇBÏø—ßÿ‡ú?,œÿ+š>úÏŸÿméù_&Žê¿zÛŒÁ61ÿëON€Œ·Zsœnþ²ªÔ(ÑÏü„ôÑ?Kþïÿ,ìSröVþ×^Øÿ§†GCí…ýÕéíüïðxK™½pþ£ÖG§Ú[ù_{+ÿk/ä]u”Ŷ—ò¿Ú_ÐÎÿzk/¸´ÿÏ7ò¿öVþ×ÞÊÿÚKûÿÌÉOq!ÿkýñ­¾´ÿï$šoåí›ù_‹üïÏCŸþŸeÿü?,\:üù?9ô\ÿ)¿ÿë?,ì0à…ÒSÿUJ}Öÿ+äÿYH‹ÿC½/–ë§úqü4{Z®tj#}ý߃þŸ…õÑ\×óò¿Ù$çú/Ñ1ÿL°Öiû‹Ò¡™"ÿÏÁ­øOŸæäg Gü}…ýß,t‰ÿ|J{âßü1þ•®Pÿ›…Žñÿ²¬×Óñ¢~ê¼èwÄíù_u£›ë0ÿãà¯n8ÔL¥’¤ÿïæËë¹ÂMý7š?Óå°ÿ‡…þ?,ŸVÏÛÙzð¯Ëõ
-}$’ôßüÅl;ÞÖ÷imÜÿõ™þPÿ™¨]6‰ãÿbº\'·ÑcüßíÿƒþËó·ÿ÷§ÿl†}ŒÿB¹¬ÿéì{–•ß=ÝÖvù¿Fþæ—æ‹Á¬ÿpp=þûßçxÒãbI8ÄŸ›ñŸ>?=ýàXÿ=Ä¿
-qý×¢þ+ãÿ4{êÿÃÇ ‡›ùÿCüCó÷¦éÿgAãü?ÑtÔüCï6nê_›ÓþßÄ_Ð?ê.üs¬^        ~ßüª™-l È
+‹ žð„K ì]]sã6–í×ѯàãnÕ8Á7ȼ%Ó•šÔl²S›tm퓊–h›ITI´Óί_€’ݤH‹HÞ¶‚{4™¶$ yïAœ‹ªÒõR‰›x³d‹›ÅöqŸ•ûo?Œ
+b ¥´ÿR­hõž
+Qý{ÄJL0ÆÙó%ÑìC$Ç=Œn<îËtEnï‹ûU¾9S.Ûí!´ÓþÛ]±Ï	.³?”*-µùžJ"9Úgì¿ÏVw£8ÿ©6ûk%Ñþè³ÿá“amX«ƒ½ß°¿þbƍý5£ÆþdœS<Àíÿíòq½~ž}íÃ@|%œã™$þ=üWBqÃ3 à’®ªþ_Rä?ŒÅ£(æ‰N’HqGTšÑ7'SR1­â8b‚«$Ò:‚Dæ53¿!§ÆnÕ‚EBª˜FT)¥‰-oªÐ¶<ÓÉKy)“8⊱H1!mñ$æLG	5…èKAÉÄTdÞʘ›Bš›v„ˆHôÚ<•±9HÛˆq[R0ÉcqaÌ_J
+stLUM0RÕ¨AíïXl>T/å¤9*eêa„ÙºDlKjS™©‘ÙvékãÊ¢”öx”9[¡ñÚØoýµ¹šÂ\sŒT™­­TE´}ߨδDhR5‘h¥ªsŽsUª
+•|)gìÃxl.,±¿66ªŽP2jþà¬Þ¶©Û\Dmß'Ì0Í”qb.˜ù]ã ©1eL™‹éD±DóÇ:&ÂZ]6Š2sà”ÚÏ$ç²:Ê„hsÁªÃ4)hlCDuybB—16EŒÛ2ü‹K{”̹±-+%ÌɈ¤Ñ°±IhÕZT~F¥9V5RùÅ,ß”;Û.'Úx‹ÐÑëyW ¯S**OP¯ŸTŸ
+ãšµ·<áJ6Jà_øÂ¾ð…/|áëŠ^³Eù¹Œã,f"™Ý–ù:3c at F'„é™}ØÍöûl±$–¬z¿Ÿï7›|sÑãûÛU±ø=[šê¾ö#Û¨8óü¿.7叼½ó\çÿ5aLšçó$ŠÏÿ Ø›,úv™=gz£ã?»?*ê|íÃCLŒ3ü7oòÍ]1¼óüg’pq2ÿ§„ùù€ãͯØýí;C÷§l³,vó|iÞ}ÿX>d›2_|ÿóG;Ý¥ë|õl¾¡r¶.–ÙêoæoÎG›t™÷ÓUôb—EægÑoËlWlþ£\ÿgôï—–¢XÉپ̶[s­šµµÿüÏ?m}4&ñ7œ©Ù"]<dÑ>ÿÓÖJ	Ñ¿~˜mž÷ù´P!™íó[c³û½yÃfÛªùâµJûÁá«t›/ßP5Ë7y™›:ŽÚÒwÛGûås¶·γϋl[æÅæø™eÂ2ZeOæœM³?¶¯¥W©iݼ1?‹žÌ¸b™EÛ}•ûE´Þï¢mšEëE->ÇU{Ñ>ÛFërg¾¹·ß¤Ñb]<™b¥ýWÑbu·zÜ?DëõçèÁLì,z(£ýóÞœ¼¹ÖŸí÷™ÕØ"ób[F«uÄ—›âûaõG´Ë¶óû¢XFÛM­Ò‡»¹)³Xoç«ì>]<Ïn‹ûboí⊪oŒQ~û¯W\üËÙ½½ Ç£:~©ÄÁ<ót•ßoÖÆK¦Ë¥¹âûª˜­Wè6/÷Ñ‹Ùþ‰øðÉS¾+§Ì¶æˆwÑ:ݘfl=ß™+Ý™‹ýdþ+ËílVwPú—qPú¶ƒê¶ƒRtPã 1}÷Ê®ÌA©O·”¡ƒÕÉ»wPþ—qÐ3=hÒvPŽÊé7ÆÁÞ»ƒŠ+sPæÑƒ2ÒvPz·xù—qз{PFÛ*ÑA¯ÃAÕ•9(÷éAYÛA:èuŒAõ_ÆAÏô ¼í ô:4¾2>=¨h;hŒzšüeôL*Ûš ƒ^‡ƒÒk“’¤OÚ!%QÔ’*ÕïßE¯MLzÛEÏt¢]bªI×â¢×&')Ÿ^´CN¢¨'U.¿½6Aém=Ó‹vJ¥kqÑk“”´G/Ê;$%ŠšÒµ¸èµ‰Jo»èÛ½(ï•(ªJïø‰>îøo»`¼6<ò)I0ÿÞ¶ÿáï1ÜÀÝþv?Ú½ö¯ò
+ó'ûk»þCsªÐþ¸Ðþëlíòýù¿Äû+ó93åpýèÄq^À¸ÿöw½ü§¬Ùÿ3óÂõ  7
 êï”ÝPìÂD7ÿ÷Ïc怾lüGSœjó
+ÍðùoÛ±J÷ãx»ýa˜ÿ}ö_®óÁ>àa©ñù—Ø?_B<ÿWö·@öùŸbþ\hÿÛ"Ý-çViòh£zÂïÍÿ]³?£TkÿCàWÇ4ÂÁ¨pâÿA¤vn£—ÿŒŸò_J†ü‡Àoÿ÷ý/Ñ?Šõö±Ìv6|`‹}AHpäÿnŸosä
+xð_ä?ªûÿù*œøo>ÈÊy™Þ»µÑ?þ§'ügöä? íaãmþ/³§|‘1|ÙüQœjFø!ÿ¯ÀùôÛßü]fë!nàfÿ*þGáþ0¸Øþ›b™y:Á…ó¿‡ü¿†ø„E0þnöH÷sSƱþñŸ8±?£¶ÿÇñßô 7‡€Íÿöÿ˜ó]À½ÿ§Š¢þûÛm]Ú¨ì¯õEûë'ŒIÿǾ™ê¬k@û;Ûó¸N]6‡í»ÿSAOøÏ¹ÂùX[Îò2ÒJk"fÕûu¾ßGäð÷]±ËòûÍaÍl·ÊÒ§¬úà±˜­ŠEºš[·00a*(ʇlwøDr‚;ȼsxöÿN·f¯þ_bÿû/ssÍ6‹‹CzŸÿøéøWë¿°ÿŸŒD¬Úš5þ‡Ýv ðìÿW¦¸¸
+÷ùÎ(Îÿ€@àú¿ áÉÿuº½¼^þÓÖóAþÃàe †@˜ðáÿ:[;mÚÃÊhëþOqþ³_ìL
+‹~ÎÖ¿eºú.ªó8V$Ž~ÿ¡VàÇ]–¿bÆccÓfOûlùR ¢ÒîãZ+ðý¢ÌŸ^+°PšZŸ6éI³z
+ó]ù\¯À¢^Ãÿîò2»M¿÷FóUöo›Wë¥ %²ÑÄÏév[;‰ãQÔÏbSl5Dœ4ÎÂ~ù[z»ª•P	«øåÇ_çŸ6ÆíL™×"õ~(ÍÓõÉyvžæoëmg
+¿®ÒÛæï¹âª^à²Å*Í×_ށª¸~š¿~ÚìE^¯T"êþùx¸’óšßö·5§éøö×ÇÝöõۯͅáÖÿo‹½Müç¸ÌCÿçç@€úØpÿiý_£þû›RÔ% ÀGÿ±ë¿Qÿ™>ö‡Ðÿ5Îÿ€àUÿæqMÇNúÂëú¿±pÂhCÿ74ÆÁÅû†oÿïroöêÿ9öÿð±?„þëÿ`ÀN•ÿC8 vہÀ³ÿYÿWmýóÿ€€
+Ìý2<ù?½þ/‘ÿ°—A0N;TøðBÿÇù$Yݧÿë¶þ/‹f¦þoª`õmýŸJ­jÚú?‹%«èÑÿuŸþ¯ÛúÄ“Æ1téÿ¼^ ­ÿG¢qúׯdþ¯ûôݧÿëýŸZ?‹¶þ‰¤Q ­ÿKVoâœþ¯Ïêÿõÿ÷÷þŸÀè˜ÿ>ö·ó¿.mxÌÿ
+›ÿ秇ýG×ÿdÇú_Ìÿ‚WýO&ÒØ„Ò+€™JÌPHóºÈ™T‰
+âÍý}‡ÿ ë?qÿ'´V~âúÏ à9þ›|ý'Áø_Š\žüw¢¦×óŸÂç?xÚrýû¼ŒÀñ&&|ø²þ÷ÿÁA’!úŸÒä‹zGNõ?'RiÖ,P×ÿ¨H(áõ§úŸŠ'õ§ú,®‰R¤Oÿ#}úié*–ªÑD[ÿ“„Åõ³héÂxp­@[ÿ£´QCþGúô?Ò§ÿ‘–þ'³FýOZ­¶Q ¥ÿIלÓÿÈYý þ÷~àÞÿ+ý÷ý­þÇÚðxþ3÷|þƒ€ý!ô?Œÿ‚Á—ü¿œhkJÜ– ªF
+à81v®Ëš%‰ä)…7÷÷	þƒ¬ÿBý]‹¿Pÿžã¿é×áü/(»¡8ù.<ù?ýú/ŒÿÁaø…ë¿B…ÿAô\ÿ
+‚Ô¼ê[ÿ¥:Ö±¸¶rJµ×	©kúêXÿ%xm˜êXÿ¥i£@þ£úôÕ‘ÿµ!R©Îõ_ºÖÑz
+]ë¿’zýGõé?ªOÿQ]ë¿$¯«#ÿk]æRë¿þpNÿQgõ…úÏûïü?whÃgþßÎÿâüÿôp·¿€Ñÿêð±¿)»´áÊù?Aàcÿñóòöú?ÿƒàUÿ³ä“±“ú'­«¦Æiî *pX÷®áÃýõ´”?\ÿ<ÇÓïÿˆú?⛹0<ù?½þ‡üÁqü…7ü@áÃýó¿‚à Ɉ>ýOtìÿ(;)p²ÿ#Oj+†D‡þ'µ¨hé”ÉF=úŸèÓÿD‡þ§µªèÒÿâú1tè²q¡:ô?ZEŸþ'úô?ѧÿ‰®ý¥®C‡þ—ÔBÑ¥ÿ©FsúŸ8«ÿ	ÔÿÞ<ljK^óÿ¸ÿÜìÿîç›b·NWs3(vϵáþü/Ì ïÿÀý?Æ{ÿ/aô‰ú?|ì?¾þ«Ûë?1þ¯ú/Ü<ô%й)Àº‘ ÖÖÁ•äM
+˜àó»…ÿAô_ÿ kñ'ê¿áÀ‡ÿ ë?qþ”ÜPÌ .<ùO]6 ñ™ÿ³úÎÿM_û»ôÍ^öhxÚúøÜÿÕõ_`üG¨ðá?HüæÁA’—}ñ²cý·âµÈ	Ù±þ›1Q¯¡ÿÁE£@{ý7gq½‰žøÙÿ!;öÿTš4΢ký·¨ŸE;þ#õºÖ7jè‰ÿ}ñ²/þCvÅÔ£7dgü©dGüG}5¿<ÿ!ÏÆHŒÿx?pëÿ‹é"/ž÷}»þÏÁø_ þ6ÜÇFÿç¨ÿCÀÇþ¦”viÃgþ‡bþøØüüß­ç?Ìÿ
+„Zü‡ä”î˜ÿ[62 â
+J«Ç˜µ&‰Â-€ß#<ûåÒ†OÿOpÿøØdÿgÌÿ‚®äÿ<ûÿéó?`üÎÿ
+OþO¯ÿ#ÿA@Ž Ø	„	þƒèÿ¸þI–÷éÿ¼#ÿ‰kŠ1ïÈÿ ›Úúœˆzíü”Ö²ð>ýŸ÷éÿ¼#ÿƒÐµ,ö¼Kÿ§²^ ­ÿKÎë:ô%êÇУÿó>ýŸ÷éÿ¼Kÿg³èÐÿ¹¬_êý?iXóœþÏÏêÿõÿ÷÷þŸÂèõ?øØß”rIÿï7ÿ‹ù¿Aàcýã?aðªÿqJB¹Jœô¿8iêšÅ4a²¡ÿÅ\Ñj_à¯}®ˆ6<û—íßýúŠý?|ì¢ÿáú_´”?Ôÿ‚‚gÿ?¹þGPÿ»ÁÝŸC†'ÿ'×ÿÿ08Z`@˜ðá?ˆþ‡ë¿@pdhŸþGÛúSImA(mëÊ<ΫZ–þG…ŽëMtéµ%Æ´Oÿ£}úmëL2Z?È®õ¿ëµµ]ùßIýzô?Ú§ÿÑ>ývè‚6¬Ù¡ÿ†Ö´ô?¦§yNÿ£gõ?ŠúßûÁÅý¿ùÊYø;ÂIÿãÊôÿDH†úœìoþy8›ýµÕ9Gýîö_¤‹‡ÌÉ.³?QvÖߌýìü?W¸ÿ7|íŸo–Ùgr™¸óŸK…ë¿A0Ðþ«ì)[õµÑ?ÿËNì/Áüo Àܯac ÿÅC¶Ë6‹ç¹M4ßçv¨Âýüç'ü×õ_(Ë	ùÿGú¼Ÿwót¿/yZæOyÙÚÌùþo—aüÒ?häÿöáyŸÛøÏêö¿Mwe^æÅ	‹<ø/(æÿŽÿÃÆ@þo×·ÙÎŽ ìïÞh£Ÿÿâdü¯$ò’â däù¼íïç¿<ÿ
+ù‚i™b.ò¿{Âïî÷!$òJüé0†òÿ!Ýe˹ùbþö’wýO)ù_@€ÙßÂÆxü{IH/ÿëë?ü7 Ècðm Ä6aü—Äø/´ÿtñ_ÿœý
+ù?]ü®ÿÆ…ü)þ‹·â¿æÿUÈÿ1ÿÓÅáú`üWØÈÿ‘â¿Nã?”¤¸þ”0|ù?Nü=ÿB¢þ‚O›ü.Ï–ØЁü)þKµùñ °÷Œ Cù?YüÞÿA€ñ_ac<þÿ…ñß08 ã¿BÅ þ_¸œõ0çø/Ìÿ‚öŸ.þŸÿ@€úOØÈÿéâ¿ðùÿ6òºü_ÿ	Œÿù?]üÆ‚ Çÿac ÿ§Ëÿ…üæÿ
+ù?RüW;ÿBþƒà§Í¾Ü=.ì 
+û 1ÿÓåÿBþƒ 󅍡üŸ,þó?€ ã¿ÂÆxü9ÿÎÿƒà` Œÿ
+îü/6v®ß¥
+ëaÊéþÏ$ÇøOàüØpçYl‹Uqÿ|ùÀ–áŽñŸŒ`þ?°ù°ËÒå|ŸßšëvæÚxŒÿ˜Äñpü6ÆãÿÛ@îó?šcþàüOØÀÿE±Ë.`¿Wü‡Ö8ÿuƒ=@È‹ÿçÚpÿK-pþ,pü(ðÿ5ö{›.~Oï³y¾ìnÃcüO0þ‰4†Þÿßâ|îü’áó?Pÿ	Nüß{;Þw?¸æÿUVÿe׃€ÜP‰]@¸p½ÿǗ˾¯p×)çõ_¸ÛÿÿçÒÆeö'ŠIB	ã¶ÿç¸ÿ|íÜÿõ¢6Üùù¿ 0Ðþ˜ÿëʁÏac ÿ1ÿו󅍁üÇü_WÌþ6òó]9pü6òó]90ÿWØÈÿqòµöÅü_Pø˜–)v áb ÿ1ÿו󅍡üÇü_׍Ù4Æã?æÿºF®?Áõ_bÿÙ„ñ_
+ã¿ 0ÐþÓÅaüpö7läÿdñ_×ÿƒ ã¿ÂÆ@þÿÅ[ñ_¸þT!ÿCÆ@þOÿÅ‘ÿÀø¯°1ÿ#ŝÆ(Iqý(aø0ò¤ýOç…Àüß0ø´Éïòl‰]@ Èÿ‘â¿T›ÿÿ{ÿǰp1”ÿ“Åáýÿ6Æãÿ¸ñ_ÿ
+ƒãóÆŠAü§Æaþ7´ÿtñ_øüÔÂÆ@þO—ÿŸÿ@€ñ_ac ÿ'Ëÿ…ñŸ0Àøï°1ÿÓÅaü'pü6òºü_È`þ¯°1ÿ#ŵóÿ(ä?~ÚìËÝãÂÚ°ù?]þ/ä?0ÿWØÊÿÉâ¿0ÿ0þ+lŒÇÿ‘ã¿pþ‡ëñ_¡ÂÿÅÆÎõ»´a]L9Ýÿ™äÿ	œÿîü/‹m±*îŸ/ߨ2Ü1þ³Úÿã?§Ç û—»,]Î÷ù­¹n÷g®Çø)ÿ Çac<þ¿=ä>ÿ£9æÿÎÿ„ü_»ìö{Åhó¿ ˆoìÆXü?׆ûø_jó? ¨®?Çñ¨Àÿרïmºø=½Ïæù²»
+ñ?Áø/àò¯°1ôþÿçëp翐ŸÿA€7þ°áÊ*.×}^à¤ÿbøO¡¨ÿ@ÀÃþ‡  ‡6.³¿òIB‰éø	cB0´?¼íÜ ò’6ÜùÏçhµÿ%	€œÆ•ý…’8þÆÿ„¡ü¿$P?ÿù	ÿu•ÿ
+ù?=0ÿOØÊÿK 9ßÿ9¡
+õ_àêÿ°1”ÿ—$ òà¿ÀøOàø?låÿ%	€úù/NÆÿJ"ÿa€ùÂÆPþ_’ ¨ŸÿòtþOrä?>¦eŠ@¸ÊÿK ¹ßÿ…Äü¿0Àü?ac0ÿ/H ä>ÿ¯4ÅùPœÿ#òÿÍ@½ü¯¯ÿ8>ÿSœÿAe‚ë?BÅ0þ³éâ¿pÿ7µÿdñ_8þÎþ†¡üŸ,þ÷Æ…¡ü'þ‹·â¿4®ÿUÈÿ1”ÿ“Åáú`üWØÊÿqâ¿Nã?”T¸þ”0|Cù?Jü=ÿ’¡þ‚O›ü.Ï–ØŠ¡ü'þKµù/ÿ°÷Œ ƒù?UüÎÿƒ ã¿Âƈü5þã¿aPÙ†`üW¨Æ:]ü—Àø/µÿdñ_ÿßÞÙí¸­#kô‰èÔžûÜärm(¶ã™±n÷ÌÛËvz÷¶ãnQE~@Pkûb˜½Hªø©ÈûŸÎ|cõ¿Xþ‹ú¯ò_¾±ú_¬ÿõ	ä¿}cõ¿Xþ‹ü§öÿ¾±ú_¬ÿþK ÿ—o¬þçÉÝ÷ÿiñ_—Ýóñð²÷ḻú_¬ÿþK ÿ—oÌþ—ÊQÿ—@þË7ýÏÛÿ‹ú¿„óØT俼2Ãÿýn¬õ'<cü‹IùŸ&Vä?%Pÿ÷Íÿ_/€ŸúŒÑðÄügèÿ'Á2þLJõ°Z<o¿~¸ÍãgÆþ¯mØÿI`ÿ盌þ?, ¥×ú–þ¨ÿøÆâÿrXlÿœïÿûªcý—PwŸêÀà–lþ¿óŒûÿ±%þþ%û·XüÍ~?
+ËŸÃf½Ø®~ûŒ×ÿÛúo_“ÿÒÐ#¾kÌëÿçß’îzúÿJ`á÷MªÿÝäSŸ¿I:ÿiû“ÿu;öÿäü§<éã‰ÿ¤<cÚøW±	§×¾¦ÏÿÛñûÆ¿<sÇÿzýã¤g¤û߆X1þ
+Œã?¥ýOÚþï<þùä|côJûŸ´óß³ÿ}¨yÿ“@ÿßýŸÒþ'}ýo«ÓÿÂ|ýï£ÿSÚÿÌñ¿«¸ÿYûßýŸÒþ'íûÿóþ?ü×@ÿßýŸÒþ'íþÇKý¯ø/áóp˜ übôJûŸëÿé_ã¿úÿøÆêÿ„ö?3ÎÿbìÈJ üï›|þ?lÿ“öýÇÅÿ®£þ/á: Ä@bò¿)˜ÿjÈ)0޹üù	T}cô¿\þ‹û%ÿòÑÿLù¯ö>ÿEÿg	uÄÏý/—ÿ¢ÿò_¾1úŸ)ÿu›ÿˆþ?êªá
+À1Fÿóä¿êÛúo×Î$|Ým¿o×+¦ §ýÏ”ÿŠ÷þ“ÿ0®ÿ$Àübõ¿Xþ‹õ_›ßäó?sþ‹ü·„_/`L>1ù_ÌÑÿM‚qüËå¿xÿ“ÀùoŒþ—Ëñþ'ü—oŒþ—ëÿEþSùoßý/—ÿ"ÿ)ý¿oŒþ—ëÿ…ÿèÿå£ÿ™ò_÷ýþKø²{>^–㦍yÀ!FÿËõÿÂ	ôÿòÕÿbù/ú?H üï›|þgÎQÿ—p ò_NI÷¿ký)ÏÿÂâ‡ë[…ÐöãÅŸUÓ„–ó	ˆï›tÿ_¯ŸüŒÑðÄügSÑÿO‚aü?ëaµxÞ~;ýn›w~›û¿&°ÿ“ÀþÏ7ùü\ J¯ÿô-ý4PÿñÁÿåþ°ž`ÿ¬üGßSÿ•Ð}
+Ì ŽÉåÿ{ÏHßÿ‡¾åû_	—hÙÿ;ÅàÿköûiXþ6ëÅvõûgÌØÿWä¿4þôuýäü[ÒýïBÍû¿~ߤú_O¼óé-Iç?]uò¿nûžó3Æÿ JxÆ´ñ¯bªºjÚñü¿;ý0þfÿõÈ)ÏH÷¿-ý$XÇJ ¤ýßyü»HÿW
+|ÿë«ÿS }ì{ã"ù?	ôÿñÕÿ)
+€’×ÿ¶ª#ù/	Ô}cõJ þóý¿öÿ¾±ú?¥ÐÇþw7ûÿð_ý|cõJ ý·õ¿Ðà¿„ÏÃq`ð‹Õÿ)
+€Ò×ÿ.pÿ»úÿøÆìÿ„@éõÿØÓÿ_Ûßdôÿa ýûýÇõýŸþÿÎ?ÿé?fŸØüŸÿÆ’ó_-ù/Öñ/–ÿbÿ'íŸo¬þËñý¯ò_¾±úŸ'ÿÕÞç¿øþOBñß3VÿKå¿b…ÿ
+ÈùÆêžü×mþ#†È÷_êªá
+À1Vÿ³ä¿êÛúoÎ$|Ým¿o×+¦ §XýÏ“ÿŠ÷þÓÿS¸þ“ ó‹ÙÿRù/êÿÈù&£ÿyó_ä¿%\^¿ÈyÅæ].ÿÅýO¬ã_,ÿÅûŸÎ|cõ¿Xþ‹ú¯ò_¾±ú_¬ÿõ	”|cõ¿Xÿ/òŸØÿûÆê±þ_ø/þ_¾±úŸ'ÿußÿ§Á	_vÏÇÃËrܳ18Äê±þ_ø/þ_¾1û_*ÿEý_Ûßdô?oþ‹ú¿„óÏ_‘ÿòÊÿ÷»±ÖŸðŒño,&åšÐ“ÿ”@ýß73ü½ ~ê3FÃóŸM ÿŸËøÖÃjñ¼ývúá6œû¿Ó ó¿ö¾ÉèÿÃPzý§oéÿ¡úo,þ/÷‡õÇöÏùþ¿¯:Ö	uó©n™Ü’Íÿwž1cÿ?N	ø/à¼ûbÿï‹ÿ¯Ùï§aùsجÛÕoŸññú[ÿíkò_hÿëóúÿÀù·¤ûß…žþ¿Xø}“ìÿäSŸ¿I:ÿiãÉÿºmèÿ!!}ü/ñŸ”gLÿ*6¡ª«¦ÏÿÛsÇÿzýã¤g¤û߆Ð1þ
+Œã?¥ýOÚþï<þ§ýù_	ä|côJûŸ´óß³ÿ} þ«þ?¾1ú?¥ýOúúßžÞ¨ÿJ þá£ÿSÚÿÌñ¿«ÈI`ÿï£ÿSÚÿ¤}ÿÞÿÇ€ÿèÿã£ÿSÚÿ¤Ýÿx©ÿuÿ%|Ž€_ŒþOiÿ3cý?ýkü—@ÿßXýŸÐþgÆù_Œ-ßHàýß7ùüØþ'íû‹ÿ]Ký_¯	˜iÀ'&ÿ›‚ù/òŒã_.ÿEþC¿oŒþËÕ|ÿ#ü—oŒþgʵwù¯šû_%Ô| ì£ÿåò_-þ+ þë£ÿ™ò_·ù*¾ÿ’PW
+o Ž1úŸ'ÿUßÖOÿšó	_wÛïÛõŠ)À)Fÿ3å¿â½ÿä?$Œë?	0¿Xý/–ÿbý—Àû¿oòùŸ7ÿEþ[ï	˜iÀ'&ÿ'6ÿÀ’ó_ü—ãø—Ëñþ'ýŸoŒþ—ëÿÅûŸò_¾1ú_¬ÿùO
+¼øùÆè¹üùO	ìÿ}cô¿\ÿ/ü—@ÿ/ßýÏ”ÿºïÿð_—Ýóñð²7mÌ1ú_®ÿþK ÿ—o¬þËÑÿAïÿ¾Éçæüõ	¿&`¦Ÿ¤û¿ßµþ”gŒ`1iýoBCþSë¿oÒý½þ}ò3FÃóŸuOÿ?	†ñ?þ8¬‡Õâyûíô»mÞùmfìÿšÀþOû?ßäóÿq(½þÓ·ôÿÑÀþÏ7ÿ—ûÃz‚ý³ò}¤þ+¡úÄà™\þ¿÷Œôýè[ê?®#Ð2	øÄàÿköûiXþ6ëÅvõûgÌØÿWä¿4TˆïëúÿÈù·¤ûß…š÷	ìþ}“ê;ýØç•ôóŸºm:ԏÿ%ÿ“òŒiã_‡>uÕ´ãù+Æ_ÁÜñ¿Þÿ8é3ιÿM„qü¹ÿí‡ýŸoŒþsÿÛý|cô¿\ÿÎ$üòÑîûÃaÿï£ÿåúÿà¿úÿøÆèžþ?w÷?v]À	Ÿ‡ãÀà£ÿåúÿà¿úÿøÆê?÷¿ýÙüöM>ÿ¹ÿíOä:1
+øÄäS"ÿÕŸó_§FþK€qüKå¿bEþCÕ_ßý/ÿê/ù/ê?ÈùÆè¦ü׍ÿcþ‹û_%Ôÿ=cô¿@þ«¿ä¿øþCù/ßýÏ”ÿ
+7ûÿÈýÏ"êªá
+À1Fÿ3Ýÿvûýo×Î$|Ým¿o×+¦ §ýÏ”ÿŠ7ëÿÉêÿÆõŸ˜_¬þçϝ÷ÿ‘û5ÿòM>ÿså¿úKþ«Ã× ÿå“ÿuÁþ_=ù/Æñ/×ÿ‹ú¯Î|cô¿\ÿ/ê¿ÈùÆè¹þ_Ô$ÿöÑÿrý¿¨ÿH`ÿï£ÿåúá¿úùÆè¦ü×}ÿŸ€ÿ¾ìž‡—å¸icpˆÑÿrý¿ð_ý¿|cõ¿Tÿ¯Žü§ò_¾Éçæþ_Ôÿ%\G€ü—SÒýßïÆZÊ3Æ?°˜´þ7¡¡ÿ‹êÿ¾I÷ÿõþ÷ÉÏ
+Oìÿ×Tôÿ“`ÿãÃzX-ž·ßN¿Ûæß&mÿwÎÿ7Üÿ ýŸoòùÿ¸ ”Vÿ9÷ÿkéÿ£úoþ/÷‡õûSÏÎëß“ÿ–Ð|bðL.ÿß{Fúþ?ô-ç¿®#°dð‰Áÿ×ì÷Ó°ü9lÖ‹íê÷Ϙ±ÿ¯ý%Pÿõuýäü[ÒýïBÍû¿ü÷M’ÿO‡õóz÷è5ÿ!û{ÿsSuø/¡úT¦ ¿¤®ÿaú±ï+éç¿uÛÐÿGBúø_ò)Ϙ6þUlBUWM;ÎÿmlsÇÿzÿë¤g¤ûÏý*Œã_ ÿW¹ÿ‘ó	¼ÿùÆè?÷?þáÐÿË7FÿôÿºÞÿÈù¯ºøÆè?÷?þá°ÿ÷Ñÿý¿®÷?â¿úùÆèžþ_w÷¿v]À	Ÿ‡ãÀà£ÿú]ü'ÿ¡þ_¾±úÏý6„¿|“Ïîü¹Î¿Ó€OLþ7ó_-ù/Æñ/—ÿ"ÿ!ê¯oŒþ—Ëñý¯ò_¾1úŸ)ÿÕÞ翸ÿYBñß3Fÿ‹å¿jî@þË7Fÿ3å¿nó‘ûßEÔUÀcŒþgºÿñ¶þËý*¾î¶ß·ëS€SŒþgÊÅ{ÿÉH×`~±ú_,ÿÅú/ü—oòùŸ9ÿEþ[Âuþ%ÿå“ÿuÁüýß$Ç¿\þ‹÷?	œÿøÆè¹üïÈùÆè¹þ_ä?%ÿöÑÿrý¿ÈJ`ÿï£ÿåúá¿úùÆè¦ü×}ÿŸ€ÿ¾ìž‡—å¸icpˆÑÿrý¿ð_ý¿|cõ¿Xþ‹þÈù&Ÿÿ™ó_Ôÿ%\ç_ò_NI÷¿ký)ÏÿÂbÒúß„†ü§êÿ¾I÷ÿ¸Úÿ{¿ùßô+€GÃóŸMEÿ?	†ñ?þ8¬‡Õâyûíô»mÞùmfìÿšÀþOû?ßäóÿq(½þÓ·ôÿÑ
 @ýÇ7ÿ—ûÃz‚ý³ò}OýWB÷‰À3¹üïéûÿзÔ$\ eÿïƒÿ¯Ùï§aùsجÛÕïŸ1cÿ_‘ÿÒ@úÓ7Öõÿ‘óoI÷¿
+ïÿ8ÿñMªÿ¯|úiç?ñäÝ6œÿHHÿKþ'åÓÆ¿ŠM¨êê4ðUÓ´ãþñ/ÏÜñ¿Þÿ8ééþ·a<ÿcüËcÿýâyÿ×sþ+ýŸoŒþèÿÏýøþWý|cô¿@ÿŸxéÿCýGõ_ßý/Ðÿ'^úÿÐÿSûßý/Ðÿ'^úÿà¿úÿøÆèžþ?ÿ¸ÿ1rÿ“ÏÃq`ð‹Ñÿý.þwø/þ?¾±úŸ¿ÿÏyÿÉk`÷ï›|þçêÿ/ý¨ÿKøµcð‰Éÿ‰aÐñ,9ÿEþO‚qüËå¿ÈH`ÿç£ÿÅò_§-!þ ÿå£ÿ™ò_í}þ‹þêˆÿž1ú_.ÿÅý¯ÈùÆè¦ü×mþ#†Šï¿$ÔUÀcŒþgºÿí¶þÛuó	_wÛïÛõŠ)À)Fÿ3å¿â}þ‹ü‡„qý'æ«ÿ¥ò_ä?4pþç›|þgΑÿ–pj N1ù_ÌEò_
+Œã_.ÿÅûŸÎ|cô¿\þ‹÷?	ä¿|cô¿\ÿ/òŸ¨ÿøÆè¹üùO	ìÿ}cô¿\ÿ/ü—@ÿ/ßýÏ”ÿºïÿð_—Ýóñð²7mÌ1ú_®ÿþK ÿ—o¬þëÿEÿ	ìþ}“ÏÿÌù/êÿ~mÀ˜|’îÿ~7ÖúSž1þÅ¤õ¿	
+ùO	Ôÿ}“îÿëý1ž˜ÿ¬{úÿI0ŒÿñÇa=¬ÏÛo§ßmóÎo3cÿ×öØÿù&Ÿÿ@éõŸ¾¥ÿê?¾1ø¿ÜÖ쟕ÿè#õ_	ͧ–À1¹üïéûÿзÔ$\G`É$àƒÿ¯Ùï§aùsجÛÕïŸ1cÿ_‘ÿÒ@ý×7Öõÿ‘óoI÷¿5ïÿ*üwMªÿqú±Ï+iç?ýÉÿºm+ԏÿ%ÿ“òŒiã_Å&TuÕ´ãù[Æ_ÁÜñ¿Þÿ8ééþ·!6Œ¿ãøèÿ3Ž+ê?xÿóÑÿýúKÿÞÿ$ÐÿÇ7Fÿôÿé/ý¸ÿEùßý/Ðÿ§¿ôÿ!ÿ!ý¿oŒþèÿÓ_úÿà¿úÿøÆèžþ?ÿ¸ÿ±¿ôÿÁ	Ÿ‡ãÀà£ÿúÿ\üïð_ý|cõ?ÿŸþrÿùO	û]“Ïÿ\ýúKÿêÿ®û/b N1ùßÌuä¿Ç¿\þ‹ü‡ª¿¾1ú_.ÿÅýÈùÆè¦üW{—ÿj¸ÿQBMÈ5Fÿ‹å¿¸ÿQù/ßýÏ”ÿºÍÄPóý—„ºjxpŒÑÿL÷¿ÝÖ».pþ#áënû}»^18Åè¦üW¼÷Ÿü‡„qý'æ«ÿÅò_¬ÿ(ÿù&Ÿÿ™ó_ä¿%\€ü—WLþ×ó_ô“`ÿrù/Þÿ$pþã£ÿåò_¼ÿI ÿå£ÿåú‘ÿ”@þÛ7FÿËå¿ÈJ`ÿï£ÿÅúá¿úùÆè¦ü×}ÿŸˆÿ¾ìž‡—å¸icpˆÑÿbý¿þK ÿ—o¬þËÑÿAù/ßäó?sþ‹ú¿„ëþ‹ü—SÒýßïÆZÊ3Æ¿°˜´þ7¡!ÿ)ú¿oÒý½ÿ}ò3FÃóŸMEÿ?	†ñ?þ8¬‡Õâyûíô»mÞùmfìÿšÀþOû?ßäóÿq(½þÓ·ôÿÑ@ýÇ7ÿ—ûÃz‚ý³ò}OýWBüÔ38&—ÿï=#}ÿú–ú„Ë ,Ùÿ;ÅàÿköûiXþ6ëÅvõûgÌØÿWä¿4´ˆïëúÿÈù·¤ûß…†÷	,ü¾Iò?ýè÷ÌÇþ¿íÿOþ×1ÐÿW
 Bõ©L~I]ÿë0ýÜ÷Iç¿]5úߝ¶œÿ
+˜1þ— `Â3¦›PÕUÓŽùŸ®£ÿ“„Ùã½ vÊ3ÒýocKþC‚uü§4 Kzÿ;ç?ÈÿùÆêÿ”`ûßÞøß‡HþKý¿|cõJ°äõ¿­êÈù¯ºøÆêÿ”`3üï"ç?ØÿûÆêÿ”`ûßÝìÿcÀ
+ôÿòÕÿ)
+À’Î/õ¿Ðâ¿„ÏÃq`ð‹Õÿ)
+ÀÒ×ò_*èÿå³ÿ€¥×ÿcOÿ
+¤¿|“Ñÿ‡
+À>ôÿí÷_×÷ÿšú¿„ñçÿëô³€Olþ7åò_‘ü—ëøË±ÿ“@õ×7VÿKå¿z¾ÿ•@þË7Vÿóä¿Ú»üWÏ÷j€¹Æê±ü÷¿K ÿå«ÿyò_·ùÓë?ßI¨«†7 ÇXýÏ’ÿªoë¿÷?ˆøºÛ~ß®WLN±úŸ'ÿïýø¯`\ÿI€ùÅì¡üWCý_ù/ßdô?kþ‹ü·†ñç'ÿå›ÿu¹üW ÿ¥À:þÅò_¼ÿIàüÇ7Vÿ‹õÿ¢þ+ü—o¬þ—êÿEþSùoßXý/–ÿ"ÿ)ý¿o¬þëÿ…ÿèÿå«ÿyò_÷ýZü—ðe÷|<¼,Ç=ó€C¬þëÿ…ÿèÿå³ÿ¥úQÿ—@þË7ýÏ›ÿ¢þ/aüùÉùe†ÿÉ·@c1)ÿÓÄŠü§êÿ¾™áÿqÿ´ÿ÷~ó¿ÉW †'æ?›@ÿ?	–ñ?þ8¬‡ÕâyûíôÃmÿ83ömËþOû?ßdôÿa(½þÓ·ôÿÐ@ýÇ7ÿ—ûÃúcûç|ÿßWõ_BÝ}b
+pL6ÿßyÆŒýÿøá¿€ñç_²ÿw‹Åÿ×ì÷Ó°ü9lÖ‹íê·Ïøxý¿­ÿö5ù/
+=â»Æ¼þ?pþ-éþw¡§ÿ¯Î|“êÿvõïõ䃟+Iç?mÏ«¾çüGÁ¬ñ_¾ëÝq±:lÿ»>|øŒßÿš›ñUÇýO†åÓv1*ë€KLþoö'ýwûÃâ°ïïÿÿ±æþ_
+ÿYï^Pß/Iþ?/¬W‹ÿ,Oûÿ[ÏÃ?¨ü^8ŸðL}ÿ»¬ÿuÅù
+¿¾I®ÿLkùø’ÞÿÎõŸºíÉÿI˜1þ—ï?ž1mü«xzí««¦ßÿ»–÷	³ÇÿüýOU®ÿkÅø+°Ž±þ¯ìÿ$Pÿ÷Õÿbý_9ÿ—@ÿWßXý/Õÿ•û5ÐýÍ7VÿKõåþ
+ìÿ}cõ¿TÿWü×@ÿWßXýÏÒÿõmþƒû¥|Ž€_¬þ—êÿZã¿ú¿úÆì©þ¯Ôÿ%Ô \“Ñÿ¬ý_kêÿοÿ_|ÿï›ÿM¹üWCþKuü‹å¿ØÿI úë«ÿÅò_ô”@þË7Vÿóä¿ÚûüßÿJ¨#þ{Æê±ü÷I üë«ÿyò_·ù"ßI¨«†7 ÇXýÏsÿ÷mý·
+ç?¾î¶ß·ëS€S¬þçÉÝÞÿpòŸþïÆõŸ˜_Ìþ—ÊQÿ—@þË7ýÏ›ÿ"ÿ-áüû“ÿr‹ÍÿiÍ Ç?±äüWMþKuü‹å¿xÿ“ÀöÏ7Vÿ‹å¿¨ÿJ ÿå«ÿÅúQÿ‘@þÛ7Vÿ‹å¿ÈJ`ÿï«ÿÅúá¿úùÆêžü×}ÿŸÿ%|Ù=/ËqÏÆ<à«ÿÅúá¿úùÆì©üõ	ä¿|“Ñÿ¼ù/êÿο?ù/·Ìð¿ký	ÏÿÄ&ßÿ|ö¿	=ùO	,ÿ¾™áÿqÿ´ÿ÷~ó¿ÉW †'æ?›@ÿ?	–ñ?þ8¬‡ÕâyûíôÃmÿ83ömÃþOû?ßdôÿa(½þÓ·ôÿÐ@ýÇ7ÿ—ûÃúcûç|ÿߟþ=þ+¨«OLŽÉæÿ;Ϙ±ÿ[‚á¿€óï¿dÿï‹ÿ¯Ùï§aùsجÛÕoŸññú[ÿíkò_â»Æ¼þ?pþ-éþw!ÒÿW{ߤú_M>õù›iç?UlBUWM{ò¿nkÎ$¤ÿ%þ“òŒôñoÚÓ?güÌÿëõ“ž‘tþÛÆñü7„–ñW`ÿ)íÒöçñïBOþWû?ßýŸÒþ'íü÷ì¨ÿj ÿoŒþOiÿ“¾þ·§÷ ê¿øúß7Fÿ§´ÿ™ãW‘ÿ’Àþß7Fÿ§´ÿIûþÿ¼ÿÿ5ÐÿÇ7Fÿ§´ÿI»ÿñRÿëþKø<& ¿ýŸÒþgÆúú×ø/þ?¾±ú?¡ýÏŒó¿[¾ÿ@ðÛ7ùüØþ'íû‹ÿ]Ký_¯`ð‰Éÿ¦`þ‹üŸãø—Ë‘ÿ@õ×7FÿËå¿øþGù/ßýÏ”ÿjïò_5÷¿J¨#þ{Æè¹üWƒÿ
+(üøÆè¦ü×mþ#†Šï¿$ÔUÀcŒþçÉÕ·õßÓ¿æüGÂ×Ýöûv½b
+pŠÑÿLù¯xï?ù	ãúOÌ/Vÿ‹å¿Xÿ%ÿòM>ÿóæ¿Èkø5L>1ù_Ìuä¿Ç¿\þ‹÷?	Lü¾1ú_.ÿÅûŸò_¾1ú_®ÿùO	ä¿}cô¿\þ‹ü§öÿ¾1ú_®ÿþK ÿ—oŒþgÊÝ÷ÿ	ø/áËîùxxYŽ›6æ‡ý/×ÿÿ%ÐÿË7Vÿ‹å¿èÿ ü—oòùŸ¹ÿõ	¿F€iÀ'éþ¿^ÿ<ùãXbþ«îéÿ%Á0þLJõ°Z<o¿~·Í;¿ÍŒù¿é˜ÿ%0ÿû&Ÿÿ_ Óßÿú–þxÿóÁÿåþ°ž`ÿ¬óß>Rÿ‘P}bé÷L.ÿß{Fúþ?œ6 ø¯à:-“€Oþ¿f?Ÿ†åÏa³^lW¿ÆŒýEþCûßX×ÿGο%Ýÿ.Ô¼ÿKÀߤú_WÓÏ}~‘vþÓŸü¯»±ÿ'ç?å™1þ— @Â3¦›PÕUӞƿ9ßÿÅø—göø_/€›òŒtÿÛsþ‹ñ/uü§4 IÛÿãßÅ@ýWÕ_ßXýŸÒ äcÿÛÿûÉH ÿ‡o¬þOi ’¼þ·§Çù¾þõÕÿ)
+ at føßEê¿ØÿûÆêÿ” ûßÝìÿcÀ
+ôÿðÕÿ)
+@>ö?ÜÖÿB‹ÿ>ǁ	À/Vÿ§4 I_ÿ»Ðà¿úøÆìÿ„ éõÿØ×Ôÿ%ÔÀ\“Ñÿ‡
+@>ôÿß\Þÿêÿ.Û¯ŠYÀ)6ÿ›üù¯®ºä¿jò_
+¬ãŸ=ÿuÿ.òýª¿¾±úŸ=ÿuö¿±Åä¿|cõ?OþëÆÿ¶ªéÿ¡¡Žøï«ÿÙó_ÿ»ÀýÈùÆêžüW¸ÙÿÇ8ÿ‘PW
+o ޱúŸ%ÿUßÖɨøºÛ~ß®WLN±úŸ'ÿïýçüW¸þ“ ó‹ÙÿÜù¯Ëþ¿¯©ÿK ÿ囌þçÉ]ßÿëÿœò_n±ù_—ËUä¿XÇ¿Xÿ/Î$pþã«ÿ¥úÑÿGù/ßXý/Öÿ‹ü·òß¾±ú_¬ÿõ_	ìÿ}cõ?{ÿ¯_ù/òßèÿå«ÿyò_÷ýZÖ	_vÏÇÃËrܳ18Äêöþ_×üWÍú/þ_¾1û_*ÿEþ[ù/ßdô?oþ‹ý¿„Ëö‹ü—Wfø¿ßµþ„gŒb1)ÿÓÄŠõ_õßÌðÿõø©Ï
+OÌ6þ,ãüqX«ÅóöÛé‡Û<þqfìÿÚ†ýŸö¾ÉèÿÃPzý§oéÿ¡úo,þ/÷‡õÇöÏùþ¿¯:Ö	uõ©æÐ/Ùüç3öÿã‘0þ8ÿþKöÿ^±øÿšý~–?‡Íz±]ýö¯ÿ·ýÿûº!ÿ!! ¾kÌëÿçß’î"ßK`á÷M²ÿíäcŸWÒÏꮢÿ‡„ãÉÿ$<cÚøW±	U]5íxþßuœÿI˜=þ×û§<cÆùoïgüËcÿb÷¿‘ÿ‘@í×7Vÿ‹ÝÿFýWý|cõ?{ÿî“Â×ÿ¾±ú_ìþ7ò_ØÿûÆê±þ?ø/þ?¾±úŸ¥ÿÏÝý]hð_Âçá80øÅê±þ?ø/þ?¾1û_ªÿõ	u‹þžÉèÞþ?Ôÿ%œ«¯ßxÅæS.ÿÕ‘ÿR`ÿbù/ö¨þúÆê±üßÿH ÿå«ÿyò_í]þ‹û5Ôÿ=cõ¿Tþ+rÿ£ò_¾±úŸ'ÿu›ÿˆ!òý—„ºjxpŒÕÿ<÷¿ÝÖ»@ÿ
+_wÛïÛõŠ)À)Vÿóä¿nûžü§ÿ§„qý'æ³ÿ¥ò_Ôÿ%ÿòMFÿóæ¿ÈK8W_+ò_^±ù_—˵ä¿XÇ¿Xþ‹÷?	œÿøÆê±üõ_	ä¿|cõ¿Xÿ/ê?ÈûÆê±üùO	ìÿ}cõ¿Tÿ/ü×@ÿ/ßXýÏ“ÿºïÿÓâ¿„/»çãáe9îÙ˜bõ¿Tÿ¯ÿ%ÐÿË7fÿK忨ÿK ÿ囌þçÍQÿ—p®¾V俼2Ãÿýn¬õ'<cü‹IùŸ&ôä?%Pÿ÷Íÿ_ïŸúŒÑ
 ðÄügèÿ'Á2þLJõ°Z<o¿~¸ÍãgÆþ¯mØÿI`ÿ盌þ?, ¥×ú–þ¨ÿøÆâÿrXlÿœïÿûªcý—P7Ÿ˜“Íÿwž1cÿzaÄçÝû·XüÍ~?
+ËŸÃf½Ø®~ûŒ×ÿÛúo_“ÿÒ@û_ߘ×ÿο%Ýÿ.ôôÿ•ÀùoRýÿ×äSŸ¿I:ÿiû“ÿuKÿ
+éã‰ÿ¤<cÚøW±	U]5íxþߎßÿ2þå™;þ×ë'=#ÝÿöÜÿñ/qü§´ÿIÛÿÇ¿‹ù_	ìÿ|côJûŸ´óß³ÿ=ýEÐÿÇ7Fÿ§´ÿI_ÿÛªæû?
+|ýï£ÿSÚÿÌñ¿«ÉI`ÿï£ÿSÚÿ¤}ÿÞÿÇ€ÿèÿã£ÿSÚÿ¤Ýÿx©ÿuä¿5|Ž€_ŒþOiÿ3cýﺀÿèÿã«ÿÚÿÌ8ÿ‹‘ï?4üû]“Ïÿ‡íÒ¾ÿ¸øßêÿ.Ó/ßxÅäS0ÿÕ“ÿR`ÿrù/ò¨þúÆè±üWÃ÷?ÈùÆè¦üW{ŸÿâþW	5 »Æè¹üW‡ÿ
+ÈùÆè¦ü×mþ#îÐPW
+o Ž1úŸ'ÿUßÖ;îñu·ý¾]¯˜œbô?Sþ+Þç¿ÈH×`~±ú_*ÿEþCù/ßäó?sþ‹ü·„ËôKþË+&ÿë‚ù/ú¿I0޹üï8ÿñÑÿrù/Þÿ$ÿòÑÿrý¿ÈJ ÿí£ÿåò_ä?%°ÿ÷Ñÿrý¿ð_ý¿|cô?Sþë¾ÿOÄ	_vÏÇÃËrÜ´18Äè¹þ_ø/þ_¾±ú_¬ÿý$ÿòM>ÿ3翨ÿK¸L¿ä¿¼’îÿ~7ÖúSž1þ‰Å¤õ¿	-ùO	Ôÿ}“îÿëõ1ž˜ÿl*úÿI0ŒÿñÇa=¬ÏÛo§ßmóÎo3cÿ×DöØÿù&Ÿÿ@éõŸ¾¥ÿê?¾1ø¿ÜÖ쟕ÿè{ê¿þúÄà™\þ¿÷Œôýè;ê?οËþß+ÿ_³ßOÃòç°Y/¶«ß?cÆþ¿"ÿ¥Ï¿|c]ÿ9ÿ–tÿ»Ððþ/ó    _ü?5wQ÷ È
  
\ No newline at end of file

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.tar.gz.output	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,68 +1,67 @@
-System(0KB HP=0*0kB TYAN Computer Corp S4881 )
-  NUMANode#0(0KB)
-    Socket#0
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#0
-            P#0
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#1
-            P#1
-  NUMANode#1(8192MB)
-    Socket#1
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#0
-            P#2
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#1
-            P#3
-  NUMANode#2(8192MB)
-    Socket#2
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#0
-            P#4
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#1
-            P#5
-  NUMANode#3(8192MB)
-    Socket#3
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#0
-            P#6
-  NUMANode#6(0KB)
-    Socket#6
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#0
-            P#12
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#1
-            P#13
-  NUMANode#7(0KB)
-    Socket#7
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#0
-            P#14
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#1
-            P#15
-  NUMANode#4(8192MB)
-  NUMANode#5(8192MB)
-depth 0:	1 System (type #0)
+Machine (phys=0 total=41943040KB TYAN Computer Corp S4881 )
+  NUMANode #0 (phys=0)
+    Socket #0 (phys=0)
+      L2Cache #0 (1024KB)
+        L1Cache #0 (64KB)
+          Core #0 (phys=0)
+            PU #0 (phys=0)
+      L2Cache #1 (1024KB)
+        L1Cache #1 (64KB)
+          Core #1 (phys=1)
+            PU #1 (phys=1)
+  NUMANode #1 (phys=1 local=8388608KB total=8388608KB)
+    Socket #1 (phys=1)
+      L2Cache #2 (1024KB)
+        L1Cache #2 (64KB)
+          Core #2 (phys=0)
+            PU #2 (phys=2)
+      L2Cache #3 (1024KB)
+        L1Cache #3 (64KB)
+          Core #3 (phys=1)
+            PU #3 (phys=3)
+  NUMANode #2 (phys=2 local=8388608KB total=8388608KB)
+    Socket #2 (phys=2)
+      L2Cache #4 (1024KB)
+        L1Cache #4 (64KB)
+          Core #4 (phys=1)
+            PU #4 (phys=5)
+  NUMANode #3 (phys=3 local=8388608KB total=8388608KB)
+    Socket #3 (phys=3)
+      L2Cache #5 (1024KB)
+        L1Cache #5 (64KB)
+          Core #5 (phys=0)
+            PU #5 (phys=6)
+  NUMANode #4 (phys=4 local=8388608KB total=8388608KB)
+  NUMANode #5 (phys=5 local=8388608KB total=8388608KB)
+  NUMANode #6 (phys=6)
+    Socket #4 (phys=6)
+      L2Cache #6 (1024KB)
+        L1Cache #6 (64KB)
+          Core #6 (phys=0)
+            PU #6 (phys=12)
+      L2Cache #7 (1024KB)
+        L1Cache #7 (64KB)
+          Core #7 (phys=1)
+            PU #7 (phys=13)
+  NUMANode #7 (phys=7)
+    Socket #5 (phys=7)
+      L2Cache #8 (1024KB)
+        L1Cache #8 (64KB)
+          Core #8 (phys=0)
+            PU #8 (phys=14)
+      L2Cache #9 (1024KB)
+        L1Cache #9 (64KB)
+          Core #9 (phys=1)
+            PU #9 (phys=15)
+depth 0:	1 Machine (type #1)
  depth 1:	8 NUMANodes (type #2)
   depth 2:	6 Sockets (type #3)
-   depth 3:	11 Caches (type #4)
-    depth 4:	11 Caches (type #4)
-     depth 5:	11 Cores (type #5)
-      depth 6:	11 Procs (type #6)
+   depth 3:	10 Caches (type #4)
+    depth 4:	10 Caches (type #4)
+     depth 5:	10 Cores (type #5)
+      depth 6:	10 PUs (type #6)
+6 processors not represented in topology: 0x00000f90
+1 processors offline: 0x00000010
+5 processors online but not allowed: 0x00000f80
+1 processors allowed but not online: 0x00000010
 Topology not from this system
-

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.xml.tar.gz
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.xml.tar.gz	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.xml.tar.gz	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1 @@
+link 16amd64-8n2c-cpusets.tar.gz
\ No newline at end of file


Property changes on: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.xml.tar.gz
___________________________________________________________________
Added: svn:special
   + *

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.xml.tar.gz.options
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.xml.tar.gz.options	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.xml.tar.gz.options	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1 @@
+-p -v -.xml

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.xml.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.xml.tar.gz.output	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.xml.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+  <object type="Machine" os_level="-1" os_index="0" cpuset="0x0000f06f" complete_cpuset="0x0000ffff" online_cpuset="0x0000ffef" allowed_cpuset="0x0000f07f" nodeset="0x000000ff" complete_nodeset="0x000000ff" allowed_nodeset="0x0000003e" dmi_board_vendor="TYAN Computer Corp" dmi_board_name="S4881 ">
+    <object type="NUMANode" os_level="-1" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0">
+      <object type="Socket" os_level="-1" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0">
+        <object type="Cache" os_level="-1" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="65536" depth="1">
+            <object type="Core" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0">
+              <object type="PU" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0"/>
+            </object>
+          </object>
+        </object>
+        <object type="Cache" os_level="-1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="65536" depth="1">
+            <object type="Core" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0">
+              <object type="PU" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0"/>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+    <object type="NUMANode" os_level="-1" os_index="1" cpuset="0x0000000c" complete_cpuset="0x0000000c" online_cpuset="0x0000000c" allowed_cpuset="0x0000000c" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" local_memory="8589934592">
+      <object type="Socket" os_level="-1" os_index="1" cpuset="0x0000000c" complete_cpuset="0x0000000c" online_cpuset="0x0000000c" allowed_cpuset="0x0000000c" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+        <object type="Cache" os_level="-1" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="65536" depth="1">
+            <object type="Core" os_level="-1" os_index="0" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+              <object type="PU" os_level="-1" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+            </object>
+          </object>
+        </object>
+        <object type="Cache" os_level="-1" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="65536" depth="1">
+            <object type="Core" os_level="-1" os_index="1" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+              <object type="PU" os_level="-1" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+    <object type="NUMANode" os_level="-1" os_index="2" cpuset="0x00000020" complete_cpuset="0x00000030" online_cpuset="0x00000020" allowed_cpuset="0x00000030" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" local_memory="8589934592">
+      <object type="Socket" os_level="-1" os_index="2" cpuset="0x00000020" complete_cpuset="0x00000030" online_cpuset="0x00000020" allowed_cpuset="0x00000030" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+        <object type="Cache" os_level="-1" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="65536" depth="1">
+            <object type="Core" os_level="-1" os_index="1" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+              <object type="PU" os_level="-1" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+    <object type="NUMANode" os_level="-1" os_index="3" cpuset="0x00000040" complete_cpuset="0x000000c0" online_cpuset="0x000000c0" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" local_memory="8589934592">
+      <object type="Socket" os_level="-1" os_index="3" cpuset="0x00000040" complete_cpuset="0x000000c0" online_cpuset="0x000000c0" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+        <object type="Cache" os_level="-1" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="65536" depth="1">
+            <object type="Core" os_level="-1" os_index="0" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+              <object type="PU" os_level="-1" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+    <object type="NUMANode" os_level="-1" os_index="4" cpuset="0x0" complete_cpuset="0x00000300" online_cpuset="0x00000300" allowed_cpuset="0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" local_memory="8589934592"/>
+    <object type="NUMANode" os_level="-1" os_index="5" cpuset="0x0" complete_cpuset="0x00000c00" online_cpuset="0x00000c00" allowed_cpuset="0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020" local_memory="8589934592"/>
+    <object type="NUMANode" os_level="-1" os_index="6" cpuset="0x00003000" complete_cpuset="0x00003000" online_cpuset="0x00003000" allowed_cpuset="0x00003000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0">
+      <object type="Socket" os_level="-1" os_index="6" cpuset="0x00003000" complete_cpuset="0x00003000" online_cpuset="0x00003000" allowed_cpuset="0x00003000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0">
+        <object type="Cache" os_level="-1" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0" cache_size="65536" depth="1">
+            <object type="Core" os_level="-1" os_index="0" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0">
+              <object type="PU" os_level="-1" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0"/>
+            </object>
+          </object>
+        </object>
+        <object type="Cache" os_level="-1" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0" cache_size="65536" depth="1">
+            <object type="Core" os_level="-1" os_index="1" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0">
+              <object type="PU" os_level="-1" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0"/>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+    <object type="NUMANode" os_level="-1" os_index="7" cpuset="0x0000c000" complete_cpuset="0x0000c000" online_cpuset="0x0000c000" allowed_cpuset="0x0000c000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0">
+      <object type="Socket" os_level="-1" os_index="7" cpuset="0x0000c000" complete_cpuset="0x0000c000" online_cpuset="0x0000c000" allowed_cpuset="0x0000c000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0">
+        <object type="Cache" os_level="-1" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="65536" depth="1">
+            <object type="Core" os_level="-1" os_index="0" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0">
+              <object type="PU" os_level="-1" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0"/>
+            </object>
+          </object>
+        </object>
+        <object type="Cache" os_level="-1" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="65536" depth="1">
+            <object type="Core" os_level="-1" os_index="1" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0">
+              <object type="PU" os_level="-1" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0"/>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+  </object>
+</topology>

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets_noadmin.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets_noadmin.tar.gz.output	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets_noadmin.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1 +1,92 @@
-link 16amd64-8n2c.tar.gz.output
\ No newline at end of file
+Machine (phys=0 total=67106960KB TYAN Computer Corp S4881 )
+  NUMANode #0 (phys=0 local=8386704KB total=8386704KB)
+    Socket #0 (phys=0)
+      L2Cache #0 (1024KB)
+        L1Cache #0 (64KB)
+          Core #0 (phys=0)
+            PU #0 (phys=0)
+      L2Cache #1 (1024KB)
+        L1Cache #1 (64KB)
+          Core #1 (phys=1)
+            PU #1 (phys=1)
+  NUMANode #1 (phys=1 local=8388608KB total=8388608KB)
+    Socket #1 (phys=1)
+      L2Cache #2 (1024KB)
+        L1Cache #2 (64KB)
+          Core #2 (phys=0)
+            PU #2 (phys=2)
+      L2Cache #3 (1024KB)
+        L1Cache #3 (64KB)
+          Core #3 (phys=1)
+            PU #3 (phys=3)
+  NUMANode #2 (phys=2 local=8388608KB total=8388608KB)
+    Socket #2 (phys=2)
+      L2Cache #4 (1024KB)
+        L1Cache #4 (64KB)
+          Core #4 (phys=0)
+            PU #4 (phys=4)
+      L2Cache #5 (1024KB)
+        L1Cache #5 (64KB)
+          Core #5 (phys=1)
+            PU #5 (phys=5)
+  NUMANode #3 (phys=3 local=8388608KB total=8388608KB)
+    Socket #3 (phys=3)
+      L2Cache #6 (1024KB)
+        L1Cache #6 (64KB)
+          Core #6 (phys=0)
+            PU #6 (phys=6)
+      L2Cache #7 (1024KB)
+        L1Cache #7 (64KB)
+          Core #7 (phys=1)
+            PU #7 (phys=7)
+  NUMANode #4 (phys=4 local=8388608KB total=8388608KB)
+    Socket #4 (phys=4)
+      L2Cache #8 (1024KB)
+        L1Cache #8 (64KB)
+          Core #8 (phys=0)
+            PU #8 (phys=8)
+      L2Cache #9 (1024KB)
+        L1Cache #9 (64KB)
+          Core #9 (phys=1)
+            PU #9 (phys=9)
+  NUMANode #5 (phys=5 local=8388608KB total=8388608KB)
+    Socket #5 (phys=5)
+      L2Cache #10 (1024KB)
+        L1Cache #10 (64KB)
+          Core #10 (phys=0)
+            PU #10 (phys=10)
+      L2Cache #11 (1024KB)
+        L1Cache #11 (64KB)
+          Core #11 (phys=1)
+            PU #11 (phys=11)
+  NUMANode #6 (phys=6 local=8388608KB total=8388608KB)
+    Socket #6 (phys=6)
+      L2Cache #12 (1024KB)
+        L1Cache #12 (64KB)
+          Core #12 (phys=0)
+            PU #12 (phys=12)
+      L2Cache #13 (1024KB)
+        L1Cache #13 (64KB)
+          Core #13 (phys=1)
+            PU #13 (phys=13)
+  NUMANode #7 (phys=7 local=8388608KB total=8388608KB)
+    Socket #7 (phys=7)
+      L2Cache #14 (1024KB)
+        L1Cache #14 (64KB)
+          Core #14 (phys=0)
+            PU #14 (phys=14)
+      L2Cache #15 (1024KB)
+        L1Cache #15 (64KB)
+          Core #15 (phys=1)
+            PU #15 (phys=15)
+depth 0:	1 Machine (type #1)
+ depth 1:	8 NUMANodes (type #2)
+  depth 2:	8 Sockets (type #3)
+   depth 3:	16 Caches (type #4)
+    depth 4:	16 Caches (type #4)
+     depth 5:	16 Cores (type #5)
+      depth 6:	16 PUs (type #6)
+1 processors offline: 0x00000010
+5 processors online but not allowed: 0x00000f80
+1 processors allowed but not online: 0x00000010
+Topology not from this system


Property changes on: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets_noadmin.tar.gz.output
___________________________________________________________________
Deleted: svn:special
   - *

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c.tar.gz
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c.tar.gz	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c.tar.gz	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,95 +1,50 @@
-‹ §
-J í_s½•æ};þ¼Ü­Zeñ§&s—Œ+5®l²S›¸¶öŠÕ&[R—%’ERÎëùô”B²iuã°qbé<?O浤¶ õé@ã<8оzœûâf¼˜›Ùÿü(‹ÿÕ¥S»uQìþ{àƒÖF>ïÍ¥M¡ô‡‘Ëóãœò´ÙVëÑèÃ×»åÝC³xåºz½áøxÑ'ñ_­—‚~ñ×¶°N+ëCü­uâÏÁ…øÏVOÍâv9\1À~ïñª·ÅYü‹²ðFj¸á珌x½Ù,×ÿöû‘úø½^Ì—ëi3ýái{_/¶Íìùô1<£Ûê±yø¾¢ÝÇÇå¼~ø·ðwk÷-ªÇ:|üé©zýûr]Â?ýïÕ¶^/ÿmûøßGÿùÜÒhìÝÇͶ^­šÅÝ®ÙøÝÿòÿ¿Ÿ«ñï¬ñgÕì¾mšÿŠßU+SŒþüǏ«û›fZØý„êã¦ùbv·	˜³ØjøÂË·ŒŸØ©Z5³ýW´ÿØ,šm¾Çá“ñêÛÕSüâzÿ:­›Õ«m³\>1=ÔßÃï¾ÅǬ^®~¨BëáƒðÏFßëѼ­6õh»™7ëѪªG³z4ûm¼ko´©W£Çí:|å.~¥Í—ßÃeÛøÏ¬Ínž6÷£ÇÇßF·¿…ï°	ß-üό͏Møåýþ-~½þm»»dº\mG#;_,ÿ?¹ûËh]¯¦wËå|´Z4£‡êþv®™=®¦õ]5ûññëònùجâ
-²^ûß… üýýñäŽ?Ù]¼‡ŸêðE_ìÃ3­š»ÅcxJöŸ¬æópÇ7»Ëâ÷-Ôèk³ÝŒžÃö?FÅxÿ™ïÍzž”«ð¯GÕ"4¿ÏïÝ݆›ý=üo»]}üxü€êwó€êŸ? eûÕx@Ã:Ö¿üjÞØª)=è¸ý€< á-'¿üjßÍúJ:i? ¨Õ¿دþ€oì5„Ô¨öZà}C¼{7èÏ{P£Û¨Ãú6PÿÆPKéAMûõx@߯´|7è+=¨m? %зñ€ŽßØZPzТý€Žñ€¾tònÐWzP×~@'x@߯ªßZ*ÉQºÐ©$\Òî-ýGô­%“~þˆ¾Ò‰^J&!›ôVÑ·–Nò”^ôB:I#Ÿ´{DÇ¿þ#úÖJ?D_éE/$”42Joå}k)¥’ЋÚ)%œÒ[yDßZRéçèÏ{Q{!©¤‘Uú…ßèùݨ€
 ›þïͶÚÚÆëþïð%oÏýß&|
-þobo=ÛI9™Œ¼ÕãÐ%ëBY52ÞySúñxd
-ë'£²¡SQûAC…î<Äm¤ËÂŒ
-çÇz¤½÷¥Š×‡oQÆëM9y¾^¼²“qèîŒyS¸xùdlM9šèp‘~¾ÐŒÜ$|£ð¡ÛpQ©•‡vŠb¤F/ÍÛ‘×n~ÈØHxdâ•…qv\Œlÿ±}¾2ô¤Îø]Fí¾£Ÿ:þ;3ŸôÏ×¹ðSùð}Œ2ñ{…Î2\Y†o¾£‰íê—Æ}ø‹??Bü†á©‡Ÿ÷ø',ÃÝ,½	?£öZûøM½òªŒŸ|»Ð’Ò“]“ÒûÝï<ž„»²û†Þ=_âcì8ÜXÿuˆÑî'tF‡¿XsÜvøÞá&–ñã‰	b
-ºñ$ܰðïN~H¢ñáfŒÊ‰7“2„\ŽU£îN.5á×:~ÎYëv?åD•á†í~ÌðçClT±»=c¥ö·qþ626^cÿùHñ§4ñ'Š×½/Â/SLN‘Q½kÄe±{δ?‚Ù5²{.ÂÌb»ŽíZU†§¥(G/¿gxôËßµ.vO‚ùÌî³Ex4>´ëÝÉøƒ?øƒ?øƒ?øƒ?øó†þ|œmÛŽ
-cÍØ“_·Ícæ€F«”)ŸWâêÍÈLÆÎì>ÞL×O‹E³¸éÃÇ_–³oõ<|»õ+Û œ¾ÿo~l2Ô€è¹ÿ?¼€Y[h÷ÿ‡`aÿ?íøÏëïMÐÀÏA¿ø+oui”uqýÇ;ÄŸ…ŸÇ?ü}[?ñ¤Å?®ÿy]–ˆ?ñŸ­ž®}Òë¿øÒ£þ½â=¯xÒâ_†ø‡ð£ÿg¡ü·ËÕòay÷#ýAHŽÌ xÄŸBü·÷뺚OŸ ÝmÄ ?Ïÿ…ôYüW*äÿ8Ø xgoµ /ý?[J¦«jö­º«§Íüõ6:õ¯Ì™þ-
-ôρ…ðECÐ4÷ujþ˜tý[eáÿa¿l¨úï?û'ÍÿÓÐ?û ÌÐ
-åú÷ÿéC³yÝ/L˜ÿ{ƒñŸá‹æÚñ¿[ý}ô_´Þÿ꿳àoJô ‚é¯ÿå"È£¦´þÊþŸã¿Væÿ,h¨_4ýõ¿ÛvJrôËÿ*oœÒ*Lü•Q¾tÈÿrÿf1¯3iAzþߨùˆñÛÌ{·Ñ=ÿ÷çñ/½ÃøÏA,6ðgÌÄBÔÿ‹ ¾LWÕzÛÄ¢—ÛH_ÿó%ÖÿxÀü_6Dýo¬ÿukþWúúçàË¢¹mê9z¡õ¿+ÈÕ·ôñßjõ”/¢þgËûz]/f?ö/ ¯/tëßžÏÿ•…ÿŸ_ uýï¾Z×óiøB@úøï´ÃüŸødCÔÿ?ª›éòvZm6ËYSm›ïÍöÇÏÚ Œÿ…Åþ4: Ñ\?þ?V«Ž6º×ÿZþÿÒÃÿÃÂ> Øÿ+¢þO_ëuœlêm—,ºÇw>ÿ] ôÏAÌÿCûr!é_1ø¿Pÿ‰büöïÿ0˜ÿ1ááþ
-Qÿùý_Ð?ðɆ¨ÿaý_­÷?S–Ð?Ÿªm…. at .Dýç÷aý‡Œÿ²!ê?»ÿËÀÿÉü_²¡®ÿe÷aÿ'°Ȇ¨ÿý_­õ¿ÂÀÿÉöÈæúñ?ÿþoùWø¿„BÔÿÀþ¯VýG…üNc ’þ5ƒÿõßX Æ?¿ÿûX€ÿK6Dýç÷Aÿ, ÿ+¢þ®ÿÕÿqþŸ›íúi;oô!ê?¿ÿù_0þˆ¨ÿüþ/äX€ÿK6Ôõ¿ìþ/ø?Y€ÿK6Dýg÷¡þ'ÈþÊæúñ?Sý/蟅Cþþ/¡õŸßÿ…õàÿ’M_ý'ùxBTxÿ—ÿ®òþ/úÇÿåü÷ä6’ão´SBÄŸBü
 ·÷뺚O7Í×p¿îzÜ“´ùŒá<Îÿcáy†I€Lúñþ­ªÙ·ê®ž6ó×ÛH[ÿ‹úwçÿò€ü¿lúŸ-×Ýš?&]ÿõ_˜ÀŸl¨úï?û'ÍÿMúo,"0C7 “ëßÿ»
-@„ù¿Çù¿<`õ_6׎ÿ=ì‰ù¿ýû¿Bý̍E ˜þú_.¢ÕŸÒFT¸OÿÃ0ÿgë²é¯ÿ½ÿ‡ÒF¿ü¯òÆ)­Œ
-úW¾Dþ—…ÔøÎLj#=ÿoâÏ1þ×ÿñçñ‡ÿ—‰xþ'* É…¨ÿŒõü®þÖÿxÀü_6Dý\ÿ§5ÿCý?&¾,šÛ¦ž£
-Qÿëÿø}ý¬ÿ³€üŸlˆúÏXÿÇïëÿÀÿÏêÿȆºþ—¯þß×ÿÁüŸŒÿ²!êàú?­ñ¿0ØÿÂF0Ñ\?þ]ÿÇïσÿ‡…Cð ¢þ®ÿãÎçÿáB蟃˜ÿ‡öåBÒ¿Êïÿò%ü_ãŸñü·}þó?pþ›lˆúÏïÿ‚þY€ÿK6Dýëÿj½ÿ™ÒCÿ,|ª¶º ¹õŸÝÿ¥°þÃÆÙõŸßÿÿ'ðɆºþ—Ýÿ…ýŸ,Àÿ%¢þ3žÿvðÁÿÉô/›ëÇÿLþ/蟅ç,º™õŸñü·ƒÿëÿ,àü7ِô¯ê)ø¿8 Æ?¿ÿûX€ÿK6Dýç÷Aÿ, ÿ+¢þ®ÿÕÿqþŸ›íúi;oô!ê?ý/äYÀø/¢þóû¿ÿaþ/ÙP×ÿ²û¿àÿdÙÙõŸßÿ…úŸ,@ÿ²¹~üÏäÿ‚þYxNÀ¢	Qÿùý_Xÿgþ/ÙôÕ¿#ü¹'*¼¿ÿ«ü®òÎd¡ü_ÎOn#9þF»Øÿ#þù!Ä{¿®«ùtÓ|
-÷ë®Ç=I›ÿÇøΣþ‡õ…I€Lúñþ­ªÙ·ê®ž6ó×ÛH[ÿ‹úw¶Äú?˜ýˆ ÿÙrÝ­ùcÒõo•EþŸødCÕÿÙ?iþoPÿ…‡} ,æÿB¹þý¿Û D˜ÿ{øÿxp¾h®ÿ{Øÿóû÷…üÅ
-z Éô×ÿr­þ”6¢Â}Òø¯Uù?xÿ—Mýïý?”6ú問¶elпòeü/©ñ?œÿ˜ÔFzþß„ëˆñ¸þ??Îa"žÿ‰
- at r!ê?cýŸrWÿë<`þ/¢þ®ÿÓšÿ•ÞCÿ|Y4·M=G/ ¢þ3Öÿ)÷õ°þÏü²!ê?cýŸr_ÿþPÿG6Ôõ¿|õÊ}ýÌÿY@ö_6Dý\ÿ§5þûXЀd®ÿ‡®ÿ³óÿ—þó/øÿ…BÔÿÀõÜùü_¡þ1ÿíË…¤Åàÿ²ðq@ŒÆóßù_ÌÿXÀùo²!ê?¿ÿúgþ/Ùõ?¬ÿ«õþgÊúgáSµ­ÐÈ…¨ÿüþ/¬ÿ°€ñ_6Dýç÷ÁÿÉü_²¡®ÿe÷aÿ'ðɆ¨ÿŒç¿íý_þO°ÿC6׏ÿyü_ðópèáÿ
-QÿÏ;ø¿°þÏΓ
-IÿšÁÿ…úo,ãŸßÿ…ý?,Àÿ%¢þóû¿ ÿ•
-Qÿ×ÿjÿ8ÿ‡Ï‹Ívý4‹7zõŸßÿ…ü/ÿeCÔ~ÿò?,Àÿ%êú_vÿüŸ,Àÿ%¢þóû¿Pÿ“desýøŸÉÿý³pèáÿ
-Qÿùý_Xÿgþ/ÙôÒ?ýèßÝú?®ÿàãùŸçÿñ n4– Ówü·¤“÷D…÷÷ýëÒ‡ÿÀÿÉ@ÿøo—«åÃòîGúƒÿÝùïN£þ#„øoï×u5Ÿnš¯á~Ýõ¸'„÷ç±þÏÂ!cÌdBÐÿ‹÷wU;Uwõ´™¿Þ!ÿg=ÖÿX€ÿG6ýÏ–ënÍ“®«,ö² ýˆªÿþ³Òüßðÿ±pˆÀÝ€L®ÿï6 æÿõx°¾h®ÿ{Ø)ùÿð ýs`nÐH¦¿þé&€¨pß{üùÿð¬ÿ³€÷Ùô×ÿÞÿGi£_þWy㔎*£|iÿå 5þ‡ó_“ÚHÏÿãüG.ˆñ¸þ—o×ÿ2ÿ9ˆçÿ¢˜\ˆúÇùïÌÿeCÔÿÀõ¿Îü¿qüÇú_ÍmSÏÑ…¨ÿŒõ¿ü¾þæÿ,`÷ŸlˆúÇùïÔÿ’
-uýç?¾ý—
-Qÿ×ÿjÿ¨ÿÅ„öè $sýøóß2‡`ÿ¯Pˆú¸þ—Cý¯1ÿíË…¤•Óÿå÷þ/ÿÄøg<ÿqŸÿEýwpþ£lˆúÏèÿò;ÿ—†þY€ÿK6DýëÿjÕ5%ê¿ñð©ÚVèäBÔ~ÿüß,`ü—
-Qÿý_~ïÿ‚ÿ“ø¿dC]ÿËçÿò{ÿò?,Àÿ%¢þ3žÿè÷þ/ìÿbû?dsýø?´ÿËïý_Ð?‡Àÿ%¢þ3žÿ¸›ÿ+äÿxÀù²!é_3ø¿4ü_ãŸßÿÿ?ðɆ¨ÿüþ/èŸäeCÔÿÀõ¿Ú㿇þYø¼Øl×O³Øy£'Qÿùý_Èÿ²€ñ_6Dýç÷!ÿÃü_²¡®ÿe÷ÁÿÉü_²!ê?¿ÿõÿX@öW6׏ÿ™ü_Ð?‡Àÿ%¢þóû¿°þÏü_²é«ÿfþ@;üóÅÿ¥
-
-ÿIñŸ=­×õb;¯›ïõºwÝó¿VþÇzìÿg¡š­ši.F‘ô·ò_,×Óõ²OÝó¿óú?Ea¡ëŤ/—^ú_­ëMÐ=µtý+ŒÿL¨í ¹ôÿuA}ûK|ÿ+Â×uYj‹÷?â¿]®–Ë»ÉBrüv¾Dü9 Ä{¿®«ùtÓ|
-7ì®û¦$åvñ/|ÿ'»Ø„ÿa Šþ_6­ªÙ·ê®ž6óWÛèžÿ›3ý»¢€ÿ“…Â
-Eÿ³åºSóǤë߆ÿBÿ`à—
-Yÿ½gÿ¤ù¿Eý_âíŸaþ/–Þÿ;w€tÿö|þïKÔÿbAcÿ—h®ÿÙÿåÏõo=ÖÿXЀ’IÐÿr÷zÚØ)<éý?|„ù?¨ÿ ›ýï7€Úè—ÿU>nûˆ…”Q»ý_Èÿæ'9þ»
-@&é1HÏÿ] ÿÏ5þ)`Óçÿ6Ú 1þ3:\T€Uÿ)`Óó¾,‘ÿcóÙPõŸR ¶;ÿw>ÿ³ñ?Ð?_ÍmSÏÑ…ªÿ”°éã¿ÕÑÿ
-ýçÕdCÕJØôü¿×
-ù?PÿU6äõ¿„°éúwa ýs ÿl¨úO) KÿÂþ´‡þ%3ÀøßY ¶{ýïÜÿäÿ»Ø(øÿ¥BÕJØîñßµôÿ?1ÿíË…¦•ßÿåàÿâ€ÿaý_EÛÿ…ù8ÿ[6Týg÷Aÿ,Àÿ%ªþõµÞÿ¬* >UÛ
-]€\¨úÏîÿÂúÿeCÕfÿ—*áÿdþ/ِ×ÿ2û¿ôÏü_²¡êXÿWkýÏ)ìÿbû?d3ÀøŸÇÿý³°‹‚ÿK*Týëÿ:Ïÿ;…ü8ÿ[64ýëüþ/ÿÔøg÷aÿðɆªÿìþ/èŸäeCÕÿ°õ¿Úã?Îÿãáób³]?Íbߍž@ Týg÷¡þ/ÿeCÕöú_Èÿ° ÿ—lÈë¹ëAÿ,Àÿ%ªþ³û¿Pÿde3ÀøŸÇÿý³°‹‚ÿK*Týg÷aýŸø¿dÓKÿ«å&÷M9û7Ò­ÿ£úÖÇó?Áû?
-Ç‹¦÷øO9ø÷@TxoÿgÔ¿.½Åù¿,ôÿv¹Z>,ï~¤?Éñ7:üñç€ÿíýº®æÓ8#hw=îIÒûÿ.þ…óØÿÁÂó,æ 2!èÿÅú»ªfߪ»zÚÌ_o#iý§g=Îÿe²!è¶\wkþ˜týÛÐ@ÿÀÿ'ªþûÏþIóÿ?‡Xt2¹þýÿ_kþï5Æ0þËæÚñ¿[ý‰ùÿÃû?üÿ<¨ô ’é¯ÿå"îô¡´î“ƍúL@ý²é¯ÿ½ýÒF¿ü¯òÆ)­Œþ_"ÿËBjüÇ¿&µ‘žÿ7
-ñçÿ”ò_=æÿþ<þ¥Cýwâù¿¨ &¢þSÊÖÿ|‰õ?0ÿ—
-Qÿ)å¿zäÿZó¿Òcÿ_ÍmSÏÑ…¨ÿ”ò_ÿÖXÿgÆ_ÙõŸRþ+­þÏ~þ¦ Ð?¨ÿ%êú_Bù/ŠÿG;ÌÿYÀû¿lˆúO)ÿEÿƒý?,h@2׏ÿå¿(þÿÒÁÿÃÂó½€LˆúO)ÿE¨ÿã”FýbþÚ—Iÿ*¿ÿËãüGˆñØÿu¾ÿÃ`þÇΔ
-Qÿùý_Ð?Xÿ•
-QÿÃú¿Zï¦ôÐ?Ÿªm…. at .Dýg÷)¬ÿ°€ñ_6Dýç÷ÁÿÉü_²¡®ÿåöØÿÉÆÙõ?°ÿ«µþWø?Y€ñC6׏ÿ™ü_Ð?Ï0º™õ?°ÿ«UÿQ!ÿÇΔ
-Iÿ‰‡ÁE…'û¿Jø¿8 Æ?¿ÿûX€ÿK6Dýç÷Aÿ,`ýW6Dý\ÿ«=þãü?>/6ÛõÓ,vÞè	BÔ~ÿò¿,`ü—
-Qÿùý_Èÿ° ÿ—l¨ëÙëÁÿÉÆÙõŸßÿ…úŸ, û+›ëÇÿLþ/蟅çÝ€LˆúÏïÿÂú?ðɦ¯þÒÉŸ{¢Âûû¿Êá*_àüGúÇÿåü÷ä6’ão´‹ý?âŸBü·÷뺚O7Í×p¿îzÜ“´ùŒá<ê?°p€Â$@&ý¿xÿVÕì[uWO›ùëm¤­ÿEý;[býŸÌþeCÐÿl¹îÖü1éú·Ê"ÿÏ~ÙPõßöOšÿÔáa ‹n@(׿ÿw€óÿ°ÿÉæÚñ¿‡ý/1ÿ·ÿWÈÿ±PÜ8ô ‚é¯ÿå"Zý)mD…û¤ñ÷èŸøeÓ_ÿ{ÿ¥~ù_å£íGô¯|i‘ÿå 5þ‡ó“ÚHÏÿU"ÿÏ1þ×ÿñçñÇù/LÄó?QH.Dýg¬ÿSîêÿ`ýÌÿeCÔÿÀõZó¿Ò;蟃/‹æ¶©çè„BÔÆú?;ÿÆþàÿ“
-Qÿëÿ”ûú?ðÿ³€ú?²¡®ÿå«ÿSîëÿ`þÏä/¢þ®ÿÓÿ‹ý?,h@2׏ÿC×ÿ)÷õàÿaáy½€Lˆú¸þ;Ÿÿ+Ôÿã!æÿ¡}¹ô¯ü_þ/ˆñÏxþÛ>ÿ‹ù8ÿM6Dýg÷ièŸø¿dCÔÿ°þ¯ÖûŸ)=ôϧj[¡Qÿùý_Xÿaã¿lˆúÏïÿ‚ÿ“ø¿dC]ÿËîÿÂþO ÙõŸñü·½ÿ
 ËÀÿÉöÈæúñ?“ÿúgá ø¿„BÔÆóßöþ/äÿxÀùo²!é_3ø¿Pÿbü³û¿<öÿ° ÿ—lˆúÏ_ÿúgù_Ùõ?pý¯öøóÿxø¼Øl×O³Øy£'Qÿùý_Èÿ²€ñ_6Dýç÷!ÿÃü_²¡®ÿe÷ÁÿÉä/¢þóû¿Pÿ“desýøŸÉÿý³p ü_B!ê?»ÿù?àÿ’M_ýëÄ3‰
-ïíÿ*Â×uY†)ü_$Äÿå øÔ6’ão´‹ç?!þù¡Ä{¿®«ùtÓ|
-7ì®û¦$Íÿwñ/<Îÿæa?ûW˜ÿ…¢ÿóߪš}«îêi3µ¤õ¿þ]QàüOPþ_6ýÏ–ëNÍ“®«ê?±€_6dý÷žý“æÿë<ÄÛo1ÿË ïÿ îñßžÏÿ}	ÿ/Xþ—ÍÕãÿ þ?®‹óxÐæF[tbIÐÿr½þ„6v
-OzÿaþÏöÿÈ&Aÿ{¡~ù_åcÙ'elи籐ÿÐ)m¤çÿ.ÿgÿ”@éó«,öÿ°ÏÿD ¹PõŸR (=ÿçËù?0ÿ—
-Uÿ)€ºóçó¿0þcÿ_ÍmSÏÑ…ªÿ”@éã¿Õõ?X@úO6Tý§ JÏÿ{U"ÿÇêÿȆ¼þ—P (]ÿÎèŸødCÕJ Âøïöÿ° ±H4Œÿ€º×ÿÎýÿNYøXØ/¿Âÿ/ªþS
- uÿ®¥øÿyˆùh_.4ý«üþ/œÿÆ5þÃú¿Švþó?pþ›l¨úÏîÿ‚þY€ÿK6Týêÿj½ÿÙø蟁OÕ¶B ªþ³û¿°þÃÆÙPõŸÝÿÿ'ðɆ¼þ—Ûÿý³ ÿ—l¨úÖÿÕZÿ+Jìÿbò—Í ãÿÎäawûü_R¡êXÿ×yþß)äÿxÀùo²¡é_ç÷ðq@vÿöÿ° ÿ—l¨úÏîÿ‚þY@þW6Tý[ÿ«=þãü?>/6ÛõÓ,öÝè	BÕvÿêÿ²€ñ_6Týg÷!ÿÃü_²!¯ÿåöAÿ, ý#ªþ³û¿PÿÈ_6Œÿyü_Ð?»Û¯àÿ’
-UÿÙý_Xÿgþ/ÙôÖ¿¥œü¹'*<Éÿ¥ËRãüOâÿrþ{jÉñ7Úyøs@‰ÿö~]Wóé¦ùnØ]÷MIŸÿõ_xØ­¾`þ/Šþ_¼«jö­º«§ÍüÕ6Ò×ÿ\QàüOPþ_6ýÏ–ëNÍ“®«ê?± ÿlÈúï=û'Íÿ­Áú;÷æÿbàý¿Ó Ô=þ·ü?¾„ÿ—m¡|É\=þwÛÿzèߟëßz¬ÿ± Í
-º Á$蹈VB;…'½ÿ‡0ÿgïÿ²IÐÿÞÿCh£_þWyã”VÆý‡ËqþÉñ?œÿ˜ÒFzþßèù¨ñ¶þÏùüß*‹úÏ,Äó?QH.Týg¯ÿƒü˜ÿˆªÿaëÿœÏÿÂøý?,|Y4·M=G/ ªþ³×ÿÁþ°ûG6Týg®ÿ£ò, þlÈë™ëÿXèŸ$ÿeCÕÿ°õZã¿SØÿÂÆ Ñ0þg©ÿƒó?xØ­¾(øÿ¥BÕÿ°õ\»þüÿ,Äü?´/šþÎ{'PãóßÞ8ÿM6Týãü·÷ü_²¡êPÿWëýç¿qñ©ÚVèäBÕ?Î{`ü—
-Uÿ8ÿí} ÿ—lÈë8ÿí] ÿ—l¨úÇùoïìÿÍ ã?Î{Ãìz_ÿ—T¨úÇùoïœÿ&šþu~ÿ—ƒÿ‹jü³û¿°ÿ‡ø¿dCÕvÿôÏò¿²¡êØú_íñçÿñðy±Ù®Ÿf±ïFO ªþ³û¿Pÿ—Œÿ²¡ê?»ÿùàÿ’
-yý/·ÿúgþ/ÙPõŸÙÿåPÿ“de3ÀøŸ§þôÏ®÷UðI…ªÿìþ/¬ÿ³ ÿ—lúê?­â×)QáIçêÒÔÿb¡ü_ŽOn£_üý¿õñüç0  þ⿽_×Õ|ºi¾†ûu×ãž$Íÿwñ/œ‡ÿ›…ç` ‚þ_¬«jö­º«§Íüõ6’ÖÿvúwÖãüOðâ/‚þgËu·æI׿UõŸX€þeCÕÿÙ?iþoàÿåḠ„rýûÿþŸÖüßkŒÿ,`ü—͵ã·úó{ýøyP7Xú“LýïÓÿ”6’óFyü©ñ?ÿ–ÔFzþ/< ˆ?Äø§”ÿè1þûóø—õ_Yˆçÿ¡ˆ\ˆúO)ÿAxÿ÷%ÞÿyÀì_6Dý§”ÿè±þßšÿ•þ¾,šÛ¦ž£
-Qÿ)å?(ù­°þÇÜÿ²!ê?¥üGÚþÿýü_øY@ýÙP×ÿÊPòÿÚaþÏòÿ²!ê?¥üeü/üÿ,h@2׏ÿå?(þßÒÁÿËÂsÐÈ„¨ÿ”ò=Æw>ÿWõYˆùh_.$ý'‰
-Oöáü'ˆñØÿuîÿ6˜ÿ1óŸdCÔ~ÿôÏ^üdCÔÿ°þ¯ÖûŸ)=ôϧj[¡Qÿùý_Xÿaã¿lˆúÏîÿÒð² ÿ—l¨ë¹ý_ö² ÿ—lˆúØÿÕZÿ+üŸ,`ÿ‡l®ÿ3ù¿ ž#€n@&DýìÿjÕSÈÿñ€óŸdCÒ¿fðyø¿8 Æ?¿ÿûX€ÿK6Dýç÷Aÿ,àÅO6Dý\ÿ«=þãü/>/6ÛõÓ,vÞè	BÔ~ÿò¿,`ü—
-Qÿùë!ÿÃü_²¡®ÿe÷ÁÿÉü_²!ê?¿ÿõ?Y@öW6׏ÿ™ü_Ð?Ï@7 ¢þóû¿°þÏü_²é«ÿ1éäÏ=Qáýý_å‡p•_†ÿ‹þñ9ÿ9¹äøíâú/âŸBü·÷뺚¿œ ÞÝFÚü?Æ¿p%üß,ìï¿Â2 Púñþ­ªÙ·ê®ž6ó×ÛH[ÿ‹úw¶ÄùŸ, ý'‚þgËu·æI׿UõŸXÀÀ/ªþûÏþIóƒý?<ìî¿Åü_*׿ÿw€óo0þ³0†ðEsíøßÃþ—˜ÿÛ¿ÿkøYßLЦ¿þ—‹hõ§´î“Æ­
-ÌÿY€ñG6ýõ¿÷ÿPÚè—ÿU>Ú~”±AÿÊ—%ò¿¤ÆÿpþcRéùÿ0  ÿÏ1þ×ÿñçñ/=öÿ°ÏÿD ¹õŸ±þO¹«ÿƒõ?0ÿ—
-Qÿ×ÿiÍÿÊûXø²hn›zŽ^@(Dýg¬ÿ³óÿhÔÿà»dCÔÆú?»ù¿²ðÿ³€ú?²¡®ÿå«ÿ³Ëÿkù?ðÿȆ¨ÿëÿ´ÆÿÂbÿÚ£ÌõãÿÐõvþÔÿfâ°þ
-ÿ¿Pˆú¸þ;Ÿÿ‡) ôÏAÌÿCûr!é_e÷©翱@ŒÆóßJœÿÂΓ
-Qÿùý_Ð?ðɆ¨ÿaý_­÷?S–Ð?Ÿªm…. at .Dýg÷i¬ÿ°€ñ_6Dýç÷ÁÿÉü_²¡®ÿåö9ìÿdþ/ÙõŸñü·ƒÿþO°ÿC6׏ÿ™ü_Ð?ûûÿ—TˆúÏxþÛÁÿ…õpþ›lHú×þ/Ôcÿüþ/ìÿaþ/ÙõŸßÿý³€ü¯lˆú¸þW{üÇù<|^l¶ë§Yì¼Ñ„¨ÿüþ/äYÀø/¢þóû¿ÿaþ/ÙP×ÿ²×ÿ‚ÿ“ø¿dCÔ~ÿê²€ì¯l®ÿ3ù¿ ö÷þ/©õŸßÿ…õàÿ’M_ýOH'î‰
-OòéÒþ/úÇÿåü÷ä6’ão´3ñç€ÿíýº®æÓMó5ܯ»÷„0ÿw¨ÿÂÃ~ùó©ôÿâý[U³oÕ]=m毷AXÿ·%Îÿdé?Ùô?[®»5Lºþ­²¨ÿÄü?²¡ê¿ÿìŸ4ÿ7ë,ìî¿Åü_*׿ÿw€óó?x˜@ø¢¹vüïaÿ£äÿ¬†ÿ—…ñ
-z Éô×ÿr­þ”6¢Â}Òø¯Cýs€÷Ùô×ÿÞÿCi£_þWy㔎…Ÿ”Qeøò¿¤ÆÿpþcRéùÿ0  ÿÏ1þ×ÿñíýÿØÿÃB<ÿ€äBÔþú?XÿcóÙõ?pýŸÖü¯,±ÿ‡…/‹æ¶©çè„BÔöú?ëÿ,`÷lˆúÏ_ÿþPÿG6Ôõ¿ìõ0ÿgÙÙõ?pýŸÖøþ
-ýs =: É\?þgªÿÿûéüÿR!êàú?®]ÿõ¿Yˆùh_.$ý+œÿö^ Æ翽pþ›lˆúÇùoïø¿dCÔÿ°þ¯ÖûÎãâSµ­ÐÈ…¨œÿöNÀø/¢þqþÛ;þ/ÙP×ÿpþÛû þ/ÙõóßÞ	Øÿ!›ëÇœÿö–Ùw¿ðI…¨œÿöNÀùo²!é_3ÔÿBý7ˆñÏïÿÂþàÿ’
-Qÿùý_Ð?Èÿʆ¨ÿëµÇœÿÇÃçÅf»~šÅÎ=@ˆúÏ_ÿù_0þˆ¨ÿüþ/äX€ÿK6Ôõ¿ìþ/ø?Y€ÿK6Dýç÷¡þ'ÈþÊæúñ?“ÿúgaßýÂÿ%¢þóû¿°þÏü_²é«íHGîˆ
-ïíÿ*Â×uYêþ/âÿr |jÉñ7Ú•ðÿ±@‰ÿö~]Wóé¦ùnØ]÷MIšÿïâ_øëÿ,ÄÛ?V˜ÿK…¢ÿóߪš}«îêi3µ¤õ¿þ]¼úg „ðECÑÿl¹îÔü1éú·ZáýŸødCÖïÙ?iþo
-ÖÿYˆ·†ù¿Xxÿït uÿö|þïKýs ”/™«ÇÿAüþ\ÿõ_xÐÅ
-º Á$蹈^B;…'½ÿǏ ðþ/›ýï
-@„6úå•7Ni^ü•Ù]Žü/Éñ? ™ÒFzþßh‡ü?Ôø§ JŸÿÛhÄøÏ@<ÿ€äBÕJ ôüŸGý&0ÿ—
-Uÿ)€ºóçó?«
-ìÿeáË¢¹mê9z¡PõŸR (}ü·ºDý°ûG6Tý§ JÏÿûðZ
-ýs€ú?²!¯ÿ% J׿3¨ÿÅ’ÿ²¡ê?¥ aüw
-ûXÐú—Ì ãg îõ¿sÿ¿S¨ÿÅC¼ýØÿ+ªþS
- uÿ®¥øÿyˆùh_.4ý«ìþ¯ÂÃÿÅ5þÃú¿Š¶ÿó?pþ›l¨úÏîÿ‚þY€ÿK6Týêÿj½ÿYU@ÿ,|ª¶º ¹PõŸÛÿå±þÃÆÙPõŸÝÿÿ'ðɆ¼þ—Ûÿý³ ÿ—l¨úÖÿÕZÿs
-û¿XÀþÙ0þçñAÿ,ÄÛÿ—\¨úÖÿužÿw
-ù?pþ›lhú×ùý_%ü_PãŸÝÿ…ý?,Àÿ%ªþ³û¿ ÿ•
-UÿÃÖÿjÿ8ÿ‡Ï‹Ívý4‹}7zPõŸÝÿ…ú¿,`ü—
-UÿÙý_Èÿ° ÿ—lÈë¹ý_Ð?ðɆªÿìþ/ÔÿcÙ_Ù0þçñAÿ,ÄÛÿ—\¨úÏîÿÂú?ðɦ·þÓ,_'D…'ù¿tYjœÿÈBBü_ÎOm#9þF;_ þP⿽_×Õ|ºi¾†v×}SÒçÿ…·¨ÿÀ‚:¼ ` Šþ_¼«jö­º«§ÍüÕ6Ò×ÿ\Q`ÿ7Xþ—
-Eÿ³åºSóǤëß"ÿÏü?²!ë¿÷ìŸ4ÿ·þ?v÷†ù¿Txÿï4 uÿ-ÿ/‘ÿcAc š«Çÿnû_ýûsý[‡õ?´ºA ˜ý/ÑêOhc§ð¤÷­æÿ,@û²IÐÿÞÿCh£_þWyã”VÆý‡Ë5ò¿$ÇÿpþcJéù¿Œø3@ÿ°õÎçÿ8ÿ‹xþ'* É…ªÿìõÿcóÙPõ?lýŸóù_ÿôÏÁ—EsÛÔsôB¡ê?{ýìÿa»dCÕæú?ªDþÔÿ‘
-yý/sýý³€ä¿l¨ú¶þOküw8ÿ•í¡É0þg©ÿcàÿaawÿ±ÿW,Tý[ÿǵëÿÀÿÏBÌÿCûr¡é_å÷ø¿8 Æ?÷ùo˜ÿñ€óßdCÕnÿÎáË¿²¡êPÿWëýÏ*ý³ð©ÚVèäBÕvÿÖXÀø/ªþ³û¿àÿdþ/ِ×ÿrû¿ àÿ’
-Uÿ™Ï+Jìÿbû?d3ÀøŸÇÿý³°»ÿð‰…ªÿÜç¿!ÿÇΓ
-Mÿi‡ÁE…'û¿,ü_PãŸÛÿe±ÿ‡ø¿dCÕöú_Ð?Xþ•
-UÿÃÖÿjÿ8ÿ‡Ï‹Ívý4‹}7zPõŸÝÿ…ú¿,`ü—
-UÿÙý_Èÿ° ÿ—lÈë¹ý_Ð?ðɆªÿìþ/ÔÿcÙ_Ù0þçñAÿ,ìî?ü_b¡ê?·ÿù?àÿ’Moý§•ü:!*¼·ÿË–ÂU¥vðqÿ—óßSÛHŠÿþügçáÿcÿíýº®æÓMó5ܰ»î›’>ÿ/<Îÿâa?ýÂü_*ý¿xÿVÕì[uWO›ù«m¤¯ÿ¹õŸxp¾h(úŸ-םš?&]ÿVãü0ðˆ¬ÿÞ³Òüßj¬ÿ³°»ÿ3Ìÿ¥2Àû§¨{üoù|©¡4”/š«Çÿnû_ýûsý
 [‡õ?´ºP0	ú_.¢ÕŸÐÆNá}ßÿcþÏ„Pÿ‘h_6	úßûmôËÿ*oœÒÊØ /Cþ—äøÎLi#=ÿú?\Pã?lýŸóù¿Uç?°ÏÿD ¹Põú?ïÌÿeCÕÿ°õÎçaüÇû?_ÍmSÏÑ…ªÔÿy`÷l¨úGýŸ÷êÿȆ¼þ‡ú?ïødCÕÿ°õZãQbÿÚCÿ’`üGýŸ7Ìîþcÿ¯X¨ú¶þk×ÿÿŸ…˜ÿ‡öåBÓZ1 ¨ð¤ú?ÑÿUÂÿÅ5þÙÎÛÅù_.pþ›l¨úÏæÿÚéß—%ôÏü_²¡êPÿ×ñûßaü/ >UÛ
-]€\¨úÏæÿÚë_{äXÀø/ªþ³ù¿öó­°þËü_²!¯ÿåòíôïÂ úç þ/ÙPõŸíü·ýøïö³€ý²`üÖÿµÿQÿ‰}úþ/©PõŸíü·ƒþ‘ÿãç¿É†¦¿þ—ÿ‹jü³ù¿õ?ò?,Àÿ%ªþ³û¿°ÿ—äeCÕÿ°õ¿Úþïúgáób³]?Íbߍž@ Týçö¡þ'ÿeCÕvÿò?,Àÿ%òú_îú_Èÿ° ÿ—l¨úÏîÿBý_ý•Í ãžú_XÿcaŸ~…ÿK*TýgóôýŸ<Àÿ%›^úßáϧ³éjù úMõ=žüÝ»¨ðþçÿú¸þ_h¬ÿ±€_6}Çÿ’rðð¤úºô8ÿ•‡þñß.Wˇåݏô!9þF;ú,⿽_×Õ|ºi¾>ô›$½ÿïâ_8Ôÿåa€1¦B!èÿÅú»ªfߪ»zÚÌ_o#}ýßÙëÿ,X_4ýÏ–ënÍ“®Ôæþ?ÙPõßöOšÿ‡õ?ö˜aþ/”ëßÿ‡ðÿµæÿþ?J_4׎ÿÝê'Õ±
-ùü
-z Éô×ÿrwúPÚHËÿïò?ªÀüŸ¼ÿ˦¿þ÷ö?Jýò¿Ê§´26è_ùÒ#ÿËAjüÇ¿&µ‘žÿ7ªDþŸbüSÊõ˜ÿûóø—ç³ÏÿE0¹õŸRþ‹Tÿë<`þ/¢þSÊõÈÿµæ%êÿððeÑÜ6õ½€PˆúO)ÿEªÿ¥±þÏvÿɆ¨ÿ”ò_”ú_
-ç¿ñ€ú_²¡®ÿ%”ÿ¢ø´ÇüŸdÿeCÔJù/Êø_XìÿaA{t ’¹~üï,ÿEñÿ—þöÀþ_©õŸRþ«ÇøïZç?¢þ1ÿíË…¤Åàÿrðq@ŒÿÀþ¯óýó?&pþ£lˆúÏïÿ‚þY€ÿK6Dýëÿj½ÿ™²„þYøTm+tr!ê?¿ÿë?,`ü—
-QÿÙý_þOàÿ’
-uý/·ÿËaÿ'ðɆ¨ÿý_­õ¿ÂÂÿÉöÈæúñ?“ÿúga ø¿¤BÔÿÀþ¯VýG…ü8ÿQ6$ýkÿ꿱@Œ~ÿöÿ° ÿ—lˆúÏïÿ‚þY@þW6Dý\ÿ«=þãü?>/6ÛõÓ,vÞè	BÔ~ÿò¿,`ü—
-Qÿùë!ÿÃü_²¡®ÿe÷ÁÿÉü_²!ê?¿ÿõ?Y@öW6׏ÿ™ü_Ð?û Àÿ%¢þóû¿°þÏü_²éÔÿb9§úùO¢Â{û¿Šðu]îöÃÿ•Ÿ~ñÿ/ÑôwDrüÒ±ÿGüó“ÿ0
-0”6vñ/ËŽø›8ì‡qßÇøïòÿæwCÿ¶@üSâß½Ø{¤ùßNÿÚ¼ÿ±`n,æ‚IÑxé«‚Z’;€.ýk×Ò©ÿe!ÆtzßlGV«‰ÒÖO>î>õØl6#µÿûír]7w‹ða³ØÖ뇺ú^ïþMaÇ“ËèŽOÈH›ÒŒõĸËí}½>|rl½ž„ø£ŸùIÿ-¥
-Òü¯Àüƒ”ø?֏Íâv™ÜFGÿ¯nõÿE‰ó¿Yøø×]=úKýø÷å¶zøýhÇØŽÇ^GßþxtÁŸÖu}øúhlŒŸXszÁ—M=¾`¤½ö¥?ºà³móýåÄ+Šr|ÜÄçEuzIx(¼:ºàS³Þþ8ú;Ž/ø¿ëf[­fß~ÿ“þÔ<ÔÿYÝÕ›çLxÓ8þ!ÿR­VG¿Äá79þ-ËÅÉwJ_]¿ø÷êëÃÑZÿýÓߦ_á±×¼\r|Á—O‹Y}ö{^ü5ÿþ¸ºøþöP}=ý÷…>‰æßþO={¨šÇþAÇ¿Åß¾,ÖûK^î”?ù5ÿãén'§Gύjõ衹ðÕ¿=­W/_ýWkA")ýÿ<¼üWáÉLm£óýßž¯ÿiú<z§‘9ÿ?hQ‰óÿn³Ç:õìÿØëßbý‡Cf¼Lú鹈Û<¨m¤¯ÿ+«ñþÇ‚º\2ýÇÿÄCߎ åÿ
-òÿ¤ÄŸ5ÿ‹üê;€%“¢ÿ|ùßÖûŸÇú?/
 ù_7q!&Z§¥‹ãô¯ñ“™Òg­q~¢íÌ¯IŠþYóðÿ³°Oɨù?_ªæ{ÔyþϏ'Ηæô‚ãüŸ.&ZÙãÎóEáíäø‚óüŸ)Ìxâ.èÈÿ©®üŸjåÿü8tOÇM´óN™ññoÑÊÿá	>º ÿÓúä;täÿTWþOuåÿT+ÿç&vlN.8Ëÿ¹ñØ'´ò΍/x-ÿ§^Íÿ)äÿ~ßÿ4¥
-’ÿGÃÿÃAJüYó¿¨ÿÅÂ¥ä/ò¿rHìÿI’$õÿ
-ý?‰ñçËÿcý—…ç¾Lúë¿dÍÿÅúOÈÿå'%þùò¾•ÿCý/tq£:±¤è?[þ¯hÍÿJ…óßXxÉÿ.gœ”ý›Øãì_ˆðÄèãÜŸ3æ²_œÄñ_„6ÒßÿµòØÿÉBJüó¿ý?û”\Ùµÿ³lïÿ,&å¸8½àtÿ§9Å£Zû?GÚm-Ûû?GfìÌÑùß²+ÿ[¶÷Žìääg¸´ÿÓ_paÿgqòC^Øÿ9ßÉŽüoÙ•ÿ-»ò¿å…ýŸá•úø·hïÿ““ZùßèÉ<ºàµüoùjþ·Dþ÷×!¥ÿçÌÿY‡þŸƒKÉ¿‘†¥8ÿçËÿ`ÿ7ñöÏÂÿ x™¤¾ÿSr2¤÷‡÷úŵÜlšðª@k£;ÿÓÚÿëòÿ,`ÿ¯lúéÿ¾Úij^ˆmô_8¬ÿ± ý˦ÿü¯àÝÿïáÿá %þ¬ûÿ±ÿ—…ñÍý¿`RôŸÏÿcÛþøÿXxñÿhíK7V) Bé“êïÚS¨-°²øK“¢ÖýÿXÿgaŸ’/ºüEÛÿaoÎ.8õ8;9Ú1^\ð¸²8¾ ]ÿÛ¸“&:üE—ÿ£hû?tYúã.ù?ÆÇ?Ãÿ‡;¹Q—ê(ºüE—ÿ£èòüÖ•Ç?Ã…úß“#›KqÉÿáO.xÍÿQ¼êÿ(àÿøuHéÿYýXÿcáÔöýßÒH\ÿáó`ý‡…CÿÁ%QÿcJÿ‡Âþã?¡´AŠ?ü?,ô¿ãÍÿ•ÈÿqÎýÿðÿò ÕFp¹¤è?_þ¯lçÿPÿ…—üŸ)ìØŽ'Þ¤e Ë“àñ{XïìiPÁbðË’¢Öýßð³°Oɸ®üŸ»°ÿÛۣ̙kçÿ
-cŠãïÐÎÿÙâä‚öþokÆÇMtäÿ\WþÏ]ØÿíKuò[\ÈÿŠãߢÿÇßáÒþï“ïБÿs]ù?וÿs—òÇÙ;w1ÿ§ŽÈù¿ò¨š»{5ÿç^Íÿ9äÿ~RúÖüÎ`¡µóù?Q$®ÿðåÿPÿ…ÝýŸ!ÿ'•DýkÊ ”ü+‘ÿá 5þ”>™øsÐ?þ†7ÿW ÿÇAJüƒþI!I×ÿîrèŸÄøóíÿ„ÿ—…âÕß%“¢Æúï¾Äû?/ùßÒ—¥*®8ý¹ô¦ßà4ó‹u…_œý³îÿ„þYاäLWþ×\Øÿ91=½àlÿ§Òþø‚vþ÷$÷j.äýqqÓ•ÿ5]ù_saÿ§r'M\ÊÿúãûÐÎÿ†^ù_t̵éÊÿš®ü¯éÊÿš®ü¯¹”ÿõãã_óBþwR_ðZþ×¼šÿ5Èÿþ:$¾ÿQŽÿ ½ÿcý…”ø³æÿáÿb¡µóùQ$öÿ|ù¬ÿ±ðÜCð2é¯Ï{þ¯Bþƒ”ø³žÿ‹ùÚÜhþ.—ýgËÿ8œÿû¯âŸù«J3.uRP;ñ') ñ$Äù8TšÉÄNŒ÷èb~MRôϺÿõYØ/Éû®ü¿°ÿ/ôþô‚³ýîxǘ¿ÿ)ìQîÅ_Èÿ”ú䂎üïÊÿøù­N~È‹ûÿŽ¿Ã¥ó_õñw¸´ÿor|AGþÇwå|WþÇ_:ÿÕÙã`]Èÿ(sîK翞<¯åü«ùüϯCâûŸ6„6Òó?Zyü)ñgÍÿ þ#—ÿEþG©ý¿%´Aêÿ
-úãÏ—ÿCý'öÃ/|ºRé¯Ë»ÿÏ!ÿÇAJüCÿï)mPÆ…÷?ãÏ·ÿõXð8ÿW4)úÏ—ÿméù_&Žê¿:Æ`›˜ÿu''@ãŠøî~œŸ,K5ñcô3¿ )úgÝÿ‡÷ö)9Û•ÿµöÿ©ñQÅP{aÿ_yzA;ÿ;>ÞRf/œÿ¨õÑ©…¶+ÿk»ò¿öBþ·(²ØöRþW»ãÚù_gíñ—öÿÇ?CGþ×våmWþ×^ÚÿgN~‹ù_ëŽoõ¥ý'Ñ|-ÿk_ÍÿZäRúÖüü?,\:üù?9$®ÿðå°þÃÂ> 3^(‰ú/)mÖÿ‘ÿg¡_üï«Ít±\?VÓÇúq¹þ‘ÔFúú¿qúÖÿEÓÖxéßlȹþKôÌÿ{ã­-´ý¾h-ÎÿdágñŸ?6ƒ=éñwZcÿ7¯Å¿™ó$Ä¿0f§Pÿ›…Žø]
 VëùtQ=&/úÑ=ÿ+Ïâ_† ó?þVŒÇz„) Tzéÿ{xô›åϵÑA§þƒæOô—°ÿ‡…þ?.WOÛz=ú÷åz…¾@½ô>Qo§ÛêŽÖF÷ø¯Ïõï,ê?³ µË¦çø¿˜/×ä6ã¿òÿYøûÿûÃ_ðñ                   àòÿÏY È
+‹ ¨Ø9K í_“ÛÊ‘åïëèSðq7båEýAô›=
+Ç(¼öN¬­ØØ'DRÝu“’}}5Ÿ~Q »MT•Ž¥ÎóÓܱ¤†XÝHœªBå©,ÊÇyðïÇ+;ûŸ¿CVQäyü_SäYýgã}ý¿G~1Æf6¯þ>Ø_2c­Ëå}?g<íöåv4úåóÝúîa¹zåºÅv‡ø†°˜Óøo¶ë!‚nñ7λÜd.TñwÖdŒ?‚füg›§åê˺Ç6b€Ã!ÞWâ_©Þù‹øûÙ_FYßÃwQÿòÅn·ÞþÛïGÙ»_«ùz;]Ϋ?ýái¿Xí—³?üåûê¡})—ߪ¯˜üÝãz¾xø·ê÷Î~?Z•‹êϞʇѿ¯·‹QõÏFÿ{³_l׫ÿ¶üï£ÿ|ni4ù»Ý~±Ù,Wwu³ñÓÿòÿ?ÏŒ³ñïœ
+ïfåì~1Ú-ÿ+~ªÉ¬ýùï6÷ßvËYÕBýfïvËÏUÌîvÕì»YlµúÂËGÆ¿8|©Ü,g‡¯˜ðn¹Zî—Õgÿ2^ýeó¿øm±‹¿.~›-6ûåzuü»(‰ùèañkõ3Wñî›—«ʪõêÕ?ýú¸Í£Ín1Úïf£ÇÝv´)£ÇÙb4ûm\·7Ú-6£Çý¶úÊ]üJ9š=®­.ÛÇæÂhöðåáiw?z|ümôå·êvÕ§UÿÙÑý~´û¶«~øê^ÿ¿¾øm__2]oö£‡Ç‘›¯ÖÿˆYÿf´]l¦wëõ|´Y-Gåý—iuÍìq3}XÜ•³oï>¯ï֏ËM¼A.˜ð»*(ÿ_<»ãþÏÕwvoÀñ»:~1øCx¦åÃònõX=%‡¿,çóêŽïêËâçúlôy¹ßžÃö?F~|ø›_—Û}õ¤¼ÛTßñvôX®ªfâçü¾ºs£/ÕÍþµúo¿ß¼{wú€š7ó€šï? Eó5|@«tl~øÔþd¨‘ô ãæjù€Vh1ùáP÷fÐWzÐIóu|@ù]õ€ýè¨ÿÉP+èAmÖ|@=ПcˆÏßÌúýÔšæšóý9Ðð“= NÒƒÚæø€þsÐâÍ< ¯ô ®ù€|@Žtü“= ^Òƒúæ:æús< “7ó€¾ÒƒæÍtÂôçx@ÍÏ–JÊ%]è•T’a.©~D‹ÿýÙ’IßD_éD¯%“˜MúYÑŸ-$½è•t’a>©~DÇ?þ#ú³%”¾ÿˆ¾Ò‹^I(f”~–GôgK)‚^Ô]I)æ”~–GôgK*}ÿý~/ê®$•³J?ð=ލJÐ4ýß»}¹ï·×ýßÕ
 —‚»ôSÐÿ öÖ£±›“É(83®ºdã3—lȃ-Âx<²Þ…ɨ(F¾êT²Ã ‘UÝy·‘)¼ù<ŒÍÈ„Š,^_}D¯·Åäùz3
+™›Œ«îÎÚQ°>—OÆÎ£‰©.2ÏÚQ>©>¨úc>vÕE…É̸jÇûQ6ziލ‚ÉÇÕ7©™x¥·¹û‘óñ»ç+«ž4·¡nÂfõ'†‰7ñßÙqõ—áùº¼ú®Bõ96³ñ³ªÎ²º²¨>¬úDÛ5/‡ê[Ìóøý„ê[ˆX=µãêû=ý‹ênúêÞTߣ	Æ„ø¡!Yÿ|öqUK™™ÔMLŠêŸy<©îJý!¾®ŠuãêÆfñ_W1ª¿ÃÜšê7Ξ¶]}vu‹øç‰­ÄT]˜'Õ
+«þÝÙ7iª°kCu3FÅ$ØIQ…\Œ3£žŸ]j«oܘøw¹syý]N²¢ºaõ·YüùÂ*6™¯oÏ8Ë·q\ýnd]¼Æýó‘ðñ»´ñ;¯"¯‡à«ÆOή"“ML݈󅯟3“Wß‚­©Ÿ‹jf±ßÆv]VTO‹/F/?gõ(˜—ßãë'!¼üMý·¾z4Oþè&.ägWðññññ×OôëÝlÿÛ~ä­³cë'ï>‹jhuYf‹ç•¸Ånd'ãÜÖÞM·O«Õru72Ç?~XϾ.æÕÇý«_Ùzåìý÷m7D
+ˆŽûÿ«0ç¼qqÿ÷ÿ#hľøuYÉ¡Ïç [ü³àLa3—ÇõŸ<cü!|7þÕï÷‹Ç^ƒ´øÇõ¿9Çø#h‹ÿlótó3^ÿ%Ëú/ºÄ?®yÞò¤Å¿¨â_ø‚ý?„Îñ߯7ë‡õÝ7Áƒk\néñßßoå|úl èÐF°ÿ~þ¯úƒ¹ˆ¿÷Ö3ÿ‡à ÿÆÞjIWÒõÿì(™nÊÙ×òn1]Î[ÚhÕf/ôŸ[¨ŽÂWMºþ£·¯]ó§¤ë߆@ÿüºê?aö/šÿ›,§þ0c7 ”›ßÿ§Ë]‹_X0ÿ÷9ǁÂW͍ãõwÑ¿¿Ô¿ñ¬ÿ!¼/Ø(¦³þ׫JQQá¯ìÿ¹2þg¡àü‚¡úUÓYÿõ®S™ [þ76ÏLf]Ôîó¿ã¿\Í¿ÙÄÇ@ÿ/óÿdñ»Ì»·Ñ>ÿõk8þ#ˆÅþÌ9€Zdúñ Äw‚é¦Üî—±fÇwÚH_ÿ9×ÿ0pþ¯™þ÷ß6}ŽÿærþWÿŽúGðiµü²\ÌÙ(E¦ÿºWç6ÒÇ[ä\ÿ‡`©|ÕÈô?[ß/¶‹ÕìÛá e9 ]ÿî2ÿýÿ‚g áúß}¹]̧Õº ÒÇÿ<3œÿC ÿG72ýÿ£ü¶›®¿LËÝn=[
 –ûå¯Ëý·ï¶‘>þÇZŒÔ?Ã@57ÿå¦­öõ¿†ÿ?ú Àý¿Z‘éõôøy±3€ÝbߪŠöñ?oè?dÔ?‚˜ÿ§öõ"цð±þYüûö]îÿ°œÿt©F¦€ÿ‹ú‡@ÿ—ndúïÙÿÕxÿ³ÁRÿ>”û’]€^dúø¿¸þã¿ndúø¿èÿ„@ÿ—n„ëÃû¿¸ÿíº‘é¿oÿWcýÏú?!pÿ‡nnÿ‡òQÿŽùWú¿”"Óßþ¯Ëü¿ÌÿaÈ
+g š‘èß ü_¬ÿA€ÿ‹û Ðÿ¥™þþ/ê󿺑é¿ïú_ÍñŸçÿaø¸Úí·O³Ø{³'PˆLÿ ÿó¿8þëF¦€ÿ‹ùôéF¸þ7¼ÿ‹þOôéF¦€ÿ‹õ?!0û«››Çÿ¡ü_Ô?„cþ•þ/¥Èôðqýý_ºé¨ÿÔ#ψ
+ïîÿ
+¿TWù‚þ/ãÿrþ{zÉñ·ÕïsÆAzü÷÷ÛE9Ÿî–Ÿ«Ûu×å–¤Íÿcü½7<ÿÂóŒ“ ¤ëÿÅû·)g_Ë»Åt9oi#mý/ê?·<ÿóÿºI×ÿl½í ùSÒõoYÿþt#ÔÂì_4ÿ7ë¿A8F`Æn@'7¿ÿw0 	æÿžçÿbàê¿nnÿ»Øÿóµþcýö½c ˜Îú_¯¢Õ_ÔFTxHÿ³Ppþëºé¬ÿƒÿGÔF·üo¢í?³.ê?·ÌÿBHŒÿñüÇ´6ùÿ‚ñÇ ‹ßõBcýŸþ_ñüOV Ò‹LÿCÖÿ	‡ú?\ÿƒÀù¿ndúï»þÏåüõÿP|Z-¿,söJ‘éÈú?µþÏõÌÿéF¦ÿ!ëÿÔù¿Óÿõt#\ÿ°þO­ÿ¸$Hýàø¯™þû®ÿs9þ¸ÿ‚a0ÕÜ<þ÷^ÿ'êÿÐÿá¾(E¦ÿ¾ëÿä
+ýç¬ÿ!æÿ©}½HôŸ!ü_Žþ/²øyþÛ1ÿËùžÿ¦™þþ/êý_º‘é¿gÿWãýÏKýCøPîKvz‘éàÿâúŽÿº‘éàÿ¢ÿý_º®ÿ
+ïÿâþOôéF¦ÿ!Ï;ø¿xþê_77ÿù¿èÿÆðœ€e7 ™þ‡<ÿíèÿâú?žÿ¦‰þ
+ÂÿåéÿB ‹?ÀÿÅý?èÿҍLÿ ÿõù_ÝÈôßwý¯æøÏóÿ0|\íöÛ§Yì½Ù(D¦€ÿ‹ù_ÿu#Ó?ÀÿÅüú¿t#\ÿÞÿEÿ'ft#Ó?ÀÿÅúŸ¨ÝÜ<þåÿ¢þ!<'`Ù
+èD¦€ÿ‹ëÿèÿÒMGý粓?D…w÷¿TWù‚ç?Bèÿ—óßÓÛHŽ¿5.öÿŒÿð¤Ç¿]”óénù¹º]w]nIÚü?Æß{ËúŽë/':I×ÿ‹÷oSξ–w‹érÞÒFÚú_Ôn-×ÿ!pö¯›týÏÖÛš?%]ÿ6æÿ!Ðÿ£¡þfÿ¢ù¿aý‡ 8Îÿ•róû`þïéÿÐSøª¹qüïbÿKÌÿÕú7žù?þ={ ÍtÖÿz­þ¢6¢ÂCÒøŸ…‚ó|ÿ×Mgýü?¢6ºå³`óÌdÖEýç.cþAbüç?¦µ!ÈÿŽù²ø÷]ÿ'4Öÿyþ†xþ'+ éE¦ÿ!ëÿ‡ú?\ÿƒÀù¿ndúï»þÏåü¯ÿ-õàÓjùe¹˜³PŠLÿCÖÿ©õ_pÿ
 úÿt#Óÿõêü_ôÿC`ýÝ×ÿ¬ÿSë?3œÿC`ö_72ý÷]ÿçrü6pÿØhææñ¿÷ú?µÿ?ú ç_ôÿ+E¦ÿ¾ëÿä
+ý³þ†˜ÿ§öõ"ÑðÙ‚þ/²øyþÛ!ÿËùžÿ¦™þþ/êý_º‘é¿gÿWãýÏKýCøPîKvz‘éxÿ—çúŽÿº‘éàÿ¢ÿý_º®ÿ
+ïÿâþOôéF¦ÿ!Ï;ú¿èÿ„Àýº¹yüÊÿEýC8ö¿ô)E¦ÿ!Ï;ú¿¸þç¿éF¢ƒ¨ÿÅúodñø¿¸ÿý_º‘éàÿ¢þ!0ÿ«™þû®ÿÕÿyþ†«Ý~û4‹½7{…Èô¨ÿÅü/Žÿº‘éàÿbþý_º®ÿ
+ïÿ¢ÿý_º‘éàÿbýOÌþêææñ(ÿõáØÿÒÿ¥™þþ/®ÿC ÿK7]ôÃÑ¿5íú?­ÿâùŸÏÿн7\PLÇñßÉNþ=ÞÝÿYéß¾°ô"èÿýz³~Xß}<iñ¯ý¿Î³þ#„ôøïï·‹r>Ý-?W·ë®Ë-¼ÿ{ËõÇŒ9ÐIºþ_¼¿›röµ¼[L—ó–6ù?k¹þþݤë¶ÞvÐü)éú·!pÿ'ê_7Bý'ÌþEó“ÑÿၻÜüþßÁ (˜ÿ{ÖÀà(|ÕÜ8þw±ÿ
+òÿ¹q¬ÿÁ¾g ™Îú¿Á:ÿuþ?\ÿ‡À÷ÝtÖÿÁÿ'j£[þ7uÙgë¢þs˜ÿEÿãù¯imòÿ<ÿ„,þ}×ÿ
+Íú_ã?‚xþ/+€éE¦žÿøVàü_72ý÷]ÿëÂÿÇ®ÿAø´Z~Y.æì”"Óÿõ¿ÂáüGÎÿ!p÷ŸndúçùoÖÿҍpýç?¾˜ý׍Lÿ}×ÿºÿYÿ…	ì 4sóøÏójŽàþ_¥Èôßwý¯œõ¿þEÄü?µ¯‰þ³Aý_áàÿòô!ÅÈóù_®ÿBàùº‘éHÿW8ø¿¨ôéF¦ÿžý_ú¯6°þ†å¾d ™þþ/ú¿!pü׍LÿCú¿BíÿÊéÿ„@ÿ—n„ëú¿jýÇWê ý_º‘éÈóëõ?›sÿîÿÐÍÍãïþ¯Pû?2êÂ1ô)E¦ÿ!Ï<èŸù?<ÿQ7ý„ÿ+§ÿ,þ ÿýÿèÿҍLÿ ÿõù_ÝÈôßwý¯æøo©W»ýöi{oö
+‘éàÿbþÇÝÈôð1ÿþ/Ý×ÿ†÷Ñÿ	þ/ÝÈô?¼ÿ+°þfusóø?ÿ‹õ?1#@ÿ—Rdúø¿¸þþ/ÝtÔÿrþ <üó‰ÿ«êèÿ‚ÿÙÓv»Xí§óíò×Ŷ{íó¿Ë÷?g
+÷ÿC(g›å4F—£€J$ú¿[Wò_­·ÓíºSíó¿Ëú?ÞêÂãbõDé륋þ7ÛŮҽ¸týgÿAdïMNýë¥ãøo¼øí/ñýÏW_¯®òßÿtÿ~½Y?¬ï¾¥?Éñ¯zë‚øïï·‹r>Ý-?W÷ë®Ã=IÊÿÔñ÷¾ ÿB›ê?Ît"ÐÿËæ¯M9ûZÞ-¦Ëùëm´Ïÿí…þs[Ðÿ	¡ ðU#Ðÿl½m×ü)éú·…§ÿ~ÝHõß}ö/šÿÖÿÅoÿŒóµÜþþß¾¤}üw—óÿܱþÃý_ª¹uüïgÿWh¼ÿ®ÿA0ž	@Ít×ÿz÷zKÚ¨žôþŸžó¬ÿ ›îú?l ‘´Ñ-ÿ››g&³.ê¿ÞÿÅüïð¤Æ¿Þ dÓƒôü¿¯„Œ? aü“
+À¦Ïÿm(¸ÿBÕᲬb„úO* ›žÿÁ1ÿóÝõŸT ¶=ÿטÿ…‚þŸVË/ËÅœ½€R„úO* ›>þ»¸@ý`õÝõŸT Vÿ/óXÿU7Òõ¿”°ýgú‡@ÿn„úO* ›®ÿà÷ÿ@0ú×Ìíã{Øöõ¿†ÿ?ú Ô±Éèÿ׊PÿI`ÛÇÿüRÿýÿbþŸÚ׋HÿÀÿeèÿB ŒÏþ/ßÈÿrþ‡çëF¨ÿÁý_–ú‡@ÿ—n„úï×ÿÕxÿ³¡ þ!|(÷%» ½õ?¼ÿ‹ë?8þëF¨ÿáý_ôB ÿK7Òõ¿Áý_Ô?ú¿t#ÔÏþ¯ÆúŸsÜÿû?tsûø?ÿ‹ú‡PÇ&£ÿK+Bý÷ìÿºÌÿû‚ù?<ÿ[7"ý€ÿËÒÿ…@ÿáý_Üÿþ/Ýõ?¼ÿ‹ú‡Àü¯n„úï¹þWsüçù>®vûíÓ,vÞì	"Ôÿðþ/Öÿ…Àñ_7Býïÿbþý_º‘®ÿ
+îÿ¢þ!Ðÿ¥¡þ‡÷±þfusûø?ÿ‹ú‡PÇ&£ÿK+Býïÿâú?ú¿tÓEÿ›õ.÷-:û7Ò®ÿ“ú.Äó?]Î÷ÿVM×ñ_tððÎþϨSø‚çÿBèÿýz³~Xß}<Éñ·Õï=㏠=þûûí¢œOãŒ`¹ºërK’Þÿëø{o¸ÿÂó,ç :I×ÿ‹õwSξ–w‹érÞÒFÒú­ÿÜZžÿºI×ÿl½í ùSÒõoC`ý7ôÿéF¨ÿ„Ù¿hþŸÑÿáÇn@'7¿ÿ÷âÿkÌÿ}ÎñÇÝÜ8þwPbþÿ Cÿ?†ì={ ÍtÖÿzwúˆÚˆ
+IãÆú ¨~ÝtÖÿÁþ'j£[þ76ÏLf]Ôn™ÿ…ÿãñ¯imòÿãAÿ¤ò_æÿ¡±þoXÿB<ÿ—Àô"ÓRù/Áú_ȹþ‡óÝÈôŸTþ«CþïrþWÿÜÿáÓjùe¹˜³PŠLÿIå¿$þŸÂsý¿º‘é?©üWZýŸCþ/äôÿC`ý/Ý×ÿRÊIü?qK0õ€ïÿº‘é?©ü—`ü6pÿØhææñ¿½ü—Äÿ2ú <OÀØèD¦ÿ¤ò_‚ú?>ä¬ÿ!æÿ©}½HôŸ!ü_<ÿ‚,þ}û¿.÷XÎÿ@ðüGÝÈô?¼ÿËSÿ¸þ«™þ{ö5Þÿl0Ô?„å¾d ™þþ/®ÿ@àø¯™þþ/ú?!Ðÿ¥áúßðþ/îÿ„Àñ_72ý÷íÿj¬ÿÙœþO4~èææñ(ÿõá¹f7 ™þûö]æÿ}`þÏԍDÿ©‡ÁE…'û¿ý_dñÞÿe¸ÿý_º‘éPÿ‹ú‡Àõ_ÝÈôßwý¯æøÏóÿ0|\íöÛ§Yì½Ù(D¦€ÿ‹ù_ÿu#Ó?ÀÿÅüú¿t#\ÿÞÿEÿ'Žÿº‘éàÿbýOÌþêææñ(ÿõá¹f7 ™þ‡÷1ÿ‡þ/ÝtÔ¿—üy *¼»ÿ«ø¥ºÊ<ÿBçø¿œÿžÞFrü­q±ÿgü‡'=þûûí¢œOwËÏÕíºërKÒæÿ1þÞ[Ö€p@ÆI€NÒõÿâýÛ”³¯åÝbºœ·´‘¶þõŸ[Ëõœýë&]ÿ³õ¶ƒæOI׿
+ùøu#ÔÂì_4ÿ7¬ÿ‚á Çn@)7¿ÿw0 	æÿžþ?´ÿ鿯ñ¿‹ý/1ÿWëßxæÿ ø÷9{ ÅtÖÿz­þ¢6¢ÂCÒøŸ…‚óôÿ꦳þþQÝò¿Y°yf2ë¢þs[0ÿ‹ 1þÇóÓÚäÿÇü?Yüû®ÿëÿ<ÿC<ÿ“€ô"ÓÿõŠCý®ÿAàü_72ý÷]ÿçrþgƒ5Ô?‚O«å—åbÎ^@)2ýYÿ§ÖÁý?èÿӍLÿCÖÿ©ó!Ðÿõt#\ÿ°þO­ÿh	¤þPþº‘é¿ïú?—㰁û ˜À@37ÿ½×ÿ©ýÿÁÐÿáy–½€Ndúï»þOÞÐ?ëÿaˆùj_/ýg ÿ—
+ô!ÅÈóߎþ/Îÿ ðü7ÝÈôðQÿèÿҍLÿ=û¿ï6Xê‡r_²ЋLÿÃû¿<
 × pü׍Lÿ ÿýŸèÿҍpýopÿWÆýŸ(ÝÈô?äùoGÿýŸ¸ÿC77ÿCù¿¨Ç Ðÿ¥™þ‡<ÿíèÿâú?žÿ¦‰þ
+ÂÿÅúodñø¿¸ÿý_º‘éàÿ¢þ!0ÿ«™þû®ÿÕÿyþ†«Ý~û4‹½7{…Èôð1ÿã¿ndúø¿˜ÿ@ÿ—n„ëÃ×ÿ¢ÿ寙þþ/Öÿ„Àì¯nnÿ‡òQÿŽ ÿK)2ýü_\ÿ‡@ÿ—n:êߤžùxJTxgÿ—¯¾^]åsú¿tÿËðÉm$ÇßÏbü‡GÿýývQΧ»åçê~Ýu¸'Ióÿ:þÞóüo‡ÙÆù¿Rú1ÿmÊÙ×òn1]Î_o#iý¯Önžÿ	åÿu#Ðÿl½m×ü)éú·…cý'øu#Õ÷Ù¿hþo¸þ‡!Þ~Çù¿Znÿow µÿîrþŸ[ú!pù_7·ŽÿýøÿBãýŸç?`0ö½qìÔÒ]ÿëUôúKÚ¨žôþŸžóÜÿ£›îú?€$mtËÿf¡¶ý[õ2žÿ!5þÇ “ÚHÏÿÛêÆ0þI€Òçÿ6Üÿ!žÿÉ
+ at zê?© Pzþ/ËüÎÿu#ÔR öü_cþ
+îÿðiµü²\ÌÙ(E¨ÿ¤@éã¿Ë,ë@`úO7Bý' äÿÇüÖÿэtý/¥ @ÿY þ!Ðÿ£¡þ“
+ ¥ë?8Çý?7 ©æöñ¿½ Pûú_Ãÿý?˯ôÿkE¨ÿ¤@íã~©ÿ‚þ1ÿOíëE¤ÿlhÿ—)
+žÿAÿžý_¾‘ÿåüÏӍPÿÃû¿¨ôéF¨ÿ~ý_÷?
+ê‡r_²ЋPÿƒû¿× pü׍PÿÃû¿èÿ„@ÿ—n¤ëƒû¿¨ôéF¨ÿžý_õ?ç¸ÿ寛ÛÇÿü_Ô?„úögôiE¨ÿžý_—ù_0ÿ‡ç¿éF¤¨ÿ•Ñÿ…@ÿáý_Üÿþ/Ýõ?¼ÿ‹ú‡Àü¯n„úï¹þWsüçù>®vûíÓ,vÞì	"Ôÿðõ¿XÿÇÝõ?¼ÿ‹ùôéFºþ7¸ÿ‹ú‡Àôn„úÞÿÅú(ÝÜ>þäÿ¢þ!Ô·?£ÿK+Býïÿâú?ú¿tÓUÿNtò灨ð$ÿWu•çùŸºÇÿåü÷ä6’ão·–ñG ˆÿþ~»(çÓÝòsu¿î:ÜÁüß³þ†zõ…óµôÿâýÛ”³¯åÝbºœ¿ÞFúú_nžÿ	åÿu#Ðÿl½m×ü)éú·…cý'ôÿèFªÿî³Ñüßä\ÿƒP»/8ÿWËíïÿí öñ¿áÿÉý¿Œ£ò5sëøßÁþ×Aÿ¡ñþo¸þÁØ÷ìÓ]ÿëU´úKÚ¨žôþŸžó|ÿ×Mwýü?’6ºå³`óÌdÖEý‡ŒçAHÿñüǤ6Òóÿ6	Œ? aü{®ÿs9ÿ·¡`ýgñüOV Ò‹PÿÃ×ÿaþçÿºê¿çú?ù_(¸ÿ§ÕòËr1g/ ¡þ‡¯ÿÃýÿ¸ûG7Bý_ÿ‡ù?¬ÿ£éúßàõ¨LþëF¨ÿžëÿ\ê?8Çý?7 ©æöñ ú?ôÿ@¨W_2úÿµ"ÔÏõòFýúÿ1Äü?µ¯‘þ3žÿöVƟ翽xþ›n„úçùooú¿t#Ô¿þ¯ÆûÏCñ¡Ü—ìô"Ô?Ï{#pü׍Pÿ<ÿí@ÿ—n¤ë<ÿím@ÿ—n„úçùooîÿÐÍíã?Ïû™©{ߌþ/­õÏóßÞ<ÿM7"ý€ÿËÐÿ…@ÿáý_Üÿþ/Ýõ?¼ÿ‹ú‡Àü¯n„úï¹þWsüçù>®vûíÓ,vÞì	"Ôÿðþ/Öÿ…Àñ_7Býïÿbþý_º‘®ÿ
+îÿ¢þ!Ðÿ¥¡þ‡÷±þfusûø?ÿ‹ú‡P÷¾ý_Zêxÿ×ÿ!Ðÿ¥›ŽúO¬øuNTxÒùŸ¦ðõ¿ tŽÿËñïémt‹ÿ±ÿw¡êÿãïéñßßoå|º[~®n×]—[’4ÿ¯ã。ÿÂs8	ÐIºþ_¬›röµ¼[L—ó–6’ÖÿjýçÖðüO|ñ×MºþgëmÍŸ
 ’®ë?A þu#ÔÂì_4ÿÏèÿÅpŒ ] J¹ùý¿ÿOcþïsŽÿ8þëæÆñ¿ƒúóýú1dï¹ô§™Îú?¤ÿEm$çÿl–[æ $Æÿxü[Z‚ü_ÁøcÅ?©üG‡ñ?4Öÿë¿Bˆçÿ±ˆ^dúO*ÿ!xÿ9ßÿ1pö¯™þ“ÊtXÿ¿œÿUã?ýÿ>­–_–‹9{¥ÈôŸTþC’ÿ/<×ÿ Ðý¯™þ“ʤíÿ?¬ÿW/ Ô?ÖÿЍpý/¥ü‡$ÿS‚Ô? æÿu#ÓRùÁølNÿ?Øhææñ¿½ü‡Äÿ2ú!<G€½€NdúO*ÿÑaüÏúÏYÿBÌÿSûz‘è?µHTx²ÿ‹ç?AÅ¿oÿ×¥ÿÛrþ‚ç?éF¦ÿáý_žú‡À?ÝÈôß³ÿ«ñþgƒ¡þ!|(÷%» ½ÈôðqýÇÝÈôðÑÿ	þ/Ý×ÿ†÷qÿ'ú¿t#Óßþ¯ÆúŸÍéÿ„Àýº¹yüÊÿEýCxŽ »Èôß·ÿë2ÿïóxþ“n$ú7ÿ—¥ÿ,þ ÿ÷ÿ@ ÿK72ýü_Ô?¾øéF¦ÿ¾ë5Çžÿ…áãj·ß>ÍbïÍž@!2ýü_ÌÿBàø¯™þþ/æ Ðÿ¥áúßðþ/ú?!Ðÿ¥™þþ/Öÿ„Àì¯nnÿ‡òQÿž#Àn@'2ýü_\ÿ‡@ÿ—n:ê,;ùó@TxwÿWñK}UFÿ‚Îñ9ÿ9½äø[ãâú/ã?<éñßßoåüåðm¤Íÿcü½·ôC8ÜÿŒË€JI×ÿ‹÷oSξ–w‹érÞÒFÚú_ÔnÏÿ„ÀôŸnÒõ?[o;hþ”týÛP°þüºê?aö/šÿîÿÁPßÇù¿Vn~ÿï` Ìÿ}àøaLá«æÆñ¿‹ý/1ÿWë?~™ú0~?a ˜Îú_¯¢Õ_ÔFTxHÿ³PpþÆÝtÖÿÁÿ#j£[þ76ÏLf]Ôîó¿ã<ÿ1­
+Aþ¿pÌÿCÅ¿ïú?¡±þo¹ÿB<ÿ“€ô"ÓÿõŠºþ×ÿ0pþ¯™þû®ÿs9ÿ‹ ©ŸVË/ËÅœ½€Rdú²þO­ÿ‚õ?0p÷ndú²þOÿþ¬ÿ£áú߀õjýg†óôÿèF¦ÿ¾ëÿ\ŽÿÁÜÿÁv š¹yüï½þOíÿgýoÇõWúÿ•"Óßõò†þëCˆùj_/ýgÿσ ‹ÿç¿<ÿ
 ÏӍLÿÃû¿rêý_º‘é¿gÿWãý/. Sÿ>”û’]€^dúø¿¸þã¿ndúø¿èÿ„@ÿ—n„ëÃû¿¸ÿý_º‘éÈóßþ¯@ÿ'îÿÐÍÍãÿPþ/êÂáþÓÿ¥™þ‡<ÿí æÿ0ðü7ÝHôoþ/Öƒ ‹ÿðþ/Ëý?èÿҍLÿ€ú_Ô?æu#Óßõ¿šã?ÏÿÃðqµÛoŸf±÷fO ™þþ/æ!pü׍Lÿ ÿó?èÿҍpýoxÿýŸèÿҍLÿ ÿëB`öW77ÿCù¿¨‡ûOÿ—VdúÞÿÅüú¿tÓQÿÙÉŸ¢Â“ü_ñ*Cÿ‚Îñ9ÿ=½äø[ãªË éñßßoå|º[~®n×]—["˜ÿ{ÖÁpX~áü_+éúñþmÊÙ×òn1]Î[Ú¬ÿ[Çó?!0ý§›týÏÖÛš?%]ÿ6¬ÿþÝõŸ0ûÍÿáú„úþ;Îÿµróû`þïyþ†	…¯šÇÿ.ö?Aþ/7žþ_ã÷ì4ÓYÿëU´ú‹Úˆ
+IãVdœÿCàû¿n:ëÿàÿµÑ-ÿ›…hûϬ‹úϝgþAbüç?¦µ!ÈÿŽù²ø÷]ÿ'4ëÿpÿ„xþ'+ éE¦@ý®ÿAàü_72ý÷]ÿçrþ7 Rÿ>­–_–‹9{¥Èô¨ÿÃõÜý£™þõèÿ‡Àú?º®ÿ
+_ÿ‡óÌþëF¦ÿ¾ëÿ\ŽÿÁÜÿÁv š¹yü¨þÏÿÀp˜~Ñÿ¯™þû®ÿ“7ëÿ°þ7„˜ÿ§öõ"ÑÆóßÞ²øóü··ÏӍLÿ<ÿí­@ÿ—ndúïÙÿÕxÿãùo(>”û’]€^dúçùooŽÿº‘éŸç¿½èÿҍpýç¿½èÿҍLÿ<ÿí­Àýº¹yüçùo?5‡î—þ/­ÈôÏóßÞ
+<ÿM7ý„ÿ‹õß Èâðqÿú¿t#Ó?ÀÿEýC`þW72ý÷]ÿ«9þóü?W»ýöi{oö
+‘éàÿbþÇÝÈôð1ÿþ/Ý×ÿ†÷Ñÿ	þ/ÝÈôð±þ'fusóø?”ÿ‹ú‡pè~éÿÒŠLÿ ÿ×ÿ!Ðÿ¥›Žú7¹ìèÏš¨ðÎþ/_}½ºªºŒþ/ Ýãÿr |rÉñ·Æ[úÿ â¿¿ß.Êùt·ü\ݯ»÷$iþ_Çßû‚ëÿâígœÿkE ÿóߦœ}-ïÓåüõ6’Öÿjýç.ãþ…¯þgëm»æOI׿-<ßÿ!Ðÿ£©þ»ÏþEó“sýB¼ý3ÎÿÕrûû»¨}üw—óÿÜYêÉ©|ÍÜ:þ÷ãÿ—ú·¬ÿ‚Áø÷ìÓ]ÿëUôúKÚ¨žôþŸžó|ÿ×Mwý@’6ºå³mÿ™uQÿÁæ¤Æÿx dRéù-aŒ? aü“
+ ¥Ïÿm(xþ„xþ'+ éE¨ÿ¤@éù¿Àú 8ÿ׍PÿI€Úóù_(¸ÿ§ÕòËr1g/ ¡þ“
+ ¥ÿ.³¬ÿ»t#ÔR Aþ¿pÌÿA`ýÝH×ÿR
+ 	ôŸ±þ&ÿu#ÔR týç¹ÿ‚	Ô¿fnÿÛ µ¯ÿ5üÿõ¿0ÄÛÏý¿zê?© PûøŸ_ê¿ ÿCÌÿSûzé?ø¿,ý_„ñïÙÿåù_Îÿ0ðü7Ýõ?¸ÿËRÿèÿҍPÿýú¿ï6Ô?„å¾d ¡þ‡÷qýÇÝõ?¼ÿ‹þOôéFºþ7¸ÿ‹ú‡@ÿ—n„úïÙÿÕXÿsŽû¿ pÿ‡nnÿòQÿâí§ÿK/Bý÷ìÿºÌÿû‚ù?<ÿM7"ý€ÿËÑÿ…@ÿÁý_÷ÿ@ ÿK7Bý_ÿ‹ú‡Àü¯n„úï¹þWcü/xþ†«Ý~û4‹7{…õ?¼ÿ‹õ!pü׍PÿÃû¿˜ÿ@ÿ—n¤ëƒû¿¨ôéF¨ÿáý_¬ÿÙ_ÝÜ>þäÿ¢þ!ÄÛOÿ—^„úÜÿÅüú¿tÓUÿ‰–¯3¢Â“ü_ÕUžç?Bèÿ—óß“ÛHŽ¿5ÞfŒ?Aü÷÷ÛE9Ÿî–Ÿ«ûu×ážæÿ¾`ýÙñ€“ ôÿâýÛ”³¯åÝbºœ¿ÞFúú_nîÿ†ÀåÝô?[oÛ5Jºþ-óÿ èÿэTÿÝgÿ¢ù¿ÉéÿƒPßÿçÿZ¹ýý¿Ý Ô>þ7ü?¹eþ‚á@5·Žÿìôïÿ†ëLöž]€bºë½ŠVIµÂ“Þÿ³ÂsþÚ×Mwýü?’6ºå³`óÌč•þC–3ÿ‹ 5þÇó“ÚHÏÿÛøWŒ? aü{®ÿs9ÿçùo(âùŸ¬ ¤¡þ‡?ÿù?œÿëF¨ÿžëÿ4æ¡0Ô?‚O«å—åbÎ^@)Bý_ÿ‡û p÷n„ú¾þóXÿG7Òõ¿ÁëÿPÿ˜ü׍Pÿ=×ÿ¹Ôp<ÿƒ	Ô¿fnÿªÿCÿ„úþsÿ¯Z„úï¹þOÞ<ÿþ1ÿOíëE¤ÿlhÿ—)Š@ÿaü?ÿó?<ÿM7Býïÿ¢þ!pùW7Bý÷ëÿj¼ÿÙPPÿ>”û’]€^„úÜÿe¸þã¿n„úÞÿEÿ'ú¿t#]ÿÜÿEýC ÿK7Býþ÷AàþÝÜ>þäÿ¢þ!Ô÷Ÿþ/µõ?øùoÌÿaàùoºé?ñ0¸¨ðdÿWAÿaü‡÷qÿú¿t#Ôÿðþ/ê—u#ÔÏõ¿šã?ÏÿÃðqµÛoŸf±ófO ¡þ‡÷±þ/Žÿºêxÿó?èÿҍtýopÿõþ/Ýõ?¼ÿ‹õÿ 0û
 «›ÛÇÿü_Ô?„úþÓÿ¥¡þ‡÷qýý_ºéªÿÄ’_gD…wö¹â—xUnèÿBÐ=þ/ç¿'·‘ÿƒÿÏúÿ â¿¿ß.Êùt·ü\ݯ»÷D0ÿ÷<ÿÃaúÅù¿VúñþmÊÙ×òn1]Î_o#}ý/·¬ÿ„!§ðU#Ðÿl½m×ü)éú¯äÏ÷øu#Õ÷Ù¿hþor®ÿC¨ïÿŒó­Üþþßn jÿþŸÜæÔ?C嫿Öñ¿ƒý¯ƒþCãýßpý‚ÉÞÓ¨˜îú_¯¢Õ_ÒF­ð®ïÿ1ÿg³xõ€Ú×Mwýü?’6ºå³`óÌdÖEý‡Ì3ÿ‹ 5þÇó“ÚäÿYÿ„0þ=×ÿ¹œÿÛxþ„xþ'+ éE¨Öÿy#pþ¯¡þ{®ÿs9ÿ³¡àû?„O«å—åbÎ^@)Bý³þρ»t#Ô?ëÿ¼XÿG7Òõ?ÖÿyÐÿ£¡þ{®ÿs©ÿà÷ÿ@0ú×Ìíã?ëÿüÌÔ÷ŸûÕ"ÔÏõòfýúÿ!Äü?µ¯‘þ‹E…'Õÿ±6¾Ðÿ@ÿáÎ;ÄŸù_<ÿM7Býçÿªõ‚£þ!Ðÿ¥¡þûõ¾ÿÆÿ"£þ!|(÷%» ½õ?œÿ«Ö¿‹ÛÀ¨ ÿu#Ôÿpþ¯Zÿyá¸þþ/ÝH×ÿóôŸêý_ºê¸óßëÎqÿ7îÿÐÍíãÏþ¯Zÿžõ@Ò¯ôiE¨ÿáÎ;è¿`þÏӍHÿPÿ+Ðÿ…@ÿáü_Ïõ¿˜ÿ@ÿ—n„úÞÿÅý¿˜ÿՍPÿ=×ÿjø¿‹Œú‡ðqµÛoŸf±ófO ¡þ‡÷±þ'Žÿºêxÿó?èÿҍtýoðú_Ìÿ@ ÿK7Býïÿbý_Ìþêæöñ ú_\ÿƒpH¿Òÿ¥¡þ‡ó=×ÿbþý_ºé¢ÿ]%üùôq6ݬÿQ‰~WþOþîÞFTx÷óC\ÿ¯f Ô?üºé8þ¢ƒD…'Õÿ3…çù¯:ǿެÖwßBrü­q9ë?BHÿþ~»(çÓÝòóCÇi@Òûÿaÿ‡gý_‡ Œ9
+PJºþ_¬¿›röµ¼[L—ó–6Ò×ÿsk¹þÁQøªI×ÿl½í ùSÒõÏúÏ(èÿӍPÿ	³Ñüßd\ÿƒpÀŒó¥Üüþß‹ÿ¯1ÿ÷ôÿa((|ÕÜ8þwP¿¤þKn<óÿÂ{ö šé¬ÿõ*îôµ‘–ÿúÏBÁù?¾ÿ릳þö?QÝò¿Y°yfâÁ•
 þsg™ÿEÿãñ¯imòÿ…cþ‚,þIå¿:ÌÿCcýßòüoñü_V Ó‹LÿIå¿$ûÿr®ÿaàü_72ý'•ÿêÿkœÿXÿçÕòËr1g/ ™þ“ÊIü?EÎõÜý§™þ“ÊIêžÿ†õ¿t#\ÿK)ÿ%ñÿÄ’ÀÔ? fÿu#ÓRù/Áølàþ&°ÐÌÍã{ù/Ñù†þ‡ pÿ¯VdúO*ÿÕaüϛ翲þ„˜ÿ§öõ"цðú¿Èâß·ÿ«qþç xþ£ndúÞÿ•SÿèÿҍLÿ=û¿ïq˜úGð¡Ü—ìô"Ó?ÀÿÅõÿu#Ó?ÀÿEÿ'ú¿t#\ÿÞÿÅýŸèÿҍLÿ}û¿ë6Ðÿ	û?tsóø?”ÿ‹ú‡p ý_Z‘é¿oÿ×eþßæÿ0ðüGÝHôoþ/Öƒ ‹?ÀÿÅý?èÿҍLÿ ÿõù_ÝÈôßwý¯æøÏóÿ0|\íöÛ§Yì½Ù(D¦€ÿ‹ù_ÿu#Ó?ÀÿÅüú¿t#\ÿÞÿEÿ'ú¿t#Ó?ÀÿÅúŸ˜ýÕÍÍãÿPþ/êÂ! ôiE¦€ÿ‹ëÿèÿÒM›þWë¹ðÔÏÞÙÿ嫯›Pïÿ¦ÿkx:Å?þ¿TÓß	éñ/ŠØÿ3þÓÿj`EmÔñ/Š–ø;\î«ÿ­Ïÿvá—‘ý]Ï?ì5ÿ„øwXì½BÒü/êß—óý‚}ï8ÿSL‚þ«—¾²KzЦ“7ôŸ;æ!Ä Nï—û‘3Ù$3.LÞÕõ¸ÜíFÙá÷_ÖÛÅònUýq¹Ú/¶‹ò×Eýo¼OÞ=¬£8>"#c;6›¿[ïïÛã_Ž]0“*þìg~@ÒÆ'jC4ÿ+8ÿCÿÇÅãrõeÞFKÿo¬iÎÿÏÿ†ðî¯u=úËâñïë}ùðûQÍØÇ!¾þñä‚?m‹ã×GckÃÄÙó>íóçF&˜P„“þ0Û/}ù€x…/ƧM|\•ç—TEÈN.ø°Ü|@Íéÿw»Ü/>—³¯¿ÿÎZ>,þ³¼[ìž/°¹5§ßä_ÊÍæä‡8þ$§?Åj½:û„Ѩþä‚øÅ¿—ŸN®0Ùé÷ð×?ýmúiU=vÕ5/—œ^ðÇõÓj¶¸ø9¯þ˜Ü\ý„¿=”ŸÏÿ½7gÑüÛÿYÌÊåã?¿‡J§?Åß>­¶‡K^îT8û1ÿãéîp'§'ÏMÖüêÉCså«{Ún^¾ú¯Ö‚Fúÿyõò_Vfr­ïÿ.
 »ìÿ=ëÿa°YÕ;ìåÿQ‹JH›ÿw0{\¡Uÿ§þƒþ
+×ÿ0#0£àuÒIÿëUÜæ!n#}ý?39ßÿ dïé ×Lçñ?õзDùÿÀü?‚„øcó¿Ìÿ@ÈÞs°fô?`þ·ñþ—sýÃKþ7ŸäULŒIKÿúÓô¯
+ŸÛfÍÃĸ1;™“ýCó¬ÿƒá’É®äÿB‘ý3ß“]æÿÂx’‡Âž_pšÿ3~b2wzÁeþÏûà&§\æÿ¬·ãI8¹ %ÿ—µåÿ²Fþ/Œ«îé´‰fþ/Ïìøô§häÿ|õŸ\ÐÌÿsö	-ù¿¬-ÿ—µåÿ²Fþ/Ÿ¸±=»à"ÿ—ÇÖŸ]ÐÈÿåùøô‚×òÙ«ù¿Œù¿‡´÷?#jCäÿñôÿ Hˆ?6ÿËú_®%™ÿÕCZÿ/S¤¨ÿwìÿ¤Å˜ÿçú/„瘾N:ë¿Àæÿbý'æÿ†'!þæÿBcýõ¿0ÿÞäìüÕ’ ÿáòþJþç¿AxÉÿù¼
+Î8)û7q§Ù¿*ÂkNs¹Íi.ûÁIÿ—´!xÿ/,÷BHˆ?vÿ'û‡”\Ѷÿ³hîÿô“bìÏ/8ßÿébNñ䂯þÏ‘ÉO6ˆÍýŸ#;ÎíÉ-ùߢ-ÿ[4÷ŽÜäì{¸¶ÿӝ^peÿ§?û&¯ìÿOïdKþ·hËÿmùßâÊþO›™ÓŸ¢¹ÿsä'g4ò¿&·§M¼–ÿ-^ÍÿÌÿþ8$ôÿÐü_aØÿ#¸–üjQió\þ‡û¿1ÄÛ?«þ£àu’øþ/JÉHÞÿ£ÿŸïÿÃÓ)þ›õn·¬Þ„m´çûóŒùÜÿ«›Nú¿/wñ¬iý»Œë¨Ýtžÿy°ÿÇÒÿƒ !þÐýÿû!ŒßOØÿ+&Aÿú\ÓÿCÿ„ÿ‰‡.³ÏÌYõw¬õÙ™Èy®,þÐ$èëÿàú?„CJÞ·ù?|Óÿá|°œû?r79Ù1î¯ø?òŸ^Ьÿmó³&Zü¾Íÿá›þøªqzÁ5ÿÇøô{¸âÿÈÏnÔµúß'|›ÿ÷ù?|›ÿÃ_ñ¸¼8ý®ÔÿžœØ\ü5ÿG8»à5ÿ‡ÕÿáéÿøqHèÿ±û¿¹þáÜöÁýßÚH[ÿú?¸þáØÿRðJIÓÿXÔ†Àÿ<÷@H‹ÿDÔ†$þ9ý?:Ç?çÿóâÝÿÏõ?&{oX\/	ú0ÿW4òžõÿ ¼äÿ¬wc7ž›–,Î
+€ÇÏp!wç9ÀŒƒ–ýcóôC8¤dò¶ü_~eÿwp'™³¼™ÿóÖúÓOhæÿœ?» ¹ÿÛÙñi-ù¿¼-ÿ—_ÙÿŠì째’ÿùÓŸ¢™ÿùÓO¸¶ÿûìZòy[þ/oËÿå×ò§Ù»üjþ/;ý&¯äÿŠ“jîù«ù¿üÕü_ÎüߏCBÿÍÿñüßÌÿ©"mý˜ÿcýõýŸ1ÿ§•4ýÑ ‚üOa-ó?ã/ê’Eñ7Œ?‚Îñ·àü_Æü‚„øWú—ED ÿàÙÿCH‹?ðügú!ø÷¬þ®™ýcë¿óýÂKþ·E‘ùN.‚õÕœg~¹®ðƒ“ lþ—ú‡pHÉÙ¶ü¯½²ÿs\Åôü‚‹ýŸ™	§4ó¿g¹W{%ÿN+ˆÛ¶ü¯mËÿÚ+û?³ü¬‰kùßpzšùߪ—;mâJþ7œsmÛò¿¶-ÿkÛò¿¶-ÿk¯åÃøôǼ’ÿøÓ^ËÿÚWó¿–ù߇´÷?Ññ²÷®ÿAHˆ?6ÿOÿ„ÆÎ_æÿU‘ÖÿÏÿåú„瘂×IgýpþÏ3ÿ‡ !þØýœÿA0ö½ááïzIÐÿpùŸœçÿþ«øgþÇe…&©¨›„³ÐxRÅù4TØÉÄMlìb~LôÍÿ°þ/„Ã’|hËÿ„+ûÿªÞ"œ_p±ÿ/?Ý1®ä¼;ɽ„+ùŸÂœ]Ð’ÿ	mùŸp%ÿc²³oòêþ¿ÓO¸vþ«9ý„kûÿ&§´äB[þ'´åµó_sw¬+ùŸÌž†ûÚù¯gÏÃkùŸðjþ'0ÿóãöþg¬¤
+Aþ§°žù	ñÇžÿËú®þËüû'iCÔÿçìÿ¤Å¸ÿ—õŸ †_útµÒYÿœÿ3Ìÿ!HˆÕÿQ‚ñ?x¾ÿAH‹?pÿëÿ@<ÿW5	ú0ÿÛÐ?ó¿ Nê¿æÎă×Óò¿ùÙ	ÖV#xìi
+¸úË¢È&aÌ~æ$AÿØü/ßÿ!Rr®-ÿë®ìÿËÆ'CÝ•ýÅùÍüïøtK™»rþ£1'§º¶ü¯kËÿº+ù__œd±Ýµü¯ÉO/hæsçN/¸¶ÿÏŸ~-ù_×–ÿumù_wmÿŸ=û)®ä]~z«¯íÿ;‹ækù_÷jþ×1ÿûãÐÿc÷ÑÿáÚáÌÿé!mý¸ÿ‹ë?˜QðJIÓ!jC´þÏü?„Nñ¿/wÓÕzûX>Lëí·´6Ò×ÿ­+ØÿCȸþ¯š†þ«wþÝNžë¿FÇü°Á9ûãMÁó?!|'þóÇeÏ€ þ…çþo¯Ä9ïéHˆ¿¯†þ*þ¹ó¬ÿ
+áõø^—ÛùtU>¦/úÐ>ÿ+.â_8Ïõ?óã±q
+¨•.úÿµzò—ëïK£VýWš?Ó¿ÍŒáþµþß­7OûÅvôïëí†}&ºè¿ú‹Å~º/ï„m´ÿæRÿ®`ýgT»nºÿ«ùz+o#yü7Ea9þCøûÿûÃ_«aŸã?!„B!„B!„B!„BÈOÊÿH§â› È
  
\ No newline at end of file

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c.tar.gz.output	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16amd64-8n2c.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,89 +1,89 @@
-System(0KB HP=0*0kB TYAN Computer Corp S4881 )
-  NUMANode#0(8190MB)
-    Socket#0
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#0
-            P#0
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#1
-            P#1
-  NUMANode#1(8192MB)
-    Socket#1
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#0
-            P#2
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#1
-            P#3
-  NUMANode#2(8192MB)
-    Socket#2
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#0
-            P#4
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#1
-            P#5
-  NUMANode#3(8192MB)
-    Socket#3
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#0
-            P#6
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#1
-            P#7
-  NUMANode#4(8192MB)
-    Socket#4
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#0
-            P#8
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#1
-            P#9
-  NUMANode#5(8192MB)
-    Socket#5
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#0
-            P#10
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#1
-            P#11
-  NUMANode#6(8192MB)
-    Socket#6
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#0
-            P#12
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#1
-            P#13
-  NUMANode#7(8192MB)
-    Socket#7
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#0
-            P#14
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#1
-            P#15
-depth 0:	1 System (type #0)
+Machine (phys=0 total=67106960KB TYAN Computer Corp S4881 )
+  NUMANode #0 (phys=0 local=8386704KB total=8386704KB)
+    Socket #0 (phys=0)
+      L2Cache #0 (1024KB)
+        L1Cache #0 (64KB)
+          Core #0 (phys=0)
+            PU #0 (phys=0)
+      L2Cache #1 (1024KB)
+        L1Cache #1 (64KB)
+          Core #1 (phys=1)
+            PU #1 (phys=1)
+  NUMANode #1 (phys=1 local=8388608KB total=8388608KB)
+    Socket #1 (phys=1)
+      L2Cache #2 (1024KB)
+        L1Cache #2 (64KB)
+          Core #2 (phys=0)
+            PU #2 (phys=2)
+      L2Cache #3 (1024KB)
+        L1Cache #3 (64KB)
+          Core #3 (phys=1)
+            PU #3 (phys=3)
+  NUMANode #2 (phys=2 local=8388608KB total=8388608KB)
+    Socket #2 (phys=2)
+      L2Cache #4 (1024KB)
+        L1Cache #4 (64KB)
+          Core #4 (phys=0)
+            PU #4 (phys=4)
+      L2Cache #5 (1024KB)
+        L1Cache #5 (64KB)
+          Core #5 (phys=1)
+            PU #5 (phys=5)
+  NUMANode #3 (phys=3 local=8388608KB total=8388608KB)
+    Socket #3 (phys=3)
+      L2Cache #6 (1024KB)
+        L1Cache #6 (64KB)
+          Core #6 (phys=0)
+            PU #6 (phys=6)
+      L2Cache #7 (1024KB)
+        L1Cache #7 (64KB)
+          Core #7 (phys=1)
+            PU #7 (phys=7)
+  NUMANode #4 (phys=4 local=8388608KB total=8388608KB)
+    Socket #4 (phys=4)
+      L2Cache #8 (1024KB)
+        L1Cache #8 (64KB)
+          Core #8 (phys=0)
+            PU #8 (phys=8)
+      L2Cache #9 (1024KB)
+        L1Cache #9 (64KB)
+          Core #9 (phys=1)
+            PU #9 (phys=9)
+  NUMANode #5 (phys=5 local=8388608KB total=8388608KB)
+    Socket #5 (phys=5)
+      L2Cache #10 (1024KB)
+        L1Cache #10 (64KB)
+          Core #10 (phys=0)
+            PU #10 (phys=10)
+      L2Cache #11 (1024KB)
+        L1Cache #11 (64KB)
+          Core #11 (phys=1)
+            PU #11 (phys=11)
+  NUMANode #6 (phys=6 local=8388608KB total=8388608KB)
+    Socket #6 (phys=6)
+      L2Cache #12 (1024KB)
+        L1Cache #12 (64KB)
+          Core #12 (phys=0)
+            PU #12 (phys=12)
+      L2Cache #13 (1024KB)
+        L1Cache #13 (64KB)
+          Core #13 (phys=1)
+            PU #13 (phys=13)
+  NUMANode #7 (phys=7 local=8388608KB total=8388608KB)
+    Socket #7 (phys=7)
+      L2Cache #14 (1024KB)
+        L1Cache #14 (64KB)
+          Core #14 (phys=0)
+            PU #14 (phys=14)
+      L2Cache #15 (1024KB)
+        L1Cache #15 (64KB)
+          Core #15 (phys=1)
+            PU #15 (phys=15)
+depth 0:	1 Machine (type #1)
  depth 1:	8 NUMANodes (type #2)
   depth 2:	8 Sockets (type #3)
    depth 3:	16 Caches (type #4)
     depth 4:	16 Caches (type #4)
      depth 5:	16 Cores (type #5)
-      depth 6:	16 Procs (type #6)
+      depth 6:	16 PUs (type #6)
 Topology not from this system

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-2m4c2t.tar.gz
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-2m4c2t.tar.gz	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-2m4c2t.tar.gz	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,14 +1,10 @@
-‹ Éù$J í]ÛrÛÈõëò+ú1©Jœ¹aðSÖNíz+ëÔ–e',„$”q+ ”%}z ’¢,Š¢ÖEçO‰§çÞ‡#ºÕ6-¬éþ®
-YÎM¢º¼xt,.ü»tØ|_É)•”ÒIc¹\*åì
-*·eÑvqCô¢‹«]õîÓ§"oÙ¿nªäqIð û«4Û_+Àþ‡;ìÏ›Ò=ÚÞÀÖ˜;쯔±¶·¿¯&4óDiô6ƒòƒÛ?©Dþ»Ç/¡ÀD!ig¡­$k%iKJZG‚Ä„«KËU)MJY2NXéIg5qµ®ÆU„âjÜ3ÿÎõœïM2©P®ëñx6 £B’šgÀ•	EL
-ÃuÕˆÜI?°Sa@~šš¬«ZJšOG„}5ÇMŒî»YWâY	ž¡õoÃì¼
-y£ÏÀWá1”’ýÜŒ
-iV¨Ðc¢u]?ïT‘ô°ÞȐ#òëXW3{íž
-öÛ=îcßÝãQ÷Ù½pŸÝ‹öÙ=-öß=¿Îûv/+»†¹éÂHHù:ady¢~@IÑrèõn ÐBèÕµµ
-                        ðg¡¬°‘Û¢¤\èÃGg•±Î‡‰H#(ò3Bð‹Ò–dhÂ]CL’î²ãθ…	ôdÖeEÊ-•‘2VO|Ì[Ú¶iKR%úÏí´Y”eVž‘\~žåUò)swϵõxrGü_YÍÓö±¢@ÿ9Äÿi+ÿyÙiÿª¿ûÚ¿ÿôõd ÄÿDö°ÿ7Çßÿ+Û´?דVY‰øßCÈÃãÁŠV                       €±áû`Ý#þ«H‹¬<­þ|ŒÑîø/!S«ø¯À)ŸÿÕ:mÿuy—ª.Î_Q/ÒÇÞ9EŸ^OXóK“¦K‘QV©Ðk^/NOÓ¦]kHY¯y'çéüZa…}›“Ïqýµ–yÍšŸ“.»¸Æd¶×üVÆ7tF†2P«Þ6¦-E ”Y³1m¯¶×ü+kº«Á½v˜õÿš¬KgqòiS;Ì­¬Ê?â³t½V#œîÛ¼‹ëúÆZdà†};Éãٍa´ãõš÷i’ÇYÏòa~JiՏsò±lÝjށÆñ£ð
-®§`†ÝùÏ/'ӏ%³wÕÛzÖ¯«E™¤7—:hÖ+ýPÔ7Û¼©Š"ë~ÏøåU?¾:4ך.O>éÛDBË~nÿ-✔¥!´ÑAät¨ùˆ»V~l—»¤l&ZjÞœ/ÊOËfÆF6Ô^ùvq–ö;>ݰ¯Ø(Þ0îfñûöb¾¥ødÑÔ7Šk_œ}Yv¡„Yq#M:¶©YqÀ-W¿Ö¨wý¾­dÔÛù¹¿¹#{œÿI½xÊó_jì¿>ÿMÿë…óÿ²¼n¨šŸ^‘2“‹´œWÍ4›óÇ_Ó’
-ŸþVviî#\é4.²üŠ5vR03òŸ|›åïTÆEz݈úVyÿWzóÇǍSèŸäMÎoêe¤}ûeÒvi]ó%ŠïªäÝÛ/¾_É—J/¹ê$ñ4Èe¹4ôß½¿žÔçWm–Ä9õ•“6›åÜIë«L’ªI½‚?ô‘¹ä¼ÊLâ:K´“¬ÌºŒûXöe§õÂk¯ÒÖÿ:M/“´î²ª\–ù¯Âœòô‚Ïõåäs½®žÇ<>àvtÁgó”ê6¥®M¨hªã”Š$¥ä2ìG¤6­©èÖœyMLIQ]pµÎ7ãÃ?ÉOóE{Nó®¥8©3*ŠK:½ä®ø2Ïÿ(~¡óŽº‚ê—\µ¼#lˆKj¸MRS^ðÒý_ˆ²›úiÄMr>­Óæ´¨JªÓYK3î»IëéYUÍ©.yŒŠ7¥jhÞN“:çu\RÚ
 ú!ü`<-ž>Ÿý—]ÍUxÊ\d¦rxSTWuRv”Çç§S;›Ç“YuVYíw?­}ºÉj]K“Z3˜xçÙYY¤e7Æó9[­í«õÆ4Ëxº+ÓÿøèîK.øû"Î'uõ9m¨ˆK>â}?¯&“ìÆÆny7»Ã-ìÁî'ewðÒ=#»íØØ­îd··ÙÍe`÷xÙíÆÆn}7»Õv+°{ÄìÇÆî×ÝnË•‰»ŸšÝÑó±;»w\wG[؁Ýã=»µ»w\wË-W&ì1»åØØ½ãº[oa·»ÇÅîÃßa?n¹×ÿ£ÿGùÿé ²‡ýœÿGöù|þ'øÿž^ðüÏ>ÿù                        Ž#Îÿ£œÿGº>ÿƒÁóß"Èÿƒü?Èÿƒü?;Îÿ§Ïÿ¸ëó_Ûþü÷ÏÿÅùÿô²ùß>rt9$ÿç¨þÛçYóÿÈÑå@þŸ£b÷³þ§¦]	äÿ»×ì]	äÿ»×RF—CùŽÝϘÿgt9$ÿçØØýŒg·»‘ÿì^³[ÝÈÿóC³ûð7؏\îðÿ|³ÏSîóÿûd?+ÿOà¼ÿÇXÿÏAä+ÿ¿ZÆlóÿ‡2ƒû–ÿ߆zð‰~íᏄŒœ}˜ÿ_É@ª­þÿP[-Ìÿ?SǘÈnñÿ{<é[üÿËY?Àÿú`•­þ-—ûvËÿï^ÐVÿ¿1Öl÷ÿkãÜöÿ‡‘zzÿ¿f¸!nâ–ÿ_†Âjuxg½‘½á’Wc£Ø¯üø½·^ñ±³ôã?÷÷ìXåŽóÿ›}þ›rOþ/ëÌpþKéøà×ýùoðü·ƒüÿðÿÃÿÿ}²þÿ£b7üÿðÿƒÝðÿÃÿvÃÿÿÿQ±þøÿÇËnøÿáÿ»áÿ‡ÿì~ »ñ¼{°{´÷»ñ¼{°{Äg÷è|•¸ß
-vãy÷¸ßý°{t¾JÜï>6vãy÷¸ß=^vãy÷¸ß
-vãy÷¸ß
-vãy÷@ @ @ @ ȏ*ÿ‡Žð
+‹ ³Ó9K í]]oÛÈÍëêWÌc´é|é§nRìfѦXÄÉî£@Qc™ˆø’rìüúÞ!%Ù²eÙîÚ´—>çÀ’5ßÃ{8$ÈËKa}nuûw™ëT¶ÿxóàgLøÎðî·Ðºû^ãRá„¶”/¤‘î
+3O2škX5mR3öf¶(ˬ8PÎ×Íb×þU]¦.‚Ø_[©ÈþJ;û}öO«UVœ”ÖG0°íí½ÇþÒ:}Ýþ†ôò†ñGÁ¼rûƒû¦)뎘°“3_ÌËzšÍéçϾ ø_ŠÖ/'¤	v’äÙò‚rì$/ç~ùý+×ÿ³"Éýe%ÖÕú˧¿²÷¿~a—ø'&§/ù6V?ø>iZ_UY±Mu|üð=´+LlßRÑIš¤§ž5Ù÷Ðz$bÉþýnR^4Yš,Y7P1i²ÙnÑ„"“´¬}È ¼k2$„,=Iª,ísh®Y‘µµ±NìÒNªUȽðMøwêÏS_µYY¬Óž1gKF“§òbò­Ú_&Ô?ý zì,÷lîYÕxÖ6)Ë›šU‰gyêYzu=²ÆW,okÊY„œ„¥yyFÅÚPMY–.O–«æ”ÍÛ†%i•±<?g'çÔTCÍÒŸ¤vÚ²6gÕŒR.Ú"dˆsVS´bËœ¦^¾‹v†‘Ôéé´òõI^¬ò³†Í¨íÚWÓEYÎYUP%m”²fófšVKšÇ9óMè"tFâáËÎÛŠŠÐ)IOEÿ%YUViѲerz2¥¾³y2™•‹2Ϫ°õMdíÛÈM6óZ›ÔêÞÄÓd™-ŠÜmŸ˜Ìçdµ¦+֏³YFÃݘþoLG}ÊYV·«d9©Êo¾fyR$Ú9šLvÔíÆ¦nq»º£=ꎠî'U·yëžQÝÑØÔ-oU·ä7ÕMiP÷xՏMÝêvuË=ê–P÷xÕMk×ÈÔ}à¼Ûí93qP÷S«;~>u‹±©ûÀyw¼GÝ1Ô=âµ[ŽMÝλŞ3uXÝjlê>pÞ­ö¨[AÝ#V·›ºq½ûE©ûY¯wK36uãz÷‹R÷ó®Ý£»W‰ëÝP÷VÝ£»W‰ëÝP÷VÝ£»W‰ëÝ/MÝÏx½{t÷*q½û¥©ûùÖn5º{•¸Þ
+uoÕ=º{•¸ÞýºÕ}—ÿ÷>ÿÿÜçúÿs¡LïÿOÿãlçÿoüÿ‡ÀGŸ.ÛdyÔ¯N’+i´f_ßM(ç§Úû£Í©
+9ïV''´1¶9ÌFŠV%Êyt<¿Ìˆ¹ˆ]Wçø[R]Ïe<äü˜¶ÙÙe7t„5Bv9¿ÉN^¤
 ¬âzÓÚ•a“t´Ž·ý\vȪËùí$W:'¬Gý{µ~–¤_¯æöc+ÊâWÚ™¶s„v]IUíÌE‰õv;^&³nœ¡	u9Ÿ|ºL²<™-ûñimu×Ïñ—¢îóÖ5ú~BïŸC…Ë!ÄýÖùïOÇÓ/amÛ´¶õ»rU¤~wª}Îv¦Ÿój·Îû2ϳö?}u³‘ÜÙè2§õóéÇ]q«ºÁ}X-|·y¦WŒÁ¯$_±ÄÕäOÍÙ|Oòñª®v’«L«_Ÿ¨y¼1¤O[2@´1¥ë6KY’–uVyîýì¥bßú_ÐéLóˆO>èù?Eå„¶Bàù¿!p»ýç|Ü×þá4!øéøo9ì?î²ÿc<zøüO(eÜöüÏ©pþç¤Àùß ÀóŸð‡yþ0xþê×µ<ÿ	˜W¢îÑÝS…?ԍç?áó
+üaFwOþ0/MÝxþþ0P7žÿ„?Ô}PÝÃ_`á¸ëþÏcøÝåÿ£¼¼ÿ#\¸ÿ#(	÷À5ÿÁ…•k—kþ?ZZ)£½þ?J‹Þ5㺇6<Ž¢‡ùÿîŒÝëÿ£E$ŒÜãÿ#¸‘RG{üBßú†\÷ÿYúþ?š»Þ›è†ÿ0®ßn7ü”s½ßÔ
+ÿ)•Üïÿ#Œîû¹éÿ£µ}zÿŸp~í9sÃÿ'æJtcû-§£K™®
+¡´2±S‘²îJæ—f½•¤Lo¢uÎûÓUñu]MÛØFjx—"Éõ5¿¡ÜzöÛÙy	®¤è½Æž{Ï}ܵþ“¾Ú?ÚÇáõ_
+ç®ûXÃ-Öÿ!ΆYð½¢£™ÑqDme³VP-DRÐNÍûËz´ïéèÔ˜–/Ë´ã–È„³ŠQ
+¹-FE¸¤bÔ2ýOå\hMj:(0‰m9êÏ:ºDL(¤¥\R¢–LhÁèø±)3G¿95ÒuìddX¦bÖñM)ZQi/eš†Ã£®˜£*ZuÍl‰pœ¡E)|õ£#Ò,ÄN)A(B}H)º±iiS”!£ÐŽ·eC´¥LL‹§êçk&¢˜…ytŲ¢­Ãá Š¹àq(Å–:,^w½Ââ\m~ȽE@AAAAAAAÁÿ—Òr»=‚I÷ã¬Î!Ö7¡9‹ƒÃçô!•e"ÒÑ¡.&i{ÞRcTC5™µY<–Úª×¾o˜Zòîw3­WE‘&Ö¿gË2ýêçÔÜÆÿç°ÿ—z†ø?¦ÿcÿgÜeÿAâÿØËø.¤'¹‚ÿßÀû°ÿçuÄÿÁû° îQ=ˆ÷a!þÏkQ÷èb·!þԍ÷a!þÏ+ˆÿ3ºØmˆÿóÒԍ÷a!þԍ÷a!þÔýÇÞ‡õÚp×ýŸÁãÿHÞÅÿ±÷† âÿ þâÿ þÏmëÿðñtÿG þÛ xxü©ïÿGšûÅÿ¡6îÿ‡z½OüŸè>ñâûÄÿQüþñÂ<ÿAAAAAAAAðOÊqÅÿyŸ¯«¸Ãÿ‹Æo/ý¿Tˆÿ£•ÓðÿxÿÛ€ïƒ÷¼ç@AAAAAAAGÈ?¯÷                          Àóá­ñ
   
\ No newline at end of file

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-2m4c2t.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-2m4c2t.tar.gz.output	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-2m4c2t.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,35 +1,35 @@
-System(1984MB HP=0*0kB  )
-  Machine(992MB HP=0*2048kB  )
-    Socket#1
-      Core#0
-        P#16
-        P#20
-      Core#1
-        P#17
-        P#21
-      Core#2
-        P#18
-        P#22
-      Core#3
-        P#19
-        P#23
-  Machine(992MB HP=0*2048kB  )
-    Socket#1
-      Core#0
-        P#24
-        P#28
-      Core#1
-        P#25
-        P#29
-      Core#2
-        P#26
-        P#30
-      Core#3
-        P#27
-        P#31
+System (phys=0 total=2032544KB) "Kerrighed"
+  Machine #0 (phys=2 local=1016272KB total=1016272KB)
+    Socket #0 (phys=1)
+      Core #0 (phys=0)
+        PU #0 (phys=16)
+        PU #1 (phys=20)
+      Core #1 (phys=1)
+        PU #2 (phys=17)
+        PU #3 (phys=21)
+      Core #2 (phys=2)
+        PU #4 (phys=18)
+        PU #5 (phys=22)
+      Core #3 (phys=3)
+        PU #6 (phys=19)
+        PU #7 (phys=23)
+  Machine #1 (phys=3 local=1016272KB total=1016272KB)
+    Socket #1 (phys=1)
+      Core #4 (phys=0)
+        PU #8 (phys=24)
+        PU #9 (phys=28)
+      Core #5 (phys=1)
+        PU #10 (phys=25)
+        PU #11 (phys=29)
+      Core #6 (phys=2)
+        PU #12 (phys=26)
+        PU #13 (phys=30)
+      Core #7 (phys=3)
+        PU #14 (phys=27)
+        PU #15 (phys=31)
 depth 0:	1 System (type #0)
  depth 1:	2 Machines (type #1)
   depth 2:	2 Sockets (type #3)
    depth 3:	8 Cores (type #5)
-    depth 4:	16 Procs (type #6)
+    depth 4:	16 PUs (type #6)
 Topology not from this system

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.tar.gz
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.tar.gz	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.tar.gz	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,69 +1,53 @@
-‹ {J í[sIr…çÕüý¸Ž°Çu/`ß¼V¬íp¬ÃáÝ	ûÑ[$BÄ%€¦FÚ_ï*€ä „¨¾dWré<fw4b“
-"ûtUgÌÒ¡Y×þ£»1ÓþãæÓ§ûåºÙÿÓO¢Ñûüo½:ü·vîðïG~ÒÚ(ã•rZÿ”¾hÓ¿*?å›x‡}[ïªê§·›Ûô«ÿà¸f·çxC¼èWâ¿ÝmS]ý⯭³^+Rü½‰
-ñçà‡ñ_l–ëOê9r€Ã1Þ߉¿±&„ñ!ÄŸ*5Å/Ø…ðøç87ûýf÷w¿¯ÔÕ—f}³Ù]/oÒýk³NÑoþ}Ý6÷WéJ¨>Õ«åý·ôí¯V››æþïÒŸÃñÕº^5é?/9|ÿïþûï«ÿm6ëßýåO_ýËýR™Ÿƒú×ûëÕ¾m¶Ûåú6}ëìp’?ýÛ_ó5~nvóôwõ⮩öË¿æŸîÔ<Tÿñ‡«íÝ·ýrQßW‡7ª®öˏ)t·û|ÈÕb³kò_É?2ÿEþ’¹ú´}Èý­Ùç?^7_Ͷ]n֏—/÷›ê¾ù’~µü›ýº}>ú¾N?=ýGú¶ê˪©nšj»oªv¿¨Vû]µ­›jµhªÅ×YUo—‹jßl«U»K_¹Í_©«Åjó%Öæo³¡ZܺØßU7í¾ªÛeµZ}­>}M?jŸ~lúŸIÿWݵU»ªößöéwMñ×ê~•~›uºb×íu>÷v¾s³^¶›]u³¿^lïÓ»ûZ-Ò¯±øªCõµÝîªûúîÓõýêêãæv³ZnóGáõÜüìýÕÓÛxü|ƒ;~Þ×õýòv½jÖm޶™]Õ77é3ÜŽ;|ʪú¸Loý)ÿP¹Ùño¾,wíC}µÝüÚìªU½®o›üƒ~uuz©é÷y©i\jÃ/µYüÙ¨·»ÔÌû¼Ô.µq—Z|»K;ÏKÍâRu©iûv—š{Ÿ—Úës5Kí—š2ow©ù÷y©½>WÃ¥öÃT¿Ý¥Þç¥öú\
-—ÚÐùÛ]jñ}^j¯ÏÕp©ý­ÎÕfïóRC^íý%;æïóRC^m䥿Þ0…ûN—X9‚¾åµöNאYy­½aºC¿Ó¤ÖF^ko˜ïÐïtÅ ¹µ÷—[ÓïtÉ Éµ‘÷µð†×Ú;]3 at ví}<ðûäþ¿òCÿgº:Ú	Îñcÿ§6AÅ—þOüŸä»Úáé­©LŠA¬ôÜÙèBV«ÇY~VY¼ª¬qÞ8Sù`fîø«*=›Í­œé[´JWq>·Ñ¸¹«LpÆ?Ÿ‰j6?~Ÿ®tT6I=ýg1}ÓL™hÕ,ÌëJ峏LߦBˆ¾
-º
-qfãáHå­2iþlò¡ZµéPí­®ì¼
-6ÌŽ‡jÒ;qó|¤z<Ò¥oJo{^Ym}åÓ;	ùØ™Švž~lþíªy<ë«Ù<ýb•™§ƒÜLu84}6>¤÷~xúxhþ!:ý¢V§OË™ü)åC½MHegù÷š?~ 1}J6ÛÌÒ߸àìñ
-ø\‘?”üSÍñÐY5÷j–~ɐޚ²Þ˜|lÀŒIƒXzùC01Iìx|úysÒw¥¯ÍæÇw;Oo{–†[Ÿ
-Ÿlú‰>…=•
-Æ>®Ùl–â?AUÅÇO }ݧ4½¥ÎÑÁ6æOÅåßjötd~‡z|5émxŸ>ŒÃ‡¥]:}º¸ò¯µUÔ:æ(¦íâñ#p.+Å?éײöñh—÷tH_Ñót`z#‡ðÎ]ô.]b‡‹F=ýl_Åt-èñPÍÓßžiïò{žÞˆÊoz¹nwù€t ‡7;A¥ä5}@ÿ{zå#}Bvæò;¼’4\þÈž1ñäøi^ÚÍçA¥¸™}oI?ËùüÏÔï/¼ðÂ/¼ðÂ/¼ðÂ/¼ðÂëÿÑëjÑ~m«h¢Ÿ©¹óæêc»\59-emP>Ξ–š}•“ÚÊëÃßì¯wëõr}[=ý÷ÇûÍâss“~ä›å_Ëÿï¿Mצ_ÿ¬1Z“ûhoÑÿƒƒÅÿ¦ù²\LÐhxüƒñç OüÓŸÛf5þ2èßÿÇãO*gîâÏÁ€ø/¶㮁¾ý¿œ‹.D•ãUDü9ÿ¼Æ9ø"èyÿ7ÎuŽ¿ö> þŒ‰»Ùnî7·ßú^ƒû¿™ôGôÿcÿön×Ô7×Ož¹×ÎñcÿOngžïÿ1¦ùŸ	Þhø8x
-Á?ÿåÞðQ¼$ý?y6¯·õâs}Û\/o¾wŽNý+óâþ­BÿGô.’þ³þÍŸ2\ÿ.ý3 ¡ÑÐõß5û8ÿ>ÏÿÓ@ÿœÏÿæÿÂ¥ÿ»f·J³þôø¿iÛû¦+4<ÿãµEþ…Iâ¿Ø<¬P(6|þ—îÿÈÿ°€û½lÆèÿPØ;`høúOº ÿÏÂøø/×7ÍWÓç2>þ;…ýŸx Ç?×ñwœ£{üùŸ4%ÀøÏ@îƒñ˜ˆ…¬ÿç5 ü}×Ûz×.s”ÓsžÿÛt8ò¿, ÿ+²þÛo[òø¯/æù_~Y/?-›Ü„BÖÿ¡ÇُÏ1<ÿ畵Ð?Ê
-Yÿ‹Í]³kÖ‹oǀ梁õo_ú¿¢óÐ?Áá ²þ­¿í¯7Ÿ®ëý~³XÖíò˲ýv~ŽÁú·Ê:ø?YÐú—=ÿWïš›ëô…ëU½ýî9:õÿ›ÿ˧Û@^ÿ
-ù?žB ÿ—LÈú_?¬>6»<Ø7í÷Ò=þû—þŸèàÿa!¯ÿAòr!ê_•ò þŸrü'ñ¸—ñ1àþρ†ûC4dýòXèŸø?dCÖÿþ‹ç?ôχº­qYÿ¥üÈÿ°€ñ_6dý—òÀÿÅü²!ëÿÇÅó¿uð³0ƒüECÏÿOìÿP.¯ÿ"ÿÏĹÿý?¥AÖÿ$þ—óÿ-üß,X4 
-QÿºXÿÿäø—êÿü/¹í r!ë¿”ÿõ?,`ú'²þKõÿÀúèÿ!²þKù?ÐÿŒÿ²!ë¿”ÿë¿,Àÿ!²þKù?°þÃü²¡çÿ§öÄcÿÌÿY€ÿC6dý—êÿþ?,äõ?H^.Ãõoìüs¤¿ÿCÇœøWF{ïàÿà`LüŸ÷ÿìyŽþñºÿ[g°ÿ¤ø·w»¦¾éܶßüÿlü÷èÿÏÃùü¦IÿÏÞŸm½ø\ß¾¶üðõ¿h¡Ðÿ_6$ýöÿ¾æO®‡þÿL ß'ºþ»fÿ£æÿ:@ÿ,œÍÿg	ÜD1JÿwÍn•fýéñÓ¶÷[Ïÿx÷ÿBþ§<“ıyX·¯Ÿcøü/hÔÿó€ùŸlÆèÿ¸þÛÿýîÿé©ÏuúºÉ@Üÿ9ÿÇý?zœcøøïrI0âÏ 9þeê¿CDý'yÿÔË…¬ÿRõßÈÿ°€þ¿²!ë¿Tý7ú¿°€úoِõ_ªþþoàÿ
-Yÿ¥ê¿QÿÅê¿eCÖÿ$õßýÿߍݟECÏÿOUÿ}¶þ"ò,<… þ/™õ_¨þûÿò×ÿ y¹õ¯Šù?PÿÍ9þ“ø?Ü¥ÿýYÐpˆ†¬ÿRþèŸø?dCÖÿþ‹ç?ôÿçâCÝָȅ¬ÿBþƒüÿeCÖ)ÿü_,Àÿ!²þKõÿ‡ÿ›¬÷ʆžÿ/äÿÀó?gþôÿYÿ“ø?^Îÿ“üáÿfÁb@Ñõ¯‹ù?<üã_ªÿò¿,ä¶Kp€È…¬ÿRþÔÿ°€éŸlÈú/Õÿë?, ÿ‡lÈú/åÿ@ÿ?0þˆ¬ÿRþ¬ÿ² ÿ‡lÈú/åÿÀúXï•
-=ÿ_ÈÿüðȆ¬ÿRý?Ðÿ‡…¼þÉËe¸þ{Y>ÎèçÿPÖµÉú×ÞcÿÆÄÿyÿÏžçèÿÓûzüCÿHñoïvM}Ó¹lßù–Þø1ÿ^aügá|þoÖdAÒÿ³÷g[/>×·¯íß7ÿ
 wпö9ÿo¡Pÿ-’þû¿_ó§Îÿê¿XÀþ¿²¡ë¿kößwþo”K²éÁï°ÿ7ÖÿXÀü_6£ô×ìViÖŸÿ7m{ß¹øðü×V#ÿÃÁ$ñ_lÖíëç>ÿK÷¬ÿ²€ùŸlÆèÿ¸þÛÿ=׌sÁE¾nÒ
- ùÆÇÿqÿç>þ£ÿ?äø—ªÿFþ—…¼ÿê¿åBÖ?úÿ¿k°þ#²þËÔ‡ˆúOPÿ-²þÑÿÿ]c¡|ѐõþÿïÔˆ¬ÿIê¿-ê¿ßÝŸECÏÿOUÿ}ðye
-úÿ3òø¿dBÖ©úoøXÈ됼\ˆúWÅüþÈñŸÄÿá.×Ðÿ
-÷‡hÈú/åÿ€þY€ÿC6dýOáÿ¸xþsQAÿ,|¨Û· ¹õ_ÊÿüÿeCÖ!ÿ‡…ÿ‹ø?dCÖ¡þÿþoÐï[6ôüÿtýÿsÿ?eýÑÿúOàÿ
-Yÿ“ø?^ÎÿC´ð³`!xÑõßk3€Qþÿäø—êÿü/¹í r!ë¿”ÿõ?,`ú'²þKõÿÀúèÿ!²þKù?ÿeã¿lÈú/åÿÀú/ðȆ¬ÿBþôÿáþÙÐóÿû?œ:ú?ÿcþِõ_ªÿúÿ°×ÿ y¹׿°óÏ‘~þÓý´÷Øÿ……1ñÞÿ³ç9úÅÿôþo‰ˆ?¤ø·w»¦¾éܶïüÿdü÷Øÿ‡³ù¿N/LDAÒÿ³÷g[/>×·¯í?|ý/ZèŸè]6$ýöÿ¾æO®ü?, ÿƒlèúïšýšÿë ý³p>ÿOà~ ŠQú¿kv«4ëOÿ›¶½ïÜ
-|xþÇk‹ü“ıyX·¯Ÿcøü/hìÿÈžÿd3FÿÇõßþç¾þ“o ¸ÿs0>þûô8Çðñߥo@ü9 Ç¿LýwTð²÷Aý·\Èú/UÿüÈ÷Ȇ¬ÿ2õßQÁÿÍê¿eCÖ¡úoìÿÃ…òECÖ¡úo‡úPÿ-²þ'©ÿ¶—õßð² ±û³hèùÿ‰ë¿Í±þÏÿ<<… þ/™õ_ªþþòú$/¢þU1ÿ‡‡ÿƒrü'ñ8ôÿ#4Ü¢!ë¿”ÿúgÏ{²!ë
-ÿÇÅóŸ‹
-úgáCÝָȅ¬ÿRýÿ‘ÿaã¿lÈú/åÿ€ÿ‹ø?dCÖ©þÿXÿeýÿeCÏÿOíÿ@ÿNÎýèÿ)
-²þ'ñ¼œÿ£ÿ?~ˆ†¨]Ìÿàÿà€ÿ2ý?úñÛ.Á"²þKù?Pÿæ²!ë¿Tÿ¬ÿ°€þ²!ë¿Tÿôÿcã¿lÈú/åÿÀúðȆ¬ÿRþ¬ÿ° ÿ‡lèùÿ©ýöèÿ@ÿ_àÿ
-Yÿ¥ú@ÿ,äõ?H^.Ãõ¯{íùrJ?ÿ‡òчô¯<þëý_ð”gTüŸ7 íwŽ~ñºÿ§ãŒõèÿÂ-þíÝ®©oº¶€í;ÿÿ-þÁ<ÿ³€ù¿lhú6ÿlëÅçúö•Íà‡åÿ²þÓôúgz—
-Mÿ‡
-à¿«ùS†ëß§§RèŸôÍúï˜ýšÿý³p>ÿGÿoiŒÓÿ]³[¥Yzüß´í}×^àÃó?ÞhƒüÓıyX·¯žcøü/úðü'›Qú?. ÷>GÏõŸ4ç.êÜÿÃü¸ÿ—‡ÿÇ
-@ºÏ1|üw*`ý‡zü»À»Çÿð2þÑÃÿÁBÞÿõßr¡ë¿» |ðüߪ¨‘ÿaùÙÐõß] Þ©}1ÿ‹õŸ, þ[6týw€XÿÕ
-ýŸX°P¾hèúï. ïÖ¿}9ÿWý_X@ý·lèúï. ¡gàÿdAc÷gÑLÿï, ïÔÿ¥ÿ+zäÿXx
-ü_2¡ë¿» ¼{ü÷/ë?”†ÿ‡…¼þÉË…ªUÊÿúoèñŸÂÿá.ýèÿÇ‚†ûC4týò@ÿ,àyO6týOàÿ¸xþs1@ÿ,|¨Û· ¹Ðõ_ÈÿüÿeC×ÿ‡†ÿ‹ø?dC×ÿþ‹çgàÿfýÿe3Aþ¿ŒÿÏÿ,œû?ÐÿStýOáÿ°—þø¿Y°Ø P4TýëRþÿôøêÿü/¹í r¡ë¿ÿõ?,`ú'ºþËôÿðXÿaý?dC×!ÿúÿ±€ñ_6týêÿõ_àÿ
-]ÿ…üXÿaþÙLÿ/ãÿ@þø?dCסþèÿÃB^ÿƒäå2Pÿû$ü›ëýª½Þn~Mªß×_~¸õãaóÿóÞÂÿÉÆ{Ùÿûtü9'+¼Çþ_ÖµÉú×Þcÿ'ÆÄÿyûßžçèÿÓû¿=ôEüËCŠ{·kê›Î
- ‡=ÿçø¯ÿcáìù?' 0IÿÏÖ¿m½ø\ß6×Ë›ïcøü?ZèŸÌÿeCÒÿb³{Mó§׿‹Ïÿ,@ÿ²¡ë¿kö?jþ¯Ñÿ‡óõ?ôÿ—Æ(ýß5»Ušõ§ÇÿMÛÞ7]y áù¯­Bþ‡ƒIâ¿Ø<¬Û×Ï1|þt„ÿƒÌÿd3FÿGûGÿsô\ÿ1ÎuúºI7 äÿYÿÇízœcøøïrI âÏ 9þÝíö8Ä?Dø¿XÈû?¡ÿƒ\Èúïnÿ0|þoU€ÿ‹ä{dCÖwû‡ýÇÔ³€þ²!ë¿»ýÃÿwúúçÀBù¢!ë¿»ýÃÀþÿW´èÿÄú?Ȇ¬ÿîöÃõo•uð² ±û»hèùÿÎöcü_!"ÿÇÂSàÿ’	YÿÝíö8è?ZøXÈ됼\ˆúïU>Êÿ¡áÿà€ÿIüîrýý?YÐpˆ†¬ÿRþèŸ<ïɆ¬ÿ)üÏ.*蟅u[ã ²þKù?ÿaã¿lÈú/åÿ€ÿ‹ø?dCÖÿ$þ‹çkáÿfûȆžÿ/äÿÀó?gþôÿYÿ“ø?^ÎÿC4ð³`±¨hˆú×ÅüþÈñ/Õÿù_rÛ%8@äBÖ)ÿêXÀôO6dý—êÿõÐÿC6dý—ò ÿÿeCÖ)ÿÖY€ÿC6dý—ò`ý‡ø?dCÏÿò ÿÇü²!ë¿Tÿôÿa!¯ÿAòr®ÿÙ€Žôóœîÿ£}Àþo,Œ‰ÿóþŸ=ÏÑ
 /þ§÷ÿôGìÿÃ)þíÝ®©o:w€1ÿ÷ó0ÿ—
-IÿÏÞŸm½ø\ß¾¶üðõ¿h¡°ÿ§lHú?ìÿþ}ÍŸ2\ÿ.z<ÿ³ ýˆ®ÿ®Ùÿ¨ù¿FÿoÎæÿèÿ-ŽQú¿kv«4ëOÿ›¶½ïÜ
-|xþÇk‡ü“ıyX·¯Ÿcøü/…ú/0ÿ“Íý×ûŸcøúOº ÿÏÂøø?îÿÑãÃǧ4âÏ9þeê¿£BýyÿÔË…¬ÿBõßùï‘
-Yÿeê¿£Bý¨ÿ–
-Yÿ…ê¿Ñÿ›勆¬ÿBõßõŸ, þ[6dýORÿm/ê¿=üŸ,hìþ,zþ¿HýwTÈÿ±ðø¿dBÖ¡úoÿyý’—Qÿª˜ÿCÃÿÁ9þ“ø?ö~#4Ü¢!ë¿”ÿúgÏ{²!ë
-ÿÇÅóßÁý3ð¡nkÜäBÖ)ÿò?,`ü—
-Yÿ¥üð± ÿ‡lÈú/ÔÿßÁÿÍúÿˆžÿ/äÿÀó?gþôÿYÿ“ø?^ÎÿCÄþ?<Xl (¢þu1ÿ‡ÿƒrüKõÿ@þ—…Üv	¹õ_Êÿú0ý“
-Yÿ¥ú`ý‡ôÿ
-Yÿ¥üèÿÇÆِõ_Êÿõ_àÿ
-Yÿ¥üXÿaþÙÐóÿ…üÈÿ± ÿ‡lÈú/ÕÿýXÈ됼\†ë>`çŸ#ýüÊÚà£6YÿÚ‡ ÿcâÿ¼ÿgÏsô‹ÿéý?ýÑ!þâßÞíšú¦sؾóÿ,mmÿ½Æúçó£° ’þŸ½?Ûzñ¹¾}m/ø¾ù¿ƒþ“ð•‰úçÏû²!éÿ°ÿû÷5Êàü¿qÑÃÿËöÿ•
-]ÿ]³ÿ¾ó£\’}î™æÿ:"ÿÇæÿ²¥ÿ»f·J³þôø¿iÛûέÀ‡ç¼vèÿËÂ$ñ_lÖíëç>ÿû?ó€ùŸlÆèÿ¸þÛÿ=׌sáÐø3̓AþŸ…ññÜÿ£Ç9†ÿ.}ñç€ÿRõßÈÿ²÷Aý·\Èú/Uÿü/Xÿ‘
-Yÿ¥ê¿QÿÁê¿eCÖ©úoÔ²`¡|ѐõ_¨þÛ£ÿ/¨ÿ–
-Yÿ“ÔÛ‹úoÿ»?‹†žÿŸªþûèÿÒ&ê?±ÿO!€ÿK&dý—ªÿ†ÿ‡…¼þÉË…¨…þÿïrü'ñ¸ËõôÿaAÃý!²þÑÿÿ]ÿ‡lÈúŸÂÿqñü碆þYøP·5nr!ëýÿß5ÿeCÖ?úÿ¿kàÿ
-Yÿèÿÿ®AÿÙÐóÿÓõÿÏýÿ”õÇþÿ¨ÿdþِõ?‰ÿãåü?Dÿ‚
-Qÿº˜ÿÃÂÿÁ9þ¥ú ÿËBn»ˆ\Èú/åÿ@ý˜þɆ¬ÿRý?°þÃúȆ¬ÿRþäYÀø/²þKù?°þËü²!뿐ÿýx€ÿC6ôüÿÄþ§ŽþäÿX€ÿC6dý—êÿþß,äõ?H^.Ãõ¯ý€­ô÷è˜~etÈýáÿ(Ϩø?o ÚïýãŸïÿÙÿ›ÿ€øs@‹{·kê›®-`ÌÿUPÿ·Èÿ³p6ÿŸ¥&¢ éÿÙü³­ŸëÛW6ƒ–ÿËú6`ýŸôÿ—
-Mÿ‡
-à¿«ùSúê?ÿ>˜Ãú?ê?x@ÿÙL ÿŽÙÿùÿoã0Xÿçá|þŸÀý@ãô×ìVi
 ÖŸÿ7m{ßµøðü7Ú#ÿÃÁ4ñ_lÖí«çþüLÀüä{d3JÿÇàÞçèwÿWƹàòÆ/i>xèÿûyñÜ ¤ûÃǧ"ÖX Ç¿» ¼{ü/ãúÿ²÷Aý·\èúï. <ÿ·*jäX@þW6týw€wê__Ìÿb€ÿ“Ôˆ®ÿîðáù?¯5ê?X€ÿC6týw€wëß¾œÿ§) ôÏê¿eC×wøý;ÿ'»?‹f‚ügx§þ/ý_Ñ#ÿÇÂSàÿ’	]ÿÝàÝã¿Yÿ¡ü?,äõ?H^.Tý«Bþ€úoèñŸÂÿá.Ö<êYÐpˆ†®ÿBþèŸø?dC×ÿþ‹ç?ôχº­q]ÿ…üÈÿ°€ñ_6týòÀÿÅü²¡ë
-ÿÇÅó¿3ð³€õ^ÙLÿŸÌÿqèÿeŽþ<ÿópîÿ@ÿOiÐõ?…ÿÃ^ø?4üß,Xlø!ªþu)ÿG„ÿƒzüõÿ@þ—…Üv	¹Ðõ_Èÿú0ý“
-]ÿ…ú`ý‡ôÿ
-]ÿ…üèÿÇÆÙÐõ_Èÿõ_àÿ
-]ÿ…üXÿaþÙLÿŸÖÿaÕÑÿçàÿ
-]ÿeú ÿ7yý’—Ëý÷±|œÑßÿ¡cTyÿW¬ÿƒƒQñÞÿ³ß9úÇÿéþo½rˆ?´ø·w»¦¾éÚ¶ïüÿ¤ÿŸÇüŸ‡³ù~ Àd@4ý?{¶õâs}ûÊ^ðÃ×ÿ¢…þy@ÿÙÐôØÿý»š?e¸þ=Öÿ˜@¾O6è¿cö?jþoôÏÂyþý¿¥1NÿwÍn•fýéñÓ¶÷][Ïÿx£±ÿ7ÓıyX·¯žcøü/ÿ˜ÿÉf”þë¿½ÏÑïþ¯ŒsÁEýyÜÿ9 Äÿqÿîsÿ]/èñ/Sÿþÿ<äý_Pÿ-ºþÕ#ÿÃúÿʆ®ÿ2õߨÿ‘Ôˆ®ÿ2õß
-ý_X€ÿC6týªÿFÿ7Pÿ-ºþ§¨ÿ¾Ð¿Ãþ<hìþ,š	òÿ“ÕŸ¬ÿGüO!€ÿK&týªÿ†ÿ‡…¼þÉË…ªUÊÿúoèñŸÂÿá.×Ðÿ“
-÷‡hèú/äÿ€þY€ÿC6týOàÿ¸xþs1@ÿ,|¨Û· ¹Ðõ_ÈÿüÿeC×ÿöÿâþÙÐõ_¦ÿ?úÿò€õ^ÙLÿ/ãÿÀó?gþôÿ]ÿSø?ì¥ÿþo,6 
-Uÿ}6åÿ°ðp@¡þÈÿ²Û.Á"ºþù?Pÿ没ë¿Pÿ¬ÿ°€þ²¡ë¿ÿýÿXÀø/ºþù?°þËü²¡ë¿ŒÿýxÀz¯l&Èÿ—ñ ÿÇü²¡ë¿Pÿôÿa!¯ÿAòr¡ÿ>-?ÎèíÿÐ1Z­“þu°Øÿ…QñÞÿ³ß9zÇÿpÿ)þÖ+ìÿÃ-þíÝ®©oºv€í7ÿ7ʹ˜^6Ïÿ}ÄüŸ…óù¿SØP4ý?{¶õâs}ûÊ^ðÃòùþm€þYÀúŸlhú?ìÿþ]ÍŸ2\ÿ>M¡0ÞËfýwÌþÎÿ­;îÿ
-ý³ðbþïp?Å8ýß5»Ušõ§ÇÿMÛÞwm><ÿãFþ…iâ¿Ø<¬ÛWÏ1|þ—îÿ¨ÿb÷{ÙŒÒÿqý·÷9úÝÿ•q.¸¨Ó׍	ùñÜÿ£ûÃÇ—ÆÄŸzü§®ÿÇú/Ô°÷Aý·\èúŸºþ;ë¿‘ÿaýeC×ÿÔõߏã?ê¿X@ý·lèúŸºþ;ë¿Ñÿ勆®ÿ©ë¿ó…úOPÿ-ºþ§¨ÿ¾Ð¿3ð² ±û³h&ÈÿOTÿ}ðyÕ±þùžB ÿ—LèúŸºþ;ë¿áÿa!¯ÿAòr¡ê¿O1ø(ÿ‡ÿƒzü§ð¸ËõìÿÄ‚†ûC4týò@ÿ,Àÿ!ºþ'ð\<ÿ¹ >Ôm[€\èú/äÿ@þ‡Œÿ²¡ë¿ŒÿCÃÿÅü²¡ëêþÿGÿöÿàý¾e3AþZÿGPèÿÏÈÿú
-ƒ®ÿ)üöÒÿÿ7
- at ECÕ¿.åÿ°ðp@¡þÈÿ²Û.Á"ºþù?ðüǦ²¡ë¿Pÿ¬ÿ°€þ²¡ë¿ÿõ,`ü—
-]ÿ…üXÿeþÙÐõ_Æÿþ?<Àÿ!›	òÿû?ìÑÿçàÿ
-]ÿ…ú ÿ7yý’—Ë@ýï“ðo®W‹ëíæ×$ú}ýå‡;?‘ÿ³ã?ïe3|üý7þz$+¼ŸÿKǨòü_û àÿâ`LüŸ·ÿíyŽþñºÿ§?¢ÿ¤ø·w»¦¾éÜ ºßó¿¶ÁGå£ÏÏÿÞÀÿÇÂÙóÿ,½0IÿÏÖ¿m½ø\ß6×Ë›ïcøü?ZÔð€ý?dCÒÿb³{Mó§ôÕÿaü?Ôbÿ/.ÐÿE6týwÍþûÏÿÿƒŽèÿÆÂùü?û(Féÿ®Ù­Ò¬?=þoÚö¾éÊ
-Ïÿxm#ò?LÿÅæaݾ~ŽáÏÁ(Ô±€|lÆèÿhÿèŽ~÷ÿôÔç‚‹:?ÿ¥ òÿ,Œÿãö?=Î1|üwJ#þ,ãßÝþaTÿÿyÿ'ôYÿÝíÆÔ‡üÈÿʆ¬ÿîö£ú? þ›ô
-YÿÝíÆø¿•…ÿ‹ø?dCÖwû‡1ý£Cýèÿ ²þ»Û?Œéÿb=üŸ,hìþ.zþ¿³ýÃÿWTÈÿ±ðø¿dBÖwû‡ýBtðÿ°×ÿ y¹õ¯Šù?PÿÍ9þ“ø?ÜËø‡ˆú4Ü¢!뿐ÿÃBÿ,Àÿ!²þ§ð\<ÿ¹¨ >Ôm[€\Èú/åÿ@þ‡Œÿ²!ë¿”ÿþ/àÿ
-Yÿ“ø?.žÿ­ƒÿ›¬÷ʆžÿŸÎÿÑÚöÿ@þŸ‰sÿúJƒ¬ÿIü/çÿ!Zø¿Y°Ø T4Dýëbþ
-ÿäø—êÿü/¹í r!ë¿TÿÔÿ°€éŸlÈú/Õÿë?, ÿ‡lÈú/åÿ@ÿ?0þˆ¬ÿRþ¬ÿ² ÿ‡lÈú/åÿÀúðȆžÿŸÎÿqØÿMÛcÿ<ÿ³ ÿ‡lÈú/ÕÿýXÈ됼\è½¹²ëÏoôó<îÿ£bÒº
-xø?8ÿü½š¾œÐ/þ§÷£œEü9ÿ4
-ýÏqˆŒñO1wÑïrü£Mã¿ù¹Üïýâ?.þ¦ÿ9ÆÄßxÄŸƒÑñps¥…øs0.þ顯NŸÛö|=%ØýàùO»—Ï6ø¿XÈ‘¼¾[¶•ŽÆÎ5öêðW«å~
 _©ãŸ?mvÍòvþs¹n›Ý}SißcRèÂÕý&Ûÿò…qòC6y“àã_"¥ô7Ìèû¿íŽQãÀýŸƒÑñ×®÷9†Çßú"þåÿU³Z®?mzž£cü×Êè—ã¿ÓÿY¸úÏÃ]ý©YýeÓÖ÷¿¯2:ÄhœÕç?œðÇ]Ó¿^i«â<˜Ùù¿ì››Ç*æfvvÀ?/Úå—§~„66iþä€_×§‡è¹wÞ¨“>,wí·çp<èìMþÏnÙ6ëÅçÓƒN—÷ÍÕ·Íþx€™Ï¬:;ÅŸêíö·_"áfswú&ÿy½YŸü„ªš[NÈ_üKýñþ·#\<;à?ÿøçë_Öé²KÇüþ{oò›‡õ¢9ÿ=Ïøó}ýñôËÆiÎøïfq_/WO§Ðótk=}þe½;òøsҍW>É·¾ +ãÇÿþç5ÿsÿ9ÿþÓ¿qñˆ?ãõß?<fþ¯ðüǸøß,Ó§–æ(ýÎÑ•ÿ»ô[ïÐÿ‡ìœhÆßÿû' GÝÿ1þ³0:þnΣæñç`tü_3{‡ÎñÿbÿGkê?Yx
-ÁÁÿý)é€(FëÖÿcîÿ÷FÇÞÿ£âüãçÿý
-`cæÿþOÆÇ¿ÿÀ¨ç?ø?Yÿþ³óQñÇýŸ…ÑñýÏ1jü7ˆ?            Pø?ú×Â{ ¸ 
\ No newline at end of file
+‹ GwdK í[s#9r…çÕúõhGØcÜ
+ ÷Í뎵ŽÝpxwÂ~ST“Õ£y²ÔÓ½¿Þ@QҐ¢ÔuÉBöÊy>Î¥[*²Hf •8Hh_o¼kþÉÍÂ4ÿ´ûôi½ÚÖÇþiBT$”eú¿¥:ÿÿ?im”)•rZÿ¤´uÁýT”S¾‰·x86Õ¡(~:V›oß;®ë÷ïýFüß¦»úÅ_y«}ÖÄø;k=âÏÁ÷⿬¿¬´Ãã_¯úÄ?þ¹©7ã/ƒ~ñ¾5F‡ãLüâÏÀ€øowËzÔEÐSÿÆ9ñCý³04þé?jàUÐ_ÿ¥VÎÇøkcÐÿ³0.þ‹ýƒV½ÏÑÆ?µëߍ¿µZë\¼Nb7àõO…ù9ãñÿâU"þŒ×¿é}ŽQú·ˆ?£ã?ëŽ1ñÝâÏÀxý÷ï Féß#þŒ¿í}ŽQñwˆ?£ãß?üãÆèÿYßÿ£âöŸ…Ññïû?.þÿ±0:þ®ÿ9FÅý?£ãßÿö\ü
+âÏÁèøÏûŸcÔý?ò¿,ŒŽèŽQúˆ?£ã¿©ö}Ï‘ìœ{;þƼ˜ÿ3.Íÿ
+bŽGxüŸBðé?Ÿ"7?úNÆçÿúŸcTûþŸ…qñ߯æ?~oM¿stµÿ:Æü²ý·*åÿÐþç'Eòö~Õ:;wÖØ›öG›ÕñX¨ÓŸ?íõênÿºÚ6õa]W_êö9&†Î߬w‹j}›.Œ³Ù5÷õáôC….åo—qúßÔ›ÕöÓ®ç9:ôïõõËñ_ nþÔJ´øc½ùË®©Ö¿+Ɉm\é‹Ï¿?;à‡º>ý¾ÐV…¹7³Ë~9ÖËÇ
+ëçfvqÀ¿,šÕ—§ˆ/¡5ʝðÛêü=/]iÔÙV‡æÛóœºx“ÿsX5õÇjñùü óWøÃj]ÿWuWO˜ù̪‹Sü±Úïû7›»ó7ù/ÛÝöìŠbnK~@úå_ªëߎpáâ€?ýáÏ·¿lãeùÝkoò÷»‡í¢¾üœüy]}<ÿµqÚø‹þ»^¬«ÕæézîÂŧøó/ÛÃéÇ×q¾Ôí7ù£/HÀÊøñÿ€1ãü/ããßhTüáÿda\ü—«ø­Å>ªß9:óñfïÅø/-Ãø»3ÑÐlôÇ­lÛÿÎõ?í0iý—òXÿÃÂÀø·†^ýâÛ‚MëÿSúëÿYÿf·ß­wwßz^½ãÿ[ÿï=Öÿ²@‹ÿbw¨o«ñ9wÇ7Ï‘ì;çM#{€ÿÒYÌÿ²p1ÿ#€á ,húßß;®ÒìϾZ|®îêÛÕò•stê_½ôøÒ•Ð?z
+MÿÍý¡®–]#€Aý¿³©ÿOÃE蟁ý¿Bÿ/‹	Æÿ¯öùçïÿQÿ³ ½ËfœþïëÃ&Žúc÷¿kšuWU°áùgQÿ“‡iâ¿Ø=lß6ƒoÿËx ýç í¿lFéQ-ì×þ?ÖÔ*åÿU‰ü?„ø¯¶Ëú«îqïÿ­q˜ÿeÿãê¯> îþß¿ÿiôÿ<¤f÷?1]ÿÛ‡ÍÇúp»ût{¬›WSÀÝú¹þËë€üIÿ¿\èúžNO¼ÝW‡fÕ¬vÛ³s¾ÿ·i¼ýs€ù_ÙÐõß|ÛSÇÿú*ÿ«†þ9øe»ú´ª—h„B×ÿbw_êíâÛi ðJ: »ÿ¹þ'…õ?,xŒþEC×ÿ¯Õ·cºû¯ŽÇÝbU5«/«æR)Ãçÿ‚Gýf¿h&ÈÿßW‡zysûFMÀNýÿæÿ,•·mþãžB ÿ§Lèú_×_êõwÏ1¼ÿw&(èŸäÿdCÕ¿Éåÿ€ÿ‡züóø?Úœš{ø?äB×&ÿü_,$ýCþr¡ë?“ÿþ/4Ä/ºþ3ù?0ÿËü²¡ë?“ÿó¿,Àÿ!ºþ§ð\éß+ø¿YиûÍùÿiýAüÈÿ³ðÂÿúŸÂ ë?“ÿþ/,ô.ªþûl0ÊÿQÂÿÁ=þSø?Üuý‡öŸ
+÷‡hèúŸÂÿñ2ÿã5öåÁ ,ºþ3ù?Ðÿ³ ÿ‡lèúŸÀÿqåÿtÚAÿ,|¨š
+M€\èúÏäÿ@þ—ø?dCצúð²€ú²™ ÿ?qý“ÿÃÂÿÅÂÿꃮÿ<þõŸ, ÿ'›áú/ûoüóH?ÿ‡µZ낉úW!­ÿ‚ÿ#?câ¿Û¦cúŸ£_ûƒúoL`¼'›ã¿>%Ÿ.è×þ«2”>þ/ÕÔJcÿ/FÅÿyÿç~çèÿ§ñ™ÚŸêÿ!þù¡Å¿Ýÿû¸úŸs÷ªõ«¥_þç<þ¥3¸ÿcá"ÿƒ€ûAYÐôÿìýÚW‹ÏÕ]}»Z¾rŽaùŸ¤_:ÔÿaãÙÐôßÜêjÙ5Ñÿ蟇Ëþ?>Јb‚ñÿ«}þ9ÃûgÆÿ,`¼/›qú¿¯›8êÝÿ®iÖuGhxþÇÙ€õ¿,LÿÅîaÛ¼yŽáíéPÿ…Œ÷d3Jÿ'ÿOïsôœÿ1Îytòÿå5ÚñÜÿ©ûÃûìÿÂ=þSïÿRbÿFR³‹
+ r¡ëêý_JìÿÂHÒ?ä/ºþ§®ÿQbÿFPþG6týO½ÿK‰ý_Áþ/²¡ëêú%öaõ?dC×ÿÔõ?ÊSýÔÿbõ?d3Aþ¢ú—ù?‹ûžB ÿ§LèúŸºþG‰ý_AþO6Tý÷Y>ÆÿQbý/ôøgò ýgÁ©9v€]ÿYüFÁÿÅBÒ?ä/ºþ3ù?àÿbëÿdC×&ÿæY€ÿC6týgò`þ—ø?dC×ÿþ+ý{…ù_4îþE3Aþ?ÿ÷ÿ,\ú?PÿStýgò`ýz
+Uÿ*WýÔÿgÿ)üî*ÿ‹ýÿxÐpˆ†®ÿ)ü/ó?^äY°0 ‹†®ÿLþôÿ, ß#ºþ'ð\ù?vÐ?ª¦B ºþ3ù?ÿeþÙÐõŸ©þüŸ, þ‡l&Èÿçñ`üÏÂ¥ÿõ?¤A×&ÿÖ²€üŸl†ëÖãŸGúù?Î÷ÿQ!­ÿ‚ÿ#?câÿ¼ýgÏsô‹ÿSûïÓþO^ÃÿÃ)þíö¯›?ÿ4tüŸâ_Úã.ÇÿðKƒ¤ÿç©ÿ}µø\ݽµô°ñÒÀÿÃî÷eCÒs¨«eç`Dÿï¡.úÿ” D{ 
+úøÿõ>ÿœáý?üÿ\ ÿ—Í(ýßׇMõÇî×4ëΝÀ‡çœ5Èÿ±0Iü»‡móö9†·ÿ¥õ¨ÿÁÚÙŒÑÿiú·ÿ9†Ïÿ˜Tí?ããÿ¸ýGsïÿ­Nëÿüãß½ü{`ýÿvü§Ðÿóš]¬ —YÿÝË¿®ÿjç´Aþ‡…¤È_.dýw/ÿ~ÿoãO0ÿÃÊ?Ȇ¬ÿîåßëÿŸÆÿðó€úÿ²!ë¿{ù÷ÀõßIÿA[ìÿÇÖˆ¬ÿîåß#æÿBiQÿ¬ÿ–
+=ÿß¹ü{„ÿÓÇ㡞B ÿ§LÈúï^þ=Æÿi4öÿ`ù?Ùõo²ù?àÿaÿ\þ´ÿ,¤ýßáÿYÿ¹üð±ôùË…¬ÿ\þø¿X@¾G6dýçò`þ—ø?dCÖ.ÿæY€ÿC6dýOâÿ¸Òi1ÿË‚ÆÝ¿hèùÿLþÜÿ³páÿ@ýOqõŸÉÿa°þƒ½‹†¨•Íÿáàÿà€ÿIüîÚÿýßXÐpˆ†¬ÿIü/ó?^äY°0 ‹†¬ÿ\þôÿ, ß#²þ§ð\ù?
+Ð?ª¦B ²þsù?ÿeþِõŸ«þüŸ, þ‡lèùÿLþŒÿY¸ð þ‡8ÈúÏUÿë?Y€Þe3\ÿº°õOKÿ‡!¶ÊèøüŒŠÿó ýÎÑ?þ©ý/ÓþO>`ÿ?hño7€íÚþyàø?Å¿tXÿÅÃÅøÁx@4ý?Oþï«ÅçêîÍ ‡ÿ“þ}Y"ÿÇüß²¡é¿¹?ÔÕ²kзÿ÷eP^µýð˜ÿcá²ÿ´¢˜`üÿjŸNßþ?é¿ôæ´þùÿ“Í8ýßׇMõÇî×4뮽À‡çœ‹?Bþ‡iâ¿Ø=l›7Ï1üþ¯tí?ïÉf”þOÀ½ÏѯýO­¾wA«”ÿo÷AûŸBü7 é>ÇðþßšÒ þÐãß½ ¼»ÿ÷/Çý?©ÙÅ
+p¹Ðõß½ ¼[ÿåËù£0ÿËBÒ?ä/ºþ»€¾ÿ·Éˆýs€ò²¡ë¿{x§þõUþW;ÔÿdõÿeC×÷ðîþß¾Ð0
+ë?XÀúoÙÐõß½ |øü_ð
+û² ¿·l&Èÿw. ïÔÿ™ÿ³´ª­ÿˆñ?O!€ÿS&týw/ Þÿ;°ÿÈÿɆª“Ëÿõ¿,ÐãŸÉÿöŸ…´ÿ;ür¡ë?“ÿþ/’þ!¹ÐõŸÉÿÿXÿ'ºþ3ù?0ÿËü²¡ë?“ÿó¿,Àÿ!ºþ§ð\éßkø¿YиûÍùÿÉügù?ípÿÏÂ¥ÿõ?¥A×&ÿü_, þ§l¨úW¹ü¨ÿÏ=þSø?Üuþõ_YÐpˆ†®ÿ)ü/ó?^äY°0 ‹†®ÿLþôÿ,Àÿ!ºþ'ð\ù?.¡>TM…&@.týgò ÿËü²¡ë?Sýø?YÀ|¯l&ÈÿO[ÿÜòÿópéÿ@ýiÐõŸÉÿõŸ, ÿ'›ú?Fá/o›æv¿ûµ>Ü«/ßÝú½e˜þ}Òиÿgý½lFôÿ¶ÿÎ_'úù¿¬Õ*XÒþ¯:þÿ£â¿Û¦ƒzŸ£_ûÿîÿX@û/›áúÜüðÿꔍú
+A@ûÏÁ˜ø?oÿÞóýãÿ4þ7íúOÄ??¤ø/v‡4áûqýý{À¾ùßßâ_Zäy¸ÌÿbýŸ4Hú¶~î«Åçꮾ]-_;Çðüwþo°þO6$ý7÷‡ºZvŽ Fôÿúçá¢ÿOÀhDAÿ¿ÞçŸ3bþG[ŒÿY@þO6£ô_6qÔ»ÿ]Ó¬ë®<Ððü³Ú#ÿÃÁ$ñ_ì¶ÍÛçÞþ—Ö£þhÿe3Fÿ'û_ÿsôkÿc«ï¼:íÿgâhÿ9ÿÇíßzœcxÿouPˆ?äøw—ÿ¸ÿS;þSèÿyHÍ.* É…¬ÿîò?×ÿ·ó?þ/’þ!¹õß]þgøý¿M@ÿ ü—lÈúï.ÿ3pÿ§Çñ?Öÿ±€ýŸdCÖwùŸõ’þƒ6Øÿ™Ôÿ‘
+YÿÝåFÌÿ…Túg ~/ÙÐóÿåFø?½*qÿÏÂSàÿ”	YÿÝ寸?Æþo, ÿ'¢þM6ÿü?,ãŸËÿöŸ§æØJ0dýçòÀÿÅBÒ?ä/²þ3ù?àÿâõ_eCÖ.ÿæY€ÿC6dýçò`þ—ø?dCÖÿ$þ+ý—ó¿,hÜý‹†žÿÏãÿð¸ÿgáÂÿúŸâ ë?—ÿë?X@ýOÙõ¯rù?<êÿ³@Žÿ$þw•ÿ-±ÿ/îѐõ?‰ÿãeþÇkìÿǃ…X4dýçªÿþŸø?dCÖÿþ+ÿ§SúgáCÕThäBÖ
 .ÿò¿,Àÿ!²þsÕÿ€ÿ“Ì÷ʆžÿÏTÿã.ü¨ÿ!²þsù?°þ“äÿd3\ÿ~ÀÎ?'úù?Î÷ÿQÁ¡þcâÿ¼ÿgÏsô‹ÿyûo¼vˆ?¤ø·û¿víþÜwüo”sÁ_žöÿÃú.ÇÿÎa?@Yôÿ<÷¿¯Ÿ«»·ö‚>þã ÔböِôßÜêjÙ9ÔÿGáÇþ?(äÿY¸ìÿúaÐÇÿ¯÷ùçŒÈÿi‹ùÿ“Í(ýßׇMõÇî×4ëέÀ‡çœ5Èÿ±0Iü»‡móö9†·ÿ¥Eý/0Þ“ÍýŸæûŸcøüIKBÑþ30>þûô8Çðþßê`ÈñÏUÿý?©ÙÅ
+p¹õŸ«þ?ò?,$ýCþr!ë?WýÌÿ²€ù_ِõŸ«þ?Ö°€úÿ²!ë?×úoø?YÀúoِõŸiý·Eýo°ÞS6ôüÿTë¿[ÿgl ©þ?ê?²ðø?eBÖ®õßÐ?ÈÿɆ¨“Íÿÿäøçò ýg!íÿÿ‡\ÈúÏåÿ€ÿ‹…¤È_.dýçòÀÿÅÖÿɆ¬ÿ\þÌÿ² ÿ‡lÈúÏäÿÀü/ðȆ¬ÿIüWú/-üß,hÜý‹†žÿŸØÿ¡íÉÿû.ý¨ÿ)
+²þsù?°þƒ½‹†¨•Íÿaàÿà€ÿIüî:ÿ‹ý_XÐpˆ†¬ÿIü/ó?>Þ
+BÿX€ECÖ.ÿúàÿ
+YÿSø?®üŸN蟅US¡	Yÿ¹ê ÿËü²!ë?SýÔÿáõ?dCÏÿO]ÿÝüÿ³péÿ@ýiõŸËÿõŸ, ÿ'›áúïeù¸ ŸÿCYëËöÆ_œ‚ÿƒƒ1ñÞÿ³ç9úÅÿ¼ýO@ÄŸRüÛý_»vî;þ¿ÜÿÏ¡þãÿŒdAÒÿóÜÿ¾Z|®îÞÚzøøß;ìÿÅî÷eCÒs¨«eç`Dÿï¡.óZ¡ÿ—}üÿzŸΈüŸ6ÿ³€þ_6£ô_6qÔ»ÿ]Ó¬;·žÿqVcÿg&‰ÿb÷°mÞ>Çðö¿´%ü_, ý—ÍýŸæûŸ£çüqλ ãύùÆÇÿqÿçÞÿ[ê¿#þù!Ç?Sýôÿ<¤f+ÀåBÖ¦úÿØÿ‰‡¤È_.dýgZÿ
+ÿ'(ÿ ²þsÕÿGýPÿ_6dýçZÿõ_,`ý·lÈúϵþõÿYÀúoÙÐóÿS­ÿ¾Èÿ©÷ÿ,<… þO™õŸiý·Býÿ“
+Qÿ&›ÿþÈñÏåÿ@ûÏBÚÿþ¹õŸËÿÿIÿ¿\ÈúÏåÿ€ÿ‹ä{dCÖ.ÿæY€ÿC6dýçò`þ—ø?dCÖÿ$þ+ý—ó¿,hÜý‹†žÿÏäÿÀý?þÔÿYÿ¹êÿcýz
+Qÿ½6åÿpðp@Žÿ$þwíÿ°hÿ9Ðpˆ†¬ÿIü/ó?^käY°0 ‹†¬ÿ\þôÿ, ß#²þ§ð\ù?òÐ?ª¦B ²þsù?ÿeþِõŸ«þüŸ, þ‡lèùÿLþŒÿY¸ð þ‡8ÈúÏUÿë?Y€Þe3\ÿnÀÎ?'úù?Î÷ÿQÁ
 ø?8ÿçý?{ž£_üÏÛãÓü/âŸRüÛý_»vµÿsüú.Æÿð‹ƒ¤ÿç¹ÿ}µø\ݽµôðñ ÿÏöÿ”
+IÿÍý¡®–#€ý¿‡þy¸ìÿãí(èãÿ×ûüsFäÿ´ÅøŸŒ÷e3Jÿ÷õaGý±ûß5ͺs+ðáùg5ò,LÿÅîaÛ¼}Žáíi=Ö°€ñžlÆèÿ4ÿÛÿÃçLjÐþ30>þûô8Çðþ?vÿñç€ÿLõÿÑÿóš]¬ —Yÿ™êÿÃÿÍCÒ?ä/²þ3­ÿÆú/PþA6dýçªÿú¿, þ¿lÈúϵþõYÀúoِõŸký7Ö±€õß²¡çÿ§[ÿíË •±íúoìÿÅÃSàÿ”	Yÿ¹êÿ£þÈÿɆ¨“Íÿÿäøçò ýg!íÿÿ‡\ÈúÏåÿ€ÿ‹…¤È_.dýçò ÿÃÖÿɆ¬ÿ\þÌÿ² ÿ‡lÈúÏåÿÀü/ðȆ¬ÿIüWú/-üß,hÜý‹†žÿŸÚÿqªÿñ?—þÔÿ”Yÿ¹üXÿÁ‚…ÞECÔ¿ÊæÿPðp@Žÿ$þw•ÿ-Ú4Ü¢!ëÿÇËü×ù_,À¢!ë?“ÿC£ÿgùِõ?…ÿãÊÿ锇þYøP5𠹐õŸËÿü/ðȆ¬ÿ\õ?0ÿËêȆžÿŸÚÿ¡ZÿG	ý³péÿ@ýiõŸËÿõŸ, ÿ'›áúïUòã‚~þkµ
+Öõÿ€ýßXÿÝ6ÓÿýÚÿóø›8DûÏÆ{²®ÿy¦ö_Ùö°õÿÇñÿcâÿ¼ÿsÏsô‹ÿùøßxìÿÊ)þíþßÇÕÇø”»×­_-ýò?F9ª\»ÿ+ò?<\äbÃ;˜,Húö~í«Åçꮾ]-_;GßüOêþµ.Sþ7¶Ð?ÈÿȆ¤ÿæþPWËÎÀùmSý÷2@ÿ< ÿ—
+}üÿzŸΈùäÿ˜@þO6£ô_6qÔ»ÿ]Ó¬ë®<Ððü³Éÿ‰üO~&‰ÿb÷°mÞ>Çðö¿´ðÿó€ö_6côòÿô?GÏùãœwA'ÿŸ‰O@ûÏÁøø?îÿÔãÃû«ƒGü9 Ç?×þ/èÿYHÍ.*€È…¬ÿ\û¿ ÿÃBÒ?ä/²þsíÿÿ˜ï‘
+Yÿ™ö	Øÿ‰ìÿ"²þ3Õÿ°XÿÇêȆ¬ÿLõ?,öfõ?dCÏÿO\ÿÃ)ìÿÂÈSàÿ”	Yÿ™êø¿Y€ÞeCÔ¯b £üðÿ°@Ž&ÿG@ûÏ‚Ssì #²þsù?àÿb!éò—Yÿ¹üð±€õÿ²!ë?—ÿó¿,Àÿ!²þsù?0ÿËü²!ëÿÇ•þK‹ù_4îþECÏÿOåÿ8ÕÿL‰¿äÿèÿY€ÿC6dýçò`ýz
+Qÿ*›ÿ£„ÿƒrü'ñ¸ëúØÿ—
+÷‡hÈúŸÄÿñ2ÿãµÁý7|¢!ë?—ÿý?ðȆ¬ÿ)üWþO§ôχª©ÐÈ…¬ÿ\þäY€ÿC6dýçªÿÿ'¨ÿ!zþâú¶<ù?°þ“ø?dCÖ&ÿ‡ÆúOÿ“Ípý‡;ÿœèïÿÐ!¨´ÿ«
+ÎÂÿÁÁ˜ø?ïÿÙóýãÿÔþ¯áÿaÿvÿ׮ݟûÿÏ÷ÿ+‘ÿgábü?‹`< 
+’þŸçþ÷Õâsu÷Ö^ÐÃÇÿÞaýðˆ¤ÿæþPWËÎÀ€üŸ*CÊÿÅ?àþŸ…Ëþ?>Ј‚>þ½Ï?§oÿßêß§úßN;Ìÿ±€üŸlFéÿ¾>lâ¨?vÿ»¦Ywn><ÿãl ÿÃÀ$ñ_ì¶ÍÛç~ÿWZìÿÀÆ{²£ÿÓüoÿsôkÿc«ï¼:ÿL²„£ýg`|ü÷ÿèqŽáý¿ÕÉÿøç‡ÿLõÿÑÿóš]¬ —Yÿ¹êÿcþ—…¤È_.dýçZÿù_à÷–
+Yÿ™êÿ{Ìÿ²€úÿ²!ë?×úo¬ÿbë¿eCÖ®õߨÿÀüÞ²¡çÿ']ÿ­JmÛõßÿóðø?eBÖ®õߨÿ“äÿdCÔ¿Aýÿ÷
+9þ¹ühÿYHû¿Ãÿ!²þsù?àÿb!éò—Yÿ¨ÿÿ®Áú?ِõŸÉÿúŸ<Àÿ!²þQÿÿ]ÿ‡lÈúŸÄÿq¥ÿÒÂÿÍ‚ÆÝ¿hèùÿéügù?ìÿËÄ¥ÿõ?¥AÖ?êÿ¿kPÿS6Dý«lþÔÿgÿIüîÚÿú,h¸?DCÖÿ$þ—ù¯
+ò¿,X€ECÖ.ÿúàÿ
+YÿSø?®üŸN蟅US¡	Yÿ™üù_àÿ
+Yÿ¹êÀÿÉæ{eCÏÿOçÿÎh]>ÖÿÀøŸ…KÿêHƒ¬ÿ\þ¬ÿdù?Ùׯ-_.èçÿP6 Ó&é_§áÿà`LüŸ÷ÿìyŽ~ñ?oÿã 0 þâßîÿÚµûsßñ¿QÎŒk÷ÿ+Ñÿ³p1þ
+/ì ² éÿyî_->WwoíÝwüŸº­ÓþïÞaý7ÿˆ¤ÿæþPWËÎ@ßü_«›ò¥‡þy@ÿ/úøÿõ>ÿœù¿”€þ@¾_6£ô_6qÔ»ÿ]Ó¬;·žÿqVcÿg&‰ÿb÷°mÞ>Çðö¿´%ü_, ý—ÍýŸæûŸ£çüqλ ãύùÆÇÿqÿçÞÿ[ê¿#þù!Ç?Sýôÿ<¤f+ÀåBÖ¦úÿØÿ‰‡¤È_.dýgZÿ
+ÿ'˜ï‘
+Yÿ™êÿ{ÔaõÿeCÖ®õßXÿÅÖˆ¬ÿLë¿
+êÿ³€õß²¡çÿ§[ÿüŸÊ©vý7Öððø?eBÖ®õß𳠽ˆ¨“Íÿÿäøgòx´ÿ,¤ýßáÿYÿ¹üð±ôùË…¬ÿ\þø¿XÀúِõŸËÿù_àÿ
+Yÿ¹ü˜ÿe
 þِõ?‰ÿãJÿ¥Áü/wÿ¢¡çÿ§ò´õ?KeÍÉÿûàÿ
+Yÿ¹üXÿÁ‚…ÞECÔ¿Êæÿ(áÿà€ÿIüîºþ‡Cûρ†ûC4dýOâÿx™ÿññoÐ?7|¢!ë?—ÿý?ðȆ¬ÿ)üWþO‡þ9øP5𠹐õŸËÿü/ðȆ¬ÿ\õ?àÿdõ?dCÏÿO\ÿöû?bý'ðȆ¬ÿLþ…õŸ, ÿ'›ú?Få/o7‹Ûýî×úp{¬¾|ë÷–ú/áÿâûÉfDÿßkϧs’Âûù¿t*ù¿u[ÿþ¯üŒŠÿóÀýÎÑ?þ©ýO÷Æ£þ´ø·@wmÿÞûþÿ·ø—û?ópqÿ?‹`< 
+šþŸÍ?ûjñ¹º{c3øaãÿ6ÿW:¬ÿdë?dCÓs¨«e×`Dÿ .óÿ3…þ_Œÿ_íóÏÞÿ;£0þgù?ÙŒÓÿ}}ØÄQìþwM³®;ò@Ãó?·üÓı{Ø6ožcxû_Æ í?hÿe3Jÿ'Hïsôkÿc«ï¼:íÿdZÿÚÿüâÿ¸P÷9†÷ÿÖ8øs@wˆîþß¿ÿiôÿ<¤f äB×wˆný—/çt@þ‡…¤È_.týw€|ÿoÓxúç ë=dC×wˆNýë«ü¯vð³€ý?dC×wˆîþß¾Ð0
+ë¿Y@ýÙÐõß] bøü_ð
+õY€ßK6äÿ;@têÿÊÿéµÅý?O!€ÿS&týw€Þÿ;Pÿ…äÿdCÕ¿ÉåÿÀú_èñÏãÿphÿYpjŽ@C×&ÿü_,$ýCþr¡ë?“ÿþ/PÿO6týgò`þ—ø?dC×&ÿæY€ÿC6týOáÿ¸Ò¿W˜ÿeAãî_4äÿóø?pÿÏÂ…ÿõ?ÅA×&ÿÖ°€úŸ²¡ê_åò þ?ôøOáÿp×õ?°ÿ3îÑÐõ?…ÿãeþÇë€ü/`ÑÐõŸÉÿþŸø?dC×ÿþ+ÿ§ÓúgáCÕThäB×&ÿò¿,Àÿ!ºþ3Õÿ€ÿ“Ì÷Êf‚üÿÆÿ,\ø?PÿCtýçñx¬ÿdù?ٌпë¿óω~þkµ
+Öõ¯Ó þFÅ·Mõ>G¿öÿ<þäXÀþo²yKÿûÃn1´‹~íÿÓøÏÿ¤´s¥EûÏÁw㿚·wõìÏ÷Ûm¼
+/â_Úãb‡^¦œÛÒšÂÄ„BÏÓö»¾Ðffçaæ}9+¬õ¥*’-7Þ›¥73W¨›ødUèÙlnlᜏOÑ¥Wºó¹
+ÆÍ]a¼3åóóLP³ùéyºÐAY7+â?aâ“fÊ«fñd¥.T:ûéÈø4å}(¯f6´GªÒ*Sèø¦ã¡ZµñÐxíèÂÎoýìt¨v>¾7OGªÇ#]|R|ÛóÂj[e|'>;‹#y|ÙôéŠy8[³yü`…™ÇƒÜLyÕ¿›ÒÇ÷Þ¾}:4½ˆŽÔêøm9“¾¥thiãRØYú\óÇ/ ÄoÉÆs›Yü‰óΞÞ@©Mü\îôªæt謘—j?¤oMÙÒ˜t¬š{cæ>~֐¾¢ÄNÇÇ×›Ÿ7›ŸÞí<¾íY¡Ë2ê¿ÙøŠe{ú.
+ëMÙ~]³Ù,Æ!}ƒªß@ü}éæ³ø–â æ1¢í6¤oÅ¥O5{:2½C=óe1÷ñm”eü2Ú/K»xúxq¥åµEÐ:¤(ÆxíÂé+p.ž+Æß©ô±¬}<Ú¥ÏÛ‡ø=Æ7Ò†wîBéâ%Ö^4êéµË"Í!êq_ÌãÏÛƒgºté=ÏÚ7¢Ò›^m›C: ¨}ûfçÁÇi‘¾Ôø=þûôHFü†ìÌ¥7Ö>¢4\úÊž1áìøiÚÍç^Ÿ™ýÒ’^˕韩ß!xàxàxàxàÇÿ£ÇÍ¢ùÚÁ„r¦æ®47›Õ¦Ni)k½*Ãì&%Ïëã±>)©­JÝþäx{xØnWÛ»âéï×»ÅçzYüÀI¸ïæÿû‡ÕöÓŽzŽïçÿ5Þ¿Èÿǯþ_/ÕÝáï~/Ã/õv¹;Ü®–ñoÿVocôëÿØ6õ:¥T‹OÕfµþ£Ë›ÍnY¯ÿ.þÙŸþXl«MÿzMûü¿ÿï(þ·Þmÿþ/ü‡â_ÿë—ÂüìÕ¿ýû_oŽM½ßGIħÎÚ“üñßÿš^6ÍHüìæñgÉjV¤E%ñ§©X}ñŸ¿¿yZrZ´oTÝWãU{wL‡Ü,v‡:ý¢ýMzÉôƒô+sóiÿ~ü­>¦?ÞÖ_õ>­U}üYºÜ—Eëgk?Ù¯ûç£×U|õø—ø´âKû².öǺhŽ‹bs<ûª.6‹ºX|Õ~µ(Žõ¾Ø4‡ø›»ô›ªXlv_âaMzšõÅbýiýp¼/–ͱ¨ûU±Ù|->}/›ô¯‰ÿ)ÙÇoÇøYãWüµXoâ§ÙÆ+vÛܦsï·ñ™»íªÙŠåñv±_Çw÷µXď±øª}ñµÙŠuuÿév½¹ù¸»ÛmVûôU”zn~.Ë›§·ñøýzwú¾o«õên»©·Mж™ÝTËeüíqí·¬Š«øÖŸñiÆ¢ýÉ—Õ¡y¨Ö7ûݯõ¡ØTÛê®N/ô»››óKM¿ÏKMãR~©ÍÂÏFý¸KͼÏKÍàRw©…w©Ù÷y©Y\j£.5mÜ¥æÞç¥ööXMãRûÎ¥¦Ì»ÔÊ÷y©½=VÃ¥öÝTÿ¸KÍ¿ÏKíí±.µïv ów©…÷y©½=VÃ¥ö·:V›½ÏK
+yµ÷—옿ÏK
+yµ‘—šû)Üw:]€ÄÚÈôG^kït¾ ™µ‘×ÚLwèw:a€ÔÚÈkíæ;ô;1 at níýåÖô;2 at rmd»æàµöNç]{÷ü>9              
         ø[ãÿ ^¹‡ à 
\ No newline at end of file

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.tar.gz.output	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,50 +1,53 @@
-System(0KB HP=0*0kB  )
-  Socket#0
-    L3Cache(4096KB)
-        L2Cache(1024KB)
-          L1Cache(16KB)
-          Core#0
-            P#0
-            P#8
-        L2Cache(1024KB)
-          L1Cache(16KB)
-          Core#1
-            P#4
-            P#12
-  Socket#1
-    L3Cache(4096KB)
-        L2Cache(1024KB)
-          L1Cache(16KB)
-          Core#0
-            P#1
-            P#9
-  Socket#3
-    L3Cache(4096KB)
-        L2Cache(1024KB)
-          L1Cache(16KB)
-          Core#0
-            P#3
-            P#11
-        L2Cache(1024KB)
-          L1Cache(16KB)
-          Core#1
-            P#7
-            P#15
-  Socket#2
-    L3Cache(4096KB)
-        L2Cache(1024KB)
-          L1Cache(16KB)
-          Core#1
-            P#6
-        L2Cache(1024KB)
-          L1Cache(16KB)
-          Core#0
-            P#10
-depth 0:	1 System (type #0)
+Machine (phys=0)
+  Socket #0 (phys=0)
+    L3Cache #0 (4096KB)
+      L2Cache #0 (1024KB)
+        L1Cache #0 (16KB)
+          Core #0 (phys=0)
+            PU #0 (phys=0)
+            PU #1 (phys=8)
+      L2Cache #1 (1024KB)
+        L1Cache #1 (16KB)
+          Core #1 (phys=1)
+            PU #2 (phys=4)
+            PU #3 (phys=12)
+  Socket #1 (phys=1)
+    L3Cache #1 (4096KB)
+      L2Cache #2 (1024KB)
+        L1Cache #2 (16KB)
+          Core #2 (phys=0)
+            PU #4 (phys=1)
+            PU #5 (phys=9)
+  Socket #2 (phys=3)
+    L3Cache #2 (4096KB)
+      L2Cache #3 (1024KB)
+        L1Cache #3 (16KB)
+          Core #3 (phys=0)
+            PU #6 (phys=3)
+            PU #7 (phys=11)
+      L2Cache #4 (1024KB)
+        L1Cache #4 (16KB)
+          Core #4 (phys=1)
+            PU #8 (phys=7)
+            PU #9 (phys=15)
+  Socket #3 (phys=2)
+    L3Cache #3 (4096KB)
+      L2Cache #5 (1024KB)
+        L1Cache #5 (16KB)
+          Core #5 (phys=1)
+            PU #10 (phys=6)
+      L2Cache #6 (1024KB)
+        L1Cache #6 (16KB)
+          Core #6 (phys=0)
+            PU #11 (phys=10)
+depth 0:	1 Machine (type #1)
  depth 1:	4 Sockets (type #3)
   depth 2:	4 Caches (type #4)
    depth 3:	7 Caches (type #4)
     depth 4:	7 Caches (type #4)
      depth 5:	7 Cores (type #5)
-      depth 6:	12 Procs (type #6)
+      depth 6:	12 PUs (type #6)
+4 processors not represented in topology: 0x00006024
+4 processors offline: 0x00006024
+4 processors allowed but not online: 0x00006024
 Topology not from this system

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.xml.tar.gz
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.xml.tar.gz	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.xml.tar.gz	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1 @@
+link 16em64t-4s2c2t-offlines.tar.gz
\ No newline at end of file


Property changes on: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.xml.tar.gz
___________________________________________________________________
Added: svn:special
   + *

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.xml.tar.gz.options
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.xml.tar.gz.options	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.xml.tar.gz.options	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1 @@
+-p -v -.xml

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.xml.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.xml.tar.gz.output	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.xml.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+  <object type="Machine" os_level="-1" os_index="0" cpuset="0x00009fdb" complete_cpuset="0x0000ffff" online_cpuset="0x00009fdb" allowed_cpuset="0x0000ffff">
+    <object type="Socket" os_level="-1" os_index="0" cpuset="0x00001111" complete_cpuset="0x00001111" online_cpuset="0x00001111" allowed_cpuset="0x00001111">
+      <object type="Cache" os_level="-1" cpuset="0x00001111" complete_cpuset="0x00001111" online_cpuset="0x00001111" allowed_cpuset="0x00001111" cache_size="4194304" depth="3">
+        <object type="Cache" os_level="-1" cpuset="0x00000101" complete_cpuset="0x00000101" online_cpuset="0x00000101" allowed_cpuset="0x00000101" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000101" complete_cpuset="0x00000101" online_cpuset="0x00000101" allowed_cpuset="0x00000101" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="0" cpuset="0x00000101" complete_cpuset="0x00000101" online_cpuset="0x00000101" allowed_cpuset="0x00000101">
+              <object type="PU" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
+              <object type="PU" os_level="-1" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100"/>
+            </object>
+          </object>
+        </object>
+        <object type="Cache" os_level="-1" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="1" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010">
+              <object type="PU" os_level="-1" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010"/>
+              <object type="PU" os_level="-1" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000"/>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+    <object type="Socket" os_level="-1" os_index="1" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202">
+      <object type="Cache" os_level="-1" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202" cache_size="4194304" depth="3">
+        <object type="Cache" os_level="-1" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="0" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202">
+              <object type="PU" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002"/>
+              <object type="PU" os_level="-1" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200"/>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+    <object type="Socket" os_level="-1" os_index="3" cpuset="0x00008888" complete_cpuset="0x00008888" online_cpuset="0x00008888" allowed_cpuset="0x00008888">
+      <object type="Cache" os_level="-1" cpuset="0x00008888" complete_cpuset="0x00008888" online_cpuset="0x00008888" allowed_cpuset="0x00008888" cache_size="4194304" depth="3">
+        <object type="Cache" os_level="-1" cpuset="0x00000808" complete_cpuset="0x00000808" online_cpuset="0x00000808" allowed_cpuset="0x00000808" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000808" complete_cpuset="0x00000808" online_cpuset="0x00000808" allowed_cpuset="0x00000808" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="0" cpuset="0x00000808" complete_cpuset="0x00000808" online_cpuset="0x00000808" allowed_cpuset="0x00000808">
+              <object type="PU" os_level="-1" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008"/>
+              <object type="PU" os_level="-1" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800"/>
+            </object>
+          </object>
+        </object>
+        <object type="Cache" os_level="-1" cpuset="0x00008080" complete_cpuset="0x00008080" online_cpuset="0x00008080" allowed_cpuset="0x00008080" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00008080" complete_cpuset="0x00008080" online_cpuset="0x00008080" allowed_cpuset="0x00008080" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="1" cpuset="0x00008080" complete_cpuset="0x00008080" online_cpuset="0x00008080" allowed_cpuset="0x00008080">
+              <object type="PU" os_level="-1" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080"/>
+              <object type="PU" os_level="-1" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000"/>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+    <object type="Socket" os_level="-1" os_index="2" cpuset="0x00000440" complete_cpuset="0x00000440" online_cpuset="0x00000440" allowed_cpuset="0x00000440">
+      <object type="Cache" os_level="-1" cpuset="0x00000440" complete_cpuset="0x00000440" online_cpuset="0x00000440" allowed_cpuset="0x00000440" cache_size="4194304" depth="3">
+        <object type="Cache" os_level="-1" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="1" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040">
+              <object type="PU" os_level="-1" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040"/>
+            </object>
+          </object>
+        </object>
+        <object type="Cache" os_level="-1" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="0" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400">
+              <object type="PU" os_level="-1" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400"/>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+  </object>
+</topology>

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines_noadmin.tar.gz
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines_noadmin.tar.gz	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines_noadmin.tar.gz	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1 @@
+link 16em64t-4s2c2t-offlines.tar.gz
\ No newline at end of file


Property changes on: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines_noadmin.tar.gz
___________________________________________________________________
Added: svn:special
   + *

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines_noadmin.tar.gz.options
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines_noadmin.tar.gz.options	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines_noadmin.tar.gz.options	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1 @@
+- -v --whole-system --cpuset

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines_noadmin.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines_noadmin.tar.gz.output	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines_noadmin.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,53 @@
+Machine (phys=0) cpuset=0x00009fdb
+  Socket #0 (phys=0) cpuset=0x00001111
+    L3Cache #0 (4096KB) cpuset=0x00001111
+      L2Cache #0 (1024KB) cpuset=0x00000101
+        L1Cache #0 (16KB) cpuset=0x00000101
+          Core #0 (phys=0) cpuset=0x00000101
+            PU #0 (phys=0) cpuset=0x00000001
+            PU #1 (phys=8) cpuset=0x00000100
+      L2Cache #1 (1024KB) cpuset=0x00001010
+        L1Cache #1 (16KB) cpuset=0x00001010
+          Core #1 (phys=1) cpuset=0x00001010
+            PU #2 (phys=4) cpuset=0x00000010
+            PU #3 (phys=12) cpuset=0x00001000
+  Socket #1 (phys=1) cpuset=0x00000202
+    L3Cache #1 (4096KB) cpuset=0x00000202
+      L2Cache #2 (1024KB) cpuset=0x00000202
+        L1Cache #2 (16KB) cpuset=0x00000202
+          Core #2 (phys=0) cpuset=0x00000202
+            PU #4 (phys=1) cpuset=0x00000002
+            PU #5 (phys=9) cpuset=0x00000200
+  Socket #2 (phys=3) cpuset=0x00008888
+    L3Cache #2 (4096KB) cpuset=0x00008888
+      L2Cache #3 (1024KB) cpuset=0x00000808
+        L1Cache #3 (16KB) cpuset=0x00000808
+          Core #3 (phys=0) cpuset=0x00000808
+            PU #6 (phys=3) cpuset=0x00000008
+            PU #7 (phys=11) cpuset=0x00000800
+      L2Cache #4 (1024KB) cpuset=0x00008080
+        L1Cache #4 (16KB) cpuset=0x00008080
+          Core #4 (phys=1) cpuset=0x00008080
+            PU #8 (phys=7) cpuset=0x00000080
+            PU #9 (phys=15) cpuset=0x00008000
+  Socket #3 (phys=2) cpuset=0x00000440
+    L3Cache #3 (4096KB) cpuset=0x00000440
+      L2Cache #5 (1024KB) cpuset=0x00000040
+        L1Cache #5 (16KB) cpuset=0x00000040
+          Core #5 (phys=1) cpuset=0x00000040
+            PU #10 (phys=6) cpuset=0x00000040
+      L2Cache #6 (1024KB) cpuset=0x00000400
+        L1Cache #6 (16KB) cpuset=0x00000400
+          Core #6 (phys=0) cpuset=0x00000400
+            PU #11 (phys=10) cpuset=0x00000400
+depth 0:	1 Machine (type #1)
+ depth 1:	4 Sockets (type #3)
+  depth 2:	4 Caches (type #4)
+   depth 3:	7 Caches (type #4)
+    depth 4:	7 Caches (type #4)
+     depth 5:	7 Cores (type #5)
+      depth 6:	12 PUs (type #6)
+4 processors not represented in topology: 0x00006024
+4 processors offline: 0x00006024
+4 processors allowed but not online: 0x00006024
+Topology not from this system

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t.tar.gz
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t.tar.gz	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t.tar.gz	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,88 +1,88 @@
-‹ §
-J í]sIr®ukýо´#ì9õ]ÀÞybm‡c7ޝ8çŽÑZ‚ø
-°©‘ö×»
- 9 1Ct%»R–ò}°;3›lÙoWuÖ›Y:tëàúqs33ýÿyW•ˆÞçëèÕáÏڹÿy§µQÆ+å´~§tú¯ð®ñUÞÍîûvß4ï>ÞnoWËÍ+Çuû{Ž7Ä‹>ÿn¿~‹¿¶Îz­\Hñ·.xÄŸƒßŠÿl÷°Ü|ÚŽvŽàpŒ÷oÄßX‹ø'ù»wí¼‚ðøç€w÷÷Ûý?ü¡Qï?w›ùv³œ§?ý[·I—A÷›¾[½O—Dó©]/W_ÓW´¿ÞλÕ?¤ÿÇÿl6íºK¼äðýÿøßÿÔüÿn»ùÇ¿ýùŸšÿû_?7æ§ þíßÿþþ¾ïv»åæ6}ëäp’?ÿûßó5~jrÓôwílÑ5÷Ë¿çŸîÔ44ÿùÇ÷»Å×ûå¬]5‡7ªÞß/?¦ÐÝÞçCÞ϶û.áð•ü#ó_ä/™÷Ÿvù¯¿v÷ù?oº/³n×/·›Ç¿Ë×ý¼YuŸÓ¯–³_vÏG¯ÚôÓÓÒ·5Ÿ×]3ïšÝ}×ô÷³f}¿ovm׬g]3û2iÚÝrÖÜw»fÝïÓWnóWÚf¶Þ~N‡õùÛlhf«O«‡ûE3ïï›v¶[6ëõ—æÓ—ô£îӏMÿ7éÍ¢oúusÿõ>ý®é#þÒ¬Öé·Ù¤+vÓßäsï6é;·›e¿Ý7óû›Ùn•ÞÝ—f–~Ùš/ýn߬Úŧ›ÕúýÇíív½ÜåÂë©ùÉû÷Ooãñó
-îøyß´«åífÝmúm3yßÎçé3¼?wø”Uóq™ÞúS þ¹q“ãß|^îû‡võ~·ý¥Û7ëvÓÞvùýáýûÓKMŸ—šÆ¥V~©MâOF}»KÍ|Ÿ—šÁ¥F»Ôâ·»Ôì÷y©Y\j¤KMÛow©¹ïóRûý¹šÆ¥öÊ¥¦Ì·»Ôü÷y©ýþ\
-—Ú«¨þv—Zø>/µßŸ«áR{u ~»K-~Ÿ—ÚïÏÕp©ýo«M¾ÏK
-yµï/Ù1ý>/5äÕˆ—šû†)Üït¹ ‰5âú-¯µït½ ™5âµö
-Óú;]0 at jx­}Ã|‡þNW[ûþrkú;]2 at rx_ßðZûN×]û>ž
-ø}r?*¿åÿLE?æ9^÷jT|áÿt6jø?9ÈwµÃ-Ò[Ó˜ƒØèiúø]ÈjµÓ8	ÁOkƒW5ÎgÌÄaU£'“©±s!}‹öAé&N§67u	Îøçï3QM¦ÇïӍŽÊ&©§ÿÅILß4Q&Z5I'óºQùìÇ#Ó·©¢o‚nBœØx8Ry«Lš?›|¨VÇCm:
 T{«;m‚
-“ã¡Ú…ôNÜ4©té›ÒÛž6V[ßøôNB>v¢¢¦›»fÇúf2M¿Xc¦é 7QAMŸé½Þ€>šˆN¿¨ÕéÓr&JùPoÓÒØIþ½¦@LŸ’Mç6“ô7.8{|>×Aä%ÿTs<tÒL½š¤_2¤·¦¬7&›0cÒ –ÞGþLL;Ÿ~ÞÔ„ô]ék“éñÝNÓÛž¤áÖ§CÃã'›~¢OaÏŸEcƒñ‡k2™¤8äOP5ññH_÷iMo)ä3Eôp`izÿ.ÿV“§#ó;Ô“à›iHoÃûôa>,íÒéÓÅ•­ðx¬m¢Ö1G1 hsé\)þidH¿–µG»ü»§ûCúŠž¦Ó9„wê¢wé;\4êégû&¦kA爇fšþþpðD{—ßóäðFT~ÓËM¿Ï¤u8¼Ùi*Å ¨ézüÿÓ+_é²—ßØá•¤áòGötˆ‰'ǏóÒn:
-*Åͤè{û¦Ÿå|þߨï/¼ðÂ/¼ðÂ/¼ðÂ/¼ðÂëz½Ÿõ_ú&šè'jê¼yÿ±_®»œ–²6('OKaÝ}““ÚÊëÃßÜßì6›åæ¶yúóÇÕvv×Íӏüfùßùÿû¯÷ã÷€ÖÿC«CŒÖäþ6†þüFüçÝçeº|Ç»Êãïb4ˆ?¯Ä?ýwß­G¸†÷ÿ1FǘâŸ.øsp=þ³Ýñ>jòúoÔèÿÅðøç¥MúE0ðþoœ.E>Ç?z‹øsPÿ~»Û®¶·_‹/„âþoFý³@‰¿ØwíüæÉ*wõ¯ûr8ó"þ.*ôcá)ÿœÿáÒÞ:QPôÿdÕ¼Ùµ³»ö¶»YÎ_=ÇUý«—ú÷úçÁ@è?»à¯iþ”rý[í<ôρ†þECÖÿàÙ?iþoôÏÂùü?û(Jô¿èöë4ëOÿÛ¾_uƒó@åù›@þ‡ƒ·Ä¶}Ø)+Ÿÿ9îÿ ß#›ýêy)«@Åë?F+ü?Åñ_næÝSt”ÿÆ`ý—jüsùþÐs\ÿÃËùŸŠã?¹Æb ªþŸ×€’fº›]»ï—¹ýÉož£|þ•Eþ‡äeCÕÿu7Þø¯/ò?é úçàçÍòÓ²›ã. ªþ­Ížƒ°þ›ž  ,”/ªþgÛE·ï6³¯Ç€WÓ×õo_è?hg |ECÕÿ/í×û›í§›öþ~;[¶ýòó²ÿú;ç èß;ø?Y
 Ðú—9ÿ¿h÷Ýü&}áfÝî^?ÇUý_ø¿¼ŠÈÿ±ðø¿dBÕÿæaý±ÛçÀ}×_ÑÅõñ߿Կ¶ðÿ°×ÿ y¹Ðô¯êû?üPã?®ÿÃ]ú?,îÿh¸?DCÕuÿôÏü²¡êTÿÇÅóŸÕ
-úgáCÛ·¸È…ªÿÚþƒüÿeCÕuÿü_,Àÿ!ªþÇõ¼ÿƒwð³0üECÎÿ×öàùŸ…sÿúJƒªÿqý/çÿ^[ø¿Y°h *šþu}ÿ‡‡ÿƒjü«÷ÿ@þ—…Üv	¹Põ_Ýÿú0ý“
+‹ øÓ9K í]sIr®ukýо´#ì9õ]ÀÞybm‡c7ޝ8çŽÑ[‚ø
+ ©‘ö×»
+ 9 1Ct%»R–ò}°;ú`‹
+"ûíªÎz3K‡n\ÿ/nof¦ÿ?ïj Ñûü«Ž^þ¬;üúÈ;­2^)§õ;¥7þ]㫼›<ìûv×4ï>Þmî–‹õ+Çu»=ÇâEŸÇ»ÛÌF¿†Å_[g½V.¤ø[¯âÏÁoŶ}X¬?mF;Gp8Æû7âo¬	áEüÓ¯ö]£F{¯ <þ9àÝ~¿ÙýÃõþs·¾Ýìn·éOÿÖ­ÓeÐýǺï–ïÓ%Ñ|jW‹å×ôí߯6·ÝòÒïÃñ·Íº]u鏗þý?þ÷?5ÿ¿Û¬ÿñoþ§æÿþ×ύù)¨û÷¿¿ß÷Ýv»Xߥ:9œäÏÿþ÷ümŸÚŸÜ4ý];›wÍ~ñ÷üݝš†æ?ÿø~;ÿº_ÌÚesx£êý~ñ1…înŸy?Ûìºü…ÃWò·Ì‘¿dÞÚ>ä¿þÚíóooº/³nÛ/6ëÇ¿Ë×ým³ì>§-ÿd¿lŸ^¶é»§?¤Ö|^uÍm×l÷]ÓïgÍj¿k¶m׬f]3û2iÚíbÖì»m³êwé+wù+m3[m>§ÃúüÏlhfËOˇý¼¹í÷M;Û.šÕêKóéKúVûômÓÿMúO3ï›~Õì¿îÓÏš>â/Ír•~šuºb×ýM>÷vþåf½è7»æv3Û.Ó»ûÒÌҏ1û¢Có¥ßîše;ÿt³\½ÿ¸¹Û¬ÛüQx=5?yÿþém<~¾Á?ï›v¹¸[¯ºuŸ£m&ïÛÛÛôîÇ>eÕ|\¤·þˆnÜäø7Ÿ»þ¡]¾ßn~évͪ]·w]þFxÿþôRÓß祦q©•_j“ø“QßîR3ßç¥fp©Ñ.µøí.5û}^j—éRÓöÛ]jîû¼Ô~®¦q©½r©)óí.5ÿ}^j¿?WÃ¥öê ª¿Ý¥¾ÏKí÷çj¸Ô^@§ßîR‹ßç¥öûs5\jÿ[çj“ïóRC^íûKvL¿ÏK
+y5â¥æ¾a
+÷;]. at b8‚~Ëkí;]/@fx­}Ãt‡þNZ#^kß0ß¡¿ÓäÖ¾¿ÜšþN—\#Þ×Â7¼Ö¾Ó5d×¾g~ŸÜÊoù?ÓEяyŽ×ýŸÚ_ø?Ó
+þOò]íp‹ôÖ4&Å 6zêlt!«ÕNã$?i¬
+^5Ö8oœi|0w|„UžL¦Æ6Î…ôO´J7q:µÑ¸©kLpÆ?ÿ;ÕdzüwºÑQÙ$õô¿8‰éM”‰VMÒɼnT>ûñÈôÏTÑ7A7!Nl<©¼U&ÍŸM>T«ã¡6ª½Õ6Á†ÉñPíBz'nšTGºôÒÛž6V[ßøôNB>v¢¢¦o›ºfÇúf2M?Xc¦é 7QAMŸé½Þ€>š¿‰N?¨ÕéÓr&JùPoÓÒØIþ¹¦@LŸ’Mç6“ô7.8{|>×Aä%Ws<tÒL½š¤2¤·¦¬7&›0cÒ –ÞGþLL;Ÿ¾ßÔ„ô¯Ò×&Ó㻝¦·=IíO‡†ÇO6}GŸÂž?‹Æã×d2IqÈŸ jâã'¾îÓšÞRÈgŠèá@ó§âòO5y:2¿C=	¾™†ô6¼OÆáÃÒ.>]\ùÇ
+ÇÚ&jsÓ	‚vñø8—ΕâŸF†ôcYûx´Ë?{º?¤¯èi:0½‘Cx§.z—.±ÃE£ž¾·obºtŽxh¦éïO´wù=OoDå7½X÷»|@:P‡Ã›Æ Rò‡š> Çÿ?½ò…‘>!;qù^I.dO‡˜xrü8/í¦Ó RÜLо·oú^ÎçÿýñÂ/¼ðÂ/¼ðÂ/¼ðÂ/¼~ ×ûYÿ¥o¢‰~¢¦Î›÷ûŪËi)kƒòqò´Ö훜ÔV^þf³{X¯ë»æéÏ—›Ù}w›¾å7Ëÿ¾Èÿï¿îÇï3¬ÿ‡
+V‡­Éý?lˆèÿÁÁoÄÿ¶û¼H—ïx×Ayü½Òñçà•ø§ß÷Ýj„Ë`xÿctŒ)þÁZ…øsp=þ³íñ>jòúoÔèÿÅðøç¥MúE0ðþoœ.j•ã£Aü9(ˆ¿Ùn–›»¯ÅBqÿ7£ƒƒþY Ä¿ŸïºööæÉ*wõ¯ûr8ó"þ.ôcá)ÿœÿãÒÞ:QPôÿdÕ¼Ù¶³ûö®»YܾzŽ«úW/õï=ôσÞECÑvÁ_Óü)åú·iýs ¡ѐõ?xöOšÿ;ý³p>ÿOà~ ŠýÏ»Ý*ÍúÓãÿ¦ï—Ýà<PyþÇZüo‰ÿló°R(V>ÿsN{Üÿ9@¾G6ú?ÔóRVŠ×L®rÃýŸƒâø/Ö·ÝSt”ÿ	ÄŸjüsùþÐs\ÿÃEþGŒÿä>ÿ‰9€X¨ú^Jšén¶í®_äö'¿yŽòùTùÿ•
+Uÿý×íx㿾Èÿhƒþ/,ü¼^|Zt·¸…ªÿCk³ç ¬ÿ¡,”/ªþg›y·ëÖ³¯Ç€WÓ×õo_è?è ¡|ECÕÿ/í×ýÍæÓM»ßof‹¶_|^ô_çýû ÿ':@ÿ’!çÿçí®»½I_¸YµÛ×ÏqUÿþ/¯5ò,<… þ/™Põ¿~X}ìvy°ïú+º¸>þûý{øXÈ됼\húWõýþ¨ñ×ÿá.ý÷4Ü¢¡ê¿ºÿúgþÙPõ?ªÿãâùÏjý³ð¡í[ÜäBÕuÿò?,`ü—
+Uÿµýþ/àÿ
+Uÿãú?^ŽÿÁø¿Y˜@þ¢!çÿkû?ðüϹÿý?¥AÕÿ¸þ—ó¯=üß,X4 
+Mÿº¾ÿÃÁÿÁ5þÕû ÿËBn»ˆ\¨ú¯îÿ@ý˜þɆªÿÚý?4ÖX@ÿÙPõ_Ýÿþ,`ü—
+UÿÕû`ý—ø?dCÕuÿÖX€ÿC6äümÿò,Àÿ!ªþ«÷ÿ@ÿòú$/—Áú/ÛòåŒÁþ£Õú]:*† ÿñÞÿ³ôƒãÿ|ÿ×ÁiÄŸJüûù®ko‡ï [>ÿwë<œÍÿó &¢ èÿÙû³mg÷íÝÕ½àËóÞCÿ<`ýO6ýö¿¢ùSÊõo±þÇò}²!ëðìŸ4ÿw
+úgá<ÿþßÒ(Ñÿ¼Û­Ò¬?=þoú~9|+ðòüµù?ÞÿÙæaÝ8GùüÏ9
+ÿ˜ÿɦ@ÿÇõ_Â9†Ýÿ³êƒ‹Zåü¿²Èÿ³PÿÇý?JÎQ>þ'¨ñ¯^ÿþ?,äý_Pÿ-ªþ«×#ÿÃúÿʆªÿêõßð²€úoÙPõ_½þõ,X(_4TýWïÿþo, þ[6Tý[ÿ}¡ý?xÐØýY4äüíúoäÿXx
+ü_2¡ê¿zý7ü?,äõ?H^.4ý«êþ\ÿÿG}¨ñ×ÿá.Öú² áþ
+UÿµýèÿËü²¡êTÿÇÅóŸÕúgáCÛ·¸È…ªÿêþäXÀø/ªþ«û?àÿbþÙPõ_»ÿ?úÿò€þÿ²!çÿ+û?ÿçáÌÿþŸâ ê\ÿÇËù¿×þo,€Š†¦]¿ÿ‡‚ÿƒjü«÷ÿ@þ—…Üv	¹Põ_Ýÿú0ý“
 UÿÕû`ý‡ôÿ
 UÿÕýèÿÇÆÙPõ_Ýÿõ_àÿ
-UÿÕýXÿaþِóÿµýÈÿ± ÿ‡l¨ú¯ÞÿýXÈ됼\ë¿lË—3û?tŒVëwé¨è"üÄÿyÿÏÒsŽÿóý_‡4%Dü Ä¿_ì»v>|Øòù¿‹XÿãálþŸ 0EÿÏÞŸ];»ko¯î_žÿóúç벡èÿ°ÿûÍŸR®‹õ?&ï“
-Yÿƒgÿ¤ù¿
-Ð?çùôÿ–F‰þÝ~fýéñÛ÷«á[—ç¬5Èÿ±ð–øÏ¶›~À9ÊçÎFø?XÀüO6ú?®ÿÎ1ìþŸTï‚‹Zåü¿ÒÈÿ³PÿÇý?JÎQ>þ£¨ñ¯^ÿþ?,äý_Pÿ-ªþ«×#ÿÃúÿʆªÿÊõߨÿ‘	Ôˆªÿêõߨÿ`ÁBù¢¡ê¿vý7öåõß²¡êÜúïý{ìÿÁƒÆîÏ¢!çÿk×#ÿÇÂSàÿ’	UÿÕë¿áÿa!¯ÿAòr¡é_Õ÷(ø?8 Æ\ÿ‡»Xÿ	èÿÉ‚†ûC4Tý×ö ÿ/ðȆªÿQýÏVE蟅mßâ ªþ«û?ÿaã¿l¨ú¯îÿ€ÿ‹ø?dCÕíþÿèÿËúÿˆœÿ¯ìÿ@þŸ‡3ÿúŠƒªÿqý/çÿ^ø¿Y°h *šþu}ÿ‡†ÿƒjü«÷ÿ@þ—…Üv	¹Põ_½ÿêXÀôO6TýWïÿõÐÿC6TýW÷ ÿÿeCÕuÿÖY€ÿC6TýW÷`ý‡ø?dCÎÿ×îÿüðȆªÿêý?Ðÿ‡…¼þÉËe°þ=eçŸ#Ãü'ûÿè=öa¡ þÏû–žcXüOïÿ:øs@‰¿Øwí|ø°CçÿÁÇôϘ÷ÿ‹þÎæÿ&½0EÿÏÞŸ];»ko¯î?4ÿwпÑyþïÖÿX@ý·l(ú?ìÿ~Eó§”çÿmþ2ôÏ ô/²þÏþ
 çÿÊöÿXÿgá|þŸÀý@%ú_tûušõ§Çÿm߯†o^žÿ±Ö"ÿÇÂ[â?Û>lúç(Ÿÿ9‹ýy@¾G6ú?®ÿÎQ¼þc´ÒÈÿ³PÿÇý?JÎQ>þ£¨ñ¯^ÿ
-ÿ'yÿÔË…ªÿêõßÈÿ²€ü¯l¨ú¯\ÿ­üß, þ[6TýW¯ÿFÿO,”/ªþk×;Ô°€úoÙPõ?ný÷…þ½ƒÿ“ÝŸECÎÿW¨ÿ>ªü¡þScügá)ðÉ„ªÿêõßðÿ°×ÿ y¹Ðô¯êû?,üPã?®ÿáÿÿ7BÃý!ªþ«û? àÿ
-Uÿ£ú?.žÿ¬VÐ?Ú¾Å- at .TýW÷ ÿÃÆÙPõ_½ÿ?ü_,Àÿ!ªþk÷ÿwð³€þÿ²!çÿkù?|<ú? Îýèÿ)
-ªþÇõ¼œÿ£ÿ?†/ÑÐô¯ëû?üPã_½ÿò¿,ä¶Kp€È…ªÿêþÔÿ°€éŸl¨ú¯ÜÿCE¬ÿ°€þ²¡ê¿ºÿýÿXÀø/ªþ«÷ÿÀúðȆªÿêþ¬ÿ° ÿ‡lÈùÿjý?ÌaýW!ÿÏü²¡ê¿zÿôÿf!¯ÿAòr¬KÙùçÈpÿ‡ŽQÙwé¨è5üÄÿyÿÏÒsÿÓý_ƒþ/,Pâß/ö];¾ìÐùÿÉþQáùŸ…³ù¿š(ädAÑÿ³÷g×ÎîÚÛ«{Á—çÿ¼‡þy@ÿÙPôØÿýŠæO)׿Õý_X@¾O6dýžý“æÿ6@ÿ,œÍÿ'	ÜDQ¢ÿE·_§YzüßöýjøVàåùk­Bþ‡ƒ·Ä¶}ØôÎQ>ÿs6¢þƒÌÿdS ÿãú/áÃîÿIõ.¸¨UÎÿ+ü?ÅñÜÿ£äåã?úÿsAõúoø?XÈû¿ þ[.Tý£ÿÿúÿʆªÿêõߨÿdõß²¡êýÿàÿ
-Uÿèÿÿc€úoÙPõ?ný÷…þQÿÍ„ÆîÏ¢!çÿ+ÔŸø¿±ÿ/O!€ÿK&TýW¯ÿ†ÿ‡…¼þÉË…¦Ußÿúo¨ñ×ÿá.×Ðÿ
-÷‡h¨ú¯îÿ€þY€ÿC6Týêÿ¸xþ³ZAÿ,|hû· ¹Põ_ÝÿüÿeCÕuÿü_,Àÿ!ªþk÷ÿ·ð³€õ^ِóÿµýxþgáÌÿþŸâ ê\ÿÇËù¿×þo,6 
-Mÿº¾ÿÃÀÿÁ5þÕû ÿËBn»ˆ\¨ú¯îÿ@ý˜þɆªÿêý?°þ
 ÃúȆªÿêþôÿcã¿l¨ú¯îÿÀú/ðȆªÿêþ¬ÿ°€õ^ِóÿµýÈÿ± ÿ‡l¨ú¯ÞÿýXÈ됼\ë_;ÊÖ?†ù?N÷ÿQ‡þÿðÔ§$þÏ€žcXüOïÿ:¦!ñg€ÿ~±ïÚùà-`Ëçÿ.øX8›ÿ»ôÂd@$ý?›ví쮽½¶|yþÏ{蟬ÿɆ¤ÿÃð¯kþ”rýcýŸô
-]ÿCgÿ¤ùúçà|þŸÀý@Eú_tûušõ§Çÿm߯ï^žÿ±N#ÿÇ›â?Û>lúëç(Ÿÿ9çáÿfùÙ”èÿ¸ \~Žòõ}¨ÿÀý¿>åñÜ ¤àåã¿1ñgÿ‚ðëãÿEý·öð³÷Aý·\Èú/( /ŸÿG­‘ÿaù_ِõ_P ~Uÿ—õß: ÿ¨ÿ–
-Yÿà„õ_«PÿÅ‚…òECÖAøuý_Ôƒú/Pÿ-²þ
-À	úØÿ‡ÝŸECÏÿ/ ¿ªÿËúoí‘ÿcá)ðÉ„¬ÿ‚ðëãÿEý·Ñðÿ°×ÿ y¹õ¯ªû?,üã?ªÿÃ]ú?Ðÿƒ
-÷‡hÈú¯íÿ€þY€ÿC6dýéÿ¸xþ³:@ÿ,|hû· ¹õ_ÛÿüÿeCÖeÿ‡†ÿ‹ø?dCÖÿ¨þ‹þÿÁÀÿÍú}ˆžÿ¯ìÿÀó?çþôÿ”Yÿ£ú?^Îÿ½Ñð³`Ñ T4Dýëêþÿäø×îÿü/¹í r!ë¿¶ÿõ?,`ú'²þ+÷ÿðXÿaý?dCÖmÿúÿ±€ñ_6dý×îÿõ_àÿ
-YÿµýXÿaþÙÐóÿ•ýÈÿ± ÿ‡lÈú¯ÝÿýXÈ됼\†ëŸ°ñÏ#ÃüÊÚà£6Iÿ:Fþ,ÄÿyûÏÒs‹ÿéý_žÿÿúPâß/ö];¾ìÐù–¿¶6ïÿüß,œÍÿ•QXEÿÏÖŸ];»ko¯n?4ÿwпöyþï¡Pÿ-ŠþÛ¿_Ñü)åù«ÖÿX@¾O6dýžýÎÿ•Îó‹ý?y8›ÿ›î¢(Ñÿ¢Û¯Ó¬?=þoû~5|'ðòüµ& ÿÃÁ[â?Û>lúç(Ÿÿ9áÿ`ó?Ùèÿ¸üK8ÇÀõã\pQ«œÿWùŠãÿ¸ýGÉ9ÊÇcâÏ5þåß”úo‘ÿe!ïÿ‚úo¹Põ_PþM©ÿVù_°þ#ªþÊ¿)õß*ÂÿÉê¿eCÕAù7eý×`ÿg,”/ªþÊ¿)õßÚ¢ÿ¨ÿ–
-Uÿåßý{‹þO,hìþ,rþxùw‘ÿK¹\ÿáUÄüŸ…§Àÿ%ªþÊ¿)õßÚÂÿÃB^ÿƒäåBÓ¿ªíÿÐ1ÂÿÁ5þãú?ÜÅúO€ÿŸ
-÷‡h¨ú¯íÿ0Ð?ðȆªÿQýÏVE蟅mßâ ªþ«û?ÿaã¿l¨ú¯îÿÀúðȆªÿqýýÿ½…ÿ›ôÿ—
-9ÿ_ËÿaýÑÿúOÎüèÿ)ªþÇõ¼œÿ{màÿfÁBð¢¡é¿l3 ‚ÿä¿‚ÿƒjü«÷ÿ@þ—…Üv	¹Põ_Ýÿú0ý“
-UÿÕû`ý‡ôÿ
-UÿÕýÈÿ²€ñ_6TýW÷`ý—ø?dCÕuÿÖX€ÿC6äüµþêàÿÈÿ± ÿ‡l¨ú¯Þÿý¿YÈ됼\ëßQvþ92Ìÿq²ÿŽÑcÿ
-âÿ¼ÿgé9†Åÿôþ¯ƒqˆ?”ø÷‹}×·ï ;tþ²ÿ_Äþï<œÍÿuza2 
-ŠþŸ½?»vv×Þ^ݾ<ÿç=ôÏô.Šþû¿_Ñü)åú·ÚÁÿÃú?Ȇ¬ÿÁ³Òüß蟅óù÷Q”èÑí×iÖŸÿ·}¿¾xyþÇZ‹üo‰ÿlû°éœ£|þç,öäϲ)Ðÿqý—pŽâõ£Ó×qÿç 8þû”œ£|ü7F!þ,Pã_½þþOòþ/¨ÿ–Uÿµë¿Ñÿ“ä{dCÕõúoø¿Y@ý·l¨ú¯^ÿý?X°P¾h¨ú¯]ÿíPÿÁê¿eCÕÿ¸õßú÷þO4v
-9ÿ_«þÛ„cÿ<ÿ³ðø¿dBÕõúoøXÈ됼\húWõýþ¨ñ×ÿáÐÿÿ¡áþ
-UÿÕýÐ?xÞ“
-Uÿ£ú?.žÿ¬VÐ?Ú¾Å- at .TýW÷ ÿÃÆÙPõ_½ÿ?ü_,Àÿ!ªþ«÷ÿÇú/èÿ/rþ¿šÿýÿ99÷ ÿ§4¨ú×ÿñrþþÿ\Xlø!šþu}ÿ‡…ÿƒjü«÷ÿ@þ—…Üv	¹Põ_Ýÿú0ý“
-UÿÕû`ý‡ôÿ
-UÿÕýèÿÇÆÙPõ_Ýÿõàÿ
-UÿµýèÿÃü²!çÿ«ù?ì±ÿúÿ² ÿ‡l¨ú¯Þÿúg!¯ÿAòr¬]¶çË)ÃüÊGÒ¿òø¯TöÁÿQŸ’ø?o ZxŽañºÿû¼ÿSDÿHñïû®Þvèüÿ×ø»ðüÏæÿ²!éÿÙü³kgwííµÍàËòYÿÞCÿ<@ï²!éÿ°üëš?¥\ÿÖôaýdC×ÿÐÙ?iþïôÏÂùüý¿¥Q¤ÿE·_§Yzüßöýjð^àåùëTDþ‡ƒ7Ŷ}Øô×ÏQ>ÿsΣþƒ<ÿɦDÿÇàòs\ÿIª.êÜÿCü¸ÿ×§<þ€œ£|ü7&`ý‡rü
-À¯ÿáåüO{ø?XÈû¿ þ[.dý€—Ïÿcú#ôÏò=²!ë¿  üªþõEþG{Ô²€úoِõ_P NXÿµ
-ýŸX°P¾hÈú/( ¿®ûBÿÁhôaõß²!ë¿  œ ÿ`àÿdAc÷gÑÐóÿÃÀ¯êÿÂÿåµGþ…§Àÿ%²þ
-À¯ÿþ¥þ†ÿ‡…¼þÉË…¨UÝÿúoÈñÕÿá.Öúÿ± áþ
-Yÿ•ý
-úgÏ{²!ëLÿÇÅóŸÕúgáCÛ·¸È…¬ÿÚþäXÀø/²þkû?àÿbþِõ?ªÿãåø‚†ÿ›ôÿ—
-=ÿ_×ÿü?çþôÿ”Yÿ£ú?^Îÿ½Qð³`± hˆú×ÕýþÈñ¯Ýÿù_rÛ%8@äBÖíþ¨ÿaÓ?ِõ_»ÿÖX@ÿِõ_Ûÿþ,`ü—
+UÿÕýXÿaþِóÿµýÈÿ± ÿ‡l¨ú¯ÞÿýXÈ됼\ëßSvþ92Ìÿq²ÿŽ1bÿ
+âÿ¼ÿgé9†Åÿôþ¯ópø3@‰?ßuííð`‡Îÿƒé¿1ïÿ-ü?,œÍÿMza2 
+ŠþŸ½?ÛvvßÞ]Ý~hþï £óü߬ÿ±€úoÙPôØÿýŠæO)Ïÿ[àÿaú—
+Yÿƒgÿ…óåû+¬ÿ³p>ÿOà~ ŠýÏ»Ý*ÍúÓãÿ¦ï—÷/ÏÿXë‘ÿcá-ñŸmÖý€s”ÏÿœÃþ< ß#›ý×	ç(^ÿ1ZYäÿY(Žÿãþ%ç(ÿˆ?ÔøW¯ÿ†ÿ“…¼ÿê¿åBÕíúoôÿäù_ÙPõ_½þþoPÿ-ªþ«×£ÿ'Ê
+Uÿµë¿ê?X@ý·l¨ú·þûBÿ>ÀÿÉ‚ÆîÏ¢!çÿ+ÔUþPÿi1þ³ðø¿dBÕõúoøXÈ됼\húWõýþ¨ñ×ÿáÐÿÿ¡áþ
+UÿÕýÐ?ðȆªÿQýÏ6·€þøÐö-nr¡ê¿ºÿù0þˆªÿêýÿáÿbþÙPõ_½ÿ?üß, ÿ¿lÈùÿZþë¿úgáÜÿþŸÒ ê\ÿÇËù?úÿsaaø
+Mÿº¾ÿÃÂÿÁ5þÕû ÿËBn»ˆ\¨ú¯îÿ@ý˜þɆªÿêý?°þÃúȆªÿêþôÿcã¿l¨ú¯îÿÀúðȆªÿÚþôÿáþِóÿÕú˜£ÿùàÿ
+UÿÕû ÿ7yý’—Ë`ý[ÊÎ?G†û?tŒÊ¾KG¥_áÿà  þÏû–žcxüŸîÿ:8ôaÿ~¾ëÚÛá;ÀÿŸìÿ
+žÿY8›ÿ«‰B>@ý?{¶íì¾½»º|yþÏ{èŸôÿ—
+Eÿ‡ý߯hþ”rý[Ðÿ…äûdCÖÿàÙ?iþïôÏÂÙü’Àý@%úŸw»Ušõ§ÇÿMß/‡o^žÿ±ÖEä8xKüg›‡u?àåó?ç4ê?XÀüO6ú?®ÿÎ1ìþŸU\Ô*çÿ•EþŸ…âø?îÿQrŽòñýÿ¹ Æ¿zý7ü,äý_Pÿ-ªþÑÿÿÇ ýeCÕõúoÔ²€úoÙPõþÿ?ðȆªôÿÿ1@ý·l¨ú·þûBÿ¨ÿfBc÷gѐóÿê¿Oë?±ÿ/O!€ÿK&TýW¯ÿ†ÿ‡…¼þÉË…¦Ußÿúo¨ñ×ÿá.Öúÿ± áþ
+UÿµýúgþÙPõ?ªÿãâùÏj
+ý³ð¡í[ÜäBÕuÿò?,`ü—
+UÿÕýð± ÿ‡l¨ú¯ÝÿßÃÿÍÖ{eCÎÿWö ÿÏÙÿý?ÅAÕÿ¸þ
 —ó¯üß,Xl (šþu}ÿ‡†ÿƒjü«÷ÿ@þ—…Üv	¹Põ_½ÿêXÀôO6TýWïÿõÐÿC6TýW÷ ÿÿeCÕuÿÖY€ÿC6TýW÷`ý‡¬÷ʆœÿ¯Ýÿù?àÿ
+UÿÕû ÿyý’—Ë`ýkGÙúçÀ0ÿÇéþ?êÐÿþú”ÄÿyÐÂs‹ÿéý_GãHñïç»®½¼,aþŸSÿ8›ÿ»ôÂd@$ý?›¶íì¾½»¶|yþÏ蟬ÿɆ¤ÿÃð¯kþ”rýcýŸô
+]ÿCgÿ”ù¿súgá|þŸÀý@EúŸw»Ušõ§ÇÿMß/ï^žÿI¿Eþ…7ŶyX÷×ÏQ>ÿs.ÂÿÍò=²)Ñÿq¸üåë?úPÿû}Êãÿ¸HÁ9ÊÇcâÏ9þà×ÇÿËúïÿ7yÿÔË…¬ÿ‚ðòùÔùÿ•
+YÿàWõÿõßýÿX@ý·lÈú/( '¬ÿZƒú/,”/²þ
+À¯ëÿ¢þÛ8Ô±€úoِõ_P NÐÀþ?<hìþ,zþxøUýÿFýwDþ…§Àÿ%²þ
+À¯ÿõ߯ÂÿÃB^ÿƒäåBÔ¿ªîÿ0ðp@Žÿ¨þw¹þƒþ,h¸?DCÖmÿôÏü²!ëLÿÇÅóŸ5
+úgáCÛ·¸È…¬ÿÚþäXÀø/²þ+û?,ü_,Àÿ!²þGõ\ôÿþoÐï[6ôüeÿžÿY8÷ ÿ§4ÈúÕÿñrþÿ›‹ ¢!ê_W÷Xø?8 Ç¿vÿäYÈm—à ‘Yÿµý¨ÿaÓ?ِõ_»ÿÖX@ÿِõ_Ûÿþ,`ü—
+YÿµýXÿeþِõ_Ùÿþ?<Àÿ!zþ¿²ÿù?àÿ
+Yÿµû ÿyý’—Ëpý6þyd˜ÿCY|Ô&é_ÇÑÿƒ…‚ø?oÿYzŽañ?½ÿëÃóâ_Jüûù®ko‡o ;tþŸåŸ7þHCR4ð³p6ÿWFa=@ý?[¶íì¾½»ºüÐüßAÿÚçù¿‡þy@ý·l(ú?lÿ~Eó§”çÿ­öXÿcù>ِõ?xö_8ÿW:Ïÿ-öÿäálþo¸ˆ¢Dÿón·J³þôø¿éûåðÀËó?Ö:üo‰ÿló°îœ£|þ眆ÿƒÌÿdS ÿãò/á×’ꃋIøÊhe‘ÿg¡8þÛ”œ£|üO þ,Pã_PþMªÿÖÈÿ²÷Aý·\¨ú/(ÿ¦Ô+‡ü/Xÿ‘
+Uÿåߤúo
+ÿ'¨ÿ–
+Uÿåß”õ_ƒýŸy°P¾h¨ú/(ÿ¦Ôkþo, þ[6Tý”Sôï=ú?± ±û³hÈùÿáåßEþ/åì¡þ[cþÏÂSàÿ’	Uÿåß”úoíáÿa!¯ÿAòr¡é_U÷è ÿÔøëÿpë?
+þ4Ü¢¡ê¿ºÿúgþÙPõ?ªÿãâùÏæ6 Ð?Ú¾Å- at .TýW÷ ÿÃÆÙPõ_Ýÿõàÿ
+Uÿãú?.úÿ{ÿ7èÿ/rþ¿–ÿÃú£ÿõŸ,œù?ÐÿSTýëÿx9ÿ÷ùËÐ?‚
+Mÿe›üþ¨ñ¯Þÿù_rÛ%8@äBÕuÿêXÀôO6TýWïÿõÐÿC6TýW÷ ÿËÆÙPõ_Ýÿõ_àÿ
+UÿÕýXÿaþِóÿÕú¨Ãú¯Bþø?dCÕíþèÿÍC^ÿƒäå2Xÿ޲óÏ‘aþ“ýtŒû¿°Pÿçý?KÏ1,þ§÷œEü9 Ä¿Ÿïºövø°Cçÿ'ûÿEìÿÎÃÙü_§&¢ èÿÙû³mg÷íÝÕ½àËóÞCÿ<@ﲡèÿ°ÿûÍŸR®«ü?, ÿƒlÈú<û'Íÿ‚þY8Ÿÿ'p?E‰þçÝn•fýéñÓ÷Ëá[—ç¬õÈÿ±ð–øÏ6ë~À9ÊçÎaÿGðü'›ý×	ç(^ÿ1ZYäÿY(Žÿãþ%ç(ÿˆ?ÔøW¯ÿ†ÿ“…¼ÿê¿åBÕíúoôÿäùÙPõ_½þþoPÿ-ªþ«×cÿ,”/ªþ«×£þƒÔˆªÿqë¿/ôïüŸ,hìþ,rþ¿Vý·9ÖâùŸ‡§Àÿ%ªþk×£ÿyý’—Mÿª¾ÿCÃÿÁ5þãú?úÿ#4Ü¢¡ê¿ºÿúgÏ{²¡êTÿÇÅóŸÕúgáCÛ·¸È…ªÿêþäXÀø/ªþ«û?àÿbþÙPõ_½ÿ?ÖY@ÿِóÿÕüèÿÏɹÿý?¥AÕÿ¸þ—óôÿçÂbÃÑÐô¯ëû?üPã_½ÿò¿,ä¶Kp€È…ªÿêþÔÿ°€éŸl¨ú¯Þÿë?, ÿ‡l¨ú¯îÿ@ÿ?0þˆªÿêþ¬ÿ° ÿ‡l¨ú¯îÿÀúðȆœÿ¯æÿ°ÇþèÿËü²¡ê¿zÿ蟅¼þÉËe°þuÙž/§ó(}H¿äñ_©ìÿ‚ÿ£>%ñÞ ´ðÃâÿtÿ÷yÿ§ˆþ/<âßÏw]{;xØ¡óÿ_ãïbÄó?˜ÿˆ¤ÿgó϶Ý·w×6ƒ/Ëÿeý{ýó ½Ë†¤ÿÃð¯kþ”rý[ãÐÿ…ô
+]ÿCgÿ¤ù¿Ð?çóôÿ–F‘þçÝn•fýéñÓ÷ËÁ{—ç¬3ùÞ
 ÿÙæaÝ_?GùüϹˆúðü'›ý€ËÏ1pý'Ïú’îsÿ}ðàþ_Ÿòø?n RpŽòñßX…õÈñ/( ¿>þ‡—ó?áÿ`!ïÿ‚úo¹õ_P ^>ÿÚ"ÿÃò=²!ë¿  üªþõEþGGÔ²€úoِõ_P NXÿµýŸX°P¾hÈú/( ¿®ûBÿÁXôaõß²!ë¿  œ ÿ`áÿdAc÷gÑÐóÿÃÀ¯êÿÂÿåuDþ…§Àÿ%²þ
+À¯ÿþ¥þ…ÿ‡…¼þÉË…¨UÙÿa"ê¿Y ÇTÿ‡»Xÿ	èÿÇ‚†ûC4dýWöèŸ<ïɆ¬ÿ1ýÏVG蟅mßâ ²þkû?ÿaã¿lÈú¯íÿ€ÿ‹ø?dCÖÿ¨þ—ãþoÐÿ_6ôü]ÿòÿ<œû?ÐÿSdýêÿx9ÿ÷ÆÀÿ͂ŀ¢!ê_Wïÿ¡àÿà€ÿÚý?ÿe!·]‚D.dý×ö þ‡LÿdCÖíþXÿaý?dCÖmÿúÿ±€ñ_6dý×ö`ý—ø?dCÖmÿÖX€ÿC6ôüeÿò,Àÿ!²þk÷ÿ@ÿòú$/—áú·„Žóœîÿ“îð°Pÿçý?Ï1,þO÷ÿ÷йÿ3â_Rüûù®koï ;tþ|LÿyüÏK‚ÿ8›ÿ›ôÂd@$ý?{¶íì¾½»¶üÐüßAÿFgýÿ¨ÿ–
+Iÿ‡ýß_×ü)eùÿ<ÿ³ÆaýŸè_6týýÎÿ•;ìÿàÿcá|þŸÀý@EúŸw»Ušõ§ÇÿMß/o^žÿI¿Eþ…7ŶyX÷×ÏQ>ÿsþoï‘M‰þë¿åç(_ÿÉwÜÿ9(ÿãþç(ÿUˆ?äøW«ÿØÿ™‘¼ÿê¿åBÖµúïp¨ÿ¶Èÿ²€ü¯lÈú¯VÿÐÿŸÔˆ¬ÿjõßáXÿú/,”/²þ«Õ‡cý7ê¿X@ý·lÈúµþûBÿÁÁÿÉ‚ÆîÏ¢¡çÿǯÿ>ªŽõŸ
+ã?O!€ÿK&dýW«ÿÇúoøXÈ됼\ˆúWÕýþÈñÕÿá.×PÿË‚†ûC4dý×ö@ÿ,Àÿ!²þÇô\<ÿY£ >´}‹[€\Èú¯íÿ@þ‡Œÿ²!ë¿¶ÿþ/àÿ
+YÿÕúÿýþoÐÿ_6ôü%ÿ‡GÿôϹÿý?¥AÖÿ¨þ—óo°ÿ/†/Ñõ¯«û?üã_»ÿò¿,ä¶Kp€È…¬ÿÚþÔÿ°€éŸlÈú¯Ýÿë?, ÿ‡lÈú¯íÿ@ÿ?0þˆ¬ÿÚþ¬ÿ° ÿ‡lÈú¯íÿÀúðȆžÿ¯ÕÿÃýÈÿ³ ÿ‡lÈú¯Ýÿý¿YÈ됼\†éŸ„{³_õ7ÛÍ/Iõûöó°­òÑáùŸŒ÷²<þuü9'+|Àþ_ö°¬Iú×1Fôÿa¡ þÏÛÿ–žcXüOïÿúÿAüëC‰?ßuííð
+ ‡>ÿŸìÿ5ÖÿY8{þWZ¡\ý?[ÿ¶íì¾½ën·¯ž£|þï=ôÏæÿ²¡è¶Ù]Õü)„çíñüÏô/²þÏþIó‹ýÿx8›ÿ§ `þ/‹ýÏ»Ý*ÍúÓãÿ¦ï—Ýà<PyþÇÚôeäxKüg›‡u?àåó?ç°ÿ˜ÿɦ@ÿGûá×’ꃋZåü¿2Èÿ³PÿÇíJÎQ>þ£¨ñ/hÿ@êÿ Ñÿ›…¼ÿú?È…ªÿ‚ö”þ
+þ/ï‘
+UÿíHý4üß, ÿƒl¨ú/hÿ@Yÿ5Øÿ勆ªÿ‚ö”þÚ£þ“ô
+Uÿí(ú÷þO4v
+9ÿ?¼ýÁÿ•~Eþ…§Àÿ%ªþÚ?Pú?hÿyý’—MÿeÅà$ÿ‡‡ÿƒjüÇõ¸‹õ…þ¿,h¸?DCÕuÿôÏž÷dCÕÿ¨þ‹ç?«5ôχ¶oqUÿµýèÿÍÆÙPõ_ÝÿÿðȆªÿqýûxÿ7ØÿC6äümÿžÿY8ó ÿ§8¨ú×ÿñrþ﵃ÿ›‹
+ at ECÓ¿®ïÿðp@íþèÿÅCn»ˆ\¨ú¯îÿ@ý˜þɆªÿêý?°þÃúȆªÿêý?ÐÿŒÿ²¡ê¿ºÿë¿,Àÿ!ªþ«û?°þÃü²!çÿkû?ÿcþÙPõ_½ÿúÿ°×ÿ y¹Öÿ„²óÏ‘aþ“ýtŒû¿±Pÿçý?KÏ1,þ§÷öÿaÿ~¾ëÚÛá;À–Ïÿ]4˜ÿ³€ù¿l(úöþlÛÙ}{wu/øòüŸ÷Ð?ØÿS6ýö¿¢ùSÊõouÀó?пlÈú<û'Íÿúóp6ÿGÿoq”èÞíViÖŸÿ7}¿¾xyþÇZüo‰ÿló°îœ£|þçœFý˜ÿɦ@ÿÇõ_Â9Š×ŒVùŠãÿ¸ÿGÉ9ÊÇÿâÏ5þµë¿
+ê?XÈû¿ þ[.Tý×®ÿöÈÿ°€|l¨ú¯]ÿmPÿÅê¿eCÕíúoôÿæÁBù¢¡ê¿výw@ý'¨ÿ–
+UÿãÖ_èßø?YÐØýY4äüåúoüO!€ÿK&Tý×®ÿöðÿ°×ÿ y¹Ðô¯êû?<üPã?®ÿÃaÿço„†ûC4TýW÷@ÿ,àyO6Týêÿ¸xþ³Ú@ÿ,|hû· ¹Põ_½ÿ?ò?,`ü—
+UÿÕýð± ÿ‡l¨ú¯Ýÿ?ÀÿÍúÿˆœÿ¯íÿÀó?gþôÿUÿãú?^Îÿ½Æþ?<Xl (šþu}ÿG€ÿƒjük÷ÿ@ÿ/rÛ%8@äBÕuÿêXÀôO6TýWïÿõÐÿC6TýWïÿþ,`ü—
+UÿÕýXÿeþÙPõ_Ýÿõàÿ
+9ÿ_ÛÿüðȆªÿêý?Ðÿ‡…¼þÉËe°þ§”Žó(kƒÚdý	àÿ`  þÏû–žcXüOïÿ:äü/â_
 Jüûù®ko‡ï ;tþŸå¯­ÍûÿE‹õ?ÎçÿFa=@ý?{¶íì¾½»ºüÐüßAÿéÁ?Íÿ=ôÏž÷eCÑÿaÿ÷+š?¥<ÿou€ÿ—ìÿ+²þÏþçÿJöÿVÈÿ³p6ÿÏu7¸ˆ¢Dÿón·J³þôø¿éûåð­ÀËó?Özôÿeá-ñŸmÖý€s”ÏÿœÃþÏ<`þ'›ý×	ç¸þ“T\Ô*çÿ•CþŸ…âø?îÿQrŽòñß‹ø³@íúoÔñ÷Aý·\¨ú¯^ÿü/Xÿ‘
+UÿÕë¿QÿÁê¿eCÕõúoÔ²`¡|ÑPõ_½þýY@ý·l¨ú·þûBÿ> þ‹ÝŸECÎÿW¨ÿÎþ/åì¡þÓ`þÏÂSàÿ’	Uÿµë¿ü?,äõ?H^.4ý+ôÿÿA Æ\ÿ‡»ìÿÿ?îÑPõþÿ?ðȆªÿQýÏV蟅mßâ ªþÑÿÿÇ ã¿l¨úGÿÿø?dCÕ?úÿÿ ÿ¿lÈùÿZþëþÔ²pæÿ@ÿOqPõ?®ÿãåüßkÿ7‚
+Mÿº¾ÿ#ÂÿÁ5þÕû ÿËBn»ˆ\¨ú¯îÿ@ý˜þɆªÿêý?°þÃúȆªÿêþäYÀø/ªþ«û?°þËü²¡ê¿ºÿë?,Àÿ!rþ¿ZÿuXÿÕÈÿ± ÿ‡l¨ú¯Ýÿý¿yÈ됼\ë_{ÊÖ?†û?tŒéY 
+C*÷ÿ…ÿ£>%ñÞ ´ðÃãŸïÿÙÿ«£qˆ?¤ø÷ó]×ÞÞ¶`þ¯‚:ø¿•FþŸ…³ùÿ$½0IÿÏæŸm;»oï®m_–ÿ;è?(¬ÿ³€þÿ²!éÿ°üëš?e¨þóøïƒ9®ÿ#ÿÏú?Ȇ®ÿ¡³ÿáóÿ_Çç°þÏÃùü?û(Šô?ïv«4ëOÿ›¾_Þ¼<ÿ“SÈÿpð¦øÏ6ëþú9ÊŸÿœ‹˜ÿ±€|lJô\ .?ǰûÿaÖç¢Îþ}èÿû}Êãÿ¸HÁ9ÊÇcÖX Ç¿  üúø^ÎÿÒqÿ9Èû¿ þ[.dý€—Ïÿ£¶Èÿ°€ü¯lÈú/( ¿ª}‘ÿÑþOPÿ-²þ
+ÀËÇk
+ê?X€ÿC6dý€_׿}¡ÿ`ú¿±€úoِõ_P NÐpð² ±û³hèùÿáàWõáÿò:"ÿÇÂSàÿ’	Yÿà×ÇÿRÿÆÂÿÃB^ÿƒäåBÔ¿ªîÿ@ý7äøêÿp—ë?¨ÿeAÃý!²þkû? àÿ
+Yÿcú?.žÿ¬QÐ?Ú¾Å- at .dý×ö ÿÃÆِõ_Ùÿaáÿbþِõ?ªÿãåø‚…ÿ›¬÷ʆžÿßÿqèÿeŽë¿xþçáÜÿþŸÒ ëTÿÇËù¿7þo,6ü
+QÿººÿÃÂÿÁ9þµû ÿËBn»ˆ\Èú¯íÿ@ý˜þɆ¬ÿÚý?°þÃúȆ¬ÿÚþôÿcã¿lÈú¯íÿÀú/ðȆ¬ÿÊþôÿáþÙÐóÿ•üVûàùŸø?dCÖíþèÿÃB^ÿƒäå2\ÿE–3†û?tŒ*ïÿª”ðpPÿçý?Ï1<þO÷Bü9 Å¿Ÿïºövð°Cçÿ'ûÿEÌÿy8›ÿç LDAÒÿ³÷gÛÎîÛ»k{Á—çÿ¼‡þy@ÿِôØÿýuÍŸR®‹õ?&ï“
+]ÿCgÿ¤ù¿óÐ?çùôÿ–F‘þçÝn•fýéñÓ÷ËÁ[—ç¬3Øÿ›…7ŶyX÷×ÏQ>ÿs.ÂÿÁæ²)Ñÿqý·üÃîÿYõÁEýén qÿç <þûœ£|ü7Vaý‡rük×£ÿyÿÔË…¬ÿÊõßùÐÿW6dý×®ÿ†ÿ“Ôˆ¬ÿÚõßèÿÂü²!ë¿vý7ú¿±€úoِõ?jý÷…þöÿàAc÷gÑÐóÿãןø¿u@þ…§Àÿ%²þk×ÃÿÃB^ÿƒäåBÔ¿ªìÿ0õß,ã?ªÿÃ]¬ÿôÿdAÃý!²þkû? àÿ
+Yÿcú?.žÿl:úçàCÛ·¸È…¬ÿÚþäXÀø/²þkû?àÿbþِõ_¹ÿ?úÿò€õ^ÙÐóÿ•ýxþgáÌÿþŸâ ëTÿÇËù¿7þo,6 
+QÿE›üþÈñ¯Ýÿù_rÛ%8@äBÖmÿêXÀôO6dý×îÿõÐÿC6dý×ö ÿÿeCÖmÿÖY€ÿC6dý×ö`ý‡¬÷ʆžÿ¯ìÿ@þø?dCÖåþèÿÍC^ÿƒäå2\ÿE-?ÎìÿÐ1Z­“þU¾
+ÀÿÁ@IüŸ÷ÿ,<Çàø
 îÿ!ïÿ
+öÿaÿ~¾ëÚÛÁ;À–Íÿsü]Äþï<œÏÿÂd@$ý?{¶íì¾½»¶|Yþ/ëß{蟬ÿɆ¤ÿÃþï¯kþ”rý[cñüÏöÿ•
+]ÿCgÿ¤ù¿óÐ?gó—Àý@EúŸw»Ušõ§ÇÿMß/o^žÿ±Î ÿÇ›â?Û<¬ûëç(Ÿÿ9‡ú/0ÿ“M‰þë¿åçvÿϪ.j•óÿ鏸ÿsPÿÇý?
+ÎQ>þ«Èñ¯VÿŽõ_¨ÿ`!ïÿ‚úo¹õ_­þ;ë¿‘ÿaýeCÖµúïÇñõ_, þ[6dýW«ÿÇúoô`ÁBù¢!ë¿Zýw8Ö£þ“Ôˆ¬ÿQë¿/ô,üŸ,hìþ,zþ¿Výw8Ö#ÿÇÂSàÿ’	YÿÕê¿ú7þòú$/¢þ‹ŠÁ	þ“ë¿àÿ¨9þ£ú?ÜÅúöâAÃý!²þkû? àÿ
+Yÿcú?.žÿl:úçàCÛ·¸È…¬ÿÚþäXÀø/²þkû?àÿbþِõ_­ÿÿ£ÿþoÐï[6ôüeÿžÿY8ó ÿ§8ÈúÕÿñrþÿ›‹ ¢!ê_W÷Dø?8 Ç¿vÿäYÈm—à ‘Yÿµý¨ÿaÓ?ِõ_»ÿÖX@ÿِõ_Ûÿþ,`ü—
 YÿµýXÿeþِõ_Ûÿõàÿ
-=ÿ_¹ÿò,Àÿ!²þk÷ÿ@ÿòú$/—áú·„Žóœîÿ£”…ÿƒ…’ø?ïÿYxŽañºÿ‡¼ÿSÌýŸÿúâß/ö];¼ìÐùð1ý3æýÿbÄøÏÂÙüߤ&¢ éÿÙû³kgwííµ½à‡æÿú7:Ïÿ}€ÿÔˆ¤ÿÃþï¯kþ”²üžÿYc°þÏô/ºþ‡ÎþçÿéÁ/gü,œÏÿ¸ˆ¢Hÿ‹n¿N³þôø¿íûÕà­ÀËó?ÖiäÿXxSügÛ‡Mýåó?çàÿæùÙ”èÿ¸þ[~Žòõ­"òÿ,”Çÿqÿ‚s”ÿÆÄŸrü«ÕìÿÌHÞÿõßr!ë¿Zýw8Ö#ÿËò¿²!ë¿Zýw@ÿFPÿ-²þ«Õ‡cý7ê¿X°P¾hÈú¯VÿõߨÿÔˆ¬ÿQë¿/ôŸn Ð?»?‹†žÿ¿þ;ø¨b8ÖGŒÿ,<… þ/™õ_­þ;ë¿áÿa!¯ÿAòr!ê_U÷ø?8 ÇTÿ‡»\ÿAý/îѐõ_Ûÿý³ ÿ‡lÈúÓÿqñügu€þYøÐö-nr!ë¿¶ÿù0þˆ¬ÿÊþôÿæþِõ_­ÿÿÑÿ¡áÿfýÿeCÏÿWòøxð蟅sÿúJƒ¬ÿQý/çÿÞ`ÿ_,_¢!ê_W÷Xø?8 Ç¿vÿäYÈm—à ‘Yÿµý¨ÿaÓ?ِõ_»ÿÖX@ÿِõ_Ûÿþ,`ü—
-YÿµýXÿa
 þِõ_Ùÿþ?<Àÿ!zþ¿Vÿsô ÿÏü²!ë¿vÿôÿf!¯ÿAòr¦ÿû$üùÍýº¿ÙmIª¿o?Ûúñ !ÿ
-žÿYÀx/›ÁãQÇŸs²ÂìÿeÀš¤£Gÿ
-âÿ¼ýoé9†Åÿôþ¯ùÄ¿>”ø÷‹}×·o =ôùÿdÿϱþÏÂÙó¿Ò
-õಠèÿÙú·kgwímw³œ¿zŽòù¿wÐ?˜ÿˆ¢ÿÙvUó§žÿµÅó?пlÈú<û'Íÿ-öÿãálþŸ‚€ù¿,Jô¿èöë4ëOÿÛ¾_uƒó@åùkGþ‡ƒ·Ä¶}ØôÎQ>ÿsû¿ð€ùŸl
-ô´Î1pýÇ8\Ô*çÿsIîÿÇÿqûŸ’s”ÿÆ(ÄŸjüÚ?Pú?¨ˆþß,äýŸÐÿA.Tý´ ôPðñ€|l¨ú/hÿ@éÿ "üß, ÿƒl¨ú/hÿ@Yÿ5Øÿ勆ªÿ‚ö”þéÐ?èÿ ªþÚ?Pôï-üŸ,hìþ.rþxû‚ÿË+ìÿÁÃSàÿ’	Uÿí(ý´…ÿ‡…¼þÉË…¦ÿ²bp‚ÿCçú/ø?êCÿ¸þw±þÐÿ—
-÷‡h¨ú¯îÿ€þYÀóžl¨úÕÿqñügÓ|úçàCÛ·¸È…ªÿêþäXÀø/ªþ«û?àÿbþÙPõ?®ÿãbÿoáÿfûȆœÿ¯íÿÀó?gþôÿUÿãú?^Îÿ½6ð³`±¨hhú×õýþ¨ñ¯Þÿù_rÛ%8@äBÕuÿêXÀôO6TýWïÿõÐÿC6TýW÷ ÿÿeCÕuÿÖY€ÿC6TýW÷`ý‡ø?dCÎÿ×ö ÿÇü²¡ê¿vÿôÿæ!¯ÿAòr¬ÿ	eçŸ#Ãü'ûÿ蘇ÿƒ‚ø?ïÿYzŽañ?½ÿë`±ÿ”ø÷‹}×·ï [>ÿwQaþÏæÿ²¡èÿÙû³kgwííÕ½àËóÞCÿ<`ÿOÙPôØÿýŠæO)׿ÕÏÿ,@ÿ²!ëðìŸ4ÿ·èÿÍÃÙüý¿ÅQ¢ÿE·_§YzüßöýjøVàåùk-ò,¼%þ³íæpŽòùŸs
-õ_,`þ'›ý×	ç(^ÿ1éÈÿ³PÿÇý?JÎQ>þ›t þPã_¹þ[+Ô°÷Aý·\¨ú¯]ÿm‘ÿaùÙPõ_¹þ[+Ô±€úoÙPõ_»þý¿y°P¾h¨ú¯]ÿíPÿÉê¿eCÕÿ¸õßú÷þO4v
-9ÿ_¹þ;"ÿÇÂSàÿ’	Uÿµë¿ü?,äõ?H^.4ý«êþ\ÿÿG}¨ñ×ÿá°ÿó7BÃý!ªþ«û? ð¼'ªþGõ\<ÿY­ >´}‹[€\¨ú¯îÿ@þ‡Œÿ²¡ê¿ºÿþ/àÿ
-Uÿµûÿ;ø¿Y@ÿِóÿµýxþgáÌÿþŸâ ê\ÿÇËù¿×Øÿ‡‹
- ECÓ¿®ïÿˆðp@õþÈÿ²Û.Á"ªþ«û?Pÿ没ê¿zÿ¬ÿ°€þ²¡ê¿ºÿýÿXÀø/ªþ«û?°þËü²¡ê¿ºÿë?,Àÿ!rþ¿¶ÿù?àÿ
-Uÿµû ÿ7yý’—Ë`ýO);ÿæÿPÖµIú×1ÿñÞÿ³ôÃâzÿ×!çÿúPâß/ö];¾ìÐù–¿¶6ïÿ—îÿ98Ÿÿ…õ YPôÿìýÙµ³»ööê^ðCóýkŸçÿúçÏû²¡èÿ°ÿûÍŸRžÿ·ÚÃÿËöÿ•
-Yÿƒgÿ…ó¥óüßäÿY8›ÿ›î¢(Ñÿ¢Û¯Ó¬?=þoû~5|+ðòüµýYxKügÛ‡M?àåó?ç°ÿ3˜ÿɦ@ÿÇõ_Â9®ÿ$ÕµÊùÿô?Üÿ9(Žÿãþ%ç(ÿÑˆ?ÔøW¯ÿFþ—…¼ÿê¿åBÕíúoìÿÄÖdCÕõúoÔ°€úoÙPõ_½þõŸ,X(_4TýW¯ÿFÿ_Pÿ-ªþÇ­ÿ¾Ð¿w¨ÿbAc÷gѐóÿ꿳ÿK9{¨ÿT˜ÿ³ðø¿dBÕíúoÿyý’—Mÿ
-ýÿ¨ñ×ÿá^æÑÿ‡	
-÷‡h¨úGÿÿø?dCÕÿ¨þ‹ç?«ôχ¶oqUÿèÿÿc€ñ_6Tý£ÿÿü²¡êýÿÐÿ_6äü-ÿ‡õGÿê?Y8ó ÿ§8¨ú×ÿñrþïµ…ÿ›Á‹†¦]¿ÿ‡‚ÿƒjü«÷ÿ@þ—…Üv	¹Põ_Ýÿú0ý“
-UÿÕû`ý‡ôÿ
-UÿÕýÈÿ²€ñ_6TýW÷`ý—ø?dCÕuÿÖX€ÿC6äüµþ¹ÿ¿Wù?àÿ
-UÿÕû ÿ7yý’—Ë`ýkOÙúçÀpÿ‡Ž1=¤aHåþ¿ðÔ§$þÏ€žcxüóý?ûuLCâÏ )þýbßµóÁ[ÀÌÿUP9þ.FäÿY8›ÿOÒ“QôÿlþÙµ³»ööÚfðeù¿Cý‡XÿgýÿeCÒÿaø×5ÊPýçñßs\ÿGþŸô
-]ÿCgÿÃçÿ¿ŽÿÎaýŸ‡óù÷QéÑí×iÖŸÿ·}¿¼xyþÇ:mÿáàMñŸm6ýõs”?ÿ9ç1ÿcùÙ”èÿ¸ \~Ža÷ÿ¬úà¢Îþ}èÿû}Êãÿ¸HÁ9ÊÇcÖX Ç¿  üúø^Îÿ´Gÿ_òþ/¨ÿ–Yÿàåóÿ¨5ò?, ÿ+²þ
-À¯ê__ät€ÿ“Ôˆ¬ÿ‚ðòñßZ…úàÿ
-Yÿà×õo_è?ƒþo, þ[6dý€ôüŸ,hìþ,zþxøUý_ø¿¼öÈÿ±ðø¿dBÖAøõñ߿ԿÑðÿ°×ÿ y¹õ¯ªû?PÿÍ9þ£ú?Ü¥ÿõ¿,h¸?DCÖmÿôÏü²!ëLÿÇÅóŸÕúgáCÛ·¸È…¬ÿÚþäXÀø/²þ+û?4ü_,Àÿ!²þGõ¼ÿC0ð³€õ^ÙÐóÿãû?ý¿ÌÑÿçÎýèÿ)
-²þGõ¼œÿ{£áÿfÁbÃÑõ¯«û?üã_»ÿò¿,ä¶Kp€È…¬ÿÚþÔÿ°€éŸlÈú¯ÜÿÃcý‡ôÿ
-YÿµýèÿÇÆِõ_»ÿÖY€ÿC6dý×ö`ý‡ø?dCÏÿWòXuìÿçàÿ
-Yÿµû ÿyý’—ËpýY>ÎîÿÐ1ª¼ÿkšDø?8(‰ÿóþŸ…çÿ§û¿ŽJ#þâß/ö];¼ìÐùÿÉþóÎæÿù “QôÿìýÙµ³»ööÚ^ðåù?ï¡Ðÿ_6$ýö]ó§”ëßbý	äûdC×ÿÐÙ?iþïôÏÂyþý¿¥Q¤ÿE·_§YzüßöýjðVàåùëöÿfáMñŸm6ýõs”Ïÿœóð°€ùŸlJô\ÿ-?ǰûV}pQgÿ‡VÑàþÏAyü÷ÿ(8GùøoLÀúäø×®ÿFÿòþ/¨ÿ–Yÿµë¿‘ÿaýeCÖíúoø?Y@ý·lÈú¯]ÿþ/,Àÿ!²þk÷ÿGÿ7Pÿ-²þG­ÿ¾ÐÀþ<hìþ,zþüúïÿ·öÈÿ±ðø¿dBÖíúoøXÈ됼\ˆúWµýõß,ã?ªÿÃ]¬ÿ8ôÿdAÃý!²þ+û?Ðÿ—ø?dCÖÿ˜þ‹ç?«=ôχ¶oqYÿµýÈÿ°€ñ_6dý×öÀÿÅü²!ë¿rÿôÿåë½²¡çÿëú?ÿçáÌÿþŸâ ëTÿÇËù¿7
-þo,6 
-QÿE›PüAÁÿÁ9þµû ÿËBn»ˆ\Èú¯íÿ@ý˜þɆ¬ÿÚý?°þÃúȆ¬ÿÚþôÿcã¿lÈú¯íÿÀú/ðȆ¬ÿÚþ¬ÿ°€õ^ÙÐóÿ•ýÈÿ± ÿ‡lÈú¯ÝÿýXÈ됼\†ë¿¨åǃý:F«uÒš`ÿ7Jâÿ¼ÿgá9Çÿpÿyÿ§¨°ÿ¤ø÷‹}×Îï [6ÿÏñwû¿óp>ÿw
-“YôÿìýÙµ³»ööÚ^ðeù¿¬ï¡°þ'’þû¿¿®ùSÊõoÁó?ØÿW6týý“æÿÎAÿ,œÍÿÓÇŽù¿,Šô¿èöë4ëOÿÛ¾_
-Þ
-¼<ÿcBþ…7Ŷ}Øô×ÏQ>ÿsõ_<`þ'›ý×ËÏ1ìþŸU\Ô*çÿUDþŸ…òø?îÿQpŽòñߘ€ø³@޵úïp¬ÿBýyÿÔË…¬ÿjõßáPÿ
-ÿèÿ+²þ«Õ?Žÿ¨ÿbõß²!ë¿Zýw8Ö£ÿÊ
-YÿÕê¿Ã±þõŸ, þ[6dýZÿ}¡ÿ áÿdAc÷gÑÐóÿµê¿þoí‘ÿcá)ðÉ„¬ÿjõßáXÿ
-ÿyý’—QÿEÅàÿG®ÿ‚ÿ£>äøêÿpë?Øÿ‰
-÷‡hÈú¯ìÿPÐ?ðȆ¬ÿ1ýÏV{蟅mßâ ²þkû?ÿaã¿lÈú¯íÿ€ÿ‹ø?dCÖµþÿþø¿Y@¿oÙÐóÿuýÈÿópæÿ@ÿOqõ?ªÿãåüßÿ7
- at ECÔ¿®ÞÿCÁÿÁ9þµû ÿËBn»ˆ\Èú¯íÿ@ý˜þɆ¬ÿÚý?°þÃúȆ¬ÿÚþôÿcã¿lÈú¯íÿÀú/ðȆ¬ÿÚþ¬ÿ° ÿ‡lèùÿÊþäÿX€ÿC6dý×îÿþ?,äõ?H^.ÃôŸ„?¿YÏnvÛ_’èïÛÏÃv~<BÈÿyƒü?ØÿK6ƒÇÿHØøë‘¬ðaþ/£²ïÒQùpø¿(ˆÿóö¿¥çÿ§û¿ýŸX Ä¿_ì»v>|è¡ÏÿÁGå£ÏûFÿgÏÿ“ôÂ|@ý?[ÿví쮽ín–óWÏQ>ÿ÷õ<`ÿÙPô?Ûî¯jþ”¡ú?ŒÿAaÿ/FÐÿE6dýžýSÖÿœ
-¨ÿfá|þŸÀý@%ú_tûušõ§Çÿm߯ºÁy òüµÖ!ÿÃÁ[â?Û>lúç(þs6ÂÿÁò=²)ÐÿÑþA8ǰûR½.êüü§•FþŸ…âø?nÿSrŽòñß…ø³@AûRÿÿyÿ'ôUÿí(ý”Eþ‡äeCÕAûRÿÔó€þ²¡ê¿ ýÅÿî Ð?ðȆªÿ‚ö”þÚ¡þƒô
-Uÿí(ú÷þO4v
-9ÿ?¼ý¥ÿƒŠÈÿ±ðø¿dBÕAûJÿmáÿa!¯ÿAòr¡é_Õ÷ þ›jüÇõ¸—ù_Qÿ†ûC4TýW÷@ÿ,Àÿ!ªþGõ\<ÿÙôo蟃mßâ ªþkû?ò?,`ü—
-UÿÕýð± ÿ‡l¨ú×ÿq±ÿ‡wð³€õ^ِó
 ÿüѝ7þ<ø?ðüϹÿý?¥AÕÿ¸þ—ó¯-üß,Xl *šþu}ÿG€ÿƒjü+÷ÿPèÿÅCn»ˆ\¨ú¯îÿ@ý˜þɆªÿêý?°þÃúȆªÿêý?ÐÿŒÿ²¡ê¿ºÿë¿,Àÿ!ªþ«û?°þÃü²!çÿ+ø?û¿éƒÿÏÿLÀÿ!ªþ«÷ÿ@ÿòú$/—ëúßlç¤]~e˜ÿãqÿߥ£L~þ‡ÿ£>ãŸÿQÖôå„añ?½ÿ§kA!þÅ?Má‡øÇx%þ&Û¾•±9þénÆóÓè¿î%ˆQü
-á¤øÄŸƒÒøSîɤø{ÄŸƒ¢ø§‡¾6}\Cö|=%ؽòü§ÝËç?£4ü_,äÞ,–}“æÜvꬱïµ^Þß7êøßŸ¶ûny»I\nún¿êÚÏÝá{R˜\x¿Úf`¾BN~È6ï|üK¤”þSzÿ·„sîÿ÷Jã¯]ù9(ñÿY(Šÿº[/7Ÿ¶¥ç¸2þ§¹¾~1þë 0þ³ðþ/‡!ºùs·þÛ¶oWh2:ÄhœÍÝOøÓ¾ëŽ_o´UqÌäü€Ÿï»ùã
-S39;à_gýòóÓH?Bk”;9à?6íé!zê7êä€Ë}ÿõù:{“ÿo¿ì»íìîô ÓŸð§åªû¯ö¶»?`¦«ÎNñçv·ûõ—H¸Éԝ¾ÉÝl7'?¡i¦Ö‡ÓòÿÖ~\ýz„‹güåO½ùy“.»tÌ~ëMþqû°™uç¿çÙ]µO¿lœ6áì€ÿîf«v¹~:…žºxö[üõçÍþxÈãÏqÁëÃ'ù­/HÀJñøO8iþ§1þsPÂô‡øsP¬B˜4ÿÇóEñŸ/Ó‡•¦&…縖ÿ»ôë4[ÁüŸìœhŠïÿ„ éþñŸ…ÒøSîɤùŸBü9(ÿU³÷opuü¿Øÿ1}õŸ,<…ààÿþ”Àt@¥úŸÎA¹ÿkÜÿY(ÿ”pRü‘ÿc¡xþO0€‘æÿð²P )þð²P¤œÜÿY($œƒôü            xÿ§ØF À 
\ No newline at end of file
+=ÿ_ÙÿüðȆ¬ÿÊý?Ðÿ›‡¼þÉËe˜þ÷Iø·7«ÙÍvóKý¾ý<lçÇ#„üŸwÈÿ³€ý¿d3xü„¿É
+æÿÒ1*û.£ƒÿ‹ƒ‚ø?oÿ[zŽáñºÿëàÐÿ‰Jüûù®ko‡o =ôù?ø¨|ôyÿÏèàÿcáìù’^˜ˆ‚¢ÿgëß¶Ý·wÝÍâöÕs”Ïÿ½GýØÿC6ýÏ6»«š?e¨þãPØÿ‹ô‘
+Yÿƒgÿ”õ?çê¿Y8Ÿÿ'p?E‰þçÝn•fýéñÓ÷Ënp¨<ÿc­·Èÿpð–øÏ6ë~À9ÊŸÿœÓð°€|l
+ô´Î1ìþŸU\ÔùùO+‹ü?ÅñÜþ§äåãñgÿ‚ö¤þþ/òþOèÿ ªþÚ?Pú?(üÈÿʆªÿ‚ö¤þ¨ÿæýdCÕAûŠÿÛxø¿X€ÿC6Tý´ ôÐõ, ÿƒl¨ú/hÿ@ѿ𲠱û»hÈùÿáíHý4ò,<… þ/™Põ_ÐþÒÿA{øXÈ됼\húWõý¨ÿfÿqýîÒÿú4Ü¢¡ê¿ºÿúgþÙPõ?ªÿãâùÏjý³ð¡í[ÜäBÕmÿ‡Cþ‡Œÿ²¡ê¿ºÿþ/àÿ
+Uÿãú?.öÿðþo°Þ+rþ¿‚ÿ#:£µ·GÿžÿY8÷ ÿ§4¨ú×ÿñrþ﵇ÿ›‹
+ at ECÓ¿®ïÿððp@õþÈÿ²Û.Á"ªþ«û?Pÿ没ê¿zÿ¬ÿ°€þ²¡ê¿ºÿýÿXÀø/ªþ«û?°þËü²¡ê¿ºÿë?,Àÿ!rþ¿‚ÿã°ÿ›>ú?ðüÏü²¡ê¿zÿôÿa!¯ÿAòr¹®ÿõæ–´ëϯó<îÿ£â»t”ÉÏÿðÔg`üóÊš¾œ0,þ§÷ÿ4DÄŸƒ¢ø§i@ œãÿ¯ÄßêâøºÑÚ¥ù¿ùiô÷Ä¿(þ†pJü­Cü9(?åžLŠDü9(ŠzèkÓÇ5dÏ×Sr€Ý+ÏÚ½|þ3ÊÂÿÅBéÍ|Ñ7iÎm§ÎûþðW«Å~ߨãï?mvÝânþ¸X÷ÝnÙµŸ»Ã¿1)táýr“}€ù
+9ù&›¼[ðñ/‘Rú_LéýßÎAºÿ{Üÿ9(¿våç ÄßhŒÿ,ÅÕ­ëO›Òs\ÿuŠ÷‹ñ_ƒñŸ…÷9ÑÍŸ»Õß6}»üC“Ñ!Fã|hîÿxrÀŸv]wüz£­ŠÓ`&çü¼ïnhl˜šÉÙÿ:럟¾AúÚX£ÜÉÿ±nOÑSï¼Q'|Xìú¯ÏßàxÐÙ›ü»Eß}lg÷§~‡?-–ݵwÝþx€™N¬:;ÅŸÛíö×"á&Swú&ÿu½YŸ|‡¦™ZNÈ_ü[ûqùë.žð—?ýõæçuºìÒ1ø­7ùÇÍÃz֝ÿœgüuÙ~<ý²qÚ„³þ»›-ÛÅêézêâÙOñן׻ã!ßǯŸä·¾ +Åã?á¤ùŸÅøÏAiü	Ó?ZüâÏA±þ		`ÒüÏ,Åÿv‘>¬45)<ǵüߥÿ[Ç€þ?,hdçDS|ÿ'$ I÷Œÿ,”ÆŸrO&ÍÿâÏAiü¯š½ƒ«ãÿÅþÚyÔ²ð‚ƒÿûSÓQ”êB8åþïpÿg¡4þSÂ9HñGþ…âù?Á F™ÿø?Y(Ž?a€ôüÿ'Åñ'LÊIñÇýŸ…ÒøGÂ9Hã¿Fü           à-ü¶Õ§« À 
\ No newline at end of file

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t.tar.gz.output	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,57 +1,57 @@
-System(0KB HP=0*0kB  )
-  Socket#0
-    L3Cache(4096KB)
-        L2Cache(1024KB)
-          L1Cache(16KB)
-          Core#0
-            P#0
-            P#8
-        L2Cache(1024KB)
-          L1Cache(16KB)
-          Core#1
-            P#4
-            P#12
-  Socket#1
-    L3Cache(4096KB)
-        L2Cache(1024KB)
-          L1Cache(16KB)
-          Core#0
-            P#1
-            P#9
-        L2Cache(1024KB)
-          L1Cache(16KB)
-          Core#1
-            P#5
-            P#13
-  Socket#2
-    L3Cache(4096KB)
-        L2Cache(1024KB)
-          L1Cache(16KB)
-          Core#0
-            P#2
-            P#10
-        L2Cache(1024KB)
-          L1Cache(16KB)
-          Core#1
-            P#6
-            P#14
-  Socket#3
-    L3Cache(4096KB)
-        L2Cache(1024KB)
-          L1Cache(16KB)
-          Core#0
-            P#3
-            P#11
-        L2Cache(1024KB)
-          L1Cache(16KB)
-          Core#1
-            P#7
-            P#15
-depth 0:	1 System (type #0)
+Machine (phys=0)
+  Socket #0 (phys=0)
+    L3Cache #0 (4096KB)
+      L2Cache #0 (1024KB)
+        L1Cache #0 (16KB)
+          Core #0 (phys=0)
+            PU #0 (phys=0)
+            PU #1 (phys=8)
+      L2Cache #1 (1024KB)
+        L1Cache #1 (16KB)
+          Core #1 (phys=1)
+            PU #2 (phys=4)
+            PU #3 (phys=12)
+  Socket #1 (phys=1)
+    L3Cache #1 (4096KB)
+      L2Cache #2 (1024KB)
+        L1Cache #2 (16KB)
+          Core #2 (phys=0)
+            PU #4 (phys=1)
+            PU #5 (phys=9)
+      L2Cache #3 (1024KB)
+        L1Cache #3 (16KB)
+          Core #3 (phys=1)
+            PU #6 (phys=5)
+            PU #7 (phys=13)
+  Socket #2 (phys=2)
+    L3Cache #2 (4096KB)
+      L2Cache #4 (1024KB)
+        L1Cache #4 (16KB)
+          Core #4 (phys=0)
+            PU #8 (phys=2)
+            PU #9 (phys=10)
+      L2Cache #5 (1024KB)
+        L1Cache #5 (16KB)
+          Core #5 (phys=1)
+            PU #10 (phys=6)
+            PU #11 (phys=14)
+  Socket #3 (phys=3)
+    L3Cache #3 (4096KB)
+      L2Cache #6 (1024KB)
+        L1Cache #6 (16KB)
+          Core #6 (phys=0)
+            PU #12 (phys=3)
+            PU #13 (phys=11)
+      L2Cache #7 (1024KB)
+        L1Cache #7 (16KB)
+          Core #7 (phys=1)
+            PU #14 (phys=7)
+            PU #15 (phys=15)
+depth 0:	1 Machine (type #1)
  depth 1:	4 Sockets (type #3)
   depth 2:	4 Caches (type #4)
    depth 3:	8 Caches (type #4)
     depth 4:	8 Caches (type #4)
      depth 5:	8 Cores (type #5)
-      depth 6:	16 Procs (type #6)
+      depth 6:	16 PUs (type #6)
 Topology not from this system

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t.xml.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t.xml.tar.gz.output	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t.xml.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,86 +1,86 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE root SYSTEM "hwloc.dtd">
-<root>
-  <object type="System" os_index="0" cpuset="0000ffff" dmi_board_vendor="" dmi_board_name="" memory_kB="0" huge_page_free="0" huge_page_size_kB="0">
-    <object type="Socket" os_index="0" cpuset="00001111">
-      <object type="Cache" os_index="-1" cpuset="00001111" memory_kB="4096" depth="3">
-        <object type="Cache" os_index="-1" cpuset="00000101" memory_kB="1024" depth="2">
-          <object type="Cache" os_index="-1" cpuset="00000101" memory_kB="16" depth="1">
-            <object type="Core" os_index="0" cpuset="00000101">
-              <object type="Proc" os_index="0" cpuset="00000001"/>
-              <object type="Proc" os_index="8" cpuset="00000100"/>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+  <object type="Machine" os_level="-1" os_index="0" cpuset="0x0000ffff" complete_cpuset="0x0000ffff" online_cpuset="0x0000ffff" allowed_cpuset="0x0000ffff">
+    <object type="Socket" os_level="-1" os_index="0" cpuset="0x00001111" complete_cpuset="0x00001111" online_cpuset="0x00001111" allowed_cpuset="0x00001111">
+      <object type="Cache" os_level="-1" cpuset="0x00001111" complete_cpuset="0x00001111" online_cpuset="0x00001111" allowed_cpuset="0x00001111" cache_size="4194304" depth="3">
+        <object type="Cache" os_level="-1" cpuset="0x00000101" complete_cpuset="0x00000101" online_cpuset="0x00000101" allowed_cpuset="0x00000101" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000101" complete_cpuset="0x00000101" online_cpuset="0x00000101" allowed_cpuset="0x00000101" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="0" cpuset="0x00000101" complete_cpuset="0x00000101" online_cpuset="0x00000101" allowed_cpuset="0x00000101">
+              <object type="PU" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
+              <object type="PU" os_level="-1" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100"/>
             </object>
           </object>
         </object>
-        <object type="Cache" os_index="-1" cpuset="00001010" memory_kB="1024" depth="2">
-          <object type="Cache" os_index="-1" cpuset="00001010" memory_kB="16" depth="1">
-            <object type="Core" os_index="1" cpuset="00001010">
-              <object type="Proc" os_index="4" cpuset="00000010"/>
-              <object type="Proc" os_index="12" cpuset="00001000"/>
+        <object type="Cache" os_level="-1" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="1" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010">
+              <object type="PU" os_level="-1" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010"/>
+              <object type="PU" os_level="-1" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000"/>
             </object>
           </object>
         </object>
       </object>
     </object>
-    <object type="Socket" os_index="1" cpuset="00002222">
-      <object type="Cache" os_index="-1" cpuset="00002222" memory_kB="4096" depth="3">
-        <object type="Cache" os_index="-1" cpuset="00000202" memory_kB="1024" depth="2">
-          <object type="Cache" os_index="-1" cpuset="00000202" memory_kB="16" depth="1">
-            <object type="Core" os_index="0" cpuset="00000202">
-              <object type="Proc" os_index="1" cpuset="00000002"/>
-              <object type="Proc" os_index="9" cpuset="00000200"/>
+    <object type="Socket" os_level="-1" os_index="1" cpuset="0x00002222" complete_cpuset="0x00002222" online_cpuset="0x00002222" allowed_cpuset="0x00002222">
+      <object type="Cache" os_level="-1" cpuset="0x00002222" complete_cpuset="0x00002222" online_cpuset="0x00002222" allowed_cpuset="0x00002222" cache_size="4194304" depth="3">
+        <object type="Cache" os_level="-1" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="0" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202">
+              <object type="PU" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002"/>
+              <object type="PU" os_level="-1" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200"/>
             </object>
           </object>
         </object>
-        <object type="Cache" os_index="-1" cpuset="00002020" memory_kB="1024" depth="2">
-          <object type="Cache" os_index="-1" cpuset="00002020" memory_kB="16" depth="1">
-            <object type="Core" os_index="1" cpuset="00002020">
-              <object type="Proc" os_index="5" cpuset="00000020"/>
-              <object type="Proc" os_index="13" cpuset="00002000"/>
+        <object type="Cache" os_level="-1" cpuset="0x00002020" complete_cpuset="0x00002020" online_cpuset="0x00002020" allowed_cpuset="0x00002020" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00002020" complete_cpuset="0x00002020" online_cpuset="0x00002020" allowed_cpuset="0x00002020" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="1" cpuset="0x00002020" complete_cpuset="0x00002020" online_cpuset="0x00002020" allowed_cpuset="0x00002020">
+              <object type="PU" os_level="-1" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020"/>
+              <object type="PU" os_level="-1" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000"/>
             </object>
           </object>
         </object>
       </object>
     </object>
-    <object type="Socket" os_index="2" cpuset="00004444">
-      <object type="Cache" os_index="-1" cpuset="00004444" memory_kB="4096" depth="3">
-        <object type="Cache" os_index="-1" cpuset="00000404" memory_kB="1024" depth="2">
-          <object type="Cache" os_index="-1" cpuset="00000404" memory_kB="16" depth="1">
-            <object type="Core" os_index="0" cpuset="00000404">
-              <object type="Proc" os_index="2" cpuset="00000004"/>
-              <object type="Proc" os_index="10" cpuset="00000400"/>
+    <object type="Socket" os_level="-1" os_index="2" cpuset="0x00004444" complete_cpuset="0x00004444" online_cpuset="0x00004444" allowed_cpuset="0x00004444">
+      <object type="Cache" os_level="-1" cpuset="0x00004444" complete_cpuset="0x00004444" online_cpuset="0x00004444" allowed_cpuset="0x00004444" cache_size="4194304" depth="3">
+        <object type="Cache" os_level="-1" cpuset="0x00000404" complete_cpuset="0x00000404" online_cpuset="0x00000404" allowed_cpuset="0x00000404" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000404" complete_cpuset="0x00000404" online_cpuset="0x00000404" allowed_cpuset="0x00000404" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="0" cpuset="0x00000404" complete_cpuset="0x00000404" online_cpuset="0x00000404" allowed_cpuset="0x00000404">
+              <object type="PU" os_level="-1" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004"/>
+              <object type="PU" os_level="-1" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400"/>
             </object>
           </object>
         </object>
-        <object type="Cache" os_index="-1" cpuset="00004040" memory_kB="1024" depth="2">
-          <object type="Cache" os_index="-1" cpuset="00004040" memory_kB="16" depth="1">
-            <object type="Core" os_index="1" cpuset="00004040">
-              <object type="Proc" os_index="6" cpuset="00000040"/>
-              <object type="Proc" os_index="14" cpuset="00004000"/>
+        <object type="Cache" os_level="-1" cpuset="0x00004040" complete_cpuset="0x00004040" online_cpuset="0x00004040" allowed_cpuset="0x00004040" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00004040" complete_cpuset="0x00004040" online_cpuset="0x00004040" allowed_cpuset="0x00004040" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="1" cpuset="0x00004040" complete_cpuset="0x00004040" online_cpuset="0x00004040" allowed_cpuset="0x00004040">
+              <object type="PU" os_level="-1" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040"/>
+              <object type="PU" os_level="-1" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000"/>
             </object>
           </object>
         </object>
       </object>
     </object>
-    <object type="Socket" os_index="3" cpuset="00008888">
-      <object type="Cache" os_index="-1" cpuset="00008888" memory_kB="4096" depth="3">
-        <object type="Cache" os_index="-1" cpuset="00000808" memory_kB="1024" depth="2">
-          <object type="Cache" os_index="-1" cpuset="00000808" memory_kB="16" depth="1">
-            <object type="Core" os_index="0" cpuset="00000808">
-              <object type="Proc" os_index="3" cpuset="00000008"/>
-              <object type="Proc" os_index="11" cpuset="00000800"/>
+    <object type="Socket" os_level="-1" os_index="3" cpuset="0x00008888" complete_cpuset="0x00008888" online_cpuset="0x00008888" allowed_cpuset="0x00008888">
+      <object type="Cache" os_level="-1" cpuset="0x00008888" complete_cpuset="0x00008888" online_cpuset="0x00008888" allowed_cpuset="0x00008888" cache_size="4194304" depth="3">
+        <object type="Cache" os_level="-1" cpuset="0x00000808" complete_cpuset="0x00000808" online_cpuset="0x00000808" allowed_cpuset="0x00000808" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000808" complete_cpuset="0x00000808" online_cpuset="0x00000808" allowed_cpuset="0x00000808" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="0" cpuset="0x00000808" complete_cpuset="0x00000808" online_cpuset="0x00000808" allowed_cpuset="0x00000808">
+              <object type="PU" os_level="-1" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008"/>
+              <object type="PU" os_level="-1" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800"/>
             </object>
           </object>
         </object>
-        <object type="Cache" os_index="-1" cpuset="00008080" memory_kB="1024" depth="2">
-          <object type="Cache" os_index="-1" cpuset="00008080" memory_kB="16" depth="1">
-            <object type="Core" os_index="1" cpuset="00008080">
-              <object type="Proc" os_index="7" cpuset="00000080"/>
-              <object type="Proc" os_index="15" cpuset="00008000"/>
+        <object type="Cache" os_level="-1" cpuset="0x00008080" complete_cpuset="0x00008080" online_cpuset="0x00008080" allowed_cpuset="0x00008080" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00008080" complete_cpuset="0x00008080" online_cpuset="0x00008080" allowed_cpuset="0x00008080" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="1" cpuset="0x00008080" complete_cpuset="0x00008080" online_cpuset="0x00008080" allowed_cpuset="0x00008080">
+              <object type="PU" os_level="-1" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080"/>
+              <object type="PU" os_level="-1" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000"/>
             </object>
           </object>
         </object>
       </object>
     </object>
   </object>
-</root>
+</topology>

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t_merge.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t_merge.tar.gz.output	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t_merge.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,34 +1,34 @@
-System(0KB HP=0*0kB  )
-  L3Cache(4096KB)
-    Core#0
-      P#0
-      P#8
-    Core#1
-      P#4
-      P#12
-  L3Cache(4096KB)
-    Core#0
-      P#1
-      P#9
-    Core#1
-      P#5
-      P#13
-  L3Cache(4096KB)
-    Core#0
-      P#2
-      P#10
-    Core#1
-      P#6
-      P#14
-  L3Cache(4096KB)
-    Core#0
-      P#3
-      P#11
-    Core#1
-      P#7
-      P#15
-depth 0:	1 System (type #0)
+Machine (phys=0)
+  L3Cache #0 (4096KB)
+    Core #0 (phys=0)
+      PU #0 (phys=0)
+      PU #1 (phys=8)
+    Core #1 (phys=1)
+      PU #2 (phys=4)
+      PU #3 (phys=12)
+  L3Cache #1 (4096KB)
+    Core #2 (phys=0)
+      PU #4 (phys=1)
+      PU #5 (phys=9)
+    Core #3 (phys=1)
+      PU #6 (phys=5)
+      PU #7 (phys=13)
+  L3Cache #2 (4096KB)
+    Core #4 (phys=0)
+      PU #8 (phys=2)
+      PU #9 (phys=10)
+    Core #5 (phys=1)
+      PU #10 (phys=6)
+      PU #11 (phys=14)
+  L3Cache #3 (4096KB)
+    Core #6 (phys=0)
+      PU #12 (phys=3)
+      PU #13 (phys=11)
+    Core #7 (phys=1)
+      PU #14 (phys=7)
+      PU #15 (phys=15)
+depth 0:	1 Machine (type #1)
  depth 1:	4 Caches (type #4)
   depth 2:	8 Cores (type #5)
-   depth 3:	16 Procs (type #6)
+   depth 3:	16 PUs (type #6)
 Topology not from this system

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t_ncaches.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t_ncaches.tar.gz.output	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16em64t-4s2c2t_ncaches.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,34 +1,34 @@
-System(0KB HP=0*0kB  )
-  Socket#0
-    Core#0
-      P#0
-      P#8
-    Core#1
-      P#4
-      P#12
-  Socket#1
-    Core#0
-      P#1
-      P#9
-    Core#1
-      P#5
-      P#13
-  Socket#2
-    Core#0
-      P#2
-      P#10
-    Core#1
-      P#6
-      P#14
-  Socket#3
-    Core#0
-      P#3
-      P#11
-    Core#1
-      P#7
-      P#15
-depth 0:	1 System (type #0)
+Machine (phys=0)
+  Socket #0 (phys=0)
+    Core #0 (phys=0)
+      PU #0 (phys=0)
+      PU #1 (phys=8)
+    Core #1 (phys=1)
+      PU #2 (phys=4)
+      PU #3 (phys=12)
+  Socket #1 (phys=1)
+    Core #2 (phys=0)
+      PU #4 (phys=1)
+      PU #5 (phys=9)
+    Core #3 (phys=1)
+      PU #6 (phys=5)
+      PU #7 (phys=13)
+  Socket #2 (phys=2)
+    Core #4 (phys=0)
+      PU #8 (phys=2)
+      PU #9 (phys=10)
+    Core #5 (phys=1)
+      PU #10 (phys=6)
+      PU #11 (phys=14)
+  Socket #3 (phys=3)
+    Core #6 (phys=0)
+      PU #12 (phys=3)
+      PU #13 (phys=11)
+    Core #7 (phys=1)
+      PU #14 (phys=7)
+      PU #15 (phys=15)
+depth 0:	1 Machine (type #1)
  depth 1:	4 Sockets (type #3)
   depth 2:	8 Cores (type #5)
-   depth 3:	16 Procs (type #6)
+   depth 3:	16 PUs (type #6)
 Topology not from this system

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16ia64-8n2s.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16ia64-8n2s.tar.gz.output	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/16ia64-8n2s.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,117 +1,117 @@
-System(46GB HP=0*262144kB  )
-  Misc0
-    NUMANode#0(5903MB)
-      Socket#0
-        L3Cache(9216KB)
-          L2Cache(256KB)
-            L1Cache(16KB)
-              Core#0
-                P#0
-      Socket#0
-        L3Cache(9216KB)
-          L2Cache(256KB)
-            L1Cache(16KB)
-              Core#0
-                P#1
-    NUMANode#1(5904MB)
-      Socket#512
-        L3Cache(9216KB)
-          L2Cache(256KB)
-            L1Cache(16KB)
-              Core#0
-                P#2
-      Socket#512
-        L3Cache(9216KB)
-          L2Cache(256KB)
-            L1Cache(16KB)
-              Core#0
-                P#3
-    NUMANode#2(5904MB)
-      Socket#1024
-        L3Cache(9216KB)
-          L2Cache(256KB)
-            L1Cache(16KB)
-              Core#0
-                P#4
-      Socket#1024
-        L3Cache(9216KB)
-          L2Cache(256KB)
-            L1Cache(16KB)
-              Core#0
-                P#5
-    NUMANode#3(5904MB)
-      Socket#1536
-        L3Cache(9216KB)
-          L2Cache(256KB)
-            L1Cache(16KB)
-              Core#0
-                P#6
-      Socket#1536
-        L3Cache(9216KB)
-          L2Cache(256KB)
-            L1Cache(16KB)
-              Core#0
-                P#7
-  Misc0
-    NUMANode#4(5904MB)
-      Socket#2048
-        L3Cache(9216KB)
-          L2Cache(256KB)
-            L1Cache(16KB)
-              Core#0
-                P#8
-      Socket#2048
-        L3Cache(9216KB)
-          L2Cache(256KB)
-            L1Cache(16KB)
-              Core#0
-                P#9
-    NUMANode#5(5903MB)
-      Socket#2560
-        L3Cache(9216KB)
-          L2Cache(256KB)
-            L1Cache(16KB)
-              Core#0
-                P#10
-      Socket#2560
-        L3Cache(9216KB)
-          L2Cache(256KB)
-            L1Cache(16KB)
-              Core#0
-                P#11
-    NUMANode#6(5904MB)
-      Socket#3072
-        L3Cache(9216KB)
-          L2Cache(256KB)
-            L1Cache(16KB)
-              Core#0
-                P#12
-      Socket#3072
-        L3Cache(9216KB)
-          L2Cache(256KB)
-            L1Cache(16KB)
-              Core#0
-                P#13
-    NUMANode#7(5885MB)
-      Socket#3584
-        L3Cache(9216KB)
-          L2Cache(256KB)
-            L1Cache(16KB)
-              Core#0
-                P#14
-      Socket#3584
-        L3Cache(9216KB)
-          L2Cache(256KB)
-            L1Cache(16KB)
-              Core#0
-                P#15
-depth 0:	1 System (type #0)
- depth 1:	2 Miscs (type #7)
+Machine (phys=0 total=48346688KB)
+  Group0 #0 (total=24182720KB)
+    NUMANode #0 (phys=0 local=6045632KB total=6045632KB)
+      Socket #0 (phys=0)
+        L3Cache #0 (9216KB)
+          L2Cache #0 (256KB)
+            L1Cache #0 (16KB)
+              Core #0 (phys=0)
+                PU #0 (phys=0)
+      Socket #1 (phys=0)
+        L3Cache #1 (9216KB)
+          L2Cache #1 (256KB)
+            L1Cache #1 (16KB)
+              Core #1 (phys=0)
+                PU #1 (phys=1)
+    NUMANode #1 (phys=1 local=6045696KB total=6045696KB)
+      Socket #2 (phys=512)
+        L3Cache #2 (9216KB)
+          L2Cache #2 (256KB)
+            L1Cache #2 (16KB)
+              Core #2 (phys=0)
+                PU #2 (phys=2)
+      Socket #3 (phys=512)
+        L3Cache #3 (9216KB)
+          L2Cache #3 (256KB)
+            L1Cache #3 (16KB)
+              Core #3 (phys=0)
+                PU #3 (phys=3)
+    NUMANode #2 (phys=2 local=6045696KB total=6045696KB)
+      Socket #4 (phys=1024)
+        L3Cache #4 (9216KB)
+          L2Cache #4 (256KB)
+            L1Cache #4 (16KB)
+              Core #4 (phys=0)
+                PU #4 (phys=4)
+      Socket #5 (phys=1024)
+        L3Cache #5 (9216KB)
+          L2Cache #5 (256KB)
+            L1Cache #5 (16KB)
+              Core #5 (phys=0)
+                PU #5 (phys=5)
+    NUMANode #3 (phys=3 local=6045696KB total=6045696KB)
+      Socket #6 (phys=1536)
+        L3Cache #6 (9216KB)
+          L2Cache #6 (256KB)
+            L1Cache #6 (16KB)
+              Core #6 (phys=0)
+                PU #6 (phys=6)
+      Socket #7 (phys=1536)
+        L3Cache #7 (9216KB)
+          L2Cache #7 (256KB)
+            L1Cache #7 (16KB)
+              Core #7 (phys=0)
+                PU #7 (phys=7)
+  Group0 #1 (total=24163968KB)
+    NUMANode #4 (phys=4 local=6045696KB total=6045696KB)
+      Socket #8 (phys=2048)
+        L3Cache #8 (9216KB)
+          L2Cache #8 (256KB)
+            L1Cache #8 (16KB)
+              Core #8 (phys=0)
+                PU #8 (phys=8)
+      Socket #9 (phys=2048)
+        L3Cache #9 (9216KB)
+          L2Cache #9 (256KB)
+            L1Cache #9 (16KB)
+              Core #9 (phys=0)
+                PU #9 (phys=9)
+    NUMANode #5 (phys=5 local=6045632KB total=6045632KB)
+      Socket #10 (phys=2560)
+        L3Cache #10 (9216KB)
+          L2Cache #10 (256KB)
+            L1Cache #10 (16KB)
+              Core #10 (phys=0)
+                PU #10 (phys=10)
+      Socket #11 (phys=2560)
+        L3Cache #11 (9216KB)
+          L2Cache #11 (256KB)
+            L1Cache #11 (16KB)
+              Core #11 (phys=0)
+                PU #11 (phys=11)
+    NUMANode #6 (phys=6 local=6045696KB total=6045696KB)
+      Socket #12 (phys=3072)
+        L3Cache #12 (9216KB)
+          L2Cache #12 (256KB)
+            L1Cache #12 (16KB)
+              Core #12 (phys=0)
+                PU #12 (phys=12)
+      Socket #13 (phys=3072)
+        L3Cache #13 (9216KB)
+          L2Cache #13 (256KB)
+            L1Cache #13 (16KB)
+              Core #13 (phys=0)
+                PU #13 (phys=13)
+    NUMANode #7 (phys=7 local=6026944KB total=6026944KB)
+      Socket #14 (phys=3584)
+        L3Cache #14 (9216KB)
+          L2Cache #14 (256KB)
+            L1Cache #14 (16KB)
+              Core #14 (phys=0)
+                PU #14 (phys=14)
+      Socket #15 (phys=3584)
+        L3Cache #15 (9216KB)
+          L2Cache #15 (256KB)
+            L1Cache #15 (16KB)
+              Core #15 (phys=0)
+                PU #15 (phys=15)
+depth 0:	1 Machine (type #1)
+ depth 1:	2 Groups (type #7)
   depth 2:	8 NUMANodes (type #2)
    depth 3:	16 Sockets (type #3)
     depth 4:	16 Caches (type #4)
      depth 5:	16 Caches (type #4)
       depth 6:	16 Caches (type #4)
        depth 7:	16 Cores (type #5)
-        depth 8:	16 Procs (type #6)
+        depth 8:	16 PUs (type #6)
 Topology not from this system

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/1alpha.tar.gz
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/1alpha.tar.gz	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/1alpha.tar.gz	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,7 @@
+‹ ¡Õ9K í×aOÜ6ÀqÞ6ŸÂÒÞ´£±ã$R_ mµneªtšª©òå|‘ËÝ’íõÓÏI¸ƒ®k¥BµõïŸàˆŸØ±ó8Î!m9?³·î²„¾¤qÜ}Ê4ûc©uÿ¹*[RF¡ÿIî^Ê8N¶D|§£Z•EÓÚZˆ­Ñéì´,ªOœçêæ>t¿EùŸ×³üÎÁ—ç_ÅJ’ÿû(ëùÏç‹¢šÌ¾ú5º'C¾?–©¢èFþµýó~õ‘|¤|çù÷9ðàÁ®Øë–AàÄt6veWõìuböûº[¶-fUWŸöUµ»(šUMØ×øTØRT‹éÈÕ¾öç½(ŒCš,h–M릢]Î]wþqÑÚê²òºï]ñª..lë\}ܼʪòæ…öþˆ¤_FI”ù2/˜Ô«ò¥xóÓ‡?ý~CY-6´ÅÔÕ9%Tz'ƒ¹=u¢)>8ñf´l]ÓÅŒÌT0?[6;Žǵk1*ÚÆG´¦öýP½#š¹ÍøÁ׫8ög§³Ã¯Žº±+©e‚sWW®‹Ê–ÅiåÆÂæy?¾Ô$&‘âá<2J†Ybu¢·/ì“Uœä©ŸªR‚n=Þê'¢Ì?Ma6ô¤ú)çÎ7é:‘Òw2Ž£ôQ0/m;™Õþ^¶uQ^­€#W_ø~ŸéXvADý
+hÄØµ.oݸ;5
+^Jñ"·ùYŸÎDÿ²-ԏïìrÛÿ=þ1rÝOÿå%®N¨Ûàe´yü­ï¢¬ïÿS7ý&ûìÿ¾µÿ+öÿû(‡nz<km¹+VŨ,ó[¡8ß|ìyíÜUHˆ4Ñi¦ºØþb2ñ7ä:&‰3ÙǺ§x¼Ö,JO¬ébGïìüV\ˆ°‹íåmq±~9­¥Ž¢¤‹½¨ìfT*“¦Ê\·{h«YõhW~Ç6ëíÖ£©É’µv“¢tCDûÝS‡›í.£~‹ÎLÔÏï¤òo¥¼µ£rm°rça9ËÏoLî2ÖÍ}ãfË,‹3£/c7{-ö´¨Ûåf]¢úqþ^­Ùü|3>ÜO?åWþu¶–%e̐‡C;Ÿß¦Lâ!·G¥mFL˜$éûÍå¥-¦W“—©1I<Ì浪‡èîZKÙǺqwÖ#2ÝÏï×çGoOªæÆ
+æ°?[T¹»5ùpcîÇÓùÍv³é´h_þ×J¤Žõ÷!æßeo÷ŽVíüëyÈíë©-}
+¯Ód"?¿aM¬b'ÍõóûÔÐç*vp¶¨ÎWíR•©~,ßúÿTYßÿ}Ú»¸Æ'÷ÿE«äÆþi±ÿßG龸û'?Ld¦SáwþHg"QÒø}>ÚïÛþ_1ÿµ9ò{Cw†ß¥ö/	“ÿ õ_üÃj¯?£}QµµˆSÏdZúª¨«ö
+eÿŠ8É|0Óáå±ÿIµ?›ÖqJsu,S?F%¿                                                                                               ÀD·ï[¡¤N¥–Y0j‹©RÅ&ÔqgÁ¼žå®i\#Œ
+ÓDõÍÛzQUEu*¢Õñ¨œåçnìûÛ¢P(”ÿ}ù#p¢„  
\ No newline at end of file

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/1alpha.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/1alpha.tar.gz.output	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/1alpha.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,5 @@
+Machine (phys=0 local=8299024KB total=8299024KB)
+  PU #0 (phys=0)
+depth 0:	1 Machine (type #1)
+ depth 1:	1 PU (type #6)
+Topology not from this system

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/256ia64-64n2s2c.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/256ia64-64n2s2c.tar.gz.output	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/256ia64-64n2s2c.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,733 +1,733 @@
-System(491GB HP=0*262144kB  )
-  Misc1
-    Misc0
-      NUMANode#0(7875MB)
-        Socket#0
-          Core#0
-            P#0
-          Core#1
-            P#1
-        Socket#3
-          Core#0
-            P#2
-          Core#1
-            P#3
-      NUMANode#1(7888MB)
-        Socket#512
-          Core#0
-            P#4
-          Core#1
-            P#5
-        Socket#515
-          Core#0
-            P#6
-          Core#1
-            P#7
-      NUMANode#2(7888MB)
-        Socket#1024
-          Core#0
-            P#8
-          Core#1
-            P#9
-        Socket#1027
-          Core#0
-            P#10
-          Core#1
-            P#11
-      NUMANode#3(7888MB)
-        Socket#1536
-          Core#0
-            P#12
-          Core#1
-            P#13
-        Socket#1539
-          Core#0
-            P#14
-          Core#1
-            P#15
-    Misc0
-      NUMANode#4(7888MB)
-        Socket#2048
-          Core#0
-            P#16
-          Core#1
-            P#17
-        Socket#2051
-          Core#0
-            P#18
-          Core#1
-            P#19
-      NUMANode#5(7888MB)
-        Socket#2560
-          Core#0
-            P#20
-          Core#1
-            P#21
-        Socket#2563
-          Core#0
-            P#22
-          Core#1
-            P#23
-      NUMANode#6(7887MB)
-        Socket#3072
-          Core#0
-            P#24
-          Core#1
-            P#25
-        Socket#3075
-          Core#0
-            P#26
-          Core#1
-            P#27
-      NUMANode#7(7888MB)
-        Socket#3584
-          Core#0
-            P#28
-          Core#1
-            P#29
-        Socket#3587
-          Core#0
-            P#30
-          Core#1
-            P#31
-    Misc0
-      NUMANode#8(7888MB)
-        Socket#4096
-          Core#0
-            P#32
-          Core#1
-            P#33
-        Socket#4099
-          Core#0
-            P#34
-          Core#1
-            P#35
-      NUMANode#9(7888MB)
-        Socket#4608
-          Core#0
-            P#36
-          Core#1
-            P#37
-        Socket#4611
-          Core#0
-            P#38
-          Core#1
-            P#39
-      NUMANode#10(7888MB)
-        Socket#5120
-          Core#0
-            P#40
-          Core#1
-            P#41
-        Socket#5123
-          Core#0
-            P#42
-          Core#1
-            P#43
-      NUMANode#11(7888MB)
-        Socket#5632
-          Core#0
-            P#44
-          Core#1
-            P#45
-        Socket#5635
-          Core#0
-            P#46
-          Core#1
-            P#47
-    Misc0
-      NUMANode#12(7888MB)
-        Socket#6144
-          Core#0
-            P#48
-          Core#1
-            P#49
-        Socket#6147
-          Core#0
-            P#50
-          Core#1
-            P#51
-      NUMANode#13(7888MB)
-        Socket#6656
-          Core#0
-            P#52
-          Core#1
-            P#53
-        Socket#6659
-          Core#0
-            P#54
-          Core#1
-            P#55
-      NUMANode#14(7887MB)
-        Socket#7168
-          Core#0
-            P#56
-          Core#1
-            P#57
-        Socket#7171
-          Core#0
-            P#58
-          Core#1
-            P#59
-      NUMANode#15(7888MB)
-        Socket#7680
-          Core#0
-            P#60
-          Core#1
-            P#61
-        Socket#7683
-          Core#0
-            P#62
-          Core#1
-            P#63
-  Misc1
-    Misc0
-      NUMANode#16(7888MB)
-        Socket#8192
-          Core#0
-            P#64
-          Core#1
-            P#65
-        Socket#8195
-          Core#0
-            P#66
-          Core#1
-            P#67
-      NUMANode#17(7888MB)
-        Socket#8704
-          Core#0
-            P#68
-          Core#1
-            P#69
-        Socket#8707
-          Core#0
-            P#70
-          Core#1
-            P#71
-      NUMANode#18(7888MB)
-        Socket#9216
-          Core#0
-            P#72
-          Core#1
-            P#73
-        Socket#9219
-          Core#0
-            P#74
-          Core#1
-            P#75
-      NUMANode#19(7888MB)
-        Socket#9728
-          Core#0
-            P#76
-          Core#1
-            P#77
-        Socket#9731
-          Core#0
-            P#78
-          Core#1
-            P#79
-    Misc0
-      NUMANode#20(7888MB)
-        Socket#10240
-          Core#0
-            P#80
-          Core#1
-            P#81
-        Socket#10243
-          Core#0
-            P#82
-          Core#1
-            P#83
-      NUMANode#21(7888MB)
-        Socket#10752
-          Core#0
-            P#84
-          Core#1
-            P#85
-        Socket#10755
-          Core#0
-            P#86
-          Core#1
-            P#87
-      NUMANode#22(7887MB)
-        Socket#11264
-          Core#0
-            P#88
-          Core#1
-            P#89
-        Socket#11267
-          Core#0
-            P#90
-          Core#1
-            P#91
-      NUMANode#23(7888MB)
-        Socket#11776
-          Core#0
-            P#92
-          Core#1
-            P#93
-        Socket#11779
-          Core#0
-            P#94
-          Core#1
-            P#95
-    Misc0
-      NUMANode#24(7888MB)
-        Socket#12288
-          Core#0
-            P#96
-          Core#1
-            P#97
-        Socket#12291
-          Core#0
-            P#98
-          Core#1
-            P#99
-      NUMANode#25(7888MB)
-        Socket#12800
-          Core#0
-            P#100
-          Core#1
-            P#101
-        Socket#12803
-          Core#0
-            P#102
-          Core#1
-            P#103
-      NUMANode#26(7888MB)
-        Socket#13312
-          Core#0
-            P#104
-          Core#1
-            P#105
-        Socket#13315
-          Core#0
-            P#106
-          Core#1
-            P#107
-      NUMANode#27(7888MB)
-        Socket#13824
-          Core#0
-            P#108
-          Core#1
-            P#109
-        Socket#13827
-          Core#0
-            P#110
-          Core#1
-            P#111
-    Misc0
-      NUMANode#28(7888MB)
-        Socket#14336
-          Core#0
-            P#112
-          Core#1
-            P#113
-        Socket#14339
-          Core#0
-            P#114
-          Core#1
-            P#115
-      NUMANode#29(7887MB)
-        Socket#14848
-          Core#0
-            P#116
-          Core#1
-            P#117
-        Socket#14851
-          Core#0
-            P#118
-          Core#1
-            P#119
-      NUMANode#30(7888MB)
-        Socket#15360
-          Core#0
-            P#120
-          Core#1
-            P#121
-        Socket#15363
-          Core#0
-            P#122
-          Core#1
-            P#123
-      NUMANode#31(7888MB)
-        Socket#15872
-          Core#0
-            P#124
-          Core#1
-            P#125
-        Socket#15875
-          Core#0
-            P#126
-          Core#1
-            P#127
-  Misc1
-    Misc0
-      NUMANode#32(7888MB)
-        Socket#16384
-          Core#0
-            P#128
-          Core#1
-            P#129
-        Socket#16387
-          Core#0
-            P#130
-          Core#1
-            P#131
-      NUMANode#33(7888MB)
-        Socket#16896
-          Core#0
-            P#132
-          Core#1
-            P#133
-        Socket#16899
-          Core#0
-            P#134
-          Core#1
-            P#135
-      NUMANode#34(7888MB)
-        Socket#17408
-          Core#0
-            P#136
-          Core#1
-            P#137
-        Socket#17411
-          Core#0
-            P#138
-          Core#1
-            P#139
-      NUMANode#35(7888MB)
-        Socket#17920
-          Core#0
-            P#140
-          Core#1
-            P#141
-        Socket#17923
-          Core#0
-            P#142
-          Core#1
-            P#143
-    Misc0
-      NUMANode#36(7888MB)
-        Socket#18432
-          Core#0
-            P#144
-          Core#1
-            P#145
-        Socket#18435
-          Core#0
-            P#146
-          Core#1
-            P#147
-      NUMANode#37(7887MB)
-        Socket#18944
-          Core#0
-            P#148
-          Core#1
-            P#149
-        Socket#18947
-          Core#0
-            P#150
-          Core#1
-            P#151
-      NUMANode#38(7888MB)
-        Socket#19456
-          Core#0
-            P#152
-          Core#1
-            P#153
-        Socket#19459
-          Core#0
-            P#154
-          Core#1
-            P#155
-      NUMANode#39(7888MB)
-        Socket#19968
-          Core#0
-            P#156
-          Core#1
-            P#157
-        Socket#19971
-          Core#0
-            P#158
-          Core#1
-            P#159
-    Misc0
-      NUMANode#40(7888MB)
-        Socket#20480
-          Core#0
-            P#160
-          Core#1
-            P#161
-        Socket#20483
-          Core#0
-            P#162
-          Core#1
-            P#163
-      NUMANode#41(7888MB)
-        Socket#20992
-          Core#0
-            P#164
-          Core#1
-            P#165
-        Socket#20995
-          Core#0
-            P#166
-          Core#1
-            P#167
-      NUMANode#42(7888MB)
-        Socket#21504
-          Core#0
-            P#168
-          Core#1
-            P#169
-        Socket#21507
-          Core#0
-            P#170
-          Core#1
-            P#171
-      NUMANode#43(7888MB)
-        Socket#22016
-          Core#0
-            P#172
-          Core#1
-            P#173
-        Socket#22019
-          Core#0
-            P#174
-          Core#1
-            P#175
-    Misc0
-      NUMANode#44(7888MB)
-        Socket#22528
-          Core#0
-            P#176
-          Core#1
-            P#177
-        Socket#22531
-          Core#0
-            P#178
-          Core#1
-            P#179
-      NUMANode#45(7887MB)
-        Socket#23040
-          Core#0
-            P#180
-          Core#1
-            P#181
-        Socket#23043
-          Core#0
-            P#182
-          Core#1
-            P#183
-      NUMANode#46(7888MB)
-        Socket#23552
-          Core#0
-            P#184
-          Core#1
-            P#185
-        Socket#23555
-          Core#0
-            P#186
-          Core#1
-            P#187
-      NUMANode#47(7888MB)
-        Socket#24064
-          Core#0
-            P#188
-          Core#1
-            P#189
-        Socket#24067
-          Core#0
-            P#190
-          Core#1
-            P#191
-  Misc1
-    Misc0
-      NUMANode#48(7888MB)
-        Socket#24576
-          Core#0
-            P#192
-          Core#1
-            P#193
-        Socket#24579
-          Core#0
-            P#194
-          Core#1
-            P#195
-      NUMANode#49(7888MB)
-        Socket#25088
-          Core#0
-            P#196
-          Core#1
-            P#197
-        Socket#25091
-          Core#0
-            P#198
-          Core#1
-            P#199
-      NUMANode#50(7888MB)
-        Socket#25600
-          Core#0
-            P#200
-          Core#1
-            P#201
-        Socket#25603
-          Core#0
-            P#202
-          Core#1
-            P#203
-      NUMANode#51(7888MB)
-        Socket#26112
-          Core#0
-            P#204
-          Core#1
-            P#205
-        Socket#26115
-          Core#0
-            P#206
-          Core#1
-            P#207
-    Misc0
-      NUMANode#52(7888MB)
-        Socket#26624
-          Core#0
-            P#208
-          Core#1
-            P#209
-        Socket#26627
-          Core#0
-            P#210
-          Core#1
-            P#211
-      NUMANode#53(7887MB)
-        Socket#27136
-          Core#0
-            P#212
-          Core#1
-            P#213
-        Socket#27139
-          Core#0
-            P#214
-          Core#1
-            P#215
-      NUMANode#54(7888MB)
-        Socket#27648
-          Core#0
-            P#216
-          Core#1
-            P#217
-        Socket#27651
-          Core#0
-            P#218
-          Core#1
-            P#219
-      NUMANode#55(7888MB)
-        Socket#28160
-          Core#0
-            P#220
-          Core#1
-            P#221
-        Socket#28163
-          Core#0
-            P#222
-          Core#1
-            P#223
-    Misc0
-      NUMANode#56(7888MB)
-        Socket#28672
-          Core#0
-            P#224
-          Core#1
-            P#225
-        Socket#28675
-          Core#0
-            P#226
-          Core#1
-            P#227
-      NUMANode#57(7888MB)
-        Socket#29184
-          Core#0
-            P#228
-          Core#1
-            P#229
-        Socket#29187
-          Core#0
-            P#230
-          Core#1
-            P#231
-      NUMANode#58(7888MB)
-        Socket#29696
-          Core#0
-            P#232
-          Core#1
-            P#233
-        Socket#29699
-          Core#0
-            P#234
-          Core#1
-            P#235
-      NUMANode#59(7888MB)
-        Socket#30208
-          Core#0
-            P#236
-          Core#1
-            P#237
-        Socket#30211
-          Core#0
-            P#238
-          Core#1
-            P#239
-    Misc0
-      NUMANode#60(7888MB)
-        Socket#30720
-          Core#0
-            P#240
-          Core#1
-            P#241
-        Socket#30723
-          Core#0
-            P#242
-          Core#1
-            P#243
-      NUMANode#61(7887MB)
-        Socket#31232
-          Core#0
-            P#244
-          Core#1
-            P#245
-        Socket#31235
-          Core#0
-            P#246
-          Core#1
-            P#247
-      NUMANode#62(7888MB)
-        Socket#31744
-          Core#0
-            P#248
-          Core#1
-            P#249
-        Socket#31747
-          Core#0
-            P#250
-          Core#1
-            P#251
-      NUMANode#63(7865MB)
-        Socket#32256
-          Core#0
-            P#252
-          Core#1
-            P#253
-        Socket#32259
-          Core#0
-            P#254
-          Core#1
-            P#255
-depth 0:	1 System (type #0)
- depth 1:	4 Miscs (type #7)
-  depth 2:	16 Miscs (type #7)
+Machine (phys=0 total=516912176KB)
+  Group1 #0 (total=129224048KB)
+    Group0 #0 (total=32296336KB)
+      NUMANode #0 (phys=0 local=8064400KB total=8064400KB)
+        Socket #0 (phys=0)
+          Core #0 (phys=0)
+            PU #0 (phys=0)
+          Core #1 (phys=1)
+            PU #1 (phys=1)
+        Socket #1 (phys=3)
+          Core #2 (phys=0)
+            PU #2 (phys=2)
+          Core #3 (phys=1)
+            PU #3 (phys=3)
+      NUMANode #1 (phys=1 local=8077312KB total=8077312KB)
+        Socket #2 (phys=512)
+          Core #4 (phys=0)
+            PU #4 (phys=4)
+          Core #5 (phys=1)
+            PU #5 (phys=5)
+        Socket #3 (phys=515)
+          Core #6 (phys=0)
+            PU #6 (phys=6)
+          Core #7 (phys=1)
+            PU #7 (phys=7)
+      NUMANode #2 (phys=2 local=8077312KB total=8077312KB)
+        Socket #4 (phys=1024)
+          Core #8 (phys=0)
+            PU #8 (phys=8)
+          Core #9 (phys=1)
+            PU #9 (phys=9)
+        Socket #5 (phys=1027)
+          Core #10 (phys=0)
+            PU #10 (phys=10)
+          Core #11 (phys=1)
+            PU #11 (phys=11)
+      NUMANode #3 (phys=3 local=8077312KB total=8077312KB)
+        Socket #6 (phys=1536)
+          Core #12 (phys=0)
+            PU #12 (phys=12)
+          Core #13 (phys=1)
+            PU #13 (phys=13)
+        Socket #7 (phys=1539)
+          Core #14 (phys=0)
+            PU #14 (phys=14)
+          Core #15 (phys=1)
+            PU #15 (phys=15)
+    Group0 #1 (total=32309232KB)
+      NUMANode #4 (phys=4 local=8077312KB total=8077312KB)
+        Socket #8 (phys=2048)
+          Core #16 (phys=0)
+            PU #16 (phys=16)
+          Core #17 (phys=1)
+            PU #17 (phys=17)
+        Socket #9 (phys=2051)
+          Core #18 (phys=0)
+            PU #18 (phys=18)
+          Core #19 (phys=1)
+            PU #19 (phys=19)
+      NUMANode #5 (phys=5 local=8077312KB total=8077312KB)
+        Socket #10 (phys=2560)
+          Core #20 (phys=0)
+            PU #20 (phys=20)
+          Core #21 (phys=1)
+            PU #21 (phys=21)
+        Socket #11 (phys=2563)
+          Core #22 (phys=0)
+            PU #22 (phys=22)
+          Core #23 (phys=1)
+            PU #23 (phys=23)
+      NUMANode #6 (phys=6 local=8077296KB total=8077296KB)
+        Socket #12 (phys=3072)
+          Core #24 (phys=0)
+            PU #24 (phys=24)
+          Core #25 (phys=1)
+            PU #25 (phys=25)
+        Socket #13 (phys=3075)
+          Core #26 (phys=0)
+            PU #26 (phys=26)
+          Core #27 (phys=1)
+            PU #27 (phys=27)
+      NUMANode #7 (phys=7 local=8077312KB total=8077312KB)
+        Socket #14 (phys=3584)
+          Core #28 (phys=0)
+            PU #28 (phys=28)
+          Core #29 (phys=1)
+            PU #29 (phys=29)
+        Socket #15 (phys=3587)
+          Core #30 (phys=0)
+            PU #30 (phys=30)
+          Core #31 (phys=1)
+            PU #31 (phys=31)
+    Group0 #2 (total=32309248KB)
+      NUMANode #8 (phys=8 local=8077312KB total=8077312KB)
+        Socket #16 (phys=4096)
+          Core #32 (phys=0)
+            PU #32 (phys=32)
+          Core #33 (phys=1)
+            PU #33 (phys=33)
+        Socket #17 (phys=4099)
+          Core #34 (phys=0)
+            PU #34 (phys=34)
+          Core #35 (phys=1)
+            PU #35 (phys=35)
+      NUMANode #9 (phys=9 local=8077312KB total=8077312KB)
+        Socket #18 (phys=4608)
+          Core #36 (phys=0)
+            PU #36 (phys=36)
+          Core #37 (phys=1)
+            PU #37 (phys=37)
+        Socket #19 (phys=4611)
+          Core #38 (phys=0)
+            PU #38 (phys=38)
+          Core #39 (phys=1)
+            PU #39 (phys=39)
+      NUMANode #10 (phys=10 local=8077312KB total=8077312KB)
+        Socket #20 (phys=5120)
+          Core #40 (phys=0)
+            PU #40 (phys=40)
+          Core #41 (phys=1)
+            PU #41 (phys=41)
+        Socket #21 (phys=5123)
+          Core #42 (phys=0)
+            PU #42 (phys=42)
+          Core #43 (phys=1)
+            PU #43 (phys=43)
+      NUMANode #11 (phys=11 local=8077312KB total=8077312KB)
+        Socket #22 (phys=5632)
+          Core #44 (phys=0)
+            PU #44 (phys=44)
+          Core #45 (phys=1)
+            PU #45 (phys=45)
+        Socket #23 (phys=5635)
+          Core #46 (phys=0)
+            PU #46 (phys=46)
+          Core #47 (phys=1)
+            PU #47 (phys=47)
+    Group0 #3 (total=32309232KB)
+      NUMANode #12 (phys=12 local=8077312KB total=8077312KB)
+        Socket #24 (phys=6144)
+          Core #48 (phys=0)
+            PU #48 (phys=48)
+          Core #49 (phys=1)
+            PU #49 (phys=49)
+        Socket #25 (phys=6147)
+          Core #50 (phys=0)
+            PU #50 (phys=50)
+          Core #51 (phys=1)
+            PU #51 (phys=51)
+      NUMANode #13 (phys=13 local=8077312KB total=8077312KB)
+        Socket #26 (phys=6656)
+          Core #52 (phys=0)
+            PU #52 (phys=52)
+          Core #53 (phys=1)
+            PU #53 (phys=53)
+        Socket #27 (phys=6659)
+          Core #54 (phys=0)
+            PU #54 (phys=54)
+          Core #55 (phys=1)
+            PU #55 (phys=55)
+      NUMANode #14 (phys=14 local=8077296KB total=8077296KB)
+        Socket #28 (phys=7168)
+          Core #56 (phys=0)
+            PU #56 (phys=56)
+          Core #57 (phys=1)
+            PU #57 (phys=57)
+        Socket #29 (phys=7171)
+          Core #58 (phys=0)
+            PU #58 (phys=58)
+          Core #59 (phys=1)
+            PU #59 (phys=59)
+      NUMANode #15 (phys=15 local=8077312KB total=8077312KB)
+        Socket #30 (phys=7680)
+          Core #60 (phys=0)
+            PU #60 (phys=60)
+          Core #61 (phys=1)
+            PU #61 (phys=61)
+        Socket #31 (phys=7683)
+          Core #62 (phys=0)
+            PU #62 (phys=62)
+          Core #63 (phys=1)
+            PU #63 (phys=63)
+  Group1 #1 (total=129236960KB)
+    Group0 #4 (total=32309248KB)
+      NUMANode #16 (phys=16 local=8077312KB total=8077312KB)
+        Socket #32 (phys=8192)
+          Core #64 (phys=0)
+            PU #64 (phys=64)
+          Core #65 (phys=1)
+            PU #65 (phys=65)
+        Socket #33 (phys=8195)
+          Core #66 (phys=0)
+            PU #66 (phys=66)
+          Core #67 (phys=1)
+            PU #67 (phys=67)
+      NUMANode #17 (phys=17 local=8077312KB total=8077312KB)
+        Socket #34 (phys=8704)
+          Core #68 (phys=0)
+            PU #68 (phys=68)
+          Core #69 (phys=1)
+            PU #69 (phys=69)
+        Socket #35 (phys=8707)
+          Core #70 (phys=0)
+            PU #70 (phys=70)
+          Core #71 (phys=1)
+            PU #71 (phys=71)
+      NUMANode #18 (phys=18 local=8077312KB total=8077312KB)
+        Socket #36 (phys=9216)
+          Core #72 (phys=0)
+            PU #72 (phys=72)
+          Core #73 (phys=1)
+            PU #73 (phys=73)
+        Socket #37 (phys=9219)
+          Core #74 (phys=0)
+            PU #74 (phys=74)
+          Core #75 (phys=1)
+            PU #75 (phys=75)
+      NUMANode #19 (phys=19 local=8077312KB total=8077312KB)
+        Socket #38 (phys=9728)
+          Core #76 (phys=0)
+            PU #76 (phys=76)
+          Core #77 (phys=1)
+            PU #77 (phys=77)
+        Socket #39 (phys=9731)
+          Core #78 (phys=0)
+            PU #78 (phys=78)
+          Core #79 (phys=1)
+            PU #79 (phys=79)
+    Group0 #5 (total=32309232KB)
+      NUMANode #20 (phys=20 local=8077312KB total=8077312KB)
+        Socket #40 (phys=10240)
+          Core #80 (phys=0)
+            PU #80 (phys=80)
+          Core #81 (phys=1)
+            PU #81 (phys=81)
+        Socket #41 (phys=10243)
+          Core #82 (phys=0)
+            PU #82 (phys=82)
+          Core #83 (phys=1)
+            PU #83 (phys=83)
+      NUMANode #21 (phys=21 local=8077312KB total=8077312KB)
+        Socket #42 (phys=10752)
+          Core #84 (phys=0)
+            PU #84 (phys=84)
+          Core #85 (phys=1)
+            PU #85 (phys=85)
+        Socket #43 (phys=10755)
+          Core #86 (phys=0)
+            PU #86 (phys=86)
+          Core #87 (phys=1)
+            PU #87 (phys=87)
+      NUMANode #22 (phys=22 local=8077296KB total=8077296KB)
+        Socket #44 (phys=11264)
+          Core #88 (phys=0)
+            PU #88 (phys=88)
+          Core #89 (phys=1)
+            PU #89 (phys=89)
+        Socket #45 (phys=11267)
+          Core #90 (phys=0)
+            PU #90 (phys=90)
+          Core #91 (phys=1)
+            PU #91 (phys=91)
+      NUMANode #23 (phys=23 local=8077312KB total=8077312KB)
+        Socket #46 (phys=11776)
+          Core #92 (phys=0)
+            PU #92 (phys=92)
+          Core #93 (phys=1)
+            PU #93 (phys=93)
+        Socket #47 (phys=11779)
+          Core #94 (phys=0)
+            PU #94 (phys=94)
+          Core #95 (phys=1)
+            PU #95 (phys=95)
+    Group0 #6 (total=32309248KB)
+      NUMANode #24 (phys=24 local=8077312KB total=8077312KB)
+        Socket #48 (phys=12288)
+          Core #96 (phys=0)
+            PU #96 (phys=96)
+          Core #97 (phys=1)
+            PU #97 (phys=97)
+        Socket #49 (phys=12291)
+          Core #98 (phys=0)
+            PU #98 (phys=98)
+          Core #99 (phys=1)
+            PU #99 (phys=99)
+      NUMANode #25 (phys=25 local=8077312KB total=8077312KB)
+        Socket #50 (phys=12800)
+          Core #100 (phys=0)
+            PU #100 (phys=100)
+          Core #101 (phys=1)
+            PU #101 (phys=101)
+        Socket #51 (phys=12803)
+          Core #102 (phys=0)
+            PU #102 (phys=102)
+          Core #103 (phys=1)
+            PU #103 (phys=103)
+      NUMANode #26 (phys=26 local=8077312KB total=8077312KB)
+        Socket #52 (phys=13312)
+          Core #104 (phys=0)
+            PU #104 (phys=104)
+          Core #105 (phys=1)
+            PU #105 (phys=105)
+        Socket #53 (phys=13315)
+          Core #106 (phys=0)
+            PU #106 (phys=106)
+          Core #107 (phys=1)
+            PU #107 (phys=107)
+      NUMANode #27 (phys=27 local=8077312KB total=8077312KB)
+        Socket #54 (phys=13824)
+          Core #108 (phys=0)
+            PU #108 (phys=108)
+          Core #109 (phys=1)
+            PU #109 (phys=109)
+        Socket #55 (phys=13827)
+          Core #110 (phys=0)
+            PU #110 (phys=110)
+          Core #111 (phys=1)
+            PU #111 (phys=111)
+    Group0 #7 (total=32309232KB)
+      NUMANode #28 (phys=28 local=8077312KB total=8077312KB)
+        Socket #56 (phys=14336)
+          Core #112 (phys=0)
+            PU #112 (phys=112)
+          Core #113 (phys=1)
+            PU #113 (phys=113)
+        Socket #57 (phys=14339)
+          Core #114 (phys=0)
+            PU #114 (phys=114)
+          Core #115 (phys=1)
+            PU #115 (phys=115)
+      NUMANode #29 (phys=29 local=8077296KB total=8077296KB)
+        Socket #58 (phys=14848)
+          Core #116 (phys=0)
+            PU #116 (phys=116)
+          Core #117 (phys=1)
+            PU #117 (phys=117)
+        Socket #59 (phys=14851)
+          Core #118 (phys=0)
+            PU #118 (phys=118)
+          Core #119 (phys=1)
+            PU #119 (phys=119)
+      NUMANode #30 (phys=30 local=8077312KB total=8077312KB)
+        Socket #60 (phys=15360)
+          Core #120 (phys=0)
+            PU #120 (phys=120)
+          Core #121 (phys=1)
+            PU #121 (phys=121)
+        Socket #61 (phys=15363)
+          Core #122 (phys=0)
+            PU #122 (phys=122)
+          Core #123 (phys=1)
+            PU #123 (phys=123)
+      NUMANode #31 (phys=31 local=8077312KB total=8077312KB)
+        Socket #62 (phys=15872)
+          Core #124 (phys=0)
+            PU #124 (phys=124)
+          Core #125 (phys=1)
+            PU #125 (phys=125)
+        Socket #63 (phys=15875)
+          Core #126 (phys=0)
+            PU #126 (phys=126)
+          Core #127 (phys=1)
+            PU #127 (phys=127)
+  Group1 #2 (total=129236960KB)
+    Group0 #8 (total=32309248KB)
+      NUMANode #32 (phys=32 local=8077312KB total=8077312KB)
+        Socket #64 (phys=16384)
+          Core #128 (phys=0)
+            PU #128 (phys=128)
+          Core #129 (phys=1)
+            PU #129 (phys=129)
+        Socket #65 (phys=16387)
+          Core #130 (phys=0)
+            PU #130 (phys=130)
+          Core #131 (phys=1)
+            PU #131 (phys=131)
+      NUMANode #33 (phys=33 local=8077312KB total=8077312KB)
+        Socket #66 (phys=16896)
+          Core #132 (phys=0)
+            PU #132 (phys=132)
+          Core #133 (phys=1)
+            PU #133 (phys=133)
+        Socket #67 (phys=16899)
+          Core #134 (phys=0)
+            PU #134 (phys=134)
+          Core #135 (phys=1)
+            PU #135 (phys=135)
+      NUMANode #34 (phys=34 local=8077312KB total=8077312KB)
+        Socket #68 (phys=17408)
+          Core #136 (phys=0)
+            PU #136 (phys=136)
+          Core #137 (phys=1)
+            PU #137 (phys=137)
+        Socket #69 (phys=17411)
+          Core #138 (phys=0)
+            PU #138 (phys=138)
+          Core #139 (phys=1)
+            PU #139 (phys=139)
+      NUMANode #35 (phys=35 local=8077312KB total=8077312KB)
+        Socket #70 (phys=17920)
+          Core #140 (phys=0)
+            PU #140 (phys=140)
+          Core #141 (phys=1)
+            PU #141 (phys=141)
+        Socket #71 (phys=17923)
+          Core #142 (phys=0)
+            PU #142 (phys=142)
+          Core #143 (phys=1)
+            PU #143 (phys=143)
+    Group0 #9 (total=32309232KB)
+      NUMANode #36 (phys=36 local=8077312KB total=8077312KB)
+        Socket #72 (phys=18432)
+          Core #144 (phys=0)
+            PU #144 (phys=144)
+          Core #145 (phys=1)
+            PU #145 (phys=145)
+        Socket #73 (phys=18435)
+          Core #146 (phys=0)
+            PU #146 (phys=146)
+          Core #147 (phys=1)
+            PU #147 (phys=147)
+      NUMANode #37 (phys=37 local=8077296KB total=8077296KB)
+        Socket #74 (phys=18944)
+          Core #148 (phys=0)
+            PU #148 (phys=148)
+          Core #149 (phys=1)
+            PU #149 (phys=149)
+        Socket #75 (phys=18947)
+          Core #150 (phys=0)
+            PU #150 (phys=150)
+          Core #151 (phys=1)
+            PU #151 (phys=151)
+      NUMANode #38 (phys=38 local=8077312KB total=8077312KB)
+        Socket #76 (phys=19456)
+          Core #152 (phys=0)
+            PU #152 (phys=152)
+          Core #153 (phys=1)
+            PU #153 (phys=153)
+        Socket #77 (phys=19459)
+          Core #154 (phys=0)
+            PU #154 (phys=154)
+          Core #155 (phys=1)
+            PU #155 (phys=155)
+      NUMANode #39 (phys=39 local=8077312KB total=8077312KB)
+        Socket #78 (phys=19968)
+          Core #156 (phys=0)
+            PU #156 (phys=156)
+          Core #157 (phys=1)
+            PU #157 (phys=157)
+        Socket #79 (phys=19971)
+          Core #158 (phys=0)
+            PU #158 (phys=158)
+          Core #159 (phys=1)
+            PU #159 (phys=159)
+    Group0 #10 (total=32309248KB)
+      NUMANode #40 (phys=40 local=8077312KB total=8077312KB)
+        Socket #80 (phys=20480)
+          Core #160 (phys=0)
+            PU #160 (phys=160)
+          Core #161 (phys=1)
+            PU #161 (phys=161)
+        Socket #81 (phys=20483)
+          Core #162 (phys=0)
+            PU #162 (phys=162)
+          Core #163 (phys=1)
+            PU #163 (phys=163)
+      NUMANode #41 (phys=41 local=8077312KB total=8077312KB)
+        Socket #82 (phys=20992)
+          Core #164 (phys=0)
+            PU #164 (phys=164)
+          Core #165 (phys=1)
+            PU #165 (phys=165)
+        Socket #83 (phys=20995)
+          Core #166 (phys=0)
+            PU #166 (phys=166)
+          Core #167 (phys=1)
+            PU #167 (phys=167)
+      NUMANode #42 (phys=42 local=8077312KB total=8077312KB)
+        Socket #84 (phys=21504)
+          Core #168 (phys=0)
+            PU #168 (phys=168)
+          Core #169 (phys=1)
+            PU #169 (phys=169)
+        Socket #85 (phys=21507)
+          Core #170 (phys=0)
+            PU #170 (phys=170)
+          Core #171 (phys=1)
+            PU #171 (phys=171)
+      NUMANode #43 (phys=43 local=8077312KB total=8077312KB)
+        Socket #86 (phys=22016)
+          Core #172 (phys=0)
+            PU #172 (phys=172)
+          Core #173 (phys=1)
+            PU #173 (phys=173)
+        Socket #87 (phys=22019)
+          Core #174 (phys=0)
+            PU #174 (phys=174)
+          Core #175 (phys=1)
+            PU #175 (phys=175)
+    Group0 #11 (total=32309232KB)
+      NUMANode #44 (phys=44 local=8077312KB total=8077312KB)
+        Socket #88 (phys=22528)
+          Core #176 (phys=0)
+            PU #176 (phys=176)
+          Core #177 (phys=1)
+            PU #177 (phys=177)
+        Socket #89 (phys=22531)
+          Core #178 (phys=0)
+            PU #178 (phys=178)
+          Core #179 (phys=1)
+            PU #179 (phys=179)
+      NUMANode #45 (phys=45 local=8077296KB total=8077296KB)
+        Socket #90 (phys=23040)
+          Core #180 (phys=0)
+            PU #180 (phys=180)
+          Core #181 (phys=1)
+            PU #181 (phys=181)
+        Socket #91 (phys=23043)
+          Core #182 (phys=0)
+            PU #182 (phys=182)
+          Core #183 (phys=1)
+            PU #183 (phys=183)
+      NUMANode #46 (phys=46 local=8077312KB total=8077312KB)
+        Socket #92 (phys=23552)
+          Core #184 (phys=0)
+            PU #184 (phys=184)
+          Core #185 (phys=1)
+            PU #185 (phys=185)
+        Socket #93 (phys=23555)
+          Core #186 (phys=0)
+            PU #186 (phys=186)
+          Core #187 (phys=1)
+            PU #187 (phys=187)
+      NUMANode #47 (phys=47 local=8077312KB total=8077312KB)
+        Socket #94 (phys=24064)
+          Core #188 (phys=0)
+            PU #188 (phys=188)
+          Core #189 (phys=1)
+            PU #189 (phys=189)
+        Socket #95 (phys=24067)
+          Core #190 (phys=0)
+            PU #190 (phys=190)
+          Core #191 (phys=1)
+            PU #191 (phys=191)
+  Group1 #3 (total=129214208KB)
+    Group0 #12 (total=32309248KB)
+      NUMANode #48 (phys=48 local=8077312KB total=8077312KB)
+        Socket #96 (phys=24576)
+          Core #192 (phys=0)
+            PU #192 (phys=192)
+          Core #193 (phys=1)
+            PU #193 (phys=193)
+        Socket #97 (phys=24579)
+          Core #194 (phys=0)
+            PU #194 (phys=194)
+          Core #195 (phys=1)
+            PU #195 (phys=195)
+      NUMANode #49 (phys=49 local=8077312KB total=8077312KB)
+        Socket #98 (phys=25088)
+          Core #196 (phys=0)
+            PU #196 (phys=196)
+          Core #197 (phys=1)
+            PU #197 (phys=197)
+        Socket #99 (phys=25091)
+          Core #198 (phys=0)
+            PU #198 (phys=198)
+          Core #199 (phys=1)
+            PU #199 (phys=199)
+      NUMANode #50 (phys=50 local=8077312KB total=8077312KB)
+        Socket #100 (phys=25600)
+          Core #200 (phys=0)
+            PU #200 (phys=200)
+          Core #201 (phys=1)
+            PU #201 (phys=201)
+        Socket #101 (phys=25603)
+          Core #202 (phys=0)
+            PU #202 (phys=202)
+          Core #203 (phys=1)
+            PU #203 (phys=203)
+      NUMANode #51 (phys=51 local=8077312KB total=8077312KB)
+        Socket #102 (phys=26112)
+          Core #204 (phys=0)
+            PU #204 (phys=204)
+          Core #205 (phys=1)
+            PU #205 (phys=205)
+        Socket #103 (phys=26115)
+          Core #206 (phys=0)
+            PU #206 (phys=206)
+          Core #207 (phys=1)
+            PU #207 (phys=207)
+    Group0 #13 (total=32309232KB)
+      NUMANode #52 (phys=52 local=8077312KB total=8077312KB)
+        Socket #104 (phys=26624)
+          Core #208 (phys=0)
+            PU #208 (phys=208)
+          Core #209 (phys=1)
+            PU #209 (phys=209)
+        Socket #105 (phys=26627)
+          Core #210 (phys=0)
+            PU #210 (phys=210)
+          Core #211 (phys=1)
+            PU #211 (phys=211)
+      NUMANode #53 (phys=53 local=8077296KB total=8077296KB)
+        Socket #106 (phys=27136)
+          Core #212 (phys=0)
+            PU #212 (phys=212)
+          Core #213 (phys=1)
+            PU #213 (phys=213)
+        Socket #107 (phys=27139)
+          Core #214 (phys=0)
+            PU #214 (phys=214)
+          Core #215 (phys=1)
+            PU #215 (phys=215)
+      NUMANode #54 (phys=54 local=8077312KB total=8077312KB)
+        Socket #108 (phys=27648)
+          Core #216 (phys=0)
+            PU #216 (phys=216)
+          Core #217 (phys=1)
+            PU #217 (phys=217)
+        Socket #109 (phys=27651)
+          Core #218 (phys=0)
+            PU #218 (phys=218)
+          Core #219 (phys=1)
+            PU #219 (phys=219)
+      NUMANode #55 (phys=55 local=8077312KB total=8077312KB)
+        Socket #110 (phys=28160)
+          Core #220 (phys=0)
+            PU #220 (phys=220)
+          Core #221 (phys=1)
+            PU #221 (phys=221)
+        Socket #111 (phys=28163)
+          Core #222 (phys=0)
+            PU #222 (phys=222)
+          Core #223 (phys=1)
+            PU #223 (phys=223)
+    Group0 #14 (total=32309248KB)
+      NUMANode #56 (phys=56 local=8077312KB total=8077312KB)
+        Socket #112 (phys=28672)
+          Core #224 (phys=0)
+            PU #224 (phys=224)
+          Core #225 (phys=1)
+            PU #225 (phys=225)
+        Socket #113 (phys=28675)
+          Core #226 (phys=0)
+            PU #226 (phys=226)
+          Core #227 (phys=1)
+            PU #227 (phys=227)
+      NUMANode #57 (phys=57 local=8077312KB total=8077312KB)
+        Socket #114 (phys=29184)
+          Core #228 (phys=0)
+            PU #228 (phys=228)
+          Core #229 (phys=1)
+            PU #229 (phys=229)
+        Socket #115 (phys=29187)
+          Core #230 (phys=0)
+            PU #230 (phys=230)
+          Core #231 (phys=1)
+            PU #231 (phys=231)
+      NUMANode #58 (phys=58 local=8077312KB total=8077312KB)
+        Socket #116 (phys=29696)
+          Core #232 (phys=0)
+            PU #232 (phys=232)
+          Core #233 (phys=1)
+            PU #233 (phys=233)
+        Socket #117 (phys=29699)
+          Core #234 (phys=0)
+            PU #234 (phys=234)
+          Core #235 (phys=1)
+            PU #235 (phys=235)
+      NUMANode #59 (phys=59 local=8077312KB total=8077312KB)
+        Socket #118 (phys=30208)
+          Core #236 (phys=0)
+            PU #236 (phys=236)
+          Core #237 (phys=1)
+            PU #237 (phys=237)
+        Socket #119 (phys=30211)
+          Core #238 (phys=0)
+            PU #238 (phys=238)
+          Core #239 (phys=1)
+            PU #239 (phys=239)
+    Group0 #15 (total=32286480KB)
+      NUMANode #60 (phys=60 local=8077312KB total=8077312KB)
+        Socket #120 (phys=30720)
+          Core #240 (phys=0)
+            PU #240 (phys=240)
+          Core #241 (phys=1)
+            PU #241 (phys=241)
+        Socket #121 (phys=30723)
+          Core #242 (phys=0)
+            PU #242 (phys=242)
+          Core #243 (phys=1)
+            PU #243 (phys=243)
+      NUMANode #61 (phys=61 local=8077296KB total=8077296KB)
+        Socket #122 (phys=31232)
+          Core #244 (phys=0)
+            PU #244 (phys=244)
+          Core #245 (phys=1)
+            PU #245 (phys=245)
+        Socket #123 (phys=31235)
+          Core #246 (phys=0)
+            PU #246 (phys=246)
+          Core #247 (phys=1)
+            PU #247 (phys=247)
+      NUMANode #62 (phys=62 local=8077312KB total=8077312KB)
+        Socket #124 (phys=31744)
+          Core #248 (phys=0)
+            PU #248 (phys=248)
+          Core #249 (phys=1)
+            PU #249 (phys=249)
+        Socket #125 (phys=31747)
+          Core #250 (phys=0)
+            PU #250 (phys=250)
+          Core #251 (phys=1)
+            PU #251 (phys=251)
+      NUMANode #63 (phys=63 local=8054560KB total=8054560KB)
+        Socket #126 (phys=32256)
+          Core #252 (phys=0)
+            PU #252 (phys=252)
+          Core #253 (phys=1)
+            PU #253 (phys=253)
+        Socket #127 (phys=32259)
+          Core #254 (phys=0)
+            PU #254 (phys=254)
+          Core #255 (phys=1)
+            PU #255 (phys=255)
+depth 0:	1 Machine (type #1)
+ depth 1:	4 Groups (type #7)
+  depth 2:	16 Groups (type #7)
    depth 3:	64 NUMANodes (type #2)
     depth 4:	128 Sockets (type #3)
      depth 5:	256 Cores (type #5)
-      depth 6:	256 Procs (type #6)
+      depth 6:	256 PUs (type #6)
 Topology not from this system

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/2amd64-2n.tar.gz
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/2amd64-2n.tar.gz	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/2amd64-2n.tar.gz	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,20 +1,14 @@
-‹ §
-J íooÛ¶Æó:ŸB_`»$EJöÞm
-Æa]q_ŠÌÚBmɐ”l¹ŸþRN›Êv‹§ÎéóüÐ6ÌŠ¶ŽñÏyDšb»Ììw¦^þçê¥PÜ¹á«ÎÚÿ¬­ÝýÈ•ÖF§”ÕúJ…ï]v•¸{G#n»¾h“äêfÕ¬6UýL9ßvoˆó9þÝ}÷2×À´øëÔ¥J™ÜñÏ•Eü98ŠÿÒßU¥¿ðu›蟅/Ä?|ßûí….ƒøø»ÌÄŸƒçã_în/p
-DÅ?âŸY«ÎÇ?ü­–ÿ×ALüß+eúLLyÛ¶¾î˶ºómLC€íC¼ŸŽ¿6GñOÃXà*Q/õ¡ÇQîªÅßëoýNÀ· ^ÿ«&È¿nÚEÛL¬ã¬þ•;Ò¿
-íôÏÁÖ×·¾\&é_Ý  ºÿ§óTiôÿ8˜ÿ¾Ù5›fuOºâûÿZ‡âˆ?±ñï×­/–‹®º	'k5턜oÿÓãö?Œ Ðþs ZÉÄ귾者Ø,vEù¡Xù0v<[ÇyýÿJ5ôρ†üE«ÿ²i'i~L¼þÍ
-ôρ‚þECÒTïŸÒÿOsöŸôÿe3QÿM´á‰u
-Ï¢ÚåÆÿ, ÿ/›‰ú/‹rM¶€ÄÌÿîý?F…ï1ÿËATü«zéÿ1Ñ—aþߥ˜ÿgÿ®ú_TWà|ÿ?;ÿ‹öŸ­Œý} ±Pôÿ˜Æ‹]ÑöU_5_–Nüü_–f˜ÿcýÙPôßßï.Ûþëãþ_hÿ3蟃wuõ¾òKÜ„BÑÿÆßùMD„üŸsðÿ²€éÙPô_6kßúº¼ œˆÏÿ9›åÐ?™Å
- at 2ýÿ]Üw‹æý¢èº¦¬Š¾º«úûgêˆ×¦räÿYÐô/Òüÿºhýr^Xl‹Ýù:âõo­þY€ÿG6ý×·Ûß=€Î÷4q^ÿ'ÏÿÚ,…þ9ò¸È%^ÿŠÇÿÿ”ø_ÞÿaOó?ð²Áý!ŠþYüÐ?ðȆ¢ÿ‹û?NÆÆbý~.ú· ¹PôÏâÿÀühÿeCÑ?‹ÿþ/àÿ
-Eÿ—÷œŒÿUÿ7Hÿʆ4ÿÏàÿÐð² ÿ‡l(ú¿¼ÿã8ÿg-æÿyp7 ÉÄë?~1x’ÿûÿ±@‰?‹ÿþ_àÿ
-Eÿ,þèŸädCÑÿå×ÿ8mÿ±þ?¿Ô]ßÞ–ÃýwPôÏâÿÀú, ý—
-Eÿ,þäY€ÿC6ý³ø?ÿeÙِæÿ9Öÿ@þ—ø?dCÑ?‹ÿó,Àÿ!›Iú_òã€ÿÇ~ÿ§*‡ÿƒƒ‰ñÜÿ‘RGLü?ú´ƒÿ‡…Øø÷ëÖ˸@	ýc0þgA! šXý?zvEù¡XMÚ<~þÏ)¬ÿÀöÿ–M¬þ÷ûOÐüBþßbýo ِôÕû§ôÿÓ\£ýgýÙLÔ?ÿþßó?DÅŸsÿoÌÿ±@‰?ËþßXÿìÿ-ŠþñüßëÝÙPôϲÿ7Ödûˆ¢<ÿ÷z€ûO6ýãù¿×žÿ“
-Eÿ,û#ÿÇöÿ–
-iþÏÿ½ÿ—
-Eÿ,ûèŸìÿ-›xý3íÿ
-ÿ”øs¬ÿŒý?xÀúϲ¡èŸÃÿá 0ü“
-Eÿûãùo°ÿ·l(úgñ`þ‡´ÿ²¡èŸÅÿÿðȆ¢–õŸáÿfþOِæÿ9öÿ†ÿ“ø?dCÑ?ÇúϘÿçë?Ë&^ÿLû§ðp@‰?Ëþßðÿ² ÿ‡l(úgYÿúgÃ?ÙPôϲÿ7ôÏöÿ–
-Eÿ,þ¬ÿÇÚÙPôÏâÿ@þ—ø?dCÑ?‹ÿù_ý‘
-iþŸÃÿü/ðȆ
 ¢–ý¿1ÿÇü²y^ÿu³$ïúó™hÿ‡Î\†ý¿Y˜ÿáŸxÓψøøç.wˆ?“ãý"œªžPǹö_Ûãç¿uŠç?yºXW}’šyî²tv½ÿͶêºD=|ÿ¾i}µªÃUÝûvã‹;¿ÿ/s§Ìõ¦œ Ã52"ËôlvÝôëÐ?Üÿnn¶ý3Yÿ[¿­ê÷
-¥Ž3ú×AïÇú×úgáú÷A¥:ùÍoÿjúbóC²Ç¨y®I>ü4*ð¦õþãë‰ÎCDgö°À»Î/?HÂ-<Ëf£?–}u÷x€¡D>·ã¿ÔÅa‘4Õ&ø¹jûûÑöïtüþÛV½¿)ÊãBjTàMµñ+ß}úœ¹Êólü)ŠÝnô!y>áǺ©ÇGHÂu«ÇG^ü«¸ÙŒJØlü&óvñ®—](óÃSoò§æ¶.ýÑçx»)n^6zvp&ßþéËMQm«=ê|Í·ïêö¡È§ã8óp¾õ	X™|ÿ/w·šXǾÿŸçgúÿF§”I³aÿW;ôÿÌ÷ý¨O#üþ?9þË*œ¨p["Ôq~þïxÿO*¬ÿÀ‚Q‰F].1÷ÿIɾ'ˆÏÿ…æúgAaú_4ôßÔƒÍï+êˆÎÿé0&ƒÿ‡õ ’™ØþÇ/ú?‚”ÿ±Èÿp09þ/šÿ9îÿéÔÂÿÅÂcþǸ,OÝ<ÉÿØy>Îÿ<BÙqþg6Góòof²þ¹ó?úçà!! žÈÿ¸™úœsPÇù£ô,µö°ÀAþ'	cx—
-œä—Z=*p’ÿI´UóQ§ò?z\Å™ü:Éÿ$ÃN3ã#œæ’l6þ˜'ùŸÄd£ÔŠz"ÿ“Œó?ê\þGËÿ¨ÓüO8“§ú$ÿ“èÙa“üO¸q+äÄ1ùþÏ=ÿçYÐ*ÜÊ!z±LÖÿð ±RþW!ÿËALüYó?¸ÿ³€ç¿d3Aÿ»¦ëª0 םÿ1*5ð²€ül&è]tóÞô:ú×þ ÙLÔÝ´Ûb³ØúmÓ>·ÔË“ÄëߍõŸX€þ               x=üô²÷ÿ h 
\ No newline at end of file
+‹ ÀÕ9K íïnÛ8Åó9O¡˜]’¢H{¾Í`P`0ØÁb;Å~4™u„Ú’!)ÙÍ>ýJN›Êv&oãÛAîùõOš˜m]’â="M¾[;ûƒ©þ~u1TÏ²á«ö™:|¯­=|ýÌ•ÖF™L)«õ•ÒÚks•d—{K_¹k»¼I’«›M½Ù–ÕåBÓr¼!^ÌSüÛ‡öB×À¼øë4K•2Þôñ7™Uˆ?Çñ_‡û²¯}ÄÇßjý³ð|üûwa÷Z—A|ü³L9ÄŸƒã_ìï^㈊¿âˆ?“ñïÿ”ëmø–ë &þýï>þã?&fÇ¿¸kšPu«uSÞ‡&ªŽ!Àö1ÞÏÇ¿öQüqN_%êBŸùáñÏ‹}¹|ý½ß	øDëS÷ò¯êfÕÔsë˜Ô¿ÊNôŸúúgaª;H_.sô¯¿ñ&€0þë¿Áøƒyñïê}½­7´!:þF+­"ãßÝ6!_¯Úò¦?W›™çcºÿOOâo•³èÿ9P½¿d"õ¿¿}hË"ß®öyñ)ß„þÖqºŽiýŸÞÿ[ç2èŸ
+ù‹&RÿEÝÌÓü˜xý›Ô8èŸý‹†¢ÿ¸Ñ?eüŸfý?ÿËfžþ몗F Ö1(ÜEõÿ*MqÿÏÆÿ²™§ÿ"/n鐘ù߃ÿÇô¿<æ9ˆ‰Y­ÃMüe@˜ÿO=æÿY Ä¿-ÿ7˜ÿ»Óûãú´2ö7ŒÄBÐÿS`¸'Xíó¦+»²þsåæÿœÑ˜ÿcãÙôß=ì_¹ÿ×§ã?3Ü@ÿ|¨ÊeX£
+AÿÛp¶1uòÃcÀÐ?˜þ—
+AÿE}šP7 ÓÓñù¿,5)ôρ³h $CÐÿò‡vU\åm[eÞ•÷e÷ðRý{ƒü?ÚAÿ’¡ÌÿßæMX¯úV»|?£Žxý[“Aÿ,Àÿ#‚þ«»ÝMh†@º9’˜Öÿéó¿6Õúç`Èÿ¡K´þÿÃÁÿÃ!þðسüOÿ'îÑôÏãÿ€þY€ÿC6ý¿¾ÿãìþϬÿÀÃ/y—£	Aÿ,þ…ùÐÿˆ ÿü_,Àÿ!‚þ/àÿ8íÿ3oàÿfé_ÙPæÿYüð² ÿ‡lú¿€ÿã4ÿgSÌÿói4 ’‰Ö?a1xŠÿÃcÿ?ñçñÀÿËü²!èŸÇÿý³€ülú¿Àúçý?Öÿçáת횻bhÀÑ„ žõ?°þèÿeCÐ?ÿù_àÿ
+Aÿ<þäY@öG6”ùÿò¿,Àÿ!‚þyü˜ÿcþÙÌÑ?aɏ#bü‡ý´×6…ÿƒƒyñÚÿ‘TGLü?û†%á"ãßÝ6!_Gî Jÿ+‡û ¢‰Ôÿ“÷gŸŸòͼ½Àãçÿ¬Ãú<`ÿoÙDêÿ°ÿ÷͏!äÿS¬ÿÍô/ŠþãFÿ”ñšYôÿ,`ü/›yúÿû;ÌÿpÖý¿1ÿÇ!þ,ûgXÿìÿ-‚þñüßÃÙôϳÿ7Ödûˆ <ÿ÷†€ûO6ýãù¿7žÿ“
+Aÿ<û#ÿÇöÿ–
+eþÏÿ½ÿ—
+Aÿ<û;èŸìÿ-›hýsíÿ
+ÿ„øó¬ÿŒç¿XÀúϲ!èŸÇÿý³€Û?Ùôϳÿ7ôÏöÿ–
+Aÿ<ûcþ‡ôÿ²!èŸÇÿÿðȆ žõŸáÿfþOÙPæÿYüð² ÿ‡lúçYÿó,`ýgÙDëŸiÿoçáÿà€ÿü¿,Àÿ!‚þyüÐ?¸ý“
+Aÿ<ûCÿ,`ÿoÙôÏãÿÀú, ÿ—
+Aÿ<þäY€ÿC6ýóø?ÿeÙÙPæÿYüÈÿ² ÿ‡lúçñ`þø?dó¢þ«zMßõç+Ñþí¬Áþß,LÇø‹`úßw ˆ?sãßwúy¦:JSý¿¶§Ïkƒç?y⺺-»$5KŸ¹tq}øÉ®lÛD=þûcÝ„rSõß–UšmÈïÃá¿,3e®·õ`.’áÎéÅâºînûâ
 ágK›a‹Ñ¿0sõ¿»²úX“ê˜Ð¿îõ~¢å=ôÏÂõïƒJuò°û£îòíÉ£–^g&ùôó¨À»&„ϯ'}míÂøÐ†õ—Išç£?]yÿt€¡„_Úq_«ü¸Hšj“Ž
+üR6ÝÃè ‡w:~ÿnÊ.Üäŧq!5*ð®Ü†æ›Ð~ùœ~¸ÔÆŸ"ßïG¢ÇûÅø?Uu5>BÒ_·z|„áÅ?ò›í¨„uã7ùû»÷«UÙõe~|îMþ\ßUE8ùœãï·ùÍÑËF/ŽÎäû…b›—»§*´Ëü8šï?TÍc‘/ÇÉÌãyøÞ$`enû_ìï4µŽÃøßû‰ñªÝ¡ÉÐCûŸ÷æo¯ùIÿáíÿÜø¯Ëþ<õ­¥Žéù¿Óý?µ¶Xÿ£º\"ÚÿyɾgˆÏÿ)—Bÿ,(Lÿ‹fZÿu5Øü¾¥ŽèüŸöþÔ0 Hf^ÿOXô)ÿ£ÿá`nü/›ÿ9ÿi£àÿbá)ÿc2çÓl™Æäìҏó?‡PvœÿY,ѽü•™«öüOýsð˜PÏä²…úšsP§ù£ô"µö¸ÀQþ'ñÞfnTà,ÿ“d©Õ£gùŸD[µx.ÿ£ÇULäÔYþ'1VûñÎó?‰[Œ?æYþ'1n”ZQÏä’qþGMåÔTþGçú3ytªÏò?‰^8Ëÿô
+·BþGsÛîùÿÏÿ² Uß”Côb™«ÿá1 j¤ü¯Fþ—ƒˆø³æÚðü—l¦õ¿¯Û¶ìï#èuDçú›ËþOÿ‘Í´þoóvxÖûê 佃ÿƒè_6óô_ÕÍ.ß®vaW7/.õò,ñý¿QÖbú               àíðߣÖh h 
\ No newline at end of file

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/2amd64-2n.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/2amd64-2n.tar.gz.output	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/2amd64-2n.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,21 +1,21 @@
-System(0KB HP=0*0kB  )
-  NUMANode#0(2046MB)
-    Socket#0
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#0
-            P#0
-  NUMANode#1(2048MB)
-    Socket#1
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#0
-            P#1
-depth 0:	1 System (type #0)
+Machine (phys=0 total=4192952KB)
+  NUMANode #0 (phys=0 local=2095800KB total=2095800KB)
+    Socket #0 (phys=0)
+      L2Cache #0 (1024KB)
+        L1Cache #0 (64KB)
+          Core #0 (phys=0)
+            PU #0 (phys=0)
+  NUMANode #1 (phys=1 local=2097152KB total=2097152KB)
+    Socket #1 (phys=1)
+      L2Cache #1 (1024KB)
+        L1Cache #1 (64KB)
+          Core #1 (phys=0)
+            PU #1 (phys=1)
+depth 0:	1 Machine (type #1)
  depth 1:	2 NUMANodes (type #2)
   depth 2:	2 Sockets (type #3)
    depth 3:	2 Caches (type #4)
     depth 4:	2 Caches (type #4)
      depth 5:	2 Cores (type #5)
-      depth 6:	2 Procs (type #6)
+      depth 6:	2 PUs (type #6)
 Topology not from this system

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/2ps3-2t.tar.gz
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/2ps3-2t.tar.gz	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/2ps3-2t.tar.gz	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,3 +1,2 @@
-‹ §
-J í™ßn›0Æs[ž‚ËMj;ÿ…u—›&ífÒ¤> "à&hF˜dJŸ~&ÙÖ-ÊáD*ç'EbbÄçÏçø„U–ßÑœ5ïf£A±”í‘Æ’ìΩ»ã/f”2Â$!‚²¡4dÊñé…µmÒ:gó…Yè¢<ÑOÕâ`aô¯j“3	úéO¹¤¸ûž²˜Æ¨?úgÕº(ŸÌeÇhŽözÕ_v ¿àDÎBrÙÇ8ÎÄõoUWÖšúæCH'ÿk|RZ‡k“æó´ÌÃÏå¢(Õm˜ê¦Ø¨,´ëª2u£ò Ó&ûÞÞÁé»ß«ùõËsP«MaSºohtOÂ7Õ¦Ý"@Bêz¼
-‚¿‡¥pÃ6ÅJÍS«\‡øáýî¾ Òiódê•»öí‘+“+Ýþö£)·í…k+4./þ·[;RÐýÎþ»õ_F×þÕ?wr¾¼ð<ð×_0‚ñ„ãú»v£V—šþúKÉ9êÁIý]\¾ÄðÏÿ#ÎÐÿ têoJ÷VÔ 1ºò·8Ð?–î€ù? 䎾ò9E§ÿ«ZYU6CÆ8Ãÿ1èÐÿÓ¦ÛÿÆÚb®‡d Þþgmô?èÿiÓé÷¡7þû¿Øe ¸ÿƒ Ÿþ©Œ6‹íyÁ[F‰Äúžú7ËZ¥yÒfE¹èù>:ã¿8Œÿ`ü‡à··ÿm¼öÀ¦Í0ÿ'º°Ý¥ÿüßµ0ÿóÿiÓÏÿvÕ$¶4æY%¹ÒéÖoÿ33ô?”ôÿ„éçÿj¹µE–ê¤ÈÏ£Ûÿìpÿ'úŒþÓ¦Óÿ6[*—ð» 2?TØtÓç¿ÇßÿœFýFÿiÓ'þ“kÔÿ#¬ÿBÐOÿ+Ôÿꁧþpõ¬ÿ€õÿi3Ìÿ#Öÿ9ú¬ÿO›~þ¿Bý÷ÿ `ýÚôóÿêÿèÐý‚ ‚ Óâ'ŠC	 P  
\ No newline at end of file
+‹ èÕ9K íšßn›0‡s[ž‚ËMj;ÿ¯»Ü4i7“&õ7As0Â$Súô3I#uQ „©>ŸT…&¤FùùÃÇ'e•åw¬ù4›âQÔ>R‘ÝïTˆÝã3Ja!‚²¡4¢|FS^ԁµmÒ:gó…Yè¢<qžª-ÄÁÂ^ò¯j“M5	úåOyDcs÷:eB2Ì‚òϪuQ>™KÑïó~3!ØQþ‚Äd’K_È[xž›»²ÖÔ7_B¸	pã¾)­Ã¯µIóyZæá÷rQ”ê6LuSlTÚuU™ºQyi“ýnßÁé»ß§ùóÇsP«MaSºWh|OÂÕ¦ÝM€„ԝñ1^Ká†mŠ•š§V¹äÃçÝû‚J§Í“©Wî¹_<X™\éöo?šrÛ>q턦åà¿ÝÚÉj€þ÷áôßÝÿ¹ xÿ‡àuþ¹ÓÇYyñy0<.c\ÿAx+wܨÕå¦Áðü#NbÌ‚ù»Uù2s`xýS‚þƒÐ‘¿)Ýg¢FŽÑUÿ»ÀQþ’Žõ?䎾ó
+9E‡ÿU­¬*›qcœá¿ý‡ ý÷›.ÿµÅ\« Îð?æè?è¿ßtøï~èèMàû?áþ„>ù7¦2Ú,¶çN„Áù33ìÿ€0(ÿfY«4OÚŠ (½?Îõ_­ÿŒKŠßÿpˆàö¿ïý0¿ã¢Û§50¸þgBbýÖÿ~ÓÇ»j[ó¬’\ét;tŒáþ3&"ôJúï1}ü¯–[[d©NŠü¬1ºý?úÿ?Fi„þƒ€«¿ßtøo³¥r¿+ *óGÕ‰M7Cvþ{†ûÏ$è?¸úûM÷úO®Óÿ§Øÿ… OþWéÿG˜?ƒòìÿìÿ€ý¿ãÿ¤ýÿý‡ ûÿ~ÓÇÿ«ôÿqÿöÿý¦ÿWéÿ£ÿ  ý‚ ‚ ~ñAc! P  
\ No newline at end of file

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/2ps3-2t.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/2ps3-2t.tar.gz.output	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/2ps3-2t.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,6 +1,8 @@
-System(0KB HP=0*0kB  )
-  P#0
-  P#1
-depth 0:	1 System (type #0)
- depth 1:	2 Procs (type #6)
+Machine (phys=0)
+  Core #0
+    PU #0 (phys=0)
+    PU #1 (phys=1)
+depth 0:	1 Machine (type #1)
+ depth 1:	1 Core (type #5)
+  depth 2:	2 PUs (type #6)
 Topology not from this system

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/2s390-2c.tar.gz
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/2s390-2c.tar.gz	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/2s390-2c.tar.gz	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,7 @@
+‹ *¹K í[oÛ6Çó:
+{]WÞEØCÒ!Xušv{4d™vˆèQN—~úQ²“Øn]œPØt~€cGǼˆ‡Þ$ZÔ²¿¡ñÛ³×;!êw¼ÿþÀ!»£õ÷–Lž!ñŠyzdc«¨DèÌFéýsßk³ÿG¡þ·÷öµê@ÿ.8øßþ_ê;ë¯ýýÏp ú÷Âwýï>W:}±jÐßÿœS
+þ÷Ásþ‹Í‹Ôþþ”ð¿Úü_äÖšE¢OI£v°äüÿ‹#ÿË€g¿ÔI>ÇÄýß02;Àh´ê¿ÔVgÕIi´ëŸë_b	ú÷~òŸ2múw/|ê °ÿøÏÉÃøÏüGE´0‰©†•@ïñuaüçWì:€éÒIÿU^äI¾¾Øôoÿƒ€Áú¯úù?ÎK=¯×L¶¶Óhmÿ	9jÿ)´ÿ>Øy€A0MNÐÿ<1¶ÓÂ@ïù?e‚Âüß0ÿŸ6ô-—¥¶Ý;ü#ÚõOÇœbп@ýÓ¦“þÍ2Ñó8ß¼Ðü	èßT1¥…5 ‰Òmý7ÏVf½)Þ0 ÿêûÿ@ÿ¯ôÿÓ¦“þóÌMø‡ß4@ÿTÀõ/€þ§M·þ¿ŒìÍ<Ë+=h
+ ]ÿøxüïþýû ûü¯2©žo†T€öùŸ<ö?çüï‚•p5 ä*$ú‚ÉÑIÿEžD¥ùU&ϤѮv¬A`ýÇ7¹slžUQâŸ"mú?qê×Ðûú/‘œ@ÿï¸þ;mÚô_jGC:ý=zÏÿˆd ýû ÍÿKc‹¨ŠoL¶œÆ ëÿ0ÿ÷†ÖÒt˜ÿ‘QöÿÀþo/tòÿûàþ?ÀþŸiÓIÿcìÿÐþû Ÿÿ=îÿõ/ì< û&Ê	úÝý?pÿ`ýwÚtÒÿû`ýϰþ7m:éŒý? /0Ì¥Tnýš(ÝÖGØÿ×½ £ÿiÓIÿ#ìÿ‘pýÇ ÿiÓ­ÿaÿ¬ÿ{¡ûüÏóþþ÷ÁŠ…”„!‰‚¾`rtÒÿû`ýǰÿgÚ´é߯7z9Oãy‘ÑåÜFw½nýhè=ÿ£õ пàúÏ´yÔQæ¯õÐZá=Ÿÿ(1Üÿí…Cÿ»²8íQ?ߥ­ýçâøù_T`˜ÿyÁõñJ%•Fa(ÀL18	qÀ%Q(CbäºeÉ(áî3(³ú÷Ê’8¤b+.Å!”¨ÐÅC0ÁH9O×)……„„Û°.‹™º$°P²Ž;t!\XI)§!bJqUg¬N™r7SE.¬`.´ÉªI¥H“g¡B*ÁR2¡‚Y\ýS!æêQœ©Ù¢^¿péWóꃳºÂkkµE\ÊúÃæ—›,sƒDwÿ/’<¾ÕKô¿ì*õŸêÔd«ü…ÓhÑ?áß>ÿÕùôïƒ:ý”»Ùß9j ˜
+Žº½œ9ËU©õÎàem¹Ü¬Vº´O†NžÎò.ª§O0…Ëõ—¨8¶¢ÆrWæn/!œòqmyŸE6ʸ’ê!¶ýlÊŒ,ûÙv¾ÍÁ¯¦¬î÷¯›=ÒœÏߥ©ô"Šo÷­MlYžý­µ}Ê‚‹®)¨(Î…Pµ-·ë$ZìGTWj×TÖ–:N"“F‹¤É_Ýìªmé|ÎÊ­íÑB5±Õ©ª<·š\ÿqu=ÿœ¹Ú»‹í)×—ù&‹õÁ©î,gú)-üËÓÔT¿÷§ÉfrWn[Kåf×Mî*H“·¿Ò(qmãƒ#æJló¶³|¶EäÎu?Ì»›Mv»
+ãÚÞ¦t~Û¬uSÖó=Ïâ½Ã{nÝ?üÑÞ-¿søzS‡‹ú°ùº‹ÂUôæìÆÖߨ¶ÿ®GößþcþÍï0"áþ/Üél™—s³Ü5çèý凷׮RÌ~D»!R^Ú­‰Îù:OMaQ¡KäjË9
+¤T?c<[é¨Ú”ÚþpŽ´2†¾Fe|ƒlµJ4Jm„’ú§6iŠ–«Í#GøݹþÄäú]]ý„Yê¬2+7KÎî(–D]8KÕ¿E Ý!7Hö"!Ã#Û                     /Á¿búJ    
\ No newline at end of file

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/2s390-2c.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/2s390-2c.tar.gz.output	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/2s390-2c.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,8 @@
+Machine (phys=0 local=1025408KB total=1025408KB)
+  Socket #0
+    PU #0 (phys=0)
+    PU #1 (phys=1)
+depth 0:	1 Machine (type #1)
+ depth 1:	1 Socket (type #3)
+  depth 2:	2 PUs (type #6)
+Topology not from this system

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/48amd64-4d2n6c.tar.gz
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/48amd64-4d2n6c.tar.gz	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/48amd64-4d2n6c.tar.gz	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,481 @@
+‹ I¹±K ì]sÛ6Ú†sºþ8ìÎÄ-¾Aæ,i·owºéìÔÉ–¨˜‰â+ÑNÒ_¿ )Ë 	‘”"A|nµ‰l@ >xƒä£¿]-ÆŸãüv>þéÕ‘„µ”ÅßZõ¿‹÷„0ÁゐW˜‰é+$ŽU![«<Z"ôj¹XämùºÒ/TÜÿl¹8ÊI°ûøSÁŒ¿5ÆÏ“tº8ä1Ì Kη?%RÖÆŸª^!|ÈJlÓÀÇÿ}<ÿ°È£ÙT*)¦2Ðçw7:í×e?'¡0˜)ÎMÚ»Çé4^®6i‘…´øÜÏÑø!žXI¦XV¦Ý}‰2G:6ioÇyòW?'9£&íŸiTK¥X„ÜúÜQºHÿ¾i
+°ý¹jª}¼¦É,~N	•㽤¾ïc?%ã<ºŸU*[¤½Ÿ;U÷œfÚ^éìZZ¥³­´_’eþ­š@ôYÔó¿Ë$ï£ñgG™ou“ÿ}ŠíQ
+DX|î}”eõj>í݃žê-ÐCQ¤Í¢ûZUp ˾¾û3Ï¢dnuŒRT–e~L—eêæÓLÛ¼(ó÷x™Æ³»ÜnÇeš©ÿS ÕÊdq.ýñëÝècºªDQ—w‹Çt\ïÍuÚ¦Ï>̳úç~^ÌçIþ¯DÿQ$ñPbÂÊ~)Óòx2z{·þ!¸¬ËæÑLýfxg"T,`RYÉW›>gDвkÖi??<¦ŸËR=T0UôÀoŸâbG•s[	•ÇNøsõ4q&Ü=.³ZBf’¿6Q̃õُs}¾pëãµ4úþÍúC¡ ˜WÒÈÿizö’”=yêYô¬Æõ_ÛéÐ×¹ö뿾Ùcõû?m8×gzca€$FféÉ'ŒèÉG9$zŠÓWŒŠ×ÎŽõuB¿—”!¡¨Xˆôí‚Î¥^òèpó#£ÒdÒS¨.WOYQÄL9e†Ï<§³â­.Ǥ¢¬¦sÄõ[]÷"_g ì%‡(ÞR”9Tˆ8«–!¥æ ú&£¨…žÌu®J¥ûÁ|ŠšéºÈpÝ0SYú’+(~`¢¬,
+uöj1!"¨èº¢*¦ÒÕtR¾/+¢8³:c”äº1¼‘šDÓe{Í¥G˜Z"¬\}+Fu£qÑsL˜÷©5›èî5¥é[SX ‚²«ì,¢lSY£ +Të]RŽcëúúU&dªÂô!cõ†éÓËÔ.,{7Ô×—¢YVŽÐ$š1*‡H·	ѐW‹¡å€­{‡êûRºîâò8“z¯{ l>ùƒ¤MQc]
+û\Zgà¥}ȺרÎR½Õ}êP}l‚LM&¥Í¡çÇZI:­¨L¸i2©
+Uö)Ci³6ëÓ¯ë"Bû¬¤v‡­Mª;Õ|*X÷ª6©g!æÞQȺWôŒÿrJn2Q»ãô´‚©å`Eñ²*ú>ÕZËÊÓbme6ë*ìá%AÃAº£XqfÑuYÔ¨šGÏÅi`ίrp$Rµ©‰­û5\W…5æ¶õt°î‘fU8¶Î4gb¦ÖꎢAјõÐ(
+gV3˜¢M¢™ÍÍ'ë“$/gÚueõ]{}îâ¼P²F]d¥¹fN©ePEQžˆxm£çIš/u‚h ¤û¢lBåt6-ÅÏ.ÆG_qd-G÷KP3Míú©]_ºG	
+uƒôÅ)¬´^ð‚¼à/xÁ^ð‚¼àµýu3ο戩 œÝÜçÉ<֏W2ýpKoLX;^­â•~tdT?¯FËÇ4MÒOˆ®¾/¿¸Ó¥­Ó<Yþ?œÔ2a%&C¡Q™‰	é'7ó¤Q)Ì<Ðׄ›(¡Àap1ßp4âÿúaÜë÷ÿ„R,xãûßÿ{ÑÚ‹åßÞèSÿ)N'‹å(™èŸÞ>æqš'ã·ï1!4æÉì›N!òf¾˜Ä³¿é÷aù¥Ñ<6zÿúGú)IãxiÜuͳY|³Êã,Ó?›e½ÿí/ói¢0þQŸ7cƒ óõ£þ­ ýþî&{ø¶JÆÑÕѾLîgºŒ•ù½/–±I)’L‘æë´(KÆe’®j’&y¢KYÿÒdŸf&ñ[¼2oGñ×qœåÉ"]ÿÎX`‚fñ“n¢®ÍÍ—l“{éãëôÇГžf&1ÊV1ÊWc4_-QÅh>ŽÑøkP­âÍó¥NùdR"4ž/žt¶Ü|ŒI4žMg«4ŸEÓ¯º=O™ÿ)zÈÑêÛJ7_÷íW“ë9Îd-2ýéI“O÷h9чÎÐlŽØ$]|1yŠ7º7Ìãi>2U[ÆÙèÓb1A©ùí"+~©óNFe§ h>MÆs”¥	š/t‡-–º
+D¢l‘ÓÍ¢‡éHd<ÏF³øS4þ†VOsSDÑÊñ2xþut?7õçš'«h–|JM‹Š:eËxçã´X=}AÉý
+­>›ÁA_&¹®Ù$N&#Ó‰©nßì~ùd12³2J—I6ZEOñÍýâÓbždfœ™ž~‚›ÿz÷|âL9â¿£â«ì›ç¾]'J^že£¢Vs}j—¿Œ&}⬊l¦\=“ß'ù
+=Ÿ~¯7¿yJ–ùc4»ÉtG/Ñ<JõaL9oôø£<ÏP®Ûžu5ðüá/sίÐ×Ì|£ßÜØN#ê4Òâ4Õt§]…Ó8&?âËt½P§Ñ§M§QpÚÕ8à‹t»P§±§…M§1pÚÕ8íB¯iüBÆ·;â¦Ó88
+œvZ§‰ušhqi:M€Ó®Æiz÷(/Ôi-±GJ›N“à´«q/ÒiêBÖ{¤¬é4N§ÖiÁ…:­%öHyÓi8
+œvZ§…ê´–Ø#M§…à4pÚ‰¿¹¾TH¤-øè€DP"àµS{íR1‘¶ð£N¼vj¯5(Bö
+ at 2G ’@¼vj¯5*Òâµ–$s„ 	Ä Ák§öÚYÃ"-^k	B2G’@¼vj¯5.Òâµ–0$s„!	Ä!¯ÇkÊ‹³FZ¼Ö‡dŽ8$…8äõxíR¯kgŒ´x­%ÉqH
+qHðÚ©½vÖÐÈžqHׂ5X±v=^»Ô{ȳÆFöŒC:–¬QX³v=^»Ðë=knd¿8$w,Z£°jíz¼v¡×5zÖÜÈ~qHîX¶FaÝxíÔ^»Tn¤%ÉÜn¼vj¯]*7Ò‡än„7^;µ×Κ¡{Å!¹#É yE^#—éµ³æFZ¼Ö‡ä®­³ yE^»ÐëÚYs#-^k‰C
+G’A¼vj¯57Òâµ–8¤pÄ!Ä!¯Çk—úýÚYs#-^k‰C
+G’Aòz¼v©×µ³æFZ¼Ö‡Ž8$ƒ8$xíÔ»ŠŸ57²_R8Ö¯1X¿^;µ×ΚÙ/)ë׬_»"¯]fÌŸ57²gÒ±~Ãú5ðÚ©½vÖÜÈžqHÇú5ë×®Èkzy©ÜH[ÒÁpàFÀk§öÚ¥r#mqH7¹¯]è÷k쬹¶WR:ââ×ãµK½®57Òâµ–8¤tÄ!9Ä!¯Èk9kn¤Åk-qHéˆC
+ˆC^‘×.ôºvÖÜH‹×ZâÒ‡‡¯úßÈ>kn¤Åk-qHéˆC
+ˆC‚×Níµ³æFZ¼Ö‡”Ž8¤€8$xíÔ^;knd¿8¤r¬_°~
+¼vj¯57²_R9Ö¯	X¿^;µ×ΚÙ/©ë׬_»¯]èwÙü¬¹‘ýâÊ±~MÀúµëñÚ¥^×.•i‰C*7"€¯Úk—ʍ´Ä!•ƒÀ€×NàµW «¿]éó3Îoç㟴[:Æ1ôüˆ•ÅßZõ¿‹÷„0Áã‚èßʉz…Ä1*S×£>¹—½Z.y[¾®ôU}ü'ñS¢/¨=v®¤Ž‡ñ÷¡mã¯ßçñü0§ÁîþL
+êsSóÝ'Áîã/¡0þ>ÔgüÍâ;΂ÝÇ_1
+ó¿õÿôq™ÝaXr¾uü	'Õñ§+}ÿ‡ßܦ>þfTGú–ò@‘à¦øY?ø®.ßOËX?m"Ãhäñrë‡Øâ2$âF?ÜF³‘9At8Pâf‘?ÄËò7*àÏ[ýý?çI:]ìqŒÿ…eÍÿXaþ÷¡›?ŒSzÏ?,òhö•"R)E‰DŸßYY~]Æñs…‡ä¸šåã*žl² DU ”]ÊÛqž<ÅV-A˜åŸiÔȤoq£”¢t‘þ}Se¡¨£”j&ä(ešÌâM&$w•beªÕåcj<“G÷³J+ýb‚€•~idù%Yæßê„¬,ÿ]&y|?¿ÙZʯº–ÿ6±C+‹TØnÑû(ËU¡} ·ºÇꥉíÝ=èù ^]Dìø=^¦ñì.¯UØ>9ÈÓq«JQöþøõnôÑD‚«Ýkgy·xLÇq£2ØÕuæÙ–RîfÑ}½‰…Ý¢»?ãñ,Jæv]hPiôÝÇtYfz)KßÌÚúíñS9F#Ëq¸™j™Í‘z÷¸Ì6©ûû¿ÿü¿Géèñå\1ê>ÇèºÿÃ˜Öæ¦(ƒù߇¾çÜ]¾úûœéǁlŸctúŸ4îÿ#àÒ½?}=^ÌƒÓNþŸ%«}<Ð}ýo>ÿQ	þ÷!†o™ ßVýýÿ =Š[þ¿	Ø9þO	Uÿ÷¢}Æóî–b|~×uBì>þœ/:ÈøO—q<Úü¶qŒÝŸÿ•I†ë¿Á=ÿ°uÿ§Ë÷ïãi00ð¿ÿ‡­ƒøõ¸Ìf«m“À×aîÿÁÿÇøØêïÿIb–ãŒãݏÑéÖxþÇŒ‚ÿ}ˆR¤ÿ#òù?\þ³Â@Ô×ÿÄ7ÿ‹!þãCýÇß3ÿü‡½ð¿"LìÆÿÊ
+ÿ+ˆH•ÿ.$ç­þþ÷ÌÿÿáE%XHºù_âæ¹H7ÿ«, –¸ù_FìRœü/g²QJ
+í%J:JÙÊÿ'ÿ[a‘‰›ÿ­Ö¥“ÿ%Ýü/qó¿’V–Nþ—8ùß@ö ¸ø_2{ \üo±©ÅK7ÿ‹ìêºù_j×ÅÍÿJ»”Nþ—t󿤛ÿ%NþW¨°ÒhÿK+½ëä¶[ÔÆÿ’Vþ—œŽÿ%žù_뿼âÃVÿûå)¬ÿò"Óý¯‹A˜Ža.žvòÿÑø_ÑäáùÏ‹ä-!`ûᪿÿ=ó¿ÿ÷¢}ÆßÿãïEÿƒó¿RÿãGpÏ?lÄÿÇàÿñ"ðÿ°uÿƒÿ…õ?^þ¶úûß/ÿëÿýÈb~ÍÏ80Ì
+Q_ÿSßü/øõÏü/ļhÃÿ²S~ÿËÉ…ªò¿˜Â…ä¼Õßÿžù_ˆÿxQ	Òÿ‹ÒâiƒÿEÆ‚ZT(uð¿,`,”Vÿ˱
+ì5ù_Ây@š¥ÔÐ^î,e+ÿK]ü/×#ØUÊ&S£.ü/íæ©“ÿeÕuò¿ÔÁÿ’@^F×þ¿¨’Źÿ¯n·•ÅÍÿR;‹“ÿ%¡}¾8ù_ªì,ü/íæi7ÿK]ü/ça¥Eþ—N+¥¸ù_»”6þ—¶ò¿ôtü/õ½ÿ/Äÿ¼âÃVÿ{æ!þçE¦û
+ÿ˦öÿ vò¿Ïýaý·zKø~°êïÏü/Äÿ½hŸñ÷ÂÿÂø{ÑAÆÿü/¬ÿó"¸ç¶âÿcð¿pÿïEàÿaë þ?ÿë½ü?lõ÷¿gþöÿñ¢’ù%ØÚXÿ;õñÿC´¥‹å<šæñ|±ü¶ã1º¯ÿõý?ˆâpÿïEø¢ÿCVßë?öÌÿ›ýÿ þ{|õÏü?ð¿^ôÂÿ+ɸ܍ÿçþ_	Ì›ÿ'4àârÞêïÏü?ðŸ^T‚ÅØÉÿK._Ðfìàÿ	¸µC5vïÿ­½¥±‹ÿ'‡vÇþß3‹¡ÆNþŸg)[ùìâÿ	»JyÉT¯K'ÿ»ùìäÿi`-ÀÝü?víÿMiPF×þ߬Òh'ÿ/…]7ÿOì,.þŸñJ‹œü¿¨¨“ÿÇÝü?îæÿ±‹ÿ§æ·³4ùÝs•¹ø¶IÚøÜÊÿãÓñÿØ÷þßÀÿzÄÿ‡­þþ÷ÌÿÃúo/2Ýÿzý-Ìæ‚Ái'ÿÿçç?ø÷?üß
+pý€Õßÿ~ù	ñ/Úgü}ðÿÆß‹2þÇàÿáû/‚çÿaë þ?ÿü¯ÿ‡­ƒøÿü¿„ç/ÿ[ýýï™ÿ‡õ¿^´!ÿË-ÀŸÿ„Ya êëå{ÿo	ñê?þ^ù_‚áùÏ‹6ü/•f»ßïà©$І6ÿ+Â…ä¼Õßÿžù_xþó¢,T
+þ—H¥µxNÕà‰ä*°7kV.þ7Bkãhåâ‘E¬œü¯n”RßÿsG)[ù_åâ‘"ÔYŠÅÿÖêÒÉÿªnþW9ù_$+]×Éÿ*'ÿ˶{×½ÿwP#ÿ‹‚À.ÅÍÿ"»çþߺIV÷þßÜ>P'ÿ«ºù_ÕÍÿ*ÿ‹Â°â ÿ‹¤m8÷ÿ¦•SªÿU­ü¯:ÿ«|ïÿ
+Ïÿ^ñ¿a«¿ÿýò¿¾ÿ÷¢éxÃÿÂþßÔNþ÷¸ÿ7ƒõŸ^Äé-‡@†«þþ÷¼ÿ7Äÿ½hŸñ÷²ÿ7Œ¿düÎÿ*ÿþ£Á=ÿ°uÿžÿ°ÿ‹ÿ‡­ƒøÿûÃþ^þ¶úûß/ÿË`ÿ/*ß’üݼ'0+E}ü¿HgIº‡ïŸÕ}ýuþWð¿ÁþßÃVßë?óÍÿSˆÿúPÿñ÷¼ÿ7ð_^ôÂÿJU¸ÿ¯*ü?çœ
+›ÿWàpq9oõ÷¿gþø//*ÁbÖÍÿ3'ÿ/EXËRãÿ™zŠ­,.þ?´ÙræäÿÌd£”Ú¯0v”²•ÿgNþ?$κØü­.ü?ëæÿ™›ÿ¯ön'ÿÏœü¿¢Ö*¶…ÿ¯dqîÿÍ+øeÿojeqóÿ•SÊÉÿW[ÔÉÿ³nþŸuóÿÌÉÿ+T²8ø}ͳ[ääÿ9µ{·ÿg­ü?;ÿÏ|óÿ°þÓ‹ Ò7lõ÷¿çý¿aý§™î±Y üÿ µ“ÿ=òÿ°ÿ¿‘à–2ðý`Õßÿžùˆÿ{Ñ>ãï…ÿ‡ñ÷¢ƒŒÿ1öÿþÏ‹àžØ:ˆÿ±ÿ7Üÿ{øØ:ˆÿÁÿÃú?/ÿ[ýýï™ÿ‡õ^d1ÿöB ˜¢>þÏ«Ur?Û{@÷õ_ÔãÿX€ÿ½øÿa«ïõŸûæÿÄ}¨ÿø{æÿ!þëEþŸiË	±ÿ/mþŸQ.xXåÿ±„‹Ëy«¿ÿ=óÿÿõ¢,æ
+þ,0ÿ Ȇ[æ
+þ”„Êâ¹¹ƒÿ'2¬
+Ò¹“ÿ²’ÅÁÿ#Ž­êù–ýÿ+Y:ùîäÿ­4ÚÁÿ×ëÒÉÿónþŸ;ùª¤¥“ÿç.þ…¬:ŒnþßÎâÜÿ¿:F[øûdèäÿù–ýÿ»Eü?ïæÿy7ÿÏÝüX©®“ÿ—•“Á½ÿ?³»®ÿç­ü??ÿÏ}óÿÿ÷"ˆÿ[ýýïyÿˆÿy‘éþ×lZŽÌƒÓNþ÷ÉÿÃþ^Dù-…¤q¸êïÏü?Äÿ½hŸñ÷ÂÿÃø{ÑAÆÿü?¬ÿõ"¸ç¶âÿcðÿpÿïEàÿaë þ?ÿû¿yøØêïÏü?ìÿåEkø¿¾ f…¨ÿ¢Õhœ=î}Œîëƒÿ•îÿ½¨ïü/}óßâ>Ôü½òßþý??²øo¥8Ù‰ÿa•ÿÍŽðþ›Âþïg®þþ÷ÌÃú/*ÁRÙÍKÿM)³ Yéä¿%µÀaéä¿y(¹•ÅɳJ'ÿmï"/»ùoéä¿9VÒUŠÍWëÒÉËnþ[ná¿©¥“ÿ–Nþ;à•póßÕ~qñßöîúrÿì~qòß*°³tîÿ.»ùoÙÍËnþ[:ùoAd%‹ƒÿ&!µ[´…ÿ¶O©6þ[¶òßòtü·ôÍÃú/‚øï°ÕßÿžùoXÿáE˜MÍþï¥`.œvò¿Oþø//bò–ðý`Õßÿžùoˆÿ{Ñ>ãï…ÿ†ñ÷¢ƒŒÿÁùo¥Ÿ	àúïCpÏ?lÄÿÇà¿áþß‹ÀÿÃÖAüþø//ÿ
 [ýýï™ÿ†õ^Tnø^ùÓPà0+Dþgßþ®õ?öÎgÇqÙú³®§È˜Dýõ ^õ¦Ñë^L™ÊÊ–Ô’œUÙOÿ‰rºnµTùQKÑ@ÅùÝ™k§k
+*˜ydÄaÐ;ÿ£R•ÄÈÿp°büÇÿªðžß¯ñ&ÿ·
+ÿcaõøMÛœšç7Â/‚÷ø‡A–*Œ?þãß¾¼õ•u}·ºø<nöòêèx†×þoÿ8ÿaµ_Ùøë¿hºšÿý‡Îÿð€ülˆú·÷UõsŸ¯±„¹õŸÎã’ ÿË‚
+Ãs€Xüõ?¼tF}f ·þ£™þ“ ƒÿƒ…V¢¹[ÿ+žáÔ¿ZÄÿ Æùì×?ÿPÎäÎõÿªgøë?JBÔYx×Y–пDVë¿ètÿ’×ͰîÌ÷÷¸õ?Ïÿ©ýÿxH£2T™Ž¡}™¬×¿.^Í`%îYÿUI€ú/žã_ÕGóÕ×â?þ*ŠQÿg6þ}õ·‡ԝÿKæõ¿ñŸ‡D… ôË…¦ÿ“y5§ÕÏpëYÿO±ÿgéÙÐô_4/¦3uñ–ŸªÚfÿ¿Ë·þõ¿ç¿xHÑ¡W44ýó Oòou7TCÕÔ<Ã?þ§*ƒÿøeCÓÿýÖçM™ë~üÛ•ª×jxûð„øŸ¢ÿ8ê)bþïEwæh/ÊWô„uêéÿ	qþ›ûõÃÿ#—»õ¿â €üãûàÿ•
+MÿÃ[»eýOÍë¿aáþþ¬«²2GLB¡é¿¾œŸLg3 ½œ~@wüëäÿxH° 
+EÿƒÿËöÿ€ÿkh㿵ÿk>ÿàþGÒö/ÉÐôÏàÿ‚ÿ“ÔeCÓ?ƒÿõàÿ’
+Mÿûû¿R¬ÿY@ü—
+Mÿ[û¿æúOÒõý•
+1ÿ·¿ÿûì×ÿ—\îÖÿ^þ/ìÿY@ùW64ýoìÿúQÿìÿYøM3€\húßßÿ…üðɆ¢ÿˆ£ÿWÿ´ñßÚÿ5Ïÿ„8ÿÇD¢Ô0¹ÐôÏàÿBý‡Üý#šþü_Øÿ± ÿ—lˆú·?äǪ×O'“»têÔ¿ZÔÂñŸ…àëm0H„¦†þð° ÿ§lhúß½ÿ_†û¿yˆ˜ $CÌÿïïÿÄúŸûõ[ÿg„ûÿDr·þ7ñ.ôÃÿ̓
+UÝ‹…¦†þèÿÉúÿÉf‹ü¿r<ƒ”ÿ‡þY@þ_64ýoíÿžŸÿˆÃ,„þ9PY€@CÑ¿âðãþohãÏÐÿ÷?±€þŸ²¡éŸÁÿõðȆ¦ÿ7ê¿,Àÿ-šþúbýÏâ¿lhúgèÿ‰úèþ!bþoÿ'öÿ,دý?år·þ÷êÿ‰ý?hÿ%šþ·ö.ëöÿ,ü^÷Cw)lö@húgèÿ	ý³€þŸ²Y­ÿ¦¶¹~Ò3üóA`ýÏòÿ²YÿÛKÙ™¿<­ŸVá~þÏ IÐÿ—ïñïÌI×܏sá÷Žþ'R1ú°€åŸl¼õ?¾VuÙäÅ¥Ëí+žáÎÿÌçÿ8P¨ÿ² ²i0	Å[ÿ}¡Çàs®_uušŽÿڏ/¦.*óÁ‚À©ÿd®ÿ4	Ðÿƒ…wý?¨èýU½¿^Gæáp}Áüð“BÖÿsójººéV<Ãÿùß ýxhMW6ÝY×…Æ²Aü¿Í¦œúO³yüGÿo&ЦîM÷j-¼æ¡©fœ
+Ž—ñ³¾Õ…yh›/ã[=þáw3–?
+dýïºÿ2ôÿàûÙxëÿ©júüT«õjð׿= ýs ýˆÿÏúëžñ÷?ó ýˆ\ÿ:]÷Ó©ïÜêâžóŸóþ©ÂþŸ‡Ä/²þwÿq ÿgñ_6týWõfúæùø¸8@þ¢ñßÿzèý\à“Âýúÿf
+ýY ŽÿPM>F û“óPsþ_Ôãý?y¸ù¿’Ì&Ý‚O7ØøN}{ÜÞnoþí6تþ›AŸ®9 ÷3Üë¿ùù¿X%Xÿ± )ˆ^ÿÙsÿÿØÿɆ¬ÿcW½š5îoŠÿ;ŠÓúç`òwÖÍ—Çϸ^"Þú×ei
+¿àîø¿8ÿ¦¨ÿ°€óß²!ÇÛø«5æ¸âîø¿èÿk¯„‡þøåR÷—¶mºqJÿS8Öé?Ž)}nL;üÕõŸì?ÊT¨Pÿá`õøMÛœšç7Â/‚÷ø‡AfïÀøïÿø»û§ÕÅgýlòʵp¯ÿÃÙøÇi‚ý?b¾hüõ_4Ý
+͏¿þm8èŸlÿeCÔ_=Ù,@¿æúúOçñ?ɐÿc!Jãs€Xüõ?¼tF}f ·þ£™þÀÿÃBŒûEs·þW<鵈ÿA‚ü?ÖÛûßÛ8`*ǝëÿUÏð×”àþ/ʲ„þ³ZÿE§û—¼n†º<Œ[ÿóõ¿ŠbÄ”=jõ¿LÇ¿HÖëºÿô+qÏú¯JcÔ9ðÿéþÇÐó×ÀüÇPÿg6þ}õ÷–÷ÿþ£ÿÓTÿcäÿXHTø"¿\hú?™WsZý·þ—õÿûPÿ—
+MÿEób:Ûó1·—çŽå€[ÿ‹ú_„þo<¤¨ÿ‰†¦ÿoàIþ­î†©ìÏðÿiˆû¿yÀýß²¡éÿ‹~ëó¦Ìu?þíÊ^T
+÷ô^ÄÿLÁÿÏ‚J1H†˜ÿ{Ñݵ@~Ö­ëNý/ý?aŒý?ðÿÈæný¯8 àÿã8ÆþŸøeCÓÿðÖnYÿSóúo&ôÏÁŸuUVæˆI@(4ý×—ó“élÀ¶r=Ãÿãyüÿã!A0ÑPôpø¿"ø¿8 ÿÖþ¯ùü†1ú?³Æ°I†¦ÿüŸ, þ+šþ÷÷¨ÿ° ÿ—lhúgðaýÏâ¿lhúßÚÿ5×2Ýÿ	ýﲿ²!æÿö÷aÿÏü_²¹[ÿ;ù¿Ðÿ‰ø¿dCÓÿÆþ¯ôH°ÿgá7=hÌ r¡éŸÁÿý³ ÿ—l(ú8ü_)ü_ÐÆkÿ×<ÿâü‰R8ÀäBÓÿîþ¯8@ý‡Üÿ'šþúaÿÇü_²!êßþ«^?LîÒ©Sÿ‹þÿñ¸ €þ9¾Þó€DhúgðÂÿÁüŸ²¡éŸ¡ÿÎÿ³0H†˜ÿßÝÿ‰þ?<”üŸ’¹[ÿ›ø?úáÿæ!ãºMÿýÿÐÿ“ôÿ“Íùåx†[ÿ?ÈÿCÿ, ÿ/šþ·öÏÏÄQ€û¿YPY€@CÑ¿âðãþohãÏÐÿ÷?±€þŸ²¡éŸ¡ÿ'Ö,Àÿ!šþüߨÿ² ÿ·lhúgðbýÏâ¿lhúgèÿ‰úèþ!bþoÿþŸØÿ³€þŸ²¹[ÿ{ÝÿŒý?èÿ)šþ·ö.ë	öÿ,ü^÷Cw)lö@húgèÿ	ý³€þŸ²Y­ÿ¦¶¹~Ò3üóAbýÏòÿ²YÿÛKÙ™¿<­ŸVá~þÏ IÑÿ—ïñïÌI×܏sá÷Žþ'R	ú°€ül¼õ?¾VuÙäÅ¥Ëí+ž
 áÎÿÌçÿ8ˆPÿeAeÓ`Š·þûBÁç\¿êê4ÿµ_L]T惁SÿÉ\ÿi¢Ðÿƒ…wý?¨èýU½¿^Gæáp}Áüð“BÖÿsójººéV<Ãÿùß ýxhMW6ÝY×…Æ²Aü¿Í¦œúO³…ÿþЦîM÷j-¼æ¡©fœ
+Ž—ñ³¾Õ…yh›/ã[=þáw3–?
+dýï¼ÿGÿ°ÿ—·þŸª¦ÏOÕ¹Z¯ý‡i„ûX€þeCŽÿgýu×øý³ ýˆ\ÿ:]÷Ó©ïÜêâžóŸóþ©ÂþŸ‡Ä/²þwŽÿ!òÿ, þˆ®ÿªÞLÿÁ<ÿÿÈ_4þûÿA½Ÿ|R¸_ÿß,Dÿ_ˆã?Tg“Àþä<äœÿõß8FÿOnþ¯dT\œüïÓÍ|º9ÁÆwÁíÝáöæßþgƒ ê¿ôéšr?ýþ›Ÿÿ‹U†õ²lèõŸ}÷ðð€ýŸlÈú?vÕ«Yãþ¦ø¿£8Ë &gÝ|yüŒ‹à%â­]–¦ð; îŽÿ‹óßa†ú8ÿ-rü·¿ZcŽ+žáŽÿ‹þ¿Aÿ¿\êþÒ¶M7Né¿b*Ç:ý‡ÿ£ôý¹1íðWׯyBe*T¨ÿp°zü‡¦mNÍóáÁ{üà ³ë?Œÿþøÿ·»Z]|ÖÏ&¯\k ÷ú?œœ¢ÿ/èþ)ýM·Bóßã¯ÿ0RèÿÆBý‹†¨ÿ¾z²Y€~Íõ+ôŸÎã‚ú?aüa‹¿þ‡—Îè£ÏàÖ4Ó¢äÿYÿñKæný¯x†Sÿjÿƒþì×ÿßð}0ˆãÎõÿªgøë?J"øX¿ýò¿e	ýeµþ‹N÷/yÝuyþ·þçù?¡ÿ+ETFI¦ch_&ëõ?ÝÿGz†•¸gýW¥8ÿÉ‚çøO÷?†ž¿þã?þ€ú?´ñï«¿·¼ÿ÷ýŸ¦ú_ˆøÏC¢Â?úåBÓÿɼšÓêg¸õ¿¬ÿãüðÿȆ¦ÿ¢y1íù˜ÛKsÇrÀ­ÿEý/R¨ÿ³âühhúÿæžäßên˜:Á~ðÿøŸ†ü,àþoÙÐôÿE¿õySæºÿve/ª†{ú?/â¦àÿgA¥˜ $CÌÿ½èîÚ ?ëÖõ§þ—þŸ0ÆþŸûõÃÿ#—»õ¿â €üãûàÿ•
+MÿÃ[»eýOÍë¿a˜àþþ¬«²2GLB¡é¿¾œŸLg3 ¶
+ëîøÏã„ü‰BP2ýþ¯þ/h㿵ÿk>ÿ‡aŒþo,¤1ì_’¡éŸÁÿÿ'¨ÿʆ¦ÿýý_ê?,Àÿ%šþü_Xÿ³€ø/šþ·öÍõŸd
+õý•
+1ÿ·¿ÿûì×ÿ—\îÖÿNþ/ôâþ/ÙÐô¿±ÿëýìÿYøM3€\húgðAÿ,Àÿ%Šþ#ÿW
+ÿ´ñßÚÿ5Ïÿ„8ÿÇD¢Ô0¹Ðô¿»ÿ+Pÿa!‚öECÓ?Cÿ/ìÿX€ÿK6DýÛòcÕë§“É]:uê_-ê?ã úç øzÌ¡éŸÁÿ	ÿðʆ¦†þ8ÿÏB|À bþwÿ'úÿð`¿þÿF¸ÿO*wëÿçBÿ1üß<„ñ#, ‚¡éŸ¡ÿú²€þ²Ù"ÿ¯ÏpëÿùèŸäÿeCÓÿÖþïùù8·Ð?*pˆ`(úWþoÜÿÍmüúâþ'ÐÿS64ý3ôÿÄúø?dCÓ?ƒÿõ_àÿ–
+MÿþO¬ÿY@ü—
+Mÿý?QÿaÝ?dCÌÿíßÿûì׏þŸr¹[ÿ{ÝÿŒý?0ʆ¦ÿ­ýŸËú_‚ý?¿×ýÐ]
+›½ÁD šþúBÿ, ÿ§lVë¿©m®Ÿôÿü_…Xÿ³€ü¿lÖÇÿöRvæ/Oëç„U¸Ÿÿ3HRôÿeÁ{ü;sÒÃ5÷ã\ø½ãŸÿ‰T‚þ, ÿ#oý¯U]6yqérûÁŠg¸ó?óù?"ÔYPÙ4˜„â­ÿ¾ÐãFð9ׯº:MÇíÇS•ù`AàÔ2ך(ôÿ`á]ÿ*zUï¯×‘y8\_0?ü¤õÿܼš®nºÏpÇÿEþ7@ÿZÓ•MwÖua qlÿo3Á‡é §þÓláÿ†ÿƒ‡¢©{Ó½Z¯yh꣧‚ãÃeü¬ouaÚæËøVøÝLåÀOYÿ;ïÿÑÿƒìÿeã­ÿ§ªéóSu®Ö«Á_ÿaáþ ِãÿYÝ5þCÿ,@ÿ²!×ÿ†N×ýtê;·†€º¸çüç¼ÿ_ª°ÿçá ñ‹†¬ÿãˆü?ˆÿ²¡ë¿ª7Ó0ÏÿÃÿÃÅòÿþÐCïçŸî×ÿ7Ñÿ—âøÕÙäc°?99çÿEý7ŽÑÿ“‡›ÿ+§"õéæ>Ýœ`ã»àöîp{óoÿ³ÁFPõßút͹Ÿá^ÿÍÏÿÅ*ÃúHY6ôúϾû?ø?xÀþO6dý»êÕ¬qSüßQœeÐ?“¿³n¾<~ÆEðñÖ¿.KSø wÇÿÅùï0Cý‡œÿ–
+9þÛÆ_­1ÇÏpÇÿEÿß „ÿ‹…_.uiÛ¦§ô_1ˆc¥þCJߟÓuý'úO 2eûÿ£þ³?«ÇhÚæÔ<¿~¼Ç?²4Áøsà?þßîþiuñY?›¼r­Üëÿp6þqŠû?y@ÿ?Ùøë¿hºšÿý‡Q€þo,àú?ÙõßWO6Я¹þc…þÓyüORÔÿYPáca‹¿þ‡—Îè£ÏàÖ4Ó ÿÏCˆöÿ¢¹[ÿ+žáÔ¿ZÄÿ ÷ÿñ`¿þÿA<¦qܹþ_õýGIÿïú/Ëú—Èjýî_òº>êòü1nýŸÿíù¯ñôÏÁ!N#•éÚ—ÉzýO÷ÿ‘ža%îYÿîAýw<ǺÿÑ×â?þ*ŠQÿg6þ}õ÷–÷ÿþ£ÿÓTÿw ˆÿ$*ü¡_.4ýŸÌ«9­~†[ÿóõ¥Èÿ±€ô¿lhú/šÓÙž¹½8w,ÜúfúO¢ ýYHa 
+Mÿß<À“ü[Ý
+S'ØžáÿS•ÁÿËü¿²¡éÿ‹~ëó¦Ìu?þíÊ^T
+÷ô^Äÿýßy
 P)& Éó/º»¶ ÈϺu=éÿ¥ÿ'ŒPÿgÁ~ýðÿÈåný¯8 àÿ'ýÇèÿÌü¿²¡éxk·¬ÿýãþ‡ðZÿCügáϺ*+sÄ$ šþëËùÉt6`Û ¹žáŽÿñLÿqˆü‰Â@2ý»ú¿®þß8„ÿ‹ÚøoíÿšÏÿãúû?Òö/ÉÐôÏàÿÂùPÿ•
+Mÿ»û¿BÜÿÄü_²¡éŸÁÿ…õ?ˆÿ²¡ékÿ×\ÿIŠû_x@öW6Äüߎþ¯kýýx°_?ü_r¹[ÿ›û¿&ýÇ!öÿ,Àÿ%šþ7öý£ÿõþcÿÏÂozИäBÓ?ƒÿúgþ/ÙPôqôÿJáÿâ€6þ[û¿æçÿàÿç"Qê ˜\húßÓÿu½ÿ+Cÿp÷lhúßÓÿ]û¡ÿðɆ¨ûC~¬zýt2¹K§Ný«Åùÿ0Büg!øzÌ¡éOÿgtõ¢ÿ7ðʆ¦ÿ=ûÿE×þð±0H†˜ÿß½ÿ_Œõ?öë·÷ÿ؈änýoâÿ\è?Æý?<¨Ãcˆ€\húß³ÿ_ÿ'#èÿ'›-òÿÊñRþúgùÙÐô¿µÿ{~ÿgŒþ/L¨,À
+ ‚¡è_qôÿŒàÿæ€6þý?áÿbý?eCÓ?CÿOäY€ÿC64ý3ôÿÄù/àÿ–
+Mÿý?±þgñ_64ýïÞÿ3àÿbÝ?dCÌÿíßÿûì׏þŸr¹[ÿ{õÿÄþŸôÿ”
+Mÿ[û?—õ¿û~¯û¡»6{ƒ‰@ 4ý3ôÿ„þY@ÿOÙ¬ÖSÛ\?éþù¿ 
+°þgùÙ¬ÿí¥ìÌ_žÖÏ	«p¿þ¿A’ ÿ/Þãß™“®¹çÂï¿üÿHÅèÿÁò?²ñÖÿøZÕe“—.·¬x†;ÿ3Ÿÿã Äù?T6 &¡xë¿/ô¸|Îõ«®NÓñ_ûñÅÔEe>X8õŸÌõŸ&ê¿,¼ëÿAEï¯êýõ:2‡ë懟²þŸ›WÓÕM·âîø/â?ü<´¦+›î¬ëÂ@ãÙ þßf‚ÓNý§Ù<þ£ÿ7ES÷¦{µ^óÐÔG3NÇ‡ËøYßêÂ<´Í—ñ­ÿð»™ˁŸ²þwÝÿGúð€ý¿l¼õÿT5}~ªÎÕz5øë\ ÀÿÁô/rü?믻ÆèŸè_6äúßÐ麟N}çÖP÷œÿœ÷ÿKöÿ< ~ѐõ¿kü…ü?ˆÿ²¡ë¿ª7Ó0ÏÿÃÿÃÅòÿþÐCïçŸîåÿV™Šáÿæ€8þCu6ùìOÎCAÎùQÿãõnþ¯$£ÿeé§›,øts‚ï‚Û»ÃíÍ¿ýÏAÕ3èÓ5ä~†{ý7¿ÿ9V)Ö,@ʲ¡×öÜÿÁÿÁö²!ëÿØU¯fû›âÿŽâçÿY˜üuóåñ3.‚—ˆ·þuYšÂï ¸;þ/·¸ÿƒœÿ–
+9þÛÆ_­1ÇÏpÇÿÅýÿ‹…_.uiÛ¦§ô_1ˆcþãÒ÷çÆ´Ã_]ÿÉþ¨L©õVÿдͩy~#ü"xdîÿdÁü¿ÝýÓêâ³~6yåZ¸×ÿálüã4AþŸ…1_4þú/šn…æ¿Ç_ÿa„õ?Hýˆ¨ÿ¾z²Y€~Íõ+ôŸÎã‚ü?Qúg˜Äâ¯ÿá¥3úè3¸õÍôŸ¨ñ#蟁ùÑÜ­ÿÏpê_-␠ÿ3öæ¿ÿÞÆS8î\ÿ¯z†¿þ£ýy(ËúÌjýî_òº>êòü1nýÏ×ÿ*Âý<¨8NC•éâÉzýO÷ÿ‘ža%îYÿUiˆú/žã?ÝÿèkñÿñÔÿY _ý½åý¿ÿèÿ”]ïÿEþ…D… òË…¦ÿ“y5§ÕÏpëYÿϰÿgéÙÐô_4/¦³=s{)pîX¸õ¿¨ÿáþ_&Ò€dhúÿæžäßên˜:Á~ðÿøŸ†ü,àþoÙÐôÿE¿õySæºÿve/ª†{ú?/â¦àÿgA¥˜ $CÌÿ½èîÚ ?ëÖõ§þ—þŸ0ÆþŸøds·þW ðÿ
 qaÿÏü¿²¡éxk·¬ÿ©yý7côÿcáϺ*+sÄ$ šþëËùÉt6`Û ¹žáŽÿñ<þGÈÿñ(, $CÑÀáÿRðq@ÿ­ý_óù\ÿáþ?Òö/ÉÐôÏàÿ‚ÿ“ÔeCÓ?ƒÿõàÿ’
+Mÿþ/¬ÿY@ü—
+Mÿ[û¿æúO² õý•
+1ÿ·¿ÿûàÿ’ÍÝúßËÿ…ý?ðɆ¦ÿý_?èÿ`ÿÏÂozИäBÓ?ƒÿúgþ/ÙPôqø¿bø¿8 ÿÖþ¯yþ'Äù?&¥p€É…¦ÿê?,àþ?ÙÐô¿¿ÿKaÿÇü_²!êßþ«^?LîÒ©Sÿ‹þÿq!þ³|½
+æ‰ÐôÏàÿ„ÿƒø?eCÓ?Cÿ?œÿg!>`1ÿ¿¿ÿëÊþOÉÜ­ÿMüŸýÇðó‡qÝ‹…¦†þèÿÉúÿÉf‹ü¿r<íÿäÿ¡ÿ—
+Mÿ[û¿çç?â(Àýß,¨,À
+ ‚¡è_qø¿qÿ7´ñgèÿ‰ûŸX@ÿOÙÐôÏàÿÆúø?dCÓ?CÿOÔY€ÿ[64ý3ø?±þgñ_64ý3ôÿDý‡tÿ
+1ÿ·¿ÿûÐÿS6wë¯þŸØÿ³€þŸ²¡ékÿç²þ—`ÿÏÂïu?t—Âfo0„¦†þŸÐ?èÿ)›Õúoj›ë'=Ã?ÿD
+ëÿ—Íúøß^ÊÎüåiýœ°
+÷óIŠþ¿,xgNz¸æ~œ¿wüó?‘JÐÿƒädã­ÿñµªË&/.]n?Xñwþg>ÿÇAˆú/*›F “€P¼õßzÜ>çúUW§éø¯ýøbê¢2,œúOæúO…þ,¼ëÿAEï¯êýõ:2‡ë懟²þŸ›WÓÕM·âîø¿ÈÿèÿÃCkº²éκ.4.
+âÿm&ø0àÔš-üßððP4uoºWká5M}4ãTp|¸ŒŸõ­.ÌCÛ|ßêñ¿›)°øi ëçý?úð€ý¿l¼õÿT5}~ªÎÕz5øë?L#ÜÿÃô/rü?믻ÆèŸè_6äúßÐ麟N}çÖP÷œÿœ÷ÿKöÿ< ~ѐõ¿sü‘ÿgñ_6týWõfúæùø¸8@þ¢ñßÿzèý\à“Âýúÿf!úÿ²@ÿ¡:›|Œ ö'ç¡ çü¿¨ÿÆ1úòpó%Ùø¥«øÓÍ|º9ÁÆwÁíÝáöæßþgƒ ê¿ôéšr?ýþ›Ÿÿ‹UŠõ²lèõŸ}÷ðð€ýŸlÈú?vÕ«Yãþ¦ø¿£8K &gÝ|yüŒ‹à%â­]–¦ð; îŽÿ‹óßa†ú8ÿ-rü·¿ZcŽ+žáŽÿ‹þ¿Aÿ¿\êþÒ¶M7Né¿b*ÇJýSÚþ|cÚᯬÿÄÙ¨•Mç?QÿÙŸµã?4msjžßöîÿ4d*Ãøsà=þß®þiuñY?›¼r.Üëÿp6þq‚ý?HýÉÆ[ÿEÓ­Ñü÷øë?Äùo&pýŸlhúï«'›è×Üþáwþãÿú?²<*´ Œ·þ‡—Îè£×àÿ“ Dügñ_6÷êÍ3œúÿ.ÿÿÿœÿæÁ~ýï÷ÿ)ääqßúÝ3üõÅ)îÿaáÿô_–%ô/޵ú/:Ý¿äu3|Ôäùÿƒ[ÿóú
+SäÿYPO*Ó1"¿TVëºþö+qÏú¯
+RÔ9ðÿéúÇÐ÷×ÀüU˜¡þÏiüûêoŸ› ñ‘ÿqþ‰D… øË…¤ÿ“y5§õÏpëQÿBìÿY€ý_6$ýÍ‹élËÇÜÞ	œ»–nýGóú_áü)
+€¢!éÿ›x’«»ajûÑ3üãªPÿçæِôÿE¿õySæºÿre惘Û?Sâ!ÿÏ‚J1H†–ÿ{Ñݵ@~Ö­óNý/ý?*ÃþŸûõÃÿ#—{õ¿æ €ÿú?ŽRøÿYÀö_6$ýoí¦õ¿…ÿÇ6€†þ9ø³®ÊÊ1…¤ÿúr~2Í Ø.@Îg¸ã<ÿ!ò<$
+@Éô°ø¿ø¿8 ÿæþ¯ùüªýŸYHcØ¿$CÒ?ƒÿKÁÿÉ꿲!éŸÃÿ…úðɆ¤ÿÖÿ, þˆ¤ÿÍý_‹þOi„úÈþʆ–ÿÛßÿ…óŸ<دþ/¹Ü«ÿÝü_èÿƶÿ²!ékÿ×ú?àþw~ÓƒÆ ’þ9ü_Ð?ðɆ ÿˆÁÿÙþÏðíiü7÷Íó?!Îÿ1‘(u€L.$ýsôÿBý‡…Ú
+Iÿþ/ìÿX€ÿK64ýÛòcÕ맓ɝ2uê_Íõ+œÿç!øzÌ!éŸÃÿ	ÿðʆ¤Žþ8ÿÏB|À ZþŸ¡ÿÖÿ,دÿÝÿáþ?yÜ«ÿmüŸÿG„ûÿx¨^0$ýsôÿÃý, ÿŸl6Èÿ+×3ÜúÿAþúgùِô¿¹ÿ{~þ##œÿbAen AÿŠ¥ÿ'îÿf4þý?‘ÿaý?eCÒ?‡ÿë?àÿ
+IÿþoÔY€ÿ[6$ýsø?±þgñ_6$ýsôÿDý‡tÿ
+-ÿÇàÿÄþŸûõ£ÿ§\îÕÿný?Ñÿ…lÿeCÒÿæþÏeý/ÃþŸ…ßë~è.…Mß`&Iÿý?¡ÐÿS6kõßÔ6×O{†ÿúßÎ Ð?ÈÿËfuüo/egþòµ~NX…ûù?ƒD¡ÿ/¾ãß™“®¹÷Âïÿù?
+°ÿãùÙøê|­ê²É‹K—ÛÖ<Ýÿ™ÏÿQ– þ˂ʦÀ, _ý÷…7‚Ϲ~ÕÕi:þk?¾˜º¨ÌG§þ“¹þÓ8Bÿ?Þõÿ`oܘ^Õûëud×Ì?)Tý?7¯¦«›nÍ3Üñžÿ2ÜÿÊCkº²éκ.4.ûãÿm&ø8àÔÿ(ö¹ÿý¿y(šº7Ý«õ𚇦>šq*8>\ÆÏúVæ¡m¾Œoõø‡ßÍXü4Põ¿÷þý?xÀþ_6¾úªš>?UçÊCþú“÷ÿ° ýˆÿÏúë®ñ÷?ó ýˆZÿ:]÷Ó©ïÜêâ®óŸóþi€ý?ˆ_4TýïÿcäÿY@ü—
+YÿU½þƒyþþ.¿h¼÷ÿƒzOø¤p¿þ¿iŒþ¿,ÐÆ¨Î&#€ýÉ}(È9ÿ/ê¿qŒþŸ<Üü_IFÉÿÔ§›,øts‚ï‚Û»ÃíÍ¿ýÏAÔ3èÓ5´âîõߢÿÇø#ôϤ,rýgçýü<`ÿ'ªþ]õjV¹¿Iþï8Dÿ/&gÝ|yüŒ‹à%â«]–¦ð< î¿þB•Bÿàü·l¨ñß6þj9®y†;þÏûÿFYÿ¿\êþÒ¶M7Îé¿b.Ç:ý«˜Ôøçi‡¿²þ“ê?Êúÿð°zü‡¦mNÍóáÁ{üà KcŒ?þãÿíòŸVŸõ³É+×"Àgýÿ8Eÿ?ÐÿO6þú/šn…æ¿Ç_ÿa þǺÿʆ¨ÿ¾z²i€~£û?ÒyüORÔÿXPáca‹¿þ‡—Îè£ÏàÖ4ÓdÈÿ± P ÍÝú_ñ§þÕ"þ1ú?³`¿þéþ¿8€
+H w®ÿW=Ã_ÿQ¢þÏ»þ˲„þ%²ZÿE§û—¼n†Û<ˆ[ÿóüŸßAÿ¤Qþ/Ó1´/“õúŸ. $=ÃJܳþ«ìùoÔ÷Çsü§ ÃÏÿÞæÿõhãßW{ÜèÎÿ%óú_ˆøÏC¢Â?úåBÓÿɼšÓêg¸õ¿¬ÿ§Øÿ³€ú¿lhú/šÓÙ¦¹½8w,Üú_Ôÿ¢ õRÔÿDCÓÿ7ð$ÿVwÃÔ
+öƒgøÇÿTeðÿ± ÿ¯lhúÿ¢ßú¼)sݏ»²—UÃÇ
+ 	ñ?àÿgA¥˜ $CÌÿ½èîÚ ?ëÖõ§þ—þŸ0ÂþŸûõÃÿ#—»õ¿â €ücôÿâþ_ÙÐô?¼µ[ÖÿÔ¼þ†¸ÿ‡?몬Ì“€Phú¯/ç'ÓÙ€íäz†;þÇ‹õ?ò<$
+@ÉPôpø¿Bø¿8 ÿÖþ¯ùü?®ÿÐÿ•…4†ýK24ý3ø¿àÿdõ_ÙÐô¿»ÿ+ÌPÿaþ/ÙÐôÏàÿÂúŸÄÙÐô¿µÿk®ÿ$ÍPÿaÙ_Ùóûû¿°ÿgÁ~ýðÉånýïäÿBÿ'àÿ’
+Mÿû¿~Ðÿ!ÆþŸ…ßô 1È…¦ÿôÏü_²¡è?âð%ðq@ÿ­ý_óüOˆóL$Jà “Mÿþ/ÔXÀÝ?²¡éŸ¡ÿö,Àÿ%¢þíù±êõÓÉä.:õ¯õŸ0Düg!øzÌ¡éŸÁÿ	ÿðʆ¦†þ8ÿÏB|À bþÿ'Öÿ,دßú?#Üÿ'’»õ¿‰ÿs¡ÿþoTø¨2è^,4ýïßÿ/FÿOÐÿO6[äÿ•ã”ü?úÿò€ü¿lhúßÚÿ=?ÿ‡Yýs ² 7€†¢ÅáÿÆýß,ÐÆŸ¡ÿ'îbý?eCÓ?ƒÿë?àÿ
+Mÿý?QÿeþoÙÐôÏàÿÄúŸÄÙÐô¿{ÿÏ,@ý‡tÿ
+1ÿ·¿ÿûì׏þŸr¹[ÿ{õÿÄþŸôÿ”
+Mÿ[û?—õ¿û~¯û¡»6{ƒ‰@ 4ý3ôÿ„þY@ÿOÙ¬ÖSÛ\?éþù¿ 
+°þgùÙ¬ÿí¥ìÌ_žÖÏ	«p?ÿg$èÿË‚÷øw椇kîǹð{Ç?ÿ©ý?X@þG6Þú_«ºlòâÒåöƒÏpçæó<† 蟕M#€I@(Þúï=nŸsýª«Ótü×~|1uQ™Ný'sý§I€þ,¼ëÿAEï¯êýõ:2‡ë懟²þŸ›WÓÕM·âîø¿ÈÿèÿÃCkº²éκ.4.
+âÿm&ø0àÔšÍã?ú3Q4uoºWká5M}4ãTp|¸ŒŸõ­.ÌCÛ|ßêñ¿›)°øi ë×ý”¡ÿØÿËÆ[ÿOUÓç§ê\­Wƒ¿þÇ îÿaú—
+9þŸõ×]ã?ôÏô/rýoètÝO§¾sk¨‹{ÎÎûÿ¥
+û¿hÈúß5þǶ$ ý3€ø/ºþ«z3ýóü?ü?\ Ñøïÿ=ô~.ðIá~ý3…þ¿,ǨÎ&#€ýÉy(È9ÿ/ê¿qŒþŸ<Üü_IF‡ útóŸnN°ñ]p{w¸½ù·ÿÙ`#¨úo}ºæ€ÜÏp¯ÿæçÿb•býǤ,zýgÏýü\`ÿ'²þ]õjÖ¸¿)þï(NS蟃ÉßY7_?ã"x‰xë_—¥)ü€»ãÿâüw˜¢þÃΈÿmã¯Ö˜ãŠg¸ãÿ¢ÿo àÿbá—KÝ_Ú¶éÆ)ýWLâX¡ÿ¶3½©ïøåwÇÿÿóÅYúŸ@e	òÿ<qÙËeeü(}¿nL>Ÿú¯Ê”íÿ‡úïþ¬ÿ¡i›SóüFøEðÿ0ÈRÔÿYðÿowµºø¬ŸM^¹ö îø¿¨ÿ¥1Öÿ, ÿ§lüõ_4Ý
+͏¿þÃ(@ÿo ÙõßWO6د¹þg…þù¿$Áù/TøF˜Äâ¯ÿá¥3úè3¸õ¿¸ÿ;ÈÐÿ™ñ‹æný¯x†Sÿ?¨ÿŨÿ³`¿þéþÏ0€
+P w®ÿW=Ã_ÿQ¢þÇ»þ˲„þ%²ZÿE§û—¼n†º¼Œ[ÿßçÿ{þ3Аÿc!Ê0ÉtíËd½þ§û?Iϰ÷¬ÿª$Dý—ÏñŸî
+=
+üÇ_E1êÿ,ÐÆ¿¯þÞòþïEÿ·0Œÿc!Qáýr¡éÿd^Íiõ3Üú_Öÿáÿå·ˆ¦ÿ¢y1íùšÛKÁsÇrÀ­ÿEý/ÌPÿg!Åù?ÑÐôÿÍ<É¿ÕÝ0u‚þàþñ?Uò,Àÿ'šþ¿è·>oÊ\÷ãß®ìåaÕpOÿ÷EüÏøÿYP)& Éó/º»¶ ÉϺu=éÿ¥ÿ'Œ°ÿgÁ~ýðÿÈåný¯8 àÿã÷¿ð ÿ¯lhúÞÚ-ëËûÃýÿXø³®ÊÊ1	…¦ÿúr~2Í Ø6`®g¸ãÿ¼ÿçþ‘ÿc!Q¨ J†¢ÿ`Wÿ×Õÿðq@ÿ­ý_ñlüG°ÿc!aÿ’Mÿ{ú¿‚«ÿë?Pÿ•
+Mÿ{ú¿‚«ÿç¿Y€ÿK64ýïéÿ
+&ÿWŠõ?ˆÿ²¡ékÿ×\ÿIŠûßx@öW6Äüߎþ¯àêÿÂþŸûõÃÿ%—»õ¿¹ÿ+¸ú¿°ÿgþ/ÙÐô¿±ÿëý®õ¿û~ÓƒÆ šþ÷ô]×ÿÈÿñ ÿ—l(ú÷½Î*Ü»ÿWÿ´ñßÚÿ5?ÿâü‰R8ÀäBÓ?Cÿ/œÿaéÙÐô¿{ÿ¯hücèŸø¿dCÔ¿ý!?V½~:™Ü¥S§þÕâü"þ³|½
+æ‰ÐôÏÐÿý¿Y€ÿS64ý3ôÿƒÿ‹…ø€	@2Äüÿþýÿ°þgÁ~ýÖÿáþ?‘Ü­ÿMüŸýǸÿ‡>ªºMÿýÿàÿbýÿd³Eþ_9žAÊÿCÿ, ÿ/šþ·öÏïÿŒÑÿ…	•¸D0ý+ÿ7îÿf6þ{öÿ|ßÿáþ'ÐÿS64ý3ø¿±þcþÙÐôÏpÿ3ê¿,Àÿ-šþüŸXÿ³€ø/šþ÷ìÿ©®ý?QÿaÝ?dCÌÿíïÿÄþŸûõ£ÿ§\îÖÿ^÷?cÿÏúʆ¦ÿ­ýŸËûÿbô`á÷ººKa³7˜BÓ?ÃýÏÈÿ±€þŸ²Y­ÿ¦¶¹~Ò3üò6þQ€þ, ÿ/›õñ¿½”ùËÓú9aîçÿ’ýYðÿΜôpÍý8~ïøç"£ÿÈÿÈÆ[ÿãkU—M^\ºÜ~°âîüÏ|þ…ú/*›F “€P¼õßzÜ>çúUW§éø¯ýøbê¢2,œúOæúO“ ý?Xx×ÿƒŠÞ_Õûëud×Ì?)dý?7¯¦«›nÅ3Üñ‘ÿ
+Ðÿ‡‡Öteӝu]h\ ÄÿÛLða:À©ÿ4›Çôÿf¢hêÞt¯ÖÂkšúhÆ©àøp?ë[]˜‡¶ù2¾Õã~7S`9ðÓ@Öÿ®ûÿ(Cÿ°ÿ—·þŸª¦ÏOÕ¹Z¯ý ø¿X€þeCŽÿgýu×øý³ ýˆ\ÿ:]÷Ó©ïÜêâžóŸóþ©ÂþŸ‡Ä/²þwÿ±m	ý3€ø/ºþ«z3ýóü?ü?\ Ñøïÿ=ô~.ðIá~ý3…þ¿,ǨÎ&#€ýÉy(È9ÿ/ê¿qŒþŸ<Üü_IFÙA}ºùÀ‚O7'Øø.¸½;ÜÞüÛÿl°Tý7ƒ>]s@îg¸×óþ_±J°þcR–
+½þ³çþþ.°ÿ“
+YÿÇ®z5kÜßÿw§8ÿÏÂä﬛/Ÿq¼D¼õ¯ËÒ~ÀÝñqþ;LQÿaç¿eCŽÿ¶ñ
 WkÌqÅ3ÜñÑÿ×–„¡~¹Ôý¥m›nœÒÅT Žuú”¾?7¦þêúOúŸÀ–"Ô8X=þCÓ6§æùð‹à=þaÙû0þûã?þßîþiuñY?›¼r­Üëÿp6þãöû°ü—¿þ‹¦[¡ùïñ×)ø¿Y@÷_ÙõßWO6Я¹þc…þÓyüO2äÿXˆÒÇ8à ý/ÑGŸÀ­ÿh¦ÿDðÿ°¡ì'š»õ¿âNý«EüRäÿY‚øzÿŸS8î\ÿ¯z†¿þÇ÷¸ÿ‡…²,¡Á¬ÖÑéþ%¯›á£.ÏãÖÿ|ý?þ€øÏ‚
+£2ü_¦cˆ_$ëõ?ÝÿGz†•¸gýW¥)ê¿xŽÿtÿcèùkà?þã¨ÿ³@ÿ¾ú{ËûÿÑÿ)½Þÿ‹ü‰
+ÿ@ä—Mÿ'ójN«ŸáÖÿ¢þØÿ³€ú¿lhú/šÓÙž¹½8w,Üú_Ôÿ"ôã!1H†¦ÿoàIþ­î†©ìÏðÿiÀÿÇîÿ–
+Mÿ_ô[Ÿ7e®ûñoWöò j¸§ÿó"þg
+þTŠ	@2Äüß‹î®- ò³n]Ïpêéÿ	ìÿY€ÿG6wëÅ ÿøÇ1öÿ,Àÿ+šþ‡·vËúŸš×Ã0	¡þ¬«²2GLB¡é¿¾œŸLg3 ¶
+ëîøÏã„ü‰BP2ýþ¯þ/h㿵ÿk>ÿ‡ãó?iû—dhúßÝÿeð²€ú¯lhúgð¡þÃü_²¡éŸÁÿ…õ?ˆÿ²¡ékÿ×\ÿÉtÿ'ô¿?Èþʆ˜ÿÛÝÿ…óŸ<Àÿ%›»õ¿—ÿûàÿ’
+Mÿû¿~Ðÿ!ÁþŸ…ßô 1È…¦ÿôÏü_²¡è?bðÙþÏðímü·öÍó?!Îÿ1‘(u€L.4ý3ôÿBý‡Üÿ'šþü_Øÿ± ÿ—lˆú·?äǪ×O'“»têÔÿ¢ÿ<þôÏAðõ6˜$BÓ?ƒÿþàÿ”
+MÿýÿpþŸ…þÑóÿû÷ÿÃúŸ… Âý’¹[ÿ›ø?úáÿæ!JcìäBÓ?Cÿ?ôÿdýÿd³Eþ_9žáÖÿòÿÐ?Èÿˆ¦ÿ­ýßóóq¤pÿ7*pˆ`(úWý?qÿ7´ñgèÿ‰ûŸX@ÿOÙÐôÏàÿÆúä~eCÓ?ƒÿõ_àÿ–
+MÿþO¬ÿY@ü—
+Mÿý?QÿaÝ?dCÌÿíïÿÄþŸôÿ”ÍÝúß«ÿ'öÿ, ÿ§lhúßÚÿ¹¬ÿ%Øÿ³ð{ÝÝ¥°ÙL¡éŸ¡ÿ'ôÏúÊfµþ›ÚæúIÏðÏÿQˆõ?ÈÿËf}üo/egþò´~NX…ûù?ƒ$Cÿ_¼Ç¿3'=\s?Î…ß;þùŸH%èÿÁò?²ñÖÿøZÕe“—.·¬x†;ÿ3Ÿÿã Bý—•M#€I@(Þúï=nŸsýª«Ótü×~|1uQ™Ný'sý§‰BÿÞõÿ ¢÷Wõþz™‡ÃõóÃO
+YÿÏÍ«éê¦[ñwü_äôÿá¡5]Ùtg]Èñÿ6|˜pê?Íþoø?x(šº7Ý«µðš‡¦>šq*8>\ÆÏúVæ¡m¾Œoõø‡ßÍXü4õ¿óþý?xÀþ_6Þúªš>?Uçj½üõ¦îÿaú—
+9þŸõ×=ã?îæú—
+¹þ7tºî§Sß¹5ÔÅ=ç?çýÿR…ý?ˆ_4dýïÿCäÿY@ü—
+]ÿU½™þƒyþþ.¿hü÷ÿƒz?ø¤p¿þ¿Yˆþ¿,ǨÎ&#€ýÉy(È9ÿ/ê¿ãê?,Üü_IÆQxøtóŸnN°ñ]p{w¸½ù·ÿÙ`#¨úo}ºæ€ÜÏp¯ÿæçÿb•aýǤ,zýgßýü<`ÿ'²þ]õjÖ¸¿)þï(	ôÏÁä﬛/ŸqT"Þú×ei
+¿àîø¿8ÿf¨ÿ°€óß²!ÇÛø«5æ¸âîø¿èÿ;þúçà—KÝ_Ú¶éÆ)ýWLâX§ÿ8 ôý¹1íðWײÿ*S*Aý‡ƒÕã?4msjžß¿ÞãY¦0þøÿ·»Z]|ÖÏ&¯\k ÷ú?œœâü7b¾hüõ_4Ý
+͏¿þCÜÿήÿ“
+Qÿ}õd³ ýšë?Vè?Çÿ$Eÿo¢ô1Î0ˆÅ_ÿÃKgôÑgpë?šé?Q¨ÿñ£ö/š»õ¿âNý«Eüœÿd!Pîÿ̝ëÿUÏð×”àüeYBÿ‚Y­ÿ¢ÓýK^7ÃG]ž?Æ­ÿ¹ÿGE1Öÿ,¨0*#•iìd²^ÿÓý¤gX‰{ÖUŠûXðÿéþÇÐó×ÀüÇPÿg6þ}õ÷–÷ÿ.ú?…aŒú‰
+ÿ@ä—Mÿ'ójN«ŸáÖÿüüoeÈÿ±€ÛeCÓѼ˜Îö|Ìí¥À¹c9àÖÿ|ÿŸDèÿÊC
+hhúÿæžäßên˜:Á~ðÿøŸ*œÿã÷ˆ¦ÿ/ú­Ï›2×ýø·+{yP5ÜÓÿyÿ³ ÷?³ RL ’!æÿ^twmŸuëz†SÿËó¿¸ÿ	øds·þW ð‹ÿ“ÿ/ŽàÿguÙÐô?¼µ[Öÿ–÷¿…1ü,üYWeeŽ˜„BÓ}9?™Îf l ×3Üñqÿ;ú1‘(T %CÑ¿o3 «pÏû¢÷?°@ÿ­ý_óù?±ÿã!aÿ’Mÿþ/ø?Y@ýW64ý3ø¿Pÿaþ/ÙÐôÏàÿÂúŸÄÙÐô¿µÿk®ÿ$PÿaÙ_Ùóûû¿°ÿgþ/ÙÜ­ÿÍý_éÕÿ…ý?ðɆ¦ÿý_?êÿ€ý?¿éAcMÿþ/èŸø¿dCÑÄÑÿ+„ÿ‹Úøoíÿš÷ÿ…ÿŸ‹D©`r¡éOÿ×õþ¯ýXÀý²¡éOÿWvõ¡ÿðɆ¨ûC~¬zýt2¹K§Ný«Åùÿ0Büg!øzÌ¡éOÿ§Õâþ?àÿ”
+Mÿ{öÿ›Öÿîÿæ!>`1ÿ¿£ÿóºþ±þg!ˆpÿŸdîÖÿ&þÏ…þcÜÿÇC”>ÆØÈ…¦ÿ=ûÿeð2‚þ²Ù"ÿ¯ÏpëÿùèŸäÿeCÓÿÖþïd®ôaBen EÿŠ£ÿgÿ7´ñgèÿ	ÿèÿ)šþú"ÿËr¿²¡éŸ¡ÿ'α ÿ·lhúgèÿ‰õ?ˆÿ²¡éŸ¡ÿ'ü_, û‡lˆù¿ýûbÿÏúÊænýïÕÿûÐÿS64ýoíÿ\ÖÿbìÿYø½î‡îRØì
+&ÐôÏÐÿúgý?e³ZÿMmsý¤gøçÿ‚HaýÏòÿ²YÿÛKÙ™¿<­ŸVá~ýƒ$Eÿ_¼Ç¿3'=\s?Î…ß;~ù;þ‘JÐÿƒädã­ÿñµªË&/.]n?Xñwþg>ÿÇAˆó,¨lLBñÖ_èq#øœëW]¦ã¿öã‹©‹Ê|° pê?™ë?Mê¿,¼ëÿAEï¯êýõ:2‡ë懟²þŸ›WÓÕM·âîø/â?ü<´¦+›î¬ëÂ@ãÙ þßf‚ÓNý§Ù¢ÿ/úóP4uoºWká5M}4ãTp|¸ŒŸõ­.ÌCÛ|ßêñ¿›)°øi ëçý?úð€ý¿l¼õÿT5}~ªÎÕz5øë\ ÀÿÁô/rü?ë¯ûÅÿ(ƒÿ‹è_6äúßÐ麟N}çÖP÷œÿœ÷
 ÿKöÿ< ~ѐõ¿küƒùÿeC×Uo¦ÿ`žÿ‡ÿ‡‹ä/ÿýÿ ‡ÞÏ>)ÜËÿ­²0€ÿ›âøÕÙäc°?99çÿEý7Ž3ÔX¸ù¿’,Œ£L}ºùÀ‚O7'Øø.¸½;ÜÞüÛÿl°Tý7ƒ>]s@îg¸×óûŸc•býǤ,zýgßýü<`ÿ'²þ]õjÖ¸¿)þï(ÎpþŸ…ÉßY7_?ã"x‰xë_—¥)ü€»ãÿâüwˆû?xÀùoِã¿müÕs\ñwü_Üÿn?‚þøåR÷—¶mºqJÿS8Vè¿)Krë¯	wüWßôgé•%!Öÿ,@ò²Y¡ÿ¾x—ûç"ŸöŠy¯_Çø¿¶÷“Å'ÿ?é?S…ü?XþËfåúß÷Êç0eø}ü*SvýÿÇþ¬ÿ¡i›SóüFøEðÿ0È2ôdÁü¿Ýý×êâ³~6yåÊøÄÿ÷ýŠþ<Dˆÿ¢ñ×Ñt+4ÿ=þú#ôã!þECÔ_=Ù*@¿æú¯ú_äÿ“ù¢ô1Î0ˆÅ_ÿÃKgôÑgpë^ÿOü<ĸ D4wëÅ3œúÿAý?Aý… Äý¿’¹sý¿êþúôá¡,Kè_0«õ_tºÉëføè–‡që¾þWQŒøÏ‚
+£2J2
+°LÖëºÿ—ô+qÏú¯Jê¿xŽÿtÿsèùkà?þã¨ÿ³@ÿ¾úÛÃìŒÿ‹þa#ÿÇB¢Â?ùåBÓÿɼšÓêg¸õ¿¬ÿgØÿ³Bü¢¡é¿h^Lg{>çödPîX¸õ¿¨ÿEêÿ,¤1& ÉÐôÿÍ<É¿ÕÝ0u‚ÿàþñ?
+øÿX@ù_64ýÑo}Þ”¹îÇ¿]ÙË«ážûñ?Sðÿ³ RL ’!æÿ^twm”Ÿuëz†SÿKÿOcÿÏü?²¹[ÿ+ øÇÿ8ްÿgþ_ÙÐô?¼µ[Öÿ–÷¿†1ú°ðg]••9b
+Mÿõåüd:›°m ]ÏpÇÿyÿß8Bþ‡D¡(Šþÿîb6þ[û¿æó¿5€`þç aÿ’Mÿþ/ø?Y@úG64ý3ø¿Pÿaþ/ÙÐô¿»ÿKeXÿ³€ø/šþ·öÍõŸdê?, û+bþoÿöÿ,Àÿ%›»õ¿—ÿûàÿ’
+Mÿû¿~Ôÿû~ÓƒÆ šþw÷…Èÿñ ÿ—l(ú8ü_ü_ÐÆkÿ×<ÿâü‰R8ÀäBÓ?ƒÿõpÿŸlhúgðaÿÇü_²!êßþ«^?LîÒ©Sÿ‹þÿq!þ³|½
+æ‰ÐôÏÐÿþPþ•
+MÿýÿpþŸ…ø€	@2ÄüÿþþO¬ÿY"Üÿ'™»õ¿‰ÿs¡ÿþo¢ôPÁÐôÏÐÿý?Y@ÿ?Ùl‘ÿWŽg¸õÿƒü?ôÏòÿ²¡ékÿ÷üüG¸ÿ›•¸D0ý+ÿ7îÿf6þû÷ÿŒqÿèÿ)šþüßXÿ±€Ü¯lhúgð£þËüß²¡éŸÁÿ‰õ?ˆÿ²¡éŸ¡ÿ'ê?, û‡lˆù¿ýýŸØÿ³€þŸ²¹[ÿ{õÿÄþŸ˜?eCÓÿÖþÏeý/ÁþŸ…ßë~è.…ÍÞ`"Mÿ÷?Cÿ, ÿ§lVë¿©m®Ÿôÿü_)¬ÿYÀò_6ëã{);ó—§õsÂ*ÜÏÿ$)úÿ²à=þ9éášûq.üÞñÏÿŒÓ?ú°€ül¼õ?¾VuÙäÅ¥Ëí+žáÎÿÌçÿ8QÿeAeÓ`Š·þûBÁç\¿êê4ÿµ_L]T惁SÿÉ\ÿi¢Ðÿƒ…wý?¨èýU½¿^Gæáp}Áüð“BÖÿsójººéV<Ãÿùß ýxhMW6ÝY×…Æ²Aü¿Í¦œúO³…ÿþЦîM÷j-¼æ¡©fœ
+Ž—ñ³¾Õ…yh›/ã[=þáw3–?
+dýï¼ÿGÿ°ÿ—·þŸª¦ÏOÕ¹Z¯ý ÜÿÃô/rü?ë¯ûÅÿ(ÃýÏ<@ÿ²!×ÿ†N×ýtê;·†€º¸çüç¼ÿ_ª°ÿçá ñ‹†¬ÿ]ã<n ÿeC×Uo¦ÿ`žÿ‡ÿ‡‹ä/ÿýÿ ‡ÞÏ>)ܯÿo¢ÿ/Äñª³ÉÇ`r
+rÎÿ‹úo£ÿ'7ÿW’…qô¿èÓÍ|º9ÁÆwÁíÝáöæßþgƒ ê¿ôéšr?ýþ›Ÿÿ‹UŠõ²lèõŸ}÷ðð€ýŸlÈú?vÕ«Yãþ¦ø¿£8‹¡&gÝ|yüŒ‹à%â­]–¦ð; îŽÿ‹óßa†ú8ÿ-rü·¿ZcŽ+žáŽÿ‹þ¿‚ÿ‹…_.uiÛ¦§ô_1ˆc¥þJߟÓmýGŸ«L[ÔX=þCÓ6§æùð‹à=þaeÆŸÿñÿv÷O«‹ÏúÙä•k
+à^ÿ‡³ñÓù"Ä|Ñøë¿hºšÿý‡Q€õ?пlˆúï«'›è×\ÿ±Bÿé<þ')òÿ,Décœa‹¿þ‡—Îè£ÏàÖ4ÓÿøÿÑÿŸ…8ø%s·þW<鵈ÿú?ó¸ÿO2w®ÿW=Ã_ÿQ¡þÏBY–п`Vë¿ètÿ’×ÍðQ—çqë¾þWQŒøÏ‚Šã4<f:†øE²^ÿÓý¤gX‰{ÖU’¡þˁçøO÷?†ž¿þã?þ€ú?´ñï«¿·¼ÿ÷ûþO×ú_#ÿÇB¢Â?ùåBÓÿɼšÓêg¸õ¿¬ÿÃÿÏnÿ•
+MÿEób:Ûó1·—çŽå€[ÿ‹ú_ þÏBcMÿß<À“ü[Ý
+S'ØžáÿS…þÏ<àøŸlhúÿ¢ßú¼)sݏ»²—UÃ=ýŸñ?àÿgA¥˜ $CÌÿ½èîÚ ?ëÖõ§þ—þŸ÷?ò ÿlîÖÿŠ þñ?Ž#ìÿY€ÿW64ýoí–õ?5¯ÿ†aŒþ,üYWeeŽ˜„BÓ}9?™Îf l ×3Üñ?^¬ÿ‘ÿã!Q¨ J†¢ÿ€ÁÿeûÀÿµ?´ñßÚÿ5ŸÿÃ÷ÿñÆ°I†¦ÿüŸ, þ+šþü_¨ÿ° ÿ—lhúgðaýÏâ¿lhúßÚÿ5×’áþ'ý•
+1ÿ·¿ÿûàÿ’ÍÝúßËÿ…ý?ðɆ¦ÿý_?êÿ€ý?¿éAcMÿþ/èŸø¿dCÑÄÑÿKÁÿÅmü·öÍó?!Îÿ1‘(u€L.4ý3ø¿Pÿa÷Ɇ¦ÿö,Àÿ%¢þíù±êõÓÉä.:õ¿èÿ‡â?Á×Û `Mÿ»û?CÜÿÇüŸ²¡éŸ¡ÿÎÿ³0H†˜ÿßßÿ‰õ?eÿ§dîÖÿ&þÏ…þcø¿yˆÃÇ8ƒîÅBÓ?Cÿ?ôÿdýÿd³Eþ_9žáÖÿòÿÐ?
 Èÿˆ¦ÿ­ýßóóqàþoTàÁPô¯8úâþohãÏÐÿ÷?±€þŸ²¡éŸÁÿõðȆ¦ÿ7ê¿,Àÿ-šþúbýÏâ¿lhúgèÿ‰úèþ!bþoÿ'öÿ, ÿ§lîÖÿ^ý?±ÿgý?eCÓÿÖþÏeý/ÆþŸ…ßë~è.…ÍÞ`"Mÿý?¡ÐÿS6«õßÔ6×Oz†þ/ˆÖÿ, ÿ/›õñ¿½”ùËÓú9aîçÿ’ýYðÿΜôpÍý8~ïøç"£ÿÈÿÈÆ[ÿãkU—M^\ºÜ~°âîüÏ|þÇÿ@ÿ¨lLBñÖ_èq#øœëW]¦ã¿öã‹©‹Ê|° pê?™ë?µ/Ð?ïúPÑû«z½ŽÌÃáú‚ùá'…¬ÿçæÕtuÓ­x†;þ/ò¿úÿðК®lº³®dƒø›	>L8õŸf‹þ¿ððP4uoºWká5M}4ãTp|¸ŒŸõ­.ÌCÛ|ßêñ¿›)°øi ëçý?úð€ý¿l¼õÿT5}~ªÎÕz5øë\ àþ ِãÿYÝ/þGîæú—
+¹þ7tºî§Sß¹5ÔÅ=ç?çýÿR…ý?ˆ_4dýïÿã DþŸÄÙÐõ_Õ›é?˜çÿáÿáâ ù‹Æÿ?è¡÷sO
+÷ëÿ›)ôÿe8þCu6ùìOÎCAÎùQÿcôÿäáæÿJ²ñK?DŸn>°àÓÍ	6¾nï·7ÿö?lUÿÍ Oאûîõßüü_¬R¬ÿX€”eC¯ÿì»ÿƒÿƒìÿdCÖÿ±«^Í÷7ÅÿÅYýs0ù;ëæËãg\/oýë²4…ßpwü_œÿ3ÔXÀùoِã¿müÕs\ñwü_ôÿ
+ü_,ür©ûKÛ6Ý8¥ÿŠ©@ëôï{ãã?™vø+ë?q–þ'PY¡þÃÂÚñš¶95Ïo{÷šÆ?2Ûÿ
+ã¿?ÞãÿíêŸVŸõ³É+çÀ½þgã'¨ÿñ€ÔŸl¼õ_4Ý͏¿þÃ0Bþôÿ”
+Mÿ}õd“ ýšÛ?üÎÜâ€þß,
+S€`¼õ?¼tF½f ÿøŸŒK 蟈_6÷êÍ3œúÿ.ÿÕ”eðÿ±`¿þÛý¸	D÷­ÿ×=ƒ ÿ8Aý…ÿÓY–п8Öê¿ètÿ’×ÍðQ“çÿnýÏë?*L‘ÿgAé$Ó1ª RY­ÿéú?Ú3¬Ä=ë¿*QÿåÀoü§ëCß_ÿñWa†ú?¤ñï«¿}ntÆÿEþ?T)ú?±¨ð¹ô2¯æ´þný/êÿü¿< ç'’þ‹æÅt¶åcnïÎ]Ë·þ£yý/qÿ#iŒ	@2$ýó Oòou7L`?z†üOêÿ< þ/’þ¿è·>oÊ\÷ã_®ìÝAÕðqûgJüO#äÿYP)& ÉÐò/º»v ÈϺu>éÿEý?V)öÿ,دþ¹Ü«ÿ5 ü×ÿq”ÀÿÏÖÿ²!éxk7­ÿ-ü?¡J¡þ¬«²2GÌB!鿾œŸLg3 ¶óîøÏãˆü‰Âª_2ý,þ/ÿ¤ñßÜÿ5ŸÿÇõú?²Æ°I†¤ÿüŸ, ÿ#’þ9ü_¨ÿ° ÿ—lHúçðaýÏâ¿lHúßÜÿµèÿ”†¨ÿ°€ì¯lhù?ÿöÿ,دþ/¹Ü«ÿÝü_èÿÆÖÿ²!ékÿ×ú?àþ7~ÓƒÆ ’þ9ü_Ð?ðɆ ÿˆÅÿÃÿÅiü7÷Íó?!Îÿ1‘(u€L.$ýsø¿Pÿa!‚öECÒ?ƒÿ+Âþø¿dCÓ¿ý!?V½~:™Ü)S§þÕ\ÿ±Âù‚¯·AÀ< ’þ9üŸð°€ú¯lHúçèÿ‡óÿ,ÄL ’¡åÿüŸXÿ³`¿þwÿg„ûÿäq¯þ·ñ.üîÿã!xL zÁôÏÑÿ÷°€þ²Ù ÿ¯\ÏpëÿùèŸäÿeCÒÿæþïùù8qþ‹•¸D0ý+ÿ7îÿf4þý?‘ÿaý?eCÒ?‡ÿë?àÿ
+Iÿý?QÿeþoِôÏáÿÄúŸÄِôÏÑÿõÐýC6´üƒÿûì׏þŸr¹Wÿ»õÿDÿ°þ—
+Iÿ›û?—õ¿û~¯û¡»6}ƒ™@ $ýsôÿ„þY@ÿOÙ¬ÕSÛ\?íþëÿ ŒPÿcëÙ¬Žÿí¥ìÌ_¾ÖÏ	«p?ÿgèÿË‚ïøw椇kîǽð{ÇþìÿxÀü/_ý¯U]6yqérûÁšg¸ó?óù?ÊbÔYPÙ4˜„â«ÿ¾ÐãFð9ׯº:MÇíÇ
 S•ùhAàÔ2×:¾…þ9x×ÿƒŠÞ_Õûëud×Ì?)Tý?7¯¦«›nÍ3Üñžÿ2ÜÿÊCkº²éκ.4.ûãÿm&ø8àÔš-üßèÿÍCÑÔ½é^­‡×<4õÑŒSÁñá2~Ö·º0móe|«Ç?ün¦Àrুªÿ½÷ÿèÿÁöÿ²ñÕÿSÕôù©:Wbðט$¸ÿ‡è_6ÔøÖ_÷ÿÐ?пl¨õ¿¡Óu?úέ! .î:ÿ9ïÿ—Øÿóp€øECÕÿÞñ?FþŸÄِõ_ÕÛé?˜çÿáÿáâ ù‹Æ{ÿ?è¡÷tO
+÷ëÿ›ÆèÿËmü‡êlò1؟܇‚œóÿ¢þÇèÿÉÃÍÿ•da”„é§›,øts‚ï‚Û»ÃíÍ¿ýÏAÔ3èÓ5´âîõߢÿ‡
+°þcR–
+¹þ³óþþ°ÿ“
+UÿÇ®z5«Üß$ÿw¬Ðÿ‹…ÉßY7_?ã"x‰øê_—¥)<€û¯ÿ£P…Ð?8ÿ-jü·¿ZcŽkžáŽÿóþ¿QÃÿÅÂ/—º¿´mӍsú¯˜ıNÿ	©ïύi‡¿ºþ“ý'PY£ÿkÇhÚæÔ<¿Q~¼Ç?&ÿ/ƼÇÿÛÝ?­.>ëg“WÎ5€ßúߎœdð²€ÔŸl¼õ_4Ý͏¿þÃq ýs@ÿ¢¡é¿¯žl _uý‡çùküWð³<*¤ ã­ÿá¥3úè5øÇÿ$Àý< þËæ^ý¯y†SÿÿÈÿOñüúçÀ~ýï÷ÿ…ÈÈã¾õÿºgøë?ŠSÔÿYø?ý—e	ý‹c­þ‹N÷/yÝvyþ·þçõ¦Èÿ³ ž’LLjüRY­ÿéþ?Ú3¬Ä=ë¿ÓùÔ÷Çoü§ûCß_ÿñ·§1þÆ¿¯þÞôþßEþ?Tü,$*üÁ_.$ýŸÌ«9­†[ÿ‹úbÿÏnÿ•
+IÿEób:Ûó1·—ç®å€[ÿѼþF8ÿËBcIÿß<À“ü[Ý
+S'؏žáÿS…ú?0ÿȆ¤ÿ/ú­Ï›2×ýø—+{wP5ÜÕÿyÿÓùTŠ	@2´üß‹î®- ò³nÏpêéÿQöÿ,دþ¹Ü«ÿ5 ü×ÿq„û_y€ÿW6$ýoí¦õ¿…ÿ'TôÏŸuUVæˆY@($ý×—ó“élÀ¶r>Ãÿãyü‘ÿã!Q¨ J† ÿ€ÁÿÚþðíiü7÷ÍçÿP¥èÿÊBÃþ%’þ9ü_ð²€ú¯lHúçð¡þÃü_²!éŸÃÿ…õ?ˆÿ²!ésÿ×¢ÿS¡þò¿²¡åÿü_Øÿ³`¿~ø¿är¯þwó¡ÿðɆ¤ÿ­ý_?êÿ€ý?¿éAc
+Iÿþ/èŸø¿dCÐÄÒÿKÁÿÅiü7÷Íó?!Îÿ1‘(u€L.$ýsø¿Pÿa!‚öECÒ?‡ÿû?àÿ’
+Mÿö‡üXõúédr§LúWsýÇ
+çÿy¾Þó€DHúgðFð° ÿ§lHúçèÿ‡óÿ,ÄL ’¡åÿüŸXÿ³`¿þwÿg„ûÿäq¯þ·ñ.üîÿã!x„T2$ýsôÿÃý, ÿŸl6Èÿ+×3ÜúÿAþúgùِô¿¹ÿ{~þ##œÿbAen AÿŠ¥ÿ'îÿf4þý?‘ÿaý?eCÒ?‡ÿë?àÿ
+IÿþoÔY€ÿ[6$ýsôÿÄúŸÄِôÏÑÿõÐýC6´üƒÿûì׏þŸr¹Wÿ»õÿDÿàþ”
+Iÿ›û?—õ¿û~¯û¡»6}ƒ™@ $ýsôÿ„þY@ÿOÙ¬ÕSÛ\?íþ뻀þ9@þ_6«ã{);ó—¯õsÂ*ÜÏÿ$
+ýYðÿΜôpÍý¸~ïøÏÿQ€ýÈÿÈÆWÿãkU—M^\ºÜ~°æîüÏ|þ²õ_T6 f¡øê¿/ô¸|Îõ«®NÓñ_ûñÅÔEe>Z8õŸÌõ?þ¯Ñÿ…wý?¨èýU½¿^Gæáp}Áüð“BÕÿsójººéÖ<Ãÿçùß(Ãý¯<´¦+›î¬ëÂ@ã¹?þßf‚ÓNý§ÙÂÿþß<MÝ›îÕzxÍCSÍ8.ãg}«óÐ6_Æ·züÃïf
+,~¨úß{ÿþ<`ÿ/_ý?UMŸŸªså!ý‡I‚ûX€þeCÿgýu×øûŸy€þeC­ÿ
+®ûéÔwn
+uq×ùÏyÿ¿4ÀþŸ‡Ä/ªþ÷Žÿ	òÿ, þˆ¬ÿªÞNÿÁ<ÿÿÈ_4ÞûÿA½§|R¸_ÿß4Fÿ_hã?Tg“Àþä>äœÿõß8FÿOnþ¯$£TEŸn>°àÓÍ	6¾nï·7ÿö?lQÿÍ O×Њg¸×‹þJaýǤ,rýgçýü<`ÿ'ªþ]õjV¹¿Iþï8Dÿ/&gÝ|yüŒ‹à%â«]–¦ð< î¿þB•Aÿàü·l¨ñß6þj9®y†;þÏûÿFYÿ¿\êþÒ¶M7Îé¿b.Ç:ý§¤¾?7¦¾OýGeÕ?ê?û³vü‡¦mNÍóåÁ{üà Ñÿ‰ïñÿv÷O«‹ÏúÙä•s
+à¿þ“ëú“·þ‹¦[£ùïñ×¢ÿпlhúï«'›èW]ÿA8ÿ'¨ÿó<*´ Œ·þ‡—Îè£×àÿ“ Büg!…øEs¯þ×<éÿåývJ€þ°_ÿûý1öò¸oý¿îþúbœÿæáÿô_–%ô/޵ú/:Ý¿äu3|ØåùcÜúŸ¯ÿUˆûyã4T™FìÊjýO÷ÿÑža%îYÿU*@ý—¿ñŸî}
+üÇ_Eêÿ,Æ¿¯þÞôþßEþIˆÿ,$*ü¡_.$ýŸÌ«9­†[ÿ‹úbÿÏnÿ•
+IÿEób:Ûó1·—ç®å€[ÿѼþFðÿ³Æ˜ $CÒÿ7ð$ÿVwÃÔ	ö£gøÇÿT¡þÏÌ?²!éÿ‹~ëó¦Ìu?þåÊÞT
+wõ^Äÿ4‚ÿŸhhù¿Ý][ ägÝ:ŸáÔÿÒÿ£2ìÿY°_?ü?r¹Wÿk ø¯ÿã(…ÿŸ„ِô?¼µ›Öÿ–÷¿©úgáϺ*+sÄ, ’þëËùÉt6`Û 9ŸáŽÿóþqˆü‰BP2ýþ¯0Ãý,Æsÿ×|þUšbþç aÿ’Iÿþ/ø?Y@ýW6$ýsø¿Pÿaþ/ِôÏàÿ
+±þgñ_6$ýoîÿZôJ#ÔX@öW6´üƒÿûì×ÿ—\îÕÿnþ/ôcþ/ِô¿µÿëGý°ÿgá7=hLr!éŸÁÿ…üðɆ ÿˆ¥ÿWÿ¤ñßÜÿ5Ïÿ„8ÿÇD¢Ô0¹ôÏáÿBý‡…Ú
+Iÿþ/ìÿX€ÿK64ýÛòcÕ맓ɝ2uê_Íõ+œÿç!øzÌ!韣ÿü,Àÿ)’þúÿáþoâ& ÉÐòÿþO¬ÿY°_ÿûý¶ ò¸WÿÛø?çþ¯8ÊÿYH¶ ‚!韣ÿîÿ`ýÿd³Aþ_¹žAÊÿCÿ, ÿ/’þ7÷/Öÿa„ó_,¨,À0Áô¯Xü߸ÿ›ÒøsôÿÄýO, ÿ§lHúçðcýÇ’¿²!éŸÃÿú/ðˆ¤ŽþŸXÿ³€ø/’þ9ú¢þúȆ–ÿcðbÿÏ‚ýúÑÿS.÷ê·þŸèÿŠ¿²!ésÿç²þ—aÿÏÂïu?t—¦o0„¤ŽþŸÐ?èÿ)›µúoj›ë§=Ãý?Î ¨ÿ±€ü¿lVÇÿöRvæ/_ëç„U¸Ÿÿ3ÃüŸøŽgNz¸æ~Ü¿wüçÿ(Àþädã«ÿñµªË&/.]n?Xówþg>ÿG6\@ÿ¨lÌBñÕ_èq#øœëW]¦ã¿öã‹©‹Ê|´ pê?™ëü_£ÿïú°'®¦Wõþz™‡ÃõóÃO
+UÿÏÍ«éê¦[ówüŸç£÷¿òК®lº³®äþø›	>N8õŸfÿ7úóP4uoºWëá5M}4ãTp|¸ŒŸõ­.ÌCÛ|ßêñ¿›)°øi êïý?úð€ý¿l|õÿT5}~ªÎ•‡üõ&	îÿaú—
+5þŸõ×]ã?îæú—
+µþ7tºî§Sß¹5ÔÅ]ç?çýÿÒ û¿h¨úß;þ'Èÿ³€ø/²þ«z;ýóü?ü?\ Ñxïÿ=ôž.ðIá~ýÓýY ÿPM>F û“ûPsþ_Ôãý?y¸ù¿’,ŒÒ(þtóŸnN°ñ]p{w¸½ù·ÿÙ`#ˆúo}ºæ€V<ýþ[ôÿP
+ë? eِë?;ïÿàÿàû?ÙPõìªW³ÊýMòÇ!ú±0ù;ëæËãg\/_ýë²4…çpÿõ†¸ÿ™œÿ–
+5þÛÆ_­1Ç5ÏpÇÿyÿß(‹áÿbá—KÝ_Ú¶éÆ9ýWÌâX§ÿ(!5þygÚᯬÿ$Áø¿S™Rê?¬ÿ¡i›SóüFøEðÿ0Ȳãρÿø»ü§ÕÅgýlòʵðYÿ_Ç?NáÿâÝ?eã¯ÿ¢éVhþ{üõF
+ùè_4Dý÷Õ“MôÝÿ‘Îã‚û¿yãÇs€\üõ?¼tF}f ·þ£™þ þÇÄ/›»õ¿âNý«Eüœÿdaüöÿ½¦qܹþ_õýG	îÿåaüöËÿ–%ô/”Õú/:Ý¿äu3|ØæùCÜúŸçÿTcýÏ‚‰Ó(É4îþÊzýO ’ža%îYÿU)îÿaÁsü§ ÃÏÿÞæÿõhãßW{ÜèŒÿßõz¯ÿ…ˆÿ<$*ü¡_.4ýŸÌ«9­~†[ÿËú†ý?ðÿȆ¦ÿ¢y1mú˜Û[sÇrÀ­ÿEý/
+Pÿg!1H†¦ÿoàIþ­î†©ìÏðÿiÀÿÇîÿ–
+Mÿ_ô[Ÿ7e®ûñoWöò jø¸4!þg
+þ ‹†˜ÿ{Ñݵ@~Ö­ëNý/ý?aŒý?ü?¢¹[ÿ+ øÇÿ8ްÿgþ_ÙÐô?¼µ[ÖÿÔ¼þ†èÿÁßuUVæˆI@(4ý×—ó“élÀör=Ãÿãyüÿã!Q¨ J†¢ÿ€Ãÿ¥àÿâ€6þ[û¿æóÿ¸þCÿGÒö/ÉÐôÏàÿ‚ÿ“ÔeCÓ?ƒÿõàÿ’
+Mÿþ/¬ÿY@ü—
+Mÿ[û¿æúO² õý•
+1ÿ·¿ÿûø¿Ds·þ÷òaÿÏü_²¡écÿ×ú?$Øÿ³ð›4f ¹ÐôÏàÿ‚þY€ÿK6ýGþ¯þ/h㿵ÿkžÿ	qþ‰D©`r¡éŸÁÿ…ú´/šþ÷÷)ìÿX€ÿK6DýÛòcÕë§“É]:uê_-ê?a„øÏBðõ6˜$BÓ?ƒÿþàÿ”
+MÿýÿpþŸ…ø€	@2ÄüÿþþO¬ÿYìý¶ R¹[ÿ›ø?úáÿæ!
+aMÿýÿÐÿ“ôÿ“Íùåx†[ÿ?ÈÿCÿ, ÿ/šþ·öÏÏÄQCÿ¨,À
+ ‚¡è_qø¿qÿ7´ñgèÿ‰ûŸX@ÿOÙÐôÏàÿÆúø?dCÓ?CÿOÔY€ÿ[64ý3ø?±þgñ_64ý3ôÿDý‡tÿ
+1ÿ·¿ÿûôÿÍÝúß«ÿ'öÿ,Àü)šþ·ö.ë	öÿ,ü^÷Cw)lö@húgèÿ	ý³€þŸ²Y­ÿ¦¶¹~Ò3üóA¤°þgùÙ¬ÿí¥ìÌ_žÖÏ	«ðõþÏÔê?Iø?9ðÿΜôpÍý8~ïøç"• ÿÈÿÈÆ[ÿãkU—M^\ºÜ~°âîüÏ|þƒý?YPÙ4˜„â­ÿ¾ÐãFð9ׯº:MÇíÇS•ù`AàÔ2ך(ÔYx×ÿƒŠÞ_Õûëud×Ì?)dý?7¯¦«›nÅ3Üñ‘ÿ
+Ðÿ‡‡Öteӝu]h\ ÄÿÛLða:À©ÿ4›Çôÿ`¢hêÞt¯ÖÂkšúhÆ©àøp?ë[]˜‡¶ù2¾Õã~7S`9ðÓ@ÖÿÎûÿ ÷±€ý¿l¼õÿT5}~ªÎÕz5øë?L#ø?X€þeCŽÿgýuŸøÝÿãþg ِëC§ë~:õ[C@]ÜsþsÞÿ/U8ÿÁÃâ
+Yÿ;ÇÿùÿeC×Uo¦ÿ [êù¿hü÷ÿƒz?ø¤p/ÿ·Êlü‡ÿ{ˆã?Tg“Àþä<äœÿõß8ÎPÿaáæÿJ²0ÓøÓÍ|º9ÁÆwÁíÝáöæßþgƒ ê¿ôéšr?ýþçú-¡ eÙÐë?ûîÿpÿØÿɆ¬ÿcW½š5îoŠÿ;ÂúŸ‰ÉßY7_?ã"x‰xë_—¥)ü€»ãÿâüw˜¡þÃΈÿmã¯Ö˜ãŠg¸ãºð‡ð²ðË¥î/mÛtã”þ+¦q¬Ô¿ï•ÿ`ÚáûÜÿ¨²ñGÔ8X=þCÓ6§æùð‹à=þa¥ÆŸÿñÿv÷O«‹ÏúÙä•k
+à^ÿÏûÿÅiŒý?èþ)ýM·Bóßã¯ÿ÷ÿ1þŸ²!꿯žl _sýÇ
+ý/îÿIRäÿXãG¤ ã¯ÿá¥3úè3¸õ¿¸ÿ7Èàÿf!Â@4wëÅ3œú_Þÿg[BBÿدÿ¿‡÷qÀT Ž;×ÿ«žá¯ÿ(AÿÆo¿üoYBÿBY­ÿ¢ÓýK^7ÃG]ž?Æ­ÿïó±=ÿ¡ÿ&NÃ$Ó1´/“õúŸîÿ#=ÃJܳþ«’õ_<Ǻÿ1ôü5ðŨÿ³@ÿ¾ú{ËûýŸBôf"Qáýr¡éÿd^Íiõ3ÜúŸ¯ÿGù#ÿÇü?²¡é¿h^Lg{>æöRàܱpë?šé?‰ÜÿÈBcMÿß<À“ü[Ý
+S'ØžáÿS…ó¿< ü/šþ¿è·>oÊ\÷ãß®ìåAÕpOÿçEüÏÐÿƒ•b1ÿ÷¢»k€ü¬[×3œú_úÂõì×ÿ\îÖÿŠ ~ñÒÿøúç þ_ÙÐô?¼µ[ÖÿþqÿÔÿGügâϺ*+sÄ$ šþëËùÉt6`Û ¹žáŽÿ‹ûßÃþ?…
+ d(úvõ]ý¿ãtÿ´ñßÚÿ/ÖØÿñÆ°I†¦ÿýý_)Ö, ý#šþü_ð² ÿ—lhúgðaýÏâ¿lhúßÚÿ5×’¨ÿ°€ì¯lˆù¿ý_ñTÿAÿì×ÿ—\îÖÿæþ¯øêÿÂþŸø¿dCÓÿÆþ¯ôx÷aÿÏÂozИäBÓÿžþ¯ëúù?àÿ’
+EÿCÿ/Ûÿþ¯ý¡ÿÖþ¯ùù?øÿ¹H”:À&šþ÷ô]ïÿÊÐÿ‡…Ú
+Mÿ{ú¿’«ÿý?X€ÿK6DýÛòcÕë§“É]:uê_-Îÿ‡â?Á×Û `Mÿ{ú?“«ÿý¿Y@ùW64ýïÙÿ/¹ú?áÿb!>`1ÿ¿ÿ?¬ÿYìý¶ R¹[ÿ›ø?úqÿQð%нXhúß³ÿ_ÿ'#èÿ'›-òÿÊñ·þÿ‡þY@þ_64ýoíÿžßÿ£ÿ*pˆ`(úWý?ø¿9 ?CÿOø¿X@ÿOÙÐôÏÐÿù_àÿ
+Mÿý?qþ‹ø¿eCÓ?CÿO¬ÿY@ü—
+Mÿý?áÿbÝ?dCÌÿíßÿûì׏þŸr¹[ÿ{õÿÄþŸôÿ”
+Mÿ[û?—õ¿û~¯û¡»6{ƒ‰@ 4ý3ôÿ„þY@ÿOÙ¬ÖSÛ\?éþù¿ RXÿ³€å¿lÖÇÿöRvæ/Oëç„U¸_ÿß IÑÿ—ïñïÌI×܏sá÷Ž_þÇŽ¤bôÿ`ùÙxë|­ê²É‹K—ÛV<Ýÿ™Ïÿñ8@ÿ¨lLBñÖ_èq#øœëW]¦ã¿öã‹©‹Ê|° pê?™ë?MÔYx×ÿƒŠÞ_Õûëud®¥áÌ?)dý?7¯¦«›nÅ3Üñ?^Äø?xhMW6ÝY×…Æ²Aü¿Í¦œúO³yüGÿo&ЦîM÷j-¼æ¡©fœ
+Ž—ñ³¾Õ…yh›/ã[=þáw3–?
+dýï¼ÿGÿ°ÿ—·þŸª¦ÏOÕ¹Z¯ý ø?X€þeCŽÿgýu¿øeðñ ýˆ\ÿ:]÷Ó©ïÜêâžóŸóþ©ÂþŸ‡Ä/²þwÿq ÿgñ_6týWõfúæùø¸8@þ¢ñßÿzèý\à“½üß*S)üßǨÎ&#€ýÉy(È9ÿ/ê¿qœ¡þÃÂÍÿ•da¬²øÓÍ|º9ÁÆwÁíÝáöæßþgƒ ê¿ôéšr?ýþ›ßÿ«ë? eÙÐë?ûîÿàÿàû?ِõìªW³ÆýMñGq†óÿ,LþκùòøÁKÄ[ÿº,Máw Üÿç¿CÜÿÁΈÿmã¯Ö˜ãŠg¸ãÿâþw»$€þøåR÷—¶mºqJÿS8Öé?ô½òñL;üÕõŸð?Ê”=ÿúÏþ¬ÿ¡i›SóüFøEðÿ0Èlþã¿?þãÿíîŸVŸõ³É+×À½þgã§1öÿ,`ù/ýM·Bóßã¯ÿ0Âý?<Dпhˆúï«'›è×\ÿ±Bÿé<þ'	ò,¨ð1Ä ý/ÑGŸÀ­ÿh¦ÿ$Èàÿa!Ä@4wëÅ3œúW‹øàþì×ÿßq6¦qܹþ_õýGI˜@ÿ¼ë¿,Kè_"«õ_tºÉëfø¨ËóǸõ?Ïÿ©(ÂúŸ…Cœ†ÇLÇоLÖëºÿô+qÏú¯JBÔ9ðÿéþÇÐó×ÀüU£þÏmüûêï-ïÿýGÿ§©þ"þó¨ð„~¹Ðô2¯æ´úný/ëÿ)öÿ,àö_ÙÐô_4/¦³=s{)pîX¸õ¿¨ÿ…êÿ,¤1& ÉÐôÿÍ<É¿ÕÝ0u‚ýàþñ?Uü, ü/šþ¿è·>oÊ\÷ãß®ìåAÕpOÿçEüÏøÿYP)& Éó/º»¶ ÈϺu=éÿ¥ÿ'Œ°ÿgÁ~ýðÿÈåný¯8 àÿã8ÄþŸøeCÓÿðÖnYÿSóú¯- @ÿüYWeeŽ˜„BÓ}9?™Îf l ×3Üñ?^¬ÿ‘ÿã!Q¨ J†¢ÿ€Ãÿ¥àÿâ€6þ[û¿æó¿m ùŸƒ4†ýK24ý3ø¿àÿdéÙÐôÏàÿBý‡ø¿dCÓ?ƒÿëÿeCÓÿÖþ¯¹þ“4Cý‡deCÌÿíïÿÂþŸûõÃÿ%—»õ¿—ÿûàÿ’
+Mÿû¿~Ðÿ!ÆþŸ…ßô 1È…¦ÿ
 ôÏü_²¡è?âðÅðq@ÿ­ý_óüOˆóL$Jà “Mÿþ/ÔXÀÝ?²¡éwÿW`ÿÇü_²!êßþ«^?LîÒ©SÿjQÿ	CÄ‚¯·AÀ< šþüŸð°€ò¯lhúgèÿ‡óÿ,ÄL ’!æÿ÷÷býÏ‚ýúíý¶ "¹[ÿ›ø?úáÿæACÔ äBÓ?Cÿ?ôÿdýÿd³Eþ_9žAÊÿCÿ, ÿ/šþ·öÏÏÄaCÿ¨,À
+ ‚¡è_qø¿qÿ7´ñgèÿ‰ûŸX@ÿOÙÐôÏàÿÆúø?dCÓ?CÿOÔY€ÿ[64ý3ø?±þgñ_64ý3ôÿDý‡tÿ
+1ÿ·¿ÿûì׏þŸr¹[ÿ{õÿÄþŸôÿ”
+Mÿ[û?—õ¿û~¯û¡»6{ƒ‰@ 4ý3ôÿ„þY@ÿOÙ¬ÖSÛ\?éþù¿ 
+°þgËÙ¬ÿí¥ìÌ_žÖÏ	«p?ÿg$èÿË‚÷øw椇kîǹð{Ç?ÿ©ý?X@þG6Þú_«ºlòâÒåöƒÏpçæó(ÔYPÙ4˜„â­ÿ¾ÐãFð9ׯº:MÇíÇS•ù`AàÔ2ךèÿÁ»þTôþªÞ_¯#óp¸¾`~øI!ëÿ¹y5]Ýt+žáŽÿ‹üo€þ?<´¦+›î¬ëÂ@ãÙ þßf‚ÓNý§Ù<þ£ÿ7ES÷¦{µ^óÐÔG3NÇ‡ËøYßêÂ<´Í—ñ­ÿð»™ˁŸ²þwÝÿGúð€ý¿l¼õÿT5}~ªÎÕz5øë\ àþ ِãÿYÝ5þCÿ,@ÿ²!×ÿ†N×ýtê;·†€º¸çüç¼ÿ_ª°ÿçá ñ‹†¬ÿ]ãl[Cÿ þˆ®ÿªÞLÿÁ<ÿÿÈ_4þûÿA½Ÿ|R¸_ÿßL¡ÿ/Äñª³ÉÇ`r
+rÎÿ‹úo£ÿ'7ÿW’…Ñÿ’äÓÍ|º9ÁÆwÁíÝáöæßþgƒ ê¿ôéšr?ýþ›Ÿÿ‹U‚õ²lèõŸ=÷ðpýŸlÈú?vÕ«Yãþ¦ø¿£8M &gÝ|yüŒ‹à%â­]–¦ð; îŽÿ‹óßaŠú8ÿ-rü·¿ZcŽ+žáŽÿ‹þ¿¶$ý3ðË¥î/mÛtã”þ+¦q¬Ó¿ú¥ïύi‡ïSÿQ™§ÔX=þCÓ6§æùð‹à=þae¨ÿ±à?þßîþiuñY?›¼r­ÜëÿEþ?MÿYÀò_6þú/šn…æ¿Ç_ÿa¤Ðÿ—è_6Dý÷Õ“Íôk®ÿX¡ÿÅþ?Iqþƒ>†æ ±øëxéŒ>úÌ ný/îÿUú¿² þñKæný¯x†Sÿ?Èÿ'¨ÿ±`¿þÿŽÿ|@˜
+ÄqçúÕ3üõ%¸ÿ“‡wý—e	ýKdµþ‹N÷/yÝuyþ·þçù?áþq&™Ž¡}™¬×ÿtÿéVâžõ_•*Ô9ðÿéþÇÐó×ÀüÇPÿg6þ}õ÷–÷ÿ.ú?…!â?‰
+ÿ@è—Mÿ'ójN«ŸáÖÿ²þó<àö_ÙÐô_4/¦³=s{)pîX¸õ¿¨ÿáþ_&Ò€dhúÿæžäßên˜:Á~ðÿøŸ†ü,Àÿ'šþ¿è·>oÊ\÷ãß®ìåAÕpOÿçEüÏpþ•b1ÿ÷¢»k€ü¬[×3œú_úÂûì×ÿ\îÖÿŠ þñ?Ž#ìÿY€ÿW64ýoí–õ¿åýoaŒþ_,üYWeeŽ˜„BÓ}9?™Îf l ×3Üñqÿ{„ü‰BP2ýþ¯ þ/h㿵ÿk>ÿ[æÒö/ÉÐôÏàÿ‚ÿ“ÔeCÓ?ƒÿõàÿ’
+Mÿ»û¿T†õ?ˆÿ²¡ékÿ×\ÿI þò¿²!æÿö÷aÿÏ‚ýúáÿ’ËÝúßËÿ…ý?ðɆ¦ÿý_?êÿ€ý?¿éAcMÿ»û¿Bäÿx€ÿK6ýGþ¯þ/h㿵ÿkžÿ	qþ‰D©`r¡éŸÁÿ…ú¸ûG64ý3ø¿°ÿcþ/ÙõoȏU¯ŸN&wéÔ©µ¨ÿ„â?Á×Û `Mÿýÿàÿ`þOÙÐôÏÐÿçÿYˆ˜ $CÌÿïïÿÄúŸûõÛûÿ
+lDr·þ7ñ.ôÃÿ̓:<†¨È…¦†þèÿÉúÿÉf‹ü¿r<ƒ”ÿ‡þY@þ_64ýoíÿžŸÿˆ£ ‚þ9PY€@CÑ¿âðãþohã¿ÿÏ÷?±€þŸ²¡éŸÁÿõðȆ¦ÿ7ê¿,Àÿ-šþüŸXÿ³€ø/šþú¢þúȆ˜ÿÛßÿ‰ý?öëGÿO¹Ü­ÿ½úbÿÏúʆ¦ÿ­ýŸËú_‚ý?¿×ýÐ]
+›½ÁD šþî†þY@ÿOÙ¬ÖSÛ\?éþù¿ RXÿ³€ü¿lÖÇÿöRvæ/Oëç„U¸Ÿÿ3HRôÿeÁ{ü;sÒÃ5÷ã\ø½ãŸÿ§ôÿ`ùÙxë|­ê²É‹K—ÛV<Ýÿ™Ïÿq¢þ˂ʦÀ$ oý÷…7‚Ϲ~ÕÕi:þk?¾˜º¨Ì§þ“¹þÓD¡ÿïúPÑû«z½ŽÌÃáú‚ùá'…¬ÿçæÕtuÓ­x†;þ/ò¿úÿðК®lº³®dƒø›	>L8õŸfÿ7ü<MÝ›îÕZxÍCSÍ8.ãg}«óÐ6_Æ·züÃïf
+,~Èúßyÿþ<`ÿ/oý?UMŸŸªsµ^
+þú ¸ÿ‡è_6äøÖ_÷‹ÿQ†ûŸy€þeC®ÿ
+®ûéÔwn
+uqÏùÏyÿ¿TaÿÏÃâ
+Yÿ»ÆÿxÜ@ÿ þˆ®ÿªÞLÿÁ<ÿÿÈ_4þûÿA½Ÿ|R¸_ÿß,Dÿ_ˆã?Tg“Àþä<äœÿõß8FÿOnþ¯$£ÿ©ðÓÍ|º9ÁÆwÁíÝáöæßþgƒ ê¿ôéšr?ýþ›Ÿÿ‹UŠõ²lèõŸ}÷ðð€ýŸlÈú?vÕ«Yãþ¦ø¿£8‹¡&gÝ|yüŒ‹à%â­]–¦ð; îŽÿ‹óßa†ú8ÿ-rü·¿ZcŽ+žáŽÿ‹þ¿‚ÿ‹…_.uiÛ¦§ô_1ˆcþ£Ò÷çÆ´Ã_]ÿÿw*Sã– õVÿдͩy~#ü"xdY€ñçÀü¿ÝýÓêâ³~6yåZ¸×ÿálüã4FþŸtÿ”¿þ‹¦[¡ùïñ×Xÿ³ ýˆ¨ÿ¾z²Y€~Íõ+ôŸÎã’"ÿÏB?F	æ ±øëxéŒ>úÌ nýG3ý'
+ýÿyˆ° ÍÝú_ñ§þÕ"þèÿ̃ýöÿ{Lâ¸sý¿êþú’õÆo¿üoYBÿBY­ÿ¢ÓýK^7ÃG]ž?Æ­ÿyþOE1Öÿ,˜8
+ÿ—éÚ—ÉzýO÷ÿ‘ža%îYÿUI†ú/žã?ÝÿèkñÿñÔÿY _ý½åý¿ÿèÿ4ÕÿBÄþÐ/šþOæÕœV?íÿeýþþ—
+MÿEób:Ûó1·—çŽå€[ÿ‹ú_ þÏBcMÿß<À“ü[Ý
+S'ØžáÿS…þÏ<àþoÙÐôÿE¿õySæºÿve/ª†{ú?/âÀÿÏ‚J1H†˜ÿ{Ñݵ@~Ö­ëNý/ý?!îä!€ÿG4wëÅ ÿøÇöÿ,Àÿ+šþ‡·vËúŸš×Ã0Fÿ?þ¬«²2GLB¡é¿¾œŸLg3 ¶
+ëîø/ÖÿÈÿñ(, $CÑÀàÿ²ý?àÿÚÚøoíÿšÏÿaˆûÿxHcØ¿$CÓ?ƒÿþOPÿ•
+Mÿþ/ÔX€ÿK64ý3ø¿°þgñ_64ýoíÿšë?ÉpÿÈþʆ˜ÿÛßÿ…ý?ü_¢¹[ÿ{ù¿°ÿgþ/ÙÐô¿±ÿëGý°ÿgá7=hÌ r¡éŸÁÿý³ ÿ—l(ú8ú)ø¿8 ÿÖþ¯yþ'Äù?&¥p€É…¦ÿê?,DоhhúgðaÿÇü_²!êßþ«^?LîÒ©SÿjQÿ	#Ä‚¯·AÀ< šþw÷†¸ÿø?eCÓ?Cÿ?œÿg!>`1ÿ¿¿ÿë{ÿ_-€TîÖÿ&þÏ…þcø¿yˆ‚Ç(îÅBÓ?Cÿ?ôÿdýÿd³Eþ_9žáÖÿòÿÐ?Èÿˆ¦ÿ­ýßóóq(蟕¸D0ý+ŽþŸ¸ÿ›Úø3ôÿÄýO, ÿ§lhúgðcýÇü²¡éŸÁÿú/ðˆ¦†þŸXÿ³€ø/šþú¢þúȆ˜ÿÛßÿ‰ý?úŠænýïÕÿûÐÿS64ýoíÿ\ÖÿbìÿYø½î‡îRØì
+&ÐôÏÐÿúgý?e³ZÿMmsý¤gøçÿ‚HaýÏòÿ²YÿÛKÙ™¿<­ŸVá~þÏ IÑÿ—ïñïÌI×܏sá÷Žþ'R1ú°€ül¼õ?¾VuÙäÅ¥Ëí+žáÎÿÌçÿxüôρʦÀ$ oý÷…7‚Ϲ~ÕÕi:þk?¾˜º¨Ì§þ“¹þÓD¡ÿï
 úPÑû«z½ŽÌÃáú‚ùá'…¬ÿçæÕtuÓ­x†;þ/ò¿úÿðК®lº³®dƒø›	>L8õŸf‹þ¿ððP4uoºWká5M}4ãTp|¸ŒŸõ­.ÌCÛ|ßêñ¿›)°øi ëçý?úð€ý¿l¼õÿT5}~ªÎÕz5øë\ àþ ِãÿYÝ/þGîæú—
+¹þ7tºî§Sß¹5ÔÅ=ç?çýÿR…ý?ˆ_4dýïÿã DþŸÄÙÐõ_Õ›é?˜çÿáÿáâ ù‹Æÿ?è¡÷sO
+÷ëÿ›)ôÿe8þCu6ùìOÎCAÎùQÿcôÿäáæÿJ²0VÿK?Ý|`Á§›l|ÜÞnoþí6تþ›AŸ®9 ÷3Üë¿ùù¿X¥Xÿ± )ˆ^ÿÙwÿÿØÿɆ¬ÿcW½š5îoŠÿ;гúç`òwÖÍ—Çϸ^"Þú×ei
+¿àîø¿8ÿf¨ÿ°€óß²!ÇÛø«5æ¸âîø¿èÿ(ø¿XøåR÷—¶mºqJÿS8Vê?£ôý¹1íðW×Òÿ*Saˆú«ÇhÚæÔ<¿~¼Ç?2Ûÿã¿?þãÿíîŸVŸõ³É+×À½þgã§	òÿ,Dˆù¢ñ×Ñt+4ÿ=þú#¬ÿy@ÿOÙõßWO6Я¹þc…þÓyüOÿç!Jãs€Xüõ?¼tF}f ·þ£™þ ÿ?Ä/š»õ¿âNý«EüôfaÜ{¸ÿO.w®ÿW=Ã_ÿã{ÔÿY(ËúÌjýî_òº>êòü1nýÏ×ÿ*Âý<¨0*Ã$Ó1Ä/’õúŸîÿ#=ÃJܳþ«Òõ_<Ǻÿ1ôü5ðÿñÔÿY _ý½åý¿ÿèÿ”âþ_FþÈ/šþOæÕœV?íÿEý?°ÿgöÙÐô_4/¦³=s{)pîX¸õ¿¨ÿE
+õÒ€dhúÿæžäßên˜:Á~ðÿøŸ†ü,Àÿ'šþ¿è·>oÊ\÷ãß®ìåAÕpOÿçEüÏüÿ,¨€dˆù¿Ý][ ägݺžáÔÿÒÿ&Øÿ³ ÿlîÖÿŠ þñ?ŽcìÿY€ÿW64ýoí–õ?5¯ÿ†a‚þ,üYWeeŽ˜„BÓ}9?™Îf l ×3Üñ?žÇÿù?…
+ d(ú8ü_1ü_ÐÆkÿ×|þÇ€ùŸƒ4†ýK24ýïîÿŠ2ø?Y@ýW64ý3ø¿Pÿaþ/ÙÐôÏàÿÂúŸÄÙÐô¿µÿk®ÿ$S¨ÿ°€ì¯lˆù¿Ýý_8ÿÉü_²¹[ÿ{ù¿°ÿgþ/ÙÐô¿±ÿëýìÿYøM3€\húgðAÿ,Àÿ%Šþ#ÿWÿ´ñßÚÿ5Ïÿ„8ÿÇD¢Ô0¹ÐôÏÐÿõpÿŸlhúgðaÿÇü_²!êßþ«^?LîÒ©Sÿ‹þÿq#þ³|½
+æ‰ÐôÏàÿ„ÿƒø?eCÓ?Cÿ?œÿg!>`1ÿ¿ÿ?¬ÿY"Üÿ'™»õ¿‰ÿs¡ÿþo¢ô1Æ@.4ý3ôÿCÿOÐÿO6[äÿ•ãnýÿ ÿý³€ü¿lhúßÚÿ=?ÿGîÿfAen EÿŠÃÿû¿Y ?CÿOÜÿÄúʆ¦†þŸXÿ±€Ü¯lhúgð£þËüß²¡éŸÁÿ‰õ?ˆÿ²¡éŸ¡ÿ'ê?, û‡lˆù¿ýûbÿÏúÊænýïÕÿûÐÿS64ýoíÿ\ÖÿìÿYø½î‡îRØì
+&ÐôÏÐÿúgý?e³ZÿMmsý¤gøçÿ‚(ÄúŸäÿe³>þ·—²3yZ?'¬ÂýüŸA’¢ÿ/Þãß™“®¹çÂïÿüO¤ôÿ`ùÙxë|­ê²É‹K—ÛV<Ýÿ™Ïÿñ¸ „þ9PÙ4˜„â­ÿ¾ÐãFð9ׯº:MÇíÇS•ù`AàÔ2ך(ôÿ`á]ÿ*zUï¯×‘y8\_0?ü¤õÿܼš®nºÏpÇÿEþ7@ÿZÓ•MwÖua qlÿo3Á‡é §þÓláÿ†ÿƒ‡¢©{Ó½Z¯yh꣧‚ãÃeü¬ouaÚæËøVøÝLåÀOYÿ;ïÿÑÿƒìÿeã­ÿ§ªéóSu®Ö«Á_ÿaáþ ِãÿYÝ5þCÿ,@ÿ²!×ÿ†N×ýtê;·†€º¸çüç¼ÿ_ª°ÿçá ñ‹†¬ÿãˆü?ˆÿ²¡ë¿ª7Ó0ÏÿÃÿÃÅòÿþÐCïçŸî×ÿ7Ñÿ—âøÕÙäc°?99çÿEý7ŽÑÿ“‡›ÿ+Éì¡ËôÓÍ|º9ÁÆwÁíÝáöæßþgƒ ê¿ôéšr?ýþ›Ÿÿ‹Ç  ýs )ˆ^ÿÙwÿÿØÿɆ¬ÿcW½š5îoŠÿ;JÆ?†þ˜üuóåñ3.‚—ˆ·þuYšÂï 
 ¸;þ/·ê?,àü·lÈñß6þj9®x†;þ/úÿŽS ôÏÁ/—º¿´mӍSú¯˜
+ıNÿJÛŸoL;üÕõŸñs•Mõ_ÔögíøMÛœšç·ýû?¶ÿS6†Œ?ÞãÿíêŸVŸõ³É+çÀ½þgã')ú²€ÔŸl¼õ_4Ý͏¿þmpèŸtÿ•
+Mÿ}õd“ ýšÛ?|Ï\ã€ó,
+-€ã­ÿá¥3úè5øÇÿQþˆÿ, ê'›{õ¿æNýÿ#ÿoõe)ü?,دÿzÿŸ‚
+H ÷­ÿ×=ƒ ÿñúçàÿô_–%ô/޵ú/:Ý¿äu3|Ôäùÿƒ[ÿÿ·þ·‚P…êÿ,„qþ/Ó1b¿LVëºþö+ñµõß«þ¥PÿgÁoü§ëCß_ÿñW‘íÿ…ñßÒø÷Õß>7:ãÿwùÿëø‡
+ñŸ‡D… ôË…¤ÿ“y5§õÏpë¾þ#Ôÿy@ý_6$ýÍ‹élËÇÜÞ	œ»–nýG3ý'a„ü?iŒ	@2$ýó Oòou7L`?z†üOú¿ñ ólHúÿ¢ßú¼)sݏ¹²wUÃÇíŸ)ñ?EÿgTŠ	@2´üß‹î® ò³nÏpêÿ»úÿUÿ±Ê°ÿgÁ~ýðÿÈå^ý¯9 à¿þ£ý?X€ÿW6$ýoí¦õ?5¯ÿ†
+ýxø³®ÊÊ1…¤ÿúr~2Í Ø.@Îg¸ã<ÿ!ò<$
+@Éô°ø¿ü_Æsÿ×|þ×8ÿÁBÃþ%’þ9ü_ð²€ú¯lHúçð¡þÃü_²!éŸÃÿ…õ?ˆÿ²!ésÿ×\ÿI¡þò¿²¡åÿü_Øÿ³`¿~ø¿är¯þwó¡ÿ;ðɆ¤ÿ­ý_Ëþ!îäá7=hLr!éŸÃÿý³ ÿ—lúöô]û¿ªÐö†ÿkH㿹ÿkÞÿ7T)æ¥p€É…¤ÿê?,DоhHúßÑÿõ~ÿOÿ'ðɆ¦ûC~¬zýt2¹S¦Ný«¹þc• ÿÁ×Û `Iÿ;ú?¯úO•ÂúŸø?eCÒÿŽýÿÞ×ÿ)úóà "Zþ?ÿçmýŸbýÏ‚ýúßïÿ+°Ç½ú߯ÿ™Ìõ%ˆÿ,¤
+[ ÁôÏÑÿ÷°€þ²Ù ÿ¯\Ï åÿÑÿäÿeCÒÿæþïÅú\ @ÿ¨,À
+ ‚!è_±ôÿÄýß,ÆŸ£ÿ'ò¿, ÿ§lHúçðãü?Hþʆ¤ŽþŸð± ÿ·lHúçèÿ‰õ?ˆÿ²!韣ÿ'ò¿, û‡lhù?†þŸØÿ³`¿~ôÿ”˽úß­ÿ'üŸ,àø‡lHúßÜÿ¹¨ÿ…öÿ,ü^÷Cw)lú3@Húçèÿ	ý³€þŸ²Y«ÿ¦¶¹~Ú3ü×ÿã€úÈÿËfuüo/egþòµ~NX…ûõÿ
+ì4 ÿ'¾ãß™“®¹÷ÂïŸùÿ:þQ€û_x@þG6¾ú_«ºlòâÒåöƒ5Ïpçæó”Å8ÿǂʦÀ, _ý÷…7‚Ϲ~ÕÕi:þk?¾˜º¨ÌG§þ“¹þÓý¿yx×ÿƒŠÞ_Õûëud×Ì?)Tý?7¯¦«›nÍ3Üñ?^Äÿúg¡5]Ùtg]Èýñÿ6|œpê?ÍýÑÿ›‡¢©{Ó½Z¯yh꣧‚ãÃeü¬ouaÚæËøVøÝLåÀOUÿ{ïÿÑÿƒìÿeã«ÿ§ªéóSu®<Äà¯ÿp|ýs ýˆÿÏúë¾ñúgú—
+µþ7tºî§Sß¹5ÔÅ]ç?çýÿÒ û¿h¨úß;þ£ÿˆÿ²!뿪·Ó0ÏÿÃÿÃÅò÷þÐCïéŸîåÿVi”ÀÿÍmü‡êlò1؟܇‚œóÿ¢þÇê?,Üü_IFi–}ºùÀ‚O7'Øø.¸½;ÜÞüÛÿl°Dý7ƒ>]s at +žá^ÿÍÏÄ*ÀúHY6äúÏÎû?ø?xÀþO6Tý»êÕ¬r“üßã úç`òwÖÍ—ÇÏ8	*_ýë²4…çpÿõèÿÇT/jü·¿ZcŽkžáŽÿé²þÿ¿\êþÒ¶M7Îé¿b.Ç:ý«„Ôøçi‡¿ºþ£þ¨L)…ú«ÇhÚæÔ<¿~¼Ç?²õ?üÇÿÛå?­.>ëg“W®E€ßúߎœâüèÿ'ýM·Bóßã¯ÿ0
+Ðÿ…ú
+Qÿ}õdÓ ýF÷¤óøŸ¤8ÿÁ‚
+CÌrñ×ÿðÒ}ô™ÜúfúOÆý"ôρJ ~ÉÜ­ÿÏpê_-â€þÿ<دºÿAErçúÕ3üõ%!ü,¼ë¿,Kè_"«õ_tºÉëfø°Íó‡¸õ?Ïÿ©(ÂúŸ…4*Ãc¦ch_&ëõ?] Hz†•¸gýW%1ê¿xŽÿtd¸ëùßëü£þÏmüûêo» Ýù¿d^ÿÿyHTøB¿\hú?™WsZý·þ—õÿûpû¯lhú/šÓÙ¦¹½8w,Üú_Ôÿ¢ õÒ€dhúÿæžäßên˜ZÁ~ðÿøŸªþ?àÿ•
+Mÿ_ô[Ÿ7e®ûñoWöò jø¸4!þgüÿ,¨€dˆù¿Ý]{ ägݺžáÔÿÒÿFØÿ³`¿~øär·þW ðÿqaÿÏü¿²¡éxk·¬ÿ©yý7côÿbáϺ*+sÄ$ šþëËùÉt6`û ¹žáŽÿñbýü‰BP2ýþ¯þ/h㿵ÿk>ÿ‡a„þï,¤1ì_’¡éŸÁÿÿ'¨ÿʆ¦ÿÝý_a†úðɆ¦ÿÖÿ, þˆ¦ÿ­ý_sý'Y€úÈþʆ˜ÿÛßÿ…ý?öë‡ÿK.wë'ÿú?ñ ÿ—lhúߨÿõƒþ1öÿ,ü¦@.4ý3ø¿ àÿ’
+Eÿ‡ÿ+…ÿ‹ÚøoíÿšçBœÿc"Qê ˜\húßßÿ•¡þÃîþ‘
+Mÿý¿°ÿcþ/ÙõoȏU¯ŸN&wéÔ©µ¨ÿ„â?Á×Û `MÿþOø?X€ÿS64ý3ôÿÃùâ& Éóÿ»û?Ñÿ‡ûõ[ÿg„ûÿDr·þ7ñ.ôÃÿ̓
+UÝ‹…¦†þèÿÉúÿÉf‹ü¿r<ƒ”ÿ‡þY@þ_64ýoíÿžŸÿˆÃ,…þ9PY€@CÑ¿âðãþohãÏÐÿ÷?±€þŸ²¡éŸ¡ÿ'Ö,Àÿ!šþüߨÿ² ÿ·lhúgðbýÏâ¿lhúgèÿ‰úèþ!bþoÿþŸØÿ³`¿~ôÿ”ËÝúßëþgìÿY@ÿOÙÐô¿µÿsYÿ‹±ÿgá÷ººKa³7˜BÓ?CÿOèŸôÿ”Íjý7µÍõ“žáŸÿ"…õ?ÈÿËf}üo/egþò´~NX…ûù?ƒ$Aÿ_¼Ç¿3'=\s?Î…ß;þùŸHÅèÿÁò?²ñÖÿøZÕe“—.·¬x†;ÿ3Ÿÿã Dý—•M#€I@(Þúï=nŸsýª«Ótü×~|1uQ™Ný'sý§I€þ,¼ëÿAEï¯êýõ:2‡ë懟²þŸ›WÓÕM·âîø¿ÈÿèÿÃCkº²éκ.4.
+âÿm&ø0àÔšÍã?ú3Q4uoºWká5M}4ãTp|¸ŒŸõ­.ÌCÛ|ßêñ¿›)°øi ë×ý”¡ÿØÿËÆ[ÿOUÓç§ê\­Wƒ¿þÇ îÿaú—
+9þŸõ×]ã?ôÏô/rýoètÝO§¾sk¨‹{ÎÎûÿ¥
+ûpìK6dýïÿã@!ÿÏâ¿lèú¯êÍôÌóÿðÿpq€üEã¿ÿôÐû¹À'…ûõÿÍúÿ²@ÿ¡:›|Œ ö'ç¡ çü¿¨ÿÆ1úòpó%YÂäÓÍ|º9ÁÆwÁíÝáöæßþgƒ ê¿ôéšr?ýþ›Ÿÿ‹UŠõ²lèõŸ=÷ðpýŸlÈú?vÕ«Yãþ¦ø¿£xÜ@ÿLþκùòøÁKÄ[ÿº,Máw Üÿç¿Ãõpþ[6äøoµÆW<Ãÿýÿ¿\êþÒ¶M7Né¿b*Ç:ýG)¥ïύi‡¿ºþ“þ'P™²õ_ÔögõøMÛœšç7Â/‚÷ø‡A–%üÇÿÛÝ?­.>ëg“W®5€{ýÎÆ?Nôÿd!B̍¿þ‹¦[¡ùïñ׿m ýs€Ô¿lˆúï«'›è×\ÿ±Bÿé<þ'êÿ,Décœa‹¿þ‡—Îè£ÏàÖ4Ó¢Ðÿ‡(…ø%s·þW<鵈ÿAÿöðÝo〩@w®ÿW=Ã_ÿQÁÿÃBY–п`Vë¿ètÿ’×ÍðQ—çqë¾þWQŒøÏ‚
+£2T™Ž!~‘¬×ÿtÿéVâžõ_•âü'žã?Ýÿzþøÿøêÿ,ÐÆ¿¯þÞòþßôJ¯÷ÿ"ÿÇB¢Â?ùåBÓÿɼšÓêg¸õ¿¬ÿgØÿ³€ÛeCÓѼ˜Îö|Ìí¥À¹c9àÖÿ¢þ)ÔÿYHcL ’¡éÿ›x’«»aêûÁ3üãðÿ±€û¿eCÓÿýÖçM™ë~üÛ•½<¨îéÿ¼ˆÿ™‚ÿŸÿhˆù¿Ý][ ägݺžáÔÿÒÿÆØÿ³ ÿlîÖÿŠ þñ?ŽcìÿY€ÿW64ýoí–õ?5¯ÿ†a‚û_Xø³®ÊÊ1	…¦ÿúr~2Í Ø6@®g¸ã<ÿò<$
+@ÉPôpø¿"ø¿8 ÿÖþ¯ùü†1ú¿±Æ°I†¦ÿüŸ, þ+šþ÷÷¨ÿ° ÿ—lhúgðaýÏâ¿lhúßÚÿ5×’)ÔX@öW6Äüßþþ/ìÿY€ÿK6wë'ÿú?ñ ÿ—lhúߨÿõƒþ	öÿ,ü¦@.4ý3ø¿ àÿ’
+Eÿ‡ÿ+…ÿ‹ÚøoíÿšçBœÿc"Qê ˜\húßÝÿ¨ÿ°€ûÿdCÓ?Cÿ/ìÿX€ÿK6DýÛòcÕë§“É]:uêÑÿ? Ð?Á×Û `MÿþOø?X€ÿS64ý3ôÿÃùâ& Éóÿ»û?Ñÿ‡‡ Âý’¹[ÿ›ø?úáÿæ!JcìäBÓ?Cÿ?ôÿdýÿd³Eþ_9žáÖÿòÿÐ?Èÿˆ¦ÿ­ýßóóqàþoTà˜`(úWþoÜÿÍmüúâþ'ÐÿS64ý3ôÿÄúä~eCÓ?ƒÿõ_àÿ–
+MÿþO¬ÿY@ü—
+Mÿý?QÿaÝ?dCÌÿíßÿûÐÿS6wë¯ûŸ±ÿgý?eCÓÿÖþÏeý/ÁþŸ…ßë~è.…ÍÞ`"Mÿý?¡ÐÿS6«õßÔ6×Oz†þ/ˆB¬ÿY@þ_6ëã{);ó—§õsÂ*ÜÏÿ$)úÿ²à=þ9éášûq.üÞñÏÿD*Aÿÿ‘·þÇת.›¼¸t¹ý`Å3ÜùŸùüê¿,¨lLBñÖ_èq#øœëW]¦ã¿öã‹©‹Ê|° pê?™ë?Mú°ð®ÿ½¿ª÷×ëÈ<®/˜~RÈún^MW7ÝŠg¸ãÿ"ÿ ÿ­éʦ;ëº0и@6ˆÿ·™àÃt€Sÿi¶ðÃÿÁCÑÔ½é^­…×<4õÑŒSÁñá2~Ö·º0móe|«Ç?ün¦Àrু¬ÿ÷ÿèÿÁöÿ²ñÖÿSÕôù©:WëÕà¯ÿ0pÿпlÈñÿ¬¿îÿ¡ ِëC§ë~:õ[C@]ÜsþsÞÿ/UØÿóp€øECÖÿÎñ?DþŸÄÙÐõ_Õ›é?˜çÿáÿáâ ù‹Æÿ?è¡÷sO
+÷ëÿ›…èÿËqü‡êlò1ØŸœ‡‚œóÿ¢þÇèÿÉÃÍÿ•ŒŠñ§›,øts‚ï‚Û»ÃíÍ¿ýÏAÕ3èÓ5ä~†{ý7?ÿ«ë? eÙÐë?ûîÿàÿàû?ِõìªW³ÆýMñGq–AÿLþκùòøÁKÄ[ÿº,Máw Üÿç¿Ãõpþ[6äøoµÆW<Ãÿýƒþ/~¹Ôý¥m›nœÒÅT Žú·rójjߺύi‡¿¶þ£Ûÿ'ÎPÿaÁsü;cO‹™|ülü£•ÏðÊÿNã¡ÿ3HýÈÆSÿö¨oÑœ}NÿPô&ú¿²€þ²Y¹ÿh+¿+^ë¿`œ'T¦ìýOXÿíÏêñš¶95Ïo„_ïñƒ,M0þøÿ·»[]|ÖÏ&¯\9 ¯ø?œâþwÐý]6þú/šn…æ¿Ç_ÿa ÿ/Øÿˆ¨ÿ¾z²U ~Íõo+ôŸÎã’ÂÿÉB?F	æ ±øëxéŒ>úÌ nýG3ý'ü<DX ˆæný¯x†SÿjÿÜÿ̃ýúÿ¿¦qܹþ_õýGIÿ7ã·_þ·,¡¡¬ÖÑéþ%¯›á£[>>Æ­ÿyþOEÖÿ,˜8
+U¦ch_&ëõ?ÝÿLz†•¸gýwºÿõßýñÿéþïÐó×ÀüU£þÏmüûêo« ñÿý?§ú_ˆøÏC¢Â?úåBÓÿɼšÓêg¸õ¿¬ÿ§Øÿ³ ÿlhú/šÓÙžßù©ªm6ðÿ»pëQÿ‹ÔÿYHcL ’¡éÿ›x’«»aº	àƒgøÇÿTeðÿ±€ó?²¡éÿ‹~ëó¦Ìu?þíÊ^Y
+÷Üÿ±ˆÿY ÿ?
+ý_DCÌÿ½èîÚ*?ëÖõ§þ—þŸ0ÂþŸûõÃÿ#—»õ¿â €ücÜÿÁü¿²¡éxk·¬ÿ©yý7Ñÿ‡‡?몬Ì“€Phú¯/ç'ÓÙ€méz†;þÇ‹õ?ò<$
+@ÉPôïÛÈ*ÜÛÿÁÿÅmü·öÍçÿ0ŒÐÿ—…4†ýK24ý3ø¿àÿdõ_ÙÐô¿»ÿ+Äý?<Àÿ%šþü_Xÿ³€ø/šþ·öÍõŸdê?, û+bþoÿöÿ,دþ/¹Ü­ÿü_èÿÄü_²¡écÿ×ú?ÄØÿ³ð›4f ¹ÐôÏàÿ‚þY€ÿK6ýGþ¯þ/h㿵ÿkžÿ	qþ‰D©`r¡éÿW†ú´/šþúaÿÇü_²!êßþ«^?LîÒ©SÿjQÿ	#Ä‚¯·AÀ< šþüŸð° ÿ§lhúgèÿ‡óÿ,ÄL ’!æÿw÷¢ÿ½ÿ¯À@*wëÿçBÿ1üß<DÁc”@÷b¡éŸ¡ÿú²€þ²Ù"ÿ¯ÏpëÿùèŸäÿeCÓÿÖþïùù8ÌR蟕¸D0ý+ÿ7îÿf6þý?qÿèÿ)šþúbýÇü²¡éŸÁÿú/ðˆ¦ÿ'Öÿ, þˆ¦†þŸ¨ÿ°€î²!æÿöïÿ‰ý?öëGÿO¹Ü­ÿ½îÆþŸôÿ”
+Mÿ[û?—õ¿û~¯û¡»6{ƒ‰@ 4ý3ôÿ„þY@ÿOÙ¬ÖSÛ\?éþù¿ RXÿ³€ü¿lÖÇÿöRvæ/Oëç„U¸Ÿÿ3HôÿeÁ{ü;sÒÃ5÷ã\ø½ãŸÿ‰TŒþ, ÿ#oý¯U]6yqérûÁŠg¸ó?óù?BÔYPÙ4˜„â­ÿ¾ÐãFð9ׯº:MÇíÇS•ù`AàÔ2ךèÿÁ»þTôþªÞ_¯#óp¸¾`~øI!ëÿ¹y5]Ýt+žáŽÿ‹üo€þ?<´¦+›î¬ëÂ@ãÙ þßf‚ÓNý§Ù<þ£ÿ7ES÷¦{µ^óÐÔG3NÇ‡ËøYßêÂ<´Í—ñ­ÿð»™ˁŸ²þwÝÿGúð€ý¿l¼õÿT5}~ªÎÕz5øë\ àþ ِãÿYÝ5þCÿ,@ÿ²!×ÿ†N×ýtê;·†€º¸çüç¼ÿ_ª°ÿçá ñ‹†¬ÿ]ã(äÿY@ü—
+]ÿU½™þƒyþþ.¿hü÷ÿƒz?ø¤p¿þ¿™Bÿ_ˆã?Tg“Àþä<äœÿõß8FÿOnþ¯$c•DŸn>°àÓÍ	6¾nï·7ÿö?lUÿÍ Oאûîõßüü_¬R¬ÿX€”eC¯ÿì¹ÿƒÿƒìÿdCÖÿ±«^Í÷7ÅÿÅã– úg`òwÖÍ
 —Çϸ^"Þú×ei
+¿àîø¿8ÿ¦¨ÿ°€óß²!ÇÛø«5æ¸âîø¿èÿ(ø¿XøåR÷—¶mºqJÿS8Öé_¥”¾?7¦þêúúO 2eõúÏþ¬ÿ¡i›SóüFøEðÿ0ÈRôbÁü¿ÝýÓêâ³~6yåZ¸×ÿálüãýŸx@ÿ?Ùøë¿hºšÿý‡ú¿ð€ëÿdCÔ_=Ù,@¿æúúOçñ?I±ÿgA…a„9@,þú^:£>3€[ÿÑLÿI€ú?*…ø%s·þW<鵈ÿAŒú?öëÿ¯ûS8î\ÿ¯z†¿þ£ç¿yx×Y–пDVë¿ètÿ’×ÍðQ—çqëžÿSîÿå!ÊHe:†öe²^ÿÓý¤gX‰{ÖÕø?Gý—ÏñŸî=
+üÇ_E1êÿ,ÐÆ¿¯þÞòþßôšê!â?‰
+ÿ@è—Mÿ'ójN«ŸáÖÿ²þŸaÿÏnÿ•
+MÿEób:Ûó1·—çŽå€[ÿ‹ú_ þÏB
+hhúÿæžäßên˜:Á~ðÿøŸªþ?àÿ•
+Mÿ_ô[Ÿ7e®ûñoWöò j¸§ÿó"þgüÿ,Àÿ#bþïEw× ùY·®g8õ¿ôÿ„1öÿ,دþ¹Ü­ÿ üãGØÿ³€ø/šþ‡·vËúŸš×Ã0FÿOþ¬«²2GLB¡é¿¾œŸLg3 ¶
+ëîø/ÖÿÈÿñ(T %CÑÀáÿÂý,ÐÆkÿ×|þÃ(ÂüÏAÃþ%šþ÷÷áþPÿ•
+Mÿþ/ÔX€ÿK64ý3ø¿°þgñ_64ýoíÿšë?ÉÔX@öW6Äüßîþ/œÿäÁ~ýðÉånýïåÿÂþŸø¿dCÓÿÆþ¯ôˆ±ÿgá7=hÌ r¡éŸÁÿý³ ÿ—l(ú8ü_ü_ÐÆkÿ×<ÿâü‰R8ÀäBÓ?Cÿ/ÔXÀÝ?²¡éŸÁÿ…ýðɆ¨ûC~¬zýt2¹K§Ný«Eý'ŒÿY¾Þó€DhúgðÂÿÁüŸ²¡éŸ¡ÿÎÿ³0H†˜ÿß¿ÿÖÿ,دßú?#Üÿ'’»õ¿‰ÿs¡ÿþoTø¨2è^,4ý3ôÿCÿOÐÿO6[äÿ•ã¤ü?ôÏòÿ²¡ékÿ÷üüGfôρÊœ EÿŠÃÿû¿Y ?CÿOÜÿÄúʆ¦†þŸXÿ± ÿ‡lhúgð£þËüß²¡éŸÁÿ‰õ?ˆÿ²¡éŸ¡ÿ'ê?, û‡lˆù¿ýûbÿÏ‚ýúÑÿS.wë¯þŸØÿ³€þŸ²¡ékÿç²þcÿÏÂïu?t—Âfo0„¦†þŸÐ?èÿ)›Õúoj›ë'=Ã?ÿD
+ëÿ—Íúøß^ÊÎüåiýœ°
+÷óI‚þ¿,xgNz¸æ~œ¿wüó?‘ŠÑÿƒädã­ÿñµªË&/.]n?Xñwþg>ÿÇAˆú/*›F “€P¼õßzÜ>çúUW§éø¯ýøbê¢2,œúOæúO“ ý?Xx×ÿƒŠÞ_Õûëud×Ì?)dý?7¯¦«›nÅ3Üñ‘ÿ
+Ðÿ‡‡Öteӝu]h\ ÄÿÛLða:À©ÿ4›Çôÿf¢hêÞt¯ÖÂkšúhÆ©àøp?ë[]˜‡¶ù2¾Õã~7S`9ðÓ@Öÿ®ûÿ(Cÿ°ÿ—·þŸª¦ÏOÕ¹Z¯ýÛ ôÏô/rü?믻ÆèŸè_6äúßÐ麟N}çÖP÷œÿœ÷ÿKöÿ< ~ѐõ¿küí‘PèŸÄÙÐõ_Õ›é?˜çÿáÿáâ ù‹Æÿ?è¡÷sO
+÷ëÿ›)ôÿe8þCu6ùìOÎCAÎùQÿcôÿäáæÿJ²0:ÄÙ§›,øts‚ï‚Û»ÃíÍ¿ýÏAÕ3èÓ5ä~†{ý7?ÿ«ë? eÙÐë?{îÿàÿàû?ِõìªW³ÆýMñGq@ÿLþκùòøÁKÄ[ÿº,Máw Üÿç¿Ãõpþ[6äøoµÆW<Ãÿýí•°Ð?¿\êþÒ¶M7Né¿b*Ç:ýÇ¥ïύi‡¿ºþ“ý'P™
+Ô8X=þCÓ6§æùð‹à=þaÙþÿýñÿowÿ´ºø¬ŸM^¹Ö îõ8ÿ8Mÿg!B̍¿þ‹¦[¡ùïñ×aýÏúʆ¨ÿ¾z²Y€~Íõ+ôŸÎã‚ü?Qúg˜Äâ¯ÿá¥3úè3¸õÍôŸ¨ ýÿYˆ±ÍÝú_ñ§þÕ"þ	ú?³®÷ÿM`*ǝëÿUÏð×” ÿ#eYBÿ‚Y­ÿ¢ÓýK^7ÃG]ž?Æ­ÿùú_E¸ÿÇi˜d:†øE²^ÿÓý¤gX‰{ÖU¡þˁçøO÷?†ž¿þãoÀøs@ÿ¾ú{ËûÿÑÿ)Ãý¿Œ$*ü‘_.4ýŸÌ«9­~†[ÿËú†ý?¸ýW64ýÍ‹élÏÇÜ^
+œ;–ný/ê‘BýŸ…4Æ šþ¿y€'ù·º¦N°<Ã?þ§a ÿðÿɆ¦ÿ/ú­Ï›2×ýø·+{yP5ÜÓÿyÿ3ÿ?8ÿ+bþïEw× ùY·®g8õ¿ôÿ„1öÿ,Àÿ#›»õ¿â €üãûàÿ•
+MÿÃ[»eýOÍë¿a£ÿÖUY™#&¡Ðô__ÎO¦³ ÛÈõwüçñ?Bþ‡D¡(ŠþÿWÿ´ñßÚÿ5ŸÿÇõîÿc!aÿ’Mÿþ/ø?Y@ýW64ýïïÿ
+Pÿaþ/ÙÐôÏàÿÂúŸÄÙÐô¿µÿk®ÿ$PÿaÙ_Ùóûû¿°ÿgþ/ÙÜ­ÿü_èÿÄü_²¡écÿ×ú?$Øÿ³ð›4f ¹ÐôÏàÿ‚þY€ÿK6ýû^gîíÿJàÿâ€6þ[û¿æùŸçÿ˜H”:À&šþü_¨ÿ°€ôlhúgèÿ…ýðɆ¨ûC~¬zýt2¹K§Ný/úÿÇã úç øzÌ¡éŸÁÿ	ÿðʆ¦†þ8ÿÏB|À bþÿ'Öÿ,”üŸ’¹[ÿ›ø?úáÿæ!ãºMÿû÷ÿKÐÿ“ôÿ“Íùåx†[ÿËü?úÿò€ü¿lhúßÚÿ=?ÿGîÿfAen EÿŠÃÿû¿Y ?CÿOÜÿÄúʆ¦ÿ7Ö,Àÿ!šþú¢þËüß²¡éŸÁÿ‰õ?ˆÿ²¡éÿþŸ
+õÐýC6ÄüßþþOìÿY@ÿOÙÜ­ÿ½úbÿÏúʆ¦ÿ­ýŸËú_‚ý?¿×ýÐ]
+›½ÁD šþúBÿ, ÿ§lVë¿©m®Ÿôÿü_)¬ÿY@þ_6ëã{);ó—§õsÂ*ÜÏÿ$)úÿ²à=þ9éášûq.üÞñÏÿD*Aÿÿ‘·þÇת.›¼¸t¹ý`Å3ÜùŸùüê¿,¨lLBñÖ_èq#øœëW]¦ã¿öã‹©‹Ê|° pê?™ë?Mú°ð®ÿ½¿ª÷×ëÈ<®/˜~RÈún^MW7ÝŠg¸ãÿ"ÿ ÿ­éʦ;ëº0и@6ˆÿ·™àÃt€Sÿi¶ðÃÿÁCÑÔ½é^­…×<4õÑŒSÁñá2~Ö·º0móe|«Ç?ün¦Àrু¬ÿ÷ÿèÿÁöÿ²ñÖÿSÕôù©:WëÕà¯ÿ0pÿпlÈñÿ¬¿îÿ¡ ِëC§ë~:õ[C@]ÜsþsÞÿ/UØÿóp€øECÖÿÎñ?DþŸÄÙÐõ_Õ›é?˜çÿáÿáâ ù‹Æÿ?è¡÷sO
+÷ëÿ›…èÿËqü‡êlò1ØŸœ‡‚œóÿ¢þÇèÿÉÃÍÿ•d¶éBúéæ>Ýœ`ã»àöîp{óoÿ³ÁFPõßút͹Ÿá^ÿÍÏÿÅã¯%ôϤ,zýgßýü<`ÿ'²þ]õjÖ¸¿)þï(ÎR蟃ÉßY7_?ã"x‰xë_—¥)ü€»ãÿâüw˜¡þÃΈÿmã¯Ö˜ãŠg¸ãÿ¢ÿoÂÿÅÂ/—º¿´mӍSú¯˜
+ıNÿaFéûscÚᯮÿŒó„Ê”íÿ…úÏþ¬ÿ¡i›SóüFøEðÿ0È2ÔÿXðÿowÿ´ºø¬ŸM^¹Ö îõ8ÿ8MÿY@÷OÙøë¿hºšÿý‡‘Bÿ_°ý—
+Qÿ}õd³ ýšë?Vè?Çÿ$ÅùÂø1J0ˆÅ_ÿÃKgôÑgpë?šé?Qú¿²f¿dîÖÿŠg8õ¯ñ?HPÿcÁ~ýÿ
+®. Ø€äqçúÕ3üõ%ü,Œß~ùß²„þ…²ZÿE§û—¼n†º<Œ[ÿóüŸŠb¬ÿY(¢2<f:†öe²^ÿÓý¤gX‰{ÖU¢þˁçøO÷?†ž¿þã?þ€ú?´ñï«¿·¼ÿ÷ýŸ¦ú_ˆøÏC¢Â?úåBÓÿɼšÓêg¸õ¿¬ÿãü?ðÿȆ¦ÿ¢y1íù˜ÛKsÇrÀ­ÿEý/
+Pÿg!1H†¦ÿoàIþ­î†©ìÏðÿiÀÿÇîÿ–
+Mÿ_ô[Ÿ7e®ûñoWöò j¸§ÿó"þg
+þTŠ	@2Äüß‹î®- ò³n]Ïpêéÿ	cìÿY°_?ü?r¹[ÿ+ øÇÿ8Æý<Àÿ+šþ‡·vËúŸš×Ã0Fÿ/þ¬«²2GLB¡é¿¾œŸLg3 ¶
+ëîøÏã„ü‰BP2ýþ/ÿ´ñßÚÿ5ŸÿÇõú¿³Æ°I†¦ÿüŸ, þ+šþü_¨ÿ° ÿ—lhúgðaýÏâ¿lhúßÚÿ5×’¨ÿ°€ì¯lˆù¿ýý_Øÿ³`¿~ø¿är·þ÷òaÿÏü_²¡écÿ×ú?$Øÿ³ð›4f ¹ÐôÏàÿ‚þY€ÿK6ýGþ¯þ/h㿵ÿkžÿ	qþ‰D©`r¡éŸÁÿ…ú¸ÿK64ýïïÿRØÿ± ÿ—lˆú·?äǪ×O'“»têÔ¿ZÔÂñŸ…àëm0H„¦ÿ'ü,Àÿ)šþúÿáü?ñ€dˆùÿýýŸXÿ³`¿þÿF¸ÿO*wëÿçBÿ1üß<„ñcø?è^,4ý3ôÿCÿOÐÿO6[äÿ•ãnýÿ ÿý³€ü¿lhúßÚÿ=?ÿGãôÏ€ÊÜ "Šþ‡ÿ÷³@†þŸ¸ÿ‰ôÿ”
+Mÿþo¬ÿX€ÿC64ý3ôÿDý—ø¿eCÓ?ƒÿëÿeCÓ?CÿOÔX@÷Ùóûû?±ÿgÁ~ýèÿ)—»õ¿WÿOìÿY@ÿOÙÐô¿µÿsYÿK°ÿgá÷ººKa³7˜BÓ?CÿOèŸôÿ”Íjý7µÍõ“žáŸÿ"…õ?ÈÿËf}üo/egþò´~NX…ûù?ƒ$Eÿ_¼Ç¿3'=\s?Î…ß;þùŸH%èÿÁò?²ñÖÿøZÕe“—.·¬x†;ÿ3Ÿÿã Dý—•M#€I@(Þúï=nŸsýª«Ótü×~|1uQ™Ný'sý§‰BÿÞõÿ ¢÷Wõþz™‡keøóÃO
+YÿÏÍ«éê¦[ñwü_äôÿá¡5]Ùtg]Èñÿ6|˜pê?Íþoø?x(šº7Ý«µðš‡¦>šq*8>\ÆÏúVæ¡m¾Œoõø‡ßÍXü4õ¿óþý?xÀþ_6Þúªš>?Uçj½üõ¦îÿaú—
+9þŸõ×]ã?ôÏô/rýoètÝO§¾sk¨‹{ÎÎûÿ¥
+û¿hÈúß9þ‡Èÿ³€ø/ºþ«z3ýóü?ü?\ Ñøïÿ=ô~.ðIá~ý³ýY ŽÿPM>F û“óPsþ_Ôãý?y¸ù¿’lº‡ìÓÍ|º9ÁÆwÁíÝáöæßþgƒ ê¿ôéšr?ýþ›Ÿÿ‹UŠõ²lèõŸ}÷ðð€ýŸlÈú?vÕ«Yãþ¦ø¿£8K &gÝ|yüŒ‹à%â­]–¦ð; îŽÿ‹óßa†ú8ÿ-rü·¿ZcŽ+žáŽÿ‹þ¿Aÿ¿\êþÒ¶M7Né¿b*Ç:ý+ß+ÿÁ´Ã_]ÿ?W™
+Ðÿ‡…Õã?4msjžß¿ÞãY`ü9ðÿowÿ´ºø¬ŸM^¹Ö îõ8ÿ8…ÿ“¤þdã¯ÿ¢éVhþ{üõ†ê,$пhˆúï«'›è×\ÿáyþcŠÿI‚üÁ£B`ÁøëxéŒ>úÌ nýG3ý'A†üP¿lîÖÿŠg8õÿüpíÿ†û?X°_ÿ§A8À$;×ÿ«žá¯ÿ(	Ñÿ…ÿÓY–п8Vë¿ètÿ’×ÍðQ—çqëžÿSú?ñ`K-I¦cÄ~™¬×ÿtÿéVâžõ_g¨ÿrà9þÓý¡ç¯ÿø«(FýŸÚø÷Õß[Þÿ»Èÿ‡!â?‰
+ÿ@è—Mÿ'ójN«ŸáÖÿ¢þ¥Øÿ³€ÛeCÓѼ˜Îö|Ìí¥À¹c9àÖÿ¢þ¢ÿiŒ	@24ýó Oòou7L`?x†üOÑÿƒ	”ÿeCÓÿýÖçM™ë~üÛ•½<¨îéÿ¼ˆÿiÿ?*Å bþïEw× ùY·®g8õ¿ôÿ„öÿ,دþ¹Ü­ÿ üã‡Øÿ³ ÿ¯lhúÞÚ-ëj^ÿ
+ÃçXø³®ÊÊ1	…¦ÿúr~2Í Ø6@®g¸ã¼Xÿ#ÿÇC¢P”EÿƒÿËöÿ€ÿkh㿵ÿk>ÿ ÿ+iû—dhúgðÁÿÉÒ?²¡éŸÁÿ…úðɆ¦ÿÖÿ, þˆ¦ÿ­ý_sý')îàÙ_Ùóûû¿°ÿgÁ~ýðÉånýïåÿÂþŸø¿dCÓÿÆþ¯õÀþŸ…ßô 1È…¦ÿôÏü_²¡è?âèÿ¥àÿâ€6þ[û¿æùŸçÿ˜H”:À&šþü_¨ÿ°Aû¢¡éŸÁÿ…ýðɆ¨ûC~¬zýt2¹K§Ný«Eýg\@ÿ_oƒ€y@"4ýïïÿÄý< ü+šþúÿáü?ñ€dˆùÿýýŸXÿ³`¿þ÷ûÿ
+läq·þ7ñÎý_q"þ³>Â*šþúÿ¡ÿ'èÿ'›-òÿÊñRþúgùÙÐô¿µÿ{±þ3ýs ² 7€†¢ÅÑÿ÷³@†þŸ¸ÿ‰ôÿ”
+Mÿþo¬ÿX@òW64ý3ø¿QÿeþoÙÐôÏÐÿëÿeCÓ?CÿOÔX@÷Ùóûû?±ÿgÁ~ýèÿ)—»õ¿WÿOìÿY€ûS64ýoíÿ\Öÿ"ìÿYø½î‡îRØì
+&ÐôÏÐÿúgý?e³ZÿMmsý¤gøçÿ‚(ÀúŸ,ÿe³>þ·—²3yZ?'¬ÂýüŸA’ ÿ/Þãß™“®¹çÂïÿüO¤"œÿeùÙxë|­ê²É‹K—ÛV<Ýÿ™Ïÿ±M	Aÿ¨lLBñÖ_èq#øœëW]¦ã¿öã‹©‹Ê|° pê?™ë?µ/Ð?ïúPÑû«z½ŽÌÃáú‚ùá'…¬ÿçæÕtuÓ­x†;þ/ò¿îå¡5]Ùtg]Èñÿ6|˜pê?Íæñý¿™(šº7Ý«µðš‡¦>šq*8>\ÆÏúVæ¡m¾Œoõø‡ßÍXü4õ¿ëþ?ÊÐÿƒìÿeã­ÿ§ªéóSu®Ö«Á_ÿaªpÿпlÈñÿ¬¿îÿqÿ3пlÈõ¿¡Óu?úέ! .î9ÿ9ïÿ—*ìÿy8@ü¢!ë×øۏ ÿeC×Uo¦ÿ`žÿ‡ÿ‡‹ä/ÿýÿ ‡ÞÏ>)ܯÿo ÿ/Äñª³ÉÇ`r
+rÎÿ‹úo£ÿ'7ÿW’…Q«O7Xðéæß·w‡Û›ûŸ
+6‚ªÿfЧkÈý÷úo~þ/V	Ö,@ʲ¡×öÜÿÁÿÁö²!ëÿØU¯fû›âÿŽâ4„þ9˜üuóåñ3.‚—ˆ·þuYšÂï ¸;þ/·)ê?,àü·lÈñß6þj9®x†;þ/úÿZKôÏÀ/—º¿´mӍSú¯˜
+ıNÿaBéûscÚᯮÿDÿ	T¦lýõŸýY=þCÓ6§æùð‹à=þaeÆŸÿñÿv÷O«‹ÏúÙä•k
+à^ÿ‡³ñÓý?Y@÷OÙøë¿hºšÿý‡Q€þo,`û/¢þûêÉfú5׬Ð:ÿIŠú?aü%˜Äâ¯ÿá¥3úè3¸õÍôŸ(ôã!„øEs·þW<鵈ÿAÿöëÿo^ÇS8î\ÿ¯z†¿þ£$‚ÿ‡…ñÛ/ÿ[–пPVë¿ètÿ’×ÍðQ—çqëžÿSQŒõ?ET†I¦ch_&ëõ?ÝÿGz†•¸gýW%8ÿÉ‚çøO÷?†ž¿þã?þ€ú?´ñï«¿·¼ÿ÷ýŸ¦ú_ˆøÏC¢Â?úåBÓÿɼšÓêg¸õ¿¬ÿgØÿ³ ÿlhú/šÓÙž¹½8w,Üú_Ôÿ¢ õÒ€dhúÿæžäßên˜:Á~ðÿøŸªþ?àÿ“
+Mÿ_ô[Ÿ7e®ûñoWöò j¸§ÿó"þgüÿ,¨€dˆù¿Ý][ ägݺžáÔÿÒÿ3þôρýúáÿ‘ËÝú_q À?þÇq„ý?ðÿʆ¦ÿá­Ý²þ§æõß0ŒqÿÖUY™#&¡Ðô__ÎO¦³ ÛÈõwüëäÿxH*€’¡è?`ðÙþðímü·öÍçÿ0ŒÐÿ…4†ýK24ý3ø¿àÿdõ_ÙÐôÏàÿBý‡ø¿dCÓ?ƒÿëÿeCÓÿÖþ¯¹þ“,@ý‡deCÌÿíïÿÂþŸûõÃÿ%—»õ¿—ÿûàÿ’
+Mÿû¿~Ôÿû~ÓƒÆ šþü_Ð?ðɆ¢ÿˆ£ÿ—‚ÿ‹ÚøoíÿšçBœÿc"Qê ˜\húgð¡þÃB틆¦ÿö,Àÿ%¢þíù±êõÓÉä.:õ¯õŸ0Büg!øzÌ¡éwÿgˆûÿx€ÿS64ý3ôÿÃùâ& Éóÿûû?±þgÁ~ýÿpÿŸTîÖÿ&þÏ…þcø¿yãÇðнXhúgèÿ‡þŸ, ÿŸl¶Èÿ+Ç3ÜúÿAþúgùÙÐô¿µÿ{~þ#Žýs ² 7€†¢ÅÑÿ÷³@†þŸ¸ÿ‰ôÿ”
+Mÿþo¬ÿX€ÿC64ý3ø¿QÿeþoÙÐôÏÐÿëÿeCÓ?CÿOÔX@÷Ùóûû?±ÿgÁ~ýèÿ)—»õ¿WÿOìÿY@ÿOÙÐô¿µÿsYÿ‹±ÿgá÷ººKa³7˜
 BÓ?CÿOèŸôÿ”Íjý7µÍõ“žáŸÿ"…õ?ÈÿËf}üo/egþò´~NX…ûù?ƒ$Eÿ_¼Ç¿3'=\s?Î…ß;þùŸHÅèÿÁò?²ñÖÿøZÕe“—.·¬x†;ÿ3Ÿÿãñ?Ð?*›F “€P¼õßzÜ>çúUW§éø¯ýøbê¢2,œúOæúO…þ,¼ëÿAEï¯êýõ:2‡ë懟²þŸ›WÓÕM·âîø¿ÈÿèÿÃCkº²éκ.4.
+âÿm&ø0àÔš-úÿÂÿÁCÑÔ½é^­…×<4õÑŒSÁñá2~Ö·º0móe|«Ç?ün¦Àrু¬ÿ÷ÿèÿÁöÿ²ñÖÿSÕôù©:WëÕà¯ÿq€ûX€þeCŽÿgýu¿øe¸ÿ™è_6äúßÐ麟N}çÖP÷œÿœ÷ÿKöÿ< ~ѐõ¿küƒùÿeC×Uo¦ÿ`žÿ‡ÿ‡‹ä/ÿýÿ ‡ÞÏ>)ܯÿo¦Ðÿ—âøÕÙäc°?99çÿEý7ŽÑÿ“‡›ÿ+ɬé&útóŸnN°ñ]p{w¸½ù·ÿÙ`#¨úo}ºæ€ÜÏp¯ÿæçÿb•býǤ,zýgßýü<`ÿ'²þ]õjÖ¸¿)þï(ÎB蟃ÉßY7_?ã"x‰xë_—¥)ü€»ãÿâüw˜¡þÃΈÿmã¯Ö˜ãŠg¸ãÿ¢ÿo àÿbá—KÝ_Ú¶éÆ)ýWLâX§ÿˆÒöçÓeý'ÎÒÿ*bôÿaaíøMÛœšç·½û?M㙝ÿ1þûã=þß®þiuñY?›¼r.Üëÿp6þq’ÁÿÉR²ñÖÑtk4ÿ=þúÃõ?"è_44ý÷Õ“Môknÿð;ÿq‹ÿèÿÄCð¨ÐX0Þú^:£^3€üOàÿfñ_6÷êÍ3œúÿ.ÿÕ”áþì×ÿß÷a€@÷­ÿ×=ƒ ÿ8AÿwþOÿeYBÿâX«ÿ¢ÓýK^7ÃGMžÿ?¸õ?¯ÿ¨0EþŸ¥™ŽQÊjýO×ÿÑža%îYÿUAŒú/~ã?]ÿúþø¿
+3ÔÿY _ýís 3þ/òÿ¡Jáÿc!Qáþr!éÿd^Íiý3Üú_Ôÿ#…ý?¸ýW6$ýÍ‹élËÇÜÞ	œ»–nýGóúß8@ÿ¤1& ɐôÿÍ<É¿ÕÝ05‚ýèþñ?U¨ÿó ólHúÿ¢ßú¼)sݏ¹²wUÃÇíŸ)ñ?EÿgTŠ	@2´üß‹î® ò³nÏpêQÿUŠý?öë‡ÿG.÷êÍ ÿõ¥ðÿ³ ÿ¯lHúÞÚMëÿO¨Ðÿ‡‡?몬̳€PHú¯/ç'ÓÙ€íä|†;þÇóø"ÿÇC¢P”Aÿ‹ÿ+‚ÿ‹ÒøoîÿšÏÿ¡JÑÿ•…4†ýK2$ýsø¿àÿdõ_ِôÏàÿ
+Qÿaþ/ِôÏáÿÂúŸÄِô¿¹ÿkÑÿ)PÿaÙ_ÙÐòþ/ìÿY°_?ü_r¹Wÿ{ù¿ôcþ/ِô¿µÿëýpÿ#¿éAc
+Iÿþ/èŸø¿dCп÷epVáÞþ¯þ/H㿹ÿkžÿ	qþ‰D©`r!éŸÁÿ¢þÃò?²!韣ÿö,Àÿ%šþíù±êõÓÉäN™:õ¯æúÎÿó|½
+扐ôÏáÿ„ÿƒø?eCÒ?Gÿ?œÿg!†éK4´üÿþþOôÿáÁ~ýïþÏ÷ÿÉã^ýoãÿ\ø?"ÜÿÇCð˜@õ‚!韣ÿîÿ`ýÿd³Aþ_¹žáÖÿòÿÐ?Èÿˆ¤ÿÍýßóóqâü*pˆ`úW,þoÜÿÍiü9ú"ÿÃúʆ¤ŽþŸXÿ± ÿ‡lHúçð£þËüß²!éŸÃÿ‰õ?ˆÿ²!韣ÿ'ê?, û‡lhù?†þŸØÿ³`¿~ôÿ”˽úß­ÿ'ú¿°€þ²!ésÿç²þ—aÿÏÂïu?t—¦o0„¤ŽþŸÐ?èÿ)›µúoj›ë§=Ãý?Î ¨ÿ±€ü¿lVÇÿöRvæ/_ëç„UøzÿgfõŸüŸøŽgNz¸æ~Ü¿wüçÿ(Àþädã«ÿñµªË&/.]n?Xówþg>ÿGY‚þŸ,¨lÌBñÕ_èq#øœëW]¦ã¿öã‹©‹Ê|´ pê?™ë?#ÔYx×ÿƒŠÞ_Õûëud×Ì?)Tý?7¯¦«›nÍ3Üñžÿ2ÜÿÊCkº²éκ.4.ûãÿm&ø8àÔšÍã?ú0Q4uoºWëá5M}4ãTp|¸ŒŸõ­.ÌCÛ|ßêñ¿›)°øi êïýÿØÿËÆWÿOUÓç§ê\yˆÁ_ÿa’ ÿÏô/jü?ë¯;Åÿëþ÷?ó ýˆZÿ:]÷Ó©ïÜêâ®óŸóþi€û¿x8@ü¢¡êïø#ÿÏâ¿lÈú¯êíôdý'Èÿ³p€üEã½ÿôÐ{ºÀ'…{ù¿Ujã?üßûCÿ¡:›|Œ ö'÷¡ çü¿¨ÿƱBý‡…›ÿ+ÉÂ(É‚O7ØøN}{ÜÞnoþí6Ø¢þ›AŸ®9 Ïp¯ÿ¹þ•Bþ—HY6äúÏÎû?ÜÿÂö²¡êÿØU¯f•ûÛ×ÿ=ù¿âõ&gÝ|yüŒîñÕ¿.KSx ÷[ÿOñ?§èŸœÿ–
+5þÛÆ_­1Ç5ÏpÇÿtáÿŽáÿdá—KÝ_Ú¶éÆ9ýWÌâX§ÿ8%5þygÚᯬÿ$jü\eJ¡þÃÂêñš¶95Ïo„_ïñƒ,SüÇÿÛå?­.>ëg“W®E€Ï
 úÿ:þq£þÇÖÿ²ñ×Ñt+4ÿ=þú#…ü¸þO6Dý÷Õ“MôÝÿ‘Îã‚þ/<Décœa‹¿þ‡—Îè£ÏàÖ4Óÿøÿáÿf!N!~ÉÜ­ÿÏpê_-â€þ¯<ÄÁÿÝÿ<î\ÿ¯z†¿þ£$Bý…²,¡Á¬ÖÑéþ%¯›áÃ6ÏâÖÿ|ý¯¢ñŸÇi¤2Cü"Y¯ÿé@Ò3¬Ä=ë¿ÊöAýw<Ǻ 2ÜñüïmþOPÿg6þ}õ·Ç]€Îøÿ]ÿ§÷ú_#ÿÇB¢Â?ùåBÓÿɼšÓêg¸õ¿¬ÿãþ7pû¯lhú/šÓÙ¦¹½8w,Üú_Ôÿ¢ õR€DCÓÿ7ð$ÿVwÃÔ
+öƒgøÇÿ4àÿc÷ˆ¦ÿ/ú­Ï›2×ýø·+{yP5|Ü šÿ³ þü?¢!æÿ^tw퐟uëz†SÿKÿOˆó¿<Àÿ#›»õ¿â €üãûàÿ•
+MÿÃ[»eýOÍë¿á8@ÿüYWeeŽ˜„BÓ}9?™Îf l ×3Üñ?žÇÿù?…
+ d(úü_¶ÿü_ûCÿ­ý_óù?#ôf!aÿ’Mÿþ/ø?Y@ýW64ý3ø¿Pÿaþ/ÙÐô¿»ÿKeXÿ³€ø/šþ·öÍõŸdê?, û+bþoÿöÿ,Àÿ%›»õ¿—ÿûàÿ’
+Mÿû¿~Ôÿû~ÓƒÆ šþw÷…Èÿñ ÿ—l(ú8ú…ðq@ÿ­ý_óüOˆóL$Jà “Mÿþ/ÔXÀý²¡éŸÁÿ…ýðɆ¨ûC~¬zýt2¹K§Ný/úÿÇa„øÏBðõ6˜$BÓ?Cÿ?ø?X€ÿS64ýïßÿ÷ó0H†˜ÿßßÿ‰õ?eÿ§dîÖÿ&þÏ…þcø¿yˆÃÇ8ƒîÅBÓ?Cÿ?ôÿdýÿd³Eþ_9žáÖÿòÿÐ?Èÿˆ¦ÿ­ýßóóqàþoTà˜`(úWþoÜÿÍmüúâþ'ÐÿS64ý3ø¿±þcþÙÐôÏàÿFý—ø¿eCÓ?CÿO¬ÿY@ü—
+Mÿý?QÿaÝ?dCÌÿíïÿÄþŸôÿ”ÍÝúß«ÿ'öÿ, ÿ§lhúßÚÿ¹¬ÿÅØÿ³ð{ÝÝ¥°ÙL¡éŸ¡ÿ'ôÏúÊfµþ›ÚæúIÏðÏÿ‘ÂúŸäÿe³>þ·—²3yZ?'¬ÂýüŸA’¢ÿ/Þãß™“®¹çÂïÿüO¤ôÿ`ùÙxë|­ê²É‹K—ÛV<Ýÿ™Ïÿq¢þ˂ʦÀ$ oý÷…7‚Ϲ~ÕÕi:þk?¾˜º¨Ì§þ“¹þÓD¡ÿïúPÑû«z½ŽÌÃáú‚ùá'…¬ÿçæÕtuÓ­x†;þ/ò¿úÿðК®lº³®dƒø›	>L8õŸf‹þ¿ððP4uoºWká5M}4ãTp|¸ŒŸõ­.ÌCÛ|ßêñ¿›)°øi ëçý?úð€ý¿l¼õÿT5}~ªÎÕz5øë\ àþ ِãÿYÝ/þGîæú—
+¹þ7tºî§Sß¹5ÔÅ=ç?çýÿR…ý?ˆ_4dýïÿã DþŸÄÙÐõ_Õ›é?˜çÿáÿáâ ù‹Æÿ?è¡÷sO
+÷ëÿ›…èÿËqü‡êlò1ØŸœ‡‚œóÿ¢þÇèÿÉÃÍÿ•daœɧ›,øts‚ï‚Û»ÃíÍ¿ýÏAÕ3èÓ5ä~†{ý7?ÿ«ë? eÙÐë?ûîÿàÿàû?ِõìªW³ÆýMñGqAÿLþκùòøÁKÄ[ÿº,Máw Üÿç¿Ãõpþ[6äøoµÆW<ÃÿýíGÐ?¿\êþÒ¶M7Né¿b*Ç:ýGÿ£ôý¹1íð×Ö‚ô?ÊT£þÃÁêñš¶95Ïo„_ïñmÅãρÿø»û§ÕÅgýlòʵp¯ÿÃÙøÇi‚øÏB„˜/ýM·Bóßã¯ÿ0RèÿËô/¢þûêÉfú5׬Ð:ÿI†ó,Décœa‹¿þ‡—Îè£ÏàÖ4Ó¢ú¿²ýâ—ÌÝú_ñ§þÕ"þ)ê,Á÷ÿ	æÎõÿªgøë|ÿeYBÿ‚Y­ÿ¢ÓýK^7ÃG]ž?Æ­ÿùúüñŸFexÌtñ‹d½þ§ûÿHϰ÷«ÿŽ+‚õ_<Ǻÿ1ôü5ð¥¨ÿ³@ÿ¾ú{Ëû¿ïÿt­ÿ…¸ÿ‰‡D… òË…¦ÿ“y5§ÕÏpëQÿqþÜþ+šþ‹æÅt¶çcn/ÎË·þõ?ÜÿËDcMÿß<À“ü[Ý
+S'ØžáÿÓ0€ÿÜÿ-šþ¿è·>oÊ\÷ãß®ìåAÕpOÿçEüÏpþ…ó¿¢!æÿ^twmŸuëz†SÿKÿO˜`ÿÏü?²¹[ÿ+ øÇÿxúç þ_ÙÐô?¼µ[ÖÿÔ¼þ†	ú±ðg]••9b
+Mÿõåüd:›°m€\ÏpÇÿxÿ#äÿxH*€’¡è?`ðÙþðímü·öÍçÿ0ŒÑÿ…4†ýK24ý3ø¿àÿdõ_ÙÐôÏàÿBý‡ø¿dCÓ?ƒÿëÿeCÓÿÖþ¯¹þ“L¡þò¿²!æÿö÷aÿÏü_²¹[ÿ{ù¿°ÿgþ/ÙÐô¿±ÿëGý°ÿgá7=hÌ r¡éŸÁÿý³ ÿ—l(ú8ú)ø¿8 ÿÖþ¯yþ'Äù?&¥p€É…¦ÿê?,àþ/ÙÐôÏàÿÂþø¿dCÔ¿ý!?V½~:™Ü¥S§þýÿã0Füg!øzÌ¡éÿ'îÿãþOÙÐôÏÐÿçÿYˆ˜ $CÌÿïïÿÄúŸ… Âý’¹[ÿ›ø?úáÿæ!JcìäBÓ?Cÿ?ôÿdýÿd³Eþ_9žáÖÿòÿÐ?Èÿˆ¦ÿ­ýßóóq¤pÿ7*pˆ`(úWý?qÿ7´ñgèÿ‰ûŸX@ÿOÙÐôÏàÿÆúä~eCÓ?ƒÿõ_àÿ–
+Mÿý?±þgñ_64ý3ôÿDý‡tÿ
+1ÿ·¿ÿûÐÿS6wë¯þŸØÿ³€þŸ²¡ékÿç²þ—`ÿÏÂïu?t—Âfo0„¦†þŸÐ?èÿ)›Õúoj›ë'=Ã?ÿD!Öÿ, ÿ/›õñ¿½”ùËÓú9aîçÿ’ýYðÿΜôpÍý8~ïøç"• ÿÈÿÈÆ[ÿãkU—M^\ºÜ~°âîüÏ|þƒõ_T6 &¡xë¿/ô¸|Îõ«®NÓñ_ûñÅÔEe>X8õŸÌõŸ&!ú°ð®ÿ½¿ª÷×ëÈ<®/˜~RÈún^MW7ÝŠg¸ãÿ"ÿ ÿ­éʦ;ëº0и@6ˆÿ·™àÃt€Sÿi¶ðÃÿÁCÑÔ½é^­…×<4õÑŒSÁñá2~Ö·º0móe|«Ç?ün¦Àrু¬ÿ÷ÿèÿÁöÿ²ñÖÿSÕôù©:WëÕà¯ÿ0pÿпlÈñÿ¬¿îÿqÿ3ÿ¯½÷ÝmY¶=Ïçz
+?@y.“Õ=
+ì;5Óè{0w¦ùF¤©”M”D²IÊ.÷Ó“²j×&˝Ì
+T¬ÎÙ’U]`Aé•‘±2ú—
+¹þ×·ºêÆSß¹5TÅ-ç?§ýÿR…ý?;ˆ_4dýoÿ#äÿY@ü—
+]ÿeµšþƒiþþ.v¿hü÷ÿ½î;?ø¨p¿þ¿Yˆþ¿,Ç¿/O&"€ýÉy(È9ÿÏê¿Ãê?,\ý_IÆQ|¸úÀ†wêë»àúnw}ówÿ³ÁJPõ_÷úxɹŸá^ÿMÏÿÅ*ÃúHY6ôú϶û?ø?xÀþO6dýïÛòÙ,qSüßÃJ4„þ9ýUýrÿÁKÄ[ÿúp0…ßpwüŸÿv¡Ð?8ÿ-rü·¿cöžáŽÿ³þ¿Aÿ?Ÿ«îÜ4u;Lé¿`*Ç2ýg”¶?_wøë?q–ýG ²ÀÞÿ‡úÏö,ÿ¾nêcýøºuÿ§qüà CŒ?ÞãÿõêŸFŸõ£ÉKçÀ½þ'ã§Xÿó€ÔŸl¼õ_ÔíÍ‹¿þÃ0FþŸôÿ”
+Mÿ]ù`“ Ý’Û?üμÅÿDaÿÏBp¯0Æ[ÿýSkôÞkðÿI!þ³Aü¢¹UÿKžáÔÿ7ùÿ·øoK‚Ð?öë»ÿo‡\€<n[ÿ/{†¿þ£8…ÿ—…éÿp8@ÿâXªÿ¢ÕÝS^Õý{Mžÿ·þ§ëfðÿ±Æi˜d:Fì—Ébý×ÿÑža%îYÿU
+÷ÿ°à7þãõ¡ï¯ÿø«(@ýŸÒøwåŸ>7:ãÿ,ÿo€#þs¨ð7„~¹ô4Ïæ¸ünýÏêÿQˆý?¸ýW6$ýõ“imËÇÜÞ	œ»–nýGÓú_áþoÒ€dHúÿêåßè¶Á¾÷ÿøŸ*Ôÿy€ùG6$ý¿è×.¯¹î†¿\Ú»ƒÊþýöÏ”øŸÆðÿ³ RL ’¡åÿžt{é Ÿtã|†Sÿsÿú1a¿~øär«þ— ð_ÿÇQ
+ÿ?ðÿʆ¤ÿþµYµþ§¦õßPeÐ?¿Wå¡4{ÌB!é¿:ŸLk3 ¶óîøOãˆü‰BP2ý,þ¯ þ/H㿺ÿk:ÿ‡*Í0ÿsÆ°I†¤ÿüŸ, þ+’þ9ü_¨ÿ° ÿ—lHúgð…Xÿ³€ø/’þW÷Íú?¥ê?, û+ZþÁÿ…ý?öë‡ÿK.·ê3ÿú¿± ÿ—lHú_Ûÿõ½þØÿ³ðI÷S€\Húgð!ÿÇü_²!è?bñEðq@ÿÕý_ÓüOˆóL$Jíà “Iÿþ/ÔXˆ }ѐôÏáÿÂþø¿dCÓ¿ý!ß—~8šÜ)S§þÕTÿ±Âù‚/×AÀ< ’þ9úÿÁÿÁüŸ²!韣ÿÎÿ³ï0H†–ÿgðbýÏ‚ýúßîÿ+°Ç­ú_Çÿ9õÅQ†øÏBz¯°Iÿýÿpÿèÿ'›òÿÊõRþúgùِô¿ºÿ{¶þ#œÿbAen AÿŠÅÿû¿Y ?CÿÏ÷?±€þŸ²!éŸÃÿõHþʆ¤ÿ7ê¿,Àÿ-’þ9üŸXÿ³€ø/’þ9ú¢þúȆ–ÿcðbÿÏ‚ýúÑÿS.·ê³þŸèÿÂúʆ¤ÿÕýŸ³ú_`ÿϯU×·ç¦o0„¤ŽûŸ¡ÐÿS6Kõ_W6×O{†ÿú˜PÿcùÙ,ŽÿÍùК?|­Ÿ#Vá~þÏ QèÿË‚ïø·æ¨ûKîǽð{Ãþö< ÿ#_ý¯eu¨óâÜæöƒ%Ïpç¦ó”%¨ÿ² ²q0ÅWÿ]¡‡àc®ŸuyÿڏϦ*JóÞ‚À©ÿdªÿá¿Fÿ?Þô§¢·Wõöz™»ÝåóÃ
+Uÿõ³i«º]òwüŸæ£÷¿òИöP·']Èíñÿ:¼Ÿpê?Ífþoôÿ桨«Î´ÏÖÃkîêjo†©`w>ë]˜»¦~Þêá¿™)°øa êëý?úð€ý¿l|õÿPÖ]~,O¥‡üõ&	îÿaú—
+5þŸô—Mã?îæú—
+µþ×·ºêÆSß¹5TÅMç?§ýÿÒ ûv¿h¨úß:þ'Èÿ³€ø/²þËj=ýÓü?ü?\ì Ñxïÿ{Ýwž.ðQá~ýÓýY _žL>D û“ûPsþŸÕãý?y¸ú¿’,ŒÒ$ýpõ®N°á]p}·»¾ù»ÿÙ`%ˆú¯{}¼ä€<ýþ›õÿP
+ë? eِë?ïÿàÿàû?ÙPõ¿oËg³ÈýMòÇ!ú±0ú;«úåþ3.‚—ˆ¯þõá`
+Ïàþëÿ(qÿ38ÿ-jü·¿cöKžáŽÿÓþ¿QÃÿÅÂÏçª;7MÝsú/˜ıLÿQDjüóƸÃ_XÿI‚á¿S™R	ê?,ÿ¾nêcýøJøEðÿ0È2ÔÿXðÿ¯—ÿ4ºø¬M^º>ëÿËøÇ)â?èþ)ýu»@óßâ¯Û úç ‚þECÔW>Ø4@·Òýé4þ'8ÿÁCßG	æ ±øë¿jÞûÌ nýGý'*@þŸ… ÑܬÿÏpê_Íâ€ó_<ØÍ×Çë8`*ǍëÿEÏð×”ÀÿÇÃðí>пPë¿hu÷”Wuÿn›çwqëšÿSQŒõ?&NÃ}¦ch_&Ëõ?^ Hz†•¸gýW¥ê¿xŽÿxd¸áùßëüó¿<ÐÆ¿+ÿô¸Ðÿ¿éÿôVÿÿyHTøB¿\hú?šgs\ü·þçõÿûàÿ‘
+MÿEýdZÛô1··çŽå€[ÿ³ú_ þÏBcMÿ_=À£üÝöc+ØwžáÿÓ÷¿ò€û¿eCÓÿ‹~íòúënøÛ¥½<¨ìßo MˆÿY ÿ?*Å bþïI·— ùI7®g8õ?÷ÿ„1öÿ,ðÿˆæfý/8 àÿã8ÂþŸøeCÓÿÚ¬YÿSÓúo8Ì Ð?¿Wå¡4{LB¡é¿:ŸLk3 ¶ëîøOã„ü‰BP2ýþ/Ûÿþ¯í¡ÿÚþ¯éü†ú¿³Æ°I†¦ÿüŸ, þ+šþü_¨ÿ° ÿ—lhúßÜÿ¥2¬ÿY@ü—
+Mÿkû¿¦úO² õý•
+1ÿ·½ÿûø¿Ds³þ·òaÿÏü_²¡éeÿ×÷ú?`ÿÏÂ'ÝkÌ r¡ésÿWˆüðɆ¢ßËà¬Â½û…ðq@ÿµý_ÓüOˆóL$Jíà “Mÿþ/ÔX@úG64ý3ø¿°ÿcþ/ÙõoÈ÷e§Ž&wéÔ©5«ÿ„â?Á—ë `Mÿýÿàÿ`þOÙÐô¿}ÿ?ÜÿÍC¼Ã bþ{ÿ'Öÿ,öþ¿[ ©Ü¬ÿUüŸ3ýÇðó÷QÝ‹…¦†þèÿÉúÿÉfü¿r<íÿïäÿ¡ÿ—
+Mÿkû¿§ç?â(¡TàÁPô¯8ü߸ÿ›Úø3ôÿÄýO, ÿ§lhúgðcýÇü²¡éŸÁÿú/ðˆ¦†þŸXÿ³€ø/šþú¢þúȆ˜ÿ
 ÛÞÿ‰ý?úŠæfýoÕÿûÐÿS64ý¯íÿœ×ÿbìÿYøµêúö\Øì
+&ÐôÏÐÿúgý?e³Xÿuesý¤gøçÿ‚HaýÏòÿ²Yÿ›ó¡5xZ?G¬ÂýüŸA’¢ÿ/Þãßš£î/¹çÂï
+ÿüO¤ôÿ`ùÙxëx-«Cç6·,x†;ÿ3ÿã Dý—•#€I@(Þúï
+=lsý¬Ëãxü×~|6UQšwNý'Sý§‰BÿÞô§¢·Wõöz™»ÝåóÃ
+Yÿõ³i«º]ðwüŸåôÿá¡1í¡nOº*4.âÿu&x7àÔšÍúÿÂÿÁCQWiŸ­…×ÜÕÕÞSÁþî<|Ö5º0wMý2¼ÕÃ~3S`9ðÃ@ÖÿÆûôÿàûÙxëÿ¡¬»üXžÊåjð×ÿ° Àý?,@ÿ²!Çÿ“þ²]ü2ÜÿÌô/rý¯ouՍ§¾sk¨Š[ÎNûÿ¥
+ûv¿hÈúß4þÇAˆü?ˆÿ²¡ë¿¬VÓ0ÍÿÃÿÃÅòÿþ¿×}ççî×ÿ7Ñÿ—âø÷åÉäC°?99çÿYý7ŽÑÿ“‡«ÿ+ÉÂ8ƒWØðN}}\ßí®oþî6X	ªþë^/9 ÷3Üë¿éù¿X¥Xÿ± )ˆ^ÿÙvÿÿØÿɆ¬ÿ}[>›%îoŠÿ;гúç`ôwVõËýg\/oýëÃÁ~ÀÝñvþ;ÌPÿaç¿eCŽÿ¶ñWcÌ~Á3ÜñÖÿ×~ý3ðó¹êÎMS·Ã”þ¦q,Ó@iûó•q‡¿°þgé*¢õ–Ž_7õ±~|ݺÿÓ8þa)ôbÁ{ü¿^ýÓèâ³~4yé\¸×ÿádüã$Cÿ'ú“·þ‹º]¢ùoñ×FØÿ³ ýˆ¦ÿ®|°I€nÉí~ç?®ñ÷ñÜ+´ Œ·þû§Öè½×àÿœÿ`ñ_6·êÉ3œúÿ&ÿÑ”¡þσýú¯÷ÿa! ÛÖÿËžAМàü7ÿÒÿáp€þűTÿE«»§¼ªû÷š<ÿnýOë?*L‘ÿgAi•é» ©,ÖÿxýíVâžõ_(Ô9ðÿñúÇÐ÷×ÀüU˜¡þÏiü»òOŸ› ñ–ÿUŠó?,$*ü
+Á_.$ýͳ9.†[ÿ³ú?îÿd·ÿʆ¤ÿ¢~2­mù˜Û;s×rÀ­ÿhZÿÑÿ™‡4Æ ’þ¿z€Gù7ºíÇF°ï=Ã?þ§
+õPó“
+Iÿ/úµËëC®»á/—öî ²¿ý3%þ§òÿ,¨€dhù¿'Ý^: ä'Ý8ŸáÔÿ¬þ«ûì×ÿ\nÕÿ’ þëÿ8Jàÿg•ِôß¿6«ÖÿfþŸý?™ø½*¥Ùc
+IÿÕùô`Z›°]€œÏpÇÿxÿCäÿxH*€’!èß»U¸·ÿ÷?°@ÿÕý_Óù?TI†ùŸƒ4†ýK2$ýsø¿àÿd9_ِôÏáÿBý‡ø¿dCÒ?ƒÿKaýÏâ¿lHú_Ýÿ5ëÿ”âþ_ý•
+-ÿÇàÿÂþŸûõÃÿ%—[õ¿™ÿýßX€ÿK6$ý¯íÿú^ÿìÿYø¤{)@.$ý3ø¿ÿãþ/Ùô±ø¿"ø¿8 ÿêþ¯iþ'Äù?&¥vp€É…¤ÿê?,àúoِôÏáÿÂþø¿dCÓ¿ý!ß—~8šÜ)S§þÕTÿ±Âù‚/×AÀ< ’þ9úÿÁÿÁ<²!韣ÿÎÿ³ï0H†–ÿgðbýÏ‚ýúßüŸîÿ“Ç­ú_Çÿ9óD¸ÿ‡à>êCÒ?Gÿ?ÜÿÁúÿÉf…ü¿r=íÿïäÿ¡ÿ—
+Iÿ«û¿§ç?â0Äù/TàÁô¯Xü߸ÿ›Òø3ôÿDþ‡ôÿ”
+Iÿþo¬ÿX€ÿC6$ýsø¿QÿeþoِôÏáÿÄúŸÄِôÏÑÿõÐýC6´üƒÿûì׏þŸr¹Uÿ›õÿDÿ`û
+Iÿ«û?çõ¿û~­º¾=6}ƒ™@ $ýsÜÿý³€þŸ²Y¬ÿæ|h;֯«p?ÿWèÿÉ‚ïø·æ¨ûËÞÏ=ñ¿á¿ÿ‹¬ÿxÀþO6¾ú^ËêPçŹÍíKžáÞÿMçÿ(‹QÿaaØh[0ÅWÿ]¡eõ˜ëg]Çãö㳩ŠÒ¼· pê?™ê?#ôÿbáMÿw*z{Uo¯—‘¹Û]^0?ü PõÿX?›¶ªÛ%ÏpÇÿiþ'Êpÿ#iu{ÒUa qÜÿ¯3Áûé §þÓlæÿDÿ_ŠºêLûl=|æ®®öf˜
+öwçᳮх¹kê—á­þð›™ˁªþ·Þÿãü?ØÿËÆWÿeÝåÇòTzˆÁ_ÿaãþ ÙPãÿIÙ4þãþW ÙPë}««n<õ™[C at UÜtþkÚÿ+
+°ÿçañ‹†ªÿ­ãŒü?ˆÿ²!뿬ÖÓ0ÍÿÃÿÃÅò÷þ¿×}çéî×ÿ3Ñÿ“Úø÷åÉäC°?¹O:çÿYý7ŽÑÿ‡«ÿ+ÉÂ(	’WXðáêÞ×w»ë›¿ûŸ
+V‚¨ÿº×ÇKhÁ3Üë¿Ùù`ýǤ,rýgãýü<`ÿ'ªþ÷mùl¹¿IþïX¡ÿ£¿³ª_î?ã"h‰øê_¦ð< î¿þB…ûßY@è—
+5þÛÆ?1û%ÏpÇÿiÿÏ(‹àÿbáçs՝›¦n‡9ýÌâX ÿº²mþox†;þOü_j?â?Á}œAörYÿUFjüõƘá[XÿMeõ¯ú±°xüûº©õã+áÁ{üà K3Œ?þãÿõòŸFŸõ£ÉK×&Àgÿÿ8áÿf=ÿeã¯ÿ¢nhþ[üõF¨ÿó@ÿ¢!ê¿+l°[éþtÿÜÿÃ
+ïÃs€Xüõß?µFï}f ·þ£‰þ“ CþŸ…ìŸhnÖÿ‚g8õ¯fñß¶„…þ°_¿½ÿ/´o0ˆãÆõÿ¢gøë?J"ÔÿXxÓÿáp€þ%²XÿE«»§¼ªûwÛ¼¿‹[ÿÓüŸŠàÿá!Q’éÚ—Érý ’ža%îYÿUIŠú/žã?^ nxþÿ:ÿǨÿ³@ÿ®üÓÃèÎÿ%Óú_ˆøÏC¢ÂßúåBÓÿÑ<›ãâg¸õ?¯ÿÃÿËnÿ•
+MÿEýdZÛô5·GrÇrÀ­ÿYý/
+Pÿg!1H†¦ÿ¯àQþnû±ô;Ïðÿ©Êàÿcþ_ÙÐôÿ¢_»¼>äºþvi/+û÷ÀâÀÿÏ‚J1H†˜ÿ{Òí¥H~ҍëNýÏý?aŒý?öë‡ÿG.7ëÁ ÿøo¡àÿ•
+Mÿýk³fýOMë¿aˆû_xø½*¥Ùc
+MÿÕùô`Z›°}À\ÏpÇÿx¶þGþ‡D¡(ŠþÿWÿ´ñ_Ûÿ5ÿÃ0BÿgÒö/ÉÐô¿½ÿ+…ÿ“ÔeCÓ?ƒÿõàÿ’
+Mÿþ/¬ÿY@ü—
+Mÿkû¿¦úO² õý•
+1ÿ·¹ÿç?y°_?ü_r¹Yÿ[ù¿°ÿgþ/ÙÐô¿²ÿë;ýbìÿYø¤{@.4ý3ø¿ àÿ’
+EÿƒÿËö†ÿk{hã¿¶ÿkšÿ	qþ‰D©`r¡éŸ¡ÿê?,àîÙÐôÏàÿÂþø¿dCÔ¿ý!ß—~8šÜ¥S§þÕ¬þFˆÿ,_®ƒ€y@"4ý3ø?áÿ`þOÙÐôÏÐÿçÿYˆw˜ $CÌÿoßÿëì×oýŸîÿÉÍú_Åÿ9Óÿ7*¼‡T04ý3ôÿCÿOÐÿO6käÿ•ã¤ü?ôÏòÿ²¡émÿ÷ôüG
+ý3 ² 7€†¢ÅÑÿ÷³@†þŸ¸ÿ‰ôÿ”
+Mÿþo¬ÿX€ÿC64ý3ø¿QÿeþoÙÐôÏàÿÄúŸÄÙÐôÏÐÿõÐýC6ÄüßöþOìÿY°_?úÊåfýoÕÿû`þ”
+Mÿkû?çõ¿û~­º¾=6{ƒ‰@ 4ý3ôÿ„þY@ÿOÙ,Ö]Ù\?éþù¿ RXÿ³€ü¿l–Çÿæ|hÍžÖÏ«ðåþÏÐê?IüŸxkŽº¿ä~œ¿7üò?vü#ãü/ÈÿÈÆ[ÿÃkYê¼8·¹ý`Á3ÜùŸéüÿýs ²q0	Å[ÿ]¡‡àc®ŸuyÿڏϦ*Jó΂À©ÿdªÿ4Q¨ÿ²ð¦ÿ;½½ª·×ËÈÜí./˜~PÈú¬ŸM[Õí‚g¸ã<‹ÿððИöP·']È
+ñÿ:¼›pê?ͦñý?˜(êª3í³µðš»ºÚ›a*Øß‡ÏºF殩_†·zøÃof
+,~Èúßxÿàþ/°ÿ—·þʺˏå©\®ý ø?X€þeCŽÿ'ýe›øoýQ†ûŸy€þeC®ÿõ­®ºñÔwn
+UqËùÏiÿ¿Táü;ˆ_4dýoÿã@ÁÿÃâ¿lèú/«Õôd3ý‡Èÿ³°ƒüEã¿ÿïußù¹ÀG…{ù¿Ufã?üßÛCÿ¾<™|ˆ ö'ç¡ çü?«ÿÆq†úWÿW’…Ñ.Ý}¸úÀ‚W'Øð.¸¾Û]ßüÝÿl°Tý×½>^r@îg¸×áTÿ*Eþ—HY6ôú϶û?ÜÿÂö²!ëß–Ïf‰û›âÿŽâõFgU¿ÜÆEðñÖ¿>Láw Üÿgç¿CÜÿÁΈÿmã¯Æ˜ý‚g¸ã:ó+ø?Yøù\u禩ÛaJÿS8–é?ÜQúþ\wø‹ë?Ã<¡2¨ÿp°xüûº©õã+áÁ{üÃ`ôÿbü·Çü¿ÞýÓèâ³~4yéZ¸×ÿádüã4ÁþŸtÿ”¿þ‹º] ùoñ×)ø¿XÀõ²!ê¿+l [rýÇý§ÓøŸ ÿÇCßG	æ ±øë¿jÞûÌ nýGý'*€ÿ‡…e?ÑܬÿÏpê_Í␠ÿÏ‚ýú?¾|a’ǍëÿEÏð×”D)ôÏÁðí>пPë¿hu÷”Wuÿ^—ç÷qëšÿSQŒõ?EtˆT¦ch_&Ëõ?ÞÿGz†•¸gýW¥ê¿xŽÿxÿcèùkà?þöŒ?´ñïÊ?×¼ÿ÷ßú?Å—ûÿYHTøB¿\hú?šgs\ü·þçõÿûàÿ‘
+MÿEýdZÛó1·—çŽå€[ÿ³ú_„ûŸxHa 
+Mÿ_=À£üÝöc'ØwžáÿÓ0€ÿÜÿ-šþ_ôk—ׇ\wÃß.íåAeKÿçYüÏüÿ,¨€dˆù¿'Ý^Z ä'ݸžáÔÿÜÿÆØÿ³`¿~øär³þ ðÿqŒû_y€ÿW64ý÷¯Íšõ?5­ÿ†aŒûXø½*¥Ùc
+MÿÕùô`Z›°m€\ÏpÇÿxÿ#äÿxH*€’¡è?àð…ðq@ÿµý_ÓùXÿáþÒö/ÉÐôÏàÿ‚ÿ“ÔeCÓÿöþ¯ õàÿ’
+Mÿþ/¬ÿY@ü—
+Mÿkû¿¦úO² õý•
+1ÿ·½ÿûì×ÿ—\nÖÿFþ/ôâþ/ÙÐô¿²ÿë;ýìÿYø¤{@.4ý3ø¿ àÿ’
+Eÿ‡ÿ+ÿ‹Úø¯íÿšæBœÿc"Qj˜\húgð¡þÃB틆¦†þ_Øÿ± ÿ—lˆú·?äû²ÓG“»têÔ¿šÕ† ôÏAðå:˜$BÓ?ƒÿþàÿ”
+MÿýÿpþŸ…þÑóÿÛû?±þgÁ~ý#Üÿ'•›õ¿Šÿs¦ÿþoÂø>ü	ºMÿÛ÷ÿKÐÿ“ôÿ“Íùåx†[ÿóü?úÿò€ü¿lhú_Ûÿ==ÿGÃGÐ?*pˆ`(úWþoÜÿÍmüúâþ'ÐÿS64ý3ø¿±þcþÙÐôÏÐÿõ_àÿ–
+MÿþO¬ÿY@ü—
+MÿÛ÷ÿT¨ÿ°€î²!æÿ¶÷bÿÏ‚ýúÑÿS.7ë«þŸØÿ³€þŸ²¡émÿç¼þ—`ÿϯU×·çÂfo0„¦†þŸÐ?èÿ)›Åú¯+›ë'=Ã?ÿD
+ëÿ—Íòøßœ­ùÃÓú9bîçÿ’ýYðÿÖuÉý8~oøç"• ÿÈÿÈÆ[ÿÃkYê¼8·¹ý`Á3ÜùŸéüê¿,¨lLBñÖWèa#ø˜ëg]Çã¿ö㳩ŠÒ¼³ pê?™ê?Mú°ð¦ÿ;½½ª·×ËÈÜí./˜~PÈú¬ŸM[Õí‚g¸ãÿ,ÿ ÿiu{ÒUa q¬ÿ¯3Á»é §þÓlæÿ†ÿƒ‡¢®:Ó>[¯¹««½¦‚ýÝyø¬ktaîšúex«‡?üf¦Àrà‡¬ÿ÷ÿèÿÁöÿ²ñÖÿCYwù±<•ËÕà¯ÿ0pÿпlÈñÿ¤¿lÿ¡ ِë}««n<õ[C at UÜrþsÚÿ/UØÿó°ƒøECÖÿÆñ?DþŸÄÙÐõ_V«é?˜æÿáÿábù‹Æÿßë¾ós
+÷ëÿ›…èÿËqüûòdò!ØŸœ‡‚œóÿ¬þÇèÿÉÃÕÿ•da¬TðáêÞ©¯ï‚ë»ÝõÍßýÏ+AÕÝëã%ä~†{ý7=ÿ¿–Ð?²lèõŸm÷ðð€ýŸlÈúß·å³Yâþ¦ø¿£8K¡FgU¿ÜÆAP‰xë_¦ð; îŽÿ³óßa†ú8ÿ-rü·¿cöžáŽÿ³þ¿Aÿ?Ÿ«îÜ4u;Lé¿`*Ç2ýÇ¥ïÏ•q‡¿´þ£†ÏU¦†)õ_7õ±~|%ü"xdYˆñçÀü¿ÞýÓèâ³~4yéZ¸×ÿádüã4AþŸ…1_4þú/êvæ¿Å_ÿa¤°þg!þECÔW>Ø,@·äúúO§ñ?I‘ÿg!Jïãs€Xüõß?µFï}f ·þ£‰þ‡ÿEÿ ~ÙܬÿÏpê_Íâ€þÏ<XÿÏÇë8`*ǍëÿEÏð×”D¨ÿ³p8 Á,ÖÑêî)¯êþ½.ÏïãÖÿtý¯¢ñŸÇi”d:†øE²\ÿãý¤gX‰{ÖUªPÿåÀsüÇûCÏ_ÿñ~@ýŸÚøwåŸkÞÿûmÿ§Ký/Œ‘ÿc!Qáoˆür¡éÿhžÍqñ3ÜúŸ×ÿáÿç·ÿʆ¦ÿ¢~2­íù˜ÛKsÇrÀ­ÿYý/
+Pÿg!1H†¦ÿ¯àQþnû±ì;ÏðÿiˆþÏ<àþoÙÐôÿ¢_»¼>äºþvi/*û[ú?Ïâ¦àÿgA¥˜ $CÌÿ=éöÒ ?éÆõ§þçþŸ÷?ò ÿlnÖÿ‚ þñ?Ž#ìÿY€ÿW64ý÷¯Íšõ?5­ÿ†aŒþ,ü^•‡Òì1	…¦ÿê|z0­Í Ø6@®g¸ã<ÿò<$
+@ÉPôpø¿ø¿8 ÿÚþ¯éüo
+ ˜ÿ9HcØ¿$CÓ?ƒÿþOPÿ•
+Mÿþ/ÔX€ÿK64ýoîÿRÖÿ, þˆ¦ÿµý_Sý'îâÙ_ÙóÛû¿°ÿgþ/Ùܬÿ­ü_Øÿ³ ÿ—lhú_Ùÿõ½þØÿ³ðI÷3€\húßÜÿ"ÿÇü_²¡è?âðEðq@ÿµý_ÓüOˆóL$Jíà “Mÿþ/ÔXÀý²¡éŸÁÿ…ýðɆ¨ûC¾/;ýp4¹K§NýÏúÿÇa„øÏBðå:˜$BÓ?Cÿ?ø?X€ÿS64ý3ôÿÃùâ& ÉóÿÛû?±þgáPÀÿ)™›õ¿Šÿs¦ÿþoâðPÁÐôÏÐÿý?Y@ÿ?Ù¬‘ÿWŽg¸õÿü?ôÏòÿ²¡émÿ÷ôüG¸ÿ›•¸D0ý+ÿ7îÿf6þÛ÷ÿŒqÿèÿ)šþüßXÿ± ÿ‡lhúgð£þËüß²¡éŸÁÿ‰õ?ˆÿ²¡éŸ¡ÿ'ê?, û‡lˆù¿íýŸØÿ³€þŸ²¹Yÿ[õÿÄþŸ˜?eCÓÿÚþÏyý/ÁþŸ…_«®oÏ…ÍÞ`"Mÿ÷?Cÿ, ÿ§lë¿®l®Ÿôÿü_)¬ÿY@þ_6Ëãs>´æOëçˆU¸Ÿÿ3HRôÿeÁ{ü[sÔý%÷ã\ø½áŸÿ¦ôÿ`ùÙxëx-«Cç6·,x†;ÿ3ÿã Dý—•#€I@(Þúï
+=lsý¬Ëãxü×~|6UQšwNý'Sý§‰BÿÞô§¢·Wõöz™»ÝåóÃ
+Yÿõ³i«º]ðwüŸåôÿá¡1í¡nOº*4.âÿu&x7àÔšÍüßððPÔUgÚgká5wuµ7ÃT°¿;Ÿu.Ì]S¿oõð‡ßÌXü0õ¿ñþý?xÀþ_6Þú(ë.?–§r¹üõ?, pÿпlÈñÿ¤¿lÿ£÷?ó ýˆ\ÿë[]uã©ïܪâ–óŸÓþ©ÂþŸ‡Ä/²þ7ÿñ°€þ9@ü—
+]ÿeµšþƒiþþ.v¿hü÷ÿ½î;?ø¨p¿þ¿Yˆþ¿,Ç¿/O&"€ýÉy(È9ÿÏê¿qŒþŸ<\ý_IÆI˜}¸úÀ‚W'Øð.¸¾Û]ßüÝÿl°Tý×½>^r@îg¸×Óó±J±þcR–
+½þ³íþþ°ÿ“
+Yÿû¶|6KÜßÿwg1ôÏÁèï¬ê—ûϸ^"Þúׇƒ)ü€»ãÿìüw˜¡þÃΈÿmã¯Æ˜ý‚g¸ãÿ¬ÿo àÿbáçs՝›¦n‡)ýLâX¦ÿ0¦ôý¹2îð—Ö†µÀ þáGÔ8X<þ}ÝÔÇúñ•ð‹à=þa¥ÆŸÿñÿz÷O£‹ÏúÑä¥k
+à^ÿ‡“ñÓþOÐýS6þú/êvæ¿Å_ÿa„ûx@ê_6DýwåƒÍtK®ÿX ÿtÿÇþŸÐÿö„ñ}”`‹¿þû§Öè½ÏàÖ4Ñàü'!îÿÍÍú_ð§þÕ,þ¸ÿ‡ûõÞ¾˜
+ÄqãúÑ3üõ%ú¿³0|û‡‡ô/”Åú/ZÝ=åUÝ¿×åù}ÜúŸæÿTaýÏBB•éÚ—Érý÷ÿ‘ža%îYÿUIŠú/žã?Þÿzþø¿ŠbÔÿY Wþ¹æý¿ßöºÔÿBÄþ†Ð/šþæÙ?íÿyý?ÃþŸødCÓQ?™Öö|Ìí¥À¹c9àÖÿ¬þáü/)ꢡéÿ«x”£Û~ìûÎ3üãª2øÿXÀýß²¡éÿE¿vy}Èu7üíÒ^Tö·ôžÅÿ,€ÿŸ•b1ÿ÷¤ÛK€ü¤×3œúŸûÂûì×ÿ\nÖÿ‚ þñ?ÞBÿÀÿ+šþû×fÍúŸšÖÃ÷?óð{UJ³Ç$ šþ«óéÁ´6`Û ¹žáŽÿñlýü‰BP2ýþ¯þ/hã¿¶ÿk:ÿ‡a„þ¯,¤1ì_’¡é{ÿW
+ÿ'¨ÿʆ¦ÿê?,Àÿ%šþü_Xÿ³€ø/šþ×öMõŸdê?, û+bþosÿÎò`¿~ø¿är³þ·òaÿÏü_²¡éeÿ×wú?ÄØÿ³ðI÷3€\húgðAÿ,Àÿ%Šþ#ÿ—íÿÿ×öÐÆmÿ×4ÿâü‰R;8ÀäBÓ?Cÿ/ÔXˆ }ÑÐôÏàÿÂþø¿dCÔ¿ý!ß—~8šÜ¥S§þÕ¬þFˆÿ,_®ƒ€y@"4ý3ø?áÿ`þOÙÐôÏÐÿçÿYˆw˜ $CÌÿoßÿëì×ÿ1ÂýR¹Yÿ«ø?gúáÿæ!Œïß {±ÐôÏÐÿý?Y@ÿ?Ù¬‘ÿWŽg¸õÿü?ôÏòÿ²¡émÿ÷ôüG
+ý3 ² 7€†¢ÅÑÿ÷³@†þŸ¸ÿ‰ôÿ”
+Mÿþo¬ÿX€ÿC64ý3ø¿QÿeþoÙÐôÏàÿÄúŸÄÙÐôÏÐÿõÐýC6ÄüßöþOìÿY°_?úÊåfýoÕÿûÐÿS64ý¯íÿœ×ÿbìÿYøµêúö\Øì
+&ÐôÏÐÿúgý?e³Xÿuesý¤gøçÿ‚HaýÏòÿ²Yÿ›ó¡5xZ?G¬ÂýüŸA’¢ÿ/Þãßš£î/¹çÂï
+ÿüO¤bôÿ`ùÙxëx-«Cç6·,x†;ÿ3ÿãa
+€þ9PÙ8˜„â­ÿ®ÐÃFð1×Ϻ<ŽÇíÇgS¥ygAàÔ2ÕšèÿÁ›þïTôöªÞ^/#s·»¼`~øA!ëÿ±~6mU·žáŽÿ³üo€þ?<4¦=ÔíIW…Æ²Bü¿Î列úO³iüGÿo&ŠºêLûl-¼æ®®öf˜
+öwçᳮх¹kê—á­þð›™ˁ²þ7Þÿ£ÿØÿËÆ[ÿeÝåÇòT.Wƒ¿þ‡ îÿaú—
+9þŸô—íâ”áþg ِë}««n<õ[C at UÜrþsÚÿ/UØÿó°ƒøECÖÿ¦ñ?òÿ, þˆ®ÿ²ZMÿÁ4ÿÿ;È_4þûÿ^÷Ÿ|T¸_ÿßL¡ÿ/Äñï˓ɇ`r
+rÎÿ³úo£ÿ'WÿW’Ù «>\}`Á‡«lx\ßí®oþî6X	ªþë^/9 ÷3Üë¿éù¿X¥Xÿ± )ˆ^ÿÙvÿÿØÿɆ¬ÿ}[>›%îoŠÿ;Š3ýs0ú;«úåþ3.‚—ˆ·þõá`
+¿àîø?;ÿ¦¨ÿ°€óß²!ÇÛø«1f¿àîø?ëÿk—Ð??Ÿ«îÜ4u;Lé¿`*Çý7uוGZï/‹;þÿËÿgé*ËBôÿc!¸3È^.Ëâ¿
+(}¿®Œ¾ÅõßÀê_Ùû?PÿÝžÅãß×M}¬_	¿Þãÿy†ñçÀü¿ÞýÕèâ³~4yéÚ¸ã8ÿ8Åý¿< õ/ýu»@óßâ¯ÿ0ÌÐÿ‘¤ÿdCÔ¿M”Õc·äúÏó_cüOœÿb!¸Wh.ý÷O­Ñ{ŸÀ­ÿh¢ÿ$@ý…
+€hnÖÿ‚g8õÿoõ¿1þ¸ÿ“ûõ!†
+P 7®ÿ=Ã_ÿQÂÿÇ¿ô8 q,ÖÑêî)¯êþ½.ïïãÖÿ4ÿ§¢ël©Ee:Fì—Érý÷’ža%îYÿïBýw{<Ǽÿ5ôü5ðE¨ÿ³@ÿ®üsÍû¿gù[ Düç Qáoýr¡éÿhžÍqñ3ÜúŸÕÿ£ûpû·lhú/ê'ÓÚž¯¹½<w,ÜúŸÕÿÂý?XHa 
+Mÿ_=À£üÝöc'èwžáÿS•ÂÿÇÌ?²¡éÿE¿vy}Èu7üíÒ^Vö·ôŸÅÿ4ƒÿŸ•b1ÿ÷¤ÛKü¤×3œúŸûÂûì×ÿ\nÖÿ‚ þñ?ŽÑÿøeCÓÿÚ¬YÿSÓúoˆûŸ™ø½*¥Ùc
+MÿÕùô`Z›°mÀ\ÏpÇÿx¶þGþ‡D¡(Šþ}›Y…{û¿ø¿8 ÿÚþ¯éü?€þ,¤1ì_’¡é{ÿWÿ'¨ÿʆ¦ÿê?,Àÿ%šþü_Xÿ³€ø/šþ×öMõŸ¤ê?, û+bþosÿÎò`¿~ø¿är³þ·òaÿÏü_²¡éeÿ×wú?DØÿ³ðI÷3€\húgðAÿ,Àÿ%Šþ#ÿ—íÿÿ×öÐÆmÿ×4ÿâü‰R;8ÀäBÓ?Cÿ/ÔXˆ }ÑÐôÏàÿÂþø¿dCÔ¿ý!ß—~8šÜ¥S§þÕ¬þ3ì  ‚/×AÀ< šþüŸð° ÿ§lhúgèÿ‡óÿ,Ä;L ’!æÿ·ïÿ‡õ?öë»ÿ¯À@7ëÿçÔÿÇ!â?é½Â@04ý3ôÿCÿOÐÿO6käÿ•ã¤ü?ôÏòÿ²¡émÿ÷lýfôρÊÜ "ŠþGÿOÜÿÍmüúâþ'ÐÿS64ý3ø¿±þcÉ_ÙÐôÏàÿFý—ø¿eCÓ?ƒÿëÿeCÓ?CÿOÔX@÷ÙóÛû?±ÿgÁ~ýèÿ)—›õ¿UÿOìÿY@ÿOÙÐô¿¶ÿs^ÿ‹°ÿgáתëÛsa³7˜BÓ?CÿOèŸôÿ”ÍbýוÍõ“žáŸÿ¢ ëÿ—Íòøßœ­ùÃÓú9bîçÿ’ýYðÿÖuÉý8~oøç"áü/ÈÿÈÆ[ÿÃkYê¼8·¹ý`Á3ÜùŸéüÛ#Ð?*G “€P¼õßzØ>æúY—Çñø¯ýølª¢4ï,œúO¦úOãýÿXxÓÿŠÞ^ÕÛëedîv—Ì?(dý?ÖϦ­êvÁ3Üñ–ÿ
+pÿ+iu{ÒUa q¬ÿ¯3Á»é §þÓlÿÑÿ›‰¢®:Ó>[¯¹««½¦‚ýÝyø¬ktaîšúex«‡?üf¦Àrà‡¬ÿM÷ÿQ†þ<`ÿ/oý?”u—ËS¹\
+þúS…ûX€þeCŽÿ'ýeËøûŸy€þeC®ÿõ­®ºñÔwn
+UqËùÏiÿ¿TaÿÏÃâ
+Yÿ›Æÿ8ÿgñ_6tý—Õjú¦ùø¸ØAþ¢ñßÿ÷ºïü\à£Âýúÿfúÿ²@ÿ¾<™|ˆ ö'ç¡ çü?«ÿÆ1úòpõ%YeaðáêÞ©¯ï‚ë»ÝõÍßýÏ+AÕÝëã%ä~†{ý7=ÿ«ë? eÙÐë?[îÿàÿà
 û?ِõ¿oËg³ÄýMñGqª FgU¿ÜÆEðñÖ¿>Láw Üÿgç¿Ãõpþ[6äøo5Æì<ÃÿgýmK0蟁ŸÏUwnšº¦ô_0ˆc™þCJÛŸ¯Œ;ü…õŸ8Kÿ#PY£ÿKÇ¿¯›úX?¾nÝÿiÿ0Ȭÿã¿=ÞãÿõêŸFŸõ£ÉKçÀ½þ'ã'¸ÿ‹,ÿeã­ÿ¢n—hþ[üõ†ê, û¯lhúïÊ›è–Üþáwþãÿáÿæ!¸Wh,oý÷O­Ñ{¯À?þ'AˆøÏâ¿lnÕÿ’g8õÿMþÿ¢ÿ(Ëpÿöëÿø6¸
+\·­ÿ—=ƒ ÿ8Aÿwþ¥ÿÃá ý‹c©þ‹VwOyU÷ï5yþÜúŸÖT˜"ÿÏ‚Ò?e:F@*‹õ?^ÿG{†•¸gýWê¿øÿxý£·ÄüU˜¡þÏiü»òOŸ› ñ–ÿú¿ñ¨ð7¹ô4Ïæ¸ünýÏêÿ‘ÂþŸäÿeCÒQ?™Ö¶|ÌíÀ¹k9àÖ4­ÿ…Îÿ²"é/’þ¿z€Gù7ºíÇF°ï=Ã?þ§
+õ`þ‘
+Iÿ/úµËëC®»á/—öî ²¿ý3%þ§òÿ,¨€dhù¿'Ý^: ä'Ý8ŸáÔÿ¬þ«ûì×ÿ\nÕÿ’ þëÿ8Bÿÿ“
+Iÿýk³jýoæÿ	U
+ý³ð{UJ³Ç, ’þ«óéÁ´6`» 9ŸáŽÿñ4þ‡Èÿñ(¬ $CÐÀâÿ
+áÿâ€4þ«û¿¦óÿ°þCÿWÒö/ɐôÏáÿ‚ÿ“ÔeCÒ?ƒÿ+Dý‡ø¿dCÒ?‡ÿëÿeCÒÿêþ¯Yÿ§4Dý‡deCËÿ1ø¿°ÿgÁ~ýðÉåVýoæÿBÿ7ÿeCÒÿÚþ¯ïôȰÿgá“î5¦ ¹ôÏáÿ‚þY€ÿK6ýG,þ¯þ/H㿺ÿkšÿ	qþ‰D©`r!éŸÃÿ…ú´/’þ9úaÿÇü_²¡éßþïËN?MSÿjªÿXáü?Á—ë `IÿþOø?X€ÿS6$ýsôÿÃùâ& ÉÐòÿþO¬ÿY°_ÿ›ÿ3Âýò¸Uÿëø?gþ÷ÿñÜ'P½`Húgèÿ—áþÐÿO6+äÿ•ënýÏóÿ)ôÏòÿ²!éuÿ÷ôüG†8ÿŰÐÂ
+ ‚!è_±ø¿qÿ7¤ñçèÿ‰üèÿ)’þ9üßXÿ± ÿ‡lHúçèÿ‰ú/ðˆ¤ÿ'Öÿ, þˆ¤†þŸê?, û‡lhù?ÿ'öÿ,دý?år«þ7ëÿ‰þ/, þˆ¤ÿÕýŸóú_†ý?¿V]ßž›¾ÁL ’þ9úBÿ, ÿ§l–ê¿®l®ŸöÿõF¨ÿ±€ü¿lÇÿæ|h;ÖÏ«p?ÿgèÿË‚ïø·æ¨ûKîǽð{ÃþìÿxÀêO6¾ú^ËêPçŹÍíKžáÎÿLçÿ(KPÿeAeã`Нþ»BÁÇ\?ëò8ÿµŸMU”潁SÿÉTÿi¡ÿoú¿SÑÛ«z{½ŒÌÝîò‚ùá…ªÿÇúÙ´UÝ.y†;þOó¿Q†û_yhL{¨Û“®
+äöø	ÞO8õŸf3ÿ7úóPÔUgÚgëá5wuµ7ÃT°¿;Ÿu.Ì]S¿oõð‡ßÌXü0Põ¿õþý?xÀþ_6¾ú(ë.?–§ÒCþú“÷ÿ° ýˆÿOú˶ñúgú—
+µþ×·ºêÆSß¹5TÅMç?§ýÿÒ ûv¿h¨úß:þÇÈÿ³€ø/²þËj=ýÓü?ü?\ì Ñxïÿ{Ýwž.ðQá~ýÓýY _žL>D û“ûPsþŸÕãý?y¸ú¿’,`÷áê>\`ûàúnw}ówÿ³ÁJõ_÷úxÉ-x†{ý7ëÿ1üòAÿ@ʲ!×6ÞÿÁÿÁö²¡êß–Ïf‘û›äÿŽú±0ú;«úåþ3.‚—ˆ¯þõá`
+Ïàþëÿ(TôÏΈÿmã¯Æ˜ý’g¸ãÿ´ÿo”Åð±ðó¹êÎMS·Ãœþæq,Ó¹?R럑q‡ïSÿQY:l	PÿaÀcü‹sÛšªÿzà/oëeÏp¯ÿ¦þ¿(ÿaádª3¦}¹ôï“úq¯ÿf÷?&¸ÿ]4en‡“€HèÿóíÍÑ:~‰ÏpÇÿéý¶ ôÏAœAø’Y˜ÿ‰è»?¿ý_2ÌÃþO
+KìÿX<þ}ÝÔÇúñ•ð‹à=þa¥)ÆŸÿñÿzùk£‹ÏúÑ«GÇ3Üñ?œŒœâüèÿ.ýu»@óßâ¯ÿaùý?	ô/¢þ»òÁ–»•îL§ñ?IÑÿŸÞ‡æ ±øë¿jÞûÌ >ù¿‹þ“aýs ñËæfý/x†SÿjÿƒýX°_ÿÇ À1¡Ü¸þ_ôýG	ê<¼éÿp8@ÿY¬ÿ¢ÕÝS^Õý»×ü¼‹[ÿÓüŸŠ"¬ÿYØÅi”d:†öe²\ÿãð¤gX‰{ÖU‚û_Yðÿ²Ú›/á†ýŸ®óŒú?´ñïÊ?=î‚wçÿ’iý/Düç!Qáoýr¡éÿhžÍqñ3ÜúŸ×ÿ3ìÿYÀùoÙÐô_ÔO¦µMÿócYÙlà_.ÜúŸÕÿ¢ õÒ€dhúÿêåß趯yçþñ?Uü,Àÿ+šþ_ôk—ׇ\wÃß.íå±eÿþ@„øŸðÿ³ RL ’!æÿžt{é—Ÿtãz†SÿsÿOcÿÏ‚ýúáÿ‘ËÍú_p À?þÇq„ý?ðÿʆ¦ÿþµY³þ§¦õß0DÿG~¯ÊCiö˜„BÓu>=˜Öf lX×3Üñ?ž­ÿ‘ÿã!Q¨ J†¢ÿ€Ãÿ…þ¯,ÐÆmÿ×tþÃýÿYHcØ¿$CÓÿöþ¯þOPÿ•
+Mÿþ/ÔX€ÿK64ý3ø¿°þgñ_64ý¯íÿšê?ÉÔX@öW6Äüßæþ/œÿäÁ~ýðÉåfýoåÿÂþŸø¿dCÓÿÊþ¯ïôˆ±ÿgá“î5f ¹ÐôÏàÿ‚þY€ÿK6ýû^gîíÿÊàÿâ€6þkû¿¦ùŸçÿ˜H”ÚÁ&šþú¡þÃÒ?²¡éŸÁÿ…ýðɆ¨ûC¾/;ýp4¹K§Ný«Yý'ŒÿY¾\ó€DhúgðÂÿÁüŸ²¡éŸ¡ÿÎÿ³ï0H†˜ÿß¾ÿÖÿ,دßÞÿW` ’›õ¿Šÿs¦ÿþoÔîPÁÐôÏÐÿý?Y@ÿ?Ù¬‘ÿWŽg
 òÿÐ?Èÿˆ¦ÿµýßÓóq˜eÐ?*pˆ`(úWþoÜÿÍmüúâþ'ÐÿS64ý3ôÿÄúø?dCÓ?ƒÿõ_àÿ–
+MÿþO¬ÿY@ü—
+Mÿý?QÿaÝ?dCÌÿmßÿûì׏þŸr¹Yÿ[õÿÄþŸ˜?eCÓÿÚþÏyý/ÆþŸ…_«®oÏ…ÍÞ`"Mÿý?¡ÐÿS6‹õ_W6×Oz†þ/ˆÖÿ, ÿ/›åñ¿9Zó‡§õsÄ*ÜÏÿ$	úÿ²à=þ­9êþ’ûq.üÞðÏÿD*Fÿÿ‘·þ‡×²:ÔyqnsûÁ‚g¸ó?Óù?BÔYPÙ8˜„â­ÿ®ÐÃFð1×Ϻ<ŽÇíÇgS¥ygAàÔ2ÕšèÿÁ›þïTôöªÞ^/#sw)ßa~øA!ëÿ±~6mU·žáŽÿ³üo€þ?<4¦=ÔíIW…Æ²Bü¿Î列úO³iüGÿo&ŠºêLûl-¼æ®®öf˜
+öwçᳮх¹kê—á­þð›™ˁ²þ7ÝÿGúð€ý¿l¼õÿPÖ]~,Oår5øëß.   ِãÿIÙ4þCÿ,@ÿ²!×ÿúVWÝxê;·†€ª¸åüç´ÿ_ª°ÿçañ‹†¬ÿMãl„Bÿ þˆ®ÿ²ZMÿÁ4ÿÿ8ø-ÿý¯ûÎÏ>*ܯÿo¦Ðÿ—âø÷åÉäC°?99çÿYý7ŽÑÿ“‡«ÿ+Ɇ „®>°àÃÕ	6¼®ïv×7÷?¬Uÿu¯—ûîõßôü_¬R¬ÿX€”eC¯ÿl¹ÿƒÿƒìÿdCÖÿ¾-ŸÍ÷7ÅÿÅY ýs0ú;«úåþ3.‚—ˆ·þõá`
+¿àîø?;ÿ¦¨ÿ°€óß²!ÇÛø«1f¿àîø?ëÿk¯„…þøù\u禩ÛaJÿS8ê?¥ôý¹2îð}ê?*S¨ÿð°xüûº©õã+áÁ{üà ËÆŸÿñÿz÷O£‹ÏúÑä¥k
+à^ÿÏòÿiŒüèþ)ýu»@óßâ¯ÿ0RÈÿ± ýˆ¨ÿ®|°Y€nÉõô?Ûÿ')ú?²Æ÷Q‚9@,þúïŸZ£÷>3€[ÿ³ûîÿå!L!~ÉܬÿÏpêÿ;ùÿþ?ì×ÿ1ˆ/〩@7®ÿ=Ã_ÿQ¡þÇÂðí>пPë¿hu÷”Wuÿ^—ç÷qëšÿSQŒõ?EtÊtíËd¹þÇûÿHϰ÷¬ÿª4@ý—Ïñï=
+üÇøõhãß•®yÿï¬ÿS"þó¨ð7„~¹Ðô4Ïæ¸ønýÏëÿèÿÈêÿ²¡é¿¨ŸLk{>æöRàܱpëVÿ‹ÔÿYHcL ’¡éÿ«x”£Û~ìûÎ3üãðÿ±€û¿eCÓÿ‹~íòúënøÛ¥½<¨ìoéÿ<‹ÿY ÿ?
+þÑóOº½´ ÈOºq=éÿ¹ÿ'Œ±ÿgÁ~ýðÿÈåfý/8 àÿã8ÂþŸøeCÓÿÚ¬Yÿ›ßÿ6Ì Ð?¿Wå¡4{LB¡é¿:ŸLk3 ¶
+ëîø?»ÿ=Bþ‡D¡(Šþÿ—íÿÿ×öÐÆmÿ×tþÃýYHcØ¿$CÓ?ƒÿþOPÿ•
+Mÿþ/ÔX€ÿK64ýoîÿRÖÿ, þˆ¦ÿµý_Sý'Y€úÈþʆ˜ÿÛÞÿ…ý?öë‡ÿK.7ë+ÿöÿ,Àÿ%šþWö}¯ÿöÿ,|Ò½Æ šþ7÷…Èÿñ ÿ—l(ú8ú…ðq@ÿµý_ÓüOˆóL$Jíà “Mÿþ/ÔXÀõß²¡éŸÁÿ…ýðɆ¨ûC¾/;ýp4¹K§Ný«Yý'ŒÿY¾\ó€Dhúgèÿÿðʆ¦ÿíûÿáþoâ& ÉóÿÛû?±þgÁ~ý#Üÿ'•›õ¿Šÿs¦ÿþoÂø>ü	ºMÿýÿÐÿ“ôÿ“Íùåx†[ÿßÉÿCÿ, ÿ/šþ×öOÏÄQBÿ¨,À	0ÁPô¯8ü߸ÿ›Úø3ôÿÄýO, ÿ§lhúgðcýÇü²¡éŸÁÿú/ðˆ¦†þŸXÿ³€ø/šþú¢þúȆ˜ÿÛÞÿ‰ý?öëGÿO¹Ü¬ÿ­úbÿÏúʆ¦ÿµýŸóú_Œý?¿V]ßž›½ÁD šþúBÿ, ÿ§lë¿®l®Ÿôÿü_)¬ÿY@þ_6Ëãs>´æOëçˆUørÿglõŸ¤üŸxkŽº¿ä~œ¿7üó?‘JÐÿƒädã­ÿᵬu^œÛÜ~°àîüÏtþƒý?YPÙ8˜„â­ÿ®ÐÃFð1×Ϻ<ŽÇíÇgS¥ygAàÔ2Õš(ÔYxÓÿŠÞ^ÕÛëedîv—Ì?(dý?ÖϦ­êvÁ3Üñ–ÿ
+Ðÿ‡‡Æ´‡º=éª0и@Vˆÿ×™àÝt€Sÿi6ÿèÿÁDQWiŸ­…×ÜÕÕÞSÁþî<|Ö5º0wMý2¼ÕÃ~3S`9ðÃ@ÖÿÆûÿ ÷±€ý¿l¼õÿPÖ]~,Oår5øëX ÀÿÁô/rü?é/ÛÄÿ±þ—áþg ِë}««n<õ[C at UÜrþsÚÿ/U8ÿÁÃâ
+Yÿ›Æÿ8‘ÿgñ_6tý—Õjú²¹þ‘ÿgaù‹Æÿßë¾ós
+÷ò«ÌÆø¿·‡8þ}y2ùìOÎCAÎùVÿãõ®þ¯$‚nš|¸úÀ‚W'Øð.¸¾Û]ßüÝÿl°Tý×½>^r@îg¸×áTÿ*Eþ—HY6ôú϶û?ÜÿÂö²!ëß–Ïf‰ûÛ×ÿmãg¨ÿ°0ú;«úåþ3.‚—ˆ·þõá`
+¿àîø?;ÿf¨ÿ°€óß²!ÇÛø«1f¿àîøŸÎüß
+þO~>Wݹiêv˜ÒÁT ŽeúW;Jߟ+ãqý'üAüJ%¨ÿp°xüûº©õã+áÁ{üà ËPÿcÁü¿ÞýÓèâ³~4yéZ¸×ÿádüãýy@ÿ?Ùøë¿¨Ûšÿý‡‘Bÿ7ú—
+Qÿ]ù`³ Ý’ë?è?Æÿ$…ÿ“Þ‡æ ±øë¿jÞûÌ nýGý'*@þŸ…²ŸhnÖÿ‚g8õ¯fñ?HàÿaÁ~ý‡ÿo ÄT Ž×ÿ‹žá¯ÿ(‰àÿgáMÿ‡Ãú—Èbý­îžòªîßëòü>nýOó*BÿWvqªLÇоL–ë¼ÿô+qÏú¯JÔ9ðÿñþÇÐó×Àü‡Pÿg6þ]ùçš÷ÿþ[ÿ§ðrÿ/â?‰
+Cè—MÿGólŽ‹ŸáÖÿ¼þóÿ<àö_ÙÐô_ÔO¦µ=s{)pîX¸õ?«ÿEêÿ,¤1& ÉÐôÿÕ<Ê¿Ñm?v‚}çþñ?
+øÿX€ÿW64ý¿è×.¯¹î†¿]Ú˃Êþ–þϳøŸðÿ³ pþW4Äüß“n/- ò“n\Ïpêîÿ	cìÿY°_?ü?r¹Yÿ øÇÿ8Æý<Àÿ+šþû×fÍúŸšÖÃa€þ9ø½*¥Ùc
+MÿÕùô`Z›°m€\ÏpÇÿxÿ#äÿxH*€’¡è?`ðÙþðmmü×öMçÿ0ŒÐÿ…4†ýK24ý3ø¿àÿdõ_ÙÐôÏàÿBý‡ø¿dCÓÿæþ/•aýÏâ¿lhú_Ûÿ5Õ’¨ÿ°€ì¯lˆù¿íý_Øÿ³`¿~ø¿är³þ·òaÿÏü_²¡éeÿ×÷ú?`ÿÏÂ'ÝkÌ r¡ésÿWˆüðɆ¢ÿˆ£ÿWÿ´ñ_Ûÿ5Íÿ„8ÿÇD¢Ô0¹ÐôÏàÿBý‡Üý#šþü_Øÿ± ÿ—lˆú·?äû²ÓG“»têÔ¿šÕÂñŸ…àËu0H„¦†þð° ÿ§lhúß¾ÿîÿæ!†ÿC4ÄüÿöþO¬ÿY°_¿½ÿ¯À@$7ëÿçLÿ1üß<¨Ý}ˆ€\húgèÿ‡þŸ, ÿŸlÖÈÿ+Ç3HùèŸäÿeCÓÿÚþïéù8^ TàÁPô¯8ü߸ÿ›Úø3ôÿÄýO, ÿ§lhúgðcýÇü²¡éŸÁÿú/ðˆ¦†þŸXÿ³€ø/šþú¢þúȆ˜ÿÛÞÿ‰ý?öëGÿO¹Ü¬ÿ­úbÿÏúʆ¦ÿµýŸóú_Œý?¿V]ßž›½ÁD šþúBÿ, ÿ§lë¿®l®Ÿôÿü_)¬ÿY@þ_6Ëãs>´æOëçˆU¸Ÿÿ3HRôÿeÁ{ü[sÔý%÷ã\ø½áŸÿ‰T‚þ, ÿ#oý¯eu¨óâÜæöƒÏpç¦ó„¨ÿ² ²q0	Å[ÿ]¡‡àc®ŸuyÿڏϦ*Jó΂À©ÿdªÿ4QèÿÁ›þïTôöªÞ^/#s·»¼`~øA!ëÿ±~6mU·žáŽÿ³üo€þ?<4¦=ÔíIW…Æ²Bü¿Î列úO³Yÿ_ø?x(êª3í³µðš»ºÚ›a*Øß‡ÏºF殩_†·zøÃof
+,~Èúßxÿþ<`ÿ/oý?”u—ËS¹\
+þú ¸ÿ‡è_6äøÒ_¶‹ÿQ†ûŸy€þeC®ÿõ­®ºñÔwn
+UqËùÏiÿ¿TaÿÏÃâ
+Yÿ›Æÿ8‘ÿgñ_6tý—Õjú¦ùø¸ØAþ¢ñßÿ÷ºïü\à£Âýúÿf!úÿ²@ÿ¾<™|ˆ ö'ç¡ çü?«ÿÆ1úòpõ%Yí~
+>\}`Ã;õõ]p}·»¾ù»ÿÙ`%¨ú¯{}¼ä€ÜÏp¯ÿ¦çÿb•býǤ,zýgÛýü<`ÿ'²þ÷mùl–¸¿)þï(Î"蟃ÑßYÕ/÷ŸqT"Þúׇƒ)ü€»ãÿìüw˜¡þÃΈÿmã¯Æ˜ý‚g¸ãÿ¬ÿ¯ýúgàçs՝›¦n‡)ýLâX¦ÿ0 ôý¹2îð}ê?*SAŠú‹Ç¿¯›úX?¾~¼Ç?2ôâÁü¿ÞýÓèâ³~4yéZ¸×ÿ³ü£ÿèÿ'ýu»@óßâ¯ÿ0
+°ÿgÝeCÔW>Ø,@·äúúŸíÿ“ûTxF˜Äâ¯ÿþ©5zï3¸õ?»ÿ7€ÿ‡µÑܬÿÏpêÿ;ùÿõì×ÿÑžÀ³`*ǍëÿEÏð×”„8ÿÍ›þ‡ô/‘Åú/ZÝ=åUÝ¿×åù}ÜúŸæÿTaýÏÂ.Nß2Cû2Y®ÿñþ?Ò3¬Ä=ë¿*Q¨ÿrà9þãý¡ç¯ÿø«(FýŸÚøwåŸkÞÿ;ëÿ†ˆÿ<$*ü
+¡_.4ýͳ9.~†[ÿóúŠý?¨ÿˆ¦ÿ¢~2­íù˜ÛKsÇrÀ­ÿYý/DÿWÒ€dhúÿêåßè¶;Á¾óÿøŸ*œÿãþ_ÙÐôÿ¢_»¼>äºþvi/*û[ú?ÏâÀÿÏ‚J1H†˜ÿ{Òí¥@~ҍëNýÏý?¸ÿ	ûõÃÿ#—›õ¿à €ücÜÿÄü¿²¡é¿mÖ¬ÿÍï#ôÿdá÷ª<”fI@(4ýWçÓƒimÀ¶r=Ãÿg÷¿£ÿ‰BP2ýû6²
+÷öáþhã¿¶ÿk:ÿd˜ÿ9HcØ¿$CÓ?ƒÿþOPÿ•
+Mÿþ/ÔX€ÿK64ýoïÿJ±þgñ_64ý¯íÿšê?I3ÔX@öW6Äüßöþ/ìÿY°_?ü_r¹Yÿ[ù¿°ÿgþ/ÙÐô¿²ÿë{ý°ÿgá“î5f ¹Ðô¿½ÿù?àÿ’
+Eÿ‡ÿ+‚ÿ‹Úø¯íÿšæBœÿc"Qj˜\húgð¡þÃîþ‘
+Mÿþ/ìÿX€ÿK6DýÛò}Ù釣É]:uê_Íê?aˆøÏBðå:˜$BÓ?Cÿ?ø?X€ÿS64ý3ôÿÃùâ& ÉóÿÛû?±þgÁ~ýöþ¿[ ‘ܬÿUüŸ3ýÇðó v÷!j r¡éŸ¡ÿú²€þ²Y#ÿ¯Ï åÿ¡ÿ—
+Mÿkû¿§ç?â0‹ TàÁPô¯8ü߸ÿ›Úøoßÿ3ÂýO, ÿ§lhúgðcýÇü²¡éŸÁÿú/ðˆ¦ÿ'Öÿ, þˆ¦†þŸ¨ÿ°€î²!æÿ¶÷bÿÏ‚ýúÑÿS.7ë«þŸØÿ³€þŸ²¡émÿç¼þcÿϯU×·çÂfo0„¦†ûŸ¡ÐÿS6‹õ_W6×Oz†þ/ˆ¬ÿY@þ_6Ëãs>´æOëçˆU¸Ÿÿ3HôÿeÁ{ü[sÔý%÷ã\ø½áŸÿ‰TŒþ, ÿ#oý¯eu¨óâÜæöƒÏpç¦ólKBÐ?*G “€P¼õßzØ>æúY—Çñø¯ýølª¢4ï,œúO¦úOíôÏÀ›þïTôöªÞ^/#s·»¼`~øA!ëÿ±~6mU·žáŽÿ³üo€þ?<4¦=ÔíIW…Æ²Bü¿Î列úO³iüGÿo&ŠºêLûl-¼æ®®öf˜
+öwçᳮх¹kê—á­þð›™ˁ²þ7ÝÿGúð€ý¿l¼õÿPÖ]~,Oår5øëß ƒþ9€þeCŽÿ'ýeËøûŸy€þeC®ÿõ­®ºñÔwn
+UqËùÏiÿ¿TaÿÏÃâ
+Yÿ›Æÿ8PÈÿ³€ø/ºþËj5ýÓü?ü?\ì Ñøïÿ{Ýw~.ðQá~ý3…þ¿,Ç¿/O&"€ýÉy(È9ÿÏê¿qŒþŸ<\ý_IF?Eч«,øpu‚
+ï‚ë»ÝõÍßýÏ+AÕÝëã%ä~†{ý7=ÿ«ë? eÙÐë?[îÿàÿàû?ِõ¿oËg³ÄýMñGqCÿŒþΪ~¹ÿŒ‹à%â­}8˜Âï ¸;þÏ·)ê?,àü·lÈñß6þjŒÙ/x†;þÏúÿÚ-ôÏÀÏçª;7MÝSú/˜
+ıLÿ?QÚþ|eÜá/®ÿŸ«,ˆÐÿ‡…¥ãß×M}¬_·ïÿØþO™ÿ1þÛã=þ_¯þitñY?š¼t.Üëÿp2þq’ÂÿÉ–ÿ²ñÖQ·K4ÿ-þú@ý…ú
+Mÿ]ù`“ Ý’Û?|Ï\â?ú?ñÜ+´ Œ·þû§Öè½×àÿø¿™ø	âÍ­ú_ò§þÿ-ÿ\ü?¸ÿƒûõ¼ÌÁ°	ä¶õÿ²gô'èÿοô8 q,ÕÑêî)¯êþ½&ρ[ÿÓõ¿
+ÔÿYã4Üg:Fì—Ébý×ÿÑža%îYÿ
+²õ_üƼþ1ôý5ð¦¨ÿ³@ÿ®üÓç&@güŸåÿC…øÏC¢ÂßúåBÒÿÑ<›ãòg¸õ?«ÿG
+ûpû¯lHú/ê'ÓÚ–¹½8w-Üú¦õ¿a€þ9HcL ’!éÿ«x”£Û~lûÞ3üãªPÿçæِôÿ¢_»¼>äºþriï*û÷Û?SâŠþÏ<¨€dhù¿'Ý^: ä'Ý8ŸáÔÿ¬þ«ûì×ÿ\nÕÿ’ þëÿ8Jàÿgþ_ِôß¿6«ÖÿÔ´þ*ôÿáá÷ª<”fY@($ýWçÓƒimÀvr>Ãÿãiü‘ÿã!Q¨ J† ÿ€Åÿ•ÀÿÅiüW÷MçÿP%èÿÊBÃþ%’þü_èÿÈ꿲!éŸÃÿ…úðɆ¤ÿÖÿ, þˆ¤ÿÕý_³þOiˆúÈþʆ–ÿÛÞÿ…óŸ<دþ/¹ÜªÿÍü_èÿÆü_²!émÿ×wú?àþG>é^c
+Iÿþ/èŸø¿dCÐÄáÿ²ýŸáÿÚÒø¯îÿšæBœÿc"Qj˜\Húçèÿ…ú¸ÿK6$ýsø¿°ÿcþ/ÙÐôoÈ÷e§Ž&wÊÔ©5Õ¬pþŸ‡àËu0H„¤ÿ'ü,Àÿ)’þ9úÿáü?ñ€dhù†þXÿ³`¿þ·ûÿ
+läq«þ×ñNý_q” þ³Þ+lCÒ?Gÿ?ÜÿÁúÿÉf…ü¿r=ƒ”ÿ‡þY@þ_6$ý¯îÿž­ÿÃç¿XPY€@Cпbéÿ‰û¿Y ?GÿOÜÿÄúʆ¤ÿ7Ö, ù+’þ9üߨÿ² ÿ·lHúçðbýÏâ¿lHúçèÿ‰úèþ!ZþÁÿ‰ý?öëGÿO¹ÜªÿÍú¢ÿèÿ)’þW÷Îë)öÿ,üZu}{.lú3@Húçèÿ	ý³€þŸ²Yªÿº²¹~Ú3ü×ÿA¡þÇòÿ²Yÿ›ó¡5øZ?G¬ÂýüŸ}ÿ“ßñoÍQ÷—܏{á÷†ÿüØÿñ€ül|õ?¼–ա΋s›Û–<Ýÿ™ÎÿQ£þË‚ÊÆÀ, _ýw…6‚¹~Öåq<þk?>›ª(Í{§þ“©þÓ8Dÿ?Þô§¢·Wõöz™»ÝåóÃ
+Uÿõ³i«º]òwüŸæ£÷¿òИöP·']Èíñÿ:¼Ÿpê?Ífþoôÿ桨«Î´ÏÖÃkîêjo†©`w>ë]˜»¦~Þêá¿™)°øa êëý?úð€ý¿l|õÿPÖ]~,O¥‡üõ&1îÿaú—
+5þŸô—Mã?îæú—
+µþ×·ºêÆSß¹5TÅMç?§ýÿÒ ûv¿h¨úß:þGÈÿ³€ø/²þËj=ýÓü?ü?\ì Ñxïÿ{Ýwž.ðQá~ýÓýY _žL>D û“ûPsþŸÕãý?y¸ú¿’,ŒÒŸv®>°àÃÕ	6¼®ïv×7÷?¬Qÿu¯—Ђg¸×³þ*ÀúHY6äúÏÆû?ø?xÀþO6TýïÛòÙ,r“üß±Bÿ/FgU¿ÜÆEðñÕ¿>Láy Üý…îfç¿eCÿ¶ñWcÌ~É3ÜñÚÿ7Ê"ø¿Xøù\u禩ÛaNÿs8–é?ŠIÞwø‹ë?ç2¥Pÿaañø÷uSëÇWÂ/‚÷ø‡A–…üÇÿëå?.>ëG“—®E€ßúߎœ&Èÿ±€îŸ²ñ×Q·4ÿ-þú#äÿxÀõ²!ê¿+l [éþtÿ“ù?Âø>J0ˆÅ_ÿýSkôÞgpë?šè?Qαa š›õ¿àNý«YüøÿX¾ýøãu0ˆãÆõÿ¢gøë?JPÿãaøöè_(‹õ_´º{Ê«º·Íó»¸õ?Íÿ©(ÆúŸ§‘ÊtíËd¹þÇ Iϰ÷¬ÿªT¡þËçø@†›žÿ½Ìÿ	êÿ,ÐÆ¿+ÿô¸Ðÿÿ­ÿÓXÿÿyHTøB¿\hú?šgs\ü·þçõÿûàÿ‘
+MÿEýdZÛô1··çŽå€[ÿ³ú_„ó?<¤¨ÿ‰†¦ÿ¯àQþnû±ì;ÏðÿiÀÿÇîÿ–
+Mÿ/úµËëC®»áo—öò ²¿4!þgèÿŃJ1H†˜ÿ{Òí¥@~ҍëNýÏý?!îá!€ÿG47ëÁ ÿøÇöÿ,Àÿ+šþû×fÍúŸšÖÃ0N ~¯ÊCiö˜„BÓu>=˜Öf l ×3Üñ?žÆÿù?…
+ d(ú8ü_ü_ÐÆmÿ×tþ·Ìÿ¤1ì_’¡éŸÁÿÿ'¨ÿʆ¦ÿê?,Àÿ%šþ7÷©ëÿeCÓÿÚþ¯©þ“,@ý‡deCÌÿmïÿÂþŸ… þ/Ñܬÿ­ü_Øÿ³ ÿ—lhú_Ùÿõ½þØÿ³ðI÷3€\húßÜÿ"ÿÇü_²¡è?âðEðq@ÿµý_ÓüOˆóL$Jíà “Mÿþ/ÔXˆ }ÑÐôÏàÿÂþø¿dCÔ¿ý!ß—~8šÜ¥S§þÕ¬þFˆÿ,_®ƒ€y@"4ý3ôÿƒÿƒø?eCÓ?Cÿ?œÿg!Þa1ÿ¿½ÿë{ÿ_-€TnÖÿ*þÏ™þcø¿yˆ‚û(îÅBÓ?Cÿ?ôÿdýÿd³Fþ_9žáÖÿwòÿÐ?Èÿˆ¦ÿµýßÓóqDÐ?*pˆ`(úWþoÜÿÍmü·ïÿãþ'ÐÿS64ý3ø¿±þcþÙÐôÏàÿFý—ø¿eCÓ?ƒÿëÿeCÓ?CÿOÔX@÷ÙóÛû?±ÿg!@ÿOÑܬÿ­úbÿÏúʆ¦ÿµýŸóú_‚ý?¿V]ßž›½ÁD šþî†þY@ÿOÙ,Ö]Ù\?éþù¿ RXÿ³€ü¿l–Çÿæ|hÍžÖÏ«p?ÿg¤èÿË‚÷ø·æ¨ûKîǹð{Ã?ÿ3LÿèÿÁò?²ñÖÿðZV‡:/Îmn?Xðwþg:ÿÇAˆú/*G “€P¼õßzØ>æúY—Çñø¯ýølª¢4ï,œúO¦úO…þ,¼éÿNEo¯êíõ22w»Ë懲þëgÓVu»àîø?ËÿèÿÃCcÚCÝžtUh\ +ÄÿëLðn:À©ÿ4›ù¿áÿࡨ«Î´ÏÖÂkîêjo†©`w>ë]˜»¦~Þêá¿™)°øa ëãý?úð€ý¿l¼õÿPÖ]~,Oår5øëX àþ ِãÿIÙ.þGîæú—
+¹þ×·ºêÆSß¹5TÅ-ç?§ýÿR…ý?;ˆ_4dýoÿãa ýs€ø/ºþËj5ýÓü?ü?\ì Ñøïÿ{Ýw~.ðQá~ý³ýY Ž_žL>D û“óPsþŸÕãý?y¸ú¿’Ì6]	?\}`Á‡«lx\ßí®oþî6X	ªþë^/9 ÷3Üë¿éù¿X¥Xÿ± )ˆ^ÿÙvÿÿØÿɆ¬ÿ}[>›%îoŠÿ;гúç`ôwVõËýg\/oý
 ëÃÁ~ÀÝñvþ;ÌPÿaç¿eCŽÿ¶ñWcÌ~Á3ÜñÖÿ7Pð±ðó¹êÎMS·Ã”þ¦qLõ_uçYÞq2îð—ÖÔðùð>ŒQÿáàûã¿?•+þøf	ÆŸƒ÷ǿܯõ+à7þÊŽj×ÿÿíùËñ/ž†ÊnXëµ¥^~ßã÷þOMÆ?KÑÿ•,ùdó—úoÚz.úüÙ´Ýû×»9që?ý÷øüÿ<ü/ó|‡ÐrùKýÚ¯ö‹ºü¼[ÿñdýŸÙ%ôÏÀ?ÿëÔ/˜Eñ¿Ò'Zç÷Ný«éþ?Sø?Xøô¿þùü_ÿõOÌBùKý½>öލ[ÿÑDÿi¡þÂ
+ÿ›JþÛ°áú	S€DÜú¿}àÔNã¿
+‘ÿcá>Õ¦*¿Üý¿¦xªêcýXšîîôûÿ
+ӁþZÿµn÷·®þ)ëÿ4…ÿ‹¬ÿe³@ÿæÏ{ýH}†;ÿ§¦ñ?áÿf—ÍýßXý#ÔÿTÇÐ?¨ÿÉæ¯óÿöpÐí.0«p?ÿW:öÿÿk{Œÿ‹þlÎÍ
+Ïð[ÿþ¯0ÂüϦ~Ùü¥þÏæÙT·ÿÖ»ôÎü©RèÿÁÂýߟþù?~ýçÿó¿Cþ‡çê-üm:Øfƒ‡?jÿç§ÿùÏÿOݧÿxØÿ«jôî¹úç}úGS½e’þÑ<·Ã¢2üG{ùƒöë´oP\þ èÃhxßþSÐßÈ"ÿÇù\.9ç÷Îø'Óý_ÂÿÅBìvqü)¸CßúO¥îÿûî§ÿ¼ÿÏ$øÏL%ÿ]Åÿ'üÀ,:ÿ±¹ÿ{²þÇ”ôÏ ´-›%þÓ¿꿳úOàü×E=æ™,Šÿýk³©ÿûÛþ?—ü_ ÿÇBAù’YTÿ½Ñ êÖÿìüW˜ÀÿÅÎÉfþoìþ@9ÿú¾ê$Ív8ÿ!’Eëÿ „ü_ˆû?x€êeó—ú?Õ{},õÂ6¿ïâÒÿ°ÝŸú¿â ç?Y@Ù_6ë7e üöÿ—þo¨ÿó€ý¿lù¶îÿ8ßÿ§!ê,`ÿ     ‹ÿ”fÔr p5 
\ No newline at end of file

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/48amd64-4d2n6c.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/48amd64-4d2n6c.tar.gz.output	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/48amd64-4d2n6c.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,222 @@
+Machine (phys=0 total=100661148KB AMD DRACHMA)
+  Socket #0 (phys=0 total=25163676KB)
+    NUMANode #0 (phys=0 local=8386460KB total=8386460KB)
+      L3Cache #0 (5118KB)
+        L2Cache #0 (512KB)
+          L1Cache #0 (64KB)
+            Core #0 (phys=0)
+              PU #0 (phys=0)
+        L2Cache #1 (512KB)
+          L1Cache #1 (64KB)
+            Core #1 (phys=1)
+              PU #1 (phys=1)
+        L2Cache #2 (512KB)
+          L1Cache #2 (64KB)
+            Core #2 (phys=2)
+              PU #2 (phys=2)
+        L2Cache #3 (512KB)
+          L1Cache #3 (64KB)
+            Core #3 (phys=3)
+              PU #3 (phys=3)
+        L2Cache #4 (512KB)
+          L1Cache #4 (64KB)
+            Core #4 (phys=4)
+              PU #4 (phys=4)
+        L2Cache #5 (512KB)
+          L1Cache #5 (64KB)
+            Core #5 (phys=5)
+              PU #5 (phys=5)
+    NUMANode #1 (phys=1 local=16777216KB total=16777216KB)
+      L3Cache #1 (5118KB)
+        L2Cache #6 (512KB)
+          L1Cache #6 (64KB)
+            Core #6 (phys=0)
+              PU #6 (phys=6)
+        L2Cache #7 (512KB)
+          L1Cache #7 (64KB)
+            Core #7 (phys=1)
+              PU #7 (phys=7)
+        L2Cache #8 (512KB)
+          L1Cache #8 (64KB)
+            Core #8 (phys=2)
+              PU #8 (phys=8)
+        L2Cache #9 (512KB)
+          L1Cache #9 (64KB)
+            Core #9 (phys=3)
+              PU #9 (phys=9)
+        L2Cache #10 (512KB)
+          L1Cache #10 (64KB)
+            Core #10 (phys=4)
+              PU #10 (phys=10)
+        L2Cache #11 (512KB)
+          L1Cache #11 (64KB)
+            Core #11 (phys=5)
+              PU #11 (phys=11)
+  Socket #1 (phys=1 total=25165824KB)
+    NUMANode #2 (phys=2 local=8388608KB total=8388608KB)
+      L3Cache #2 (5118KB)
+        L2Cache #12 (512KB)
+          L1Cache #12 (64KB)
+            Core #12 (phys=0)
+              PU #12 (phys=12)
+        L2Cache #13 (512KB)
+          L1Cache #13 (64KB)
+            Core #13 (phys=1)
+              PU #13 (phys=13)
+        L2Cache #14 (512KB)
+          L1Cache #14 (64KB)
+            Core #14 (phys=2)
+              PU #14 (phys=14)
+        L2Cache #15 (512KB)
+          L1Cache #15 (64KB)
+            Core #15 (phys=3)
+              PU #15 (phys=15)
+        L2Cache #16 (512KB)
+          L1Cache #16 (64KB)
+            Core #16 (phys=4)
+              PU #16 (phys=16)
+        L2Cache #17 (512KB)
+          L1Cache #17 (64KB)
+            Core #17 (phys=5)
+              PU #17 (phys=17)
+    NUMANode #3 (phys=3 local=16777216KB total=16777216KB)
+      L3Cache #3 (5118KB)
+        L2Cache #18 (512KB)
+          L1Cache #18 (64KB)
+            Core #18 (phys=0)
+              PU #18 (phys=18)
+        L2Cache #19 (512KB)
+          L1Cache #19 (64KB)
+            Core #19 (phys=1)
+              PU #19 (phys=19)
+        L2Cache #20 (512KB)
+          L1Cache #20 (64KB)
+            Core #20 (phys=2)
+              PU #20 (phys=20)
+        L2Cache #21 (512KB)
+          L1Cache #21 (64KB)
+            Core #21 (phys=3)
+              PU #21 (phys=21)
+        L2Cache #22 (512KB)
+          L1Cache #22 (64KB)
+            Core #22 (phys=4)
+              PU #22 (phys=22)
+        L2Cache #23 (512KB)
+          L1Cache #23 (64KB)
+            Core #23 (phys=5)
+              PU #23 (phys=23)
+  Socket #2 (phys=2 total=25165824KB)
+    NUMANode #4 (phys=4 local=8388608KB total=8388608KB)
+      L3Cache #4 (5118KB)
+        L2Cache #24 (512KB)
+          L1Cache #24 (64KB)
+            Core #24 (phys=0)
+              PU #24 (phys=24)
+        L2Cache #25 (512KB)
+          L1Cache #25 (64KB)
+            Core #25 (phys=1)
+              PU #25 (phys=25)
+        L2Cache #26 (512KB)
+          L1Cache #26 (64KB)
+            Core #26 (phys=2)
+              PU #26 (phys=26)
+        L2Cache #27 (512KB)
+          L1Cache #27 (64KB)
+            Core #27 (phys=3)
+              PU #27 (phys=27)
+        L2Cache #28 (512KB)
+          L1Cache #28 (64KB)
+            Core #28 (phys=4)
+              PU #28 (phys=28)
+        L2Cache #29 (512KB)
+          L1Cache #29 (64KB)
+            Core #29 (phys=5)
+              PU #29 (phys=29)
+    NUMANode #5 (phys=5 local=16777216KB total=16777216KB)
+      L3Cache #5 (5118KB)
+        L2Cache #30 (512KB)
+          L1Cache #30 (64KB)
+            Core #30 (phys=0)
+              PU #30 (phys=30)
+        L2Cache #31 (512KB)
+          L1Cache #31 (64KB)
+            Core #31 (phys=1)
+              PU #31 (phys=31)
+        L2Cache #32 (512KB)
+          L1Cache #32 (64KB)
+            Core #32 (phys=2)
+              PU #32 (phys=32)
+        L2Cache #33 (512KB)
+          L1Cache #33 (64KB)
+            Core #33 (phys=3)
+              PU #33 (phys=33)
+        L2Cache #34 (512KB)
+          L1Cache #34 (64KB)
+            Core #34 (phys=4)
+              PU #34 (phys=34)
+        L2Cache #35 (512KB)
+          L1Cache #35 (64KB)
+            Core #35 (phys=5)
+              PU #35 (phys=35)
+  Socket #3 (phys=3 total=25165824KB)
+    NUMANode #6 (phys=6 local=8388608KB total=8388608KB)
+      L3Cache #6 (5118KB)
+        L2Cache #36 (512KB)
+          L1Cache #36 (64KB)
+            Core #36 (phys=0)
+              PU #36 (phys=36)
+        L2Cache #37 (512KB)
+          L1Cache #37 (64KB)
+            Core #37 (phys=1)
+              PU #37 (phys=37)
+        L2Cache #38 (512KB)
+          L1Cache #38 (64KB)
+            Core #38 (phys=2)
+              PU #38 (phys=38)
+        L2Cache #39 (512KB)
+          L1Cache #39 (64KB)
+            Core #39 (phys=3)
+              PU #39 (phys=39)
+        L2Cache #40 (512KB)
+          L1Cache #40 (64KB)
+            Core #40 (phys=4)
+              PU #40 (phys=40)
+        L2Cache #41 (512KB)
+          L1Cache #41 (64KB)
+            Core #41 (phys=5)
+              PU #41 (phys=41)
+    NUMANode #7 (phys=7 local=16777216KB total=16777216KB)
+      L3Cache #7 (5118KB)
+        L2Cache #42 (512KB)
+          L1Cache #42 (64KB)
+            Core #42 (phys=0)
+              PU #42 (phys=42)
+        L2Cache #43 (512KB)
+          L1Cache #43 (64KB)
+            Core #43 (phys=1)
+              PU #43 (phys=43)
+        L2Cache #44 (512KB)
+          L1Cache #44 (64KB)
+            Core #44 (phys=2)
+              PU #44 (phys=44)
+        L2Cache #45 (512KB)
+          L1Cache #45 (64KB)
+            Core #45 (phys=3)
+              PU #45 (phys=45)
+        L2Cache #46 (512KB)
+          L1Cache #46 (64KB)
+            Core #46 (phys=4)
+              PU #46 (phys=46)
+        L2Cache #47 (512KB)
+          L1Cache #47 (64KB)
+            Core #47 (phys=5)
+              PU #47 (phys=47)
+depth 0:	1 Machine (type #1)
+ depth 1:	4 Sockets (type #3)
+  depth 2:	8 NUMANodes (type #2)
+   depth 3:	8 Caches (type #4)
+    depth 4:	48 Caches (type #4)
+     depth 5:	48 Caches (type #4)
+      depth 6:	48 Cores (type #5)
+       depth 7:	48 PUs (type #6)
+Topology not from this system

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/4ia64-4s.tar.gz
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/4ia64-4s.tar.gz	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/4ia64-4s.tar.gz	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,15 +1,14 @@
-‹ §
-J í_ÛÆÅýìO± ng†3d6o	Œ F› @ôQàR´D¬V(Ê©úéKIk[6ïÔsZ螐x1Ë]]áðòÌß”¹ã§y•3P„°ûÓÁìÿn½ßÿùÌ+kqÁoÝ+cmÈ«»ðgúÌfÝ—ÝÝÝ«‡Y;[4˯WwkĄŪÿªk«D‚qõ·YÈŒqÃׯ:_ä¬?‚Ïõ_oשƀÑõ·ÁØCý‡Ïëà¤þÓúcSÕßüs ¯Vÿ!¼Xÿáë¾~úfyýCæ,ëàkõ¯V›oò[ïlp¶êŸ[çX×ê?üãþہ¨þn§ÿ¼È9þCUÿ¾]µ‹v¶ü HÆÿ`†ÿîLîY²ú÷ó®.§“uó0¼U³±oÇ®ÀþPï—ë?ö§õÏŠÝõß$ýÍŸQ^ÿO%øÓóŸþõÿú'"Hdú_Í·ë¦*“UY=–³zÒLGœãªþMv¦vó?ê?=o,¯™þ«¶©ùc®ëÿüúïlNýC0”¿j"ô/œýGÍÿ½¡þ!pþ¯›Qú¯Êj^ÇwÅý_7Üðù/Aý›å´þWL3XÞÿ³Î±ÿA^ÿuóïZvŽëóÿp1ÿ·¯ÿ\ÈÿÊK¾^äú/û¾k6}=Z
-Wõo/æÿÙnü§þÓóÏ®éëËꑃ€Jäúï·«o}ý·çó¿áúŸSÿ~[6šzJõ+E®ÿEý±^ˆÎÑÿwž×ŽÊW\ÿU;¯»zYm'ƒ\vO®¶®ëߟé?ØÜPÿ¬ûŽ#€bäúÿ½Ü®'í‡I¹^·USöÍǦß~õòëÔ?ª_7ýÿyÙÕÓÉðÂä©\9‡üù¿·–Ïÿ!ðù¿näú_nžên7X×ý(EÈçÿÞê‚9¯©þ
-ÊÿÁõÿäõOáÿ8ÿµ¼ÿƒ`iÿP\ÿ)üçþ¯,s|þaïÿx?ïÚÍl΁@rý'ð¼àÿt¼þCx[ö%u¯¹þAþú¿!pù·näúOáÿ8Ͼ¢ÿBÎ>ª‘ëãÿ¼ÿ‡@ùë&¢ÿñðþýº‘ë?…ÿã"ÿÍú‚úGÀù¿n¤úÏPþæ¿@×?…ÿ#¿ô°ÿÁ›{:@#×?(ÿƒýÌÿЍ\ÿ üÞÿA`þ‡näúù?xý‡Qùª‘ë”ÿÁý 0ÿC7rý§ð\ø¿÷ÿÀ`¹üW5ýŒÿƒþoôèF®ÿþóõ_ÞOý#pÆó@1Rý[”ÿÃÓÿ@^Pþû?˜ÿ¡¹þ
 ø?Œ½ô°ÿâ׍\ÿ)ü—×Çë?„wËußmª¾i—
-"×?ÈÿÁþæèF®Pþý_¸þO7rýƒò?èÿ†@ùë&¢ÿñðþýº‘ë“ÿ˜ÿóÝŒÐLäÇ	cýÞÙàÜðºÍ‹œùFÕ¿oWí¢m#?cëÿeü7¹gý!ÈêßÏ»ºœNÖÍÃðVÍÆ¾òùVðù?†óù?Í ºé5ß®›ª\LVeõXÎêI3qŽˆùp\ÿá
- ªF¦ÿªíFjþyÿßÙœú‡`(ÕDè_8ûšÿ{CýCàü_7£ôèÿGŸCÔÿ³Å®ÿc²‚ý‚úïŸÿ8æ?ßòú§Xÿw¹ÿ§¥ÿ‚\ ¨¹þ™ÿ|K0ÿY7rý3ÿù–`þ³näúgþó-á¨|ÕÈõÏüç[‚ùϺ‘ë³þúÇ@õë&¢ÿÏüç‚Ïÿu#׊õçóoõÁn ¡©þ
-óŸo
-yý™ÿ|K0ÿY7rý§ðœû¿²Ìñù/„½ÿãý¼k7³9}ÈõŸÀÿñ‚ÿ“ùÏÞ–}IÝëE®æ?ß\þ­¹þ™ÿ|K0ÿM7rý3ÿù– üuÑÿgþó
-Aÿ‡näúgþó-Áù¿n¤ú	ƒŽò0ÿ‚¼þ)üù¥ÿƒýÞÜÓ¢¹þAùìÿ@`þ‡näúÇä8ÞÿA`þ‡näúù?xý‡Qùª‘ë”ÿÁý 0ÿC7rý§ð\ø¿÷ÿÀ`¹üW5ýŒÿƒþoôèF®ÿþóõ_Þ†@ý#pÆSòŠ‘êߢüþòúƒò?ØÿÀüÝÈõŸÀÿaì¥ÿƒý¿näúOáÿ¸¼þ;^ÿ!¼[®ûnSõM»äP ¹þAþö 0ÿC7rýƒò?èÿ‚Àõº‘ë´ÿýß(ÝDôÿ1þÞÿC ÿC7rýƒò?˜ÿó݌ЌåㄱþïlpnxÝæEÎý_ Œªß®ÚE;ÛF~ÆÖÿËøorÏúCÕ¿Ÿwu9¬›‡á­š};äóÿ¬àúoçóþWóíº©ÊÅdUVå¬ž4Ó爘ÿîÿá
- ªF¦ÿªíFjþyÿßYîÿŽÁPþª‰Ð¿pö5ÿ÷†ú‡Àù¿nFéÿÐÿ>‡¨ÿg‹]ÿÇd\ÿAPÿýóÇý¿o
-yýS¬ÿ»Üÿ“Ïÿ1¸À€š‘ë”ÿÌüÌ֍\ÿ˜ügËõ?˜ÿ¬¹þ¹ÿ÷-Á~ŸnäúÇä?sýæ?ëF®îÿ}KPýº‰èÿsÿï‚Ïÿu#׊õçó®ÿCá7€ÐŒTÿ&¹ÿ#üýäõÇä?ÞÿA`þ³näúOáÿ8÷e™ãó_{ÿÇûy×nfsúë?ÿãÄÿ¸ÿ7·e_R÷z‘ë?µÿ#üÜÿ—ëF®Pþ3ý_˜ÿ¦¹þAþÞÿC üuÑÿ‡ø?ØÿÇ@ÿ‡näúÇä?ûœúGÀù¿n¤úϸÿ÷M!¯
-ÿG~¹þ—ýÞÜÓ¢¹þAùìÿ@`þ‡näúåðþó?t#×?÷ÿ¾%2*_5rýcò?¸ÿ/æèF®ÿþÿWàþ,—ÿª&¢ÿÏý¿oú?t#×
-ÿÇùúOo×@pÆó@1RýÇlåÿ`þyý1ù–ýÌÿЍ\ÿ	üÆ^ú?Øÿ@ñëF®ÿþËë?ó?0¼[®ûnSõM»äP ¹þAþö 0ÿC7rýƒò?èÿ‚Àõº‘ë”ÿAÿ7Ê_7ýŒÿƒ÷ÿèÿЍ\ÿ üæÿ@àü_7#ô³åË	cýÞÙàÜðºÍ‹œþ£êß·«vÑζ‘„±õÿ’ÿlòÝþ߬zdõïç]]N'ëæax«fcßÙüWÿ¬àó?çó>Ð…Lÿ«ùvÝTåb²*«ÇrVOšéˆsÈæÿ;ýû@ÿ†7¼jdú¯Ún¤æ‘õÿûÿpý'Cù«&BÿÂÙÔüßêçÿº¥ÿCÿ?ú¢þŸ-vý“±ÿAPÿýó‡Úÿ›õ‡ ¯Šõ—û2ÿƒ\ ¨¹þSç?‡Ãú?æ¿C`þ³näúOÿü|ý§ÿóŸu#×?hÿo^ÿ!Ð﫹þSç?‡Ãú?ú!0ÿY7rý§^ÿëÿ¨T¿n"úÿ‰×ÿ…Ãú?>ÿ‡Àçÿº‘ë?Åú¿óù¿·ú‡à7€ÐŒTÿ1‹£üŽþòú§Î><ÿ1¼ÿƒÀügÝÈõŸÂÿqîÿâþß(öþ÷ó®ÝÌæô!×ÿÇKþO^ÿ!¼-û’º×‹\ÿ ÿýߨïՍ\ÿ©óŸŸýôA`þ›näúù?xÿò×MDÿâÿ`ÿýº‘ë?uþóAÿžû?@àü_7Rýg(ÿG ÿ¼þ)üùåóö xsOˆbäúå°ÿùº‘ë”ÿÁû?ÌÿЍ\ÿ ÿ¯ÿ2*_5rýcò?rîÿùº‘ë?…ÿãÂÿ¸ÿË忪‰èÿcò?èÿ†@ÿ‡näúOáÿ8_ÿåmȨÎxÞ (Fª‹òpÿoòúcò?,û?˜ÿ¡¹þø?Œ½ô°ÿâ׍\ÿ)ü—×Çë?„wËußmª¾i—
-"×?ÈÿÁþö{u#×?(ÿƒþ/\ÿ§¹þAùôC üuÑÿÇø?xÿþÝÈõÊÿ`þÎÿuó5ý/Ûia÷¸`¬ÿÃ;œ-^›»Ýúú?Òsµþ»ÅlúsÄØúÿmárÏú#Yÿaà¢Ï±¯Q\©¿nû‡[,®ÿÆfƒþÝŸ¿á/úG°þcê?LúÊáê£Îqmþg³óük<ýv…Ì›þÎÞ›ð]özÿ÷§f½¾3‡¯?´]ÝÌ–Ã_›e_w‹ºüXïÿ‡PØâõ¢­ÊÅd÷ùô
-Ú~>Üìÿ‹áÔòÿžñã}ލñßrüG0²þOõS³üÐÆãÊøowsþÓñßäžý?¯ݏÔw¿ÔOïÛ¾\|·ÇsïÌÝãGüÔÕõóëwwÁ:ŸŸðÛºž~>ÀßÞù£~¨úæã—opç†AÁ}wtÀ»eyzˆóö䀟›Ùüø§ÜcÎ8ù)Ïø[ûû×Íုÿšo›®ßž|ÿ»pïŽØ'j=”Õãý?5‹úïå¬^?à†+§9þ5)W«£7r`ø¿ÃËvyüî¬ËOÞêÝ‹ïˇÅÑE~ü~ýé“ß–ÃG8æû—~ÈÛͲ:}OøÇ¢|8~y¸}?}£~ÞÌ¿æäè7—¯½Ýœ0Àý·Ñ爹þ»‚×#ë?m†·i¢Îq½ÿþüÏ9ûÿ8äêfüø¯Æ¨ñ?çø`|ýGš=^àêøáÿ0>gþ7„O%øäÿøÀë!„róüì¶Ï ¨ 
\ No newline at end of file
+‹ Ö9K í_oÛFÅóœOá°ÙΐußZEƒÝ4Ašb$²(PTºÚO¿”ä$úãÚ¼³™³ÝóC[;kʼ:äðòÌß”¹ã×{•3P„°ûj‹`ö¶Þï¿>òÊZg\0Æ[÷ÊX‚u¾§/lÖ}ÙÝܼº›µ³E³|f»º[#Þÿ¹þ«®­}ÆÕßf!3Æ
+ßë‚
+¬?‚/õ_o“F×ßcõÏ
+Çú#8©ÿ´þÔTõ7ÿÈëï‡XOÖø¾¯¾ÙÇ@^ÿyÃú#x®þÕjóM>cëï
+ÎCýsë-ëà¥úÿºÿöC ª¿Ûé¿nX£êß·«vÑζ‘Éù?…nòœõ‡ «?ïêr:Y7wᚍ=»ûC½Ÿ®¿sgõÏŠÝõß$ýÍQ^ÿÏ%øËãWÿúýŽ™þWóíº©ÊÅdUV÷嬞4ÓûxQÿ&;Ó¿»ñõŸž7–‚׌LÿUۍÔü1/ëÿüú?ÜPÿ寚ýGÿQãï¨ÿëf”þ«²š×ñ]@qÿ×øü‚ þÍrZÿ+¦,ïÿYçÙÿƒ ¯ÿºùw-ÛÇËãÿp>þ·™ãõùßyÉ׋\ÿeßwÍݦ¯G«áEýÛ‹ñ¶;ÿSÿéù½kúúDzºçI@%rý÷ÛÕ·¾þÛóñßpýÔ?‚ËæcSO©~¥Èõ¿¨?ÕÑ>búÿ9¯ÿ•¯¹þ«v^wõ²ÚN¹ìž¼ØxYÿþLÿÁõÀºïxPŒ\ÿ”Ûõ¤ý8)×ë¶jʾùÔôÛg÷!¿þ‡@ýc úuÑÿŸ—]=/LÊÕ˜}ÈŸÿ{›ñù?>ÿ׍\ÿËÍÃ]ÝíF 뺥ùøßÛ‚ú‡àBNÅ+Fªƒòpþ?yýSø?ÎÏÿÀ÷,íª‘ë?…ÿãÜÿ•ežÏ!ìýïç]»™Íy"Ї\ÿ	üOù?yý‡ð¶ìKê^/rýƒüôCàôoÝÈõŸÂÿqžÿlAÿ„œ|T#×?ÈÿÁû”¿n"úÿÿûÿèÿЍ\ÿ)üùo6Ï©ÿëFªÿåÿ`þyýSø?òËç?ìÿ@ðæ–ÅÈõÊÿ`ÿó?t#×?(ÿƒ÷˜ÿ¡¹þAþ^ÿ!dT¾jäú‡ä얁¥þ0ÿC7rý§ð\ø¿r®ÿÁrú¯j"úÿ˜üú¿!Ðÿ¡¹þSø?Îçy[dÔ?g<o #Õ¿Eù?2ú?ÈëÉÿÈØÿÀüÝÈõŸÀÿaì¥ÿƒý¿näúOáÿ¸¼þ{^ÿ!¼[®ûnSõM»ä©@!rýƒüìÿ@`þ‡näúåÐÿóÿt#×?(ÿƒþo”¿n"úÿÿïÿ!Ðÿ¡¹þAùÌÿÀñ¿nFè?&òㄱþïlpnxÝ;Ký FÕ¿oWí¢m#?cëÿõüoòœõ‡ «?ïêr:Y7wᚍ=òñVðù?†óñ?Í ºé5ß
 ®›ª\LVeu_ÎêI3±ˆñðœÿá
+ ªF¦ÿªíFjþyÿ¸ þ!Ê_5úŽþ£ÆÿÞQÿ8þ×Í(ýúÿÑûõÿl±ëÿ˜³ÿƒ@PÿýóÇüç«B^ÿóÿžXÿ“þ_.p fäúgþó5ÁügÝÈõÏüçk‚ùϺ‘ëŸùÏׄ£òU#×?óŸ¯	æ?ëF®Èü¿œúÇ@õë&¢ÿÏüç+‚Ïÿu#׊ùçãoêÂ0Ô¢â#Õ¿aþóU!¯?óŸ¯	æ?ëF®ÿþsÿW–y>ÿ…°÷¼Ÿwíf6ç‰@rý'ð<áÿdþ3†·e_R÷z‘ëŸùÏ×§ëF®æ?_ÌӍ\ÿ̾&(ÝDôÿ™ÿ|EÐÿ¡¹þ™ÿ|Mpü¯©þc £ǘ ¯
+ÿG~éÿ`ÿ‚7·t€(F®Pþû?˜ÿ¡¹þAù¼ÿƒÀüÝÈõòðú!£òU#×?(ÿƒëÿ@`þ‡näúOáÿ¸ðå\ÿƒåô_ÕDôÿ1þú¿!Ðÿ¡¹þSø?Îçy[xê3ž’WŒTÿåÿðô ×”ÿÁþæèF®ÿþc/ýìÿ@ øu#×
+ÿÇåõßóúáÝrÝw›ªoÚ%O
+‘ëäÿ`ÿó?t#×?(ÿƒþ/œÿ§¹þAùôC üuÑÿÇø?xÿþÝÈõÉÿ(˜ÿã݌Ќåㄱþïlpnx}P¿áú/FÕ¿oWí¢m#?cëÿõüoòœõ‡ «?ïêr:Y7wᚍ=òñVpþ7†óñ?׃ׅLÿ«ùvÝTåb²*«ûrVOšéˆ}DŒÿ×ÿÀð† U#ÓÕv#5Œ¼ÿ?ÜPÿ寚ýGÿQãï¨ÿëf”þýÿè}ˆú¶ØõLàü/‚úïŸÿ8®ÿ}UÈëŸbþßåúŸ|þÁN ÔŒ\ÿ ügæ¿@`þ³näúå?sþæ?ëF®®ÿ}M°ß§¹þ!ùÏœÿ‚ùϺ‘ëŸë_T¿n"úÿ\ÿûŠàóÝÈõŸbþßùøŸóÿP¸À 4#Õ¿Iîÿÿ‡£ÿ¼þ˜ügÇû?Ì֍\ÿ)üçþ¯,ó|þaïÿx?ïÚÍl΁>äúOàÿ8ñ®ÿ
+ämÙ—Ô½^äúOíÿÿ×€Àéߺ‘ë”ÿLÿæ¿éF®ÿƒ÷ÿ(ÝDôÿ!þöÿ1Ðÿ¡¹þ1ùÏy þpü¯©þ3®ÿ}UÈëŸÂÿ‘_Îÿeÿ‚7·t€(F®Pþû?˜ÿ¡¹þAù¼ÿƒÀüÝÈõÏõ¿¯‰ŒÊW\ÿ üú?!0ÿC7rý§ð\ø¿r®ÿÁrú¯j"úÿ\ÿûŠ ÿC7rý§ðœÏÿô¶àüÎxÞ (Fªÿ˜ÅÀ£üÌÿ€ ¯?(ÿƒýÌÿЍ\ÿ	üÆ^ú?Øÿ@ñëF®ÿþËë?ó?0¼[®ûnSõM»ä©@!rýƒüìÿ@`þ‡näúåÐÿóÿt#×?(ÿƒþo”¿n"úÿ˜üÞÿC ÿC7rýƒò?˜ÿãÝŒÐÌ’/'ŒõxgƒsÃë¶ØÝÐÿ`TýûvÕ.ÚÙ6òƒ0¶þ_óŸM¾[ÿ›õO¬þý¼«ËédÝÜ
+‡j6öpÈÆÿ»úgŸÿa8ÿóy€.dú_Í·ë¦*“UYÝ—³zÒLGìC6þßéßú0¼¡àU#ÓÕv#5Œ¬ÿXÿƒó?1Ê_5úŽþ£ÆÿÞQÿ8þ×Í(ýúÿÑûõÿl±ëÿ˜ÀþAý÷ÏjýoÖ‚¼þ)æÿ=±þ'ó ¸À	€š‘ë?uþs8Ìÿcþ;æ?ëF®ÿÔùϏ×úÿ!0ÿY7rýƒÖÿæõý¾º‘ë?uþs8Ìÿ£ÿóŸu#×
 êùá0ÿú‡@õë&¢ÿŸxþ_8ä?óù?>ÿ׍\ÿ)æÿÿ½-¨.pÍHõ30Êÿaéÿ@ ¯êüçÃóÇû?Ì֍\ÿ)üçþ/®ÿbïÿx?ïÚÍl΁>äúOàÿxÊÿÉë?„·e_R÷z‘ëäÿ ÿû½º‘ë?uþó£ÿƒþ/ÌӍ\ÿ ÿïÿ!Pþº‰èÿCüìÿc ÿC7rý§Î>è?çú8þ׍TÿÊÿáéÿ@ ¯
+ÿG~ùü‡ýÞÜÒ¢¹þAùìÿ@`þ‡näúåðþó?t#×?ÈÿÁë?„ŒÊW\ÿ ü®ÿùº‘ë?…ÿãÂÿ•sý–ÓUÑÿÇäÐÿ
+þÝÈõŸÂÿq>ÿËÛÂQÿœñ¼PŒTÿåÿàúßäõå°ÿùº‘ë?ÿÃØKÿû?(~ÝÈõŸÂÿqyýÏxý‡ðn¹î»MÕ7í’§…Èõò°ÿý^ÝÈõÊÿ ÿçÿéF®Pþýß(ÝDôÿ1ù¼ÿ‡@ÿ‡näúå0ÿÇÿºyNÿËvZGØ=.ëÿðÎg‹WÆæn7ÿƒþô¼XÿÝbý9blý¿œÿm‘
+—ÖÀÈúà ½}ýA?_ÿÌæYÈí×cà÷×oø‹þ¬ÿ˜úƒ¾r8P}Ô>^ÿí{8óÿ™œþ»ÂNæMcoMø.{½ÿóC³^ߘÃ÷Û®nfËáÍ²¯»E]~ª÷ÿC(lñzÑVåb²ûŒ|þm?îöc8´ü¿güù?‹ÞGÌù§žÿÓ3²þõC³üØÆíã…ó¿ÝùOÏÿ&ìÿAxýëþL}óKýð¾íËÅ÷7{¬1··ÎÜÜÿx´ÁO]]?¾~s¬ó·ùéÖõôËþ¶ðÎmðCÕ7Ÿ¾þ€7œÜwG¼[–§›ìúÀÇüÜÌæÇïr9Ûàä]žoðöçÍaƒçÍ·M×oO~þM¸uGìµîÊêþÏÞäOÍ¢þg9«×¸áÊiŽÍ_ÊÕêè@ïñø'ü°l—Ç?áÆºüäPï^|_Þ-޶(òãŸðëO¿M>,‡þ°Í÷O½ÉÛͲ:=ާü¶(ïŽ_nßOÔÏ›ÙáלqsùêÑáæ€Îøë¿ÞGÔý_Îë?‚‘õŸ6ÃaNQûx¹ÿþüÏî"ayýÀS®nÆŸÿãÕuþ<ÿ#_ÿ‘f'xñüáÿ¾0ÿÂç|ö|äõ€B¹zþŠs¯2 ¨ 
\ No newline at end of file

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/4ia64-4s.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/4ia64-4s.tar.gz.output	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/4ia64-4s.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,33 +1,33 @@
-System(0KB HP=0*0kB  )
-  Socket
-      L3Cache(4096KB)
-        L2Cache(256KB)
-          L1Cache(16KB)
-          Core#0
-            P#0
-  Socket
-      L3Cache(4096KB)
-        L2Cache(256KB)
-          L1Cache(16KB)
-          Core#0
-            P#1
-  Socket
-      L3Cache(4096KB)
-        L2Cache(256KB)
-          L1Cache(16KB)
-          Core#0
-            P#2
-  Socket
-      L3Cache(4096KB)
-        L2Cache(256KB)
-          L1Cache(16KB)
-          Core#0
-            P#3
-depth 0:	1 System (type #0)
+Machine (phys=0)
+  Socket #0
+    L3Cache #0 (4096KB)
+      L2Cache #0 (256KB)
+        L1Cache #0 (16KB)
+          Core #0 (phys=0)
+            PU #0 (phys=0)
+  Socket #1
+    L3Cache #1 (4096KB)
+      L2Cache #1 (256KB)
+        L1Cache #1 (16KB)
+          Core #1 (phys=0)
+            PU #1 (phys=1)
+  Socket #2
+    L3Cache #2 (4096KB)
+      L2Cache #2 (256KB)
+        L1Cache #2 (16KB)
+          Core #2 (phys=0)
+            PU #2 (phys=2)
+  Socket #3
+    L3Cache #3 (4096KB)
+      L2Cache #3 (256KB)
+        L1Cache #3 (16KB)
+          Core #3 (phys=0)
+            PU #3 (phys=3)
+depth 0:	1 Machine (type #1)
  depth 1:	4 Sockets (type #3)
   depth 2:	4 Caches (type #4)
    depth 3:	4 Caches (type #4)
     depth 4:	4 Caches (type #4)
      depth 5:	4 Cores (type #5)
-      depth 6:	4 Procs (type #6)
+      depth 6:	4 PUs (type #6)
 Topology not from this system

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/4ppc-4c.tar.gz
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/4ppc-4c.tar.gz	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/4ppc-4c.tar.gz	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,4 +1,9 @@
-‹ §
-J í™QoÛF€ýZÿŠ{Ü€6#y¼ãÝÞ¶¼t‚ýÂ‘µT˜#’,ûõ£ìm]Ô‘U[@1~0bY¶I)ßñÄ“y»-Þáš‹	axF	°{Ì»ç¿Y P `¤è¶îrár‡ô‰Ç®_µÎ-îî›ûMUù\Ùvsмð¿þ·ms¡A0Î?zö!øÁ¿6ÿspà¿Ø>VõoÍys‚ãÞ÷‹þ…öÎ{/ó?÷?X/»®ißüè`©úßèÆííu¸¹}ëV›¾z*×=n·MÛ—ëe±iŠß‡g¹
-;7ïÿ\¶åSÕUM­ïàºï¶O­Óéœ à÷Ëåá\‰h®Dþ’‰ú꡼[uåð>{LúµåêøXÕåíúý¯·î—ŸoÞ¦Äüî§k\žàÿ þµú³±×ê?†Ãú÷1‚Õÿè°u1BŒÁÅY$8–L^0¸$DñäPÄŠŽÀ‹pžÕ"Â~Ú G)IÆá› QR–äÐg†9iÜÈÑÖF/¹Ì„)í ½CÊ™1k€$ÞGÙˆA˜²cÖ@à8Çœ“Kô0÷ÈQ&}°&Ì!‰ÆGÂ(¬…¤¼ö—QÏP/-A¼H$èR@ò¼à5 ‚“&Œ1sŠC ñr †õ´˜‚v0"épÖ UÝ·Žˆ0ƒîЉ§ÿ£w’r†)§åÝPÅ ù$ÿLe§;}Ö2 Ý®îCûX×U}¯³äþõÝ0m”kÍqÿŸê¿{î.´×ÿAô(µñÓþ/²õÿ³ð¹ÿµ^‰tPžyœîŸ)’ùŸƒ—ýëv_>œkœàß{õ¯—4ÿspÔ¿^Ï1FùÑë»DTÿÚADó?¯ú£¯§ßÿòæÆùï›m³i
-„“ëŸÉîÿÍÂ8ÿۏÏ]U¬6ªõ„ƒ`>²þ×¥ÏçõOÈ^lý?þ‹Jã›áhý×ͺ<C8¡ÿÞæÿYxÝÿð¾jLèÿ‰ùŸƒ±þ‡¬Ssìüëú¿ÿ?ìî0/]óL¿€ùëßOÍ1É?›ÿ98Á?NÍ1É?™ÿ9ë]éÿ©.Ê)9^_ÿùÃõyoë¿9À‹üªh|+œ0ÿO.ÇIó?Úüo†a†a†a†a†a†a†a†a†qŒ¿ çÊŠÐ P  
\ No newline at end of file
+‹ 4Ö9K í™QoÛFÇýZŠ{Ü€6#ïÈã]ß¶¼t‚}"±µT¨#–,ûôãÙ
+Щ#+¶€bü!°eÙ&Oþ“<R¡õzñ¿ÍN(Â\žQ¶¯‘hûü¢Ï „~ˆÌaæø”‹zä®ë¯6ÎÍ®oÚ›UÝìù\µé¦XдÐ7ý×›ödA0LA…ôìÅôŸ‚'ú/Öwuów{lEà¸ÓûEýÅó3ýµ
+àÌÁ±òÿsý‹îU×µ›wÌ5 ÞéÁååy¸¸|ï®V}}_-\w·^·›¾ZΫvñµ|ÈS–3Þ
+xñéßù¦º¯»ºmô<C÷Ëú~ã´œ“üu>ÿÞNåÈOå(œÒQ_ßV×W]UÞ§€I¿6¿½Z|©›ªX;ÿô×¥ûó‹÷)}øýçèÿ$ÿ5úÄØkùùyþëa°üŸ
+[ç#°`d9’;’ìƒ ;fሠÁ;	ì£ó$ ¸@¥Pîl€ó)³$‰cù&¨U”%9™ CNj7’ZtLÚè%—ÉcJ;¨$BÄàÐçL˜Õ@’¢l
+DòÙ©!p”cÎÉ%`]æÎ€w>{ý#u˜9‰Ú×]$
+i"© ýeÔ+¤@,A
+$/裴3Ô ‚®IƘ)Åb@‚šÜˆœ£^y@Ž#z]Êj núóÞc=¡…§ÿ§w’rÎ>§ùuÉb5B’ÇòQuz2dM¿=Õ}ÞÜ5MÝÜh•ܽ¾.e£Zªèÿ˜ÿÝCw²`Xÿ1 øÈTú?Bëÿ'á{ý—ºiH=ן °é?/é¯Ç}u{¼08@ÿDT‘Lÿ)Ø£¿n‰Ç‰Aúƒèþ.ÑÎÊÎÊhúOÁ+ú—¶èÍApøý4ý'aˆþ}»nWíÍÃØ@88ÿ=D±û“0Dÿõ—‡®^\­>×ËQ>ŠÀ´gþ×Ñçiþ{»¼ÍÿSN1T?
+{ò¿i—ÕQÀý_ «ÿ“ðšþåÞ#ú¿ [‚é?Ãô/·WÇûØê_æú½úÍúrg5–þO'À™ógÇ»ÎbúÓ?Œ÷1JoúOÁ`ýq¼Qúƒé?Ãô_Öú+5‹jœ×ç¿ð|þˆ6ÿMžä¿ŠÆÏÂàúÿ†dSÿY¬þ†a†a†a†a†a†a†a†a†aìã?æuêL P  
\ No newline at end of file

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/4ppc-4c.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/4ppc-4c.tar.gz.output	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/4ppc-4c.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,8 +1,8 @@
-System(0KB HP=0*0kB  )
-  P#0
-  P#1
-  P#2
-  P#3
-depth 0:	1 System (type #0)
- depth 1:	4 Procs (type #6)
+Machine (phys=0)
+  PU #0 (phys=0)
+  PU #1 (phys=1)
+  PU #2 (phys=2)
+  PU #3 (phys=3)
+depth 0:	1 Machine (type #1)
+ depth 1:	4 PUs (type #6)
 Topology not from this system

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/4qs22-2s2t.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/4qs22-2s2t.tar.gz.output	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/4qs22-2s2t.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,11 +1,11 @@
-System(15GB HP=0*16384kB  )
-  NUMANode#0(8192MB)
-    P#0
-    P#1
-  NUMANode#1(8192MB)
-    P#2
-    P#3
-depth 0:	1 System (type #0)
+Machine (phys=0 total=16777216KB)
+  NUMANode #0 (phys=0 local=8388608KB total=8388608KB)
+    PU #0 (phys=0)
+    PU #1 (phys=1)
+  NUMANode #1 (phys=1 local=8388608KB total=8388608KB)
+    PU #2 (phys=2)
+    PU #3 (phys=3)
+depth 0:	1 Machine (type #1)
  depth 1:	2 NUMANodes (type #2)
-  depth 2:	4 Procs (type #6)
+  depth 2:	4 PUs (type #6)
 Topology not from this system

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/64fake-4n2s2ca2c2t.tar.gz
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/64fake-4n2s2ca2c2t.tar.gz	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/64fake-4n2s2ca2c2t.tar.gz	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,206 +1,202 @@
-‹ §
-J íýQoÜ̶µ‹}×çWì‹\¾FX$‹”sAŒ A.’k¡Ý’eÁþÜ‚Ô>‰óëC6›ZrëX"9kŽƒwÏç	–¶ó­ôAWVqÖ˜cví×Ý÷ÛíÏú¦þ?ÔûúøüÅ©úœÇÿ›ú\þÿ§¶=ýß3ÿ#¥ºªsUµ©ùUjªáö_¹üÿ§¼æ×Óq÷ø_ÿõ?¾Üî~Üÿ|ãwûø¤øÿ -Ý«õúýTø7°lýS“S×¶}7®ŸjÖ_ÁÿöúßÜþ¯÷ûÛR¿ƒåëß7}5ü¿§ÜÔë¯àíõþ}¼ýŸÖŸÁýç4ü÷©þÁú+X´þû‡_–ßÀýw}?¬ßfžÿ¯ÿðŸÔmû¬Xÿn|ðWuÕV¬¿„•ë<<~î~¯ú!¬xþç¾ô_×u×°þ
-¶®ÿñÛãíîæúéþËð¥Ý½ýÅŒÜMëý¿½þu}±þ¹iÓÿø¯Jñ_ÿy	þ–$ÿø_þ÷þÿ"P²Uÿß~?Ýïw?®vûï»»Ûëû›¿~Æ»ú¯þ£ÿáÏ ÿ.5úWP£÷ÐlÕÿþðø¦æ_²^ÿMîÙÿ%°ßÇÆ¤ÿE§ÿuçÿ¶®þÇé"¨Cÿ
-^œÿ¿~åüŽ•úßïößn×V—Õª®®úÔµ£þSÛPÿ—°iýïÞÜþëÅ?ƒ5õßá?cýoü°þ,ëÿtÿÿ»]òã·ožÿóiýÑW“þ‡ŸBËþ¯ ÎÝÿ-?.ý?× ÝÜ^?ì÷ÇûÃk	½¯ÿúBÿ}›ô¯ !þÐXôüýPfÿOÕôßô§ý¿Îè_Áÿûçý×ûÛžA±èÿÇíÿzûcÁg¬ßÿ›®¥þ'û¿ØXô¿?|»}¼ý¹ÿ=½ üµð¾þ›ýw¹ãþ_B×ò ˆŒ©þ÷m÷x{s=ü7Ãàéø×Ïx_ÿí…þsŸ¸ÿ—Pýà 2ýÿv¿Ÿ®_¯wOO‡ýýîxÿ¿Þÿo|Ɔú_êп„+ÔšBûÿÿÜ=üý3F…/óÿô]_üÿÿ¯†y	þ©ªœÇð<…Eÿ?ýÏ/·ã	àéöø†66œÿ3÷r¢™íú¯|ü_M{òáÿÓ`Yÿrþ¯öÕýoêyþ+hjì_‘±èßÅÿuÒßfô/ÿWl,ú/æÿzéÿžý_è_§ÝqÇ# .ý»ø¿&ýwcþú÷‡ý?6ý»ø¿NúïrGÿ—ü_±1Õÿ<ü_'ýç>Ñÿ!ÿWl,úwñMõ¿Ô¡	ø¿bShÿ/æÿšîs®9ÿK˜—€üטXô_ÎÿuùþŸs¦ÿSïÿ±Ù®ÿÆ)ÿëìÿbþËú—óu¯ó¿xþK¸Jq€Æ¢×ü/Þÿ$pÿ‹þ]ò¿ÎûMÿŸò¿bcÑ¿kþþO	
-ʍEÿ®ù_äH þSýÏ3ÿÿ·„êCÏ 0ý—ó]îÿ}êÈÿ:ä™Bû9ÿW:û¿ðJ˜—€ù1±è¿œÿërþW@ÿ
-Æû$—íúONù_Õäÿªñ)°¬¿gþ÷¿ÈÿŠEÿžù_ÌÑ€ÿ+6ý—ó½ÞÿÉ×ðùçÓññ×~|nó$ˆEÿ®ù_ÜÿH`ÿEÿ®ù_Ô%àÿŠ©þç™ÿEÿ§ò¿bcÑ¿kþú—€úcShÿ/˜ÿ5ù?jú?$ÌK@þWL,úw™ÿxÎÿâþOCªI Ìýw‹_2*|©ÿ«©»AÿU3îÿø¿üY·þÇÃÃáÇáî÷ºÂòõïrןòßêŠõ—°qýßow7×O÷_†ïìîïeùù^ÿ\3ÿOËóÿtLã4Šú¶þ=ìößww·×÷7ÿŒwõ_ýGÿßñþ¯"ÿEïû±Ù¨ÿýáñmÍ¿d½þ‡¿¼ÿK ÿ)6ý/;ý¯;ÿ7§óÛ7ø$\œÿ¿~åyŠuúŸÊÿk?cYý§êêªOSÿ÷ð,h©ÿ(زþ§ëŸzùÏ`MýwøÏXÿËcý‡õ÷ǰþKÛ7ä?ÿÄÿ/¡Î
-À1èiûï–ùMOþ£úbcÐÿÒößuó¦þ¿ñŽþ0ÿ!6ý/mÿÝ2ÿþ?„¿ÅÆ ÿ¥í¿[æ?´=÷ÿèÿ¥þ·°ýwËü‡Žü
-ôÿÆÆ ÿ¥í¿[ê©Bÿèþ‰M™ýÿÍößåþŸzøg›Çý¿eÿ×0/ÁÙÿ“3σPô¿´ýwËù¿åþOCNT #³Yÿ•“ÿ«i'ÿþ?	†õ/èÿz•ÿÜ6ä?I`þClú÷ñMùoMþ%àÿŠAÿåü_/ýß³ÿýKø´;îxÄÅ ÿ×yþKOþ£öÿØôïãÿ:Ϩèÿ’€ÿ+6–úŸ‹ÿkÊíú?$àÿŠAÿ>þ¯óü‡
-ýKÀÿ›2û!ÿ×óýon[Îÿæ% ÿ5&ýô]¾ÿç¶§ÿSïÿ±Ù¬ÿÆ+ÿëìÿÊø¿Ö¿ ÿ«{ÿÅó_ÂUúˆ,0ýûæñþ'ûߨôï“ÿ5ïÿäH ÿ+6ýûæáÿ”ÀüØôï™ÿ•ÉÿÐ@ý76–úŸkþþo	Õ‡ž@`ú/èÿºÜÿûT‘ÿ!!uÈ?2eöÿ‚þ¯töáÿ”0/óÿbbÐAÿ×åü¯Üöè_Âxÿäã²YÿÉ+ÿ«šü_	ÿ—Ãúûæqÿ+ü¯Øôï›ÿ…þ%àÿŠAÿý_¯÷ÿýKøüóéøøk?>¸yÄ ßü/î$°ÿÇÆ ßü/ê¿ðÅÆRÿsÍÿ¢ÿSù_±1èß7ÿýK@ý±)³ÿ—Ìÿšü-ýæ% ÿ+&ýûÌœó¿¨ÿKH5	 ‘Y£ÿöj¹çë%£Â—ú¿šºô_µUÿKÁÊõ??w¿Wý–¯×Õí)ÿ­îðÿIغþÇo·»›ë§û/×v÷ö³üü?¯nðÿiV"½8ÿW§PlÕÿ³ùïa·ÿ¾»»½¾¿ùëg¼«ÿêYÿyø3Þÿ%êÿhÿŒÍVýïojþ%ëõßdæÿj`¿Iÿ‹Nÿ«Îÿ§ÆÏáü_Õø$Œ-ßœÿã²RÿÓÀÊÏXVÿ©ººêÓÔÿ=ü·5õ›ÖÿtT/þ¬©ÿæúÔÿ;^±þ,ë¿´øt÷*ÿ¡É5ùoêÜÑ ‹þ—6 ¿¯ÿWóÚÿúbcÑÿÒàwõÿrþùÿ¯¡ÿOóbcÑÿÒàõûÓeæ?I ü-6ý/m ~_ÿ¯ç?tÜÿK ÿ76¦úßÂà÷õÿjþCŸ¸ÿ—@ÿol,ú_Ú ¼¡þ—˜ÿ¦îŸØÚÿßl ¾°ÿ·þϸÿçšó¿„ªÊy\ü?1±èið†óæþOCNT #³]ÿ•ÿ«9õvøÿ4XÖ¿œÿëUþsÆÿ­ù±±èßÅÿ5念ú—€ÿ+6ýó½ôÏþ/ô/áÓî¸ã‹þ]ü_“þ»Lþ‹öÿØXôïâÿ:Ïèéÿ’€ÿ+6¦úŸ‡ÿkÊíkú?$àÿŠEÿ.þ¯óüæ¿iÀÿ›Bû)ÿ×ùþ7ç†ó¿ò_ccÑ9ÿ×åûÎýŸxÿÍvý7>þ¯tö5ø¿XÖ¿œÿ«{ÿÅó_ÂUúˆ,0ý»æñþ'ûߨXôï’ÿ5ïÿôÿI ÿ+6ý»æáÿ”РüÐXôïšÿEþ‡
 꿱1Õÿ<ó¿ðK¨>ô< cÑ9ÿ×åþ?ÈŸü	‰ ¡)´ÿ—ó¥³ÿÿ§æÿÅÆ¢ÿrþ¯Ëù_9wè_Âxÿäã²]ÿÉ)ÿ+Mþ¯
-ÿ—Ëú»æqÿ+ü¯ØXôïšÿ…þ%àÿŠEÿåü_¯÷ÿýKøüóéøøk?>·yÄ¢Ïü/òß5°ÿÇÆ¢×ü/ê¿ðÅÆTÿóÌÿ¢ÿSù_±±èß5ÿýK@ý±)´ÿÌÿJÓüGüßÈÿŠEÿ.óçü/êÿRMhdÖè¿Yùõ£Â—ú¿šºô_µUÂÿ¥`åú‡‡»ß«~Ë׿ëª~|þ×õ8ÿ…õ÷gëú¿=Þîn®Ÿî¿_ÚÝÛ_Ìòóÿ¼þ¹áþ_ü œÿc²UÿÏÞ¿‡Ýþûîîöúþ毟ñ®þ«gýçáÏxÿ—xÿ×@ý/6[õ¿?<¾©ù—¬×“éÿÖÀ~“þþWÿsÛŽïÿ¹Jœÿ%Lðõ+çÿ˜¬ÔÿTÿ_ùËê?UWW}šú¿S;Îÿ¦þãϦõ?ÝÿÔ>ý¿uuêÿm¨ÿJ°¬¹þßËü‡á§€ÿGB;€cÑ¿çü‡Œÿ_ý?±±èßeþÜÿAþ»æ?ÄÆ¢Ïù-õ?	„¿ÅÆ¢Ïù™û	ôÿÆÆTÿóœÿÀý¿úccÑ¿Kÿïyþù?èþ‰M¡ý¿Lÿo=¼	4'ÿONÌ–0-Àn‡ÿ'&ý»ôÿžç?pÿ§!'*€‘Ù®ÿÊiþC;ù¿ðÿI°¬¿çü‡Äü_	̈Eÿžó2ú—€ÿ+6ýó½ôÏþ/ô/áÓî¸ã‹þ=ç?dê¿ØÿccÑ¿çü‡Žþ/	ø¿bcªÿ9ÎHôHÀÿ‹þ=ç?tè_þ¯ØÚÿÎh§ùœÿ%Ì€ÿ+&ý—ó]¾ÿçô¯€÷ÿØl×ÿòa£Âû¿ÒÙÿ•ñ)°¬9ÿW÷:ÿ‹ç¿„«ôX`,úwÍÿâýO÷¿±±èß%ÿkÞÿÉÿ@þWl,úwÍÿÂÿ)¡Aù¡±èß3ÿ‹ü
-Ôccªÿyæáÿ–P}èy Æ¢ÿrþ¯Ëý¿OùR‡ü#Shÿ/çÿJgÿþO	Ó0ÿ/*ý—ó]ÎÿÊ9£	ãý?’Ëvý'§ü¯4ù¿jü_
-,ëïšÿÅý¯ò¿bcÑ¿kþú—€ÿ+6ý—ó½Þÿkô/áóϧãã¯ýøÜæI‹þ]ó¿¸ÿ‘Àþ‹þ]ó¿¨ÿJÀÿSýÏ3ÿ‹þO	äÅÆ¢×ü/ô/õǦÐþ_0ÿ+Mþ/üßæÀÿ‹þ]æ?Îù_Ôÿ%¤šÐȬѺZlùúƒQáKý_M=ήڊùV®ÿñðpøq¸û½ê‡°|ý»|úßÕuݱþ¶®ÿñÛãíîæúéþËð¥Ý½ýÅ,?ÿÏ럛–û?	óü3Ñ8ÿ‡c«þŸ½»ý÷ÝÝíõýÍ_?ã]ýWÿÑÿðg¼ÿK
-ú—@óGl¶êx|Só/Y¯ÿ&÷ä?JÀÿ“þþםÿÛúÔÿ9FB¢/Îÿ_¿rþÇJýOõÿ•Ÿ±¬þSuu5ÎýõŸÚ¦§þ£`ÓúŸîjŸþßÓó¿îê,ë_®ÿ÷2ÿa<
-°ÿ+¨sGp`,úwÿ€ÿOïÿ±±èßeþý¿R˜ÿ‹þ=ç?dê¸ÿ‹Eÿ®ó¸ÿ—@ÿolLõ?ÏùÜÿK ÿ76ý»ôÿÎóпºbShÿ/Óÿ[ÿì§þ¿š÷	óüSU9ÿày
-‹þ]úçùÜÿIȉ
-`d¶ë¿ršÿÐNþ/ü,ëï9ÿü
-̈Eÿžó:ô/ÿWl,ú/æÿzéÿ>ïÿ
-ú—ðiwÜñˆ‹Eÿ®óÈ—Àþ‹þ]ç?Ðÿ%ÿWlLõ?ÏùôHÀÿ‹þ]ç? 	ø¿bShÿ/8ÿ¡ü_œÿ%ÌK@þkL,ú/çÿº|ÿϹÃÿ)÷ÿØl×ããÿJ“ÿ«­ð)°¬9ÿW÷*ÿÿ¿†«ôX`,úwÍÿâýO÷¿±±èß%ÿkÞÿÉÿ@þWl,úwÍÿÂÿ)¡Aù¡±èß5ÿ‹ü	Ôccªÿyæáÿ–P}èy Æ¢ÿrþ¯Ëý¿OùR‡ü#Shÿ/çÿJgÿþO	ó0ÿ/&ý—ó]ÎÿÊ9£	ãý?’Ëvý'§ü/æ?*±¬¿kþ÷¿ÈÿŠEÿ®ù_è_þ¯ØXô_Îÿõzÿoп„Ï?ŸŽ¿öãs›'A@,úwÍÿâþGûl,úwÍÿ¢þ+ÿWlLõ?Çü/ú?5ÿ‹þ=ó¿zô/õǦÐþ_0ÿkòÔôH˜—€ü¯˜Xôï2ÿqÎÿ¢þ/!Õ$€FfþëÅŽ¯?¾ÔÿÕÔÝ ÿªIÿ—‚uë<<~î~¯û!,_ÿ.wùäÿ;å?³þþl\ÿã·ÇÛÝÍõÓý—á;»{ç{Y~þŸ×?×-÷^œÿ§c§PlÔÿ³õïa·ÿ¾»»½¾¿ùûg¼«ÿê?úþŒ÷UËû¿Þ÷c³QÿûÃãÛšÉzý7¹"ÿAþŸØXô¿ìô¿îüßôcÿwÛ3ÿWÃÅùÿëWž¡X§ÿ©ü¿ö3–Õª®®ú4õÏòÿ%lYÿÓõÏŠbðšúïðŸ±þ—sÃú+0¬ÿÒöß
-ùMKþ‹†:w4 Æ ÿ¥í¿[æ?4ÌÿÖÀûlú_Úþ»nþÃÔÿ×¶ø%0ÿ!6ý/mÿÝ2ÿ!wÔÿ$þƒþ—¶ÿn™ÿÐöÜÿK ÿ76–úßÂöß-óºšû	ôÿÆÆ ÿ¥í¿[êUþ%Ðý›2ûÿ›í¿Ëý?u5FûËþ¯a^‚³ÿ'gž¡0èiûï–óËýŸ†œ¨ Ff³þ+'ÿWÓNþ/üë_Ðÿõ*ÿ¹%ÿYóbcпÿkÊkzô/ÿWlú/çÿzéÿžý_è_§ÝqÇ# .ýûø¿Îó_˜ÿ­ý?6ýûø¿¦ùmOÿ—ü_±±Ôÿ\ü_Sþk×Ðÿ!ÿWlú÷ñç?Tè_þ¯Ø”Ùÿù¿žïsÛpþ—0/ù¯11è¿ ÿ
 ëòý?·=ýŸxÿÍfý7^ù_gÿWÂÿ¥À°þý_Ý«ü/ò?5\¥8Àcпoþï¸ÿAÿ>ù_óþOþ‡ò¿bcпoþþO	
-ʍAÿ¾ù_ôÿK þKýÏ5ÿÿ·„êCÏ 0ýô]îÿ}Õ“ÿ!!uÈ?2eöÿ‚þ¯4ù¿Èÿ×0/óÿbbÐAÿ×åü¯Üöè_Âxÿäã²YÿÉ+ÿ«:ù¿ÚŒÿKaý}ó¿¸ÿ•@þWlú÷ÍÿBÿðÅÆ ÿ‚þ¯×û‹þ%|þùt|üµÜ<	bпoþ÷?ØÿccпgþW&ÿCþ¯ØXê®ù_ôJ ÿ+6ýûæ¡	¨?6eöÿ’ù_“ÿ£¡ÿC¼äÅÄ Ÿùsþõ	©&42«ô¿bæãKF…/õ5õ8ÿ¹jzü_V®ÿñðpøq¸û½ê‡°|ý»Üw§ü·:³þ¶®ÿñÛãíîæúéþËð¥Ý½ýÅ,?ÿÏëŸü^œÿSÿÁi [õÿlþ{Øí¿ïîn¯ïoþúïê¿úþ‡?ãý_ªÑ¿š?b³UÿûÃ㛚Ézý7¹£þ'ýÇÆ¤ÿE§ÿuçÿ¶>Õÿ+îÿ4¼8ÿýÊù?+õ?] ¬üŒeõŸª««>Mýß©çÿQÿñgÓúŸ.€êÅ?ƒ5õß|zþ×§ü/ÖßËú/m >Ýð­ÊþAþ»„:w4 Æ¢ÿ¥
-ÀïëÿÕü‡¶¥ÿGý?±±èið»ú9ÿáÜÿWÓÿ#ù±±èiðúý¿éZê¨ÿÇÆ¢ÿ¥
-ÀïëÿÕü‡œ¹ÿ—@ÿolLõ¿…
-ÀïëÿÕü‡¾âþ_ý¿±±èið†ú_Êè_Ý?±)´ÿ¿Ù <*|iÿoêÿɹFÿæ%ø§ªrÿÁó ý/m ÞpþÏÜÿiȉ
-`d¶ëy3ð¨ðåóNýŸþ?
-–õ/çÿz•ÿ<<–xþ+`þCl,úwñMùomFÿðÅÆ¢ÿbþ¯—þïÙÿ…þ%|Úw<âbÑ¿‹ÿkÒ7ÎÿCÿþ°ÿÇÆ¢ÿ×yþC¦ÿKþ¯Ø˜êþ¯)ÿµOôHÀÿ‹þ]ü_çùú—€ÿ+6…öÿbþ¯éþ7ÿDÿ
-æ% ÿ5&ý—ó]¾ÿçá€þðþ›íúo|ü_éìÿJø¿XÖ¿œÿ«{•ÿ•xþK¸Jq€Æ¢×ü/Þÿ$pÿ‹þ]ò¿æýŸü	äÅÆ¢×ü/üŸ”‹þ]ó¿èÿ—@ý76¦úŸgþþo	Õ‡ž@`,ú/çÿºÜÿû”Éÿ:ä™Bû9ÿWšü_äÿk˜—€ù1±è¿œÿërþWÎýKïÿ‘|\¶ë?9å1ÿQ‰eý]ó¿¸ÿ•@þWl,úwÍÿBÿðÅÆ¢ÿrþ¯×ûþ%|þùt|üµŸÛ<	bÑ¿kþ÷?ØÿccÑ¿gþùðÅÆTÿóÌÿ¢ÿSù_±±èß5ÿýK@ý±)´ÿÌÿšü‰þ	óÿ‹þ]æ?Îù_Ôÿ%¤šÐȬÑ·<òëF…/õ5§ùÏU;<ð	X¹þÇÃÃáÇáî÷ªÂòõïºfòÿÕãü7Öߟ­ëüöx»»¹~ºÿ2|iwo1ËÏÿóúçñÿ°ÿ¸ºz>ÿOpÅVý?{ÿvûï»»Ûëû›¿~Æ»ú¯žõŸ‡?ãý_jÈ‘@÷wl¶êx|Só/Y¯ÿ&÷¼ÿK ÿ)6&ý/:ý¯:ÿç\êUÂÿ'ajúæü••úŸêÿ+?cYý§êêªOSÿwj›žú‚Mëºÿ©}úë©ÿ·¡þ+Á²þåú/óÆ£ û¿‚:w4 Æ¢Ïù™üG	ôÿÄÆ¢—ùsÿ/ó_$0ÿ!6ý{Î ÿMáo±±èßsþCÇý¿úccªÿ9Î ÿOý¿±±èߥÿ÷<ÿ¡Cÿèþ‰M¡ý¿TÿoŸr=Í þ/a·›– ÿOL,úwéÿç? 	9QŒÌvýWNóÚÉÿ…ÿO‚eý=ç?Ôä?I`þCl,ú÷œÿ@þ›ü_±±è¿˜ÿë¥ÿû¼ÿ7è_§ÝqÇ# .ý{ÎÈä?J`ÿEÿ®óèÿ’€ÿ+6¦úŸçüú?$àÿŠEÿ®óпü_±)´ÿœÿÐNþ/ÎÿȍEÿåü_—ïÿ™ù"xÿÍvý/1*|±ÿ+Mþ¯¶Âÿ¥À²þåü_Ý«ü¯šç¿„«ôX`,úwÍÿâýO÷¿±±èß%ÿkÞÿÉÿ@þWl,úwÍÿÂÿ)ù±±èß5ÿ‹ü	Ôccªÿyæáÿ–P}``d,ú/çÿºÜÿûÔ‘ÿ!!uÈ?2…öÿrþ¯töáÿ”Àü¿ØXô_Îÿu9ÿ+çŒþ%Œ÷ÿH>.ÛõŸœò¿Ò”ÿ•ñ)°¬¿
 kþ÷¿ÈÿŠEÿ®ù_è_þ¯ØXô_Îÿõzÿoп„Ï?ŸŽ¿öãs›'A@,úwÍÿâþGûl,úwÍÿ¢þ+ÿWlLõ?Çü/ú?5ÿ‹þ=ó¿zô/õǦÐþ_0ÿ+Mþ/üßÈÿŠEÿ.óçü/êÿRMhdÖè?/v|ýɨð¥þ¯¦îýWMMþ—„uë<<~î~¯û!,_ÿ±î;úëÔ·¬¿‚ëüöx»»¹~ºÿ2|gwï|/ËÏÿóúçáÿÇþ¯`^‚æ•à4Šú¶þ=ìößww·×÷7ÿŒwõ_ýGÿßñþ¯jÉ“Àû~l6êx|[ó/Y¯ÿ&WÜÿK`¿EÿËNÿëÎÿM?ö·}Cý_ÂÅùÿëWž¡X§ÿ©ü¿ö3–Õª®®ú4õÏ‚†ú‚-ëºþ©—ÿÖÔ‡ÿŒõ¿<æ³þþÖiûï†ü‡áŸÔÿ$Ô¹£80ý/mÿÝ2ÿ¡éÉ–@ÿOlú_Úþ»nþÃÔÿ×¶ä?K`þClú_Úþ»eþCî¨ÿI þƒþ—¶ÿn™ÿÐöÜÿK ÿ76–úßÂöß-ó:òŸ5Ðÿƒþ—¶ÿn©ÿU=ú—@÷OlÊìÿo¶ÿ.÷ÿÔÃ?ÛzÜÿ[ú5ÌKpöÿìv<BaÐÿÒöß-çÿ–û?
-9QŒÌfýWNþ¯¦ü_øÿ$Ö¿ ÿëUþsېÿ*ù±1èßÇÿ5å¿5=ú—€ÿ+6ý—ó½ôÏþ/ô/áÓîHÉ'0ýûø¿Îó_ÈÕÀþƒþ}ü_çùý_ðÅÆRÿsñMù¯]Cÿ‡ü_±1èßÇÿužÿP¡	ø¿bSfÿ/äÿz¾ÿÍmËù_¼ä¿ÆÄ ÿ‚þ¯Ë÷ÿÜöø?%ðþ›Íúo¼ò¿Îþ/òÿ%Ö¿ ÿ«{ÿÅó_ÂUúˆ,0ýûæñþ'ûߨôï“ÿ5ïÿäH ÿ+6ýûæáÿ”РüÐôï›ÿEþ‡꿱±Ôÿ<ó¿üߪ=€Àô_Ðÿu¹ÿ÷©"ÿCBêdÊìÿý_éìÿÂÿ)a^æÿÅÄ ÿ‚þ¯Ëù_¹íÑ¿„ñþÉÇe³þ“WþW5ù¿*ü_
-ëï›ÿÅý¯ò¿bcпoþú—€ÿ+6ýô½Þÿ[ô/áóϧãã¯ýøàæIƒþ}ó¿¸ÿ‘Àþƒþ}ó¿¨ÿJÀÿKýÏ5ÿ‹þO	äÅÆ ßü/ô/õǦÌþ_2ÿkò4ôH˜—€ü¯˜ôï3ÿqÎÿ¢þ/!Õ$€Ffþ›v¹çë%£Â—ú¿šºô_µcþ?þ/V®ÿñðpøq¸û½ê‡°|ý»n~N!õxÿËúû³uýßow7×O÷_†/íîí/fùù^ÿÜ0ÿ]ÃùüÕþ3¯§PlÕÿ³ùïa·ÿ¾»»½¾¿ùëg¼«ÿêYÿyø3Þÿ%ú¿5Pÿ‹ÍVýïojþ%ëõÿGþŸØ˜ô¿èô¿êüŸGãïpþ¯õ?	Ó|ýÊù?&+õ?] ¬üŒeõŸª««>Mýß©m2õ›ÖÿtT/þ¬©ÿæúÔÿÛ5Ô%XÖiðTaZ“ÿÐŒ10ìÿêÜÑ ‹þ—6 ¿¯ÿWóÚŒÿ_ïÿ±±èið»ú9ÿáÜÿW“ÿ.ù±±èiðúý¿éèÿ×€ß76ý/m ~_ÿ¯æ?äŽû	ôÿÆÆTÿ[Ø ü¾þ_Íè÷ÿèÿEÿK€7ÔÿR‡þ%Ðý›Bûÿ›
-À£ÂùêáM ýyx çû׌ÿ'&ý/m ÞpþÏÜÿiȉ
-`d¶ë¿òñ5íäÿÂÿ'Á²þåü_¯òŸ‡ŸÏ̈Eÿ.þ¯)ÿ­Íè_þ¯ØXô_ÌÿõÒÿ=û¿Ð¿„O»ãŽG@\,úwñMúïrþ°ÿÇÆ¢ÿ×yþCGÿ—ü_±1Õÿ<ü_SþkŸèÿ€ÿ+6ý»ø¿Îó:ô/ÿWl
-íÿeü_Ï÷¿9“ÿªá|þ"ÿ5(ý—ó]¾ÿçœñJàý?6Ûõßøø¿ÒÙÿEþ¿Ëú—óu¯ó¿xþK¸Jq€Æ¢×ü/Þÿ$pÿ‹þ]ò¿ÎûMþ‡ò¿bcÑ¿kþþO	
-ʍEÿ®ù_äH þSýÏ3ÿÿ·„êCÏ 0ý—ó]îÿ}êÈÿ:ä™Bû9ÿW:û¿ðJ˜€ùQ±è¿œÿërþW@ÿ
-Æû$—íúONù_iò5ø¿XÖß3ÿ‹û_
-äÅÆ¢Ïü/æ¿hÀÿ‹þËù¿^ïÿ
-ú—ðùçÓññ×~|nó$ˆEÿ®ù_ÜÿH`ÿEÿ®ù_Ô%àÿŠ©þç™ÿEÿ§ò¿bcÑ¿kþú—€úcShÿ/˜ÿ5ͬñK8Ÿ¿Èÿ
-ŠEÿ.óÏù_ÜÿiH5	 ‘Y£ÿÜ-¶|ýÁ¨ð¥þ¯¦îýWmEþ—„•ë<<~î~¯ú!,_ÿ®k†wÁá<Xgü¶®ÿñÛãíîæúéþËð¥Ý½ýÅ,?ÿÏ럛†þo	)MKÀù?&[õÿìý{Øí¿ïîn¯ïoþúïê¿zÖþŒ÷ÃË úW@÷wl¶êx|Só/Y¯ÿ&÷ÜÿK`¿Iÿ‹Nÿ«Îÿ9W§ú_Eÿ†¯_9ÿGf¥þ§úÿÊÏXVÿ©ººêÓÔÿ=ü·‰ú‚Mëºÿ©}úëŠùB,ë_®ÿ÷2ÿþ_uîh ŒEÿ®óÈ–@ÿOl,úw™ÿ0÷ÿrÿ'ù±±èßsþCÆÿ+ð·ØXôï:ÿû	ôÿÆÆTÿóœÿÀý¿úccÑ¿Kÿï<ÿýK û'6…öÿRý¿ýð÷ÔÿGþŸ†œ§%Àÿ‹þ]úçùÜÿIȉ
-`d¶ë¿ršÿОü_øÿ4XÖßuþù¯˜ÿ‹þ]ç? 	ø¿bcÑ1ÿ×Kÿ÷ìÿBÿ>íŽ;q±èßuþù¯ØÿccÑ¿çü‡žû	ø¿bcªÿ9Ψéÿ€ÿ+6ý{ÎèÑ¿ü_±)´ÿœÿÐâÿBþkl,ú/çÿº|ÿϹ£ÿSïÿ±Ù®ÿÆÇÿ•Îþ¯ÿ—Ëú—óu¯ó¿xþK¸Jq€Æ¢Ïü/æiàþ76ý»äÍû?ùÈÿŠEÿ®ù_ø?%4(?4ý»æ‘ÿ!úolLõ?Ïü/üߪL ŒŒEÿåü_—ûÿ ò?$¤ùG¦Ðþ_Îÿ•Îþ/üŸ˜ÿ‹þËù¿.çåÜ¡	ãý?’Ëvý'§ü¯4Íìñ)°¬¿kþ÷¿ÈÿŠEÿ®ù_è_þ¯ØXô_Îÿõzÿoп„Ï?ŸŽ¿öãs›'A@,úwÍÿâþGûl,úwÍÿ¢þ+ÿWlLõ?Ïü/ú?%ÿ‹þ]ó¿Ð¿Ô›BûÁü¯tòÔø¿%ÿ‹þ]æ?Îù_Ôÿ%¤šÐȬÒÿÕbË׌
-_êÿj†¿ª«6Uø¿¬\ÿãááðãp÷{Õaùúw]“Fÿo]ç–õW°uýßow7×O÷_†/íîí/fùù^ÿÜ4¼ÿKh[Îÿ‘ÙªÿgïßÃnÿ}ww{}ó×ÏxWÿÕ³þóðg¼ÿK
-ïÿèþŽÍVýïojþ%ëõßäÿü?±1éÑéÕù?çêTÿ«¸ÿ×@ÿwlVêªÿ¯üŒeõŸª««>MýßÃÛPÿQ°iýO÷?µOÿo]Mó¨ÿJ°¬¹þßËüæ?¨¨sGp`,úwÿ€ÿ_ïÿ±±èßeþÃÜÿKþ»æ?ÄÆ¢×ùøÿ$þ‹þ]ç?pÿ/þߨ˜êžó¸ÿ—@ÿol,úwéÿeþƒºbShÿ/Óÿ[ωfÊOÔÿ$ä<-þŸ˜XôïÒÿËü)9QŒÌvýWNóÚÉÿ…ÿO‚eý]ç?0ÿWóbcÑ¿ëüô/ÿWl,ú/æÿzéÿžý_è_§ÝqÇ# .ý{Îè*ô¯€ý?6ý»Î ÿKþ¯Ø˜êžó¸ÿ•€ÿ+6ý»Î@ÿðŦÐþ_pþC{òÿªüרXô_ÎÿuùþÏü¼ÿÇf»þÿW:û¿Èÿ—`Yÿrþ¯îuþÏ	Wé#°ÀXôïšÿÅûŸîccÑ¿Kþ×¼ÿ“ÿ!ü¯ØXôïšÿ…ÿSBƒòCcÑ¿kþù¨ÿÆÆTÿsÌÿªñK¨>002ý—ó]îÿ}êÉÿ:ä™Bû9ÿW:û¿ðJ`þ_l,ú/çÿºœÿ•s‡þ%Œ÷ÿH>.ÛõŸœò¿ÒäÿJø¿XÖß5ÿ‹û_	äÅÆ¢×ü/ô/ÿWl,ú/çÿz½ÿ7è_ÂçŸOÇÇ_ûñ¹Í“  ý»æqÿ#ý?6ý»æQÿ•€ÿ+6¦úŸgþýŸÈÿŠEÿ®ù_è_êM¡ý¿`þWšü_ø¿%ÿ‹þ]æ?Îù_Ôÿ%¤šÐȬÑ»|äãŒ
-_êÿjênÐÕô=þ/+×ÿxx8ü8Üý^õCX¾þ]—šzôÿÕmfýl]ÿã·ÇÛÝÍõÓý—áK»{û‹Y~þﺺ×?75÷Nk‘8ÿGe«þŸ½»ý÷ÝÝíõýÍ_?ã]ýWÏúÏßñþ/1ÿWCFï¡ÙªÿýáñMÍ¿d½þÞÿE°ßÇÆ¤ÿE§ÿUçÿÜv§úÿ	‰þŒ_ÿØÎù?&+õ?ÕÿW~ƲúO5¼û÷iêÿNí8ÿ‡ú?›ÖÿtÿSûôÿÖÕ©ÿ·¦þ+Á²þåú/ó†Ÿõ?	uîh ŒEÿžó2ç	ôÿÄÆ¢—ùsþó_$0ÿ!6ý{Îhéÿ“@ø[l,ú÷œÿÀü
-ôÿÆÆTÿsœÿPqÿ/þߨXôïÒÿ{žÿÑ¿ºbShÿ/Õÿ;ìûSþ{BÿN·¯ÿOT,úwéÿ=ÏàþOCNT #³]ÿË›G…/ŸÿОü_øÿ4XÖßsþC"ÿIóbcÑ¿çü‡Œþ%àÿŠEÿÅü_/ýß³ÿýKø´;îxÄÅ¢Ïùmþ°ÿÇÆ¢ÏùÌÑ€ÿ+6¦úŸãü‡Dÿ‡ü_±±èßsþC‡þ%àÿŠM¡ý¿àü‡öäÿ ÿUÃi-È
-‹Eÿåü_—ïÿ9gú?%ðþ›íúo|ü_éìÿjð)°¬9ÿW÷:ÿ‹ç¿„«ôX`,úwÍÿâýO÷¿±±èß%ÿkÞÿÉÿ@þWl,úwÍÿÂÿ)¡Aù¡±èß5ÿ‹þ	Ôccªÿyæáÿ–P}èy Æ¢ÿrþ¯Ëý¿OùR‡ü#Shÿ/çÿJgÿþO	ã×Ïü¿¸Xô_Îÿu9ÿ+ ô¯`¼ÿGòqÙ®ÿä”ÿ•&ÿW…ÿKeý]ó¿¸ÿ•@þWl,úwÍÿBÿðÅÆ¢ÿrþ¯×ûþ%|þùt|üµŸÛ<	bÑ¿gþùïØÿccÑ¿kþõ_	ø¿bcªÿyæÑÿ)ü¯ØXôïšÿ…þ% þØÚÿæ¥iþ#þo	§µ ÿ+,ý»Ìœó¿¨ÿKH5	 ‘Y£ÿ¼|äãŒ
-_êÿjênÐÕVø¿$¬\ÿãááðãp÷{Õaùúw]›ÑÿWgæJغþÇo·»›ë§û/×v÷ö³üü?¯nîÿ$Œ'³q	8ÿÇd«þŸ½»ý÷ÝÝíõýÍ_?ã]ýWÏúÏßñþ/Õä?H ý36[õ¿?<¾©ù—¬×“;êðÿÄÆ¤ÿE§ÿUçÿÜö§þïŠþ
-S÷7çÿ¨¬ÔÿTÿ_ùËê?UWW}šú¿SKþ¿†Mëºÿ©}úëŠþ_!–õ/×ÿ{™ÿ0üðÿJ¨sGp`,úgþÿÞÿccÑ¿Ëü‡¹ÿÿ¯æ?ÄÆ¢æ?üû!ü-6ý3ÿáßý¿±1Õÿ˜ÿð¯‡þߨXôïÒÿ{žÿÑ¿ºbShÿ/Óÿ[ω4õÿVÜÿI¨ªá»®ðÿDÅ¢—þßyþ÷r¢™íú_Þ<*|ùü‡vòáÿ“`Yæ?üûaþCl,úgþÿü_±±è¿˜ÿë¥ÿ›ùR>íŽ;q±èŸùÿ~ØÿccÑ?óþýàÿŠ©þÇü‡=ø¿bcÑ?óþýàÿŠM¡ý¿àü‡SþS®9ÿK ÿ56ý—ó]¾ÿçœéÿ”Àûl¶ë¿ññ¥³ÿ«Åÿ¥À²þåü_Ýëü/žÿ®ÒG`±èß5ÿ‹÷?	ÜÿÆÆ¢—ü¯yÿ'ÿCù_±±èß5ÿÿ§„凯¢×ü/ò?$Pÿ©þç˜ÿ•ðK¨>ô< cÑ9ÿ×åþß§Žü	‰ ¡)´ÿ—ó¥³ÿÿ§æÿÅÆ¢ÿrþ¯Ëù_9gô/a¼ÿGòqÙ®ÿä”ÿ•&ÿWÂÿ¥À²þ®ù_ÜÿJ ÿ+6ý»æ¡	ø¿bcÑ9ÿ×ëý¿Fÿ>ÿ|:>þڏÏmž±èß5ÿ‹û	ìÿ±±èß5ÿ‹ú¯ü_±1Õÿ<ó¿èÿ”@þWl,úwÍÿBÿPl
-íÿó¿¦ù5þo	äÅÆ¢—ùsþõ	©&42«ôŸ[¾þ`TøRÿWSwƒþ«¶Êø¿¬\ÿãááðãp÷{Õaùúw]ÝçÑÿWwÌÿ”°uýßow7×O÷_†/íîí/fùù^ÿÜ´ÜÿI¨ª«+ÎÿqÙªÿgïßÃnÿ}ww{}ó×ÏxWÿÕ³þóðg¼ÿK
-÷hÿŒÍVýïojþ%ëõßäžú¿òŸbcÒÿ¢Óÿªú®ûSÿg•È“@ÿwlVêªÿ¯üŒeõŸª««ñÞÔÿðßVÔlZÿÓýOíÓÿ[WSÿ/õ_	–õ/×ÿ{™ÿ0þØÿÔ¹£80ý»Îàþ_ý?±±èßeþùÿ·Áÿ'ù±±èßsþý¿‹EÿžóèÿÕ@ÿolLõ?ÏùÜÿK ÿ76ý»ôÿÎóпºbShÿ/ÕÿÛ§¦žúÑ¿„ªÚíÆ%Àÿ‹þ]úçùÜÿIȉ
-`d¶ë¿ršÿОü_øÿ4XÖßsþÃp$äù/€ù±±èßsþC‡þ%àÿŠEÿÅü_/ýß³ÿýKø´;îxÄÅ¢×ùôJ`ÿEÿ®óèÿ’€ÿ+6¦úŸãüòŸ5àÿŠEÿžózô/ÿWl
-íÿç?´“ÿ‹ó¿ò_ccÑ9ÿ×åûÎýŸxÿÍvý7>þ¯tö%ü_
-,ë_ÎÿÕ½ÊÿªyþK¸Jq€Æ¢×ü/Þÿ$pÿ‹þ]ò¿æýŸü	äÅÆ¢×ü/üŸ˜ÿ‹þ]ó¿èÿ—@ý76¦úŸgþþo	Õ‡ž@`,ú/çÿºÜÿûÔ‘ÿ!!1 44…öÿrþ¯4ù¿Èÿ×Àü¿ØXô_Îÿu9ÿ+çýKïÿ‘|\¶ë?9å¥iþc‡ÿKeý]ó¿¸ÿ•@þWl,úwÍÿBÿðÅÆ¢ÿrþ¯×ûƒþ%|þùt|üµŸÛ<	bÑ¿kþ÷?ØÿccÑ¿gþùðÅÆTÿóÌÿ¢ÿSù_±±èß5ÿýK@ý±)´ÿÌÿJSþþo	äÅÆ¢—ùsþõ	©&42«ôß/¶|ýÁ¨ð¥þ¯¦îýWmÕãÿR°rý‡‡ÃÃÝïU?„åëßuM•Gÿ_Y	[×ÿøíñvwsýtÿeøÒîÞþb–ŸÿçõÏMÃù_B]OKÀù?&[õÿìý{Øí¿ïîn¯ïoþúïê¿zÖþŒ÷	ýk û;6[õ¿?<¾©ù—¬×“{ü?ØïccÒÿ¢ÓÿªóÎÕ©þWqÿ¯aêþæü••úŸêÿ+?cYý§êêªOSÿ÷ðßÖÔlZÿÓýOíÓÿ[WSÿ/õ?	–õ/×ÿ{™ÿÀüuîh ŒEÿžóÈÑ@ÿOl,úw™ÿ0÷ÿ’ÿ.ù±±èßuþþ?	„¿ÅÆ¢×ùÜÿK ÿ76¦úŸçüîÿ%Ðÿ‹þ]ú™ÿ …îŸØÚÿËôÿÖÃsâÔÿ“sbþ³„ÝnZü?1±èߥÿ—ùRr¢™íú¯œæ?´'ÿþ?
-–õwÿÀü_	̈Eÿ®óпü_±±è¿˜ÿë¥ÿ{ö¡	ŸvǏ€¸Xôï:ÿú¯öÿØXôï:ÿþ/	ø¿bcªÿyΠÿCþ¯ØXôï:ÿýKÀÿ›BûÁùíÉÿÑpþ—@þkl,ú/çÿº|ÿgþƒ
-Þÿc³]ÿÿ+ý_
-þ/–õ/çÿê^çñü—p•>â ŒEÿ®ù_¼ÿIàþ76ý»äÍû?ùÈÿŠEÿ®ù_ø?%4(?4ý»æ‘ÿ!úolLõ?Ïü/üߪL ŒŒEÿåü_—ûÿ ò?$¤ùG¦Ðþ_Îÿ•Îþ/üŸ˜ÿ‹þËù¿.çåÜ¡	ãý?’Ëvý'§ü¯4ù¿*ü_
-,ëïšÿÅý¯ò¿bcÑ¿kþú—€ÿ+6ý—ó½Þÿô/áóϧãã¯ýøÜæI‹þ=ó¿È×Àþ‹þ]ó¿¨ÿJÀÿSýÏ3ÿ‹þO	äÅÆ¢×ü/ô/õǦÐþ_0ÿ+ü5þo	äÅÆ¢—ùsþõ	©&42kô__-¶|ýÁ¨ð¥þ¯æ4ÿ¹j«ŒÿKÁÊõ??w¿Wý–¯×Uùäÿ«3ùo¶®ÿñÛãíîæúéþËð¥Ý½ýÅ,?ÿÏëŸò5ÌKðOJœÿ²UÿÏÞ¿‡Ýþûîîöúþ毟ñ®þ«gýçæ¤ÿ.5Ôÿ$ÿ›­úßßÔüKÖë¿É=ùOhþŠIÿ‹Nÿ«Îÿ¹6þáü_%êžÏÿs#8σP¬ÔÿTÿ_ùËê?UWW}šú¿‡ÿ–þO	›ÖÿtÿSûôÿÖÕ©ÿ·¡þ+Á²þåú/óÆŸû¿‚:w4 Æ¢Ïù™üW	ôÿÄÆ¢—ùsÿ/ý˜ÿ‹þ]ç?pÿ/úl,úwÿÀý¿úccªÿyÎàþ_ý¿±±èߥÿ÷<ÿ¡Cÿèþ‰M¡ý¿Tÿo_¥zêÿåý_¼ÿä<ýƒçA(,úwéÿ=ÏàþOCNT #³]ÿ•Óü‡–ùB,ëï:ÿüG	̈Eÿ®óпü_±±è¿˜ÿë¥ÿ{ö¡	ŸvǏ€¸Xôï9ÿ!Óÿ)ý?6ý{Îèèÿ’€ÿ+6¦úŸçüú?$àÿŠEÿ®óпü_±)´ÿœÿÐ2ÿAȼä¿ÆÄ¢ÿrþ¯Ë÷ÿœ;üŸxÿÍvý7>þ¯tö%ü_
-,ë_ÎÿÕ½ÊÿÂÿ¯á*}Ä‹þ]ó¿xÿ“Àýol,úwÉÿš÷ò?$ÿ‹þ]ó¿ðJ`þOl,úwÍÿ"ÿCõߨ˜êžù_ø¿%Tz ±è¿œÿërÿïSGþ‡„Ô!ÿÈÚÿËù¿Òäÿ"ÿ_üÌÿ‹‰Eÿåü_—ó¿rîп„ñþÉÇe»þ“SþWšæ?vø¿XÖß5ÿ‹û_	äÅÆ¢×ü/ô/ÿWl,ú/çÿz½ÿ7è_ÂçŸOÇÇ_ûñ¹Í“  ý»æqÿ#ý?6ý{æ‘ÿ¡ÿWlLõ?Ïü/ú?%ÿ‹þ]ó¿Ð¿Ô›BûÁü¯4åáÿ–0/ù_1±èßeþãœÿEý_BªI Ì*ý׋-_0*|©ÿ«©»AÿUÓ÷ø¿¬\ÿãááðãp÷{Õaùúw¹ïÇçÿh dýl]ÿã·ÇÛÝÍõÓý—áK»{û‹Y~þŸ×?7-ïÿžÏÿãó8¶êÿÙû÷°ÛßÝÝ^ßßüõ3ÞÕõýÆû¿Äû¿š?b³UÿûÃ㛚Ézý7™þo
-ä?ÅÆ¤ÿE§ÿuçÿ¶>õŽ– ô/àÅùê çyŠ•úŸêÿ+?cYý§êêªOSÿwjÇùßÔüÙ´þ§ûŸåÅà5õß|zþ×]MýW‚eýËõÿ^æ??êêÜÑ ‹þ]ç?àÿ—@ÿOl,úw™ÿ0çÿ.ù±±èßsþCKýO÷±±èßsþCæþ_ý¿±1Õÿç?TÜÿK ÿ76ý»ôÿžç?ÿ£îŸØÚÿËôÿÖÛ@:íÿmÏüg	óüSU9ÿày
-‹þ]úÏó¸ÿӐÀÈl×å4ÿ¡æ?àÿ“`YÏù‰ù¿˜ÿ‹þ=ç?dô/ÿWl,ú/æÿzéÿžý_è_§ÝqÇ# .ý{Îh©ÿJ`ÿEÿžó:ú¿$àÿŠ©þç8ÿ!Ñÿ!ÿWl,ú÷œÿС	ø¿bShÿ/8ÿ¡æ?pþ—0/ù¯1±è¿œÿëòý?çLÿ§Þÿc³]ÿÿ+ý_äÿK°¬9ÿW÷:ÿ‹ç¿„«ôX`,úwÍÿâýO÷¿±±èß%ÿkÞÿÉÿ@þWl,úwÍÿÂÿ)ù±±èß5ÿ‹ü	Ôccªÿyæáÿ–P}èy Æ¢ÿrþ¯Ëý¿OùR‡ü#Shÿ/çÿJgÿþO	ó0ÿ/&ý—ó]ÎÿÊà ý+ïÿ‘|\¶ë?9å1ÿQ‰eý]ó¿¸ÿ•@þWl,úwÍÿBÿðÅÆ¢ÿrþ¯×ûþ%|þùt|üµŸÛ<	bÑ¿gþùïØÿccÑ¿kþõ_	ø¿bcªÿyæÑÿ)ü¯ØXôïšÿ…þ% þØÚÿæMþDÿ‡„y	ÈÿЉEÿ.óçü/êÿRMhdÖèyâןŒ
-_êÿjênÐÕŒû?þ/Ö­ÿñðpøq¸û½î‡°|ý»Üÿ»ºþw¬¿‚ëüöx»»¹~ºÿ2|gwï|/ËÏÿóúçšüO
-/Îÿ#Wœb±QÿÏÖ¿‡ÝþûîîöúþæïŸñ®þ«ÿèø3ÞÿUä¿hà}?6õ¿?<¾­ù—¬×“+Þÿ%àÿ‰EÿËNÿëÎÿM?ö·}ƒÿGÂÅùÿëWž¡X§ÿ©ü¿ö3–Õª®®ú4õÏê?
-¶¬ÿéú§^þ3XSÿþ3ÖÿrnY†õ_Úþ»!ÿaø'þ	uîh ŒAÿKÛ·Ìh:ò%ðþƒþ—¶ÿ®›ÿ0õÿµ-ó_$0ÿ!6ý/mÿÝ2ÿþ?„¿ÅÆ ÿ¥í¿[æ?´=÷ÿèÿ¥þ·°ýwËü‡Žü
-ôÿÆÆ ÿ¥í¿[êUþ%à÷M™ýÿÍößUý¿]3úÿrÛrÿ'a^‚³ÿg·ãy
-ƒþ—¶ÿn9ÿ·Üÿiȉ
-`d6ë¿rò5íäÿÂÿ'Á°þý_¯òŸÛ†þO	̈Aÿ>þ¯)ÿ­éÑ¿ü_±1远ÿë¥ÿ{ö¡	ŸvGJ>1èßÇÿužÿÒ‘ÿ(ý?6ýûø¿Îó*î$àÿŠ¥þçâÿšò_Çk`ô/ ÿWlú÷ñç?Tè_þ¯Ø”ÙÿËù¿¦û_ü_*æ% ÿ5&ýô]¾ÿç¶§ÿSïÿ±Ù¬ÿà F…/Ïÿ:û¿jü_
-ë_ÐÿÕ½Îÿâù/á*}ăþ]ó¿zÞÿ$pÿƒþ}ò¿æýŸü	äÅÆ ßü/üŸ”ƒþ}ó¿Èÿ@ý76–úŸkþþo	Õ‡ž@`ú/èÿºÜÿûª'ÿCBêdÊìÿý_éìÿÂÿ)a^æÿÅÄ ÿ‚þ¯Ëù_¹íÑ¿„ñþÉÇe³þ“WþWuòµþ/†õ÷ÍÿâþWù_±1èß7ÿýKÀÿƒþú¿^ïÿ-ú—ðùçÓññ×~|pó$ˆAÿ¾ù_ÜÿH`ÿAÿ¾ù_Ô%àÿŠ¥þçšÿEÿ§ò¿bcпoþú—€úcSfÿ/™ÿ5ù?ú?$ÌK@þWLú÷™ÿ8çQÿ—j™5úOýrÏ×KF…/õ5u7è¿j«ÿ—‚•ë<<~î~¯ú!,_ÿ.÷¹ýuW±þ
-¶®ÿñÛãíîæúéþËð¥Ý½ýÅ,?ÿÏ럛†þO	/Îÿu=þƒÓ@(¶êÿÙü÷°ÛßÝÝ^ßßüõ3ÞÕõýÆû¿Äü
-4Äf«þ÷‡Ç75ÿ’õúo2ùߨïccÒÿ¢Óÿºó[ŸêÿÃ#úWðâüÿõ+çÿp¬Ôÿt°ò3–Õª®®ú4õ§¶¡ÿS¦õ?] Õ‹kê¿ùôü¯»†ú¯Ëú/m >Ýð­Ê~
-ÜÿK¨sGp`,ú_Ú ü¾þ_Íh3÷ÿèÿ‰EÿK€ßÕÿËùçþ?ò_50ÿ!6ý/m ^¿ÿ7]KýO÷±±èiðûú5ÿ!wÜÿK ÿ76¦úßÂà÷õÿjþCŸ¸ÿ—@ÿol,ú_Ú ¼¡þ—:ô/îŸØÚÿßl ¾ÈÿSWcôç¸ÿçÄüG	óüSU»Ýøž¡°èið†óæþOCNT #³]ÿ•ÿ«i'ÿþ?	–õ/çÿz•ÿ<Ú yþ`þCl,úwñMùom‡þ%àÿŠEÿÅü_/ýßçý¿Aÿ>íŽ;q±èßÅÿ5éxDÿ
-ØÿccÑ¿‹ÿë<ÿ¡£ÿKþ¯Ø˜êþ¯)ÿµOôHÀÿ‹þ]ü_çùú—€ÿ+6…öÿ2þ¯çûßœkÎÿæ% ÿ5&ý—ó]¾ÿçœéÿ”Àûl¶ë¿ññ¥³ÿ«Çÿ¥À²þåü_Ýëü/žÿ®ÒG`±èß5ÿ‹÷?	ÜÿÆÆ¢—ü¯óþ_“ÿ!ü¯ØXôï™ÿ•ñJhP~h,úwÍÿ"ÿCõߨ˜êžù_ø¿%Tz ±è¿œÿërÿç ¡©Cþ‘)´ÿ—ó¥³ÿÿ§„y	˜ÿ‹þËù¿.çåœÑ¿„ñþÉÇe»þ“Sþó•XÖß5ÿ‹û_	äÅÆ¢×ü/ô/ÿWl,ú/çÿz½ÿ7è_ÂçŸOÇÇ_ûñ¹Í“  ý»æqÿ#ý?6ý»æQÿ•€ÿ+6¦úŸgþýŸÈÿŠEÿ®ù_è_êM¡ý¿`þ×äÿ¨éÿ0/ù_1±èßeþã9ÿ‹û?
-©&42kôßô‹-_0*|©ÿ«©»AÿU[eü_
-V®ÿñðpøq¸û½ê‡°|ý».¥<úÿêñþ‡õ÷gëú¿=Þîn®Ÿî¿_ÚÝÛ_Ìòóÿ¼þ¹i8ÿK˜àŸy-8
-„b«þŸ½»ý÷ÝÝíõýÍ_?ã]ýWÏúÏßñþ/5ôK þ›­úßßÔüKÖë¿É=þ	4ÅÆ¤ÿE§ÿUçÿܶãû®èÿÑ0-Àׯœÿc²RÿSýåg,«ÿT]]¹/ãýßðßVÔlZÿÓýOíÓÿ[Ÿû©ÿJ°¬¹þßËüæ?¨¨sGp`,úwÿ€ÿ_ý?±±èßeþÃÜÿKþ»æ?ÄÆ¢×ùÔÿ$PÿEÿ®ó¸ÿ—@ÿolLõ?ÏùÜÿK ÿ76ý»ôÿ2ÿA
-Ý?±)´ÿ—éÿ­‡7vêÿãþOô »þŸ˜XôïÒÿËü)9QŒÌvýWNóÚ“ÿÿŸËú»Î ÿSóbcÑ¿ëüô/ÿWl,ú/æÿzéÿžý_è_§ÝqÇ# .ý»ÎÈè_ûl,úwÿÀýü_±1Õÿç?ÔôHÀÿ‹þ=ç?ôè_þ¯ØÚÿÎh§ùœÿ%Ì€ÿ+&ý—ó]¾ÿ3ÿAïÿ±Ù®ÿÆÇÿ•Îþ¯„ÿKeýËù¿ºWù_äj¸Jq€Æ¢×ü/Þÿ$pÿ‹þ]ò¿æýŸü	äÅÆ¢×ü/üŸ”‹þ]ó¿Èÿ@ý76¦úŸgþþo	Õ‡ž@`,ú/çÿºÜÿûÔ‘ÿ!!uÈ?2…öÿrþ¯4ù¿Èÿ×0- óÿ¢bÑ9ÿ×åü¯œ;ô/a¼ÿGòqÙ®ÿä”ÿ•¦ùþ/–õwÍÿâþWù_±±èß5ÿýKÀÿ‹þËù¿^ïÿ
-ú—ðùçÓññ×~|nó$ˆEÿ®ù_ÜÿH`ÿEÿžù_ähÀÿSýÏ3ÿ‹þO	äÅÆ¢×ü/ô/õǦÐþ_0ÿ+Mù_ø¿%Ì€ÿ+&ý»Ìœó¿¨ÿKH5	 ‘Y¥ÿ¼Øòõ£Â—ú¿šºô_µUƒÿKÁÊõ??w¿Wý–¯×¥j|þ×ufý%l]ÿã·ÇÛÝÍõÓý—áK»{û‹Y~þŸ×?7
-ïÿ¦¸ºâü“­úöþ=ìößww·×÷7ýŒwõ_=ë?Æû¿„þ5Pÿ‹ÍVýïojþ%ëõßäžü'	øbcÒÿ¢ÓÿªónÛñý?ÿCô¯`Z ú¿£²RÿSýåg,«ÿT]]õiêÿN-ýŸ6­ÿéþ§öéÿ­«©ÿ—úŸËú—ëÿ½Ì~
-ÜÿK¨sGp`,úwÿ@þ«ÞÿccÑ¿Ëü‡9ÿƒþ?	̈EÿžóZꋍEÿ®ó¸ÿ—@ÿolLõ?ÏùÜÿK ÿ76ý»ôÿÎóпºbShÿ/ÕÿÛWMGÿ¯iv;ü?1±èߥÿ÷<ÿû?
-9QŒÌvýWNóZæ?±¬¿ëüò%0ÿ!6ý»Î@ÿðÅÆ¢ÿbþ¯—þïyþú—ðiwÜñˆ‹Eÿ®óÈ“Àþ‹þ=ç?tÜÿHÀÿSýÏqþC¢ÿCþ¯ØXôï9ÿ¡CÿðŦÐþ_pþC‹ÿKÈ´ ä¿FÅ¢ÿrþ¯Ë÷ÿœ3ýŸxÿÍvý7>þ¯töõø¿XÖ¿œÿ«{ÿÅó_ÂUúˆ,0ý»æñþ'ûߨXôï’ÿuÞÿ™ÿ­ü¯ØXôï™ÿ•ñJhP~h,úwÍÿ"ÿCõߨ˜êžù_ø¿%Tz ±è¿œÿërÿç ¡©Cþ‘)´ÿ—ó¥³ÿÿ§„i˜ÿ‹þËù¿.çåœÑ¿„ñþÉÇe»þ“SþWšü_-þ/–õwÍÿâþWù_±±èß5ÿýKÀÿ‹þËù¿^ïÿ
-ú—ðùçÓññ×~|nó$ˆEÿ®ù_ÜÿH`ÿEÿ®ù_Ô%àÿŠ©þç™ÿEÿ§ò¿bcÑ¿kþú—€úcShÿ/˜ÿ•&ÿþo	Ӑÿ‹þ]æ?žó¿¸ÿӐj@#³FÿõrË׌
-_êÿjêqþsÕôÌ”°rý‡‡ÃÃÝïU?„åëß徟ÿu=>ÿY¶®ÿñÛãíîæúéþËð¥Ý½ýÅ,?ÿÏ럛†÷	óü3®çÿplÕÿ³÷ïa·ÿ¾»»½¾¿ùëg¼«ÿê?úþŒ÷©æþ_ͱ٪ÿýáñMÍ¿d½þæ‰@ÿ±1éÑéÝù¿­OýŸã#ýxqþÿú•ó8Vêªÿ¯üŒeõŸª««1÷eÔjê?6­ÿéþ§öéÿ==ÿ뮦þ+Á²þåú/ó†Ÿù¯êÜÑ ‹þ=ç?´Ôÿ%Ðÿ‹þ]æ?ÿ!…ù±±èßsþCKýOõÿØXôï9ÿþ
-ôÿÆÆTÿsœÿPqÿ/þߨXôïÒÿ{žÿÀüW
-tÿĦÐþ_¦ÿ·Þ†ìÿÃÿ£a^‚ªj·ÿÁó ý»ôÿžç?pÿ§!'*€‘Ù®ÿÊiþC;ÍÀÿ'Á²þžó˜ÿ©ù±±èßsþCFÿðÅÆ¢ÿbþ¯—þïÙÿ…þ%|Úw<âbÑ¿çü‡–üw	ìÿ±±èßuþý_ðÅÆTÿóœÿ@ÿ‡ü_±±èßuþú—€ÿ+6…öÿ‚óÚiþç	óÿ‹þËù¿.ßÿóð @ÿ
-xÿÍvý7>þ¯töÕø¿XÖ¿œÿ«{ÿÅó_ÂUúˆ,0ý{æeÞÿ$pÿ‹þ]ò¿æýŸü	äÅÆ¢×ü/üŸ”‹þ]ó¿Èÿ@ý76¦úŸgþþo	Õ‡ž@`,ú/çÿºÜÿû”Éÿ:ä™Bû9ÿW:û¿ðJ˜—€ù1±è¿œÿërþ×ðúþ%Œ÷ÿH>.ÛõŸœò¿˜ÿ¨Ä²þ®ù_ÜÿJ ÿ+6ý»æ¡	ø¿bcÑ9ÿ×ëý¿Fÿ>ÿ|:>þڏÏmž±èß5ÿ‹û	ìÿ±±èß5ÿ‹ú¯ü_±1Õÿ<ó¿èÿ”@þWl,úwÍÿBÿPl
-íÿó¿&ÿG¢ÿC¼äÅÄ¢—ùsþõ	©&42kôŸÚÅ–¯?¾ÔÿÕÔÝ ÿªþŸð	X¹þÇÃÃáÇáî÷ªÂòõïr?Íÿ¬Çþ_Öߟ­ëüöx»»¹~ºÿ2|iwo1ËÏÿóúç¦!ÿA‹óÿxHãüŒ­úöþ=ìößww·×÷7ýŒwõ_ýGÿßñþ/ÕôKàþ?6[õ¿?<¾©ù—¬×“;ü?ÈŠIÿ‹NÿëÎÿm5¾ÿç1ýøãü?v€ó<ÅJýOõÿ•Ÿ±¬þSuuÕ§©ÿ;µãû?õ6­ÿéþ§všÿÐOóèÿ•`Yÿrý¿—ùÌPQçŽàÀXôï:ÿÿ¿ê±±èßeþÃÜÿËýŸæ?ÄÆ¢×ùøÿ$þ‹þ]ç?pÿ/þߨ˜êžó¸ÿ—@ÿol,úwéÿeþƒºbShÿ/Óÿ[ÿì¦ùø4ÌKpòÿäŒÿ'ý»ôÿ2ÿAJNT #³]ÿ•Óü‡vòáÿ“`Y×ùä¿H`þCl,úwÿ€þ%àÿŠEÿÅü_/ýß³ÿýKø´;îxÄÅ¢Ïù™ú¯öÿØXôï:ÿþ/	ø¿bcªÿyΠÿCþ¯ØXôï:ÿýKÀÿ›BûÁù“ÿ«æü/a^ò_cbÑ9ÿ×åû?óTðþ›íúoœò¿Îþ¯ÿ—Ëú—óu¯ó¿xþK¸Jq€Æ¢×ü/Þÿ$pÿ‹þ]ò¿æýŸü	äÅÆ¢×ü/üŸ˜ÿ‹þ]ó¿Èÿ@ý76¦úŸcþùª=€ÀXô_Îÿu¹ÿ÷©#ÿCBêd
-íÿåü_éìÿÂÿ)a^æÿÅÄ¢ÿrþ¯Ëù_9gô/a¼ÿGòqÙ®ÿä”ÿUMþ¯
-ÿ—Ëú»æqÿ+ü¯ØXôïšÿ…þ%àÿŠEÿåü_¯÷ÿýKøüóéøøk?>·yÄ¢×ü/î$°ÿÇÆ¢×ü/ê¿ðÅÆTÿóÌÿ¢ÿSù_±±èß5ÿýK@ý±)´ÿÌÿšü‰þ	óÿ‹þ]æ?Îù_Ôÿ%¤šÐȬÒÿÇÅ–¯?¾ÔÿÕÔÝ ÿª­2þ/+×ÿxx8ü8Üý^õCX¾þ]î»4úÿêqþëïÏÖõ?~{¼ÝÝ\?ݾ´»·¿˜åçÿyýsÓÒÿ)áÅùÿêjü§PlÕÿ³÷ïa·ÿ¾»»½¾¿ùëg¼«ÿê?úþŒ÷©áþOͱ٪ÿýáñMÍ¿d½þ›ÜSÿ—€ÿ'6&ý/:ý¯;ÿ·õ©þ_%ü^œÿÇîoÎÿÁX©ÿ©þ¿ò3–Õª®®Æ{ÿQÿÃKÿ§„Mëºÿ©}úësÿ/õ_	–õ/×ÿ{™ÿÐpÿ/¢Î
-À±èßuþ÷ÿxÿEÿ.óÎý¿
-÷˜ÿ‹þ=ç?Ðÿ«û¿ØXôï9ÿþ_
-ôÿÆÆTÿóœÿÀý¿úccÑ¿Kÿï<ÿýK û'6…öÿbý¿ýðï±ÿúŸ†y	þ©ªÝnüσPXôïÒÿ;ÏàþOBNT #³]ÿ•Óü‡öäÿÂÿ§Á²þžó†c Ï̈Eÿžó:ô/ÿWl,ú/æÿzéÿžý_è_§ÝqÇ# .ý»ÎÈè_ûl,úwÿ@ÿ—ü_±1Õÿç?ÔÜÿJÀÿ‹þ=ç?ôè_þ¯ØÚÿÎhOþšó¿„y	ȍ‰Eÿåü_—ïÿ9wôJàý?6Ûõßøø¿ÒÙÿ•ð)°¬9ÿW÷*ÿ«æù/á*}Ä‹þ]ó¿xÿ“Àýol,úwÉÿš÷ò?$ÿ‹þ]ó¿ðJhP~h,úwÍÿ"ÿCõߨ˜êžù_ø¿%Tz ±è¿œÿërÿïSGþ‡„Ô!ÿÈÚÿËù¿RKþ—y	˜ÿ‹þËù¿.çåÜ¡	ãý?’Ëvý'§ü/æ?*±¬¿kþ÷¿ÈÿŠEÿ®ù_è_þ¯ØXô_Îÿõzÿoп„Ï?ŸŽ¿öãs›'A@,úwÍÿâþGûl,ú÷Ìÿ"ÿCþ¯Ø˜êžù_ôJ ÿ+6ý»æ¡	¨?6…öÿ‚ù_“ÿ£¦ÿC¼äÅÄ¢—ùsþõ	©&42kôß\-¶|ýÁ¨ð¥þ¯¦îýWmÕáÿR°rý‡‡ÃÃÝïU?„åëßu©N£ÿ¯û
 ÿY¶®ÿñÛãíîæúéþËð¥Ý½ýÅ,?ÿÏëŸú?4œÏ_í?óZpÅVý?{ÿvûï»»Ûëû›¿~Æ»ú¯žõŸ‡?ãýßð2€þPÿ‹ÍVýïojþ%ëõßäžü	ä?ÅÆ¤ÿE§ÿUçÿܶãûÿŸÐ¿€i¾~åü“•úŸêÿ+?cYý§êêªOSÿ÷ðß’ÿ/aÓúŸîjŸþßúÜÿKýW‚eýËõÿ^æ?4™ùŸêÜÑ ‹þ™ÿðï‡þŸØXôï2ÿaîÿÅÿ+ù±±èŸùÿ~‹EÿÌø÷CÿolLõ?æ?üë¡ÿ76ý»ôÿÎóпºbShÿ/Óÿ[o¹9õÿ±ÿk8ß¿fü?1±èߥÿ÷<ÿû?
-9QŒÌvýWNóÚ“ÿÿŸËú3ÿáßóbcÑ?óþýàÿŠEÿÅü_/ýß̐òiwÜñˆ‹EÿÌø÷Ãþ‹þ™ÿðïÿWlLõ?æ?üëÁÿ‹þ™ÿðïÿWl
-íÿç?´'ÿù¯Îç/ò_ƒbÑ9ÿ×åûÎýŸxÿÍvý7>þ¯tö‘ÿ/Á²þåü_Ýëü/žÿ®ÒG`±èß3ÿ«ãýO÷¿±±èß%ÿkÞÿÉÿ@þWl,úwÍÿÂÿ)ù±±èß5ÿ‹þ	Ôccªÿyæáÿ–P}èy Æ¢ÿrþ¯Ëý?ùR‡ü#Shÿ/çÿJgÿþO	Ó0ÿ/*ý—ó]ÎÿʹCÿÆû$—íúONù_išÿØãÿR`Y×ü/î%ÿ‹þ]ó¿Ð¿ü_±±è¿œÿëõþß 	Ÿ>íÇç6O‚€XôïšÿÅýöÿØXôïšÿEýWþ¯Ø˜êžù_ôJ ÿ+6ý»æ¡	¨?6…öÿ‚ù_éäÿ¨ñK8Ÿ¿Èÿ
-ŠEÿ.óçü/êÿRMhdÖè¿«[¾þ`TøRÿW3lüU]µUƒÿKÁÊõ??w¿Wý–¯7¬ýÃÀú+غþÇo·»›ë§û/×v÷ö³üü?¯n˜ÿ¥¡m§%àü“­úöþ=ìößww·×÷7ýŒwõ_=ë?Æû¿Dÿ—º¿c³UÿûÃ㛚Ézý7™ú¿òŸbcÒÿ¢ÓÿªóÎÕ©þW%òŸ$|ýÊù?2+õ?ÕÿW~ƲúOÕÕUŸ¦þïÔ6õ›Öÿtÿ³¼¼¦þ›ëjêÿ¥þ+Á²þåú/ó†Ÿû¿„:w4 Æ¢Ïù™û	ôÿÄÆ¢—ùsþþ?	̈EÿžóZú%þ‹þ]ç?pÿ/þߨ˜êžó¸ÿ—@ÿol,úwéÿç? 	tÿĦÐþ_¦ÿ·žçþ?îÿ4ä<-þŸ˜XôïÒÿ{žÿÀýŸ†œ¨ Ff»þ+§ùíäÿÂÿ'Á²þ®ó*žÿ
-˜ÿ‹þ]ç? 	ø¿bcÑ1ÿ×Kÿ÷<ÿýKø´;îxÄÅ¢×ùä¿H`ÿEÿžó:î$àÿŠ©þç8ÿ!Ñÿ!ÿWl,ú÷œÿС	ø¿bShÿ/8ÿ¡æ?pþ—@þkl,ú/çÿº|ÿÏ™ù¯xÿÍvý7>þ¯töõø¿XÖ¿œÿ«{ÿÅó_ÂUúˆ,0ý»æñþ'ûߨXôï’ÿuÞÿkò?$ÿ‹þ=ó¿2þO	ÌÿˆEÿ®ù_äH þSýÏ3ÿÿ·„ê #cÑ9ÿ×åþ?ÎBÿ
-R‡ü#Shÿ/çÿJgÿþO	Ìÿ‹Eÿåü_—ó¿rÎè_Âxÿäã²]ÿÉ)ÿ+Mþ¯ÿ—Ëú»æqÿ+ü¯ØXôïšÿ…þ%àÿŠEÿåü_¯÷ÿýKøüóéøøk?>·yÄ¢×ü/î$°ÿÇÆ¢×ü/ê¿ðÅÆTÿóÌÿ¢ÿSù_±±èß5ÿýK@ý±)´ÿÌÿJ“ÿÿ·ò¿bcÑ¿ËüÇsþ÷RMhdVéùÈÇ?¾ÔÿÕÔÝ ÿª­þ/+×ÿxx8ü8Üý^õCX¾þ]פ<úÿê\³þ
-¶®ÿñÛãíîæúéþËð¥Ý½ýÅ,?ÿÏëŸæiH‰ód¶êÿÙû÷°ÛßÝÝ^ßßüõ3ÞÕõ¬ÿ<üïÿRMýOÝß±ÙªÿýáñMÍ¿d½þ›Ü³ÿK ù+6&ý/:ý¯:ÿç\êù/èÿŽÍJýOõÿ•Ÿ±¬þSuu5澌ýß©¥ÿSæõ?ÝÿÔ>ý¿u5õÿRÿ•`Yÿrý¿—ùÃOý_B;€cÑ¿ëüò_%Ðÿ‹þ]æ?ÌùôÿI`þCl,ú÷œÿÐ2ÿIõÿØXôï9ÿù¿èÿ©þç9ÿû	ôÿÆÆ¢—þßyþú—@÷Ol
-íÿ¥úûÔæ©ÿ—úŸ„œ§%Àÿ‹þ]úçùÜÿIȉ
-`d¶ëy3ð¨ðåóZæ?±¬¿çü‡Dþ£æ?ÄÆ¢ÏùÌÿÒ€ÿ+6ýó½ôÏþ/ô/áÓî¸ã‹þ]ç?ÿ&ý?6ý»Î ÿKþ¯Ø˜êžó¸ÿ•€ÿ+6ý»Î@ÿðŦÐþ_pþCËü!ä¿ÆÆ¢ÿrþ¯Ë÷ÿ<€þðþ›íúo|ü_éìÿÊø¿XÖ¿œÿ«{ÿÅó_ÂUúˆ,0ý»æñþ'ûߨXôï’ÿ5ïÿäH ÿ+6ý»æáÿ”РüÐXôï™ÿEþ‡꿱1Õÿ<ó¿ðK¨>002ý—ó]îÿ}êÈÿ:ä™Bû9ÿWjÉÿÂü¿ØXô_Îÿu9ÿ+çŒþ%Œ÷ÿH>.ÛõŸœò¿Òäÿªñ)°¬¿kþ÷¿ÈÿŠEÿ®ù_è_þ¯ØXô_Îÿõzÿ¯Ñ¿„Ï?ŸŽ¿öãs›'A@,úwÍÿâþGûl,úwÍÿ¢þ+ÿWlLõ?Ïü/ú?%ÿ‹þ]ó¿Ð¿Ô›BûÁü¯4ù¿ðK ÿ+6ý»Ìœó¿¨ÿKH5	 ‘Y£ÿº]lùúƒQáKý_MÝ
-ú¯Ú*áÿR°rý‡‡ÃÃÝïU?„åëßuU׿®‡ÿë/`ëú¿=Þîn®Ÿî¿_ÚÝÛ_Ìòóÿ¼þ¹aþ—†y	þ™_8
-„b«þŸ½»ý÷ÝÝíõýÍ_?ã]ýWÏúÏßñþ/áÿÑ@þKl¶êx|Só/Y¯ÿ&÷ä¿H`¿Iÿ‹Nÿ«Îÿ¹mšñü_‘ÿ¢áùü?7‚ó<ÅJýOõÿ•Ÿ±¬þSuu5Îýû¿SÛ´ÔlZÿÓýOíÓÿ[WSÿ/õ_	–õ/×ÿ{™ÿ0üÈ—PçŽàÀXôï:ÿþ	ôÿÄÆ¢—ùsÿ/ý?˜ÿ‹þ]ç?àÿ—@ø[l,ú÷œÿ€ÿWý¿±1Õÿ<ç?pÿ/þߨXôïÒÿ;Ï@ÿèþ‰M¡ý¿XÿoßçSÿ_CýO¼ÿä<ýƒçA(,úwéÿç?pÿ'!'*€‘Ù®ÿÊiþC;ù¿ðÿI°¬¿ëüú?%0ÿ!6ý»Î@ÿðÅÆ¢ÿbþ¯—þïÙÿ…þ%|Úw<âbÑ¿ëüú?%°ÿÇÆ¢×ùôIÀÿSýÏsþ÷¿ðÅÆ¢×ùè_þ¯ØÚÿÎh§ùœÿ%ÌK@þkL,ú/çÿº|ÿÏè_ïÿ±Ù®ÿÆÇÿ•Îþ¯ŒÿKeýËù¿º×ù_<ÿ%\¥8ÀcÑ¿kþï¸ÿEÿ.ù_óþ
 Oþ‡ò¿bcÑ¿kþþO	Ìÿ‰Eÿžù_äh þSýÏ3ÿÿ·„êCÏ 0ý—ó]îÿ}êÈÿ:ä™Bû9ÿW:û¿ðJ˜—€ù1±è¿œÿërþWÎýKïÿ‘|\¶ë?9å1ÿQ‰eý]ó¿¸ÿ•@þWl,úwÍÿBÿðÅÆ¢ÿrþ¯×ûþ%|þùt|üµŸÛ<	bÑ¿kþ÷?ØÿccÑ¿kþõ_	ø¿bcªÿyæÑÿ)ü¯ØXôïšÿ…þ% þØÚÿæMþšþ	óÿ‹þ]æ?Îù_Ôÿ%¤šÐȬÑÓ-¶|ýÁ¨ð¥þ¯¦îýWmÅüG	+×ÿxx8ü8Üý^õCX¾þ]7üßÑÿW·=ë¯`ëú¿=Þîn®Ÿî¿_ÚÝÛ_Ìòóÿ¼þ¹©yÿ—0- at JÿÌkÁi [õÿìý{Øí¿ïîn¯ïoþúïê¿zÖþŒ÷©áþ_õ¿ØlÕÿþðø¦æ_²^ÿMîÉ”@óWlLú_tú_uþÏm;¾ÿçŠú¿†i¾~åü“•úŸêÿ+?cYý§êêjœû5Þÿ¥¶¡þ#aÓúŸîjŸþßúÜÿKýW‚eýËõÿ^æ?ŒGöuîh ŒEÿ®ó¨ÿK ÿ'6ý»Ì ÿW
-óbcÑ¿çü‡LýOõÿØXôï:ÿû	ôÿÆÆTÿóœÿÀý¿úccÑ¿Kÿï<ÿýK û'6…öÿRý¿}Õ¦©ÿ—ó¿„óýkÆÿ‹þ]úçùÜÿIȉ
-`d¶ë¿ršÿÐNþ/ü,ëï9ÿ¡fþ§æ?ÄÆ¢Ïùú—€ÿ+6ýó½ôŸ÷ÿýKø´;îxÄÅ¢×ùä¿K`ÿEÿ®óèÿ’€ÿ+6¦úŸçüú?$àÿŠEÿ®óпü_±)´ÿœÿÐNþ/Îÿ¦ ÿ5*ý—ó]¾ÿçÜÑÿ)÷ÿØl×ããÿJ“ÿ«­ð)°¬9ÿW÷*ÿ‹üO
-Wé#°ÀXôïšÿÅûŸîccÑ¿Kþ×¼ÿÓÿ'ü¯ØXôïšÿ…ÿSBƒòCcÑ¿kþù¨ÿÆÆTÿóÌÿÂÿ-¡úÐó ŒEÿåü_—ûŸ:ò?$¤ùG¦Ðþ_Îÿ•Îþ/üŸ¦`þ_T,ú/çÿºœÿ•sFÿÆû$—íúONù_iÊÿÊø¿XÖß5ÿ‹û_	äÅÆ¢×ü/ô/ÿWl,ú/çÿz½ÿ7è_ÂçŸOÇÇ_ûñ¹Í“  ý»æqÿ#ý?6ý»æQÿ•€ÿ+6¦úŸcþýŸÈÿŠEÿžù_=ú—€úcShÿ/˜ÿužÿˆÿ[¹ KþWP,úw™ÿ8çQÿ—j@#³Jÿ[¾þ`TøRÿWSwƒþ«¶bþ£„•ë<<~î~¯ú!,_ÿ®K§õ¯ëŽü7	[×ÿøíñvwsýtÿeøÒîÞþb–ŸÿçõÏMCþ“„i®®8ÿÇd«þŸ½»ý÷ÝÝíõýÍ_?ã]ýWÏúÏßñþ/5ÜÿK þ›­úßßÔüKÖë¿É=û¿òŸbcÒÿ¢ÓÿªónÛÓùx ÓÐÿ••úŸêÿ+?cYý§êêªOSÿ÷ðßÖÔlZÿÓýOíÓÿ[WSÿ/õ_	–õ/×ÿ{™ÿÐäšüW	uîh ŒEÿžó˜ÿ¥þŸØXôï2ÿþ_)̈Eÿ®ó¨ÿI ü-6ý»Îàþ_ý¿±1Õÿ<ç?pÿ/þߨXôïÒÿ;Ï@ÿèþ‰M¡ý¿Tÿo_÷Äu¦þ'bZ€ÝÿOL,úwéÿ=ÏàþOCNT #³]ÿ•Óü‡öäÿÂÿ§Á²þ®óÈ‘Àü‡ØXôï:ÿýKÀÿ‹þ‹ù¿^ú¿gÿú—ðiwÜñˆ‹Eÿ®óÈ—Àþ‹þ=ç?ôôIÀÿSýÏsþ÷¿ðÅÆ¢×ùè_þ¯ØÚÿÎh'ÿç	Ӑÿ‹þËù¿.ßÿsîèÿ”Àûl¶ë¿ññ¥³ÿ«Áÿ¥À²þåü_Ýëü/žÿ®ÒG`±èß5ÿ‹÷?	ÜÿÆÆ¢—ü¯y
 ÿ'ÿCù_±±èß5ÿÿ§æÄÆ¢×ü/ò?$Pÿ©þç™ÿ…ÿ[Bõ¡ç‹þËù¿.÷ÿAþäHHòL¡ý¿œÿ+µä	™€ùQ±è¿œÿërþWÎú—0Þÿ#ù¸l×rÊÿJ“ÿ«Âÿ¥À²þ®ù_ÜÿJ ÿ+6ý»æ¡	ø¿bcÑ9ÿ×ëý¿Aÿ>ÿ|:>þڏÏmž±èß3ÿ‹üw
-ìÿ±±èß5ÿ‹ú¯ü_±1Õÿ<ó¿èÿ”@þWl,úwÍÿBÿPl
-íÿó¿ÒÉÿQãÿ–0- ù_Q±èßeþãœÿEý_BªI Ìý/w|ýɨð¥þ¯¦îýWMjñ)X·þÇÃÃáÇáî÷ºÂòõﺔ›Ñÿ—Æç?ëïÏÆõ?~{¼ÝÝ\?ݾ³»w¾—åçÿyýsÝòþ/a^‚æ•à4Šú¶þ=ìößww·×÷7ÿŒwõ_=ë?Æû¿ªåþOïû±Ù¨ÿýáñmÍ¿d½þ›\±ÿK@ÿ±±èÙéÕù?7ýØÿÝö
-þ?	çÿ¯_y„bþ§òÿÚÏXVÿ©ººêÓÔÿš¶§þ£`ËúŸ®êå?ƒ5õßá?cý/çšõW`Xÿ¥í¿òš¶&ÿQB;€cÐÿÒöß-óîÿ5Ðÿƒþ—¶ÿ®›ÿ0õÿµ
-þ?	̈AÿKÛ·ÌÈôÿjà¾?6ý/mÿÝ2ÿ¡¥ÿWý¿±±Ôÿ¶ÿn™ÿÐÑÿ«þߨô¿´ýwKý¯¢ÿWÝ?±)³ÿ¿Ùþ»ÜÿSÿlêqÿo™ÿ¤a^‚³ÿg·ãy
-ƒþ—¶ÿn9ÿ“ÿ+"'*€‘Ù¬ÿÊÉÿÕ´'ÿþ?
-†õ/èÿz•ÿÜ6‰ç¿æ?ÄÆ ÿ×”ÿÖôè_þ¯Øô_ÎÿõÒÿ}Þÿ[ô/áÓîHÉ'0ýûø¿Îó_ºý+`ÿAÿ>þ¯iþCÛÓÿ%ÿWl,õ?ÿ×”ÿÚ‘ÿ¬ÿWlú÷ñMõ¿ªGÿðŦÌþ_Èÿõ|ÿ›Û†ó¿„y	ȍ‰Aÿý_—ïÿ¹íéÿ”Àûl6ë¿ñÊÿšü_Ãÿÿ— Ãúôu¯ò¿ÈÿÔp•>â ŒAÿ¾ù_¼ÿIàþ76ýûäÍû?ùÈÿŠAÿ¾ù_ø?%4(?4ýûæ‘ÿ!úol,õ?×ü/üߪ=€Àô_Ðÿu¹ÿ÷UOþ‡„Ô!ÿÈ”Ùÿú¿ÒÙÿ…ÿS¼Ìÿ‹‰Aÿý_—ó¿rÛ¡	ãý?’Ëfý'¯ü¯jÊÿjñ)0¬¿oþ÷¿ÈÿŠAÿ¾ù_è_þ¯Øô_ÐÿõzÿoÑ¿„Ï?ŸŽ¿öホ'A@ú÷ÍÿâþGûlú÷Íÿ¢þ+ÿWl,õ?Ïü/ú?5ÿƒþ=ó¿R…þ% þØ”ÙÿKæMþ†þ	óÿƒþ}æ?Îù_Ôÿ%¤šÐȬÑÝ-÷|½dTøRÿWSwƒþ«¶jð)X¹þÇÃÃáÇáî÷ªÂòõïºê´þuY	[×ÿøíñvwsýtÿeøÒîÞþb–ŸÿçõÏ
-ó?5<ŸÿÛvú§PlÕÿ³ùïa·ÿ¾»»½¾¿ùëg¼«ÿêYÿyø3Þÿ%ô¯ü—ØlÕÿþðø¦æ_²^ÿMæý_þŸØ˜ô¿èô¿êü*üçÿ*Qÿ—ð|þÿú•ó@Vêº XùËê?UWW}šú¿Óiþõ6­ÿé¨^ü3XSÿÍõ©ÿ·k¨ÿI°¬ÿÒàÓ
-ߪü‡á§€ÿ_B;€cÑÿÒà÷õÿjþC›É”Àûl,ú_Ú ü®þ_Î8÷ÿÕÌ‘Àü‡ØXô¿´xýþßt-ýðûÆÆ¢ÿ¥
-ÀïëÿÕü濈 ÿ76¦úßÂà÷õÿjþCŸ¸ÿ—@ÿol,ú_Ú ¼¡þ—:ô/îŸØÚÿßl ¾ÈÿSo§ûßœ+êÿæ%øgøÊOð<…EÿK€7œÿ3÷r¢™íú¯|ü_M;ù¿ðÿI°¬9ÿ׫üçÑÈó_ óbcÑ¿‹ÿkÊk;ô/ÿWl,ú/æÿzéÿ>ïÿä¿jø´;îxÄÅ¢ÿפÿ.Óÿ)ý?6ý»ø¿¦ù
 ́ÿ+6¦úŸ‡ÿkÊíýðÅÆ¢ÿ×yþC‡þ%àÿŠM¡ý¿Œÿëùþ7çšó¿„y	ȍ‰Eÿåü_—ïÿ9gú?%ðþ›íúo|ü_éìÿêñ)°¬9ÿW÷:ÿ‹ç¿„«ôX`,úwÍÿâýO÷¿±±èß%ÿë¼ÿ×äH ÿ+6ý{æeüŸ˜ÿ‹þ]ó¿Èÿ@ý76¦úŸgþþo	Õ‡ž@`,ú/çÿºÜÿÇ9@è_Aêd
-íÿåü_éìÿÂÿ)a^æÿÅÄ¢ÿrþ¯Ëù_9gô/a¼ÿGòqÙ®ÿä”ÿ•&ÿW‹ÿKeý]ó¿¸ÿ•@þWl,úwÍÿBÿðÅÆ¢ÿrþ¯×ûƒþ%|þùt|üµŸÛ<	bÑ¿kþ÷?ØÿccÑ¿kþõ_	ø¿bcªÿyæÑÿ)ü¯ØXôïšÿ…þ% þØÚÿæ¥Éÿ…ÿ[¼äÅÄ¢—ùçü/îÿ4¤šÐȬѳÜòõ£Â—ú¿šºô_5=ù_V®ÿñðpøq¸û½ê‡°|ý»n8(Žþ¿:'Ö_ÁÖõ?~{¼ÝÝ\?ݾ´»·¿˜åçÿyýsSóþ/áùüuÅù? [õÿìý{Øí¿ïîn¯ïoþúïê¿zÖþŒ÷‰üo
-ä¿Äf«þ÷‡Ç75ÿ’õúo¸ÿþccÒÿ¢Óÿªón›f<ÿ/Œè_ÁóùŸþÔÿTÿ_ùËê?UWWcîËØÿÚ¦¦þ£`ÓúŸîjŸþߺ:õÿÖÔ%XÖ¿\ÿïeþÃðSàþOB;€cÑ¿ëüòŸ%Ðÿ‹þ]æ?Ìùä?K`þCl,ú÷œÿÐâÿ•@ø[l,ú÷œÿÀü7
-ôÿÆÆTÿsœÿPqÿ/þߨXôïÒÿ{žÿ@þ³ºbShÿ/ÕÿÛïþ§þ¿Äù_¼ÿìvÓ?x„¢—þßyþ÷r¢™íú¯œæ?´Óüü,ëï9ÿ!‘ÿ*ù±±èßsþùÏðÅÆ¢ÿbþ¯—þïÙÿ…þ%|Úw<âbÑ¿çü‡–þO	ìÿ±±èßuþý_ðÅÆTÿóœÿ@ÿ‡ü_±±èßuþú—€ÿ+6…öÿ‚óÚiþç	óÿ‹þËù¿.ßÿsÎôJàý?6Ûõßøø¿ÒÙÿÕàÿR`Yÿrþ¯îuþÏ	Wé#°ÀXôïšÿÅûŸîccÑ¿Kþ×¼ÿÓÿ'ü¯ØXôïšÿ…ÿSó?bcÑ¿kþù¨ÿÆÆTÿóÌÿÂÿ-¡úÐó ŒEÿåü_—ûŸ:ò?$¤ùG¦Ðþ_Îÿ•Îþ/üŸæ%`þ_L,ú/çÿºœÿ•‡ úW0Þÿ#ù¸l×rÊÿJ“ÿ«Âÿ¥À²þ®ù_ÜÿJ ÿ+6ý»æ¡	ø¿bcÑ9ÿ×ëý¿Fÿ>ÿ|:>þڏÏmž±èß3ÿ‹üw
-ìÿ±±èß5ÿ‹ú¯ü_±1Õÿ<ó¿èÿ”@þWl,úwÍÿBÿPl
-íÿó¿Ò4ÿÿ·„y	ÈÿЉEÿ.óçü/êÿRMhdÖè¿]ùõ£Â—ú¿šºô_µó%¬\ÿãááðãp÷{Õaùúw]òèÿ«3ë/aëú¿=Þîn®Ÿî¿_ÚÝÛ_Ìòóÿ¼þ¹i¸ÿ“0~ýãÑÿŸy-8
-„b«þŸ½»ý÷ÝÝíõýÍ_?ã]ýWÏúÏßñþ/¡
-½‡f«þ÷‡Ç75ÿ’õúorOþ£ü?±1éÑéÕù?·Ý©þ_qÿ¯aüúÇÖoÎÿ1Y©ÿ©þ¿ò3–Õª®®ú4õ§¶ÉÔlZÿÓýOíÓÿ[WSÿ/õ?	–õ/×ÿ{™ÿÐŒ10ìÿêÜÑ ‹þ]ç?pþ—Àûl,úw™ÿ@ÿ¯æ?ÄÆ¢×ùä¿K ü-6ý{Î ÿYý¿±1Õÿç?$îÿ%Ðÿ‹þ]úçùè_Ý?±)´ÿ—êÿí«nêÿÃÿ«aüúw;ü?Q±èߥÿwžÿÀýŸ„œ¨ Ff»þ+§ùíäÿÂÿ'Á²þ®óÈ‘Àü‡ØXôï:ÿýKÀÿ‹þ‹ù¿^ú¿gÿú—ðiwÜñˆ‹Eÿ®óÈ—Àþ‹þ]ç?Ðÿ%ÿWlLõ?ÏùôHÀÿ‹þ]ç? 	ø¿bShÿ/8ÿ¡=ù?jÎÿƯŸü׸Xô_ÎÿuùþŸs¦ÿSïÿ±Ù®ÿåà F…/ö¥³ÿ«Ãÿ¥À²þåü_Ýëü/žÿ®ÒG`±èß5ÿ‹÷?	ÜÿÆÆ¢—ü¯óþ_Óÿ'ü¯ØXôïšÿ…ÿSBƒòCcÑ¿kþù¨ÿÆÆTÿóÌÿÂÿ-¡úÐó ŒEÿåü_—ûŸ:ò?$¤ùG¦Ðþ_Îÿ•Îþ/üŸƯŸùq±è¿œÿërþW@ÿ
-Æû$—íúONù_iò5ø¿XÖß3ÿ‹û_
-äÅÆ¢Ïü/æ¿hÀÿ‹þËù¿^ïÿä¿køüóéøøk?>·yÄ¢×ü/î$°ÿÇÆ¢×ü/ê¿ðÅÆTÿóÌÿ¢ÿSù_±±èß5ÿýK@ý±)´ÿÌÿJ“ÿÿ·„ñë'ÿ+.ý»Ì<çqÿ§!Õ$€Ff•þ;¾þdTøRÿWSwƒþ«fœÿ‡ÿËŸuë<<~î~¯û!,_ÿ.w]ý©gý%l\ÿã·ÇÛÝÍõÓý—á;»{ç{Y~þŸ×?×ø¿5ÌKp>ÿ'îc±QÿÏÖ¿‡ÝþûîîöúþæïŸñ®þ«ÿèø3ÞÿU-ú—Àû~l6êx|[ó/Y¯ÿ±€þÐü‹þ—þםÿ›~ìÿnûÿŸ„‹óÿׯ<B±NÿSùíg,«ÿT]]õiêÿž5õ[ÖÿtýS/ÿ¬©ÿÿë§þÖßÃú/mÿݐÿ0ü“üG	uîh ŒAÿKÛ·Ìhzîÿ%PAÿKÛ×͘úÿÚÿŸæ?ÄÆ ÿ¥í¿[æ?dò_5PÿAÿKÛ·Ìh{îÿ%ÐÿKýoaûï–ù]Íý¿úccÐÿÒöß-õ¿ªGÿèþ‰M™ýÿÍößUý¿]sšÿ0>.п€y	ÎþŸœy„ ÿ¥í¿[Îÿ-÷r¢™Íú¯œü_§ý Áÿ¥À°þý_¯òŸÛ†óŸæ?ÄÆ ÿ×”ÿ6¶ ø¿bcÐ9ÿ×Kÿ÷ìÿBÿ>íŽ;q1èßÇÿužÿÒõè_ûlú÷ñç?TôIÀÿKýÏÅÿ5å¿v
-ýðÅÆ ÿ×yþC…þ%àÿŠM™ý¿œÿ+Ïþ/Îÿæ% ÿ5&ýô]¾ÿç¶§ÿSïÿ±Ù¬ÿÆ+ÿëìÿjð)0¬AÿW÷:ÿ‹ç¿„«ôX`ú÷ÍÿâýOï{±1èß'ÿkÞÿÉÿ@þWlú÷ÍÿÂÿ)¡Aù¡1èß7ÿ‹ü	Ôcc©ÿ¹æáÿ–P}èy Æ ÿ‚þ¯Ëý¿OùR‡ü#Sfÿ/èÿJgÿþO	ó0ÿ/&ýô]ÎÿÊmþ%Œ÷ÿH>.›õŸ¼ò¿ª“ÿ«íñ)0¬¿oþ÷¿ÈÿŠAÿ¾ù_è_þ¯Øô_ÐÿõzÿoÑ¿„Ï?ŸŽ¿öホ'A@úwÍÿ"ÿ]ûlú÷Íÿ¢þ+ÿWl,õ?×ü/ú?%ÿƒþ}ó¿Ð¿Ô›2ûÉü¯ÉÿÑÐÿ!
 a^ò¿bbпÏüÇ9ÿ‹ú¿„T“ ™5úOõrÏ×KF…/õ5u7è¿jÆþOü_þ¬\ÿãááðãp÷{Õaùúw¹?­ÿh dýl]ÿã·ÇÛÝÍõÓý—áK»{û‹Y~þŸ×?7äÿkøãüŸRUqÅVý?›ÿvûï»»Ûëû›¿~Æ»ú¯þ£ÿáÏxÿ—jò_$ð¾›­úßßÔüKÖë¿ÉïÿhþŠIÿ‹NÿëÎÿmu:ÿ‘Ðè_Àçÿ¯_9ÿc¥þ§€•Ÿ±¬þSuuÕ§©ÿ;µM¢þ£`ÓúŸ.€–ƒ×Ô‡ÿŒõ¿®¡þ'Á²þK€O7|«ò†Ÿþ	uîh ŒEÿK€ß×ÿ«ùmKþ£ê±±èið»ú9ÿáÜÿW3ÿEóbcÑÿÒàõûÓ‘ÿ¨úl,ú_Ú ü¾þ_ÍÈ™û	ôÿÆÆTÿ[Ø ü¾þ_Íè+îÿ%Ðÿ‹þ—6 o¨ÿ¥Œþ%Ðý›Bûÿ›
-À£Â—öÿvýiÿÏ5ýÿæ%8ùrÆÿ‹þ—6 o8ÿgîÿ4äD02Ûõ_ùø¿švòáÿ“`Yÿrþ¯WùÏ9qþ“Àü‡ØXôïâÿšòßÚŒþ%àÿŠEÿÅü_/ýß³ÿýKø´;îxÄÅ¢ÿפÿ®¥ÿSûl,úwñç?tôIÀÿSýÏÃÿ5å¿ö‰þ	ø¿bcÑ¿‹ÿë<ÿ¡CÿðŦÐþ_Ìÿ5Ýÿæ\sþ—0/ù¯1±è¿œÿëòý? ô¯€÷ÿØl×ã”ÿuöÕø¿XÖ¿œÿ«{ÿÅó_ÂUúˆ,0ý{æeÞÿ$pÿ‹þ]ò¿æýŸü	äÅÆ¢×ü/üŸ”‹þ]ó¿Èÿ@ý76¦úŸgþþo	Õ‡ž@`,ú/çÿºÜÿû”Éÿ:ä™Bû9ÿW:û¿ðJ˜—€ù1±è¿œÿërþ×ðúþ%Œ÷ÿH>.ÛõŸœò¿ª“ÿ«îð)°¬¿kþ÷¿ÈÿŠEÿ®ù_è_þ¯ØXô_Îÿõzÿ¯Ñ¿„Ï?ŸŽ¿öãs›'A@,úwÍÿâþGûl,úwÍÿ¢þ+ÿWlLõ?Ïü/ú?%ÿ‹þ]ó¿Ð¿Ô›BûÁü¯Éÿ‘èÿ0/ù_1±èßeþãœÿEý_BªI Ìý×ýbË׌
-_êÿjênÐՏü_V®ÿñðpøq¸û½ê‡°|ý»®jóèÿ«Çþ_Öߟ­ëüöx»»¹~ºÿ2|iwo1ËÏÿóúç¦!ÿAÂóùÿêjú§PlÕÿ³÷ïa·ÿ¾»»½¾¿ùëg¼«ÿêYÿyø3Þÿ¥†úŸò_b³UÿûÃ㛚Ézý7¹gÿ—€ÿ'6&ý/:ý¯:ÿçv8øçÿŠþ
-Ïçÿ±÷›ó8Vêªÿ¯üŒeõŸª««>Mýß©mzê?
-6­ÿéþ§öéÿ­§þ߆ú¯Ëú—ëÿ½Ììÿ
-êÜÑ ‹þ]ç?àÿ‘Àûl,úw™ÿ0÷ÿÒÿ'ù±±èßsþóŸ4þ‹þ=ç?Ðÿ£þߨ˜êŽó÷ÿèÿEÿ.ý¿çùú—@÷Ol
-íÿ¥úûªšúÿÈÿÓ0/Á?»Ýôž¡°èߥÿwžÿÀýŸ„œ¨ Ff»þ+§ùíäÿÂÿ'Á²þžó˜ÿ¥ù±±èßsþù¯ðÅÆ¢ÿbþ¯—þïóþß 	ŸvǏ€¸Xôï9ÿü7
-ìÿ±±èßuþý_ðÅÆTÿóœÿ@ÿ‡ü_±±èßuþú—€ÿ+6…öÿ‚óÚÉÿÅù_¼ä¿ÆÄ¢ÿrþ¯Ë÷ÿœ;ú?%ðþ›íúo|ü_iòµþ/–õ/çÿê^åÕ<ÿ%\¥8ÀcÑ¿kþï¸ÿEÿ.ù_óþOþ‡ò¿bcÑ¿kþþO	Ìÿ‰Eÿ®ù_äH þSýÏ3ÿÿ·„êCÏ 0ý—ó]îÿ}êÈÿ:ä™Bû9ÿW:û¿ðJ˜—€ù1±è¿œÿërþWÎýKïÿ‘|\¶ë?9å¥)ÿ+ãÿR`Y×ü/î%ÿ‹þ]ó¿Ð¿ü_±±è¿œÿëõþß 	Ÿ>íÇç6O‚€XôïšÿÅýöÿØXôïšÿEýWþ¯Ø˜êŽù_ôj ÿ+6ý{æõè_êM¡ý¿`þWbþ£y	ÈÿЉEÿ.óçü/êÿRMhdVé?/¶|ýÁ¨ð¥þ¯¦îýWíðJ€ÿKÀÊõ??w¿Wý–¯×UõÉÿW·øÿ$l]ÿã·ÇÛÝÍõÓý—áK»{û‹Y~þŸ×?75ýßžÏÿuÍù? [õÿìý{Øí¿ïîn¯ïoþúïê¿zÖþŒ÷©¡þ'ü—ØlÕÿþðø¦æ_²^ÿMîÉ’À~“þþWÿsÛ4ãù¿JÔÿ$<ŸÿéÿÉJýOõÿ•Ÿ±¬þSuuÕ§©ÿ;µôjØ´þ§ûŸÚ§ÿ·®¦þ_ê¿,ë_®ÿ÷2ÿ¡Éä¿i¨sGp`,úwÿ@ý_ý?±±èßeþÜÿAÿŸæ?ÄÆ¢Ïù-óŸ$þ‹þ]ç?pÿ/þߨ˜êžó¸ÿ—@ÿol,úwéÿç? 	tÿĦÐþ_¦ÿ·ÞR>õÿUäÿH˜—àŸÝnúσPXôïÒÿ;ÏàþOBNT #³]ÿ•Óü‡–ùB,ëï9ÿ!qþ“Àü‡ØXôï9ÿù_ðÅÆ¢ÿbþ¯—þïÙÿ…þ%|Úw<âbÑ¿ëüú?%°ÿÇÆ¢×ùôIÀÿSýÏqþC¢ÿCþ¯ØXôï9ÿ¡CÿðŦÐþ_pþCËü!óÿ‹þËù¿.ßÿsÎôJàý?6Ûõßøø¿ÒÙÿ
 ÕáÿR`Yÿrþ¯îuþÏ	Wé#°ÀXôïšÿÅûŸîccÑ¿Kþ×yÿgþ·ò¿bcÑ¿kþþO	Ìÿ‰Eÿ®ù_äH þSýÏ3ÿÿ·„êCÏ 0ý—ó]îÿ}êÈÿ:ä™Bû9ÿW:û¿ðJ˜—€ù1±è¿œÿërþW@ÿ
-Æû$—íúONù_ÌTbYÏü/î5ÿ‹þ=ó¿˜ÿ¢ÿWl,ú/çÿz½ÿ7è_ÂçŸOÇÇ_ûñ¹Í“  ý»æqÿ#ý?6ý»æQÿ•€ÿ+6¦úŸgþýŸÈÿŠEÿ®ù_è_êM¡ý¿`þ×äÿ¨éÿ0/ù_1±èßeþã9ÿ‹û?
-©&42kôßv‹-_0*|©ÿ«©»AÿU[1ÿQÂÊõ??w¿Wý–¯×ÕMýõxÿÃúû³uýßow7×O÷_†/íîí/fùù^ÿÜ4œÿ%Lg³áü?¯§PlÕÿ³÷ïa·ÿ¾»»½¾¿ùëg¼«ÿêYÿyø3Þÿ¥†û	½‡f«þ÷‡Ç75ÿ’õúorOþ£òŸbcÒÿ¢Óÿªón»Óù¿âþ_Ãøõ­ßœÿc²RÿSýåg,«ÿT]]õiêÿþÛŠú‚Mëºÿ©}úësÿ/õ_	–õ/×ÿ{™ÿ0þØÿÔ¹£80ý»Îàü/þŸØXôï2ÿþ_)̈Eÿžó2÷ÿ‹Eÿ®ó¸ÿ—@ÿolLõ?ÏùÜÿK ÿ76ý»ôÿÎóпºbShÿ/Óÿ[o}žú©ÿI8ݾfü?Q±èߥÿwžÿÀýŸ„œ¨ Ff»þ+§ùíÉÿ…ÿOƒeý]ç?0ÿSóbcÑ¿ëüô/ÿWl,ú/æÿzéÿžý_è_§ÝqÇ# .ý»Î ÿ]ûl,úwÿ@ÿ—ü_±1Õÿç?pÿ«ÿWl,ú÷œÿУ	ø¿bShÿ/8ÿ¡ü_œÿ%LÏfü_Q±è¿œÿëòý?çŽþO	¼ÿÇf»þÿW:û¿þ/–õ/çÿê^å1ÿKÃUúˆ,0ý»æñþ'ûߨXôï’ÿ5ïÿäH ÿ+6ý»æáÿ”ÀüØXôïšÿEþ‡꿱1Õÿ<ó¿ðK¨>ô< cÑ9ÿ×åþß§Žü	©Cþ‘)´ÿ—ó¥ÉÿEþ¿†ñëgþ_\,ú/çÿºœÿ•s‡þ%Œ÷ÿH>.ÛõŸœò¿Ò4ÿ±Ãÿ¥À²þ®ù_ÜÿJ ÿ+6ý»æ¡	ø¿bcÑ9ÿ×ëý¿Aÿ>ÿ|:>þڏÏmž±èß5ÿ‹û	ìÿ±±èß3ÿ‹ü
-ø¿bcªÿyæÑÿ)ü¯ØXôïšÿ…þ% þØÚÿæ¥)ÿÿ·„éÙŒÿ+*ý»Ìœó¿¨ÿKH5	 ‘Y£ÿ´<òëF…/õ5u7è¿júÿ—‚•ë<<~î~¯ú!,_ÿ
 .÷“ÿ¯Îä¿IغþÇo·»›ë§û/×v÷ö³üü?¯nÈÿÕ0/Á?Ó:pþÆVý?{ÿvûï»»Ûëû›¿~Æ»ú¯þ£ÿáÏxÿ—xÿ×Àýl¶êx|Só/Y¯ÿ&Óÿ­æ¯Ø˜ô¿èô¿îüßVãû^Ñ¿‚?Îÿc#8σP¬ÔÿTÿ_ùËê?UWW}šú¿S;Îÿ¦þãϦõ?ÝÿÔNóú©ÿ7³þ
-,ë_®ÿ÷2ÿaø)àÿ‘PçŽàÀXôï:ÿÿ¿ê±±èßeþÜÿAþ»æ?ÄÆ¢Ïù-þ?	ÔÿccÑ¿çü‡Ìý¿úccªÿ9Ψ¸ÿ—@ÿol,úwéÿ=Ï ÿGÝ?±)´ÿ—éÿ­‡võ©ÿ¯âü/a^‚“ÿg·Ãÿ‹þ]úÏó¸ÿӐÀÈl×å4ÿ¡ü_øÿ$XÖßsþCbþ¯æ?ÄÆ¢ÏùýKÀÿ‹þ‹ù¿^ú¿gÿú—ðiwÜñˆ‹EÿžóZú?%°ÿÇÆ¢Ïùý_ðÅÆTÿsœÿèÿ€ÿ+6ý{Îèпü_±)´ÿœÿÐNó8ÿK˜—€üטXô_ÎÿuùþŸs¦ÿSïÿ±Ù®ÿåà F…/Ïÿ:û¿ü_
-,ë_ÎÿÕ½Îÿâù/á*}Ä‹þ]ó¿xÿ“Àýol,úwÉÿš÷úÿ$ÿ‹þ]ó¿ðJhP~h,úwÍÿ"ÿCõߨ˜êžù_ø¿%Tz ±è¿œÿërÿïSGþ‡„Ô!ÿÈÚÿËù¿ÒÙÿ…ÿS¼Ìÿ‹‰Eÿåü_—ó¿òð @ÿ
-Æû$—íúONù_ÕÉÿU÷ø¿XÖß5ÿ‹û_	äÅÆ¢×ü/ô/ÿWl,ú/çÿz½ÿ×è_ÂçŸOÇÇ_ûñ¹Í“  ý{æ‘ÿ®ý?6ý»æQÿ•€ÿ+6¦úŸgþýŸÈÿŠEÿ®ù_è_êM¡ý¿`þ×äÿHôH˜—€ü¯˜Xôï2ÿqÎÿ¢þ/!Õ$€FfþÛ¼Øòõ£Â—ú¿šºô_µÃ#ÿ—€•ë<<~î~¯ú!,_ÿ®«ë<úÿêñùÏúû³uýßow7×O÷_†/íîí/fùù^ÿÜ4¼ÿK˜ýÿÌkÁi [õÿìý{Øí¿ïîn¯ïoþúïê¿zÖþŒ÷©áþOBFï¡ÙªÿýáñMÍ¿d½þ›Ü³ÿK ù+6&ý/:ý¯:ÿç¶õŸ+ú4Œ_ÿØöÍù?&+õ?ÕÿW~ƲúOÕÕUŸ¦þïÔ6ôJØ´þ§ûŸÚ§ÿ·žúê¿,ë_®ÿ÷2ÿ¡áþ_D;€cÑ¿ëüÎÿèÿ‰Eÿ.óæþ_ò_%0ÿ!6ý{ΠÿWõÿØXôï9ÿþ_
-ôÿÆÆTÿsœÿ@ÿ¯úccÑ¿Kÿï<ÿýK û'6…öÿ2ý¿õð&ÐuSÿ/õ?	ã׿Ûáÿ‰ŠEÿ.ý¿óüîÿ$äD02Ûõ_9Íh'ÿþ?	–õ÷œÿP'žÿ
-˜ÿ‹þ=ç?tè_þ¯ØXô_ÌÿõÒÿ}Þÿô/áÓî¸ã‹þ]ç?´è_ûl,úwÿ@ÿ—ü_±1Õÿ<ç?pÿ+ÿWl,úwÿ€þ%àÿŠM¡ý¿àü‡öäÿ¨9ÿK˜¾~ü_Q±è¿œÿëòý?çŽþO	¼ÿÇf»þÿWšü_m…ÿKeýËù¿ºWù_5Ï	Wé#°ÀXôïšÿÅûŸîccÑ¿Kþ×¼ÿ“ÿ!ü¯ØXôïšÿ…ÿSBƒòCcÑ¿kþù¨ÿÆÆTÿóÌÿÂÿ-¡úÐó ŒEÿåü_—ûŸ:ò?$¤ùG¦Ðþ_Îÿ•Îþ/üŸƯŸùq±è¿œÿërþWÎýKïÿ‘|\¶ë?9å¥)ÿ+ãÿR`Y×ü/î%ÿ‹þ]ó¿Ð¿ü_±±è¿œÿëõþß 	Ÿ>íÇç6O‚€XôïšÿÅýöÿØXôïšÿEýWþ¯Ø˜êŽù_ôj ÿ+6ý{æõè_êM¡ý¿`þWšü_ø¿%L_?þ¯¨Xôï2ÿqÎÿ¢þ/!Õ$€Ff•þûÅ–¯?¾ÔÿÕÔãü窭:ü_
-V®ÿñðpøq¸û½ê‡°|ý»®nòèÿ«;òß$l]ÿã·ÇÛÝÍõÓý—áK»{û‹Y~þŸ×?7
-ùOƯÿêŠóT¶êÿÙû÷°ÛßÝÝ^ßßüõ3ÞÕõ¬ÿ<üïÿ†—ô¯ £÷ÐlÕÿþðø¦æ_²^ÿMîñÿH ÿ)6&ý/:ý¯:ÿçqð÷pþ¯˜ÿ¥aüúéÿŽËJýOõÿ•Ÿ±¬þSuuÕ§©ÿ{øoõ›ÖÿtÿSûôÿÖÕÔÿKýW‚eýËõÿ^æ?0ÿAE;€cÑ¿ëüÎÿèÿ‰Eÿ.óæþ_òß%0ÿ!6ý»ÎÀÿ'ð·ØXôï:ÿû	ôÿÆÆTÿóœÿÀý¿úccÑ¿Kÿ/ó¤Ðý›Bû™þßzxNÏ‚±ÿ/qÿ'aüúw;ü?Q±èߥÿ—ùRr¢™íú¯œæ?´'ÿþ?
-–õwÿÀü_	̈Eÿ®óпü_±±è¿˜ÿë¥ÿ{ö¡	ŸvǏ€¸Xôï:ÿü	ìÿ±±èßsþùÏðÅÆTÿóœÿ@ÿ‡ü_±±èßuþú—€ÿ+6…öÿ‚óÚ“ÿ£áü/aüúɍ‹Eÿåü_—ïÿÌPÁûl¶ë¿ññ¥³ÿ«Æÿ¥À²þåü_Ýëü/žÿ®ÒG`±èß3ÿ«ãýO÷¿±±èß%ÿkÞÿÉÿ@þWl,úwÍÿÂÿ)ù±±èß5ÿ‹ü	Ôccªÿyæáÿ–P}èy Æ¢ÿrþ¯Ëý?ùR‡ü#Shÿ/çÿJgÿþO	ã×Ïü¿¸Xô_Îÿu9ÿ+çýKïÿ‘|\¶ë?9å¥iþcÿKeý]ó¿¸ÿ•@þWl,úwÍÿBÿðÅÆ¢ÿrþ¯×ûƒþ%|þùt|üµŸÛ<	bÑ¿kþ÷?ØÿccÑ¿kþõ_	ø¿bcªÿyæÑÿ)ü¯ØXôïšÿ…þ% þØÚÿ楓ÿ£Æÿ-aüúÉÿŠ‹Eÿ.óçü/êÿRMhdÖè?/·|ýÁ¨ð¥þ¯fØø«ºj+æ?JX¹þÇÃÃáÇáî÷ªÂòõïº:Ïÿzü?¬¿€­ëüöx»»¹~ºÿ2|iwo1ËÏÿóú禡ÿ[Âtúçü•­úöþ=ìößww·×÷7ýŒwõ_=ë?Æû¿Tsÿ/öÏØlÕÿþðø¦æ_²^ÿ
-ó¿Dàÿ‰Iÿ‹Nÿ«Îÿ¹íOýßù/¦îoÎÿQY©ÿ©þ¿ò3–Õª®®ú4õ§vôÿSÿñgÓúŸîjŸþߺšú©ÿJ°¬¹þßËü‡
 á§@þ«„:w4 Æ¢ÏùÿŸÞÿccÑ¿Ëüò?¤0ÿ!6ý{Îh¹ÿ—@ø[l,ú÷œÿ@ÿ¿úccªÿyÎàþ_ý¿±±èߥÿwžÿ€þ%Ðý›Bû©þß>ÕSÿ/þ
-UµÛK€ÿ'&ý»ôÿžç?pÿ§!'*€‘Ù®ÿÊiþC;ù¿ðÿI°¬¿çüΘÿ‹þ=ç?dô/ÿWl,ú/æÿzéÿžý_è_§ÝqÇ# .ý»Î ÿ]ûl,ú÷œÿÐÑÿ%ÿWlLõ?Çù‰þ	ø¿bcÑ¿çüòŸ5àÿŠM¡ý¿àü‡všÿÀù_ù¯±±è¿œÿëòý? ¼ÿÇf»þÿW:û¿2þ/–õ/çÿê^çñü—p•>â ŒEÿ®ù_¼ÿIàþ76ý»äÍû?ùÈÿŠEÿ®ù_ø?%4(?4ý{æ‘ÿ¡úolLõ?Ïü/üߪ=€ÀXô_Îÿu¹ÿ÷©#ÿCBb hh
-íÿåü_éìÿÂÿ)ù±±è¿œÿërþWÎýKïÿ‘|\¶ë?9å¥ÉÿUãÿR`Y×ü/î%ÿ‹þ]ó¿Ð¿ü_±±è¿œÿëõþ_£	Ÿ>íÇç6O‚€XôïšÿÅýöÿØXôïšÿEýWþ¯Ø˜êžù_ôJ ÿ+6ý»æ¡	¨?6…öÿ‚ù_ÓüÇÿ·ò¿bcÑ¿ËüÇ9ÿ‹ú¿„T“ ™Uú¯[¾þ`TøRÿWSwƒþ«¶Âÿ%aåú‡‡»ß«~Ë׿ëêîäÿ«ÇüÖߟ­ëüöx»»¹~ºÿ2|iwo1ËÏÿóúç¦áü/aX‰Äù?.[õÿìý{Øí¿ïîn¯ïoþúïê¿zÖþŒ÷©!ÿAퟱ٪ÿýáñMÍ¿d½þ›Ü³ÿK ù+6&ý/:ý¯:ÿç¶?õWôÿh ÿ;6+õ?ÕÿW~ƲúOÕÕÕ8÷kìÿN-ùÿ6­ÿéþgy1xMý7×ý¿B,ë_®ÿ÷2ÿ¡ÉÌÿÔPçŽàÀXôÏü‡?ôÿÄÆ¢—ùsÿ/þ_	̈EÿÌø÷Cý?6ý3ÿáßý¿±1Õÿ˜ÿð¯‡þߨXôïÒÿ;Ï@ÿèþ‰M¡ý¿TÿoŸê†þ_!U•ó¸øbbÑ¿Kÿï<ÿû?	9QŒÌvýWNóÚÉÿ…ÿO‚eý™ÿðï‡ù±±èŸùÿ~ðÅÆ¢ÿbþ¯—þoæ?Hù´;îxÄÅ¢æ?üûaÿEÿÌø÷ƒÿ+6¦úóþõàÿŠEÿÌø÷ƒÿ+6…öÿ‚óÚÉÿÅù_ù¯±±è¿œÿëòý?çLÿ§Þÿc³]ÿÿ+ý_þ/–õ/çÿê^çñü—p•>â ŒEÿ®ù_¼ÿIàþ76ý»ä÷ÿšü	äÅÆ¢×ü/üŸ”‹þ]ó¿èÿ—@ý76¦úŸgþþo	Õ‡ž@`,ú/çÿºÜÿûÔ‘ÿ!!1 44…öÿrþ¯töáÿ”Àü¿ØXô_Îÿu9ÿ+ ãý?’Ëvý'§ü¯4ù¿ü_
-,ëï™ÿÅý¯ò¿bcÑ¿gþó_4àÿŠEÿåü_¯÷ÿýKøüóéøøk?>·yÄ¢×ü/î$°ÿÇÆ¢×ü/ê¿ðÅÆTÿóÌÿ¢ÿSù_±±èß5ÿýK@ý±)´ÿÌÿJ“ÿÿ·ò¿bcÑ¿ËüÇsþ÷RMhdÖèùÄÇ?¾ÔÿÕÔÝ ÿªIø¿$¬[ÿãááðãp÷{ÝaùúsFÿoÆù¬¿?×ÿøíñvwsýtÿeøÎîÞù^–ŸÿçõÏuËù_¼çóâ>0õÿlý{Øí¿ïîn¯ïoþþïê¿úþ‡?ãý_Õ’ÿ ÷ýØlÔÿþðø¶æ_²^ÿM®Øÿ% ÿØXô¿ìô¿îüßôcÿwÛ3ÿWÃÅùÿëWž¡X§ÿ©ü¿ö3–Õª®®ú4½ÿ§¦%ÿ_–õ?]ÿÔËkê¿ÃÆú_ށ¬¿ Ãú/mÿݐÿдä¿h¨sGp`ú_Úþ»eþCÃüo
-ÔûccÐÿÒößuó¦þ¿¶Áÿ+ù±1èiûï–ù9Sÿ“@ø[lú_Úþ»eþCÛsÿ/þߨXêÛ·ÌèèÿÑ@ÿolú_Úþ»¥þWõè_Ý?±)³ÿ¿Ùþ»ªÿ·KyÜÿÛ†÷	óœý?9ó<…AÿKÛ·œÿ[îÿ4äD02›õ¿¢xTøòùíÉÿ…ÿOƒaýú¿^å?·ä?k`þClú÷ñMùoMþ%àÿŠAÿåü_/ýßçý¿Eÿ>íŽ;q1èßÇÿužÿÂüo
-ìÿ±1èßÇÿ5Íh{ú¿$àÿŠ¥þçâÿšò_»šþ	ø¿bcпÿkªÿU=ú—€ÿ+6eöÿrþ¯éþ7ô¯`^ò_cbÐAÿ×åûn;üŸxÿÍfý7^ù_gÿWÿKaýú¿º×ù_<ÿ%\¥8Àcпoþïxß‹Aÿ>ù_çý¿!ÿCù_±1èß5ÿ‹ùŸ”ƒþ}ó¿Èÿ@ý76–úŸkþþo	Õ‡ž@`ú/èÿºÜÿûª'ÿCBêdÊìÿý_éìÿÂÿ)a^æÿÅÄ ÿ‚þ¯Ëù_¹íп„ñþÉÇe³þ“WþW5ù¿ü_
-ëï›ÿÅý¯ò¿bcпoþú—€ÿ+6ýô½Þÿ[ô/áóϧãã¯ýøàæIƒþ}ó¿¸ÿ‘Àþƒþ}ó¿¨ÿJÀÿKýÏ5ÿ‹þO	äÅÆ ßü/ô/õǦÌþ_2ÿkò4ôH˜—€ü¯˜ôï3ÿñœÿÅýŸ†T“ ™5úoê垯—Œ
-_êÿjênÐÕÿOø¿¬\ÿãááðãp÷{Õaùúw]Õ7£ÿ¯Î5ë¯`ëú¿=Þîn®Ÿî¿_ÚÝÛ_Ìòóÿ¼þ¹aþ§†ùØÿϼœB±UÿÏæ¿‡Ýþûîîöúþ毟ñ®þ«gýçáÏxÿ—˜ÿ¡ú_l¶êx|Só/Y¯ÿ&“ÿ­ý>6&ý/:ý¯:ÿç¶ßÿóh	Fÿ¦øú•óLVêº XùËê?UWW}šú¿SÛÐÿ)aÓúŸ.€–ƒ×Ôs}êÿíê¿,ë¿´øt÷*ÿaø)pÿ/¡Î
-À±èiðûú5ÿ¡ÍÜÿKÀï‹þ—6 ¿«ÿ—óÎýä¿j`þCl,ú_Ú ¼~ÿoÆr!ú@ø[l,ú_Ú ü¾þ_ÍÈ™û	ôÿÆÆTÿ[Ø ü¾þ_Íè+îÿ%Ðÿ‹þ—6 o¨ÿ¥Œþ%Ðý›Bûÿ›
-À£ÂöÿöÕ©ÿ'çšú¿„óýkÆÿ‹þ—6 o8ÿgîÿ4äD02Ûõ_ùø¿švòáÿ“`Yÿrþ¯WùÏ9ežÿ
-˜ÿ‹þ]ü_Sþ[›Ñ¿ü_±±è¿˜ÿë¥ÿ{ö¡	ŸvǏ€¸Xôïâÿšôßeò_$°ÿÇÆ¢ÿ×4ÿ!wôIÀÿSýÏÃÿ5å¿ö‰þ	ø¿bcÑ¿‹ÿkªÿ¥ýKÀÿ›Bû)ÿ×ùþ7çšó¿„iȍŠEÿåü_—ïÿ9gú?%ðþ›íúo|ü_éìÿjñ)°¬9ÿW÷:ÿ‹ç¿„«ôX`,úwÍÿâýO÷¿±±èß%ÿkÞÿÉÿ@þWl,úwÍÿÂÿ)¡Aù¡±èß5ÿ‹ü	Ôccªÿ9æ%üߪ=€ÀXô_Îÿu¹ÿ÷©#ÿCBêd
-íÿåü_éìÿÂÿ)aZ æÿEÅ¢ÿrþ¯Ëù_9gô/a¼ÿGòqÙ®ÿä”ÿ•&ÿWÂÿ¥À²þ®ù_ÜÿJ ÿ+6ý»æ¡	ø¿bcÑ9ÿ×ëý¿Fÿ>ÿ|:>þڏÏmž±èß5ÿ‹û	ìÿ±±èß5ÿ‹ú¯ü_±1Õÿ<ó¿èÿ”@þWl,úwÍÿBÿPl
-íÿó¿ÒäÿÂÿ-á\€%ÿ+(ý»Ìœó¿¨ÿKH5	 ‘Y£ÿöãbË׌
-_êÿjNóŸ«vìÿÂÿåÏÊõ??w¿Wý–¯×Õã_×õØÿËúû³uýßow7×O÷_†/íîí/fùù^ÿÜ4ä?H¿üq	8ÿÇd«þŸ½»ý÷ÝÝíõýÍ_?ã]ýWÏúÏßñþ/5œÿ%Ðþ›­úßßÔüKÖë¿É=ù/ØïccÒÿ¢ÓÿªónûSÿwÅü_
-cï7çÿ¸¬ÔÿTÿ_ùËê?UWWã½ÿøþ?ü·
-õ›ÖÿtÿSûôÿÖ§úßø3`ýXÖ¿\ÿïeþCÃü/uîh ŒEÿžóÈÓ@ÿOl,úw™ÿpîÿmèÿ‘Àü‡ØXôï9ÿùŸ‹Eÿžó:îÿ%ÐÿSýÏsþ÷ÿèÿEÿ.ý¿óüô/îŸØÚÿËôÿÖÃs¢êNýäÿj¨ªÝn\ü?1±èߥÿ÷<ÿû?
-9QŒÌvýWNóÚÉÿ…ÿO‚eý=ç?àÿÖÀü‡ØXôï9ÿ¡CÿðÅÆ¢ÿbþ¯—þïÙÿ…þ%|Úw<âbÑ¿çü‡ŽüG	ìÿ±±èßsþCOÿ—ü_±1Õÿç?ÔôHÀÿ‹þ=ç?ôè_þ¯ØÚÿÎ8å?å†ó¿ò_ccÑ9ÿ×åûÎÌÒÀûl¶ë¿ññ¥³ÿ«Åÿ¥À²þåü_Ýëü/žÿ®ÒG`±èß5ÿ‹÷?	ÜÿÆÆ¢—ü¯yÿ§ÿOù_±±èß5ÿÿ§„凯¢×ü/ò?$Pÿ©þç˜ÿUãÿ–P}èy Æ¢ÿrþ¯Ëý¿O=ù@CShÿ/çÿJgÿþO	Ìÿ‹Eÿåü_—ó¿rîп„ñþÉÇe»þ“SþWšü_	ÿ—Ëú»æqÿ+ü¯ØXôïšÿ…þ%àÿŠEÿåü_¯÷ÿýKøüóéøøk?>·yÄ¢×ü/î$°ÿÇÆ¢×ü/ê¿ðÅÆTÿóÌÿ¢ÿSù_±±èß5ÿýK@ý±)´ÿÌÿJ“ÿÿ·ò¿bcÑ¿ËüÇ9ÿ‹ú¿„T“ ™5úï–[¾þ`TøRÿWSóŸ«vx%Àÿ%`åú‡‡»ß«~Ë׿ÖôÿÖuÛ³þ
-¶®ÿñÛãíîæúéþËð¥Ý½ýÅ,?ÿÏëŸæj˜Nÿœÿ£²UÿÏÞ¿‡Ýþûîîöúþ毟ñ®þ«gýçáÏxÿ—xÿ×@÷wl¶êx|Só/Y¯ÿ&Óÿ­æ¯Ø˜ô¿èô¿êüŸsuªÿ–`ô/`êþæü••úŸêÿ+?cYý§êêªOSÿwjÇùßÔüÙ´þ§ûŸÚ§ÿwªÿu
-õ_	–õ/×ÿ{™ÿÐdö
-uîh ŒEÿžó2þ	ôÿÄÆ¢—ùsþ÷˜ÿ‹þ=ç?´øÿ$PÿEÿ®ó¸ÿ—@ÿolLõ?Çù‰û	ôÿÆÆ¢—þßóüò4Ðý›Bû™þßzxN4ùÔÿ—˜ÿ,a·›– ÿOL,úwéÿ=ÏàþOÃð EñÙ®ÿÊiþC;ù¿ðÿI°¬¿çü‡Äü_	̈Eÿžó2ú—€ÿ+6ýó½ôÏþ/ô/áÓî¸ã‹þ=ç?dê¿ØÿccÑ¿çü‡Žþ/	ø¿bcªÿ9ÎHôHÀÿ‹þ=ç?tè_þ¯ØÚÿÎhOþæ?i ÿ56ý—ó]¾ÿçœéÿ”Àûl¶ë¿ññ¥³ÿ«Ãÿ¥À²þåü_Ýëü/žÿ®ÒG`±èß5ÿ‹÷?	ÜÿÆÆ¢—ü¯óþ_“ÿ!ü¯ØXôïšÿ…ÿSBƒòCcÑ¿kþù¨ÿÆÆTÿóÌÿÂÿ-¡úÀÀÈXô_Îÿu¹ÿ÷©#ÿCBêd
-íÿåü_éìÿÂÿ)ù±±è¿œÿërþW@ÿ
-Æû$—íúONù_iò5ø¿XÖß3ÿ‹û_
-äÅÆ¢Ïü/æ¿hÀÿ‹þËù¿^ïÿ
-ú—ðùçÓññ×~|nó$ˆEÿ®ù_ÜÿH`ÿEÿ®ù_Ô%àÿŠ©þç™ÿEÿ§ò¿bcÑ¿kþú—€úcShÿ/˜ÿ•&ÿþo	äÅÆ¢—ùçü/îÿ4¤šÐȬÑn[¾þ`TøRÿWSwƒþ«vx$àÿ°rý‡‡ÃÃÝïU?„åëßuëßèÿ«3ùo¶®ÿñÛãíîæúéþËð¥Ý½ýÅ,?ÿÏ럛†ü'	ãÉŒó\¶êÿÙû÷°ÛßÝÝ^ßßüõ3ÞÕõ¬ÿ<üïÿRÃû¿Ú?c³UÿûÃ㛚Ézý7¹Çÿ#ü§Ø˜ô¿èô¿ªþŸ‡­<ÿ–`ô/ ª¦pÎÿ1Y©ÿ©þ¿ò3–Õª®®ú4õ§¶é©ÿ(Ø´þ§ûŸÚ§ÿ·®¦þ_ê¿,ë_®ÿ÷2ÿù*êÜÑ ‹þ]ç?àÿ—@ÿOl,úw™ÿ0çÿ.ù±±èßsþCÆÿ'ð·ØXôï:ÿû	ôÿÆÆTÿóœÿÀý¿úccÑ¿Kÿ/ó¤Ðý›Bû™þßzxNÿûÿïÿª*çq	ðÿÄÄ¢—þ_æ?Hɉ
-`d¶ë¿ršÿÐNþ/ü,ëï:ÿù¿˜ÿ‹þ]ç? 	ø¿bcÑ1ÿ×Kÿ÷<ÿýKø´;îxÄÅ¢×ùôJ`ÿEÿ®óèÿ’€ÿ+6¦úŸçüú?$àÿŠEÿ®óпü_±)´ÿœÿÐNó8ÿK ÿ56ý—ó]¾ÿ3ÿAïÿ±Ù®ÿÆÇÿ•&ÿW[áÿR`Yÿrþ¯îUþWÍó_ÂUúˆ,0ý»æñþ'ûߨXôï’ÿ5ïÿäH ÿ+6ý»æáÿ”ÀüØXôïšÿEþ‡꿱1Õÿ<ó¿ðK¨>ô< cÑ9ÿ×åþß§Žü	‰ ¡)´ÿ—ó¥³ÿÿ§æÿÅÆ¢ÿrþ¯Ëù_9gô/a¼ÿGòqÙ®ÿä”ÿ•¦ü¯ŒÿKeý]ó¿¸ÿ•@þWl,úwÍÿBÿðÅÆ¢ÿrþ¯×ûƒþ%|þùt|üµŸÛ<	bÑ¿kþ÷?ØÿccÑ¿kþõ_	ø¿bcªÿ9æÑÿ©ü¯ØXôï™ÿÕ£	¨?6…öÿ‚ù_iòáÿ–@þWl,úw™ÿ8çQÿ—j@#³FÿW‹_2*|©ÿ«©»AÿUS7ø¿¬[ÿãááðãp÷{Ýaùúw¹O£ÿ·N}Íú+ظþÇo·»›ë§û/Ãwv÷Î÷²üü?¯®3ïÿæ%8ÿSâüŒú¶þ=ìößww·×÷7ÿŒwõ_ýGÿßñþ¯"ÿE÷ÿ±Ù¨ÿýáñmÍ¿d½þ‡¿¼ÿK`¿EÿËNÿëÎÿm5¾ÿ·}Cþ“„?Îÿc+8σP¬ÓÿTþ_ûËê?UWW}šú¿‡gAGýGÁ–õ?]ÿÔËkê¿ÃÆú_îë¯À°þKÛ7ä?ŒÿdÿW0(àÀô¿´ýwËü‡¦Çÿ#ú_lú_Úþ»nþÃÔÿ×¶Ì‘Àü‡Øô¿´ýwËüúÿDþƒþ—¶ÿnšÿPqÿ/þߨXêÛ·ÌèÈÿÑ@ÿolú_Úþ»¥þ—*ô/îŸØ”Ùÿßlÿ]ÕÿÛåzÜÿ[üÿæ%8ùrÆÿƒþ—¶ÿn9ÿ·Üÿiȉ
-`d6ë¿rò5íÉÿ…ÿOƒaýú¿^å?·-ç?	̈Aÿ>þ¯óü‡
-ýKÀÿƒþËù¿^ú¿Ïû?õ
-ŸvǏ€¸ôïãÿ:Ïééÿ”Àþƒþ}ü_çùý_ðÅÆRÿsñMù¯]Cÿ‡ü_±1èßÇÿužÿP¡	ø¿bSfÿ/çÿšîsÛrþ—0/ù¯11è¿ ÿëòý?·=ýŸxÿÍfý7^ù_gÿWÿKaýú¿º×ù_<ÿ%\¥8Àcпoþï¸ÿAÿ>ù_çý¿%ÿCù_±1èß5ÿ‹ùß”ƒþ}ó¿Èÿ@ý76–úŸkþþo	Õ‡ž@`ú/èÿºÜÿûT‘ÿ!!uÈ?2eöÿ‚þ¯töáÿ”0/óÿbbÐAÿ×åü¯Üöè_Âxÿäã²YÿÉ+ÿ«šü_
-þ/†õ÷ÍÿâþWù_±1èß7ÿýKÀÿƒþú¿^ïÿýKøüóéøøk?>¸yÄ ßü/î$°ÿÇÆ ßü/ê¿ðÅÆRÿsÍÿ¢ÿSù_±1èß7ÿýK@ý±)³ÿ—Ìÿšü-ýæ% ÿ+&ýûÌœÎÿ™û?
-©&42kôÿq¹åëF…/õ5u7è¿jêÿ—‚uë<<~î~¯û!,_ÿ.÷©ý©gþ§„ëüöx»»¹~ºÿ2|gwï|/ËÏÿóúçá
-€ý_ÁçÿºæüŒúöþ=ìößww·×÷7ÿŒwõ_ýGÿßñþ¯Ê¼ÿKàþ?6õ¿?<¾­ù—¬×ÿð—ü	ì÷±±èÙéÝù¿­Æ÷ÿ¶o8ÿKøãüOÿw8Öéªÿ¯ýŒeõŸª««>Mýßó€ü	[ÖÿtÿS{ÍèOý¿]Íú+0¬ÁþßËü‡áŸø%J£80ý3ÿá¿ÔÿbcпÏü‡9ÿÿ¯æ?ÄÆ æ?ü7€ð·ØôÏü‡ÿÐÿKýùÿ~èÿAÿ>ý¿óüô/îŸØ”ÙÿõÿÖÃ?óÉÿß6œÿ%ÌKpòÿìvø‚aпOÿï<ÿû?	9QŒÌfýW^óÚiþþ?	†õgþØÿƒþ™ÿðß ü_±1远ÿë¥ÿ›ùR>íŽ;q1èŸùÿ
-`ÿAÿÌøo þ¯ØXêÌø÷ƒÿ+6ý3ÿá¿ø¿bSfÿ/9ÿ¡æ?pþ—0/ù¯11è¿ ÿëòý?çŠþO	¼ÿÇf³þ¯ü¯ÉÿÕUø¿Ö¿ ÿ«{•ÿÕòü—p•>â ŒAÿ¾ù_¼ÿIàþ76ýûäÍû?ýÈÿŠAÿ¾ù_ø?%4(?4ýû
 æ‘ÿ!úol,õ?×ü/üߪ=€Àô_Ðÿu¹ÿ÷©"ÿCBêdÊìÿý_éìÿÂÿ)a^æÿÅÄ ÿ‚þ¯Ëù_¹íÑ¿„ñþÉÇe³þ“WþW5åµø¿Öß7ÿ‹û_	äÅÆ ßü/ô/ÿWlú/èÿz½ÿgô/áóϧãã¯ýøàæIƒþ}ó¿¸ÿ‘Àþƒþ}ó¿¨ÿJÀÿKýÏ3ÿ‹þO
-äÅÆ ×ü¯„þ% þØ”ÙÿKæMþ–þ	óÿƒþ}æ?Îù_Ôÿ%¤šÐȬÑÛ.÷|½dTøRÿWSwƒþ«vìÿÄÿåÏÊõ??w¿Wý–¯×Õuýu&ÿMÂÖõ?~{¼ÝÝ\?ݾ´»·¿˜åçÿyýóø`ÿpZ‹t>ÿpÅVý?›ÿvûï»»Ûëû›¿~Æ»ú¯žõŸ‡?ãý_jÈ‘Ñ{h¶êx|Só/Y¯ÿ&÷¼ÿK ù+6&ý/:ý¯:ÿç¶;ÿGK0ú0~ýcÛ7çÿ˜¬Ôÿt°ò3–Õª®®ú4õ§¶é¨ÿ(Ø´þ§ zñÏ`Mý7×§þß®¡þ+Á²þK€O7|«ò†Ÿþ	uîh ŒEÿK€ß×ÿ«ùmæü/þŸØXô¿´ø]ý¿œÿpîÿãþOóbcÑÿÒàõûÓ‘ÿ¨úl,ú_Ú ü¾þ_Ïè¸ÿ—@ÿolLõ¿…
-ÀïëÿÕü‡>qÿ/þߨXô¿´xCý/uè_Ý?±)´ÿ¿Ù <*|aÿo_õ'ÿO®©ÿK8ݾfü?Q±èið†óæþOCNT #³]ÿ•ÿ«i'ÿþ?	–õ/çÿz•ÿ<Ú yþ`þCl,úwñç?tè_þ¯ØXô_ÌÿõÒÿ}Þÿô/áÓî¸ã‹þ]ü_“þ‡÷@ô¯€ý?6ý»ø¿Îó:ú¿$àÿŠ©þçáÿšò_ûDÿ‡ü_±±èßÅÿužÿС	ø¿bShÿ/åÿ:ßÿæ\sþ—pZò_ÃbÑ9ÿ×åûΙþO	¼ÿÇf»þÿW:û¿zü_
-,ë_ÎÿÕ½Îÿâù/á*}Ä‹þ]ó¿xÿ“Àýol,úwÉÿ:ïÿ5ùÈÿŠEÿžù_ÿ§„凯¢×ü/ò?$Pÿ©þç™ÿ…ÿ[Bõ¡ç‹þËù¿.÷ÿqúW:ä™Bû9ÿW:û¿ðJ¿~æÿÅÅ¢ÿrþ¯Ëù_9gô/a¼ÿGòqÙ®ÿä”ÿ•&ÿW‹ÿKeý]ó¿¸ÿ•@þWl,úwÍÿBÿðÅÆ¢ÿrþ¯×ûƒþ%|þùt|üµŸÛ<	bÑ¿kþ÷?ØÿccÑ¿kþõ_	ø¿bcªÿyæÑÿ)ü¯ØXôïšÿ…þ% þØÚÿæç?âÿ–pZò¿ÂbÑ¿ËüÇsþ÷RMhdVé¿^lùúƒQáKý_MÝ
-ú¯Ú*áÿR°rý‡‡ÃÃÝïU?„åëßuuªGÿ_Ý2ÿSÂÖõ?~{¼ÝÝ\?ݾ´»·¿˜åçÿyýsÃüw
-ÓÙŒóT¶êÿÙû÷°ÛßÝÝ^ßßüõ3ÞÕõ¬ÿ<üïÿRMýOBFï¡ÙªÿýáñMÍ¿d½þ›Ü“ÿ$ÿOlLú_tú_uþÏ£ñ8ÿW‰ü'	ã×Oÿw\Vêªÿ¯üŒeõŸª««1÷eìÿN-ýŸ6­ÿéþgy1xMý7×ÕÔÿKýW‚eýËõÿ^æ??îÿ%Ô¹£80ý»Îàü/÷ÿØXôï2ÿaÎÿàþOóbcÑ¿çü‡–ùO‹Eÿžó˜ÿ«þߨ˜êžó¸ÿ—@ÿol,úwéÿç? 	tÿĦÐþ_¦ÿ·Þº“ÿ?³ÿk8ݾfü?Q±èߥÿwžÿÀýŸ„œ¨ Ff»þ+§ù-ó„XÖßsþC"ÿQóbcÑ¿çüæiÀÿ‹þ‹ù¿^ú¿gÿú—ðiwÜñˆ‹Eÿ®óÈ“Àþ‹þ]ç?Ðÿ%ÿWlLõ?ÏùôHÀÿ‹þ]ç? 	ø¿bShÿ/8ÿ¡eþƒéÙŒÿ+*ý—ó]¾ÿçô¯€÷ÿØl×ããÿJgÿWÆÿ¥À²þåü_Ýëü/žÿ®ÒG`±èß5ÿ‹÷?	ÜÿÆÆ¢—ü¯yÿ'ÿCù_±±èß5ÿÿ§„凯¢Ïü/ò?4Pÿ©þç™ÿ…ÿ[Bõ¡ç‹þËù¿.÷ÿ>uäHHòL¡ý¿œÿ+ý_ø?%Œ_?óÿâbÑ9ÿ×åü¯œ3ú—0Þÿ#ù¸l×rÊÿJ“ÿ«Æÿ¥À²þ®ù_ÜÿJ ÿ+6ý»æ¡	ø¿bcÑ9ÿ×ëý¿Fÿ>ÿ|:>
 þڏÏmž±èß5ÿ‹û	ìÿ±±èß5ÿ‹ú¯ü_±1Õÿ<ó¿èÿ”@þWl,úwÍÿBÿPl
-íÿó¿ÒäÿÂÿ-az6ãÿŠŠEÿ.óçü/êÿRMhdÖè?\lùúƒQáKý_MÝ
-ú¯Ú±ÿÿ—?+×ÿxx8ü8Üý^õCX¾þ]×LùouÇúKغþÇo·»›ë§û/×v÷ö³üü?¯nö	WWÓpþÉVý?{ÿvûï»»Ûëû›¿~Æ»ú¯žõŸ‡?ãý_BÿèþŽÍVýïojþ%ëõßtù/ðÿÄÆ¤ÿE§ÿUçÿœ«Sý¯bþ‡†±÷›ó\Vêªÿ¯üŒeõŸª««qîרÿÆëê?6­ÿéþ§öéÿ­«SÿoKýO‚eýËõÿ^æ?4ÌÿQçŽàÀXôï9ÿü7
-¼ÿÇÆ¢—ùçþ߆þ	̈Eÿžó˜ÿ©ð·ØXôï:ÿû	ôÿÆÆTÿsœÿPsÿ/þߨXôïÒÿ{žÿУ	tÿĦÐþ_ªÿ·Omsêÿk¨ÿKØí¦%Àÿ‹þ]úÏó¸ÿӐÀÈl×å4ÿ¡ü_øÿ$XÖßsþCÍüo	̈Eÿžó:ô/ÿWl,ú/æÿzéÿžý_è_§ÝqÇ# .ý{ÎèÈ”Àþ‹þ=ç?ôôIÀÿSýÏqþCMÿ‡ü_±±èßsþCþ%àÿŠM¡ý¿àü‡vòqþ—@þkl,ú/çÿº|ÿÏ™ùOxÿÍvý7>þ¯töeü_
-,ë_ÎÿÕ½Îÿâù/á*}Ä‹þ]ó¿xÿ“Àýol,úwÉÿš÷ò?$ÿ‹þ]ó¿ðJhP~h,ú÷Ìÿ"ÿCõߨ˜êžù_ø¿%T˜ ‹þËù¿.÷ÿ>õäHHòL¡ý¿œÿ+ý_ø?%0ÿ/6ý—ó]ÎÿʹCÿÆû$—íúONù_iòÕø¿XÖß5ÿ‹û_	äÅÆ¢×ü/ô/ÿWl,ú/çÿz½ÿ7è_ÂçŸOÇÇ_ûñ¹Í“  ý»æqÿ#ý?6ý»æQÿ•€ÿ+6¦úŸgþýŸÈÿŠEÿ®ù_è_êM¡ý¿`þWšü_ø¿%ÿ‹þ]æ?Îù_Ôÿ%¤šÐȬÑÊ‹-_0*|©ÿ«©»AÿU[%ü_
-V®ÿñðpøq¸û½ê‡°|ýǺïèÿ­ëܰþ
-¶®ÿñÛãíîæúéþËð¥Ý½ýÅ,?ÿÏëŸÎÿæ%8ÿÇ—N¡ØªÿgïßÃnÿ}ww{}ó×ÏxWÿÕô?üïÿþ_
-ÜÿÇf«þ÷‡Ç75ÿ’õúoÈAþSlLú_tú_wþo«ñý?W‰ó¿„?Îÿc38σP¬ÔÿTÿ_ùËê?UWW}šú¿S;æ?PÿñgÓúŸîj§ùý©ÿwìÿ`ýý±¬¹þßËü‡á§@þ»„:w4 Æ¢Ïù™þ	ÔÿbcÑ¿Ëü‡9ÿƒþ	̈EÿžóZüÿ‹Eÿžó2÷ÿèÿ©þç8ÿ!qÿ/þߨXôïÒÿ{žÿС	tÿĦÐþ_¬ÿ·¯¦þ_æ?i˜—àäÿÙíðÿâ—þßóüîÿ4äD02Ûõ_9Íh'ÿþ?	–õ÷œÿ˜ÿ-ù±±èßsþCFÿðÅÆ¢ÿbþ¯—þïÙÿ…þ%|Úw<âbÑ¿çü‡LýWûl,ú÷œÿÐÑÿ%ÿWlLõ?Çù‰þ	ø¿bcÑ¿çü‡ýKÀÿ›BûÁùíäÿâü/a^ò_cbÑ9ÿ×åû@ÿ
-xÿÍvý7Nù_gÿWÆÿ¥À²þåü_Ýëü/žÿ®ÒG`±èß5ÿ‹÷?	ÜÿÆÆ¢—ü¯yÿ'ÿCù_±±èß5ÿÿ§æÄÆ¢Ïü/ò?4Pÿ©þç™ÿ…ÿ[Bõ¡ç‹þËù¿.÷ÿ>uäHHòL¡ý¿œÿ+ý_ø?%ÌKÀü¿˜Xô_Îÿu9ÿ+çŒþ%Œ÷ÿH>.ÛõŸœò¿ªÉÿ•ð)°¬¿kþ÷¿ÈÿŠEÿ®ù_è_þ¯ØXô_Îÿõzÿ¯Ñ¿„Ï?ŸŽ¿öãs›'A@,úwÍÿâþGûl,úwÍÿ¢þ+ÿWlLõ?Ïü/ú?%ÿ‹þ]ó¿Ð¿Ô›BûÁü¯ÉÿQÓÿ!a^ò¿bbÑ¿ËüÇ9ÿ‹ú¿„T“ ™Uú_nùúƒQáKý_MÝ
-ú¯šžü/	+×ÿxx8ü8Üý^õCX¾þ]àp¬ÛžõW°uýßow7×O÷_†/íîí/fùù^ÿÜÔ¼ÿKàü›­úöþ=ìößww·×÷7ýŒwõ_ýGÿßñþ/‘ÿ­ûÿØlÕÿþðø¦æ_²^ÿ
-÷ÿ"ÐlLú_tú_wþo«ñý?-¡è_Àçú¿Ã±RÿSýåg,«ÿT]]s¿Æû¿Ô6õ›ÖÿtÿS;Íè§þ߆õW`Yÿrý¿—ùÃ?¸ÿ“PçŽàÀXôï9ÿüg
-¼ÿÇÆ¢—ùsÿ/þ?	̈Eÿ®óÈ–@ø[l,ú÷œÿÀü7
-ôÿÆÆTÿsœÿPqÿ/þߨXôïÒÿ{žÿ@þ³ºbShÿ/ÖÿÛuçùø$ÌKpòÿìvø‚aÑ¿Kÿïyþ÷r¢™íú¯œæ?´“ÿÿŸËú»Î ÿUóbcÑ¿ëüô/ÿWl,ú/æÿzéÿžý_è_§ÝqÇ# .ý{Îh©ÿJ`ÿEÿžóÈÔ€ÿ+6¦úŸçüú?$àÿŠEÿ®óпü_±)´ÿœÿ0ù¿˜ÿ®a^ò_cbÑ9ÿ×åû è_ïÿ±Ù®ÿÆ)ÿëìÿJø¿XÖ¿œÿ«{•ÿ•xþK¸Jq€Æ¢×ü/Þÿ$pÿ‹þ]ò¿æýŸü	äÅÆ¢×ü/üŸ”‹þ]ó¿Èÿ@ý76¦úŸgþþo	Õ‡ž@`,ú/çÿºÜÿû”Éÿ:ä™Bû9ÿW:çáÿ”0/óÿbbÑ9ÿ×åü¯œ3ú—0Þÿ#ù¸l×rÊÿªNþ¯1ÿÿ—?–õwÍÿâþWù_±±èß5ÿýKÀÿ
 ‹þËù¿^ïÿ5ú—ðùçÓññ×~|nó$ˆEÿ®ù_ÜÿH`ÿEÿžù_ähÀÿSýÏ3ÿ‹þO	äÅÆ¢×ü/ô/õǦÐþ_0ÿkò$ú?$ÌK@þWL,úw™ÿ8çQÿ—j@#³FÿÍò‘0*|©ÿ«©»AÿUÓwø¿¬\ÿãááðãp÷{Õaùúw]՝üõð_³þ¶®ÿñÛãíîæúéþËð¥Ý½ýÅ,?ÿÏëŸæix>ÿ·íôN¡ØªÿgïßÃnÿ}ww{}ó×ÏxWÿÕ³þóðg¼ÿK5ïÿȉÍVýïojþ%ëõßäŽü	è?6&ý/:ý¯:ÿç¶iÆóÿ	þ<ŸÿÇÞoÎÿáX©ÿ©þ¿ò3–Õª®®ú4õ§–ü
-›ÖÿtÿSûôÿÖçþ_ê¿,ë_®ÿ÷2ÿaø)àÿ•PçŽàÀXôÏü‡?ôÿÄÆ¢—ùsÿ/þ_	̈EÿÌø÷Cø[l,úgþÿúccªÿ1ÿá_ý¿±±èߥÿwžÿ€þ%Ðý›Bû™þßzxhÒ©ÿ¯¢þ'a^‚†¯üσPXôïÒÿ{žÿÀýŸ†œ¨ Ff»þ—7
-_>ÿ¡=ù¿ðÿi°¬?óþý0ÿ!6ý3ÿáßþ¯ØXô_ÌÿõÒÿÍü)ŸvǏ€¸XôÏü‡?ìÿ±±èŸùÿ~ðÅÆTÿcþÿü_±±èŸùÿ~ðŦÐþ_pþC{òÔœÿ%ÌK@þkL,ú/çÿº|ÿÏà ý+àý?6Ûõßøø¿ÒÙÿUãÿR`Yÿrþ¯îuþÏ	Wé#°ÀXôï™ÿ•yÿ“Àýol,úwÉÿš÷ò?$ÿ‹þ]ó¿ðJ`þGl,úwÍÿ"ÿCõߨ˜êžù_ø¿%Tz ±è¿œÿërÿïS&ÿCBêd
-íÿåü_éìÿÂÿ)a^æÿÅÄ¢ÿrþ¯Ëù_Ãë?ú—0Þÿ#ù¸l×rÊÿJÓüÇÿ—Ëú»æqÿ+ü¯ØXôïšÿ…þ%àÿŠEÿåü_¯÷ÿýKøüóéøøk?>·yÄ¢×ü/î$°ÿÇÆ¢×ü/ê¿ðÅÆTÿóÌÿ¢ÿSù_±±èß5ÿýK@ý±)´ÿÌÿšæ?&üßæ% ÿ+&ý»Ìœó¿¨ÿKH5	 ‘Y£ÿv¹åëF…/õ5u7è¿6#ü_
-V®ÿñðpøq¸û½ê‡°|ý»®®Æõ¯ëÌúKغþÇo·»›ë§û/×v÷ö³üü?¯ìÿ¦¯8ÿÏkÁi [õÿìý{Øí¿ïîn¯ïoþúïê¿zÖþŒ÷	ýkÈè=4[õ¿?<¾©ù—¬×“;ü?ØïccÒÿ¢Óÿªón»Sý¿bþ—†ñë[¿9ÿÇd¥þ§úÿÊÏXVÿ©†wÿ>Mýß©mê?
-6­ÿéþ§öéÿ­«iþõ?	–õ/×ÿ{™ÿÀüuîh ŒEÿ®ó8ÿK ÿ'6ý»Ì˜ûÉ—Àü‡ØXôï:ÿÿŸÂßbcÑ¿ëüîÿ%ÐÿSýÏsþ÷ÿèÿEÿ.ý¿ÌB÷Ol
-íÿeúëáM Oý‰úŸ„ñëßíðÿDÅ¢—þ_æ?Hɉ
-`d¶ë¿ršÿÐNþ/ü,ëï:ÿù¿˜ÿ‹þ]ç? 	ø¿bcÑ1ÿ×Kÿ÷ìÿBÿ>íŽ;q±èßsþØÿƒþýaÿEÿ®óèÿ’€ÿ+6¦úŸçüî%àÿŠEÿ®óпü_±)´ÿœÿОü5ç	Ó׏ÿ+*ý—ó]¾ÿ3ÿAïÿ±Ù®ÿÆÇÿ•Îþ¯ÿ—Ëú—óu¯ó¿xþK¸Jq€Æ¢×ü/Þÿ$pÿ‹þ]ò¿æýŸü	äÅÆ¢×ü/üŸ”‹þ]ó¿Èÿ@ý76¦úŸcþWÂÿ-¡úÐó ŒEÿåü_—ûŸ:ò?$¤ùG¦Ðþ_Îÿ•Îþ/üŸƯŸùq±è¿œÿërþWÎýKïÿ‘|\¶ë?9å¥Éÿ•ð)°¬¿kþ÷¿ÈÿŠEÿ®ù_è_þ¯ØXô_Îÿõzÿ¯Ñ¿„Ï?ŸŽ¿öãs›'A@,úwÍÿâþGûl,úwÍÿ¢þ+ÿWlLõ?Ïü/ú?%ÿ‹þ]ó¿Ð¿Ô›BûÁü¯4ù¿ðK˜¾~ü_Q±èßeþãœÿEý_BªI Ìý§å#ÿ`TøRÿWSwƒþ«¦'ÿKÂÊõ??w¿Wý–¯—‡7¿ÑÿWgü¶®ÿñÛãíîæúéþËð¥Ý½ýÅ,?ÿÏ럛šþo	óü3Ò8ÿc«þŸ½»ý÷ÝÝíõýÍ_?ã]ýWÿÑÿðg¼ÿKäkàþ?6[õ¿?<¾©ù—¬×Ãý¿ô“þþםÿÛêtþK‚è_Àçÿ±œçA(Vêªÿ¯üŒeõŸª««ñÞìÿNíøþOýÇŸMëºÿ©æ?ôSÿoÍú+°¬¹þßËü‡ñìÿ
-êÜÑ ‹þ=ç?ÿ¬÷ÿØXôï2ÿaÎÿàþOóbcÑ¿ëüü¿‹Eÿ®ó¸ÿ—@ÿolLõ?Çù÷ÿèÿEÿ.ý¿çùä?k û'6…öÿ2ý¿õðÏ|òÿäŠú¿„y	NþŸákÇÿ‹þ]úÏó¸ÿӐÀÈl×ÿòfàQáËç?´'ÿþ?
-–õwÿ@þ«æ?ÄÆ¢×ùè_þ¯ØXô_ÌÿõÒÿ=Ï@ÿ>íŽ;q±èßsþCKÿ§öÿØXôï9ÿüG
-ø¿bcªÿ9Ψèÿ€ÿ+6ý{ÎÈè_þ¯ØÚÿÎhOþæ¿k˜—€üטXô_ÎÿuùþŸs¦ÿSïÿ±Ù®ÿÆ)ÿkò5þ/–õ/çÿê^å%žÿ®ÒG`±èß5ÿ‹÷?	ÜÿÆÆ¢—ü¯yÿ'ÿCù_±±èß5ÿÿ§„凯¢×ü/ò?$Pÿ©þç™ÿ…ÿ[Bõ¡ç‹þËù¿.÷ÿ>eò?$¤ùG¦Ðþ_Îÿ•Îþ/üŸæ%`þ_L,ú/çÿºœÿ•s‹þ%Œ÷ÿH>.ÛõŸœò¿ª)ÿ«Åÿ¥À²þ®ù_ÜÿJ ÿ+6ý»æ¡	ø¿bcÑ9ÿ×ëý¿Fÿ>ÿ|:>þڏÏmž±èß5ÿ‹û	ìÿ±±èß5ÿ‹ú¯ü_±1Õÿó¿èÿÔ@þWl,ú÷ÌÿêпÔ›BûÁü¯Éÿ‘èÿ0/ù_1±èßeþãœÿEý_BªI Ìý×[¾þ`TøRÿWSóŸ«¶êð)X¹þÇÃÃáÇáî÷ªÂòõïºjüßÕuÝ‘ÿ&aëú¿=Þîn®Ÿî¿_ÚÝÛ_Ìòóÿ¼þ¹iÈ’ð|þ¯ëéœB±UÿÏÞ¿‡Ýþûîîöúþ毟ñ®þ«gýçáÏxÿ7¼ ä¿Äf«þ÷‡Ç75ÿ’õúorÿGÍ_±1éÑéÕù?·M3žÿ+æhx>ÿ½ßœÿñRÿSýåg,«ÿT]]õiêÿþÛDýGÁ¦õ?ÝÿÔ>ý¿õÔÿÛPÿ•`Yÿrý¿—ùÍø3`ÿPçŽàÀXôï9ÿÿ¿úbcÑ¿Ëü‡sÿoCþ»æ?ÄÆ¢Ïùøÿ4PÿEÿžó:îÿ%ÐÿSýÏqþCâþ_ý¿±±èߥÿ÷<ÿ¡Cÿèþ‰M¡ý¿Lÿo=¼	Ôyêÿåü/a^‚v»é<BaÑ¿Kÿïyþ÷r¢™íú¯œæ?´'ÿþ?
-–õ÷œÿP“ÿ"ù±±èßsþC‡þ%àÿŠ
 EÿÅü_/ýß³ÿýKø´;îxÄÅ¢Ïù™þO	ìÿ±±èßsþCOÿ—ü_±1Õÿç?ÔôHÀÿ‹þ=ç?ôè_þ¯ØÚÿÎhOþ†ó¿„y	ȍ‰Eÿåü_—ïÿ9wôJàý?6Ûõßøø¿ÒÙÿUãÿR`Yÿrþ¯îuþÏ	Wé#°ÀXôï™ÿÅüO
-ÜÿÆÆ¢—ü¯yÿ§ÿOù_±±èß5ÿÿ§æÿÄÆ¢×ü/ò?$Pÿ©þç™ÿ…ÿ[Bõ¡ç‹þËù¿.÷ÿAþäHHòL¡ý¿œÿ+ý_ø?%ÌKÀü¿˜Xô_Îÿu9ÿ+çýKïÿ‘|\¶ë?9å¥iþcÿKeý]ó¿¸ÿ•@þWl,úwÍÿBÿðÅÆ¢ÿrþ¯×ûƒþ%|þùt|üµŸÛ<	bÑ¿kþ÷?ØÿccÑ¿kþõ_	ø¿bcªÿyæÑÿ)ü¯ØXôïšÿ…þ% þØÚÿ楓ÿ£Æÿ-a^ò¿bbÑ¿ËüÇ9ÿ‹ú¿„T“ ™5úï;¾þdTøRÿW3lüU]55ù_Ö­ÿñðpøq¸û½î‡°|ýǹ£ÿ·NãüÖߟëüöx»»¹~ºÿ2|gwï|/ËÏÿóúçºåü/áùü?ýŸ+N±Ø¨ÿgëßÃnÿ}ww{}ó÷ÏxWÿÕô?üïÿªLþ›Þ÷c³QÿûÃãÛšÉzý¹ÿ—@þSl,ú_vú_wþoú±ÿ»íÎÿ.Îÿ_¿ò<Å:ýOåÿµŸ±¬þSuuÕ§©ÿ{xdê?
-¶¬ÿéú§^þ3XSÿþ3ÖÿrGýO‚aý—¶ÿnÈþÉýŸ„Ai4 Æ ÿ¥í¿[æ?4=ùÏèÿ‰AÿKÛ×͘úÿÚ–üg	̈AÿKÛ·ÌÈõ?	„¿ÅÆ ÿ¥í¿›æ?TÜÿK ÿ76–úßÂöß-ó:òŸ5Ðÿƒþ—¶ÿn©ÿ¥
-ýKÀï›2ûÿ›í¿«ú»vìÿÉm¦ÿ_¼gÿÏnÇó ý/mÿÝrþo¹ÿӐÀÈlÖåäÿjÚ“ÿÿŸÃúô½Ênò_%0ÿ!6ýûø¿¦ü·¦GÿðÅÆ ÿrþ¯—þïÙÿ…þ%|Ú)ùÆ ÿ×yþù¯Øÿccпÿë<ÿ¡¢ÿKþ¯ØXê.þ¯)ÿµkèÿ€ÿ+6ýûø¿Îó*ô/ÿWlÊìÿåü_Óýoè_À¼ä¿ÆÄ ÿ‚þ¯Ë÷ÿÜöôJàý?6›õßxåý_þ/†õ/èÿê^çñü—p•>â ŒAÿ¾ù_¼ÿIàþ76ýûä÷ÿ–ü	äÅÆ ßü/üŸ˜ÿƒþ}ó¿Èÿ@ý76–úŸkþþo	Õ‡ž@`ú/èÿºÜÿûT‘ÿ!!uÈ?2eöÿ‚þ¯töáÿ”0/óÿbbÐAÿ×åü¯Üöè_Âxÿäã²YÿÉ+ÿ«šü_5þ/†õwÍÿâþWù_±1èß3ÿ«eþ‹ü_±1è¿ ÿëõþŸÑ¿„Ï?ŸŽ¿öホ'A@ú÷ÍÿâþGûlú÷Íÿ¢þ+ÿWl,õ?×ü/ú?%ÿƒþ}ó¿Ð¿Ô›2ûÉü¯ÉÿÑÒÿ!a^ò¿bbпÏüÇéüŸ¹ÿӐj™5ú¯Wd~½dTøRÿWSóŸ«Óý?þ/V®ÿñðpøq¸û½ê‡°|ý»n|΃u‹ÿOÂÖõ?~{¼ÝÝ\?ݾ´»·¿˜åçÿyýsS³ÿKxqþ¿ºÿÁi [õÿlþ{Øí¿ïîn¯ïoþúïê¿zÖþŒ÷©¦þ'æØlÕÿþðø¦æ_²^ÿä?© ÿ)6&ý/:ý¯:ÿç¶>Õÿ+æÿixqþÿú•ó8Vêº XùËê?UWW}šú¿SÛ4ÔlZÿÓP½øg°¦þ›OÏÿºk¨ÿJ°¬ÿÒàÓ
-ߪü‡á§@þ›„:w4 Æ¢ÿ¥
-ÀïëÿÕü‡6ãÿ‘@ÿOl,ú_Ú ü®þ_Î8÷ÿÕôÿI`þCl,ú_Ú ¼~ÿo:æÿjàþ/6ý/m ~_ÿ¯ç?dîÿ%ÐÿSýoaðûú5ÿ¡¯¸ÿ—@ÿol,ú_Ú ¼¡þ—2ú—@÷Ol
-íÿo6 
-_ÚÿÛ·Ý©ÿ¯¡þ/a^‚ªj·ÿÁó ý/m ÞpþÏÜÿiȉ
-`d¶ë¿òñ5íäÿÂÿ'Á²þåü_¯òŸs"ÿQóbcÑ¿‹ÿë<ÿ!£	ø¿bcÑ1ÿ×Kÿ÷ìÿBÿ>íŽ;q±èßÅÿ5é¿cþ‹öÿØXôïâÿ:Ïèèÿ’€ÿ+6¦úŸ‡ÿkÊíýðÅÆ¢ÿ×yþC‡þ%àÿŠM¡ý¿˜ÿkºÿ͹æü/a^ò_cbÑ9ÿ×åûΙþO	¼ÿÇf»þ—ƒ¾Øÿ•Îþ¯ÿ—Ëú—óu¯ó¿xþK¸Jq€Æ¢×ü/Þÿ$pÿ‹þ]ò¿æýŸü	äÅÆ¢×ü/üŸ˜ÿ‹þ]ó¿Èÿ@ý76¦úŸcþWÂÿ-¡úÐó ŒEÿåü_—ûŸ:ò?$¤ùG¦Ðþ_Îÿ•Îþ/üŸæ%`þ_L,ú/çÿºœÿ•sFÿÆû$—íúONù_ÌTbY×ü/î%ÿ‹þ]ó¿Ð¿ü_±±è¿œÿëõþ_£	Ÿ>íÇç6O‚€XôïšÿÅýöÿØXôïšÿEýWþ¯Ø˜êžù_ôJ ÿ+6ý»æ¡	¨?6…öÿ‚ù_“ÿ#Ñÿ!a^ò¿bbÑ¿ËüÇ9ÿ‹ú¿„T“ ™5úÏË#¿þ`TøRÿWSóŸ«¶bþ£„•ë<<~î~¯ú!,_ÿ®«»<úÿêÿŸ„­ëüöx»»¹~ºÿ2|iwo1ËÏÿóúç¦aÿ—0~ùçóÿ§PlÕÿ³÷ïa·ÿ¾»»½¾¿ùëg¼«ÿêYÿyø3Þÿ¥†û	´Æf«þ÷‡Ç75ÿ’õúorOþ£š¿bcÒÿ¢ÓÿªónûSÿwU“ÿ"anûæü“•úŸêÿ+?cYý§êêj¼÷ïÿR;¾ÿSÿñgÓúŸîjŸþßúÜÿKýW‚eýËõÿ^æ??ò_%Ô¹£80ý»ÎÀÿ'þŸØXôï2ÿþ_)̈Eÿ®óðÿJ þ‹þ=ç?ÿ¬þߨ˜êžó¸ÿ—@ÿol,úwéÿç? 	tÿĦÐþ_¦ÿ·žiêÿKäÿH¨ªÝn\ü?1±èߥÿwžÿÀýŸ„œ¨ Ff»þ+§ùíäÿÂÿ'Á²þžóðk`þCl,ú÷œÿС	ø¿bcÑ1ÿ×Kÿ÷yÿoп„O»ãŽG@\,úwÿ@ýWûl,úwÿ@ÿ—ü_±1Õÿ<ç?Ðÿ!ÿWl,úwÿ€þ%àÿŠM¡ý¿àü‡SþS®9ÿK ÿ56ý—ó]¾ÿçœéÿ”Àûl¶ëù0ˆQá‹ý_éìÿêñ)°¬9ÿW÷
 :ÿ‹ç¿„«ôX`,úwÍÿâýO÷¿±±èß%ÿë¼ÿ×äH ÿ+6ý{æeüŸ”‹þ]ó¿Èÿ@ý76¦úŸgþþo	Õ‡ž@`,ú/çÿºÜÿÇ9@è_Ab hh
-íÿåü_éìÿÂÿ)ù±±è¿œÿërþWÎýKïÿ‘|\¶ë?9å¥ÉÿÕâÿR`Y×ü/î%ÿ‹þ]ó¿Ð¿ü_±±è¿œÿëõþß 	Ÿ>íÇç6O‚€XôïšÿÅýöÿØXôïšÿEýWþ¯Ø˜êžù_ôJ ÿ+6ý»æ¡	¨?6…öÿ‚ù_iòáÿ–@þWl,úw™ÿxÎÿâþOCªI Ì"ýÿ<ÜÜ.v{½fTøBÿWÓÏ‚ñÕ“ÿ%aùú–{þ^²|ý»¾îšáù_u©bý¬]ÿÿyû?ï~=¬úŒwÏÿ}ó¼þM5ú¿ëDþ“†ÿǰªÿ•þëÿ~û?ÿ_‡ãîÇÿé¿RÕ^å¾û¯ïÿçÿåüßý_ÝÝþ?ww·O×ÿ—ÇÛÛñQ·ãý¿÷ÿ§CÖêx
-xó]ÿ‹åïÿ]_åñü_Wôk˜—àŸ¯_§F0dŠuú_>óý%«Îu{:ÿUôHX»þÞç¿úTÿ©óß4œÎxÕ翊óßgÖêßÿüwzÿ-aè_Àóùoü3ž‘u(Öé¿Ôÿº©þÇùOÂÚõ÷¯ÿ5Óùû?	§3^ýÆù¯æü÷ß™µúw?ÿõiªÿ‘ÿ,a>öáÿ‰É:ý/Ÿùõ’U翾âþWÈÚõw?ÿ¥éþ·ãù/átÆkÞ8ÿ5œÿþ;³VÿÞç¿áÿNõ?ú¿%Ì×¾œÿ      þ{óÿ6Dµ À+ 
\ No newline at end of file
+‹ 0Ï9K íýÑn˲®‹íëóë†à̬Ê,ê\‚aÁ°áûš(5)А¶šh¶¶-?½«ºº8©î-²ª"#ÆŽïÃZs
+è‰þ•Y™üQÚ¯ý÷ûíÏôœv}Ú¥ãÿé¿Õ&t9ÿŽ]§ÿ?¶íéßgþ[Œ)¤B›ÿbÓ¤î¿ýW®þ¿ä¯çcø¯ÿúo_ö?¾ñ÷îÏÿƒl)×õþý\÷w`Yýc“ciÛ®õoc©¿©ÿÝýÿxÜÝWú=X^ÿ®éÂðŸÇ\B¦þ¼SÿáÏÇûÿ.ü5X£ÿ‡ÿ~Pj©¿Ëê¿{ú%øX£ÿÒucý»†ç¿	Ëë?ü˦߂õ/MÖÿJ¡þ&¬­ÿqÿ´ÿ±ø½æaÅó?wí ÿ”r›¨¿›ëüv¸ïïnŸ¿ßÚÛßÌXà2Õû^ÿ”.êŸK
+ÿí¿‚Åà¼þs	þJÇ?üoÿGÿ/K6ëÿéÛïçÇ]ÿãö©ß}ïîoïþöïê?üGÿÏAÿ¥
+ú· ¡w×lÖÿnxKó¯Y¯ÿ6dÖXï}#Óÿ’Ýÿºý;lü‡ý*ý[ðjÿÿõ+ûw¬Õÿ®ß}»_y
+¸ìü'ïü]vþƒþc9ÿ7a[ýÞÝÿÓÒ_ƒ5ç¿Ã?Cý›¹ÿ7ATÿçÇÿßý‚Ïܾ¹ÿϧú·M“þ›®kXÿ-H¹üßXòý"ÒÿËà œûÛ§þp|<>î¯4ô¾þÓ…þù'ôoADü®éÿøû©ÊúÃôßt§ó¿Ð¢þß?¿>ÞßñpŠHÿ?îÿÇý÷?cýú߯ÄùŸ	ÜÿùF¤ÿÝþÛýáþçî÷ôð·ã€÷õß\îÿCÃý¿	¥åàÙùß·þpw;ü7Ãàùø·Ïx_ÿí…þKì¸ÿ7!üÃÀ3"ýÿúßÏ·û¯·ýóó~÷ØÿÇãñ÷õgl8ÿk[ôoÂ
+êwM­õÿ¿÷OýŒQáËü?]éÂxþWþ_æüBÎãx¸B¤ÿŸ¿þû—ûøx¾?þ]öÿû?räÐ3ýÿWÓNþ/ü&ˆê_ÍÿÕ^Üÿ6]Wxþ[Ð$ì_žé_ÃÿuÒ×5èßü_¾é¿–ÿëµÿ{ö¡>õÇžG€_Dú×ðMúcþúׇõß7"ýkø¿¦ýhéÿ2ÿ—odç
+þ¯“þKìèÿ0ÿ—oDú×ðMëÿø×Ñ¿ø¿|Ský¯åÿšîËøJ€þ
+˜K@þ«ODú¯æÿº|ÿ/¡¡ÿÓÞÿ}#У“ÿuö1ÿÇQý«ù¿ÊuþÏnâG`Žé_3ÿ‹÷?¸ÿõHÿù_óúOÿŸ	äùF¤Íü/üŸ&4(ß5"ý+æ‘ÿa翾‘ÿ)æáÿ6!|èx 8F¤ÿjþ¯«õ¿mÉÿ0!äï™Zë5ÿW<û¿ðš0—€ù>鿚ÿërþW	
+ú7a¼ÿGò~è?êä…ÉÿñY ª¿fþ÷¿&ÿå‘þ5ó¿Ð¿	ø¿|#Ò5ÿ×åúß’ÿnÄçŸÏÇÃ¯ÝøØæIà‘þ5ó¿¸ÿ1õß7"ýkæqþkþ/ßÈÎÿó¿èÿ4ü/߈ô¯™ÿ…þM@ý¾©µþ×Ëÿšüþæÿå‘þ5æ?Îù_œÿ›	 žY¥ÿ²Ôñõ'£Â—ú¿šTý‡2®ÿø¿ôYYÿãþiÿcÿð{Õ/Âòú—\ºÑÿŸÚBýMØZÿã·Ã}wûüøeøÒÞþb–ïÿçúçÌü?^íÿ§m»WlÕÿ‹õï©ß}ïîoïþúïê?üGÿÏqÿߐÿbïû¾ÙªÿÝþð¦æ_³^ÿMWxÿ7ü'߈ô¿h÷¿nÿßLûÿñÿ˜p±ÿÿú•ç+Vê:þ_ùËÎBI¡‹Sÿw,cþ3ç?úlªÿéú'-þ5Xsþ;ü3îÿÂxþCýõ‘Ôaûï†ü‡¦‹øÿMH¹Ð ì‰þ¶ÿn™ÿ0¬èßú|#ÑÿÂößuóÎù‰ù/&0ÿÁ7ý/lÿÝ2ÿþ?#óDÿÛ7ä?—.sÿoý¿¾ÿ-kÿÝ4ÿüèÿõDÿÛ·œÿ5ý›@÷o*­ÿoµÿ.÷ÿ¤ámý?ë¿
+s	ÎþŸœy¸B¢ÿ…í¿öÿ¹ãþφ9ôÌvýÿWÓNþ/ü&Hê_Ïÿu=ÿ!’ÿdó|#Ñ¿ŠÿkÊ+ý›€ÿË7ýWó½öÏþ/ôo§þØóð‹Dÿ*þ¯óü—Lþ£	¬ÿ¾‘è_Åÿ5å?v…þ/ðùFtþ§áÿ:ψô˜€ÿË7ý«ø¿¦ó¿¦ ðù¦Òú_Çÿõrÿ›»Äþß„¹ä¿úD¢ÿzþ¯Ë÷ÿÜeú?Màýß7Ûõß(åý_-þ/$õ¯çÿ*×ù_<ÿM¸‰q€9F¢Õü/ÞÿLàþ×7ý«äÍë?ù&ÿå‰þUó¿
 ðšÀüßHô¯šÿEÿ¿	œÿúFtþ§˜ÿñ›>t< #Ñ=ÿ×åúß5…übAþž©´þ×óųÿÿ§	s	˜ÿç‰þëù¿.çå.£Æû$ï—íúJù_aòü_HꯚÿÅý¯	äùF¢Õü/ôoþ/ßHô_Ïÿu½þ'ôoÂçŸÏÇÃ¯ÝøÜæIà‰þUó¿¸ÿ1õß7ý«æqþkþ/߈Îÿ4ó¿èÿ4ü/ßHô¯šÿ…þM@ý¾©´þWÌÿšü‘þæÿå‰þUæ?Îù_œÿ›	 žY¥ÿöf±çë5£Â—ú¿šTý‡R
+þ/ÖÖÿ¸ÚÿØ?ü^ó‹°¼þ¥¤ñ?O)·øÿLØ\ÿã·Ã}wûüøeøÖÞüf–ïÿçúç‚ÿφ¡ñÕþ?v®Ø¬ÿóßS¿ûÞ?Üß>Þýí3ÞÕxÑ~Œçÿ-çÿ6Ðþé›Íúßíoiþ5ëõßæÿÚÀzï™þ—ìþWíÿs۝öÿMÀÿcÂØòÍþß/kõ?] ¬ûŒeç?¡¤ÐÅ©ÿ;v)rþcÁ¶úŸ.€ÒÒ_ƒ5ç¿9úcäü×Qý6 ŸnøVå?´ã¯ë¿)€#ÒÿÂà÷õ5ÿ¡kðÿ˜@ÿoDú_Ø ü®þ_Ï8÷ÿEúÿL`þƒoDú_Ø ¼~ýocÃü'óHÿ€ß×ÿUþóð÷Ñ¿ôÿúFvþ·¬ø}ý_Ïè¸ÿ7þ_߈ô¿°xÃù_Ëü7èþñM­õÿ­àQáû»á_ãú?n	п!ä<– ÿODú_Ø ¼aÿ¸ÿ³!GN =#ÐPñ5íÉÿ…ÿÏQý«ù¿.óÚ€ÿÛæ?øF¤
+ÿ×”ÿÖµèßü_¾é¿–ÿëµÿ{ö¡>õÇžG€_Dú×ðMú
+ù/&°þûF¤
+ÿ×´ÿ™þ/ðùFvþ§àÿšæ?¤@ÿ‡	ø¿|#Ò¿†ÿkZÿ[æ¿Ù€ÿË7µÖÿJþ¯óýo[BÑ¿ä¿úF¤ÿjþ¯«ù¡¥ÿÓÞÿ}#УâÿŠgÿWÂÿe¨þÕü_å:ÿ‹ç¿	7ñ#0Ljô¯˜ÿÕòþg÷¿¾é_#ÿk^ÿéÿ3ü/߈ô¯™ÿ…ÿÓ„å»F¤Íü/ò?Làü×7²ó?Åü/üß&„ Ljô_Íÿuµþ·-ù&D€º¦Öú_ÍÿÏþ/üŸ&0ÿÏ7"ýWó]Îÿ*¡Eÿ&Œ÷ÿHÞ/ýGü¯8ÍìðY ª¿fþ÷¿&ÿå‘þ5ó¿Ð¿	ø¿|#Ò5ÿ×õúÑ¿	Ÿ>¿vãc›'CDú×ÌÿâþÇÖ߈ô¯™ÿÅù¯	ø¿|#;ÿSÌÿ¢ÿÓò¿|#Ò¿fþú7õû¦Öú_/ÿ+Nóñ›@þ—oDúטÿ8çqþoBL$€zf•þ›Å‘_0*|©ÿ«IeÐ(%àÿ²`mýû§ýýÃï5¿Ëë?”½Ÿÿ)ó_¨¿>›ëüv¸ïïnŸ¿ßÚÛßÌòýÿ\ÿ\¸ÿ·a. ûŸlÖÿ‹÷ï©ß}ïîoïþöïê?¼è??ÆýËû¿
+œÿùf³þwûÃ[šÍzý·þoXï}#
 Óÿ’ÝÿªýnÛñý?§Žý¿	S¾~eÿúŸÎÿ×}ƲóŸPRèâÔÿ»qþ7ç?úl«ÿéþ'©ôÿ¦0õÿrþk‚¨þÕú/óš®ÃÿcBÊ…`Ljô¯8ÿ¡Áÿoý?¾é_cþÜÿAþ»	ÌðHÿŠóç&þæ‘þç?4Üÿ›@ÿ¯odçzó
+÷ÿ&Ðÿë‘þ5úÏóÈÿ±îßÔZÿ«ôÿ¦áM 9ùºŽùÏ&Lè{ü?>é_£ÿ÷<ÿû?räÐ3ýùíäÿÂÿg‚¨þjóš®cþ¯	ÌðHÿŠóôoþ/߈ô_ËÿõÚÿ=û¿Ð¿	ŸúcÏ#À/"ýkÎàü×Ö߈ô¯8ÿ¡¥ÿËü_¾‘ÿ©Íˆý&àÿòHÿŠóZôoþ/ßÔZÿëÍh§ùìÿM˜€ÿË'"ýWó]¾ÿ—ÐÐÿiïÿ¾èñ0ˆQá‹ý_ñìÿjñY ª5ÿW¹ÎÿâùoÂMüˆÌ1"ýkæñþg÷¿¾é_#ÿk^ÿÉÿ0ü/߈ô¯™ÿ…ÿÓ„å»F¤Íü/ò?Làü×7²ó?½ü/ò?l: Ž鿚ÿëjýo[ò?Lˆù{¦Öú_ÍÿÏþ/üŸ&L`þŸWDú¯æÿºœÿUBƒþMïÿ‘¼_ú:ù_qòEü_ˆê¯™ÿÅý¯	äùF¤Íü/ôoþ/߈ô_Íÿu¹þ·£%ýðùçóñðk7>¶y8D¤Íü/îL`ý÷Hÿšù_œÿš€ÿË7²ó?Åü/ú?M ÿË7"ýkæ¡P¿oj­ÿõò¿âäÿÂÿmÂ\ ü_>é_cþãœÿÅù¿	1‘ ê™Uú7K-_0*|©ÿ«IãüçP
+óMX[ÿãþiÿcÿð{Í/Âòú—|ú{)å–ú›°¹þÇo‡ûþîöùñËð­=¼ùÍ,ßÿÏõÏ%qÿgÂ\‚Æ-ûwlÖÿ‹÷ï©ß}ïîoïþöïê?üGÿÏqÿßFôo;٬ÿÝþð–æ_³^ÿmÈä?š€ÿÇ72ý/Ùý¯Ûÿ·iìÿÌ©ÿd«ýÿׯìÿݱVÿÓùÿºÏXvþJ
+]œú¿ãðÎ,ØVÿÓýORéÿ==ÿ›áÿ£þˆê_­ÿ÷2ÿ¡é:ò_MH¹Ð ì‘þ5ç?àÿ3÷߈ô¯1ÿþ_S˜ÿà‘þ5ç?pþg÷¾é_qþùÏ6ÐÿëÙùŸâüîÿM ÿ×7"ýkôÿÎóп	tÿø¦Öú_¥ÿ7…ñèôÿtïÿ&Ì%ø'„œÇ?ð<p…Hÿý¿óüîÿLÈ‘@Ïôtæ?´“ÿÿŸ	¢ú«Í;yþ[Àü߈ô¯8ÿ¡Eÿ&àÿòHÿµü_¯ýßçõ?¢>õÇžG€_Dúלÿ@þ»	¬ÿ¾é_sþý_&àÿòìüOqþý&àÿòHÿšóп	ø¿|Ský¯7ÿ¡æ?°ÿ7a.ù¯>鿚ÿëòý¿„ÿ§	¼ÿûF ÿFÅÿÏþ¯ÿ—¢úWó•ëü/žÿ&Üď8À#Ò¿fþï&pÿë‘þ5ò¿¦üŸá?Cÿÿå‘þó¿üŸ&4(ß5"ýkæ‘ÿa翾‘ÿ)æáÿ6!|èx 8F¤ÿjþ¯«õüëè߀X¿gj­ÿÕü_ñìÿÂÿiÂ\æÿùD¤ÿjþ¯Ëù_%4èß„ñþÉûE ÿ¨“ÿÅüGKDõ×Ìÿâþ×ò¿|#Ò¿fþú7ÿ—oDú¯æÿº^ÿ#ú7áóÏçãá×n|ló$pˆHÿšù_Üÿ˜Àúï‘þ5ó¿8ÿ5ÿ—odçŠù_ôš@þ—oDú×ÌÿBÿ& ~ßÔZÿëåMþ@ÿ‡	s	Èÿò‰HÿóÏù_ÜÿÙ	 žY¥ÿ´Ôñõ'£Â—ú¿šTý‡Üµø¿,XYÿãþiÿcÿð{Õ/Âòú—\Æÿ>¥Sþ3õ×gkýß÷ýÝíóã—áK{xû‹Y¾ÿŸëŸsâþÏ„Wûÿi›ÆnÀ[õÿbý{êwßû‡ûÛÇ»¿~Æ»úÿÑÿðcÜÿ7‰÷xß÷ÍVýïö‡75ÿšõúo†ôoþ߈ô¿h÷¿nÿßtcÿwNÌÿµábÿÿõ+ÏW¬Ôÿtü¿ò3–ÿ„’B§þïXùÿ&lªÿéúgùaðšóßáŸqÿšDý-Ôaûï†ü‡¦#ÿņ”
+ÀŽ‘èaûï–ù…ùß6ðþï‰þ¶ÿ®›ÿpòÿ4]Äÿkó|#ÑÿÂöß-óBËùŸ	„¿ùF¢ÿ…í¿òŸK—¹ÿ7þ_߈Îÿ–µÿnšÿ¸ÿ7þ_ßHô¿°ýwËù_“Ñ¿	tÿø¦ÒúÿVûïrÿOþØŒý?¹cý·a.ÁÙÿ“3ÏW
 Hô¿°ýwÃþ?wÜÿِ#'€žÙ®ÿ ãÿjÚ“ÿÿŸ
+’ú×ó]æ?4ùÏ60ÿÁ7ý«ø¿¦ü·’Ñ¿	ø¿|#Ñ5ÿ×kÿ÷yýOèß„Oý±çà‰þUü_çù/Ìÿ¶õß7ý«ø¿¦üÇ.Óÿeþ/߈Îÿ4ü_çùþðùF¢ÿ×tþ×dôoþ/ßTZÿëø¿^îsÙÿ›0—€üWŸHô_ÏÿuùþŸÇ¿†þ
+àýß7Ûõß(åMþ¯&àÿ²@Rÿzþ¯r•ÿEþ§
+7ñ#0ÇHô¯šÿÅûŸ	ÜÿúF¢•ü¯yý'ÿÃò¿|#Ñ¿jþþO”ï‰þUó¿èÿ7ó_߈Îÿ4ó¿ð›>t< #Ñ=ÿ×åúß5™übAþž©´þ×óųÿÿ§	s	˜ÿç‰þëù¿.çå®Eÿ&Œ÷ÿHÞ/Ûõ•ò¿Â”ÿÕâÿ²@RÕü/îM ÿË7ý«æ¡ðùF¢ÿzþ¯ëõ?¡>ÿ|>~íÆç6O‡Hô¯šÿÅý	¬ÿ¾‘è_5ÿ‹ó_ðùFtþ§˜ÿEÿ§
+äùF¢Íü¯‚þM@ý¾©´þWÌÿšü‘þæÿå‰þUæ?Îù_œÿ›	 žY§ÿå3_3*|©ÿ«IãüçP2þ/ÖÖÿ¸ÚÿØ?ü^ó‹°¼þ%weôÿ§1–ú°¹þÇo‡ûþîöùñËð­=¼ùÍ,ßÿÏõÏÿŸ
+¯öÿ1Ž`7àŠÍú1ÿ=õ»ïýÃýíãÝß>ã]ý‡ÿèø1žÿ·ý›@ó‡o6ë·?¼¥ù׬×ZÎÿL@ÿ¾‘éÉîÝþ¿M§óÿÄýŸ
+¯öÿ_¿²ÿwÇZýO ë>cÙùO()tqêÿŽÝ8ÿó}¶Õÿt”–þ¬9ÿͧçsÊÿ¢þúˆê¿°øt÷*ÿ¡é
+ùï&¤\h vŒHÿ€ß×ÿÕü‡.Ñÿcý?¾éað»ú=ÿáÜÿÛÑÿcó|#ÒÿÂàõëç&pþï‘þ6 ¿¯ÿ«üçÐpÿoý¿¾‘ÿ-k ~_ÿ×ó
+÷ÿ&Ðÿë‘þ6 o8ÿkôoÝ?¾©µþ¿Õ <*|iÿowêÿ)ã+ú7`.Á?!ä<þç+Dú_Ø ¼aÿ¸ÿ³!GN =#ÐÿâfàQáËç?´“ÿÿŸ	¢úWó]ç?wÌÿ6ù¾é_Ãÿ5å¿u
+ú7ÿ—oDú¯åÿzíÿ>ç¿ôo§þØóð‹Hÿþ¯Iÿqœÿ‡þõaý÷Hÿþ¯iÿú¿LÀÿåÙùŸ‚ÿë<ÿ¡Ðÿaþ/߈ô¯áÿšÖÿ¶Aÿ&àÿòM­õ¿–ÿkºÿÍ]Çþß„¹ä¿úD¤ÿjþ¯«ù¡¡ÿÓÞÿ}#УâÿŠ“ÿkœÿˆÿKQý«ù¿ÊUþWÇóß„›ø˜cDú×ÌÿâýÏî}#Ò¿Fþ×¼þ“ÿaù_¾é_3ÿÿ§	
+ÊwHÿšù_ôÿ›Àù¯odçŠù_ø¿M: Ž鿚ÿëjýþˆþ-ˆù{¦Öú_ÍÿÏþ/üŸ&Ì%`þŸODú¯æÿºœÿU†- ú·`¼ÿGò~è?êä1ÿÑQý5ó¿¸ÿ5ü/߈ô¯™ÿ…þMÀÿå‘þ«ù¿.×ÿv|$ >ÿ|>~íÆÇ6O‡ˆô¯™ÿÅý	¬ÿ¾é_3ÿ‹ó_ðùFvþ§—ÿEÿ§
+äùF¤Åü¯ý›€ú}Ský¯—ÿ&ÿý&Ì% ÿË'"ýkÌœó¿8ÿ7!&@=³Jÿeqä׌
+_êÿjNóŸC)
+þ/ÖÖÿ¸ÚÿØ?ü^ó‹°¼þCÙOû¿”ÇùoÔ_ŸÍõ?~;Ü÷w·Ï_†oíáÍofùþ®.ónn^öÿì\±Yÿ/Þ¿§~÷½¸¿}¼ûÛg¼«ÿð¢ÿ<ü÷ÿm$ÿź¿}³Yÿ»ýá-Í¿f½þېyÿ7ü'ßÈô¿d÷¿jÿŸsÏÿrêðÿ™05}³ÿ÷ÊZýOçÿë>cÙùO()tqêÿŽÃ8ÿ±`[ýO÷?I¥ÿ7Mý¿‘ó_Dõ¯Öÿ{™ÿÐt¬ÿ6¤\h vŒHÿŠóòM ÿÇ7"ýk̘û™ÿbó|#Ò¿æüîÿM üÍ7"ý+Îh¹ÿ7þ_ßÈÎÿôæ?ÿgý¿¾é_£ÿ÷<ÿ¡Eÿ&Ðýã›Zë¥þß.ætêÿœÿ›Ð÷S	ðÿøD¤þßóüîÿlÈ‘@Ïôtæ?´“ÿÿŸ	¢ú«ÍhÇ_	žÿ0ÿÁ7"ý+Î ÿÍü_¾é¿–ÿëµÿû¼þGôo§þØóð‹HÿŠóòM`ý÷HÿŠóZú¿LÀÿåÙùŸâüú?LÀÿå‘þ5ç? ðù¦Öú_oþC;ù¿Øÿ›@þ«oDú¯æÿº|ÿ/Ì4‚÷ßô¿xĨðÅþ¯xöuø¿,Õ¿šÿ«\çñü7á&~Äæ‘þ5ó¿xÿ3û_߈ô¯‘ÿ5åÿÿú·€ü/߈ô¯˜ÿÕàÿ4ù¾é_3ÿ‹ü8ÿõìüO1ÿÿ·	á =#Ò5ÿ×Õú?þuôo@,Èß3µÖÿjþ¯xöáÿ4ù¾鿚ÿërþW	
+ú7a¼ÿGò~è?êäÅÉÿÕâÿ²@TÍü/îM ÿË7"ýkæ¡ðùF¤ÿjþ¯ëõ?¢>ÿ|>~íÆÇ6O‡ˆô¯™ÿÅý	¬ÿ¾é_3ÿ‹ó_ðùFvþ§˜ÿEÿ§	äùF¤Íü/ôoê÷M­õ¿^þWœü_ø¿M ÿË7"ýkÌ<çqÿgCL$€zf•þóRÇןŒ
+_êÿjRôrGþ—	+ëÜ?íì~¯úEX^ÿ’K7úS›êoÁÖú¿îû»ÛçÇ/×öðö³|ÿ?×?¯¬ÿÌ%øg®»WlÕÿ‹õï©ß}ïîoïþúïê?üGÿÏqÿß$òßLà}ß7[õ¿ÛÞÔükÖë¿é
+÷ÿ&°ÞûF¤ÿE»ÿuûÿ¦û¿sŠœÿ›p±ÿÿú•ç+Vê:þ_ùËÎBI¡‹Sÿw^ 8ÿ±`SýO×?iñ¯ÁšóßáŸqÿÆüoꯏ¤þÛ7ä?4ý?6¤\h vŒDÿÛ·Ì(™ügèÿñDÿÛ×Í8ùš.‘ÿló|#ÑÿÂöß-óBËùŸ	œÿûF¢ÿ…í¿òŸËx\„þ
+ ÿ×7¢ó¿eí¿›æ?ÿlý¿¾‘èaûï–ó¿&£èþñM¥õÿ­ößåþŸ4ü±M£ÿ§£ÿ׆¹gÿOßó<p…DÿÛ7ìÿsÇýŸ
+9rè™íú:þ¯¦ü_øÿLÔ¿žÿë2ÿ¡é"ù¯&0ÿÁ7ý«ø¿¦ü·’Ñ¿	ø¿|#Ñ5ÿ×kÿ÷ìÿBÿ&|êù8F¢ÿ×yþù¯6°þûF¢ÿ×”ÿØú¿LÀÿåÑùŸ†ÿë<ÿ!Òÿaþ/ßHô¯âÿšÎÿš‚þMÀÿå›Jëÿ×Ëýoîûæÿê‰þëù¿.ßÿs—ñšÀû¿o¶ë¿QÊÿ:û¿Èÿ7ARÿzþ¯rÿÅóß„›ø˜c$úWÍÿâýÏî}#Ñ¿Jþ×¼þ“ÿaù_¾‘è_5ÿÿ§	
+ÊwDÿªù_ä˜Àù¯oDçšù_ø¿M: Ž‘è¿žÿërýïšBþ‡	± ÏTZÿëù¿âÙÿ…ÿÓ„¹Ìÿó‰Dÿõü_—ó¿r—Ñ¿	ãý?’÷ËvýG¥ü¯Óýßð
+€ÿËIýUó¿¸ÿ5ü/ßHô¯šÿ…þMÀÿå‰þëù¿®×ÿ„þMøüóùxøµŸÛ<	"Ñ¿fþùï6°þûF¢Õü/ÎMÀÿåÑùŸfþýŸ&ÿå‰þUó¿Ð¿	¨ß7•ÖÿŠù_“ÿ#ÒÿaÂ\ò¿|"Ñ¿ÊüÇ9ÿ‹ób"Ô3«ôß´‹=_¯¾ÔÿÕ¤2è?”1ÿÿ—>këÜ?íì~¯ùEX^ÿ¡ì¡êŸòxÿKýõÙ\ÿã·Ã}wûüøeøÖÞüf–ïÿçúçÂüwÎû¯öŸ¹ì\±Yÿ/æ¿§~÷½¸¿}¼ûÛg¼«ÿð¢ÿ<üÏÿ[ú¿màüÏ7›õ¿ÛÞÒükÖëÿø|#Óÿ’ÝÿªýnÛñý?§Žó?¦|ýÊþß'kõ?] ¬ûŒeç?¡¤ÐÅ©ÿ;v±åüÇ‚mõ?] ¥¥¿kÎs:õÿÿ/õ·@Tÿ…
+ÀÓ	Óšü‡¦ë8ÿ3!åB°cDú_Ø ü¾þ¯æ?t
+þxÿ÷Hÿ€ßÕÿëùçþ¿@þ»	ÌðHÿ€×¯ÿm¤ÿßü¾¾éaðûú¿Ê
+÷ÿ&ÐÿëÙùß²à÷õ=ÿ¡ãþßú}#ÒÿÂà
+çm‹þM ûÇ7µÖÿ·€G…/òÿ¤áM §þ¿Âû¿	çû׌ÿÇ'"ý/l Þ°ÿÜÿِ#'€žè?¨ø¿švòáÿ3ATÿjþ¯ëüçŽü˜ÿà‘þ5ü_Sþ[× ðùF¤ÿZþ¯×þïÙÿ…þMøÔ{~é_Ãÿ5é?6ý[Àúï‘þ5ü_Óþ?´ô™€ÿË7²ó?ÿ×yþCGÿ‡	ø¿|#Ò¿†ÿkZÿÇ¿Žþ
+Àÿå›Zëÿ×Ëýo	ä¿ÚpÞ‘ÿê‘þ«ù¿®æ?†ÿ§	¼ÿûF ÿFÅÿÏþ/òÿMÕ¿šÿ«\çñü7á&~Äæ‘þ5ó¿xÿ3û_߈ô¯‘ÿ5¯ÿä˜@þ—oDú×ÌÿÂÿiBƒò]#Ò¿bþù6pþëÙùŸbþþo‡Ž€cDú¯æÿºZÿÛ–übAþž©µþWóųÿÿ§	S˜ÿç‘þ«ù¿.ç•РÆû$ïþ£NþWœü_	ÿ—¢úkæqÿkù_¾é_3ÿý›€ÿË7"ýWó]®ÿí°aDÿ|þù|<üڍmžé_3ÿ‹ûXÿ}#Ò¿fþç¿&àÿòìüO1ÿ‹þOÈÿòHÿšù_èßÔï›Zë½ü¯8ù¿ð
 ›pÞ‘ÿå‘þ5æ?Îù_œÿ›	 žY¥ÿ\–Z¾þ`TøRÿW“Ê ÿP
+ù_&¬­ÿqÿ´ÿ±ø½æayýKi†wÁa?˜ü&l®ÿñÛ᾿»}~ü2|ko~3Ë÷ÿsýs‰ô›ãTöÿ>Ù¬ÿïßS¿ûÞ?Üß>Þýí3ÞÕxÑ~Œûÿ6’ÿfÝß¾Ù¬ÿÝþð–æ_³^ÿmÈÜÿ›Àzï™þ—ìþWíÿsãù_NôÿØðõ+ûϬÕÿtþ¿î3–ÿ„’B§þïØ¥ÀùÛêºÿI*ý¿)0ÿÁQý«õÿ^æ?ÐÿkEÊ…`Ljô¯9ÿügèÿñHÿóÎý¿ÜÿÙÀü߈ô¯8ÿ¡Áÿkáo¾é_sþ÷ÿ&ÐÿëÙùŸâüîÿM ÿ×7"ýkôÿÎóп	tÿø¦Öú_©ÿ·~Ný¿Üÿ™óTü?>é_£ÿwžÿÀýŸ	9rèþƒÎü‡öäÿÂÿgƒ¨þjóÚñ•ç¿ÌðHÿŠó˜ÿiþ/߈ô_ËÿõÚÿ=û¿Ð¿	ŸúcÏ#À/"ýkÎ ÿÕÖ߈ô¯9ÿûðùFvþ§6ÿ!ú?LÀÿå‘þç?dôoþ/ßÔZÿëÍhñBþ«oDú¯æÿº|ÿ/¡¥ÿÓÞÿ}#УâÿŠgÿWÄÿe¨þÕü_å²ÿŸù_FÜď8À#Ò¿fþï&pÿë‘þ5ò¿æõŸüÈÿòHÿšù_ø?MhP¾kDú×Ìÿ"ÿÃÎ}#;ÿSÌÿÂÿmBøÀ@ψô_Íÿuµþ·-ù&Ä‚ü=Ský¯æÿŠ“ÿ‹ü˜ÿç‘þ«ù¿.ç•ТÆû$ïþ£NþWœæ?ü_ˆê¯™ÿÅý¯	äùF¤Íü/ôoþ/߈ô_Íÿu½þGôoÂçŸÏÇÃ¯ÝøØæIà‘þ5ó¿¸ÿ1õß7"ý+æ‘ÿaþ/ßÈÎÿó¿èÿ4ü/߈ô¯™ÿ…þM@ý¾©µþ×ËÿŠSþþoÈÿòHÿóçü/ÎÿMˆ‰PϬÓÿÍRË׌
+_êÿjRôJéðY°¶þÇýÓþÇþá÷š_„åõ/¥‰£ÿ7妡þl®ÿñÛ᾿»}~ü2|ko~3Ë÷ÿsýs‰¼ÿ›Ð¶ìÿ=³Yÿ/Þ¿§~÷½¸¿}¼ûÛg¼«ÿð¢ÿ<ü÷ÿmäýߺ¿}³Yÿ»ýá-Í¿f½þېñÿ˜€ÿÇ72ý/Ùý¯ÚÿçÆó¿Üpÿoýß¾Y«ÿéüÝg,;ÿ	%….Nýß±	œÿ°­þ§ûŸ¤Òÿ›ÂÔÿËù¯	¢úWëÿ½Ì`þƒ)€#Ò¿âüò_làýß7"ýk̘ûÉ7ù¾é_sþþ?óHÿšó¸ÿ7þ_ßÈÎÿç?pÿoý¿¾é_£ÿ—ù¦Ðýã›Zë•þß4<'š“ÿ¿ë8ÿ3!ç©ø|"Ò¿Fÿ/óLÉ‘@Ïôtæ?´'ÿþ?DõלÿÀü_˜ÿà‘þ5ç? ðùF¤ÿZþ¯×þïÙÿ…þMøÔ{~é_sþC‡þ-`ý÷Hÿšóèÿ2ÿ—odçŠó¸ÿ5ÿ—oDúלÿ€þMÀÿå›Zë½ùíÉÿAþ«
+ä¿úF¤ÿjþ¯Ë÷æ?XÁû¿oúoTü_ñìÿ"ÿßQý«ù¿ÊuþÏnâG`Žé_3ÿ‹÷?¸ÿõHÿù_óúOþ‡	äùF¤Íü/üŸ&4(ß5"ýkæ‘ÿa翾‘ÿ)æáÿ6!|` gDú¯æÿºZÿÛLþ‡	± ÏÔZÿ«ù¿âÙÿ…ÿÓæÿùF¤ÿjþ¯Ëù_%´èß„ñþÉûE ÿ¨“ÿ'ÿWÀÿe¨þšù_Üÿš@þ—oDú×ÌÿBÿ&àÿòHÿÕü_×ëDÿ&|þù|<üڍmžé_1ÿ‹üwXÿ}#Ò¿fþç¿&àÿòìüO1ÿ‹þOÈÿòHÿšù_èßÔï›Zë½ü¯xòüß&ÿå‘þ5æ?Îù_œÿ›	 žY¥ÿvñÈÇ?¾ÔÿÕ¤2è?”\ðY°¶þÇýÓþÇþá÷š_„åõ/%6i¨Ê©¥þl®ÿñÛ᾿»}~ü2|ko~3Ë÷ÿåüR^ Xÿ-8Õ"²ÿ÷Êfý¿xÿžúÝ÷þáþöñîoŸñ®þËþóðcÜÿ·Ìÿµ!£w×lÖÿnxKó¯Y¯ÿ–÷#Xï}#Óÿ’Ýÿªýn˨ÿœ
+çÿ&Œ_ÿØÎþß'kõ?ÿ¯ûŒeç?ax÷ïâÔÿ»qþç?úl«ÿéþ'©ôÿ¦pêÿ
+œÿš ªµþßËü‡¦ë8ÿ3!åB°cDúWœÿØÿ›@ÿoDúטÿ0ç0ÿÅæ?øF¤Åù‰þ?óHÿŠó˜ÿbý¿¾‘ÿéÍ(Üÿ›@ÿ¯oDú×èÿ=Ïhп	tÿø¦Öú_©ÿ·eÔî:ôoÂéö5ãÿñŠHÿý¿çùÜÿِ#'€žèq3ð¨ðåóÚ“ÿÿŸ
+¢ú«ÍhºŽü'˜ÿà‘þç?4èßü_¾é¿–ÿëµÿ{ö¡>õÇžG€_DúWœÿ
+ú·€õß7"ý+Î`þ‹
+ø¿|#;ÿS›ÿ;ú?LÀÿå‘þç?´èßü_¾©µþ×›ÿÐNóØÿ›pªù¯n鿚ÿëòý¿„†þOxÿ÷@ÿŠÿ+žý_	ÿ—¢úWó•ëü/žÿ&Üď8À#Ò¿bþWÃûŸ	ÜÿúF¤ü¯yý'ÿÃò¿|#Ò¿fþþO”ï‘þ5ó¿èÿ7ó_ßÈÎÿó¿ð›>t< #Ò5ÿ×Õúß6ä˜ò÷L­õ¿šÿ+žý_ø?M¿~æÿùE¤ÿjþ¯Ëù_%4èß„ñþÉûE ÿ¨“ÿ§ùþ/Dõ×Ìÿâþ×ò¿|#Ò¿fþú7ÿ—oDú¯æÿº\ÿÛqK€þ
+øüóùxøµÛ<	"Ò¿fþ÷?&°þûF¤Íü/ÎMÀÿåÙùŸbþýŸ&ÿå‘þ5ó¿Ð¿	¨ß7µÖÿzù_qšÿˆÿÛ„S-Èÿr‹Hÿóçü/ÎÿMˆ‰PϬÒ^<òñF…/õ5©ú%ãÿ2amýû§ýýÃï5¿Ëë_JÊÍPÿ4n©¿›ëüv¸ïïnŸ¿ßÚÛßÌòýÿ\ÿ\÷&Œ;³±ìÿ}²Yÿ/Þ¿§~÷½¸¿}¼ûÛg¼«ÿð¢ÿ<ü÷ÿm ÿÁÚ?}³Yÿ»ýá-Í¿f½þÛÐrþgþßÈô¿d÷¿jÿŸÛnìÿΉþ¦îoöÿ^Y«ÿéüÝg,;ÿ	%….Nýß±#ÿ߆mõ?Ýÿ$•þßèÿ5DTÿjý¿—ùMÇüOR.4 ;F¤æ?üëáýß7"ýk̘ûñÿšÀü߈ôÏü‡=„¿ùF¤æ?üë¡ÿ×7²ó?æ?üÛ¡ÿ×7"ýkôÿÎóп	tÿø¦Öú_¥ÿ7
+ω8õÿîÿL!ç±ø|"Ò¿Fÿï<ÿû?räÐ3ý/n¾|þC{òáÿ³ATæ?üëaþƒoDúgþÿü_¾é¿–ÿëµÿ›ù¦|ê= ¿ˆôÏü‡=¬ÿ¾éŸùÿzðùFvþÇü‡;ø¿|#Ò?óþõàÿòM­õ¿Þü‡öäÿìÿM ÿÕ7"ýWó]¾ÿ—ÐÐÿiïÿ¾è¿Qñųÿ«Áÿe¨þÕü_å:ÿ‹ç¿	7ñ#0Ljô¯™ÿÅûŸ	ÜÿúF¤ü¯yý'ÿÃò¿|#Ò¿fþþO”ï‘þ5ó¿Èÿ0ó_ßÈÎÿó¿ð›>t< #Ò5ÿ×Õúß¶ä˜ êšZë5ÿW<û¿ðšÀ
 ü?߈ô_Íÿu9ÿ«„ý›0Þÿ#y¿ôuò¿âäÿ
+ø¿,Õ_3ÿ‹û_ÈÿòHÿšù_èßü_¾鿚ÿërýoÇWBôoÀçŸÏÇÃ¯ÝøØæIà‘þó¿È·õß7"ýkæqþkþ/ßÈÎÿó¿èÿ4ü/߈ô¯™ÿ…þM@ý¾©µþ×Ëÿšæ?vø¿M ÿË7"ýkÌœó¿8ÿ7!&@=³Nÿy©åëF…/õ5©ú¥´ø¿,X[ÿãþiÿcÿð{Í/Âòú—’ºá凜[æš°¹þÇo‡ûþîöùñËð­=¼ùÍ,ßÿÏõÏ%qÿgB77ìÿý²Yÿ/Þ¿§~÷½¸¿}¼ûÛg¼«ÿð¢ÿ<ü÷ÿmäþÏÚ?}³Yÿ»ýá-Í¿f½þې9ÿ7ü'ßÈô¿d÷¿êü?§nìÿþEþ›	ôûf­þ§óÿuŸ±ìü'ïü]œú¿c;Î,ØVÿÓýORéÿMaêÿåü×Qý«õÿ^æ?4]Gþ£	)€#Ò¿æüîÿM ÿÇ7"ýk̘ûñÿ™Àü߈ô¯8ÿþ_óHÿŠóèÿµþ_ßÈÎÿôæ?Ðÿký¿¾é_£ÿwžÿ€þM ûÇ7µÖÿJý¿]lÒ4ÿý›Bߏ%Àÿã‘þ5úçùÜÿ™#'€žè?èÌh'ÿþ?DõW›ÿЁç¿ÌðHÿŠóZôoþ/߈ô_ËÿõÚÿ}^ÿ#ú7áSìyøE¤ÍùôšÀúï‘þ5ç?Ðÿeþ/ßÈÎÿç?Ðÿaþ/߈ô¯9ÿý›€ÿË7µÖÿzóÚÉÿÅþßò_}#Ò5ÿ×åû	-ýŸ&ðþïþÿWœü_cþ;þ/}Dõ¯æÿ*—ýÿã¯ÏnâG`Žé_3ÿ‹÷?¸ÿõHÿù_óúOþ‡	äùF¤Íü/üŸ&0ÿÃ7"ýkæÑÿo翾‘ÿ)æáÿ6!|èx 8F¤ÿjþ¯«õ¿mÉÿ0!2 Ô5µÖÿjþ¯xöáÿ4ù¾鿚ÿërþW	
+ú7a¼ÿGò~è?êäÅ)ÿ+ãÿ²@TÍü/îM ÿË7"ýkæ¡ðùF¤ÿjþ¯ëõ?¢>ÿ|>~íÆÇ6O‡ˆô¯™ÿÅý	¬ÿ¾é_3ÿ‹ó_ðùFvþ§–ÿ•èÿ´ü/߈ô¯˜ÿ•Ñ¿	¨ß7µÖÿzù_qòáÿ6ü/߈ô¯1ÿqÎÿâüß„˜H õÌ:ýwK-_0*|©ÿ«IeÐ(¥àÿ²`mýû§ýýÃï5¿Ëë_J†¿—Rn¨¿	›ëüv¸ïïn
 Ÿ¿ßÚÛßÌòýÿ\ÿ\"ûRšJÀþß'›õÿâý{êwßû‡ûÛÇ»¿}Æ»ú/úÏÏqÿߢèþöÍfýïö‡·4ÿšõúoCÆÿcë½odú_²û_µÿÏ9Œç¹áþ߆©û›ý¿WÖê:ÿ_÷ËÎBI¡‹SÿwìRäüÇ‚mõ?Ýÿ$•þߦþ_ÎÿLÕ¿Zÿïeþó¬H¹Ð ì‘þ5ç?àÿ7þ߈ô¯1ÿaîÿ%ÿÝæ?øF¤ÍùøÿL üÍ7"ýkÎàþßú}#;ÿSœÿÀý¿	ôÿúF¤þ_æ?˜B÷oj­ÿUúÓðœ8õÿä®cþ³	}?• ÿODú×èÿeþƒ)9rèþƒÎü‡öäÿÂÿgƒ¨þšó˜ÿkó|#Ò¿æüôoþ/߈ô_ËÿõÚÿ=û¿Ð¿	ŸúcÏ#À/"ýkÎàü×Ö߈ô¯8ÿügðùFvþ§8ÿþðùF¤Íùèßü_¾©µþ×›ÿОü‘ý¿	ä¿úF¤ÿjþ¯Ë÷æ?XÁû¿oúoTü_ñìÿJø¿,Õ¿šÿ«\çñü7á&~Äæ‘þó¿ZÞÿLàþ×7"ýkäÍë?ù&ÿå‘þ5ó¿ðšÐ |׈ô¯™ÿEþ‡	œÿúFvþ§˜ÿ…ÿÛ„ð	€ž鿚ÿëjýo[ò?Lˆù{¦Öú_ÍÿÏþ/üŸ&0ÿÏ7"ýWó]Îÿ*¡Eÿ&Œ÷ÿHÞ/ýGü¯8ÍìðY ª¿fþ÷¿&ÿå‘þ5ó¿Ð¿	ø¿|#Ò5ÿ×õúÑ¿	Ÿ>¿vãc›'CDú×ÌÿâþÇÖ߈ô¯™ÿÅù¯	ø¿|#;ÿSÌÿ¢ÿÓò¿|#Ò¿fþú7õû¦Öú_/ÿ+žüÿ·	äùF¤ùsþçÿ&ÄD¨gVé?Ý,µ|ýÁ¨ð¥þ¯æ4ÿ9”Òâÿ²`mýû§ýýÃï5¿Ëë_Êxð;ìsCþ›	›ëüv¸ïïnŸ¿ßÚÛßÌòýÿ\ÿ\Èÿµa.Á?1²ÿwÈfý¿xÿžúÝ÷þáþöñîoŸñ®þËþssÒi#ç&ÿâ›Íúßíoiþ5ëõ߆Lþ“	4ùF¦ÿ%»ÿUûÿÜ6͸ÿOç&¼ìÿçFpž®X«ÿéüÝg,;ÿ	%….Nýß±£ÿÓ†mõ?Ýÿ$•þߦþ_ÎMÕ¿ZÿïeþCÓ‘ÿfCÊ…`Ljô¯8ÿ¡!ÿÕú|#Ò¿Æü‡9ÿƒþ?˜ÿà‘þ5ç?pÿoçÿ¾
 é_sþ÷ÿ&ÐÿëÙùŸâüîÿM ÿ×7"ýkôÿÎóп	tÿø¦Öú_©ÿ·1Mý¿¼ÿ›0—àŸœ§?ð<p…Hÿý¿çùÜÿِ#'€žè?èÌh™ÿ`ˆ¨þšóÈ4ù¾é_sþú7ÿ—oDú¯åÿzíÿžç? >õÇžG€_Dúלÿ@ÿ§	¬ÿ¾é_qþCKÿ—	ø¿|#;ÿS›ÿ;ú?LÀÿå‘þç?´èßü_¾©µþ×›ÿÐ2ÿÁ¹ä¿úD¤ÿjþ¯Ë÷ÿZüŸ&ðþïþÿWœü_)àÿ²@Tÿjþ¯rÙÿðÿÛp?â sŒHÿšù_¼ÿ™Àý¯oDú×Èÿš×ò?L ÿË7"ýkæáÿ4ù?¾é_3ÿ‹ü8ÿõìüO1ÿÿ·	áCÇÀ1"ýWó]­ÿmKþ‡	± ÏÔZÿ«ù¿âÙÿ…ÿÓ„¹Ìÿó‰HÿÕü_—ó¿Jhп	ãý?’÷‹@ÿQ'ÿ+Nù_ÿ—¢úkæqÿkù_¾é_3ÿý›€ÿË7"ýWó]¯ÿý›ðùçóñðk7>¶y8D¤Íü/îL`ý÷Hÿšù_œÿš€ÿË7²ó?µü¯Dÿ§
+äùF¤Åü¯ŒþM@ý¾©µþ×ËÿŠ“ÿÿ·	s	Èÿò‰Hÿóçü/ÎÿMˆ‰PϬÓZjùúƒQáKý_M*ƒþCÉÿ—këÜ?íì~¯ùEX^ÿ’»n|þ§<>ÿ©¿>›ëüv¸ïïnŸ¿ßÚÛßÌòýÿ\ÿ\ïÿ&¼ìÿÇ-ûwlÖÿ‹÷ï©ß}ïîoïþöïê?üGÿÏqÿßòþo;٬ÿÝþð–æ_³^ÿƒüñÿ˜@þ“odú_²û_·ÿoÓØÿ™SáüÏ„Wûÿ©œç+Öê:ÿ_÷ËÎÂðÎßÅ©ÿ;vãüoÎôÙVÿÓýÏâÃà5ç¿ùôüobàü×Qý«õÿ^æ?4]ÇùŸ	)€#Ò¿âü‡„ÿßú|#Ò¿Æü‡9ÿƒüw˜ÿà‘þç?$ÎÿLàþÏ7"ý+Îh¸ÿ7þ_ßÈÎÿôæ?îÿM ÿ×7"ýkôÿžç?ÿcÝ?¾©µþWéÿMÛ@<ùºÌügæüBÎãx¸B¤þßóüîÿlÈ‘@Ïôtæ?´Óüü&ˆê¯6ÿ¡é:æÿšÀü߈ô¯8ÿ¡Aÿ&àÿòHÿµü_¯ýß³ÿý›ð©?ö<ü"Ò¿âü‡Äù¯	¬ÿ¾é_sþý_&àÿòìüOmþCì
 èÿ0ÿ—oDúWœÿТðù¦Öú_oþC;Í`ÿoÂ\ò_}"Ò5ÿ×åû	
+ýŸ&ðþïþÿW<û¿Èÿ7ATÿjþ¯rÿÅóß„›ø˜cDúWÌÿjxÿ3û_߈ô¯‘ÿ5¯ÿä˜@þ—oDú×ÌÿÂÿió?|#Ò¿fþù&pþëÙùŸbþþo‡Ž€cDú¯æÿºZÿÛ†übAþž©µþWóųÿÿ§	s	˜ÿç‘þ«ù¿.ç•РÆû$ïþ£Nþó-Õ_3ÿ‹û_ÈÿòHÿšù_èßü_¾鿚ÿërýoÇ-ú7àóÏçãá×n|ló$pˆHÿšù_Üÿ˜Àúï‘þ5ó¿8ÿ5ÿ—odçŠù_ôš@þ—oDú×ÌÿBÿ& ~ßÔZÿëåMó;ú?L˜K@þ—ODúטÿ8çqþoBL$€zf•þ'~ýɨð¥þ¯&•Aÿ!ë?þ/}VÖÿ¸ÚÿØ?ü^õ‹°¼þ%—ñï¥Ôæ–ú[°µþÇo‡ûþîöùñËð¥=¼ýÅ,ßÿÏõÏ™üO^íÿGnØ
+øb«þ_¬Oýî{ÿpûx÷×ÏxWÿá?ú~Œûÿ†üxß÷ÍVýïö‡75ÿšõúoºÂû¿	ø|#Òÿ¢ÝÿºýӍýß9Eü?&\ìÿ¿~åyàŠ•úŸŽÿW~ƲóŸPRèâÔÿ˘ÿÌù>›êºþI‹
+ÖœÿÿŒû¿Ð4ÔßIý¶ÿnÈhº€ÿß„”
+ÀŽ‘èaûï–ù¥%ÿÑÞÿ}#ÑÿÂößuóÎù‰ù/&0ÿÁ7ý/lÿÝ2ÿþ?#óDÿÛ7ä?—.sÿoý¿¾ÿ-kÿÝ4ÿüèÿõDÿÛ·œÿ5ý›€ß×7•Öÿ·ÚWõÿ–&žú#÷&Ì%8ûúžç+$ú_Øþ»aÿŸ;îÿlÈ‘@Ïl×Ðñ5íäÿÂÿg‚¤þõü_×ó"ýŸ&0ÿÁ7ý«ø¿¦ü·’Ñ¿	ø¿|#Ñ5ÿ×kÿ÷ìÿBÿ&|êù8F¢ÿ×yþKKþ£	¬ÿ¾‘è_Åÿ5å?v™ûðùFtþ§áÿ:ψô˜€ÿË7ý«ø¿¦ó¿¦ ðù¦Òú_Íÿ5Ýÿâÿ²b.ù¯>‘连ÿëòý?w™þOxÿ÷Ívý/1*|yþ×ÙÿñY ©=ÿW¹Êÿ"ÿÓ†›ø˜c$úWÍÿâýÏî}#Ñ¿Jþ×¼þ“ÿaù_¾‘è_5ÿÿ§	
+ÊwDÿª
 ù_ä˜Àù¯oDçšù_ø¿M: Ž‘è¿žÿërýïšLþ‡	± ÏTZÿëù¿âäÿ"ÿ߆¹Ìÿó‰Dÿõü_—ó¿òø×пãý?’÷ËvýG¥ü¯ÓýßðÀÿe¤þªù_Üÿš@þ—o$úWÍÿBÿ&àÿòDÿõü_×ëBÿ&|þù|<üڍÏmž‘è_5ÿ‹ûXÿ}#Ñ¿fþù6àÿòèüO3ÿ‹þOÈÿòDÿªù_èßÔï›JëÅü¯Éÿéÿ0a.ù_>‘è_eþãœÿÅù¿	1¡xϬÒì{¾^3*|©ÿ«IeÐ(%áÿ²`mýû§ýýÃï5¿Ëë_†êŸò°P6×ÿøípßßÝ>?~¾µ‡7¿™åûÿ¹þ¹Dú?MxµÿOiü»WlÖÿ‹ùï©ß}ïîoïþöïê?üGÿÏñü¿eþ‡
+4øf³þwûÃ[šÍzý·üoXï}#Óÿ’Ýÿºý›Nçÿ©àÿ3áÕþÿëWöÿîX«ÿé`Ýg,;ÿ	%….Nýß±‹ôš°­þ§ ´ô×`Íùo>=ÿ›9ÿ5ATÿ…
+À§¾UùM×qÿoBÊ…`Ljô¿°ø}ý_ÍèîÿM ÿÇ7"ý/l ~Wÿ¯ç?œûÿȵù¾éaðúõ¿‰ó?¸ÿóHÿ€ß×ÿUþsh¹ÿ7þ_ßÈÎÿ–5 ¿¯ÿëù÷ÿ&Ðÿë‘þ6 o8ÿk[ôoÝ?¾©µþ¿Õ <*|‘ÿ'…±õÿÔÿ×1ÿÑ„¹ÿ„Ð÷ãx¸B¤ÿ…
+Àöÿû?räÐ3ýÿWÓNþ/ü&ˆê_ÍÿuÿÜu<ÿ-`þƒoDú×ðMùo]ƒþMÀÿå‘þkù¿^û¿gÿú7áSìyøE¤
+ÿפÿØpþkë¿oDú×ðMûÿáï£ðùFvþ§àÿ:Ïèèÿ0ÿ—oDú×ðMëÛ¢ðù¦Öú_Åÿõrÿ[Æ-ú7`.ù¯>鿚ÿëjþchèÿ4÷ßôߨø¿âÙÿUðY ª5ÿW¹ÎÿâùoÂMüˆÌ1"ýkæñþg÷¿¾é_#ÿkÊÿ·„èß ò¿|#Ò¿fþþO”ï‘þ5ó¿Èÿ0ó_ßÈÎÿó¿ð›>t< #Ò5ÿ×Õúß¶ä˜ò÷L­õ¿šÿ+žý_ø?M˜KÀü?Ÿˆô_Íÿu9ÿ«„ý›0Þÿ#y¿ôuò¿˜ÿh‰¨þjù_ÜÿZAþ—oDúWÌÿb
 þ‹
+ø¿|#Ò5ÿ×õúÑ¿	Ÿ>¿vãc›'CDú×ÌÿâþÇÖ߈ô¯™ÿÅù¯	ø¿|#;ÿSÌÿ¢ÿÓò¿|#Ò¿fþú7õû¦Öú_/ÿkòú?L˜K@þ—ODúטÿxÎÿâþφ˜H õÌ*ý7ÝRË׌
+_êÿjRôJiñY°¶þÇýÓþÇþá÷š_„åõ/eü9ìDòxÿCýõÙ\ÿã·Ã}wûüøeøÖÞüf–ïÿçúçá߬ÿÌøg®»WlÖÿ‹÷ï©ß}ïîoïþöïê?¼è??Æýéÿ6ó?ßlÖÿnxKó¯Y¯ÿ6dü?&Ðüå™þ—ìþWíÿóxñ7ìÿúl˜
+ðõ+ûŸ¬Õÿtþ¿î3–ÿ„’B§þïØÅŽó¶Õÿtÿ“TúÓ¹ÿ—ó_Dõ¯Öÿ{™ÿÀü+R.4 ;F¤ÍùøÿM ÿÇ7"ýk̘ó?È7ù¾é_qþCÃùŸ	œÿûF¤ÍùÜÿ›@ÿ¯odçŠó¸ÿ7þ_߈ô¯ÑÿËüSèþñM­õ¿JÿoÞÚñü/sÿgÄT€¾Çÿã‘þ5ú™ÿ`JŽœ zF ÿ 3ÿ¡ü_øÿLÕ_sþýŸ&0ÿÁ7"ýkÎ@ÿ&àÿòHÿµü_¯ýßóüôo§þØóð‹HÿšóZôoë¿oDúלÿÀý	ø¿|#;ÿSœÿ@ÿ‡	ø¿|#Ò¿æüôoþ/ßÔZÿëÍh§ùìÿM˜€ÿË'"ýWó]¾ÿ3ÿÁ
+Þÿ}#УâÿŠ“ÿ+ü_ˆê_ÍÿU.ûÿùŸ6Üď8À#Ò¿fþï&pÿë‘þ5ò¿æõŸüÈÿòHÿšù_ø?MhP¾kDú×Ìÿ"ÿÃÎ}#;ÿSÌÿÂÿmBøÐñ pŒHÿÕü_WëÛ’ÿaB,Èß3µÖÿjþ¯xöáÿ4a* óÿ¼"Ò5ÿ×åü¯ôoÂxÿäý"ÐÔÉÿŠSþWÆÿe¨þšù_Üÿš@þ—oDú×ÌÿBÿ&àÿòHÿÕü_×ëDÿ&|þù|<üڍmžé_3ÿ‹ûXÿ}#Ò¿fþç¿&àÿòìüO-ÿ+Ñÿiù_¾é_1ÿ+£P¿oj­ÿõò¿âäÿÂÿmÂ\ ü_>é_cþãœÿÅù¿	1‘ ê™uúÏK-_0*|©ÿ«IeÐ(%áÿ²`mýû§ýýÃï5¿Ëë_Jãó?å†ú›°¹þÇo‡ûþîöùñËð­=¼ùÍ,ßÿÏõÏÿYÿ-˜
+psÃþß'›õÿâý{êwßû‡ûÛÇ»¿}Æ»ú/úÏÏqÿߢ8ÿóÍfýïö‡·4ÿšõúoC&ÿÉü?¾‘éÉîÕþ?·íøþŸSGþ«	SèÿöÊZýOçÿë>cÙùO()tqêÿŽýŸ6l«ÿéþ'©ôÿ¦0õÿrþg‚¨þÕú/óšŽü7R.4 ;F¤Íù俚Àû¿oDúטÿ0çÐÿgó|#Ò¿âü‡ÄùŸ	„¿ùF¤ÍùÜÿ›@ÿ¯odçŠó¸ÿ7þ_߈ô¯Ñÿ;Ï@ÿ&Ðýã›Zë¥þß.4…þ_C¦ô=þŸˆô¯Ñÿ;ÏàþÏ„9ôŒ@ÿAgþCËüCDõW›ÿÐtù&0ÿÁ7"ý+Î`þ—
+ø¿|#Ò-ÿ×kÿ÷ìÿBÿ&|ê= ¿ˆô¯9ÿü7Xÿ}#Ò¿æüîLÀÿåÙùŸÚü‡áï¡ðùF¤Åù-ú7ÿ—oj­ÿõæ?´ø¿™
+@þ«WDú¯æÿº|ÿ/£
+ýÀû¿oúoTü_ñìÿ*ø¿,Õ¿šÿ«\çñü7á&~Äæ‘þ5ó¿xÿ3û_߈ô¯‘ÿ5åÿæÛ@þ—oDú×ÌÿÂÿiBƒò]#Ò¿fþù&pþëÙùŸbþþo‡Ž€cDú¯æÿºZÿÛ–übAþž©µþWóųÿÿ§	S˜ÿç‘þ«ù¿.ç•РÆû$ïþ£NþWœü_
+þ/DõWËÿâþ×
+ò¿|#Ò¿bþó_lÀÿå‘þ«ù¿®×ÿˆþMøüóùxøµÛ<	"Ò¿fþ÷?&°þûF¤Íü/ÎMÀÿåÙùŸbþýŸ&ÿå‘þ5ó¿Ð¿	¨ß7µÖÿzù_qòáÿ6a* ù_^é_cþã9ÿ‹û?b"Ô3«ôŸ[¾þ`TøRÿW“ÆùÏ¡dæ?š°¶þÇýÓþÇþá÷š_„åõ/¹+ãó?åñùOýõÙ\ÿã·Ã}wûüøeøÖÞüf–ïÿçúçyÿ7a.Á?cØÿ»c³þ_¼Oýî{ÿpûx÷·ÏxWÿá?ú~Œûÿ6pÿo;٬ÿÝþð–æ_³^ÿ-ó¿Œ@ÿ¾‘éÉîÝþ¿McÿgN…ü'^íÿ¿~eÿúŸÎÿ×}ƲóŸPRèâÔÿ»Èù	ÛêºÿI*ý¿§çç¿&ˆê_­ÿ÷2ÿ¡Yÿ
+H¹Ð ì‘þç?$ÎÿM ÿÇ7"ýkÌ ÿÃæ?øF¤Íùœÿ™Àù¿oDúWœÿ@ÿ¿
+ôÿúFvþ§7ÿ¡pÿoý¿¾é_£ÿ÷<ÿù¯6Ðýã›Zë•þß4¼	„<ú:ü?6Ì%ø'„¾ÿÀóÀ"ýkôÿžç?pÿgCŽœ zF ÿ 3ÿ¡æ?àÿ3ATµùMÇüO˜ÿà‘þç?4èßü_¾é¿–ÿëµÿ{ö¡>õÇžG€_DúWœÿÈ7õß7"ý+Îhèÿ2ÿ—odçŠóèÿ0ÿ—oDúלÿ€þMÀÿå›Zë½ùíÉÿÕ±ÿ7a.ù¯>鿚ÿëòý¿„ÿ§	¼ÿûF ÿFÅÿÏþ¯ˆÿËQý«ù¿ÊUþWÇóß„›ø˜cDú×ÌÿâýÏî}#Ò¿Fþ×¼þ“ÿaù_¾é_3ÿÿ§	
+ÊwHÿšù_ä˜Àù¯odçŠù_ø¿M: Ž鿚ÿëjýoò?Lˆù{¦Öú_Íÿuºÿ-üæ0ÿÏ'"ýWó]Îÿ*¡Aÿ&Œ÷ÿHÞ/ýGü/æ?Z"ª¿fþ÷¿&ÿå‘þ5ó¿Ð¿	ø¿|#Ò5ÿ×åúߎGÂè߀Ï?Ÿ‡_»ñ±Í“À!"ýkæqÿcë¿oDúWÌÿ"ÿÃü_¾‘ÿ)æÑÿiù_¾é_3ÿý›€ú}Ský¯—ÿ¦ü/ú?L˜K@þ—ODúטÿ8çqþoBL$€zf•þc»Ôòõ£Â—ú¿šTý‡’;ü_¬­ÿqÿ´ÿ±ø½æayý‡²Ÿò_ÓKý
+Ø\ÿã·
 Ã}wûüøeøÖÞüf–ïÿçúçÉ0áÕþܤ±ÿwÆfý¿xÿžúÝ÷þáþöñîoŸñ®þÃô?ü÷ÿm ÿÛîÿ}³Yÿ»ýá-Í¿f½þÛÐâÿ1ü'ßÈô¿d÷¿nÿ߆ñý?§Bþ«	ìÿÇpž®X«ÿéüÝg,;ÿ	%….Nýß±ßÿ9ÿÑg[ýO÷?IgþC7Í ÿ×Qý«õÿ^æ?0ÿÁŠ”
+ÀŽé_qþù/6pþç‘þ5æ?Ìý¿Üÿ™Àü߈ô¯9ÿÿŸ	„¿ùF¤ÍùÜÿ›@ÿ¯odçŠó¸ÿ7þ_߈ô¯ÑÿËüSèþñM­õ¿Jÿo
+£õ÷Ôÿ‹ÿdž¹'ÿOÎøœ!Ò¿Fÿ/óLÉ‘@Ïôtæ?´“ÿÿŸ	¢úkÎ ÿÅæ?øF¤Íùèßü_¾é¿–ÿëµÿ{ö¡>õÇžG€_DúלÿÀù¯	¬ÿ¾é_sþý_&àÿòìüOqþý&àÿòHÿšóп	ø¿|Ský¯7ÿ¡=ù?ûæÿê‘þ«ù¿.ßÿ™ÿ`ïÿ¾è¿ÑÉÿ:û¿ü_ˆê_ÍÿU®ó¿xþ›p?â sŒHÿšù_¼ÿ™Àý¯oDú×Èÿš×ò?L ÿË7"ýkæáÿ4ù¾é_3ÿ‹ü8ÿõìüO1ÿÿ·	áCÇÀ1"ýWó]­ÿmKþ‡	± ÏÔZÿ«ù¿âÙÿ…ÿÓ„¹Ìÿó‰HÿÕü_—ó¿Jhп	ãý?’÷‹@ÿQ'ÿëtÿC‡ÿËQý5ó¿¸ÿ5ü/߈ô¯™ÿ…þMÀÿå‘þ«ù¿.×ÿv|%Dÿ|þù|<üڍmžé_1ÿ‹üwXÿ}#Ò¿fþç¿&àÿòìüO1ÿ‹þOÈÿòHÿšù_èßÔï›Zë½ü¯pšÿØÑÿaÂ\ò¿|"Ò¿ÆüÇ9ÿ‹ób"Ô3ëôÿq©åëF…/õ5©ú¥´ø¿,X[ÿãþiÿcÿð{Í/Âòú—Ü•8Ô?åqþõ×gsýß÷ýÝíóã—á[{xó›Y¾ÿŸëŸK¤ÿÓ„Wûÿ››ñì\±Yÿ/Þ¿§~÷½¸¿}¼ûÛg¼«ÿðý?Æý¹ÿ3æßlÖÿnxKó¯Y¯ÿ6dÎÿMÀÿã™þ—ìþ×íÿÛt:ÿOþ?^íÿÇîoöÿÎX«ÿéüÝg,;ÿ	%….Nýß±‹ôš°­þ§ûŸ¤Òÿ›¦þßÈù¯	¢úWëÿ½Ìh¸ÿ7"åB°cDúלÿÀý¿	¼ÿûF¤ùsÿ/÷&0ÿÁ7"ý+Πÿ×îÿ|#Ò¿âüúm ÿ×7²ó?½ùôÿÚ@ÿ¯oDú×èÿç? èþñM­õ¿Vÿo7üù4ÿó?æüBߏàyà
+‘þ5úçùÜÿ™#'€žè?èÌh'ÿþ?DõW›ÿЁç¿ÌðHÿŠóZôoþ/߈ô_ËÿõÚÿ}^ÿ#ú7áSìyøE¤Íù-ú·€õß7"ýkΠÿËü_¾‘ÿ)Îàþ×ü_¾é_sþú7ÿ—oj­ÿõæ?´“ÿ‹ý¿	s	Èõ‰HÿÕü_—ïÿ%´ôšÀû¿oúoTü_qò¥€ÿËQý«ù¿Êeÿÿø+Áó߀›ø˜cDú×ÌÿâýÏî}#Ò¿Fþ×¼þ“ÿaù_¾é_3ÿÿ§	
+ÊwHÿšù_ä˜Àù¯odçŠù_ø¿M: Ž鿚ÿëjýo[ò?Lˆù{¦Öú_Íÿ[ò¿™KÀü?Ÿˆô_Íÿu9ÿ«„ý›0Þÿ#y¿ôuò¿˜ÿh‰¨þšù_Üÿš@þ—oDú×ÌÿBÿ&àÿòHÿÕü_×ëDÿ&|þù|<üڍmžé_3ÿ‹ûXÿ}#Ò¿fþç¿&àÿòìüO-ÿ+Ñÿiù_¾é_1ÿ+£P¿oj­ÿõò¿&ÿG ÿĹäùD¤ùsþçÿ&ÄD¨gV鿹YjùúƒQáKý_M*ƒþC)ÿ—këÜ?íì~¯ùEX^ÿRbŠCýSûÿ©¿>›ëüv¸ïïnŸ¿ßÚÛßÌòýÿ\ÿ\èÿ°á¼ÿjÿ™kÁnÀ›õÿâý{êwßû‡ûÛÇ»¿}Æ»ú/úÏÏqÿßFÞÿMàüÏ7›õ¿ÛÞÒükÖë¿
+™üÈòLÿKvÿ«öÿ¹mÇ÷ÿÜòßL˜
+ðõ+ûŸ¬Õÿtþ¿î3–ÿ„’B§þïØ‘ÿoöúŸî’Jÿo:÷ÿrþk‚¨þÕú/óšŽùŸ6¤\h vŒHÿÌø×CÿoDúטÿ0÷ÿâÿ5ù¾éŸùÿzóHÿÌø×Cÿ¯odçÌø·Cÿ¯oDú×èÿç? èþñM­õ¿JÿoÞr3ú:ÖÎ÷¯ÿODú×èÿç?pÿgBŽœ zF ÿ 3ÿ¡=ù¿ðÿÙ ª?óþõ0ÿÁ7"ý3ÿá_þ/߈ô_ËÿõÚÿÍüS>õÇžG€_DúgþÿÖ߈ôÏü‡=ø¿|#;ÿcþÿü_¾éŸùÿzðù¦Öú_oþC;Í`ÿoÂyÿEþ«SDú¯æÿº|ÿ/¡¥ÿÓÞÿ}#УâÿŠgÿùÿ&ˆê_ÍÿU.ûÿùŸ6Üď8À#Ò¿fþï&pÿë‘þ5ò¿æõŸüÈÿòHÿšù_ø?M`þ‡oDú×Ìÿ¢ÿßÎ}#;ÿSÌÿÂÿmBøÐñ pŒHÿÕü_Wëÿ8ýò÷L­õ¿šÿ+Nþ/òÿm˜
+Àü?¯ˆô_Íÿu9ÿ«„ý›0Þÿ#y¿ôuò¿â4ÿ±àÿ²@TÍü/îM ÿË7"ýkæ¡ðùF¤ÿjþ¯ëõ?¢>ÿ|>~íÆÇ6O‡ˆô¯™ÿÅý	¬ÿ¾é_1ÿ‹üðùFvþ§˜ÿEÿ§	äùF¤Íü/ôoê÷M­õ¿^þWœò¿ð›pÞ‘ÿå‘þ5æ?Îù_œÿ›	 žY¥ÿ’–Z¾þ`TøRÿW“Ê ÿPJÂÿeÁÚú÷Oûû‡ßk~–׿õþ^Jc,õ7`sýß÷ýÝíóã—á[{xó›Y¾ÿŸëŸó¿lhÛ©ìÿ}²Yÿ/Þ¿§~÷½¸¿}¼ûÛg¼«ÿð¢ÿ<ü÷ÿ-ý_6Ðýí›Íúßíoiþ5ëõßÎÿm ÿÉ72ý/Ùý¯ÚÿçÆó¿œ:òŸLøú•ý¿gÖê:ÿ_÷ËÎBI¡‹SÿwìbæüÇ‚mõ?Ýÿ,>^sþ›S˜ú9ÿ5ATÿjý¿—ùMÇúoCÊ…`Ljô¯9ÿûèÿñHÿóæüü&0ÿÁ7"ý+ÎHôÿš@ø›oDúלÿÀý¿	ôÿúFvþ§8ÿûèÿõHÿý¿óüôoÝ?¾©µþWéÿMÃsâtþ—¹ÿ3"ç©ø|"Ò¿Fÿïyþ÷6äÈ	 gú:óÚÉÿ…ÿÏQýÕæ?4]×ñü·€ù¾é_qþCƒþMÀÿå‘þkù¿^û¿gÿú7áSìyøE¤Íù俘Àúï‘þç?´Üÿ˜€ÿË7²ó?µùÃßCÿàÿòHÿŠóZôoþ/ßÔZÿëÍh§ùìÿM ÿÕ7"ýWó]¾ÿ—ÀüWxÿ÷@ÿŠÿ+žý_ÿ—¢úWó•ëü/žÿ&Üď8À#Ò¿fþï&pÿë‘þ5ò¿¦üŸqKˆþ
+ ÿË7"ýkæáÿ4ù¾é_3ÿ‹ü8ÿõìüO1ÿÿ·	á =#Ò5ÿ×Õúß¶ä˜ò÷L­õ¿šÿ+žý_ø?M`þŸoDú¯æÿºœÿUBƒþMïÿ‘¼_ú:ù_qò5ø¿,Õ_-ÿ‹û_+ÈÿòHÿŠù_̱ÿ—oDú¯æÿº^ÿ#ú7áóÏçãá×n|ló$pˆHÿšù_Üÿ˜Àúï‘þ5ó¿8ÿ5ÿ—odçŠù_ôš@þ—oDú×ÌÿBÿ& ~ßÔZÿëåÅÉÿ…ÿÛò¿|#Ò¿ÆüÇsþ÷6ÄD¨gÖéñÈÇ?¾ÔÿÕ¤2è?”ðY°
 ¶þÇýÓþÇþá÷š_„åõ/¥‰ÃßKiÜR6×ÿøípßßÝ>?~¾µ‡7¿™åûÿ¹þ¹0ÿˆÙÿ{f³þ_¼Oýî{ÿpûx÷·ÏxWÿáEÿyø1îÿÛÀùŸ	tûf³þwûÃ[šÍzý·¡eý7æ/ßÈô¿d÷¿jÿŸsÏÿr"ÿÅú¿}³VÿÓùÿºÏXvþJ
+]œú¿cGÿ§
+ÛêºÿI*ý¿)Lý¿œÿš ªµþßËü‡¦cý·!åB°cDúלÿ@þ«	ôÿøF¤ùsþý&0ÿÁ7"ýkÎ`þ“	œÿûF¤ÅùÌÿµþ_ßÈÎÿôæ?îÿM ÿ×7"ýkôÿžç?4èߺ|Ský¯ÔÿÛÅ6Oý¿œÿ™óTü?>é_£ÿwžÿÀýŸ	9rèþ7
+_>ÿ¡eþƒ!¢ú«ÍhºŽüG˜ÿà‘þç?0ÿËü_¾é¿–ÿëµÿ{ö¡>õÇžG€_Dúלÿ@þ›	¬ÿ¾é_sþý_&àÿòìüOqþ÷¿&àÿòHÿšóп	ø¿|Ský¯7ÿ¡eþƒ!ä¿úF¤ÿjþ¯Ë÷ÿú?Màýß7ý7*þ¯xöµø¿,Õ¿šÿ«\çñü7á&~Äæ‘þ5ó¿xÿ3û_߈ô¯‘ÿ5¯ÿä˜@þ—oDú×ÌÿÂÿiBƒò]#Ò¿fþù&pþëÙùŸ^þW‡ÿÛ„ð	€ž鿚ÿëjýo[ò?Lˆù{¦Öú_Íÿ[ò¿aþŸoDú¯æÿºœÿUBƒþMïÿ‘¼_ú:ù_qòEü_ˆê¯™ÿÅý¯	äùF¤Íü/ôoþ/߈ô_Íÿu¹þ·£%ýðùçóñðk7>¶y8D¤Íü/îL`ý÷Hÿšù_œÿš€ÿË7²ó?Åü/ú?M ÿË7"ýkæ¡P¿oj­ÿõò¿âäÿÂÿmù_¾é_cþãœÿÅù¿	1‘ ê™UúOíRË׌
+_êÿjRôJ	ø¿,X[ÿãþiÿcÿð{Í/ÂòúecýSNõ·`sýß÷ýÝíóã—á[{xó›Y¾ÿŸëŸó¿l˜KðÏü"ÀnÀ›õÿâý{êwßû‡ûÛÇ»¿}Æ»ú/úÏÏqÿßâÿ±üßlÖÿnxKó¯Y¯ÿ6´ä¿˜Àzï™þ—ìþWíÿsÛ4ãþ?‘ÿbÃËþnçyàŠµúŸÎÿ×}ƲóŸPRèâÔÿ»ØpþcÁ¶úŸî’Jÿo
+Sÿ/ç¿&ˆê_­ÿ÷2ÿ¡é:òßMH¹Ð ì‘þ5ç?Ðÿcý?¾é_cþÃÜÿKÿ	ÌðHÿšóðÿ›@ø›oDúלÿÀý¿	ôÿúFvþ§7ÿ¡pÿoý¿¾é_£ÿ÷<ÿùO6Ðýã›Zë­þ߮˧þ¿ÈùŸ	s	þÉyúÏWˆô¯Ñÿ;ÏàþÏ„9ôŒ@ÿAgþC;ù¿ðÿ™ ª¿æüú?M`þƒoDúלÿ€þMÀÿå‘þkù¿^û¿gÿú7áSìyøE¤ÍùôšÀúï‘þ5ç?Ðÿeþ/ßÈÎÿç?pÿkþ/߈ô¯9ÿý›€ÿË7µÖÿzóÚiþûæÿê‘þ«ù¿.ßÿKhèÿ4÷ßôߨø¿âÙÿÕâÿ²@Tÿjþ¯rÿÅóß„›ø˜cDú×ÌÿâýÏî}#Ò¿Fþ×¼þ“ÿaù_¾é_3ÿÿ§	ÌÿñHÿšù_ä˜Àù¯odçzù_Ìÿ±!|èx 8F¤ÿjþ¯«õ¿mÉÿ0!äï™Zë5ÿW<û¿ðš0—€ù>鿚ÿërþW	
+ú7a¼ÿGò~è?êä1ÿÑQý5ó¿¸ÿ5ü/߈ô¯™ÿ…þMÀÿå‘þ«ù¿.×ÿv´„£>ÿ|>~íÆÇ6O‡ˆô¯™ÿÅý	¬ÿ¾é_3ÿ‹ó_ðùFvþ§˜ÿEÿ§	äùF¤Íü/ôoê÷M­õ¿^þ×xÿ›»Žþæÿå‘þ5æ?Îù_œÿ›	 žY¥ÿ¦,µ|ýÁ¨ð¥þ¯&•Aÿ¡æ?š°¶þÇýÓþÇþá÷š_„åõ/eø÷Pÿ”‡_êoÀæú¿îû»ÛçÇ/÷öðæ7³|ÿ?×?—Àû¿	Sbüg®»WlÖÿ‹÷ï©ß}ïîoïþöïê?¼è??Æý¹ÿ7ó?ßlÖÿnxKó¯Y¯ÿ6dòM ùË72ý/Ùý¯Úÿç¶ßÿsâü߆© _¿²ÿ÷ÉZýOçÿë>cÙùO()tqêÿŽÃ8ÿ±`[ýO÷?I¥ÿ7û9ÿ5ATÿjý¿—ùMבÿjBÊ…`Ljô¯9ÿóèÿñHÿóèÿ5…ù¾é_sþç&pþï‘þç?ÿlý¿¾‘ÿ)Îàþßú}#Ò¿Fÿï<ÿý›@÷oj­ÿ•úOÿÓüöÿ&œï_3þŸˆô¯Ñÿ;ÏàþÏ„9ôŒ@ÿAgþC;ù¿ðÿ™ ª¿Úü‡vü•àùo ó|#Ò¿âü‡ý›€ÿË7"ý×
 ò½öŸ×ÿˆþMøÔ{~é_sþùï&°þûF¤Íùô™€ÿË7²ó?Åùô˜€ÿË7"ýkÎ@ÿ&àÿòM­õ¿Þü‡vò±ÿ7a* ù¯^鿚ÿëòý¿„†þOxÿ÷@ÿŠÿ+žý_þ/Dõ¯æÿ*×ù_<ÿM¸‰q€9F¤Íü/ÞÿLàþ×7"ýkäMù?ôÿAþ—oDúWÌÿjðšÐ |׈ô¯™ÿEþ‡	œÿúFvþ§˜ÿ…ÿÛ„ð¡ãà‘þ«ù¿®Öÿñ¯£bAþž©µþWóųÿÿ§	S˜ÿç‘þ«ù¿.ç•РÆû$ïþ£NþWœü_-þ/Dõ×Ìÿâþ×ò¿|#Ò¿fþú7ÿ—oDú¯æÿº^ÿ#ú7áóÏçãá×n|ló$pˆHÿšù_Üÿ˜Àúï‘þ5ó¿8ÿ5ÿ—odçŠù_ôš@þ—oDú×ÌÿBÿ& ~ßÔZÿëåç?âÿ6á| Kþ—SDúטÿxÎÿâþφ˜H õÌ:ý\jùúƒQáKý_M*ƒþC)Ì4amýû§ýýÃï5¿Ëë_J<Õ?å†ü76×ÿøípßßÝ>?~¾µ‡7¿™åûÿ¹þ¹DòŸL˜
+psÃþß'›õÿâý{êwßû‡ûÛÇ»¿}Æ»ú/úÏÏqÿßFîÿMàüÏ7›õ¿ÛÞÒükÖë¿
+™õßòŸ|#Óÿ’Ýÿªýÿûÿ&ÿdÂT ú¿½²VÿÓùÿºÏXvþJ
+]œú¿c—"ç?l«ÿéþ'©ôÿ¦0õÿrþk‚¨þÕú/óÚñW‚õ߀”
+ÀŽé_sþþ?èÿñHÿóèÿ5…ù¾é_sþç&þæ‘þ5ç?pÿoý¿¾‘ÿ)Îàþßú}#Ò¿Fÿï<ÿý›@÷oj­ÿ•ú»Ñø7öÿqþgÃT€¾Çÿã‘þ5úçùÜÿ™#'€žè?èÌhOþ/ü6ˆê¯9ÿü˜ÿà‘þ5ç? ðùF¤ÿZþ¯×þïÙÿ…þMøÔ{~é_sþùï&°þûF¤Åù™þ/ðùFvþ§6ÿ!1ÿÕü_¾é_qþCFÿ&àÿòM­õ¿Þü‡vò±ÿ7a* ù¯^鿚ÿëòý¿„–þOxÿ÷@ÿŠÿ+žý_	ÿ—¢úWó•ëü/žÿ&Üď8À#Ò¿bþWËûŸ	ÜÿúF¤ü¯yý'ÿÃò¿|#Ò¿fþþO˜ÿá‘þ5ó¿Èÿ0ó_ßÈÎÿó¿ð›>t< #Ò5ÿ×Õúß¶ä˜ò÷L­õ¿šÿ+¶ä2€ù^鿚ÿërþW	-ú7a¼ÿGò~è?êäÅiþc‡ÿËQý5ó¿¸ÿ5ü/߈ô¯™ÿ…þMÀÿå‘þ«ù¿®×ÿˆþMøüóùxøµÛ<	"Ò¿fþ÷?&°þûF¤Íü/ÎMÀÿåÙùŸbþýŸ&ÿå‘þ5ó¿Ð¿	¨ß7µÖÿzù_ñäÿø¿M˜
+@þ—WDúטÿ8çqþoBL$€zf•þ;¾þdTøRÿW“Ê ÿ»ÿ—+ëÜ?íì~¯úEX^ÿRbn†ú§q¹ þl­ÿñÛ᾿»}~ü2|io1Ë÷ÿsýsN¼ÿ›0—àŸ¹ì\±Uÿ/Ö¿§~÷½¸¿}¼ûëg¼«ÿð¢ÿ<ü÷ÿMâþÏÞ÷}³Uÿ»ýáMÍ¿f½þ›®°þ›€þ}#Òÿ¢Ýÿªýnº±ÿ;§€ÿÏ„‹ýÿׯ<\±RÿÓñÿÊÏXvþÊ ú8õÇ’
+ç?lªÿéú'-þ5Xsþ;ü3îÿB©¿’ú/lÿݐÿÐtüGR.4 ;F¢ÿ…í¿[æ?îÿm ÿÇ7ý/lÿ]7ÿáäÿi†ôoó|#ÑÿÂöß-óý¿6pßï‰þ¶ÿnÈ.ý¿6ÐÿëÑùß²ößMóèÿµþ_ßHô¿°ýwËù_Cÿ¯
+tÿø¦ÒúÿVûïrÿOþؤÑÿS˜ÿdÃ\‚³ÿ§ïy¸B¢ÿ…í¿öÿ™ü_#räÐ3Ûõtü_M{òáÿ³ARÿzþ¯Ëü‡¦‹ç¿ÌðDÿ*þ¯)ÿ­dôoþ/ßHô_ÍÿõÚÿ}^ÿú7áSäÈÇ1ý«ø¿Îó_Úý[Àúï‰þUü_Sþãx\„þ
+ÀÿåÑùŸ†ÿkÒ$ÿÙü_¾‘è_Åÿ5ÿ5ý›€ÿË7•Öÿ:þ¯—ûßÜEöÿ&Ì% ÿÕ'ý×ó]¾ÿ箥ÿÓÞÿ}³]ÿRþ×ÙÿÕáÿ²@Rÿzþ¯rÿÅóß„›ø˜c$úWÍÿâýÏî}#Ñ¿Jþ×yýä˜@þ—o$ú×ÌÿjñšÐ |×Hô¯šÿEþ‡	œÿúFtþ§™ÿ…ÿÛ„ð¡ãà‰þëù¿.×ÿ®Éä˜ò÷L¥õ¿žÿ+žý_ø?M˜KÀü?ŸHô_Ïÿu9ÿ+w-ú7a¼ÿGò~Ù®ÿ¨”ÿ&ÿWƒÿËIýUó¿¸ÿ5ü/ßHô¯šÿ…þMÀÿå‰þëù¿®×ÿ„þMøüóùxøµŸÛ<	"Ñ¿jþ÷?&°þûF¢Õü/ÎMÀÿåÑùŸfþýŸ&ÿå‰þUó¿Ð¿	¨ß7•ÖÿŠù_“ÿ#ÒÿaÂ\ò¿|"Ñ¿ÊüÇsþ÷6ÄD¨gVé?•Åž¯×Œ
+_êÿjRôJIø¿,X[ÿãþiÿcÿð{Í/Âòú—NõO¹¡þ&l®ÿñÛ᾿»}~ü2|ko~3Ë÷ÿsýsaþ§
+/ûÿ¶þÀnÀ›õÿbþ{êwßû‡ûÛÇ»¿}Æ»ú/úÏÏñü¿Eÿ6ÿâ›Íúßíoiþ5ëõßÞÿmÀÿã™þ—ìþWíÿsÛ4ãþ?uœÿ›ð²ÿÿú•ý¿CÖêº X÷ËÎBI¡‹Sÿw<ÍÿáüGŸmõ?] ¥¥¿kÎs:õÿÆÈùŸ	¢ú/l >Ýð­Êhºÿ¿	)€#ÒÿÂà÷õ5ÿ¡kÈ4÷߈ô¿°ø]ý¿žÿpîÿÌ1ù¾éaðúõ¿‰þ?ðûúF¤ÿ…
+Àïëÿ*ÿ™ù/FÐÿëÙùß²à÷õ=ÿ¡ãþßú}#ÒÿÂà
+çm‹þM ûÇ7µÖÿ·€G…/òÿ¤áM Mý¿…óæü“óôž®éað†ýàþφ9ôŒ@ÿAÅÿÕ´“ÿÿŸ	¢úWó]ç?wä?™Àü߈ô¯áÿšòߺý›€ÿË7"ý×ò½öÏþ/ôo§þØóð‹Hÿþ¯Iÿ±¡ÿÓÖ߈ô¯áÿšöÿÌ1ÿ—odç
+þ¯óü‡ŽþðùF¤
+ÿ×´þ·-ú7ÿ—oj­ÿUü_/÷¿eÜ æÿê‘þ«ù¿®æ?††þOxÿ÷@ÿŠÿ+žý_ÿ—¢úWó•ëü/žÿ&Üď8À#Ò¿fþï&pÿë‘þ5ò¿¦üŸqKˆþ
+ ÿË7"ýkæáÿ4ù?¾é_3ÿ‹ü8ÿõìüO1ÿÿ·	áCÇÀ1"ýWó]­ÿmKþ‡	± ÏÔZÿ«ù¿âÙÿ…ÿÓ„¹Ìÿó‰HÿÕü_—ó¿Jhп	ãý?’÷‹@ÿQ'ÿ+Nþ¯ÿ—¢ú«åqÿkù_¾é_1ÿ‹ù/6àÿòHÿÕü_×ëDÿ&|þù|<üڍmžé_3ÿ‹ûXÿ}#Ò¿fþç¿&àÿòìüO1ÿ‹þOÈÿòHÿšù_èßÔï›Zë½ü¯8ù¿ð›0—€ü/Ÿˆô¯1ÿñœÿÅýŸ
+1‘ ê™Uúo[¾þ`TøRÿW“Ê ÿP2ù_&¬­ÿqÿ´ÿ±ø½æayýK6ŠCýSnõ·`sýß÷ýÝíóã—á[{xó›Y¾ÿŸëŸ‡³þ[ð²ÿ¿¹aÿïÍúñþ=õ»ïýÃýíãÝß>ã]ý‡ýçáǸÿoÉÿ¶üßlÖÿnxKó¯Y¯ÿ–û#пodú_²û_µÿÏmÓŒûÿTØÿ›ð²ÿ§ÿÛ%kõ?ÿ¯ûŒeç?¡¤ÐÅ©ÿ;v1rþcÁ¶úŸî’Jÿo:åÿÇÀù¯	¢úWëÿ½ÌhºŽû?R.4 ;F¤Åùä?Û@ÿoDúטÿ0çÿló|#Ò¿æüü¿&þæ‘þç?0ÿÍú}#;ÿÓ›ÿP¸ÿ7þ_߈ô¯Ñÿ{žÿ@þ³
+tÿø¦Öú_©ÿ·éäÿé:öÿ&Ì%ø§ï§?ð<p…Hÿý¿çùÜÿِ#'€žè?èÌh§ùøÿLÕ_mþCÓu俚Àü߈ô¯8ÿügðùF¤ÿZþ¯×þïÙÿ…þMøÔ{~é_qþC¢ÿÓÖ߈ô¯9ÿþ/ðùFvþ§8ÿþðùF¤Íùèßü_¾©µþ×›ÿÐNóØÿ›0—€üWŸˆô_Íÿuùþ_BCÿ§	¼ÿûF ÿFÅÿÏþ¯„ÿËQý«ù¿ÊuþÏnâG`Žé_1ÿ«áýÏî}#Ò¿Fþ×¼þÓÿgù_¾é_3ÿÿ§	ÌÿðHÿšù_ä˜Àù¯odçŠù_ø¿M: Ž鿚ÿëjýoò?Lˆù{
 ¦Öú_ÍÿÏþ/üŸ&Ì%`þŸODú¯æÿºœÿUBƒþMïÿ‘¼_ú:ù_qšÿØáÿ²@TÍü/îM ÿË7"ýkæ¡ðùF¤ÿjþ¯Ëõ¿·è߀Ï?Ÿ‡_»ñ±Í“À!"ýkæqÿcë¿oDú×Ìÿâü×ü_¾‘ÿ)æÑÿiù_¾é_3ÿý›€ú}Ský¯—ÿ§ùø¿M˜K@þ—ODúטÿ8çqþoBL$€zf•þÛÅ‘_0*|©ÿ«IeÐ(…ù&¬­ÿqÿ´ÿ±ø½æayýKIqø{)Û@êoÀæú¿îû»ÛçÇ/÷öðæ7³|ÿ?×?—ÀýŸ	ã×?nýÿ™kÁnÀ›õÿâý{êwßû‡ûÛÇ»¿}Æ»ú/úÏÏqÿߢ2zwÍfýïö‡·4ÿšõúoC&ÿÑü?¾‘éÉîÕþ?·åtþŸ¸ÿ·aüúÇÖoöÿ>Y«ÿéüÝg,;ÿ	%….Nýß±‹-ç?l«ÿéþ'©ôÿ¦0ÍàüÏQý«õÿ^æ?4]Gþ«	)€#Ò¿æüöÿ&ðþï‘þ5æ?Ðÿk
+ó|#Ò¿æüòßM üÍ7"ýkÎàþßú}#;ÿÓ›ÿÐqÿoý¿¾é_£ÿ÷<ÿ¡Eÿ&Ðýã›Zë¥þß.”©ÿÿ¯
+ã×ß÷ø¼"Ò¿Fÿï<ÿû?räÐ3ýùíäÿÂÿg‚¨þšóÈ1ù¾é_sþú7ÿ—oDú¯åÿzíÿžý_èß„Oý±çà‘þç?0ÿÓÖ߈ô¯9ÿþ/ðùFvþ§8ÿþðùF¤Íùèßü_¾©µþ×›ÿÐNþ/öÿ&Œ_?ù¯~鿚ÿëòý¿„†þOxÿ÷@ÿ‹‡AŒ
+_ìÿŠgÿWÆÿe¨þÕü_å:ÿ‹ç¿	7ñ#0Ljô¯™ÿÅûŸ	ÜÿúF¤ü¯yý§ÿÏò¿|#Ò¿fþþO”ï‘þó¿Èÿ°ó_ßÈÎÿó¿ð›>t< #Ò5ÿ×Õúß¶ä˜ò÷L­õ¿šÿ+žý_ø?M¿~æÿùE¤ÿjþ¯Ëù_%4èß„ñþÉûE ÿ¨“ÿ'ÿWÂÿe¨þšù_Üÿš@þ—oDú×ÌÿBÿ&àÿòHÿÕü_—ëKþ»Ÿ>¿vãc›'CDú×ÌÿâþÇÖ߈ô¯™ÿÅù¯	ø¿|#;ÿSÌÿ¢ÿÓò¿|#Ò¿fþú7õû¦Öú_/ÿ+Nþ/üß&Œ_?ù_~é_cþãœÿÅù¿	1‘ ê™uú_êøú“QáKý_M*ƒþCçÿáÿÒgeýû§ýýÃïU¿Ëë_r)ÃßK©ÍÔß„­õ?~;Ü÷w·Ï_†/íáí/fùþ®Îø¿m˜KpÞÿGî}±Uÿ/Ö¿§~÷½¸¿}¼ûëg¼«ÿðý?Æý“п	¼ïûf«þwûÛšÍzý7]áüßš¿|#Òÿ¢ÝÿºýӍýß9Eü&\ìÿ¿~åyàŠ•úŸŽÿW~ƲóŸPRèâÔÿË8ÿ—ó}6Õÿtý“ÿ¬9ÿþ÷§þꯏ¤þÛ7ä?4]$ÿÑ„”
+ÀŽ‘èaûï–ù¥åþßÎû}#ÑÿÂößuóÎù	ÿŸ	ÌðDÿÛ·Ìä¿ÚÀù¿o$ú_Øþ»!ÿ¹t™ûèÿõèüoYûï¦ùûèÿõDÿÛ·œÿ5ý›@÷o*­ÿoµÿ®êÿ-ÍÉÿÓ%æ?›0—àìÿÉ™ç+$ú_Øþ»aÿŸ;îÿlÈ‘@Ïl×ÐñÖÿ&àÿ³ARÿzþ¯ëù‘ýŸ	ÌðDÿ*þ¯)ÿmXпø¿|#Ñ5ÿ×kÿ÷ìÿBÿ&|ê= ¿Hô¯âÿ:Ïiú·€õß7ý«ø¿¦üÇ®Ðÿeþ/߈Îÿ4ü_çù‘þðùF¢ÿ×tþ×ôoþ/ßTZÿ«ù¿òìÿbÿoÂ\ò_}"Ñ=ÿ×åûî2ýŸ&ðþï›íúo”ò¿Îþ¯„ÿËIýëù¿ÊuþÏnâG`Ž‘è_3ÿ+óþgï{¾‘è_%ÿk^ÿÉÿ0ü/ßHô¯šÿ…ÿÓ„å»F¢Õü/ò?Làü×7¢ó?Íü/üß&„ ÇHô_Ïÿu¹þwM&ÿÄX¿g*­ÿõü_ñìÿÂÿiÂ\æÿù
 D¢ÿzþ¯Ëù_¹Ëèß„ñþÉûe»þ£Rþ×éþ/¤‚ÿËIýUó¿¸ÿ5ü/ßHô¯šÿ…þMÀÿå‰þëù¿®×ÿ„þMøüóùxøµŸÛ<	"Ñ¿jþ÷?&°þûF¢Õü/ÎMÀÿåÑùŸfþýŸ&ÿå‰þUó¿Ð¿	¨ß7•ÖÿŠù_“ÿ#ÒÿaÂ\ò¿|"Ñ¿ÊüÇ9ÿ‹ób"Ô3«ôÓbÏ×kF…/õ5©úeìÿÄÿ¥ÏÚú÷Oûû‡ßk~–׿äîTÿ”›†ú[°¹þÇo‡ûþîöùñËð­=¼ùÍ,ßÿÏõÏ…üþØÿÇ»WlÖÿ‹ùï©ß}ïîoïþöïê?üGÿÏñü¿
+俘Àû¾o6ë·?¼¥ù׬×ZÞÿM ùË72ý/Ùý¯Ûÿ·á´ÿO…óþØÿýÊþßkõ?] ¬ûŒeç?¡¤ÐÅ©ÿ;v1pþcÁ¶úŸ.€¯9ÿþû?†ÿú[ ªÿÂàÓ
+ߪü‡¦+øÿMH¹Ð ì‘þ6 ¿¯ÿ«ùã5 ú7€ó?߈ô¿°ø]ý¿žÿpîÿÌ1ù¾éaðúõ¿ä?ÚÀù¿oDú_Ø ü¾þ¯òŸCÃý¿	ôÿúFvþ·¬ø}ý_Ï(Üÿ›@ÿ¯oDú_Ø ¼áü¯mп	tÿø¦ÖúÿVð¨ð¥ý¿¥;­ÿã#ý0—àäÿÉÿ3Dú_Ø ¼aÿ¸ÿ³!GN =#ÐPñ5íäÿÂÿg‚¨þÕü_×ùÏû?˜ÿà‘þ5ü_Sþ[× ðùF¤ÿZþ¯×þïÙÿ…þMøÔ{~é_Ãÿ5é?&ú?M`ý÷Hÿþ¯iÿú¿LÀÿåÙùŸ‚ÿë<ÿ¡£ÿÃü_¾é_Ãÿ5­ÿm‹þMÀÿå›Zë-ÿ×tÿ›»Žý¿	s	Èõ‰HÿÕü_WóCCÿ§	¼ÿûF ÿF'ÿëìÿŠø¿,Õ¿šÿ«\åu<ÿM¸‰q€9F¤Íü/ÞÿLàþ×7"ýkäÍë?ù&ÿå‘þ5ó¿ðšÐ |׈ô¯™ÿEþ‡	œÿúFvþ§˜ÿ…ÿÛ„ð¡ãà‘þ«ù¿®Öÿ¶!ÿÄX¿gj­ÿÕü_§ûßÈÿ·a.óÿ|"Ò5ÿ×åü¯ôoÂxÿäý"ÐÔÉÿ:ÝÿÅá‘€ÿË Qý5ó¿¸ÿ5ü/߈ô¯™ÿ…þMÀÿå‘þ«ù¿.×ÿv<Fÿ|þù|<üڍmžé_3ÿ‹ûXÿ}#Ò¿bþù6àÿòìüO1ÿ‹
 þOÈÿòHÿšù_èßÔï›Zë½ü¯0åÑÿaÂ\ò¿|"Ò¿ÆüÇ9ÿ‹ób"Ô3«ôŸº¥–¯?¾ÔÿÕ¤2è?”Òàÿ²`mýû§ýýÃï5¿Ëë_Jh‡¿—ÒKý
+Ø\ÿã·Ã}wûüøeøÖÞüf–ïÿçúçÉ0áeÿs3ýÝ€+6ëÿÅû÷Ôï¾÷÷·wûŒwõ^ôŸ‡ãþ¿œÿ™@þ‹o6ë·?¼¥ù׬×2ë¿	ø|#Óÿ’Ýÿªýn›fÜÿ'úlxÙÿ½ßìÿݱVÿÓùÿºÏXvþJ
+]œú¿ãðÎ,ØVÿÓýORéÿMSÿoäü×Qý«õÿ^æ?4]Gþ›	)€#Ò¿âüò_màýß7"ýk̘ûéÿ3ù¾é_sþóŸL üÍ7"ý+ΠÿÇú}#;ÿÓ›ÿÐqÿoý¿¾é_£ÿ÷<ÿ¡Eÿ&Ðýã›Zë¥þß.„©ÿü?æüÓ÷Óx¸B¤þßyþ÷&äÈ	 gú:óÚÉÿ…ÿÏQýÕæ?´ù_60ÿÁ7"ý+Î ÿÕü_¾é¿–ÿëµÿû¼þGôo§þØóð‹HÿŠóȳõß7"ýkΠÿËü_¾‘ÿ)ΠÿÃü_¾é_sþú7ÿ—oj­ÿõæ?´“ÿ‹ý¿	s	Èõ‰HÿÕü_—ïÿ%4ôšÀû¿oúoTü_ñìÿêðY ª5ÿW¹ÎÿâùoÂMüˆÌ1"ýkæñþg÷¿¾é_#ÿkÊÿþ3ôoù_¾é_1ÿ«Áÿió|#Ò¿fþù&pþëÙùŸbþþo‡Ž€cDú¯æÿºZÿÇ¿Žþ
+ˆù{¦Öú_ÍÿÏþ/üŸ&Ì%`þŸODú¯æÿºœÿUBƒþMïÿ‘¼_ú:ù_qòµø¿,Õ_3ÿ‹û_ÈÿòHÿšù_èßü_¾鿚ÿëzýèß„Ï?Ÿ‡_»ñ±Í“À!"ýkæqÿcë¿oDú×Ìÿâü×ü_¾‘ÿ)æÑÿiù_¾é_3ÿý›€ú}Ský¯—ÿ™ÿhÈ\ò¿|"Ò¿ÆüÇsþ÷6ÄD¨gÖé?/µ|ýÁ¨ð¥þ¯&•Aÿ¡”ˆÿË‚µõ?îŸö?ö¿×ü",¯)!û¿”þ?6×ÿøípßßÝ>?~¾µ‡7¿™åûÿ¹þyø7ë¿/ûÿ”Øÿ;d³þ_¼Oýî{ÿpûx÷·ÏxWÿáEÿyø1îÿÛÀùŸ	ä¿øf³þwûÃ[šÍzý·!“ÿdë½odú_²û_µÿÏmÓŒûÿÔqþgÂËþŸþo—¬Õÿtþ¿î3–ÿ„’B§þïØÑÿiöúŸî’Jÿo
+Sÿ/ç¿&ˆê_­ÿ÷2ÿ¡éȳ!åB°cDúלÿÀù¿	ôÿøF¤ùsþý&0ÿÁ7"ý+ÎHÌ2ð7߈ô¯8ÿù¿6ÐÿëÙùŸâüîÿM ÿ×7"ýkôÿÎóп	tÿø¦Öú_¥ÿ7
+o1þŸ®ÿcÂ\‚ú~úÏWˆô¯Ñÿ;ÏàþÏ„9ôŒ@ÿAgþCËüCDõW›ÿÐtû?˜ÿà‘þç?0ÿËü_¾é¿–ÿëµÿ{ö¡>õÇžG€_Dúלÿ@ÿ§	¬ÿ¾é_sþý_&àÿòìüOqþý&àÿòHÿšóп	ø¿|Ský¯7ÿ¡eþƒ!s	Èõ‰HÿÕü_—ïÿ%4ôšÀû¿oúoTü_ñìÿÊø¿,Õ¿šÿ«\çñü7á&~Äæ‘þ5ó¿xÿ3û_߈ô¯‘ÿ5¯ÿä˜@þ—oDú×ÌÿÂÿió|#Ò¿bþù6pþëÙùŸbþþo‡Ž€cDú¯æÿºZÿÛ–übAþž©µþWóųÿÿ§	s	˜ÿç‘þ«ù¿.ç•РÆû$ïþ£Nþó-Õ_3ÿ‹û_ÈÿòHÿšù_èßü_¾鿚ÿërýo‡
+#ú·àóÏçãá×n|ló$pˆHÿšù_Üÿ˜Àúï‘þ5ó¿8ÿ5ÿ—odçŠù_ôš@þ—oDú×ÌÿBÿ& ~ßÔZÿëåMþ@ÿ‡	s	Èÿò‰Hÿóçü/ÎÿMˆ‰PϬÒ[–Z¾þ`TøRÿW“Ê ÿP
+óMX[ÿãþiÿcÿð{Í/Âòú—’š8Ô?åñþ‡úë³¹þÇo‡ûþîöùñËð­=¼ùÍ,ßÿÏõÏ%²ÿ7aÚ›
+ûÿ¹ì\±Yÿ/Þ¿§~÷½¸¿}¼ûÛg¼«ÿð¢ÿ<ü÷ÿmäþß„ŒÞ]³Yÿ»ýá-Í¿f½þېÉ4ü'ßÈô¿d÷¿jÿŸÛrÚÿ'îÿm¿þ±õ›ý¿OÖê:ÿ_÷ËÎBI¡‹SÿwìbÇùÛêºÿI*ý¿éÜÿËù¯	¢úWëÿ½ÌhºŽüWR.4 ;F¤ÍùìÿM ÿÇ7"ýkÌ ÿ׿?øF¤Åù
+÷ÿ&þæ‘þ5ç?pÿoý¿¾‘ÿ)Îàþßú}#Ò¿Fÿï<ÿý›@÷oj­ÿUúÓð&ÐåÑÿCþ¯§Û׌ÿÇ+"ýkôÿÎó¸ÿ3!GN =#ÐЙÿÐNþ/ü&ˆê¯6ÿ¡þϘÿà‘þç?´èßü_¾é¿–ÿëµÿû¼þGôo§þØóð‹HÿšóÈ7õß7"ýkΠÿËü_¾‘ÿ)Îàþ×ü_¾é_sþú7ÿ—oj­ÿõæ?´Óüöÿ&LÏfü_^鿚ÿëòý¿„–þOxÿ÷@ÿŠÿ+Nþ¯ðY ª5ÿW¹ìÿÌÿ²á&~Äæ‘þ5ó¿xÿ3û_߈ô¯‘ÿ5¯ÿä˜@þ—oDú×ÌÿÂÿió?|#Ò¿fþù&pþëÙùŸbþþo‡Ž€cDú¯æÿºZÿÛ–übAþž©µþWóųÿÿ§	ã×Ïü?¿ˆô_Íÿu9ÿ«„ý›0Þÿ#y¿ôuò¿â”ÿ•ñY ª¿fþ÷¿&ÿå‘þ5ó¿Ð¿	ø¿|#Ò5ÿ×õúÑ¿	Ÿ>¿vãc›'CDú×ÌÿâþÇÖ߈ô¯™ÿÅù¯	ø¿|#;ÿSËÿJôÚ@þ—oDúWÌÿÊèßÔï›Zë½ü¯8ù¿ð›0=›ñyE¤ùsþçÿ&ÄD¨gVé?.ŽüúƒQáKý_M*ƒþCÉÿ—këÜ?íì~¯ùEX^ÿ’»Óþ/å†ü76×ÿøípßßÝ>?~¾µ‡7¿™åûÿ¹þ¹ÿkÃ\‚¦:°ÿwÆfý¿xÿžúÝ÷þáþöñîoŸñ®þÃô?ü÷ÿ-ïÿ6pÿï›Íúßíoiþ5ëõ?Èÿ	4ùF¦ÿ%»ÿuûÿ6Œïÿ9öÿ&ü±ÿÁy¸b­þ§óÿuŸ±ìü'”º8õÇnœÿÍù>ÛêºÿI:
 óº©ÿ·¥þˆê_­ÿ÷2ÿ¡é:ü?&¤\h vŒHÿŠóþ8ÿóHÿóæüòßM`þƒoDúWœÿðÿ™Àù¿oDúWœÿÐpÿoý¿¾‘ÿéÍ(Üÿ›@ÿ¯oDú×èÿ=Ï ÿǺ|Ský¯Òÿ›Âý1úºÂþß„¹'ÿOßãÿq†Hÿý¿çùÜÿِ#'€žè?èÌh'ÿþ?DõW›ÿÐtóM`þƒoDúWœÿРðùF¤ÿZþ¯×þïÙÿ…þMøÔ{~é_qþC¢ÿÓÖ߈ô¯9ÿþ/ðùFvþ§6ÿ!vô˜€ÿË7"ý+ÎhÑ¿	ø¿|Ský¯7ÿ¡æ?°ÿ7a.ù¯>鿚ÿëòý¿„†þOxÿ÷@ÿ‹‡AŒ
+_žÿuö%ü_ˆê_ÍÿU®ó¿xþ›p?â sŒHÿŠù_
+ï&pÿë‘þ5ò¿æõŸþ?ÈÿòHÿšù_ø?MhP¾kDú×Ìÿ"ÿÃÎ}#;ÿSÌÿÂÿmBøÐñ pŒHÿÕü_WëېÿaB,Èß3µÖÿjþ¯xöáÿ4a.óÿ|"Ò5ÿ×åü¯ôoÂxÿäý"ÐÔÉÿ:ÝÿÅPðY ª¿fþ÷¿&ÿå‘þ5ó¿Ð¿	ø¿|#Ò5ÿ×åúߎ[ôoÀçŸÏÇÃ¯ÝøØæIà‘þ5ó¿¸ÿ1õß7"ýkæqþkþ/ßÈÎÿó¿èÿ4ü/߈ô¯™ÿ…þM@ý¾©µþ×Ëÿ
+§ùý&Ì% ÿË'"ýkÌœó¿8ÿ7!&@=³Jÿm^jùúƒQáKý_M*ƒþC)
+þ/ÖÖÿ¸ÚÿØ?ü^ó‹°¼þ¥¤4ü½áÇøü§þúl®ÿñÛ᾿»}~ü2|ko~3Ë÷ÿsýs‰¼ÿ›0oûÿ™kÁnÀ›õÿâý{êwßû‡ûÛÇ»¿}Æ»ú/úÏÏqÿßFîÿLÈèÝ5›õ¿ÛÞÒükÖë¿
+™õßš¿|#Óÿ’Ýÿªýn˨ÿœèÿ±aüúǶoöÿ>Y«ÿéüÝg,;ÿ	%….Nýßqøç?l«ÿéþ'©ôÿ¦©ÿ7rþk‚¨þÕú/óîÿH¹Ð ì‘þ5ç?°ÿ7þ߈ô¯1ÿaîÿ%ÿÕæ?øF¤ÍùôÿšÀù¿oDúWœÿ@ÿ¯
+ôÿúFvþ§7ÿþ_èÿõHÿý¿çùôÿÚ@÷oj­ÿUúÓð&PÊÔÿËùŸ	ã×ß÷ø¼"Ò¿Fÿï<ÿû?räÐ3ýùíäÿÂÿg‚¨þjóÚñW‚ç¿ÌðHÿŠóZôoþ/߈ô_ËÿõÚÿ}^ÿ#ú7áSìyøE¤ÅùMƒþ-`ý÷Hÿšóèÿ2ÿ—odçŠó¸ÿ5ÿ—oDúלÿ€þMÀÿå›Zë½ùíÉÿØÿ›0}ýø¿¼"Ò5ÿ×åû	
+ýŸ&ðþïþÿW<û¿:ü_ˆê_ÍÿU®ó¿xþ›p?â sŒHÿšù_¼ÿ™Àý¯oDú×Èÿšò†ÿý[@þ—oDúWÌÿjðšÐ |׈ô¯™ÿEþ‡	œÿúFvþ§˜ÿ…ÿÛ„ð¡ãà‘þ«ù¿®Öÿñ¯£bAþž©µþWóųÿÿ§	ã×Ïü?¿ˆô_Íÿu9ÿ«„ý›0Þÿ#y¿ôuò¿âäÿjñY ª¿fþ÷¿&ÿå‘þ5ó¿Ð¿	ø¿|#Ò5ÿ×õúÑ¿	Ÿ>¿vãc›'CDú×ÌÿâþÇÖ߈ô¯™ÿÅù¯	ø¿|#;ÿSÌÿ¢ÿÓò¿|#Ò¿fþú7õû¦Öú_/ÿ+Nþ/üß&L_?þ/¯ˆô¯1ÿñœÿÅýŸ
+1‘ ê™uúï–Z¾þ`TøRÿW“ÆùÏ¡”ŒÿË‚µõ?îŸö?ö¿×ü",¯)©þ^J¹!ÿÍ„Íõ?~;Ü÷w·Ï_†oíáÍofùþ®.‘ü'Ưÿæ†ý¿W6ëÿÅû÷Ôï¾÷÷·wûŒwõ^ôŸ‡ãþ¿¼ÿ›Ñ»k6ë·?¼¥ù׬×2þÈòLÿ
 Kvÿ«öÿ¹-£þsbþ—
+ã×Oÿ·_Öê:ÿ_÷ËÎBI¡‹SÿwìRàüÇ‚mõ?Ýÿ$•þߦþ_ÎMÕ¿Zÿïeþó¬H¹Ð ì‘þ5ç?°ÿ7þ߈ô¯1ÿaîÿ%ÿÝæ?øF¤ÍùøÿL üÍ7"ýkÎàþßú}#;ÿSœÿÀý¿	ôÿúF¤þ_æ?˜B÷oj­ÿUúÓðœž!å®pÿgÂøõ÷=þ¯ˆô¯ÑÿËüSräÐ3ýùíÉÿ…ÿÏQý5ç?0ÿ׿?øF¤Íùèßü_¾é¿–ÿëµÿ{ö¡>õÇžG€_Dúלÿ@þ‹	¬ÿ¾é_sþ÷?&àÿòìüOmþC
+ô˜€ÿË7"ý+ÎÈèßü_¾©µþ×›ÿÐNóØÿ›0~ýä¿úE¤ÿjþ¯Ë÷æ?XÁû¿oúoTü_ñìÿŠø¿,Õ¿šÿ«\öÿç¿7ñ#0Ljô¯™ÿÅûŸ	ÜÿúF¤ü¯yý'ÿÃò¿|#Ò¿fþþO˜ÿá‘þ5ó¿Èÿ0ó_ßÈÎÿó¿ð›>t< #Ò5ÿ×Õúß¶ä˜ò÷L­õ¿šÿ+Nþ/òÿm¿~æÿùE¤ÿjþ¯Ëù_%´èß„ñþÉûE ÿ¨“ÿ§ùÿ—¢úkæqÿkù_¾é_3ÿý›€ÿË7"ýWó]¯ÿý›ðùçóñðk7>¶y8D¤Íü/îL`ý÷HÿŠù_䨀ÿË7²ó?Åü/ú?M ÿË7"ýkæ¡P¿oj­ÿõò¿â”ÿ…ÿÛ„ñë'ÿË/"ýkÌœó¿8ÿ7!&@=³Jÿy±åëF…/õ5©ú¥0ÿÑ„µõ?îŸö?ö¿×ü",¯))Ïÿ”ü&l®ÿñÛ᾿»}~ü2|ko~3Ë÷ÿsýs‰ô›0íþÙÿ{e³þ_¼Oýî{ÿpûx÷·ÏxWÿáEÿyø1îÿÛÀý¿	´úf³þwûÃ[šÍzý·Ìÿ2ÿodú_²û_µÿÏm7öçDþ‹
+S÷7û¯¬Õÿtþ¿î3–ÿ„’B§þïØþÎôÙVÿÓýORéÿMaêÿåü×Qý«õÿ^æ?4]Gþ«	)€#Ò¿æüü&ðþï‘þ5æ?ÿa
+ó|#Ò¿âü‡Äý¿	„¿ùF¤ÅùôÿÛ@ÿ¯odçzó
+÷ÿ&Ðÿë‘þ5úÏó˜ÿjÝ?¾©µþWêÿíbý¹ÃÿcC}?– ÿODú×èÿ=Ïàþφ9ôŒ@ÿAgþC;ù¿ðÿ™ ª¿Úü‡†ýŸÌðHÿŠóôoþ/߈ô_ËÿõÚÿ=û¿Ð¿	ŸúcÏ#À/"ýkÎ ÿÝÖ߈ô¯8ÿ¡¥ÿËü_¾‘ÿ©Íˆý&àÿòHÿŠóȶÿ—oj­ÿõæ?´Óüöÿ&ÿê‘þ«ù¿.ßÿKhèÿ4÷ßôߨø¿âÙÿÕâÿ²@Tÿjþ¯rÿÅóß„›ø˜cDú×ÌÿâýÏî}#Ò¿Fþ×¼þ“ÿaù_¾é_3ÿÿ§	
+ÊwHÿšù_ä˜Àù¯odçzù_þo‡Ž€cDú¯æÿºZÿÛ–ü"@]Ský¯æÿŠgÿþO˜ÿç‘þ«ù¿.ç•РÆû$ïþ£NþWœü_ÿ—¢úkæqÿkù_¾é_3ÿý›€ÿË7"ýWó]®ÿíh	Gÿ|þù|<üڍmžé_3ÿ‹ûXÿ}#Ò¿fþç¿&àÿòìüO1ÿ‹þOÈÿòHÿšù_èßÔï›Zë½ü¯8ù¿ð›@þ—oDúטÿ8çqþoBL$€zfþÓRË׌
+_êÿjRôJÁÿeÂÚú÷Oûû‡ßk~–׿”TÆý_Êcþõ×gsýß÷ýÝíóã—á[{xó›Y¾ÿŸëŸKdÿoÂP‰Èþß/›õÿâý{êwßû‡ûÛÇ»¿}Æ»ú/úÏÏqÿßòL ýÓ7›õ¿ÛÞÒükÖë¿
+™õßš¿|#Óÿ’Ýÿªýn»±ÿ;'úl ÿÛ7kõ?ÿ¯ûŒeç?¡¤ÐÅ©ÿ;väÿÛ°­þ§ûŸÅ‡ÁkÎs
+ôÿ"ªµþßËü‡¦cþ§
+)€#Ò?óþõÐÿã‘þ5æ?Ìý¿øM`þƒoDúgþÿÎÿ}#Ò?óþõÐÿëÙùóþíÐÿë‘þ5úçùèߺ|Ský¯ÔÿÛÅÔÐÿkH9%Àÿã‘þ5úçùÜÿ™#'€žè?èÌh'ÿþ?Dõgþÿæ?øF¤æ?üëÁÿå‘þkù¿^û¿™ÿ`ʧþØóð‹HÿÌø×Ãúï‘þ™ÿð¯ÿ—odçÌø·ƒÿË7"ý3ÿá_þ/ßÔZÿëÍh'ÿûÈõHÿÕü_—ïÿ%4ôšÀû¿oúoTü_ñìÿÊø¿,Õ¿šÿ«\çñü7á&~Äæ‘þ5ó¿xÿ3û_߈ô¯‘ÿ5¯ÿä˜@þ—oDú×ÌÿÂÿiBƒò]#Ò¿bþù6pþëÙùŸbþþo‡Ž€cDú¯æÿºZÿÛ–ü"@]Ský¯æÿŠgÿþO˜ÿç‘þ«ù¿.ç•РÆû$ïþ£NþWœü_	ÿ—¢úkæqÿkù_¾é_3ÿý›€ÿË7"ýWó]®ÿí°aDÿ|þù|<üڍmžé_3ÿ‹ûXÿ}#Ò¿fþç¿&àÿòìüO1ÿ‹þOÈÿòHÿšù_èßÔï›Zë½ü¯8ù¿ð›@þ—oDúטÿ8çqþoBL$€zf•þO|ü“QáKý_M*ƒþCîð™°²þÇýÓþÇþá÷ª_„åõ/yòÿ¦vœÿ@ýõÙZÿã·Ã}wûüøeøÒÞþb–ïÿçúçœØÿ›0—à¼ÿÜúb«þ_¬Oýî{ÿpûx÷×ÏxWÿá?ú~Œûÿ&‘ÿ`ïû¾ÙªÿÝþð¦æ_³^ÿMWXÿM@ÿ¾éÑîÝþ¿éÆþÿkÃÅþÿëWž®X©ÿéøåg,;ÿ	%….Nïÿ±$òÿMØTÿÓõOZük°æüwøgÜÿ…&P$õ_Øþ»!ÿ¡éȱ!åB°c$ú_Øþ»eþCaþ·
+œ÷ûF¢ÿ…í¿ëæ?œó?"þ_˜ÿà‰þ¶ÿn™ÿÎÿL üÍ7ý/lÿݐÿ\Æ¿†þ
+ ÿ×7¢ó¿eí¿›æ?Ðÿcý¿¾‘èaûï–ó¿Ñ„þ
+ ûÇ7•Öÿ·ÚWõÿ–˜GÿOyÿ7a.ÁÙÿ“3ÏWHô¿°ýwÃþ?wÜÿِ#'€žÙ®ÿåÍÀ£Â—ÏhOþ/ü6Hê_Ïÿu=ÿüg˜ÿà‰þUü_Sþ[iÑ
 ¿	ø¿|#Ñ5ÿ×kÿ÷ìÿBÿ&|ê= ¿Hô¯âÿ:Ïaþ·
+¬ÿ¾‘è_Åÿ5å?v™þ/ðùFtþ§áÿ:Ïô˜€ÿË7ý«ø¿¦ó¿&£ðù¦Òú_Íÿ5Ýÿæ.²ÿ7a.ù¯>‘连ÿëòý?w-þOxÿ÷Ívý7Jù_gÿWÁÿe¤þõü_å:ÿ‹ç¿	7ñ#0ÇHô¯šÿÅûŸ	¼ïùF¢•ü¯óúÉÿ0ü/ßHô¯šÿ…ÿÓ„å»F¢Õü/ò?Làü×7¢ó?Íü/üß&„ ÇHô_Ïÿu¹þwM&ÿÄX¿g*­ÿõü_ñìÿÂÿiÂ\æÿùD¢ÿzþ¯Ëù_¹kÑ¿	ãý?’÷ËvýG¥ü¯0ù¿þ/$õ×Ìÿâþ×ò¿|#Ñ¿fþó_lÀÿå‰þëù¿®×ÿ„þMøüóùxøµŸÛ<	"Ñ¿jþ÷?&°þûF¢Õü/ÎMÀÿåÑùŸfþýŸ&ÿå‰þUó¿Ð¿	¨ß7•ÖÿŠù_“ÿ#ÒÿaÂ\ò¿|"Ñ¿ÊüÇsþ÷6ÄD¨gVé¿I‹=_¯¾ÔÿÕ¤2è?”Üáÿ²`mýû§ýýÃï5¿Ëë_Jèš¡þ)7‘ú[°¹þÇo‡ûþîöùñËð­=¼ùÍ,ßÿÏõÏ…ùŸ6ÌÛþæZ°pÅfý¿˜ÿžúÝ÷þáþöñîoŸñ®þËþóðc<ÿo™ÿaç¾Ù¬ÿÝþð–æ_³^ÿm ÿÛÖ{ßÈô¿d÷¿jÿŸÛv|ÿÏ©ÃÿgÂT€¯_Ùÿûd­þ§€uŸ±ìü'”º8õÇ.Òÿi¶úŸ.€¯9ÿÍéÔÿç¿&ˆê¿°øt÷*ÿ¡é:îÿMH¹Ð ì‘þ6 ¿¯ÿ«ù]Ãý¿	ø}|#ÒÿÂàwõÿzþùÿüW˜ÿà‘þ6 ¯_ÿÛ˜8ÿ3ð7߈ô¿°ø}ý_å?‡†ûèÿõìüoYðûú¿žÿP¸ÿ7þ_߈ô¿°xÃù_Û èþñM­õÿ­àQáû»pêÿ)ã•0ú7à|ÿšñÿøD¤ÿ…
+Àöÿû?räÐ3ýÿWÓžü_øÿlÕ¿šÿë:ÿ¹kyþ[Àü߈ô¯áÿšòߺý›€ÿË7"ý×ò½öÏþ/ôo§þØóð‹Hÿþ¯Iÿ1‘ÿbë¿oDú×ðMûÿÐÒÿeþ/ßÈÎÿü_çùý&àÿòHÿþ¯iýo[ôoþ/ßÔZÿ+ù¿Î÷¿eøèß‚© ä¿zE¤ÿjþ¯«ù¡¡
 ÿÓÞÿ}#УâÿŠgÿWƒÿËQý«ù¿ÊuþÏnâG`Žé_3ÿ‹÷?¸ÿõHÿù_óúOþ‡	äùF¤Íü/üŸ&4(ß5"ýkæ‘ÿa翾‘ÿ)æáÿ6!|èx 8F¤ÿjþ¯«õ¿mÉÿ0!äï™Zë5ÿW<û¿ðš0€ù^鿚ÿërþW	
+ú7a¼ÿGò~è?êäÅÉÿðY ª¿fþ÷¿&ÿå‘þ5ó¿Ð¿	ø¿|#Ò5ÿ×åúߎ¯„è߀Ï?Ÿ‡_»ñ±Í“À!"ý+æ‘ÿnë¿oDú×Ìÿâü×ü_¾‘ÿ)æÑÿiù_¾é_3ÿý›€ú}Ský¯—ÿ5Þÿæ®ÃÿmÂù –ü/§ˆô¯1ÿqÎÿâüß„˜H õÌ*ý·—Z¾þ`TøRÿWsšÿÊØÿ…ÿKŸµõ?îŸö?ö¿×ü",¯)iüïSÊcÿ/õ×gsýß÷ýÝíóã—á[{xó›Y¾ÿŸëŸK$ÿÁ„ñËKÀþß'›õÿâý{êwßû‡ûÛÇ»¿}Æ»ú/úÏÏqÿßFöÿ&Ðþé›Íúßíoiþ5ëõ߆Lþ‹	¬÷¾‘éÉîÕþ?·ÝØÿæÿÚ0ö~³ÿ÷ËZýOçÿë>cÙùO()tqêÿŽÝðHàüÇ€mõ?Ýÿ$•þߦþ_ÎMÕ¿ZÿïeþCËü/#R.4 ;F¤Åùä¿Ù@ÿoDúטÿpîÿôÿ˜Àü߈ô¯8ÿùŸ6þæ‘þç?´Üÿ›@ÿ¯odçzó:îÿM ÿ×7"ýkôÿÎóп	tÿø¦Öú_¥ÿ7
+ωP¦þ_öÿ&„Ð÷c	ðÿøD¤þßóüîÿlÈ‘@Ïôtæ?´'ÿþ?DõW›ÿÐüß60ÿÁ7"ý+ÎhÑ¿	ø¿|#Ò-ÿ×kÿ÷ìÿBÿ&|ê= ¿ˆô¯9ÿüGXÿ}#Ò¿âü‡Lÿ—	ø¿|#;ÿS›ÿý&àÿòHÿŠó2ú7ÿ—oj­ÿõæ?´'ÿGdÿoù¯¾鿚ÿëòý¿æ?ÙÀû¿oúoTü_ñìÿjðY ª5ÿW¹ÎÿâùoÂMüˆÌ1"ýkæñþg÷¿¾é_#ÿk^ÿéÿ3ü/߈ô¯™ÿ…ÿÓ„å»F¤Íü/ò?Làü×7²ó?Åü/üß&„ Ljô_Íÿuµþ·™ü"@]Ský¯æÿŠgÿþO˜ÿç‘þ«ù¿.ç•ТÆû$ïþ£NþWœü_ÿ—¢úkæqÿk
 ù_¾é_3ÿý›€ÿË7"ýWó]¯ÿý›ðùçóñðk7>¶y8D¤Åü/òßm`ý÷Hÿšù_œÿš€ÿË7²ó?Åü/ú?M ÿË7"ýkæ¡P¿oj­ÿõò¿âÉÿð›@þ—oDúטÿ8çqþoBL$€zf•þËbË׌
+_êÿjÒ8ÿ9”ñY°¶þÇýÓþÇþá÷š_„åõ/CýGÿoÊïõ7`sýß÷ýÝíóã—á[{xó›Y¾ÿŸëŸó?m˜vÿìÿ½²Yÿ/Þ¿§~÷½¸¿}¼ûÛg¼«ÿð¢ÿ<ü÷ÿ-ïÿ6Ðýí›Íúßíoiþ5ëõßú¿m ùË72ý/Ùý¯ÚÿçÆó¿œ:îÿL˜º¿Ùÿ{e­þ§óÿuŸ±ìü'”º8õÇnœÿÍù>ÛêºÿI*ý¿§óŸ&FÎMÕ¿ZÿïeþCÓ±þېr¡Ø1"ý+Îhðÿ›@ÿoDúטÿ0çpÿgó|#Ò¿âü‡„ÿÏÎÿ}#Ò¿âü‡†ûèÿõìüOqþ÷ÿ&Ðÿë‘þ5úÏóÈÿ±îßÔZÿ«ôÿ¦á9ÑäÑÿÓuÌ6¡ï§àÿñ‰Hÿý¿çùÜÿِ#'€žè?èÌh'ÿþ?DõW›ÿÐtóM`þƒoDúWœÿРðùF¤ÿZþ¯×þïÙÿ…þMøÔ{~é_qþCÃù¯	¬ÿ¾é_qþCKÿ—	ø¿|#;ÿS›ÿ;ú?LÀÿå‘þç?´èßü_¾©µþ×›ÿÐNóØÿ›@þ«oDú¯æÿº|ÿ/¡¡ÿÓÞÿ}#УâÿŠgÿWÆÿe¨þÕü_å:ÿ‹ç¿	7ñ#0Ljô¯™ÿÅûŸ	ÜÿúF¤ü¯yý'ÿÃò¿|#Ò¿fþþO”ï‘þó¿Èÿ°ó_ßÈÎÿó¿ð›>0Ð3"ýWó]­ÿmKþ‡	± ÏÔZÿ«ù¿âÙÿ…ÿÓæÿùF¤ÿjþ¯Ëù_%4èß„ñþÉûE ÿ¨“ÿ'ÿWÂÿe¨þšù_Üÿš@þ—oDú×ÌÿBÿ&àÿòHÿÕü_—ë;lÑ¿Ÿ>¿vãc›'CDú×ÌÿâþÇÖ߈ô¯™ÿÅù¯	ø¿|#;ÿSÌÿ¢ÿÓò¿|#Ò¿fþú7õû¦Öú_/ÿ+Nþ/üß&ÿå‘þ5æ?Îù_œÿ›	 žY¥ÿÜ.µ|ýÁ¨ð¥þ¯&•Aÿ¡”ÿ—këÜ?íì~¯ùEX^ÿRR7îÿRnÈ3asýß÷ýÝíóã—á[{xó›Y¾ÿŸëŸK$ÿÉ„qgÆþß/›õÿâý{êwßû‡ûÛÇ»¿}Æ»ú/úžû§÷ÿ6òþo퟾٬ÿÝþð–æ_³^ÿmÈøL ÿÉ72ý/Ùý¯:ÿÏ©œöÿ©cÿoBS8ûŸ¬Õÿtþ¿î3–ÿ„’B§þï8üó¶Õÿtÿ“T
 úS˜ú9ÿ5ATÿjý¿—ṵ̀"åB°cDúלÿ€ÿßú|#Ò¿Æü‡¹ÿ—üw˜ÿà‘þ5ç?àÿ3ð7߈ô¯9ÿûèÿõìüOqþ÷ÿ&Ðÿë‘þ5ú™ÿ`
+Ý?¾©µþWéÿMÃsbøsH¹+¼ÿ›BÎc	ðÿøD¤þ_æ?˜’#'€žè?èÌh'ÿþ?DõW›ÿ0¶$òü·€ù¾é_qþó¿mÀÿå‘þkù¿^û¿ÏëDÿ&|ê= ¿ˆô¯9ÿþOXÿ}#Ò¿æüú¿LÀÿåÙùŸâüú?LÀÿå‘þ5ç? ðù¦Öú_oþC;Í`ÿoù¯¾鿚ÿëòýŸùVðþïþÿW<û¿:ü_ˆê_ÍÿU®ó¿xþ›p?â sŒHÿšù_¼ÿ™Àý¯oDú×Èÿšò˜ÿiù_¾é_1ÿ«Áÿió?|#Ò¿fþù&pþëÙùŸbþþo‡Ž€cDú¯æÿºZÿÇ¿Žþ
+ˆ uM­õ¿šÿ+žý_ø?M`þŸoDú¯æÿºœÿUBƒþMïÿ‘¼_ú:ù_qòµø¿,Õ_3ÿ‹û_ÈÿòHÿšù_èßü_¾鿚ÿëzýèß„Ï?Ÿ‡_»ñ±Í“À!"ýkæqÿcë¿oDú×Ìÿâü×ü_¾‘ÿ)æÑÿiù_¾é_3ÿý›€ú}Ský¯—ÿ'ÿþoÈÿòHÿóÏù_ÜÿÙ	 žY¥ÿ›¥Ž¯?¾ÔÿÕ¤2è?”á• ÿ—+ëÜ?íì~¯úEX^ÿ’»8úS›#õ·`kýß÷ýÝíóã—áK{xû‹Y¾ÿŸëŸsâýß„¹§ýŒìÿ±Uÿ/Ö¿§~÷½¸¿}¼ûëg¼«ÿðý?ÆýCþ‹
+Üÿûf«þwûÛšÍzý7]Çû¿	¬÷¾éÑîÝþ¿
+ãûN‘ü'þØÿ­à<\±RÿÓñÿÊÏXvþJ
+]œú¿cóŸ9ÿÑgSýO×?iñ¯ÁšóßáŸqÿ†_êo€¤þÛ7ä?4]ÄÿoBÊ…`ÇHô¿°ýwËü‡’ñÿ˜ÀùŸo$ú_Øþ»nþÃÉÿÓt‰ù/&0ÿÁ7ý/lÿÝ2ÿþ?#óDÿÛ7ä?—®pÿoý¿¾ÿ-kÿÝ4ÿüèÿõDÿÛ·œÿ5ý›@÷o*­ÿoµÿ®êÿ-9þŸÿ¿
+s	NþŸœñÿ8C¢ÿ…í¿öÿ¹ãþφ9ôÌvýÿWÓžü_øÿlÔ¿žÿë2ÿ¡é"û?˜ÿà‰þUü_Sþ[Éèßü_¾‘迚ÿëµÿ{ö¡>õÇžG€_$úWñç¿dú?M`ý÷Dÿ*þ¯)ÿ±+ô™€ÿË7¢ó?
+ÿ×yþC¤ÿÃü_¾‘è_Åÿ5ÿ5ý›€ÿË7•Öÿjþ¯éþ7w‰ý¿	s	Èõ‰Dÿõü_—ïÿ¹ËôšÀû¿o¶ë¿QÊÿ:û¿
+þ/$õ¯çÿ*×ù_<ÿM¸‰q€9F¢Õü/ÞÿLàþ×7ý«ä×ÿDþ‡	äùF¢Õü/üŸ&4(ß5ý«æ‘ÿa翾ÿiæáÿ6!|èx 8F¢ÿzþ¯Ëõ¿k
+ù&Ä‚ü=Siý¯çÿŠgÿþOæ0ÿÏ'ý×ó]ÎÿÊ£]ý0Þÿ#y¿l×TÊÿ
+“ÿ+áÿ²@RÍü/îm ÿË7ýkæ1ÿÅü_¾‘连ÿëzýoп	Ÿ>¿vãs›'C$úWÍÿâþÇÖßHô¯šÿÅù¯	ø¿|#:ÿÓÌÿ¢ÿÓò¿|#Ñ¿jþú7õû¦Òú_1ÿkò$ú?L˜K@þ—O$úW™ÿxÎÿâþφ˜H õÌ*ý\lùúƒQáKý_M*ƒþC	
+þ/VÖÿ¸ÚÿØ?ü^õ‹°¼þ%w±êŸÚÌüO¶ÖÿøípßßÝ>?~¾´‡·¿˜åûÿ¹þ97Üÿ™ðÇþ?%öÿÎØªÿïßS¿ûÞ?Üß>Þýõ3ÞÕøþ‡ãùÓðþo÷ÿ¾ÙªÿÝþð¦æ_³^ÿMבÿ`ë½oDú_´û_·ÿoÃøþŸSdÿoÂûú¿Ý±RÿÓùÿÊÏXvþJ
+]œú¿c!ÿ߆Mõ?Ýÿ$¥ù§þÐFêo¤þõú/óšŽùŸ6¤\h vŒDÿÌø÷ÃùŸo$úW™ÿ0çàÿ5ù¾‘èŸùÿ~óDÿÌø÷Cÿ¯oDçÌø×Cÿ¯o$úWéÿç? èþñM¥õ¿Nÿoþ˜Oþÿ.²ÿ7a.ÁÉÿÓ÷øœ!Ñ¿Jÿï<ÿû?räÐ3Ûõ”æ?´Óüü&HêÏü‡?ÌðDÿÌø÷ƒÿË7ýWó½ö3ÿÁ”Oý±çà‰þ™ÿðï‡õß7ý3ÿáßþ/߈Îÿ˜ÿð¯ÿ—o$úgþÿü_¾©´þWœÿÐNóØÿ›0—€üWŸHô_ÏÿuùþŸ»Lÿ§	¼ÿûf»þ¥ü¯³ÿ«Ãÿe¤þõü_å:ÿ‹ç¿	7ñ#0ÇHô¯šÿÅûŸ	ÜÿúF¢•ü¯óúÏüOÈÿòDÿšù_ÿ§	
+ÊwDÿªù_ä˜Àù¯oDçšù_ø¿M: Ž‘è¿žÿërýïšBþ‡	± ÏTZÿëù¿âÙÿ…ÿÓ„¹Ìÿó‰Dÿõü_—ó¿r—Ñ¿	ãý?’÷ËvýG¥ü¯0ù¿ü_HꯚÿÅý¯	äùF¢Õü/ôoþ/ßHô_Ïÿu½þ7èß„Ï?Ÿ‡_»ñ¹Í“À!ý«æqÿcë¿o$úWÍÿâü×ü_¾ÿiæÑÿiù_¾‘è_5ÿý›€ú}Siý¯˜ÿ5ù?ý&Ì% ÿË'ý«Ì<çqÿgCL$€zf•þÛv±çë5£Â—ú¿šTý‡2öâÿÒgmýû§ýýÃï5¿Ëë?”=Å¡þ)'òßLØ\ÿã·Ã}wûüøeøÖÞüf–ïÿçúçÈ2áT‹xÞÿ°pÅfý¿˜ÿžúÝ÷þáþöñîoŸñ®þËþóðc<ÿo#ù/&dôîšÍúßíoiþ5ëõ߆Ìû¿	4ùF¦ÿ%»ÿUûÿÜ–Óþ?u俘0~ýcÛ7ûŸ¬Õÿt°î3–ÿ„’B§þïØÅÌùÛêº JK
+Öœÿætêÿ‘ó_Dõ_Ø |ºá[•ÿÐtþR.4 ;F¤ÿ…
+ÀïëÿjþC×°ÿ7þ߈ô¿°ø]ý¿žÿpîÿãþÏæ?øF¤ÿ…
+Àë×ÿ6’ÿhçÿ¾éaðûú¿Ê-÷ÿ&ÐÿëÙùß²à÷õ=ÿ¡ãþßú}#ÒÿÂà
+çm‹þM ûÇ7µÖÿ·€G…/ìÿíBwòÿޝè߀ÓíkÆÿã‘þ6 oØ
 ÿîÿlÈ‘@ÏôTü_M;ù¿ðÿ™ ª5ÿ×uþsGþ“	ÌðHÿþ¯)ÿ­kп	ø¿|#Ò-ÿ×kÿ÷ìÿBÿ&|ê= ¿ˆô¯áÿšôòM`ý÷Hÿþ¯iÿ?ü}ôoþ/ßÈÎÿü_çùý&àÿòHÿþ¯iýo[ôoþ/ßÔZÿ+ù¿Î÷¿eÜ Nµ ÿÕ-"ýWó]Í
+ýŸ&ðþïþÿW<û¿
+þ/Dõ¯æÿ*×ù_<ÿM¸‰q€9F¤Íü/ÞÿLàþ×7"ýkäMù?ã–ý@þ—oDú×ÌÿÂÿiBƒò]#Ò¿fþù&pþëÙùŸbþþo‡Ž€cDú¯æÿºZÿÛ–übAþž©µþWóųÿÿ§	ã×Ïü?¿ˆô_Íÿu9ÿ«„ý›0Þÿ#y¿ôuò¿âäÿjðY ª¿Zþ÷¿Vÿå‘þó¿˜ÿbþ/߈ô_Íÿu½þGôoÂçŸÏÇÃ¯ÝøØæIà‘þ5ó¿¸ÿ1õß7"ýkæqþkþ/ßÈÎÿó¿èÿ4ü/߈ô¯™ÿ…þM@ý¾©µþ×Ëÿ:ÏÄÿm©ä¹E¤ùçü/îÿlˆ‰PϬÓZjùúƒQáKý_M*ƒþC)ÿ—këÜ?íì~¯ùEX^ÿRRLCýSNÌÿ4asýß÷ýÝíóã—á[{xó›Y¾ÿŸëŸóßm˜öfìÿ½²Yÿ/Þ¿§~÷½¸¿}¼ûÛg¼«ÿð¢ÿ<ü÷ÿmàüÏ„ŒÞ]³Yÿ»ýá-Í¿f½þÛÐ’ÿdþßÈô¿d÷¿jÿŸÛ2ê?§Žü'ƯŸþo¿¬Õÿtþ¿î3–ÿ„’B§þïØÑÿiöúŸî¯9ÿÍ)Lý¿œÿš ªµþßËü‡¦#ÿ͆”
+ÀŽé_sþûxÿ÷HÿóæüîÿL`þƒoDúלÿÀü'óHÿŠó˜ÿký¿¾‘ÿéÍ(Üÿ›@ÿ¯oDú×èÿ=Ïhп	tÿø¦Öú_¥ÿ7
+oåäÿïXÿm8ݾfü?^é_£ÿwžÿÀýŸ	9rèþƒÎü‡–ù†ˆê¯6ÿ¡é:òM`þƒoDúWœÿÀü/ðùF¤ÿZþ¯×þïÙÿ…þMøÔ{~é_sþùo&°þûF¤Íùô™€ÿË7²ó?Åùô˜€ÿË7"ýkÎ@ÿ&àÿòM­õ¿Þü‡–ù†LÏfü_^鿚ÿëòý¿„†þOxÿ÷@ÿŠÿ+žý_-þ/Dõ¯æÿ*×ù_<ÿM¸‰q€9F¤Íü/ÞÿLàþ×7"ýkäÍë?ù&ÿå‘þ5ó¿ðšÐ |׈ô¯™ÿEÿ¿	œÿúFvþ§—ÿÕáÿ6!|èx 8F¤ÿjþ¯«õ¿mÉÿ0!äï™Zë5ÿW<û¿ðš0~ýÌÿó‹HÿÕü_—ó¿Jhп	ãý?’÷‹@ÿQ'ÿ+Nþ¯ˆÿËQý5ó¿¸ÿ5ü/߈ô¯™ÿ…þMÀÿå‘þ«ù¿.×ÿv´„
 £>ÿ|>~íÆÇ6O‡ˆô¯™ÿÅý	¬ÿ¾é_3ÿ‹ó_ðùFvþ§˜ÿEÿ§	äùF¤Íü/ôoê÷M­õ¿^þWœü_ø¿M˜žÍø¿¼"Ò¿ÆüÇ9ÿ‹ób"Ô3«ôŸ?.µ|ýÁ¨ð¥þ¯&•Aÿ¡Œý_ø¿ôY[ÿãþiÿcÿð{Í/Âòú—Òœüÿ)·Ôß„Íõ?~;Ü÷w·Ï_†oíáÍofùþ®.‘õß„››©ìÿ}²Yÿ/Þ¿§~÷½¸¿}¼ûÛg¼«ÿð¢ÿ<ü÷ÿ-ú·îoßlÖÿnxKó¯Y¯ÿ6dò_LÀÿã™þ—ìþWíÿsãù_n˜ÿaÃØûÍþß/kõ?ÿ¯ûŒeç?¡¤ÐÅ©ÿ;v©áüÇ‚mõ?Ýÿ$•þßtÊÿ‰ó?Dõ¯Öÿ{™ÿÐ2ÿˈ”
+ÀŽé_qþùo6ðþï‘þ5æ?œû#ý?&0ÿÁ7"ý+Î`þ§
+„¿ùF¤Åù-÷ÿ&ÐÿëÙùŸâüîÿM ÿ×7"ýkôÿÎóп	tÿø¦Öú_©ÿ·‹msêÿ‹œÿ›Ð÷S	ðÿøD¤þßóüîÿlÈ‘@Ïôtæ?´“ÿÿŸ	¢ú«ÍhGKϘÿà‘þç?´èßü_¾é¿–ÿëµÿ{ö¡>õÇžG€_DúWœÿÐ’ÿhë¿oDúWœÿéÿ2ÿ—odçjóR ÿÃü_¾é_qþCFÿ&àÿòM­õ¿Þü‡vò±ÿ7üW߈ô_Íÿuùþ_óŸlàýß7ý7*þ¯xöµø¿,Õ¿šÿ«\çñü7á&~Äæ‘þ5ó¿xÿ3û_߈ô¯‘ÿ5¯ÿä˜@þ—oDú×ÌÿÂÿiBƒò]#Ò¿fþù&pþëÙùŸZþW
+ø¿M˜ è‘þ«ù¿®Öÿ6“ÿaB,Èß3µÖÿjþ¯xöáÿ4ù¾鿚ÿërþW	-ú7a¼ÿGò~è?êäÅÉÿñY ª¿fþ÷¿&ÿå‘þ5ó¿Ð¿	ø¿|#Ò5ÿ×õúÑ¿	Ÿ>¿vãc›'CDú×ÌÿâþÇÖ߈ô¯™ÿÅù¯	ø¿|#;ÿSÌÿ¢ÿÓò¿|#Ò¿fþú7õû¦Öú_/ÿ+Nþ/üß&ÿå‘þ5æ?Îù_œÿ›	 žY¥ÿ˜—Z¾þ`TøRÿW“Ê ÿPJÀÿeÁÚú÷Oûû‡ßk~–׿äîäÿM¹IÔß‚Íõ?~;Ü÷w·Ï_†oíáÍofùþ®.ìÿm˜KpÚÿ/ì\±Yÿ/Þ¿§~÷½¸¿}¼ûÛg¼«ÿðý?Æý‹ÿ×îÿ}³Yÿ»ýá-Í¿f½þ[ò_Œ ÿÉ72ý/Ùý¯Ûÿÿ°ÿOûþØÿÍà<\±VÿÓùÿºÏXvþJ
+]œú¿c7æ?pþ£Ï¶úŸî’Îü‡îÔÿ;öP}Dõ¯Öÿ{™ÿÐtùï&¤\h vŒHÿŠóúLàüÏ7"ýk̘ó?èÿ1ù¾é_qþCÂÿoáo¾é_qþCÃý¿	ôÿúFvþ§6ÿ!îÿM ÿ×7"ýkôÿžç?4èߺ|Ský¯ÕÿÛ…©ÿ—ùO6Ì%8ùúÿ3Dú×èÿ=Ïàþφ9ôŒ@ÿAgþC;ù¿ðÿ™ ª¿Úü‡¦ë˜ÿmó|#Ò¿âü‡ý›€ÿË7"ý×ò½öÏþ/ôo§þØóð‹HÿŠóÎM`ý÷HÿŠóZú¿LÀÿåÙùŸÚü‡ØÑÿaþ/߈ô¯8ÿ¡Eÿ&àÿòM­õ¿Þü‡vò±ÿ7a.ù¯>鿚ÿëòý¿„†þOxÿ÷@ÿNþ×ÙÿÕâÿ²@Tÿjþ¯rÿÅóß„›ø˜cDú×ÌÿâýÏî}#Ò¿Fþ×¼þ“ÿaù_¾é_3ÿÿ§	ÌÿðHÿšù_ä˜Àù¯odçzù_Ìÿ±!|èx 8F¤ÿjþ¯«õ¿mÉÿ0!äï™Zë5ÿW<û¿ðš0—€ù>鿚ÿërþW	
+ú7a¼ÿGò~è?êä…ÉÿðY ª¿fþ÷¿&ÿå‘þ5ó¿Ð¿	ø¿|#Ò5ÿ×åúߎ–pôoÀçŸÏÇÃ¯ÝøØæIà‘þ5ó¿¸ÿ1õß7"ýkæqþkþ/ßÈÎÿó¿èÿ4ü/߈ô¯™ÿ…þM@ý¾©µþ×Ëÿïs×ÑÿaÂ\ò¿|"Ò¿ÆüÇ9ÿ‹ób"Ô3ëô¿Øòõ£Â—ú¿šTý‡’Éÿ2amýû§ýýÃï5¿Ëë_r7ì‡ý`~
+¨¿›ëüv¸ïïnŸ¿ßÚÛßÌòýÿ\ÿ\ïÿ&°ÿ÷Ífý¿xÿžúÝ÷þáþöñîoŸñ®þÃô?ü÷ÿ-ùß6pÿï›Íúßíoiþ5ëõßrÿoú÷LÿKvÿëöÿmßÿ‡×?öÿ&ü±ÿ§ÿÛkõ?ÿ¯ûŒeç?¡¤ÐÅ©ÿ;v¡ãüÇ‚mõ?Ýÿ$ùÝÔÿ›¨¿¢úWëÿ½ÌhºÂýŸ	)€#Ò¿âüòŸmàýß7"ýk̘ó?ðÿ™Àü߈ô¯9ÿügóHÿšó¸ÿ7þ_ßÈÎÿôæ?îÿM ÿ×7"ýkôÿžç?ÿlÝ?¾©µþ×êÿ-å<ÿÿ	s	NþŸ¾Çÿã‘þ5úÏó¸ÿ³!GN =#ÐЙÿОü_øÿl
 Õ_sþù¯&0ÿÁ7"ýkÎ@ÿ&àÿòHÿµü_¯ýßóüôo§þØóð‹HÿŠóç¿&°þûF¤Åùä?Ú€ÿË7²ó?½ù…þðùF¤Åù
+ú7ÿ—oj­ÿõæ?´Óüöÿ&Ì% ÿÕ'"ýWó]¾ÿ—ÐÐÿiïÿ¾è¿ÑÉÿšü_1àÿ²@Tÿjþ¯r•ÿÕñü7á&~Äæ‘þ5ó¿xÿ3û_߈ô¯‘ÿ5¯ÿä˜@þ—oDú×ÌÿÂÿiBƒò]#Ò¿fþù&pþëÙùŸbþþo‡Ž€cDú¯æÿºZÿ‡?¢bAþž©µþWóųÿÿ§	s	˜ÿç‘þ«ù¿.ç•a€þ-ïÿ‘¼_ú:ù_aÊÿjñY ª¿fþ÷¿&ÿå‘þ5ó¿Ð¿	ø¿|#Ò5ÿ×åúߎôoÀçŸÏÇÃ¯ÝøØæIà‘þ5ó¿¸ÿ1õß7"ýkæqþkþ/ßÈÎÿôò¿èÿ´ü/߈ô¯˜ÿÕ¢P¿oj­ÿõò¿Âäÿ¢ÿĹäùD¤ùsþçÿ&ÄD¨gVé¿Y<òñF…/õ5©úeøëø¿X[ÿãþiÿcÿð{Í/Âòú—ʸÿK95Ôß‚Íõ?~;Ü÷w·Ï_†oíáÍofùþ®.Ìÿ²áeÿß¶ÓØ
+¸b³þ_¼Oýî{ÿpûx÷·ÏxWÿáEÿyø1îÿÛÀû¿	ä¿øf³þwûÃ[šÍzý·¡%ÿÁôï™þ—ìþWíÿsÛ4ãþ?ü&¼ìÿÇÞoöÿîX«ÿéüÝg,;ÿ	%….Nýß±#ÿ߆mõ?Ýÿ$•þßtîÿåü×Qý«õÿ^æ?4ó?mH¹Ð ì‘þ™ÿð¯‡þ߈ô¯1ÿaîÿÅÿkó|#Ò?óþõþæ‘þ™ÿð¯‡þ_ßÈÎÿ˜ÿðo‡þ_߈ô¯Ñÿ;Ï@ÿ&Ðýã›Zë•þß4¼	4ñÔÿ[8ÿ3a.Á?9Oàyà
+‘þ5úçùÜÿ™#'€žèq3ð¨ðåóÚ“ÿÿŸ
+¢ú3ÿá_ó|#Ò?óþõàÿòHÿµü_¯ýßÌ0åSìyøE¤æ?üëaý÷HÿÌø×ƒÿË7²ó?æ?üÛÁÿå‘þ™ÿð¯ÿ—oj­ÿõæ?´Óüöÿ&Ì% ÿÕ'"ýWó]¾ÿ—ÐÐÿiïÿ¾è¿Qñųÿ+âÿ²@Tÿjþ¯r•ÿÕñü7á&~Äæ‘þ5ó¿xÿ3û_߈ô¯‘ÿ5¯ÿä˜@þ—oDú×ÌÿÂÿió?|#Ò¿fþù&pþëÙùŸbþþo‡Ž€cDú¯æÿºZÿÛ†übAþž©µþWóîK ÿ߆¹Ìÿó‰HÿÕü_—ó¿Jhп	ãý?’÷‹@ÿQ'ÿ+Nóþ/Dõ×Ìÿâþ×ò¿|#Ò¿fþú7ÿ—oDú¯æÿº\ÿÛñHýðùçóñðk7>¶y8D¤Íü/îL`ý÷HÿŠù_䨀ÿË7²ó?Åü/ú?M ÿË7"ýkæ¡P¿oj­ÿõò¿¦ùþoæÿå‘þ5æ?Îù_œÿ›	 žY¥ÿv±åëF…/õ5©ú%wø¿,X[ÿãþiÿcÿð{Í/Âòú—2”~¨ʉú›°¹þÇo‡ûþîöùñËð­=¼ùÍ,ßÿÏõÏ%°ÿ7aúú‡ýÿ\v®Ø¬ÿïßS¿ûÞ?Üß>Þýí3ÞÕxÑ~Œûÿýېѻk6ë·?¼¥ù׬×Zü?&°ÞûF¦ÿ%»ÿUûÿÜ–Óùbþ—
+ã×?¶~³ÿ÷ÉZýOçÿë>cÙùOÞý»8õÇ.&Î,ØVÿÓýORéÿMaêÿåüÏQý«õÿ^æ?0ÿÁŠ”
+ÀŽé_qþù/6Ðÿã‘þ5æ?Ìý¿ä¿›Àü߈ô¯9ÿÿŸ	„¿ùF¤ÍùÜÿ›@ÿ¯odçŠó¸ÿ7þ_߈ô¯ÑÿËüSèþñM­õ¿JÿoÞr7õÿrþgÂøõ÷=þ¯ˆô¯ÑÿËüSräÐ3ýùíÉÿ…ÿÏQý5ç?0ÿ׿?øF¤Íùèßü_¾é¿–ÿëµÿ{ö¡>õÇžG€_DúלÿСXÿ}#Ò¿æüú¿LÀÿåÙùŸâüîMÀÿå‘þ5ç? ðù¦Öú_oþC{òöÿ&L_?þ/¯ˆô_ÍÿuùþÏü+xÿ÷@ÿŠÿ+žý_
+þ/Dõ¯æÿ*×ù_<ÿM¸‰q€9F¤Íü/ÞÿL
 àþ×7"ýkäÍë?ù&ÿå‘þ5ó¿ðšÐ |׈ô¯™ÿEþ‡	œÿúFvþ§˜ÿ…ÿÛ„ð¡ãà‘þ«ù¿®Öÿ¶%ÿÄX¿gj­ÿÕü_ñìÿÂÿiÂøõ3ÿÏ/"ýWó]Îÿ*¡Aÿ&Œ÷ÿHÞ/ýGü¯8ù¿þ/Dõ×Ìÿâþ×ò¿|#Ò¿fþú7ÿ—oDú¯æÿº\ÿÛñ•ýðùçóñðk7>¶y8D¤Åü/òßm`ý÷Hÿšù_œÿš€ÿË7²ó?Åü/ú?M ÿË7"ýkæ¡P¿oj­ÿõò¿â4ÿÿ·	Ó׏ÿË+"ýkÌœó¿8ÿ7!&@=³JÿqñÈÇ?¾ÔÿÕ¤2è?û ü_¬­ÿqÿ´ÿ±ø½æayýKîâXÿ”ü&l®ÿñÛ᾿»}~ü2|ko~3Ë÷ÿsýs	ô›0—àŸi“Æþß›õÿâý{êwßû‡ûÛÇ»¿}Æ»úÿÑÿðcÜÿ·äÛÀý¿o6ë·?¼¥ù׬×Ëý¿èß72ý/Ùý¯Ûÿ·á´ÿO…û?þØÿà<\±VÿÓùÿºÏXvþJ
+ÃÛÿ©ÿ;vãû?ç?úl«ÿéþ'éÌè¦þßHý-Õ¿ZÿïeþC3ü"°þ[r¡Ø1"ý+Î ÿÙÞÿ}#Ò¿Æü‡9ÿƒû?˜ÿà‘þç?Dü¿&þæ‘þ5ç?pÿoý¿¾‘ÿ)Îàþßú}#Ò¿FÿïyþùÏ6Ðýã›Zë•þßFëÿ©ÿ·pþoÂ\‚“ÿ'gü?Îé_£ÿ÷<ÿû?räÐ3ý/n¾|þC{òáÿ³ATÍù俚Àü߈ô¯9ÿý›€ÿË7"ý×ò½öÏóп	ŸúcÏ#À/"ý+ÎHôšÀúï‘þç?ÿhþ/ßÈÎÿôæ?ú?LÀÿå‘þç?4èßü_¾©µþ×›ÿÐNóØÿ›0—€üWŸˆô_Íÿuùþ_†- ú·€÷ßôßèäý_þ/Dõ¯æÿ*×ù_<ÿM¸‰q€9F¤Íü/ÞÿLàþ×7"ýkä×ÿŽüÈÿòHÿŠù_	ÿ§	
+ÊwHÿšù_ä˜Àù¯odçŠù_ø¿M: Ž鿚ÿëjýoò?Lˆù{¦Öú_ÍÿÏþ/üŸ&Ì%`þŸODú¯æÿºœÿU†ÿCÿŒ÷ÿHÞ/ýGü¯0ù¿ü_ˆê¯™ÿÅý¯	äùF¤Íü/ôoþ/߈ô_Íÿu¹þ·Ã†þ-øüóùxøµÛ<	"Ò¿fþ÷?&°þûF¤Íü/ÎMÀÿåÙùŸbþýŸ&ÿå‘þ5ó¿Ð¿	¨ß7µÖÿzù_aòÑÿaÂ\ò¿|"Ò¿ÆüÇsþ÷6ÄD¨gVé?}\jùúƒQáKý_Mç?‡R2þ/ÖÖÿ¸ÚÿØ?ü^ó‹°¼þ¥„ñ凜òßLØ\ÿã·Ã}wûüøeøÖÞüf–ïÿçúçÉ2áeÿŸÒôv®Ø¬ÿïßS¿ûÞ?Üß>Þýí3ÞÕxÑ~Œûÿ6Òÿmù/¾Ù¬ÿÝþð–æ_³^ÿmÈøL ùË72ý/Ùý¯Úÿç¶iÆýbþ‡
+/ûÿ±÷›ý¿;Öê:ÿ_÷ËÎBI¡‹SÿwìÆüGÎôÙVÿÓýORéÿMSÿoäü×Qý«õÿ^æ?4]‡ÿÇ„”
+ÀŽé_qþþèÿñHÿóÎý¿‘üw˜ÿà‘þç?àÿ³ó߈ô¯8ÿ¡åþßú}#;ÿÓ›ÿÐqÿoý¿¾é_£ÿ÷<ÿ¡Eÿ&Ðýã›Zë•þß4¼	¤<õÿ²ÿ7a.Á?}?ýç+Dú×èÿ=Ïàþ
 φ9ôŒ@ÿAgþC{òáÿ³ATµùíøJÈóß æ?øF¤Åù-ú7ÿ—oDú¯åÿzíÿžý_èß„Oý±çà‘þç?4ôšÀúï‘þç?´ô™€ÿË7²ó?µù)Ðÿaþ/߈ô¯8ÿ!£ðù¦Öú_oþC{òöÿ&Ì% ÿÕ'"ýWó]¾ÿ—ÐÒÿiïÿ¾è¿Qñųÿ+âÿ²@Tÿjþ¯rÙÿ?üžÿÜď8À#Ò¿fþï&pÿë‘þ5ò¿æõŸþ?ÈÿòHÿšù_ø?M`þoDú×Ìÿ"ÿÃÎ}#;ÿSÌÿÂÿmBøÐñ pŒHÿÕü_WëÛ’ÿaB,Èß3µÖÿjþ¯8ù¿Èÿ·a.óÿ|"Ò5ÿ×åü¯ZôoÂxÿäý"ÐÔÉÿŠÓüÇ‚ÿËQý5ó¿¸ÿ5ü/߈ô¯™ÿ…þMÀÿå‘þ«ù¿®×ÿˆþMøüóùxøµÛ<	"Ò¿fþ÷?&°þûF¤Åü/ò?lÀÿåÙùŸbþýŸ&ÿå‘þ5ó¿Ð¿	¨ß7µÖÿzù_qÊÿÂÿmÂ\ò¿|"Ò¿ÆüÇ9ÿ‹ób"Ô3«ôß-u|ýɨð¥þ¯&•Aÿ¡ò¿LXYÿãþiÿcÿð{Õ/Âòú—Ü…Ñÿ›Úqþõ×gkýß÷ýÝíóã—áK{xû‹Y¾ÿŸëŸsbÿoÂËþú×
+»_lÕÿ‹õï©ß}ïîoïþúïê?üGÿÏqÿß$òßLà}ß7[õ¿ÛÞÔükÖë¿é:îÿM ÿÉ7"ý/Úý¯Ûÿ7ÝØÿSdÿoÂÅþÿëWž®X©ÿéøåg,;ÿ	%….Nýß±4-ç?lªÿéú'-þ5Xsþ;ü3îÿBÃùŸ	’ú/lÿݐÿÐtôÿؐr¡Ø1ý/lÿÝ2ÿ¡dòŸM ÿÇ7ý/lÿ]7ÿáäÿiºDþ³	ÌðDÿÛ·Ì-ç&þæ‰þ¶ÿnÈ.]æþßú}#:ÿ[Öþ»iþùÏ6Ðÿë‰þ¶ÿn9ÿk
+ú7¿¯o*­ÿoµÿ®êÿ-íØÿ“»†þæœý?}ÏóÀý/lÿݰÿÏ÷6äÈ	 g¶ë?èø¿švòáÿ3ARÿzþ¯Ëü‡¦‹ä¿šÀüßHô¯âÿšòßJFÿ&àÿòDÿÕü_¯ýß³ÿý›ð©?räã‰þUü_çù/ä¿ÚÀúï‰þUü_SþcWèÿ2ÿ—oDçþ¯Iÿ1Òÿaþ/ßHô¯âÿšÎÿš‚þMÀÿå›Jë5ÿ×tÿ›»Äþß„¹ä¿úD¢ÿzþ¯Ë÷ÿ<ÚEп¼ÿûf»þ¥ü¯³ÿ+ãÿ²@Rÿzþ¯rÿÅóß„›ø˜c$úWÍÿâýÏî}#Ñ¿Jþ×¼þ“ÿaù_¾‘è_5ÿÿ§	ÌÿðDÿšù_äØÀù¯oDçšù_ø¿M: Ž‘è¿žÿërýïšBþ‡	± ÏTZÿëù¿âÙÿ…ÿÓ„¹Ìÿó‰Dÿõü_—ó¿r—Ñ¿	ãý?’÷ËvýG¥ü¯0ù¿"þ/$õWÍÿâþ×ò¿|#Ñ¿jþú7ÿ—o$ú¯çÿº^ÿú7áóÏçãá×n|nó$pˆDÿªù_Üÿ˜Àúï‰þUó¿8ÿ5ÿ—oDçšù_ôš@þ—o$úWÍÿBÿ& ~ßTZÿ+æMþDÿ‡	s	Èÿò‰Dÿ*óçü/ÎÿMˆ	Å{f•þÓò̯׌
+_êÿjÒ8ÿ9œîÿñé³¶þÇýÓþÇþá÷š_„åõ/e|öƒ9áÿ3asýß÷ýÝíóã—á[{xó›Y¾ÿŸëŸsÇúo«ýÿÍÍøv®Ø¬ÿóßS¿ûÞ?Üß>Þýí3ÞÕxÑ~ŒçÿmàüÏš?|³Yÿ»ýá-Í¿f½þɲ‚ü'ßÈô¿d÷¿jÿŸÛt:ÿOÌÿ³áÕþÿëWöÿîX«ÿé`Ýg,;ÿ	%….Nýß±‹‰ó¶Õÿt”–þ¬9ÿͧçç¿&ˆê¿°øt÷*ÿ¡é:òßLH¹Ð ì‘þ6 ¿¯ÿ«ù]ƒÿÇú|#ÒÿÂàwõÿzþùÿ/Ðÿgó|#ÒÿÂàõë™ÿk÷¾éaðûú¿Ê>ÍÿDÿúÐÿëÙùß²à÷õ=ÿ¡pÿoý¿¾éað†ó¿¶Aÿ&Ðýã›Zëÿ[
+À£Â—öÿvíØÿSÆ#AôoÀ\‚Bèûñ<\!ÒÿÂà
+ûÿÀýŸ
+9rèþƒŠÿ«iOþ/ü6ˆê_ÍÿuÿÜ‘ÿhó|#Ò¿†ÿkÊëôoþ/߈ô_ËÿõÚÿ=û¿Ð¿	ŸúcÏ#À/"ýkø¿&ýGæ¿ØÀúï‘þ5ü_Óþ?´ô™€ÿË7²ó?ÿ×yþCGÿ‡	ø¿|#Ò¿†ÿkZÿÛý›€ÿË7µÖÿZþ¯éþ·ý[0—€üWŸˆô_Íÿu5ÿ14ôšÀû¿oú_<bTøbÿW<û¿ü_ˆê_ÍÿU®ó¿xþ›p?â sŒHÿšù_¼ÿ™Àý¯oDú×Èÿš×ò?L ÿË7"ýkæáÿ4ù¾é_3ÿ‹ü8ÿõìüO1ÿÿ·	áCÇÀ1"ýWó]­ÿmKþ‡	± ÏÔZÿ«ù¿âÙÿ…ÿÓ„¹Ìÿó‰HÿÕü_—ó¿Jhп	ãý?’÷‹@ÿQ'ÿ‹ù–ˆê¯™ÿÅý¯	äùF¤Íü/ôoþ/߈ô_Íÿu¹þ·ã+!ú7àóÏçãá×n|ló$pˆHÿŠù_ä¿ÛÀúï‘þ5ó¿8ÿ5ÿ—odçŠù_ôš@þ—oDú×ÌÿBÿ& ~ßÔZÿëå÷¿¹ëèÿ0a.ù_>é_cþãœÿÅù¿	1‘ ê™UúÏ‹#¿þ`TøRÿW“ÆùÏ¡æ?š°¶þÇýÓþÇþá÷š_„åõÊ^†¿—Rnðÿ™°¹þÇo‡ûþîöùñËð­=¼ùÍ,ßÿÏõÏ%²þ›0~ùçýÿ»WlÖÿ‹÷ï©ß}ïîoïþöïê?¼è??Æý
 ¹ÿ7öOßlÖÿnxKó¯Y¯ÿ6dòM ùË72ý/Ùý¯Úÿç¶û¿sêÈ1anûfÿúŸÎÿ×}ƲóŸPRèâÔÿ»ñýŸó}¶Õÿtÿ“TúÓÔÿ9ÿ5ATÿjý¿—ùMבÿjBÊ…`Ljô¯9ÿÿŸ	ôÿøF¤ùôÿšÂü߈ô¯9ÿÿ¯	œÿûF¤Åùä?Û@ÿ¯odçzó:îÿM ÿ×7"ýkôÿÎóп	tÿø¦Öú_¥ÿ7
+ωØMý¿äÿ˜Bߏ%Àÿã‘þ5úçùÜÿ™#'€žè?èÌh'ÿþ?Dõלÿ€ÿÛæ?øF¤Íùèßü_¾é¿–ÿëµÿ{ö¡>õÇžG€_DúלÿÀù¯	¬ÿ¾é_sþý_&àÿòìüOqþý&àÿòHÿšóп	ø¿|Ský¯7ÿ¡=ù?ûÈõHÿÕü_—ïÿ%4ôšÀû¿oú_<bTøbÿW<û¿
+þ/Dõ¯æÿ*×ù_<ÿM¸‰q€9F¤Íü/ÞÿLàþ×7"ýkäMù?ã–ý@þ—oDú×ÌÿÂÿiBƒò]#Ò¿fþù&pþëÙùŸbþþo‡Ž€cDú¯æÿºZÿÛ–ü"@]Ský¯æÿŠgÿþO˜ÿç‘þ«ù¿.ç•РÆû$ïþ£NþWœü_
+þ/DõWËÿâþ×
+ò¿|#Ò¿bþó_lÀÿå‘þ«ù¿®×ÿˆþMøüóùxøµÛ<	"Ò¿fþ÷?&°þûF¤Íü/ÎMÀÿåÙùŸbþýŸ&ÿå‘þ5ó¿Ð¿	¨ß7µÖÿzù_qòáÿ6ü/߈ô¯1ÿñœÿÅýŸ
+1‘ ê™eúÿ¹¿»_êöºfTøBÿWÓ…ÑÿB&ÿË„õ,öü½fyýK—J3Ô?†ÒQV×ÿ¿ßÿ÷ÇŸ_÷k>ãÝý×¼Ô¿	£ÿ;µä?ÙðÿŠú_ñ¿þï÷ÿýÿµ?ö?þ÷ÿŠ¡½É]ù¯ïÿçÿíüßý_=Üÿ?û‡ûçÛÿËáþ~ü©ÿëÿ£ÿ§CVëx
+xë]ÿÆò÷ÿÒ…<îÿS¢ÿÛ†¹ÿ|ý:5‚!kW¬Ôÿâ™ï¯YµÿKí´ÿ£ÿÄÕõWÞÿ¥ÓùOj™ÿfÃiÞØÿöÿ+³Zÿêû¿Óû_*ìÿLxÙÿ?Æ= ²vÅJý'ýó¿rÚÿuìÿLX]õó¿fÚÿqÿgÂi—ÞØÿ%öÿ+³ZÿÚû¿.Nû?òŸM˜·}ø|²Rÿ‹g~½fÕþ¯Üÿ²ºþÚû¿x¾ÿåùoÂi×¼±ÿkØÿý¯Ìjý+ïÿ†Oû?ú¿M˜¯}Ùÿ     ü¯ÍÿDˆH À+ 
\ No newline at end of file

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/64fake-4n2s2ca2c2t.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/64fake-4n2s2ca2c2t.tar.gz.output	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/64fake-4n2s2ca2c2t.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,174 +1,174 @@
-System(0KB HP=0*0kB  )
-  NUMANode#0(1024MB)
-    Socket#0
-      L3Cache(8192KB)
-        L2Cache(256KB)
-            L1Cache(32KB)
-            Core#0
-              P#0
-              P#4
-            L1Cache(32KB)
-            Core#1
-              P#2
-              P#6
-        L2Cache(256KB)
-            L1Cache(32KB)
-            Core#0
-              P#1
-              P#5
-            L1Cache(32KB)
-            Core#1
-              P#3
-              P#7
-    Socket#1
-      L3Cache(8192KB)
-        L2Cache(256KB)
-            L1Cache(32KB)
-            Core#0
-              P#8
-              P#12
-            L1Cache(32KB)
-            Core#1
-              P#10
-              P#14
-        L2Cache(256KB)
-            L1Cache(32KB)
-            Core#0
-              P#9
-              P#13
-            L1Cache(32KB)
-            Core#1
-              P#11
-              P#15
-  NUMANode#1(1024MB)
-    Socket#2
-      L3Cache(8192KB)
-        L2Cache(256KB)
-            L1Cache(32KB)
-            Core#0
-              P#16
-              P#20
-            L1Cache(32KB)
-            Core#1
-              P#18
-              P#22
-        L2Cache(256KB)
-            L1Cache(32KB)
-            Core#0
-              P#17
-              P#21
-            L1Cache(32KB)
-            Core#1
-              P#19
-              P#23
-    Socket#3
-      L3Cache(8192KB)
-        L2Cache(256KB)
-            L1Cache(32KB)
-            Core#0
-              P#24
-              P#28
-            L1Cache(32KB)
-            Core#1
-              P#26
-              P#30
-        L2Cache(256KB)
-            L1Cache(32KB)
-            Core#0
-              P#25
-              P#29
-            L1Cache(32KB)
-            Core#1
-              P#27
-              P#31
-  NUMANode#2(1024MB)
-    Socket#4
-      L3Cache(8192KB)
-        L2Cache(256KB)
-            L1Cache(32KB)
-            Core#0
-              P#32
-              P#36
-            L1Cache(32KB)
-            Core#1
-              P#34
-              P#38
-        L2Cache(256KB)
-            L1Cache(32KB)
-            Core#0
-              P#33
-              P#37
-            L1Cache(32KB)
-            Core#1
-              P#35
-              P#39
-    Socket#5
-      L3Cache(8192KB)
-        L2Cache(256KB)
-            L1Cache(32KB)
-            Core#0
-              P#40
-              P#44
-            L1Cache(32KB)
-            Core#1
-              P#42
-              P#46
-        L2Cache(256KB)
-            L1Cache(32KB)
-            Core#0
-              P#41
-              P#45
-            L1Cache(32KB)
-            Core#1
-              P#43
-              P#47
-  NUMANode#3(1024MB)
-    Socket#6
-      L3Cache(8192KB)
-        L2Cache(256KB)
-            L1Cache(32KB)
-            Core#0
-              P#48
-              P#52
-            L1Cache(32KB)
-            Core#1
-              P#50
-              P#54
-        L2Cache(256KB)
-            L1Cache(32KB)
-            Core#0
-              P#49
-              P#53
-            L1Cache(32KB)
-            Core#1
-              P#51
-              P#55
-    Socket#7
-      L3Cache(8192KB)
-        L2Cache(256KB)
-            L1Cache(32KB)
-            Core#0
-              P#56
-              P#60
-            L1Cache(32KB)
-            Core#1
-              P#58
-              P#62
-        L2Cache(256KB)
-            L1Cache(32KB)
-            Core#0
-              P#57
-              P#61
-            L1Cache(32KB)
-            Core#1
-              P#59
-              P#63
-depth 0:	1 System (type #0)
+Machine (phys=0 total=4194304KB)
+  NUMANode #0 (phys=0 local=1048576KB total=1048576KB)
+    Socket #0 (phys=0)
+      L3Cache #0 (8192KB)
+        L2Cache #0 (256KB)
+          L1Cache #0 (32KB)
+            Core #0 (phys=0)
+              PU #0 (phys=0)
+              PU #1 (phys=4)
+          L1Cache #1 (32KB)
+            Core #1 (phys=1)
+              PU #2 (phys=2)
+              PU #3 (phys=6)
+        L2Cache #1 (256KB)
+          L1Cache #2 (32KB)
+            Core #2 (phys=0)
+              PU #4 (phys=1)
+              PU #5 (phys=5)
+          L1Cache #3 (32KB)
+            Core #3 (phys=1)
+              PU #6 (phys=3)
+              PU #7 (phys=7)
+    Socket #1 (phys=1)
+      L3Cache #1 (8192KB)
+        L2Cache #2 (256KB)
+          L1Cache #4 (32KB)
+            Core #4 (phys=0)
+              PU #8 (phys=8)
+              PU #9 (phys=12)
+          L1Cache #5 (32KB)
+            Core #5 (phys=1)
+              PU #10 (phys=10)
+              PU #11 (phys=14)
+        L2Cache #3 (256KB)
+          L1Cache #6 (32KB)
+            Core #6 (phys=0)
+              PU #12 (phys=9)
+              PU #13 (phys=13)
+          L1Cache #7 (32KB)
+            Core #7 (phys=1)
+              PU #14 (phys=11)
+              PU #15 (phys=15)
+  NUMANode #1 (phys=1 local=1048576KB total=1048576KB)
+    Socket #2 (phys=2)
+      L3Cache #2 (8192KB)
+        L2Cache #4 (256KB)
+          L1Cache #8 (32KB)
+            Core #8 (phys=0)
+              PU #16 (phys=16)
+              PU #17 (phys=20)
+          L1Cache #9 (32KB)
+            Core #9 (phys=1)
+              PU #18 (phys=18)
+              PU #19 (phys=22)
+        L2Cache #5 (256KB)
+          L1Cache #10 (32KB)
+            Core #10 (phys=0)
+              PU #20 (phys=17)
+              PU #21 (phys=21)
+          L1Cache #11 (32KB)
+            Core #11 (phys=1)
+              PU #22 (phys=19)
+              PU #23 (phys=23)
+    Socket #3 (phys=3)
+      L3Cache #3 (8192KB)
+        L2Cache #6 (256KB)
+          L1Cache #12 (32KB)
+            Core #12 (phys=0)
+              PU #24 (phys=24)
+              PU #25 (phys=28)
+          L1Cache #13 (32KB)
+            Core #13 (phys=1)
+              PU #26 (phys=26)
+              PU #27 (phys=30)
+        L2Cache #7 (256KB)
+          L1Cache #14 (32KB)
+            Core #14 (phys=0)
+              PU #28 (phys=25)
+              PU #29 (phys=29)
+          L1Cache #15 (32KB)
+            Core #15 (phys=1)
+              PU #30 (phys=27)
+              PU #31 (phys=31)
+  NUMANode #2 (phys=2 local=1048576KB total=1048576KB)
+    Socket #4 (phys=4)
+      L3Cache #4 (8192KB)
+        L2Cache #8 (256KB)
+          L1Cache #16 (32KB)
+            Core #16 (phys=0)
+              PU #32 (phys=32)
+              PU #33 (phys=36)
+          L1Cache #17 (32KB)
+            Core #17 (phys=1)
+              PU #34 (phys=34)
+              PU #35 (phys=38)
+        L2Cache #9 (256KB)
+          L1Cache #18 (32KB)
+            Core #18 (phys=0)
+              PU #36 (phys=33)
+              PU #37 (phys=37)
+          L1Cache #19 (32KB)
+            Core #19 (phys=1)
+              PU #38 (phys=35)
+              PU #39 (phys=39)
+    Socket #5 (phys=5)
+      L3Cache #5 (8192KB)
+        L2Cache #10 (256KB)
+          L1Cache #20 (32KB)
+            Core #20 (phys=0)
+              PU #40 (phys=40)
+              PU #41 (phys=44)
+          L1Cache #21 (32KB)
+            Core #21 (phys=1)
+              PU #42 (phys=42)
+              PU #43 (phys=46)
+        L2Cache #11 (256KB)
+          L1Cache #22 (32KB)
+            Core #22 (phys=0)
+              PU #44 (phys=41)
+              PU #45 (phys=45)
+          L1Cache #23 (32KB)
+            Core #23 (phys=1)
+              PU #46 (phys=43)
+              PU #47 (phys=47)
+  NUMANode #3 (phys=3 local=1048576KB total=1048576KB)
+    Socket #6 (phys=6)
+      L3Cache #6 (8192KB)
+        L2Cache #12 (256KB)
+          L1Cache #24 (32KB)
+            Core #24 (phys=0)
+              PU #48 (phys=48)
+              PU #49 (phys=52)
+          L1Cache #25 (32KB)
+            Core #25 (phys=1)
+              PU #50 (phys=50)
+              PU #51 (phys=54)
+        L2Cache #13 (256KB)
+          L1Cache #26 (32KB)
+            Core #26 (phys=0)
+              PU #52 (phys=49)
+              PU #53 (phys=53)
+          L1Cache #27 (32KB)
+            Core #27 (phys=1)
+              PU #54 (phys=51)
+              PU #55 (phys=55)
+    Socket #7 (phys=7)
+      L3Cache #7 (8192KB)
+        L2Cache #14 (256KB)
+          L1Cache #28 (32KB)
+            Core #28 (phys=0)
+              PU #56 (phys=56)
+              PU #57 (phys=60)
+          L1Cache #29 (32KB)
+            Core #29 (phys=1)
+              PU #58 (phys=58)
+              PU #59 (phys=62)
+        L2Cache #15 (256KB)
+          L1Cache #30 (32KB)
+            Core #30 (phys=0)
+              PU #60 (phys=57)
+              PU #61 (phys=61)
+          L1Cache #31 (32KB)
+            Core #31 (phys=1)
+              PU #62 (phys=59)
+              PU #63 (phys=63)
+depth 0:	1 Machine (type #1)
  depth 1:	4 NUMANodes (type #2)
   depth 2:	8 Sockets (type #3)
    depth 3:	8 Caches (type #4)
     depth 4:	16 Caches (type #4)
      depth 5:	32 Caches (type #4)
       depth 6:	32 Cores (type #5)
-       depth 7:	64 Procs (type #6)
+       depth 7:	64 PUs (type #6)
 Topology not from this system

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8amd64-4n2c.tar.gz
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8amd64-4n2c.tar.gz	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8amd64-4n2c.tar.gz	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,14 +1,10 @@
-‹ ¨
-J íÝsÛF²Åýºú+ð¸·j73ø"ó–¬+µ©ÜìnÝÄuY0	I¨ð«HH±ö¯ßeÉ  ‡˜6ç\S}~Ç´$ôœéž”«Ežþ5]/ìü¿ß„!vYÖþmŠ,>üÛ¤éá1ÆÆ6‹ãÔ$obc“½‰²@ï爻}Sî¢èÍû›ÍͲ^ÿÁvÕnxCX&Ýøow›Á¸ø›$Kb“ÄÖÅ?±¹aüã?ßÞÕëëÍ÷Ñ8Œ÷ñ76MúñOó´xÅg|ŸEyüېWûýf÷§o£øê¾Z/6»Y½pÿú­ÖM=ÿîç·Wî ˆ®ËU½|pϘìjµYTË?¹ÇùÇÇѺ\UîßoïÊå_ÿ¶ÙU‘ûµèŸÛ¦ÚmÖnVÿýëiOÑÄšÉÕ¾©¶Ûz}ã~Ç^þç¿ÿ»}A›Çñ7&7Wór~[Eûúßí˚ئÑOß_moöõ¼\F‡·_íë÷.h7ûÇWiwëž8<Ó¾dûƒÇ§®·w폪}ûpV}˜WÛ¦Þ¬?þ¬=æѲºwÊíìê÷íóÖËÒ½ºû‡ûµè~UE‹*ÚÙÏ£Õ~mË*ZÍ«hþa•Ûzí«m´jvî™›ö™2š¯6÷n³¦ýµ$æËëåÝþ6Z­>D×Ü+ìÝ«¹?6ºm¢ýÃÞ}8÷e~hŸ¯>4‡Mf›mín—Ûh¹Š’Åzó{ûÜáA´]×nï&–åíõÌ=?_mgËꦜ?DûûUä¶<¼±ùnòñÇWï77›U½m¿šÌ]v¿±æê×ÿùþè»Nrïù¦ýj>¾ßOæéc`få²¾Y¯ÜòøÃr±pßõþ°Yûºi½¯›}ô°¿Déäñ'÷õ®qÉÕÖ}ˆ]´*×n7íë|ë¾ÓèÚ…áÞýišmÔ¬¢}3¿ºê¢æÒQÃCô‹Q3~“]Ì!j/íµ<DÏrˆ¦sˆ&—vˆ&<D•EÓK;D??5<D_å!š]Ú!úù±(Q¯}~)‡h~i‡èçÇ¢<D_ç!Z\Ú!úù±(Ñ×s¡ÿÿËÈb9Êÿ»#!Ä ÇüOœÓÎÿ˜$åü‚AüÕ}íN™ç<üãŸfYÎø#ølüÝã¦Zå0ðî.Œ?‚Sñwƒ”/>ü⟷ñÏê˜ø»?ù—cão’"s·Û*çõÂèø7›íf¹¹yÞú·&µãÀ?þÍí®*³§›àûhœ~Öÿã›~üÓ,6ôÿ xŠÁ_¾äA«¹_~møëÿ)¹2Û–óßÊ›jV/Nìã”þc7Ø?Ö¿{”
 Pÿ,•«ý·ùíÓšïâ¯[¸§© †úWPÿ£Ñøßä–úGpžñʳȅ2Zÿ‡	XY°=D¼ò6ΙÿÁàÿz½¨>XÏÃ`lü;ã?÷Œ?Yü[ÃÅø}œÿçýøæxýOë»ù‰WoµÈôÿœtŠ©fÛr×Ô­±í3ûð¿ÿÏó„÷ÿxÿ¯™þ›‡í9¯ÿƒû[¸!!õàݺ¾®«ÏJ‘éÿ`Z½ÿë[Öÿ€Àù?ÝÈô?ßÜV»j=x¼8‘8­ÿ¤?ÿ_¤ôÿ@È™ºWLÿ¿—ûÙæzVî÷›y]6õ}Ý<|vþúw·ÿôÿ@09õ¯aþÿ¶ÜU‹™{b¶*·§öqJÿ/Ìÿççÿ!ôfòéÿU†Lÿë»Õûj׎ öUsR§¯ÿY_ÿE’QÿÚù?ŠW/ýÇÿëCÅÿÜþtèÿàøBN÷‡jdúø?¨ôèF¦ÿ3û?÷¶ˆ©o˦ä)@/2ýüÌÿ@àõ_72ý‡÷$ôA ÿC72ýŸÛÿ1¸ÿORú¿!Ðÿ©aþ?¼ÿƒú‡ÐsrÐÿ¡™þÏíÿèÏÿ¥óÿ2Àf$ú7ÿëCÅàÿ ÿýº‘éàÿ þ!pþG72ýŸ»þÇàú_°þ7†×ûfw7oÏÞ<(D¦€ÿƒõÿ ðú¯™þõ?8ÿþÝÈôð°þÎþèF˜ÿïÿ þ!ôœô(C¦€ÿƒù?ôèf¤þ}[¾Ñ*Ü»ÿwLÿ‚ÑñG÷ÿNþñ‡ôÿN®ÿ„p–ñÌ$â¥â¯Hÿo[pý'Žþuã¯PÿoÎÿA`æN7BýïÿÑÿá,ãöÿ¾XFëÝÿ›ùžñÇõÿfü!ÈâèÿÍõߨÿ[72ýÖÿñþýÿº‘é?xÿï¼H©ìÿ­™þëÿèÿƒÀù?ÝÈô¨ÿLÿ®ÿӍLÿáû³þ;öÿ֍0ÿ|ý_Îù½™|ú•!Ó? ÿ7×ÿB`ÿoÝHôéÿmèÿ@ ‹øúÏÿa`ýgÝÈôÞÿÁúèÿЍLÿÁûçõý¿u#Ó?ÀÿÁü^ÿu#Ó?ÀÿAÿú?t#ÓøúÏ	ýßèÿԍ0ÿÞÿAýCè;9èÿÐ…Lÿáë?3ÿõŸu#Ñ?¤ÿ·¥ÿ,þ ÿýÿèÿЍLÿ ÿõó?º‘é?xÿïœõ¿1°ÿ·ndúø?Xÿ¯ÿº‘éàÿàüú?t#Ó?ÀÿÁú?8û£
 aþ?¼ÿƒú‡ÐwrÐÿ¡™þþæÿ Ðÿ¡›‘úÏàý¿ÙÿÂèø£ûçŒ?ÿøCúg1û@8Ëøß²‹è¥â¯Hÿï$æüÎÿéÆ_ÿ þß\ÿ
-ú׍PÿÁûç¬ÿá<ãæ/•ÑúG÷ÿfþ‚güqý¿²øúsþûëF¦@ÿoÞÿCàý¿ndúôÿ¦ÿûëF¦Àú?Ö‚À̝ndú¿þ/¥ÿ×ÿéF¦ÿðý¿Sú °ÿ·n„ùÿàëÿ
-ÎÿCèÍäÓÿ«™þý¿YÿûëF¢Hÿï”þ²ø‡¯ÿÌñÖ֍Lÿ ÿõþÝÈô¼ÿwSÿØÿ[72ýüÌÿ@àõ_72ýê?ÓÿþÝÈô¨ÿLÿ7ú?u#Ìÿ‡¯ÿLýCè99èÿP†Lÿáë?3ÿõŸu#Ñ?¤ÿwFÿYüþúÿ!Ðÿ¡™þþêçt#Óðþßëc`ÿoÝÈôð°þ^ÿu#Ó?ÀÿÁùôèF¦ÿðþÖÿÁÀÙÝóÿáëPÿzNú?”!Ó?ÀÿÁüú?t3Rÿ	¼ÿ·¡ÿÁèø£û³þÿøCú§×A8Ëø?žpq¡øëÔÿ›÷ÿ*W5þúõÿæúÌÜéF¨ÿàý¿3ÎÿC8ËøÂñÿ¥2ZÿèþßÌÿ@ðŒ?®ÿ7ãA@ÿoöÿ…Àþߺ‘éŸõŸ_ôÿëF¦@ÿo®ÿÀþߺ‘éŸõŸ_tÿéF¦Ö~-pýŸndúôÿ¦ÿûëF˜ÿgýçWBo&Ÿþ_eÈôèÿÍõØÿ[7ýCú[ú?Èâ¾þ3ÇXÿY72ý‡÷Xêýº‘é?xÿï¼ þ!°ÿ·ndúø?˜ÿÀë¿ndúø?èÿ‚@ÿ‡ndúôÿ¦ÿýŸºæÿÃû?¨}'ýºé?|ýgæÿ1°þ³n$ú‡ôÿNèÿ@ ‹? ÿ7ýÿèÿЍLÿ€úÔ?ÎÿèF¦@ÿoêûëF¦€ÿƒõÿ ðú¯™þþÎÿ@ ÿC72ýü¬ÿ³?ºæÿÃû?¨}'ýºéÐÿ›ù?ôèf¤þ}-G´
-÷íÿÝöÿ¢ÿ#<£ãîÿÍú/üãêÿÍõ_Î3þçâRñ×?¤ÿ·-xÿóºñ×?¦ÿwÂõØÿ[7Bý‡ïÿÍùgÿ[Žÿ/•ÑúG÷ÿfþ‚güqý¿²øú³ÿ/öÿ֍Lÿ¬ÿüZ`þO72ýúsýöÿ֍Lÿ¬ÿüZ`æN72ý³þókëÿt#Óøþß\ÿ‡ý¿u#Ìÿ³þó+¡7“Oÿ¯2dúôÿæú?ìÿ­‰þ!ý¿cú?ÈâèÿÍñÖ֍Lÿ ÿõþÝÈôèÿMýC`ÿoÝÈôð0ÿ×ÝÈôðÐÿþÝÈô¨ÿLÿ7ÎÜêF˜ÿïÿ þ!ôôèB¦@ÿoæÿ °þ³n$ú‡ôÿ6ô Åàÿ ÿýº‘éàÿ þ!pþG72ýïÿ³þ7öÿ֍Lÿ ÿëÿAàõ_72ýüœÿ@ÿ‡ndúø?Xÿgt#Ìÿ‡÷PÿúNú?t!Ó?ÀÿÁüú?t3Rÿ)ºÿwÎþ/FÇÝÿ;cüøÇÔÿ›ý? œeüoØEôRñ×?¤ÿwsþ•«ýcú§\ÿ
-óÿºê?xÿïœõ_ œgüϳȥ2ZÿèþßÌÿ@ðŒ?®ÿ7ãA@ÿoÎÿC`ÿoÝÈô~ýë¿aàÈ]72ýúÓÿý¿u#Ó?`ýë?A ûO72ýÖÿÑÿëÿt#Óøþß)ý?Øÿ[7Âüðõçÿ!ôfòéÿU†Lÿ€þ߬ÿý¿u#Ñ?¤ÿwBÿYüÃ׿øë?ëF¦€ÿƒú‡@ÿ‡ndúÞÿ»ˆ©ìÿ­™þþæ ðú¯™þþú¿ Ðÿ¡™þõŸéÿ†@ÿ§n„ùÿðõŸ©='ýʐé?|ýgæÿ1°þ³n$ú‡ôÿNéÿ@ ‹?ÀÿAÿ?ú?t#Ó?ÀÿAýCàündúÞÿ»`ýoìÿ­™þþÖÿƒÀë¿ndúø?8ÿþÝÈôð°þÎþèF˜ÿïÿ þ!ôœô(C¦€ÿƒù?ôèf¤þ}K~Ñ*Ü·ÿw–Óÿ`tüÑý¿
-ãÀ?þ þß\ÿ	á,ãÿ˜³—Š¿þ!ý¿mÁõŸxç®ýcúsþõ¯¡þƒ÷ÿÎèÿp–ñ?û_,£õîÿÍüÏøãú3þdñôÿæúoìÿ­™þïÿ³¼ÿ‡À‘»ndúôÿ¶Ô?öÿ֍Lÿ€õô
 ÿA ûO72ýÖÿÑÿëÿt#Óøþ߬ÿށý¿u#Ìÿ‡_ÿÇù½™|ú•!Óøþß–ë!°ÿ·n$úßÿÛEAÿYüÃ׿øë?ëF¦€ÿƒú‡À;7ÝÈô¼ÿw^PÿØÿ[72ý‡÷æ ðú¯™þþú¿ Ðÿ¡™þõŸéÿ†@ÿ§n„ùÿðþêBßÉAÿ‡.dú_ÿ™ù¬ÿ¬‰þ!ý¿cú?ÈâðÐÿþÝÈôðPÿx禙þƒ÷ÿÎYÿûëF¦@ýÖÿƒÀë¿ndúø?8ÿþÝÈôð°þÎþèF˜ÿïÿ þ!ôôèB¦€ÿƒù?ôèfŒþ÷Nù‹Ùj>Ûn~wªß—÷£[hžûåÿú¿0°ÿŸnF^ÿYç¯GZ…{õÿr[µþú¿Â3:þÏýý÷16þúOiBÿÿø7·»ª\øt Üÿg1óÿÎrÿ?á(âRñ×ÿ³÷o[Î+oFô?}ÿßÿ»GÿCH¨\ÕøëÿÐÿû¤æ»øëß)ó˜¹×Pÿ£ÑøßpþÃyÆÿžE.”Ñúœÿí£=D¼ò6ΙÿÁàÿýüö16þÝõ¿†ñ‡ ‹ÿ¹×ÿæÃõ?¬ÿ¡íÿÁÀz‘é?üú_öÿÃÀûÝÈôîõ¿ƒñ_³þ+„wëúº®<(E¦ÿðë®ÿ…@÷¯ndú¿þ7¥ÿ×ÿêF¦ÿs¯ÿíë?ORú ˜œú׌0ÿ|ýoÁù½™|ú•!Óÿ¹×ÿöû?¦E’SÿÚù?ŠW/ýLjúï9ýdñ_ÿã?¬ÿ®™þþêýº‘éÿÌþÁýŸ-bêÂÛ²)y
-ЋLÿ€úïÌÿ@àõ_72ýüôA ÿC72ý‡¯ÿžÒÿ
-þOÝóÿáýÔ?„ž“ƒþeÈô¾þ;óÿXÿ]7ý„ÿ£ ÿ,þ ÿýÿèÿЍLÿ ÿõó?º‘éÿÜõ?×ÿ‚õ¿1ü¸Þ7»»y{öæ™@!2ýü¬ÿ×ÝÈôðpþýº‘éàÿ`ýœýэ0ÿÞÿAýCè99èÿP†Lÿ ÿóèÿÐÍ)ý¯7aןO´
-÷ìÿ§ìÿ
-aTüÛÿùš~:Œÿ§ó¿ûÛ2þ<âˆâ_'âoc›Å±MŠ6þ…q×ûÍ™?ìK0þcãï}¥û²ï}œ¼ÿK‹žþMn™ÿ…Ðuv[7QVdi‘›ôêð“U½ßGñããëÍ®ªoÖîŸõº©v˪¼¯¿b]ÈŠ«å¦5µ‡Hû6Ïm~µinÝíÁág6ž²=ä׋‡þWÕª^_oü÷qBÿNúýú&5ôÿC¸úG+Rý\­~Ý4åòÛ¨ÅäîzíÎÂÑoßw6øaWUÏ»
-’dšæéñïöÕâãQ”&…;t6ønÞÔ÷ÕóóîE²b2ílðãºìmR¤“¤³ÁÛz×<t^àð"Ý]üß®nª÷åü·îFqgƒêeõ¯ò¦Ú?m0qç«î?—ÛmçCÈ»|·Þ¬^!Ê'Y÷‹jŸüµ|¿ìn‘t7øÇ¿ÌÞ­Ýaç¶yÞ¤»‹ï7wëyÕûœÝ
-~Y–.ŠI7¿üo5_–õêÓ.ìôècþòn½{ÜäéuÒÉQ4ÿ~wóøEÍ:‡E<|¶sL0	xøÿh¢ñÌñ?ø/j÷U¹“÷>NæþO“e¬ÿÁ]Lìéî?ž¾âwþ1Ùû'ïÿó¿Æ²þ†ÞL®ìåÒ¥2Zÿ¾Eß;ƾùÃü?øÌÿò?¹aýGÏùßbâ.º“dú%ùßö5’é$ëæ'Æ_1úÇæéÿƒð˜Ñ‹_ÈÿæÙôSj5äM:í¦wãAþ7·ù$;ò¿in'ygƒAþ׺ۀIgƒ—ò¿Qwƒùßxÿµý7ùBþ7µÝ]ò¿i1µigƒaþ7=þ&OäãSùßx˜ÿµ™=úƒü¯)Ši÷«æ§ÐΔÿ™ÿ}5xœÿÝý*Ú‡(ÿk™ÿEàhþ7åú_OÉ_æuâwþ—)Rrþoûÿñü¿øãòÿ	Ïÿ¾$íÿüÀ°ŠÄ¥2ZÿœÿO˜ÿGàwþÏEûÝÿñúÁ/þV´Þÿ½xÄ»þƒùÏó©u!Hcë9ÿ—wçÿROã8IŽÖ˜$Ÿrxøµâ¡ìü×ÿCxœÑ±§ÖØþü_VÄyœõ6èÎÿw
-7•v0ÿçnòã´èl0˜ÿK&6K:¼4ÿ—O:œ˜ÿ³ƒù¿<™LÒî+¼´þ£31f_Xÿ‘u§ÖìóíºöÎ'æÿì©ù?;˜ÿsÚéN”ÚÁüŸq¡êLÖÚ—æÿŠ£hþÑüŸåüß«Áãüõÿsý/„ÇÉÃù¥øÝÿý
 ÿÔ?„/Iû??Hiñ¼TFë?çÿSæÿxÄ›ÿcýŸò¦˜dÓÄ3ÿ—'Gù?Säi›^þ/áôðW‹‡þÝø/íãpþgý¯¯øcó¿Ïÿ3zÉ©üo2ÈÿNŠbÚ©9“ÖL¦S›ØÎƒõ™‹²él0Èÿféd’u6x!ÿkÓî{8‘ÿMùßÔ$&;ú˜ýü¯™ÄæèSôó¿ÖN'“ÎÃü¯Íòî'ò¿É©üo2\ÿá¾È£O1Xÿ‘8au?Å ÿÛNþu¿É?Êÿ&Ìÿ¾<ÎÿØü/çÿ!<™ÿ#CùjÄoüÌÿRÿÎ’ÿe×‹ÅOÿ…h’ûËú„B!„B!„B!„BÈhþê´þ	 ˆ 
\ No newline at end of file
+‹ SÖ9K í[sãF’…ûuô+ð¸1ãE
+úÍÞÇ8¼žX»ch’æ-HHnͯßÙ’A at 2QÙÔÙ¦ò|1žV‹Õ„ÄÄ
+™§*‹r9ÏÜßÜÊÎþãÝ+{ò4mÿ4yïÿnœÛÿù™wÆØØ¦qìLò.6Ö¤æ]”¾ÖÔån×”Û(z÷ñf}³¨W2®Úî?–¢ÿÍvý*'Á¸ø›$Mb“ÄÖÇ?1&eüâ?ÛÜÕ«ëõ9Ñ8;Äû™øë’~ü]'ï¢øœ?ÄK(ój·[oÿòm_ÝW«ùz;­çþoßÝ5·Õª©gßýüþÊŸÑu¹¬þ“^-×ójñÿuöùëhU.+ÿ÷÷wåâoÿ¹ÞV‘ÿgÑošj»^ý[³ü÷蟏GŠ
+kŠ«]Sm6õêÆÿ»ûŸÿþ¯ö
+mÇߘÌ\ÍÊÙmíêµokb뢟¾¿ÚÜ>ìêY¹ˆö?b|µ«?ú ÝìïÒÖ¿°¥}Ëö‡—®7wí·ª]ûå´ú4«6M½^}þ^{ÒÏ£Euï)°«ß7O£¥wÿÿÏ¢ûeÍ«h³«¢f7‹–»m´)«h9«¢Ù§"*7õ,ÚU›hÙlý+7í+e4[®ïý°¦ýgIÍ׋»Ým´\~Š®?ùwØùwóÿÙ趉v;ÿËùóSûzõ©Ù™®7M´ûCn¢Å2Jæ«õïíkû/¢ÍªöG7Y´(o¯§þõÙr3]T7åì!ÚÝ/#?rÿƒÍ¶Åço_}\߬—õ¦ýhRÛýÆš«_ÿëû£ÏÚýäæ›ö£ùüó~~1s‡ÀLËE}³ZúäðÍr>÷Ÿõn?¬}_Gëf=쯑+ß¹¯·?I®6þ—ØFËråӾϷþ3®}îýM³‰še´kfWWÝSÔ\Ú)jxŠ~ñ)j&“oÒ‹9Eí¥¢–§èYNQw1§hri§hÂSTÙUÔ]Ú)úò\Ôð}“§hzi§èËsQž¢A7úìRNÑìÒNÑ—ç¢<Eßæ)š_Ú)úò\”§èÛ¹Ñÿÿed±tóÿþDx•`@ý'vÆ´õ¿<YÿAЏÿ¼º¯ýó¬çAxü3–ñGðRüý×Mµ<Ïiÿ4O2ÆÁ‰øû9Ê—ŸañÏ|ü³4¡þ!Œˆ¿ÿ/û¢“`lüM’gqæÇ™ÜYÞÿ!Œ³Þ¬ë›ɉ¬kl–0þ‚ãßÜn«r>}|sŒ6ÀîEÿÿÚôãï’$¥ÿÁcþú%_¸XÍóò[#Xÿ¹•馜ýVÞTÓz~ê§ôǶ§ÿÔO¨–ÊUM°þÛôöÍw	×›§þê_52ý‡ÌþEóÿØÿAý8Ïüßñ*r¡ŒÕÿ¾þ*̶§HPþÏÆŽùañ¯Wóê“
+=
+ÆÆ¿“ÿËãAÿÖopŒÓóÿ¬?ÿß×xÿ}ZßÍO¼{«E¤ÿ§ L5ݔۦn}m/#üù?s9Ÿÿ!ðù_7"ý7›³ÞÿÏÿþþï¨Võu]ÍyPŠHÿ{Ïúøc„ßÿm–qÿ¬ÿéF¤ÿÙú¶ÚV«ÙÃáàT:à´þ“~ý?Íéÿ1u¯‘þ/vÓõõ´ÜíÖ³ºlêûºyxùáúÏLNÿ“Qÿš‘åÿoËm5Ÿú¦Ërsò§ôÿLý?µ¬ÿCèUòéÿU†Hÿ«»åÇjÛÎ vU
 sZ§ïÿé@ÿ¹¡þ´õ?ŠW/ýÇÿ÷ÿ† ŠÿÙýnPÿáüCF÷‡jDúø?2êýºéÿÜþÁóŸMêÂû²)y	ЋHÿÿó?xÿ׍Hÿÿý_èÿЍHÿg÷žÿMNÿ7ú?u#ËÿüÔ?„ž“ƒþeˆôvÿG¿þçRæÿ1¤†3 Íôo þîÿ
+A„ÿƒþôèF¤„ÿƒú‡ÀúnDú?ûþÃû?÷ÿÆðãj×lïfíå›W…ˆôðpÿ?¼ÿëF¤„ÿƒõôèF¤„ÿƒûÿ@`õG7²ü?ÀÿAýCè99èÿP†HÿÿóèÿÐÍ8ý·|9¢Uxhÿoãèÿ@06þèþßiÎø#Ž?ªÿ7×B8Ëü?fñR	Ö?ªÿ7×Bàì_7ÁúÇôÿfý3wº‘éÐÿ›þg™ÿ³ÿ÷Å2VÿèþßÌÿ`‹?®ÿwÂøCÅÐÿ›û?c`ÿo݈ôXÿÇçôÿëF¤Dÿï˜úGÀþߺé°þ/¥ÿëºé±þþ\ÿ§‘þý¿éÿÀþߺ‘åÿëÿXÿ‡Ð«äÓÿ«‘þý¿3®ÿ…ÀþߺèÒÿ;Iéÿ@ Š?bÿgÎÿ pÿg݈ôðPÿèÿЍHÿˆþßÔ?öÿ֍Hÿÿó?xÿ׍Hÿ ÿ÷Ã@ÿ‡nDúGìÿLÿ7ú?u#ËÿüÔ?„¾“ƒþ]ˆôØÿ™ù?ÜÿY7ýCú'ýDñGø?èÿ‡@ÿ‡nDúGø?¨¬ÿèF¤DÿoêûëF¤„ÿƒûÿAàý_7"ý#öÿ`ýýºéáÿàþ?Xýэ,ÿðPÿúNú?t!Ò?ÂÿÁüú?t3Nÿ)¾ÿ7û¿@tÿïÖÿÇø¿>ÁñGõÿfÿg™ÿ[v½T‚õêÿÍúÖÿt¬Tÿo®ÿ†@ýëF¦@ÿoîÿá<óæ/•±úG÷ÿfþCXüqý¿ãA@ÿï„õìÿ­‘þëÿøüÏÿºéÑÿ›þìÿ­‘þëÿ¸ÿfît#Ò?býý?¸þO7"ý#úÓÿý¿u#ËÿÖÿ±þ¡WɧÿW"ýúsÿìÿ­þ!ý¿]LÿQüû?sþû?ëF¤„ÿƒú‡@ÿ‡nDúGôÿ¦þ!°ÿ·nDúGø?˜ÿÀû¿nDúGø?èÿ‚@ÿ‡nDúGìÿLÿ7ú?u#Ëÿ
 üÔ?„ž“ƒþeˆôØÿ™ù?ÜÿY7ýCú;CÿQüþúÿ!Ðÿ¡‘þþêë?ºéÑÿ›ú‡Àþߺéáÿàþxÿ׍Hÿÿë?èÿЍHÿÿ÷ÿÀêndù€ÿƒú‡ÐsrÐÿ¡‘þþæÿ Ðÿ¡›qúOðý¿Sú?Œ?¼ÿ7÷Tÿo®ÿ‚p–ù\pq¡ëÕÿ›Ïÿ*W5ÁúGõÿæúÌÜéF¦@ÿoÖÿ!œeþ_pþ©ŒÕ?¼ÿ7ó?ÂâìÿÍøCÅÐÿÛ²ÿ/öÿ֍HÿÜÿùÍ@ÿ¿nDúGôÿæúìÿ­‘þ¹ÿó›î?݈ôÏýŸß\ÿ§‘þý¿éÿÀþߺ‘åÿ¹ÿó[¡WɧÿW"ýúsýöÿ֍@ÿþßíþô¼>¢ø#öæü÷֍Hÿÿõþ݈ôèÿMýC`ÿo݈ôð¤Ìÿ@àý_7"ý#üôA ÿC7"ý#ö¦ÿýŸº‘åÿþêBßÉAÿ‡.DúGìÿÌüîÿ¬þ!ý¿“œþ¢ø#üôÿC ÿC7"ý#üÔ?Öt#Ò?¢ÿ7õý¿u#Ò?ÂÿÁýÿ ðþ¯‘þþÖ Ðÿ¡‘þþîÿÕÝÈòÿ ÿõ¡ïä ÿC"ý#üÌÿA ÿC7ãôlù8¢Uxpÿï„þcãîÿrÿÁñGõÿæú/ç™ÿsq©ëÕÿ›ÏÿXÿÓM°þQý¿¹þûëF¦@ÿoÖÿ!œeþo9ÿ¿TÆêÝÿ›ùañÇõÿæþÏDñGôÿfÿ_ìÿ­‘þ¹ÿó›ù?݈ôèÿm¹þûëF¤îÿüf`æN7"ýsÿç7×ÿéF¤Dÿoú °ÿ·ndùîÿüVèUòéÿU†Hÿˆþß\ÿý¿u#Ð?¦ÿ·£ÿ(þˆýŸ9ÿƒÀýŸu#Ò?ÂÿAýC ÿC7"ý#úSÿØÿ[7"ý#üÌÿ@àý_7"ýüý_èÿЍHÿ€ýŸ3ú¿!°r«Yþÿõý†ú‡ÐwrÐÿ¡‘þû?3ÿû?ëF Lÿï”þ¢ø#üôÿC ÿC7"ý#üÔ?Öt#Ò?¢ÿ7õý¿u#Ò?ÂÿÁýÿ ðþ¯‘þþÖ Ðÿ¡‘þý¿¹ÿVt#Ëÿöÿ þ!ôôèB¤„ÿƒù?ôèfœþ¾ÿ7û¿@tÿïÖÿÇø¿>
 ÁñGõÿfÿg™ÿv½T‚õêÿÍú*W7ÁúGõÿæúo¬ÿëF¦@ÿoîÿá<ó^E.•±úG÷ÿfþCXüqý¿ãA@ÿï„õìÿ­‘þëÿøü3w݈ôèÿÍõØÿ[7"ýÖÿqÿ'tÿéF¤Dÿoú pýŸnDúGôÿ¦ÿûëF–ÿ¬ÿcýB¯’Oÿ¯2DúGôÿæþØÿ[7ýcúçô űÿ3ç¸ÿ³nDúGø?¨ôèF¤DÿoêûëF¤ÄþÏÌÿ@àý_7"ý#üôA ÿC7"ý#ö¦ÿýŸº‘åÿþêBÏÉAÿ‡2DúGìÿÌüîÿ¬þ!ý¿]LÿQüþúÿ!Ðÿ¡‘þþêë?ºéÑÿ›ú‡Àþߺé±ÿ÷ÿƒÀû¿nDúGø?Xÿ@ÿ‡nDúGø?¸ÿVt#ËÿüÔ?„ž“ƒþeˆôð0ÿþÝŒÓð–G´
+îÿméÿ@06þèþß~8ã 8þ þß–ë?!œeþ³Šp©ëÕÿ›ë?!ðÉ]7ÁúGõÿfýõ¯™þý¿éÿp–ù?û_,cõîÿÍü†°øãú'Œ?Qüý¿¹ÿ3öÿ֍Hÿˆõ|þ‡À™»nDúôÿ¶õ€ý¿u#Ò?bÿgúÿ Ðý§‘þëÿØÿ×ÿéF¤Dÿoú °ÿ·ndùÀú?Öÿ!ô*ùôÿ*C¤Dÿo®ÿ…ÀþߺèÓÿ;¡ÿ(þˆýŸ9ÿƒÀýŸu#Ò?ÂÿAýCà“›nDúGôÿ¦þ!°ÿ·nDúGø?˜ÿÀû¿nDúGø?èÿ‚@ÿ‡nDúìÿœÑÿ
+þOÝÈòÿ¯ïÿ0Ô?„¾“ƒþ]ˆôØÿ™ù?ÜÿY7ýCú'Žþ¢ø#üôÿC ÿC7"ý#üÔ?>¹éF¤DÿoêûëF¤„ÿƒûÿAàý_7"ý#ü¬ÿ@ ÿC7"ý#üÜÿ«?º‘åÿþêBßÉAÿ‡.DúGø?˜ÿƒ@ÿ‡nFèç•?Ÿ.gÓÍúw¯ú]y?¾õמVáYÐü?1ôa`ÿ?ÝŒ»ÿçÂÎ_Z…õÿ2¹ký?ô½>cãÿÔÿQpŒ±ñïøÿlFÿ„àø7·Ûªœu <ÿ'	óÿÎòü_pq©ëÿÉû·)g¿•7czŸ~þïÏÿSã8ÿ‡P¹ª	Öÿ¾ÿ÷iÍw	׿Íbæÿ 0s¯™þCfÿ¢ùÌú†óÌÿ^E.”±ú?ÔÿdÇhO‘ üŸó?Ââÿ¹ÿCà1ÆÆ¿»þ×1þDñ?ûúßl¸þ‡û?Bhûp°^Dú¬ÿeÿ?|þ׍Hÿg_ÿÛŸÿùû?÷…ðaU_×ÕœW¥ˆôXÿ›qý/ºu#Ò?`ýoNÿ®ÿՍHÿg_ÿÛ×fcú ˜Œú׌,ÿÿúë-ëÿz•|ú•!ÒÿÙ×ÿöû?º4·Ô?‚¶þGñêE ÿâÿ°ô űÿ;ç¸ÿ»nDúGìÿNýC ÿC7"ýŸÛÿ1xþ³iBýCx_6%/zéáÿ`þïÿºéáÿ ÿýºé°ÿ{Nÿ7ú?u#ËÿüÔ?„ž“ƒþeˆôØÿù?Üÿ]7ýˆÿ#¡ÿ(þ ÿGBÿ?ú?t#Ò?bÿêë?ºéÿìûïÿÜÿÏ«]³½›µ—o^	"Ò?ÂÿÁýÿ ðþ¯‘þþÖ Ðÿ¡‘þþîÿÕÝÈòÿ ÿõ
 ¡çä ÿC"ýüÌÿc ÿC7'ô¿ZÏ¥]þ UxXÿï,Ùÿ˜ø·ÿlúé06þO×ÿô×>ÿ1þ¯Ïøøûi€0 ûøçù‰ø'&óg€ñmœ¦ö]d¿9ïïú,ŒÿÈøûI_é?«&ü'Ÿÿ\Þ÷ÿ¹”ù_mT§·u¥yêò̸«ýw–õnŇ¯¯×Ûª¾Yù¿Ö«¦Ú.ªò¾ÚÿëC–_-Ö­¨=GÚ÷hWngWëæÖ?ì¿gã	ÛC~½Œ×ÿ²ZÖ«ëµà'ôï¥ßßÿÃXGÿ?„«´"5ÑÏÕò×uS.¾Zü<ϭɢ߾ïøa[U‡×ý€$™¸Ìø°«æŸD‘Kr9èønÖÔ÷ÕÓëþMÒ¼˜tü¸*{CrW$ïëmóÐyƒý›tñ¿Ûº©>–³ßºƒâ΀êEõÏò¦Ú=(üõª;àçr³éü{²î€ïVëÕÑ;DY‘v?¨öÅ_ˏ‹îˆ¤;à?ü2ý°ò§ó4¤{ˆï×w«YÕû=»~Y”_Îó¢‹_þ§š-ÊzùÇ!ìäè×üåÃj{òø>®8ŠæßïnÔ´sZÄÃW;ç“€HÐüßÈŽ!™ÿ»Œóãã?¯ý'å¯KáÇ8™ÿø?‹¹ÿW0±Ÿ¤ûÿñò­ ëÿ˜bï3œ|þÔMÌý0ô*¹²/,kH—ÊXýoúÞa?ÿÍÿ§Ìÿ#ÿ×Ìÿò?.åþžò¿ya¬+’É—äÛ÷H&EÚÍÿ)Æ_1ãõÎÿÒÿáÑ‹ŸÉÿféäÔj<Èÿ7é¦wãAþ7³Yáâ΀Aþ×e¶È:ù_k]\t<—ÿºNäãAþ×öÈgò¿Îv1Èÿº|b]gÀ0ÿëŽ?ÉùßøTþ7æmj~‹Aþ×äù¤ûQó¿¹WhgÀŸåcæßã¯ÿþùßÉŽ!ÉÿúaÌÿpþ—ë!<&™ÿÕIÐõ_(HÉõß¿Ìë?€ ø#óÿ¼þCø’´ÿÓ†»H\*cõoÑùÿœùããï¯ÿ™ì¢ç?Þÿ!ÅßÊŽÁçÿ¯—ññ¯ÿ`þÂSýÏYÛÀú_Ö­ÿ9Oâ8IŽÖ˜$›pzøµ2^ÿØú_Êõÿ{jý‡í×ÿÒ<Îâ´7 [ÿóðÆtVNØAýÏØ$vygÀ þ—6M:ž«ÿeEgÀ‰úŸÔÿ²¤(\÷ž[ÿÑ)ŒÙgÖ¤ÝÒš}¦þ×®kï8Qÿ³§êvPÿóÚéJí þg|¨:ÅZû\ý/?ŠæŸÕÿ,ëo†ñ
 ×pý‡ë!Š?†õ¥=ÿ#óÿÔ?„/Iû?}áhñ¼TÆê?Áæÿsÿ-æÿŒ?8ÿÇý ü‘ÿ3y‘N’Àü_–åÿLž¹,6½ü_ÂòðWËxýûù_";ÆþúÏý¿¾JÆÇœÿ5¼þ#8dô’Sùßdÿ-ò|ÒÙs&¬ÿ(&›ØÎ€ÁúÔ™Ôtò¿©+Š´3à™ü¯uÝŸáDþ7䝿ì¤G¿f?ÿkŠØýýü¯µ“¢èæmšuœÈÿ&§ò¿Épý‡ÿ ~‹ÁúÄ«û[ò¿mñ¯ûIþYþ7aþ÷Í0þúÎÿ²þáÑüÊW#Aódþ—ú‡p–ü/7x½X‚ôŸËŽ!zþçþ„B!„B!„B!„BÈhþðáZo ˆ 
\ No newline at end of file

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8amd64-4n2c.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8amd64-4n2c.tar.gz.output	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8amd64-4n2c.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,49 +1,49 @@
-System(0KB HP=0*0kB  )
-  NUMANode#0(15GB)
-    Socket#0
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#0
-            P#0
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#1
-            P#4
-  NUMANode#1(16GB)
-    Socket#1
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#0
-            P#1
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#1
-            P#5
-  NUMANode#2(16GB)
-    Socket#2
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#0
-            P#2
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#1
-            P#6
-  NUMANode#3(16GB)
-    Socket#3
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#0
-            P#3
-        L2Cache(1024KB)
-          L1Cache(64KB)
-          Core#1
-            P#7
-depth 0:	1 System (type #0)
+Machine (phys=0 total=67108240KB)
+  NUMANode #0 (phys=0 local=16776592KB total=16776592KB)
+    Socket #0 (phys=0)
+      L2Cache #0 (1024KB)
+        L1Cache #0 (64KB)
+          Core #0 (phys=0)
+            PU #0 (phys=0)
+      L2Cache #1 (1024KB)
+        L1Cache #1 (64KB)
+          Core #1 (phys=1)
+            PU #1 (phys=4)
+  NUMANode #1 (phys=1 local=16777216KB total=16777216KB)
+    Socket #1 (phys=1)
+      L2Cache #2 (1024KB)
+        L1Cache #2 (64KB)
+          Core #2 (phys=0)
+            PU #2 (phys=1)
+      L2Cache #3 (1024KB)
+        L1Cache #3 (64KB)
+          Core #3 (phys=1)
+            PU #3 (phys=5)
+  NUMANode #2 (phys=2 local=16777216KB total=16777216KB)
+    Socket #2 (phys=2)
+      L2Cache #4 (1024KB)
+        L1Cache #4 (64KB)
+          Core #4 (phys=0)
+            PU #4 (phys=2)
+      L2Cache #5 (1024KB)
+        L1Cache #5 (64KB)
+          Core #5 (phys=1)
+            PU #5 (phys=6)
+  NUMANode #3 (phys=3 local=16777216KB total=16777216KB)
+    Socket #3 (phys=3)
+      L2Cache #6 (1024KB)
+        L1Cache #6 (64KB)
+          Core #6 (phys=0)
+            PU #6 (phys=3)
+      L2Cache #7 (1024KB)
+        L1Cache #7 (64KB)
+          Core #7 (phys=1)
+            PU #7 (phys=7)
+depth 0:	1 Machine (type #1)
  depth 1:	4 NUMANodes (type #2)
   depth 2:	4 Sockets (type #3)
    depth 3:	8 Caches (type #4)
     depth 4:	8 Caches (type #4)
      depth 5:	8 Cores (type #5)
-      depth 6:	8 Procs (type #6)
+      depth 6:	8 PUs (type #6)
 Topology not from this system

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8em64t-2s2ca2c.tar.gz
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8em64t-2s2ca2c.tar.gz	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8em64t-2s2ca2c.tar.gz	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,54 +1,55 @@
-‹ ¼‡J í]oãH’®ûvý+tq.vw3É$¥pz¦vv
-»=g0=µ{%¢$R )wy~ýÉ”,—õá"RF¹+ÞGè.Ùú ¬à›Ì|3rœ¯â¨ýQÏôÿÒÙ~ðB`IŒqÿª$VÛŸUmÿ}â¥t$A'ö÷J‡aôÃÈøù8‡lš6­G£îæÕ|Y”_y^^7ˆ—ñAü›ÇÆÃ90,þ¡¨ŒBü98¶L›ëžÃãi#þ¼ÿÙª¸Ú90<þ&Ð	âÏÁ×â_Ì®s
-ïÿM¤Ñÿ³Ðÿ»*­gSû‹¼¶éœvàxïWâ¯㯃ÈXý×ýSÏ#<þ7ßú€oJ‡þ³…ý¡h¦íã:'£[ÿá±þí蟢LOý?Ø“¿¨^WÇW!ôÿ&
-  ~Ùtè“?äe{á1ºô¯ôï®ÿã82Ð?¿üß÷?ÿׇŸýß6àïîÊ÷ùrù¡Ì~²÷kýSø“zw7¢?èÉlR6~×¼xƺü[õ[^ÿûlžë‰	Þ­êwõ‹Çë2øëßõXÛ_Ö?Á»ìÅcY«Cû‹úÚŸoK‡þ×.—Ž
-ÿ‰M`ü‡ƒ^ñÿ-ý”oÖäcÎÿT’ĸþcí¯lºÆ‹ª™ÎÒ–>øóCý«ð(ÿKt¢ ¾ävh	$ÒÕÿ×Õl“µS{òé’xŒîþÿhþW¡	¡zŽÿ1Æ;þ†hÿYè=þ[ΪšxŒîþ_ŸÄßhÄŸ7"3rC2èþEÒ'ÿ¿Hü?Õÿ6ÿ
-æX€þeÓËÿuQöGÈÿÜøòz^ÿ•éÊ£ÿG%Çׁó"þþyžÂ¹9<tÒè©FÿÏVÿ&ÆõP¼l:ô¿ªfé²H/;ñ»ô¯’“üOÁÿËl?²é7þsAçÿCŸþ?>Éÿ#\ÿ±°;Ô(–žó?­ –ÿ»ùhøY€ôeÓ¡û‹‹§(ó?&Äõ?˜ÿ‘M¯ùŸ[ ‚ÿÃ^ @ÿ@ÿ²é©ÿ‹ ºóÿèXÿ6€þ9ø9À¤Ÿdzéÿ¢Ùÿ>úOŽÇÿ£ã,ìÆêÑH¥çüÿfSÌÈÇæÿzÿÇõ?§ñŸåE–_³è¶…ï½þ[»úŸÆþƒõß¼{¿ÍW×8
-†Å[ÿC)Ôÿd¡3þÙzÃ[ÿaÿ$@ý_zÅßþ§.8	†Çß>ñg¡üÛj]-«ùãðapüµŠBôÿ,âß.ê<M›âÎ~_ófº,š¯WëÎÿæÿ´1Öÿ² ïlúϪ:VŸcté_ëãö?R¨ÿÂÃ>·oáNš¢5bæRýw÷þ}æÿõo´†þYP·á­¹M ;¡Põ?d: Sÿ'ù¿NôÏfÿesùõ÷1ºô&ÿ7
-õ_Xxiÿ—;0"pCÐÿzñØYºœ®ÓìS:ïΆ÷ÿ&„þyÀøŸlúë?«Óf1-«6*ƒnýù?´+ ýs0 ý_äõʶú6ý«Úv™÷Ÿt6ÿªþ.ˆVmúm
-4¼ÿt ÿ¸þ—Í€þ?ÍýoÿƒØÿ£ý÷ÏÐøå,ÿ¬‡Ãã¯Ý’PÄŸbü›EZ糩}`ºJ»v†êêÿÏŒÿ%ÆÿY ŒÒy»£1þÇ
-Qÿ¿¥Í´ºwuª¬HÛâ¡h_;F—þ÷ÿvúCÔçAŐœd¨ýñÏþ+‚»õ\ÿOÛ{Ð?Q0‰ÿM€Xˆú/7«»¼v@“·]²èÖ¿9Éÿ±þ—§È_.Dý?{ ¬dòé:­Û¢}µBP·þÇÿãëxÀü¿lˆúϪE^çeö¸k ¾~90üúß$æÿYˆ#4 ’¹|ü¿{P·þ£cýÛûÐ?êÖ QÿËü!ï½!äðü?BÔÿe3n²¡æÿî‡é¬hÒ»eçD@§þõqÿEý?ÎÓvS磲jGyé¢9C‹ ¢þÛÇõçÿNÖÿë$@ýo>–Å}Í‹…¤ÿ€ÁÿÀÿÉ1þýŸnýWcýû¼	ÿ'Ö³CÔÿ•ýŸúHÿqaü‡…1'jÿ]ÿgt¤þŸ‰PÃý)¢þ¯ìÿóÿ$ÄøðȆ¨þÏmþ‡èÿY€ÿS6Dý{ôêÿë¿X@ÿ/›ËÇÿ¯áÿ<©ÿ$Ð?èÿeCÔ¿Gÿ§Þù?±þ‹è_6Ôüß»ÿã,Àÿ)¢þ¯ëÿ<¨ÿ wþOŒÿ±ð>m±éš`Hú¸´Sø`ÿ'꿲@Œ¿ÿúŸ¨ÿÇÂ>ðÊ„¨þÏ]ýOÔÿàþOÙPûþϧõèÿY€ÿS6Dý{ôîòÿëÿY€ÿC6Dýû¯ÿ‰þŸÌÿʆ¨ÿõ?1ÿËúÙ\>þïÉÿ‰õß, ÿ—
-QÿþëÂÿÍô/jþïÝÿ‰ù?àÿ”
-QÿW®ÿy:ÿ§0þLJ²iëMæo¡{ô×Uº¡>Ê1†åÿÎÿ$×ÿ, ÿ—M_ý‡Ã,ß8…ò«ÄĨÿËBÿø·ÕºZVóÇá'Âàøk¹ý_ÿâß.ê<M›âÎ~_ó¦{€0þoPÿ…‡ý¿húϪ:VŸctéÿÌú…ú/<ìcð&Öÿ¤XŠÊÍ¥úï1ýOØÿÇh
-ý³ nÃ[s›@wB¡ê¿˜õ?F§þOòèŸ¬¸•Íå×ÿÝÇèÒ
 ÿ™üß(
-ýsðÒþ/w°™‚þŸ×þ¬ÓìS:ïΆ÷ÿ&„þyÀüŸlúë?«Óf1-«6*ƒnýŸÖ
-Pÿ•…íÿ"¯W¶Õ·é_ն˼ÿ< ð°ù¿PE¨ÿÅÂñϪMÙ5ô·exÿé þôÿ¢Ðÿoý¿”coÿƒØÿ£ý÷ÏÐøoýßš¡þ'ü?,ãï¿þ'ÆÿY ŒÒy»3Æø7Dý_¹þçqý84ÿcAŐœd¨ýÿuëƧõ?Qÿ‡…(˜Ä¨ *¢þ¯\ÿÓœäÿÆÿXpú‡üåBÔ¿ÿúŸ¸þgóÿ²!êß{ýOƒú, þ§l.ÿ¿FýÏãú?FÁÿÃCˆµ?¢!êßýOÔÿcëdCÍÿ}×ÿŒÑÿ³€úŸ²!êÿÊõ?Oü_I€ý¿XøX÷4/’þÿ§†ÿ“büýû?‘ÿ±°Á›ðbý7;DýûßÿùPœl¨ý¿÷ýßÑÿ³€ýßeCÔ¿÷ýß±ÿ3ðȆ¨ÿþOôÿ,Àÿ)¢þýïÿÿèÿesùø¿§ýß±þ“ìÿ"¢þýû?±þ“äÿ²¡æÿÞ÷Çüðʆ¨ÿëú?Oê?èDaü…÷i‹M×CÒ¿bð¢þ+Äøû÷¢þûÀÿ)¢þ½û?Qÿƒ(N6Ôþß»ÿý?ðʆ¨ÿþOŒÿ° ÿ‡lˆú÷ïÿDÿÏæeCÔ¿ÿ'æY@ÿ/›ËÇÿ=ù?áÿfþOÙõïßÿ	ÿ7ÈÿeCÍÿ½×ÿÄüðʆ¨ÿ+×ÿ<ÿSÿcáCÙ´õ&sƒ·Ð½@úë¿*ÝPåÃóÿ Áúÿ˦—þ×uÞäeÇ(ßëóÿh§ÿþ‚±ÿdúöÿѰ%8…Zÿ¡ãöÿÀúÿô[­«e5~"Ž¿V‘ÿEüýCˆ»¨ót6mŠ;û}Í›î	@ÂüŸÁþß<`ú_6ýgU?«¿Ï1ºôfýŸJ ö1xëÿŒAkÄÌ¥úïaÿ!ìÿe´†þYnõmtCwB¡ê¿˜õ?F§þOòèŸŒÿËæòëÿîctéÿLþo\ýèß?o!í¾£´FÌôÿ¼öofŸÒyw.0¼ÿ7!ôÏ'›þúÏê´YL˪͇ʠ[ÿ§õß0ÿÏÀö‘×+ÛêÛô¯jÛeÞÐxØü_¨"ìÿÌÂñϪM?OÐðþ?ÒÖÿ°€þ_6úÿ­ÿŸrŒáí»ñ´ÿþÿíúÍPÿþˆñ÷_ÿãÿ,Fé<Žÿa6‚¢þ¯\ÿ÷¸þOŒÿ± 0õ/jÿÝú¿ñiý_Ôÿa!
-&1* Ë…¨ÿ+×ÿ=Þÿ)J"Œÿ±àôùË…¨ÿõqýÏ®¸eCÔ¿÷ú¿õÿY@ý_Ù\>þú¿Çõ¿Œ‚ÿ‡‡à
-€dˆú÷_ÿõ¿XÐP¿h¨ù¿÷ú¿èÿY@ý_Ùõåú¿'þ¯D¡þ7Ëâ¾€æÅBÒÀàÿáÿä€ÿþOä,ìcð6üŸXÂ
-QÿWöžÌÿ†ùc(N4ÔþÿºþÏÓý_Ðÿój¸?%CÔÿ•ýŸÇþ(‰àÿ`þÙõïßÿ‰þŸø?eCÔ¿wÿgÿèÿesùøÿ5üŸ'õƒë?Y€üeCÔ¿ÿ'Ö²€ü_6Ôüß»ÿó,Àÿ)¢þ¯ëÿ<©ÿ …ñ?Þ§m
-ÁË…¤ÅàÿDýWˆñ÷ïÿDý?ö1€ÿS&Dýû÷ÂÿÁüŸ²¡öÿÞýŸèÿY€ÿS6Dýû÷bü‡ø?dCÔ¿ÿ'ú0ÿ+¢þý×ÿÄü/èÿesùø¿'ÿ'üß,@þ²!êß¿ÿþoÿˆšÿ{÷bþø?eCÔÿ•ëžÎÿ)Œÿ±ð¡lÚz“¹Á[è^ ýõ_•n¨rŒáù`ýÈÿeÓWÿñ0Ë÷Náƒüß*11êÿ²Ð?þmµ®–Õüqø‰08þZEnÿÄß?„ø·‹:OgÓ¦¸³ß×¼éž  Œÿ›ã,`ó_ÙôŸUuþ¬þ>ÇèÒÿ™õ?
-õ_xØÇàM¬ÿ1­3—ê¿Çô?aÿ£5ôÏBp«o£[dR¡ê¿˜õ?F§þOò蟅ÊÍå×ÿÝÇèÒÿ™üß(Ôcá-¤ýÏw"¬ÿ熠ÿçµ?ë4û”λsáý¿	¡ 8Ùô×V§ÍbZVm>TÝú?­ÿDÐ?ÚÿE^¯l«oÓ¿ªm—yÿy@àaó¡{ó\ÿ¬Ú”]C[†÷ÿ‘ýúç ý¿lôÿ[ÿ/åÃÛÿ vãÿhÿý34þ[ÿ·f¨ÿ	ÿÄøû¯ÿ‰ñ£tÇÿ°™¢þ¯\ÿó¸þGŒÿ± 0õ/jÿÝúŸñéú?¬ÿa!
-&1*€Ê…¨ÿ+×ÿ<Þÿ%Âþ¯L8ýCþr!êßýO\ÿ³€õ¿²!êßýOÔÿ`õ?esùøÿ5ê×ÿ1
-þ4Öþˆ†¨ïõ?#ÔÿcACý¢¡æÿÞë¢ÿgõ?eCÔÿ•ëžø¿°ÿ;Ëâ¾€æÅBÒÀàÿ4ðr@Œ¿ÿ'ò?ö1xþO¬Fᆨÿû¿#ÿcû¿Ë†Úÿ{ßÿý?Øÿ]6Dýûßÿþàÿ
-QÿþýŸèÿY€ÿS6Dýû÷ÂÿÁúÙ\>þïeÿw`ý'pʆ¨ÿû¿cý'ÈÿeCÍÿ½û?1ÿÇüŸ²!êÿºþÏ“ú:Qÿcá}Ú¦¼\HúWþOÔeÿþOÔÿcaø?eBÔ¿ÿ'ü,Àÿ)jÿïÝÿ‰þŸø?eCÔ¿ÿ'ÆX€ÿC6Dýû÷¢ÿgó¿²!êß¿ÿó¿, ÿ—ÍåãÿžüŸð³ ÿ§lˆú÷_ÿþoÿˆšÿ{÷bþø?eCÔÿ•ëžÎÿ)Œÿ±ð¡lÚz“¹Á[è^ ýõ_•n¨rŒáù`ýÈÿeÓWÿz˜åû §ðAþoeŸÀÿÍAÿø·ÕºZVóÇá'Âàøk…!âÏ!þí¢ÎÓÙ´)îì÷5oº' ãÿ&BÿÏöÿ‘
-AÿYUçÏêïsŒ.ýŸYÿ£蟅}ÞÄúcÐ1s©þ{Lÿöÿ1ZCÿ,·ú6 b¡ê¿˜õ?F§þOò
-ÿÈÿesùõ÷1ºô&ÿ7
-þ?ÞBÚÿåÌÈÜôÿ¼ögfŸÒyw.0¼ÿ7!ôÏ*nȦ¿þ³:mÓ²jó¡2èÖÿiý'Ôæa@û¿Èë•mõmúWµí2ï?è<lþ/TÎÿù?ÿ\ÿ¬Ú”]C[†÷ÿ‘àÿeý¿lôÿ[ÿ/åÃÛÿ vãÿhÿý34þ[ÿ÷@3Øðøë@ÁÿÃ1þþëbüŸ…ƒsõ?1þÇ
-QÿW®ÿy\ÿ#±ÿ
-Sÿ¢¡öÿ×­ÿcÿ÷oDLbT •QÿW®ÿy¼ÿöçÂéò—QÿþëâúŸ¬ÿ•
-QÿÞëFØÿ•Ôÿ”Íåãÿרÿy\ÿû¿s¡±öG4Dýûßÿõ¿XÀúÙPóïõ?Ñÿ³€úŸ²!êÿÊõ?Oü_ICÿ|,‹ûšIÿƒÿSÁÿÉ1þþýŸÈÿXØÇàMø?±þ›¢þ½ïÿ!ÿcû¿Ë†Úÿ{ßÿý?Øÿ]6Dý{ßÿ=„ÿƒø?dCÔ¿ÿ'úàÿ”
-QÿþýŸð°€þ_6—ÿ{Ùÿ=H°þ“ø¿dCÔ¿ÿ'Ö²€ü_6Ôüß·ÿÓ`þø?eCÔÿuýŸ'õt¢0þÇÂû´M!x¹ô¯üŸ¨ÿÊ1þþýŸ¨ÿÇÂ>ðÊ„¨ÿþOø?X€ÿS6Ôþß»ÿý?ðʆ¨ïþOø¿x€ÿC6Dýû÷¢ÿgó¿²!êß¿ÿó¿, ÿ—ÍåãÿžüŸð³ ÿ§lˆú÷ïÿ„ÿ›äÿ²¡æÿÞýŸ˜ÿcþOÙõåúŸ§ó
-ã,|(›¶ÞdnðºHýW¥ê£cxþo/ÿ1þÇòÙôÕ2Ìò}€Sø ÿ·²òàÿæ üÛj]-«ùãðapüµ}4@ü9 Ä¿]Ôy:›6ŝý¾æM÷ aüßÀÿËC‚þ_4ýgU?«¿Ï1ºôfýJ ö1xëR,EåæRý÷˜þ'ìÿc´†þYP·á­¹E ªþ‹Yÿctêÿ$ÿ×	æÿx¡|Ñ\~ýß}Œ.ýŸÉÿÂø?o!í¾3Ð1CÐÿóÚŸuš}JçݹÀðþß„Ð?˜ÿ“MýguÚ,¦eÕæCeЭÿÓúOüÿ,hÿy½²­¾Mÿª¶]æýç]€‡Íÿ…ÊÕÿÇüŸ.ˆVmÊ®¡¿-ÃûÿH£þ#ȸe3 ÿßú)ÇÞþ±ÿGûñßú¿µÿúŸþˆñ÷_ÿãÿ,Fé<Žÿ¡!7Dý_¹þçqý8„ÿŸCr’¡öÿ×­ÿcýß7"
-&1*€Ê…¨ÿ+×ÿ<Þÿ%JÆÿXpú‡üåBÔ¿ÿúŸ¸þgóÿ²!êß{ýOƒú_, þ§l.ÿ¿FýÏãú?FÁÿÃCˆµ?¢!êß{ýÏHCÿ þ¯l¨ù¿ïúŸ1úPÿS6Dý_¹þç‰ÿ+Q!ôÏÁDz¸/ y±ô0ìÿÃÿÉ1þþýŸÈÿXØÇàmø?±…¢þ½ïÿnÿ± ǵl¨ý¿÷ýßÑÿ³€ýßeCÔ¿ÿýßáÿ`þÙõïßÿ‰þŸø?eCÔ¿ÿ'ü, ÿ—Íåãÿ^öWÖ² ÷§lˆú÷ïÿÄúOÿˆšÿ{÷bþø?eCÔÿuýŸ'õt¢0þÇÂû´Å¦k‚!é_1ø?Qÿ•büýû?Qÿ…}àÿ”	QÿþýŸð° ÿ§l¨ý¿wÿ'úàÿ”
-QÿþýŸÿaþÙõïßÿ‰þŸÌÿʆ¨ÿþOÌÿ²€þ_6—ÿ{òÂÿÍüŸ²!êß¿ÿþoÿˆšÿ{÷bþø?eCÔÿ•ëžÎÿ)Œÿ±ð¡lÚz“¹Á[è^ ýõ_•n¨rŒáù`ýÈÿeÓWÿf˜åû §ðAþo•˜XÃÿÍAÿø·ÕºZVóÇá'Âàøk…¨ÿÌ!þí¢ÎÓÙ´)îì÷5oº' ãÿþúÑôŸUuþ¬þ>ÇèÒÿ™õ?6€þ9ØÇàM¬ÿI±•›KõßcúŸ°ÿÑúgA݆·{€Š…ªÿbÖÿú?Éÿµ»\„þÀøŸl.¿þï>F—þÏäÿFaþŸ…·ö?ßÑXÿÏ
-AÿÏkÖiö)wçÃûBÿ< ÿ—MýguÚ,¦eÕæCeЭÿÓúOæÿYÐþ/òze[}›þUm»ÌûϺ ›ÿ³Íˆù?.ˆVmÊ®¡¿-ÃûÿH£þȸe3 ÿßú)ÇÞþ±ÿGûñßú¿5öÿ^ Æû¿'Fé<Žÿid#ÌõåúŸÇõ?Pÿ“Cr’¡öÿ×­ÿŸÖÿL ¢`£¨\ˆú¿rýÏãý_¢õÿxpú‡üåBÔ?öÿNÀü¿lˆúÇþïß	¨ÿ)›ËÇÿ¯Qÿó¸þQðÿð n±X2Dýcÿ÷ï̸Ɇšÿcÿ÷ïÔÿ”
-QÿW®ÿyâÿJê³ð±,îh^,$ýþÏþOˆñ÷ïÿDþÇÂ>oÃÿ‰Õ(Üõïÿwä,`ÿwÙPûïû¿£ÿgû¿Ë†¨ÿû¿ÃÿÁü²!êß¿ÿý?ðʆ¨ÿþOø?
 X@ÿ/›ËÇÿ½ìÿnïCÿÀý)¢þ½û?C¬ÿdù¿l¨ù¿wÿ'æÿX€ÿS6Dý_×ÿyRÿA'
-ã,¼O[lº&’þƒÿõ_Y Æß¿ÿõÿXØÇ þO™õïßÿ	ÿðʆÚÿ{÷¢ÿgþOÙõïßÿ‰ñàÿ
-QÿþýŸèÿYÀü¯lˆú÷ïÿÄü/èÿesùø¿ÿ§
-àÿfþOÙõïßÿ	ÿ7ÈÿeCÍÿ½û?1ÿÇüŸ²!êÿÊõ?OçÿÆÿXøP6m½ÉÜà-t/þú¯J7ÔG9Æðü?H°þƒäÿ²é¥ÿOy]æËé*ýL:Æ0ÿÞê?Âõ?F¡L/ý¯«¦)z\è¿Aÿê¿ñü˜@ÿ‚é¥zê¿…  þпlú^ÿÜòã §ðþë?­þ•}6öÿ`¡üÛj]-«ùãðapüµŠÂ ñç€ÿvQçélꮊrÞt€†ÿ¹øƒù°âV6ýgU?«¿Ï1ºô¸þßé?R1ôÏÂ>obý¿‘›KõßÃþ;pÿÏmÿ¯ôÏBp«o£Ûº
-UÿŬÿ1:õ’ÿkÌÿ1ü_6—_ÿw£KÿgòƒñÞBÚÿå¼Üôÿ¼öfŸÒyw.0¼ÿ7!ôÏúÙô×V§ÍbZVm>TÝú?™ÿIýs0 ý_äõʶú6ý«Úv™÷Ÿt6ÿªõY¸ þYµ)»†þ¶ïÿ#õÿ< ÿ—Í€þ»þrŒáí»ñ´ÿþÿíúOí³þ¿ÞÕÿ‡ÿ‡bü=Öÿßöÿ1öä2JçíÖ"±CÔÿ•ëÿ‡GúÃã,(Lý‹†Úÿ_·þ|2ÿ`ý?Q0‰±€\ˆú¿rýsœÿ'ÆÿXpú‡üåBÔ¿ÇúÿÛü?ÆúpÅ-¢þ=ÖÿßúìÿÁêÿËæòñÿkÔÿ?®ÿaøxnÑ H†¨õÿõ®þ?ê± ¡~ÑPóõÿ·ã‘AÿÏêÿˆ¨ÿ+×ÿ?ñÙ{Ð?Ëâ¾€æÅBÒÿÀb€NâCýŸnýüŸþ!Æß¿ÿùû¼	ÿ'Ö³CÔÿ•ýŸ'ó¿a„ü…1'jÿ]ÿçñøFÿÏD¨áþ”QÿWöû?¢$„ÿƒø?dCÔ¿ÿ'úpÅ-¢þýû?áÿ`ý¿l.ÿ¿†ÿó¤þc`ý'¨ÿ$¢þýû?±þ“äÿ²¡æÿÞýŸ˜ÿcþOÙõ]ÿçIýÿcá}Ú¦¼\HúWþOÔeÿþOÔÿcaø?eBÔ¿ÿ'ü,Àÿ)jÿïÝÿ‰þŸø?eCÔ¿ÿ'ÆX€ÿC6Dýû÷¢ÿgWܲ!êß¿ÿó¿, ÿ—ÍåãÿžüŸð³ ÿ§lˆú÷ïÿ„ÿ›äÿ²¡æÿÞýŸ˜ÿcþOÙõåúŸ'óI€ñ?>”M[o27xݤ—þ«û{7ÌG=Fwþ¼ÿ§s BÿŒ4Øu[0½ôߨž6]eÓuõ[^O›ô¡(çýÅ@¸þ·@ÿ`üO6}óÿb¶Ì‡­úø‚Sø°õAèöÿÁúÿж©ë¼l§óê!¯ËªžÖUŸct·ÿ'û?‡XÿËÃ*/7èäBÒÿ¬.lÐûÝã?§ùöá!ÍÖÅԍ€H:õ_V3râ÷İü/üÁ>+p뿐ÿù§_üÝÿnúó‚Áñ×6#Tˆ?CâoÓ€îÅÞgèêÿ×»ø+üŸ‡}ÞÄúïû{d!ÌÔ·Ùó]ú?\ÿ¹Õdàÿb!ø1æ3Dÿ«|U”÷½†üèпŠOò?iôÿ,ÜüÕ†vŒ~ÉWÿ¨Útùn´CÅI¢
 ƒP>ýñÅSþ\çùþ#e¢É8Ÿò±ÉgÏO)„6ô/žòsÖ_ÞĆI/žò¡LŸ4‰“I|ò.ÿš–UùoOOSj|p ý»<i4
-Nßå¾XæOOµ™¨øÜ»|yÒñgùX:Å´Î;÷å»IÆ/?Ë/Ë*ûôò{qO/Ÿò¾¨Ûǃ'اæe þ§.Úü.Í>>íå_ôgû)ÿ–Îóæù)‘Žl:ýò³¤ëõÑG%ú Ò?Ûoìð]ì·;9ˆ‘{øîO~ù}p2üõÏ¿N?–ÍásøqÿXmÊ,?ú«ŸòüGÿcµ~å]~]¦w‡ï™ðð«ûõïy¶L‹Õ—Ï⾕ƒ0þú±¬wOz~¯P%æåSþ²™ï¾Ýé­§¾É™GÝÔëçG¿µþ‡´ÿ¥½ü³áœ vå6Û;nÿcÔæÁÅtº(Ú‘Nèd¬o¶¿ZMcOÏíýûªÎ‹yi,Ê6¯—yúo_c£©ãÛ¶¥Ë©;E^¼IÕ.òz÷Ëo’ƒW¢ÿ&KËéæKo7]»ö¬ûÝ×úHÿQd  NÙÑÿ¬°Z±ùÚÐctë?<îÿI  ÑôÓÿ"mÜZâ1†ë?ˆ¬ÿgò—M?ý¯«¦)z¬ô=AÿnHúg ú—Mÿþ¿¬êUºœ®òUU¿Zêû,Ãõï
-€Bÿ@ÿ²é§ÿªô»þ÷¤ÿרÿÏô/›Cý¯ë*»Ðì}§ðþþ_û{êû?±p&þT›Ï«t´ÿ:ˆôQü£Ø`ü‡…SßOõdë8køÑzëñøãæþÞ~!/l¡VZomr•‚&*ÕÎaòëoéúôñã¬5(¶õMÂøËëŽÌ@a¢_¾îœè¼ýg÷÷õý<ïk†Ÿ¯9}Üß~ðe'ceÌ8Ø?vðe¿xì¬5Híþ¾¯y‚ÎÚxžÞó¬HíÜ.gý4&Ú~/g4±Þý}ç4“ÝcgýB“'¿ÐWŒB_s}Íô§jµ*Úÿ*ìÿ¶©8ˆ&Éî³ìkóÙôç_÷çKl[(÷ØÛk\Âç0…Qh&I8¶
-Ó‹‡_˜Üìyöô'>=ö§Å¦üôüÒ03qŸ59ÐYßÐáofgxá%Ú?°”/þùüF¶y?EyÖÚ¸G_Ε0Ü)ýù1ýËÓ·•Ä“`÷g}ë
-øäLÿO±x}•¯÷ÿ¶ÓHÂãþ_ðÿ³­7θi‚±Ò£IÛd›8
-FÚ6lÑ$ŠÂ‘
-mÔFcÛߨñ$™Øö5¸qG6M‹mÛf‰í8ƒHô$ŽÇƽÄÄcû:û.Q˜ì_ ì&‘IFqŽB{ÀÝ&&‰œ“,v^û‚èùö€&Ç“QbîXÛÄ&pyŠ=‚m¡thõô‚ÐÁ6º¶ó4Û#<½Àõéö³‡£‰=@hÂýóíqccìÏjlô(Oôî#û¡žŽ¸¤¢ý+ܯµëΕ±ùL”L¢Ø½Âæ)ö¥®±¯pß]ôüŠØ½Q»WØG£Ä~QÛWŒ•ý’•Ñî›i—q=½ ±/Pcí>Ûxû‚Ðl_Ù¿À¾@¹eªÝŸ]”m=Š"elïmß0°ß†{+lÿq7õô¯ûH‰yúaw³G˜o63õ˜ý°Ãof2Ãoþ).½ÙS3¶ç–KÑÆ¶yýæŸ7ÜpÃ
+‹ eÖ9K íooãF–îóvý)ørp2¬*þ‘¸ÀM¦7;Ý̤ӻûN )Z&Z"’ê´çÓß*ÉrK¢Ýd³N;SÏOHZ%QÒáSŸ:5+6IÔ}/[™g2ÿËw.5i›E‡û¿Eíÿ}à;!d˜¦¡JRý¸‰ß±“OsÁ®í²&¾»YÕ«uY}åyEÓr| ^fçñß6õô}üUGˆ?OÅ?ßîÊê¶žì&ÀÉ!ÞOÄ_()/ã‹(ü.'û_Á󸛀m[7ÿö&¯>Õ²nåRÿõE¥/ƒâ]Õë+}I·Ù¦\ßë#ÉÕ¦^ëÓwE|¸TÙ¦ÐïŸý§_ÿüoQWæß¿þãCð…UÁÿ
+äJýÇßþyÕvÅv[V+ýÒt’_þöOó¾RÉô‡X©«<Ë-ÿiÞ=
+çIðŸ?]mïîÛ2ÏÖÁþƒ†Wmy£C·jÍS®òº)́ýó–æÃ¡l[æÇ#eUv¥~‹‡ÇÌC·Û9v_´æî¢øœÛ®¬«‡ÇŒ,–Áºø¤¿ºþæáÕïÛǧ¯3}vý‡~]ðiSË"ضEеy°i›`›Á&/‚üól -¶Á¦kô‘•9’ù¦þ¤ŸÖ™—©$È×·ë]{,»6Èòml6ŸƒÛÏú­Zý¶ú?©ÿÜuA·	¶7ú‘ûVÿ:ŸƒõFãJ_ÕU·0çÏšün±-šÛM]Ûâ¦
+nô›6Åv±ªëe°­J}–¢M¢@?¡ìê&X¶‹|»ÖßãsP´æædúcé/’às·Õ{™o‚¥þÜëìîv¡O©\´wÙ²þýê¦^Õ›r»ÿÉ“8þ!L®Ž_ç!ŽItˆë"[—«jSTÝáÁl¹Ô¡j÷O3/×?ÄM©?ì1Þ×A4;<ò©lº]¶¾ÚÖ¿M°ÉªlU˜÷ysuuzE‹?æ-WtÔ¿¢#\ÑŽ®èô›]ÑòyE?_FËg¯hÙ¿¢%®hGW´úfW´úc^ÑÏ—ÑÏ_ÑIÿŠNpEÿË•ÑÑóŠ~¾ŒÏ^Ñ¢E\ÑŽ®èè›]ÑñóŠ~¾Œ~þŠŽûWtŒ+ú_®ŒNþ˜Wôóe´zöŠVý+ZáŠþ—+£Ó?æý|ýüö¯èW´£+:f½¢ùGÀýæ©ùŸM±aœÿ	eÉÞüL1ÿÃÁ/Åæ·ºËÖoÊx‘DÉLÎeðñ§+}ìç¦(އtuÍgRÎ̱Ÿv··úyó¥vPRHšc5¥Ãòä.n•Pû÷|ÿ{¶íö¯û1ïÊOÅéãJ¥*Ü{We—GçÉ\1¯ûSVÕÕŸŽ¡Ryúº³£gçûÓm¹.Ž(Ïßïñu_Ž>žïCU|*ó.»YŸü6é,Úÿfë:ÿxñåÄ,ŒŽßýìÇNg"ŽgáñØÙ}rì­..ïÏÞÑ|ÁÃ÷ûŸ¦ìŠ›,ÿx~üðýôWþ‡.ZO¢$ÄÃ{þ’m·3HE¼ÿ~ï×ÙÍù‘(Vq´ÿ]ÞÿZäë¬Ü|ùò‘‰<|¿Us8úøj%æ‡cæsüf^túaæ³ý{þýç÷‹¦Î;ýA¾ÃOõ®Ê‹‹/ÿpìñ»ÿ¶Ù^¾î¯õfSvÿUêÿí‰$Œæé᳎uÅrñãûãõ’èÊûˆëü1L*Rñ<U3]0þÐ>þvú:{øŠÇþz·«>>¾T%*Œçæðßv«bÅÙ5ž8» NüÚ~Z>yàý®Ù^Øšº
+>>¬‹×ÙÃUT䝎{ôåZQê ôÇcò—‡_+Mæáák}ë
+¸ä©ú_+±›ò_¯ÿu¥‘ª‹ú?Šâõ?¦‹‡3!ƒ¹éß)]D¡îÃéÒrE*J¤I0Óõ˜ÍÓ¹._÷³Ða ¢$Ñe[¬æºâ#Èy’Ìbó’8™é×éw‰Tz|Ð/˜Gq$‰
+”>ááó8tõ™$ºršéDgÐ'ŒC5›©>«
+͹ö/HâдSôt	%•>ÕÔ9ƒ.tuåïÏððS§ëÏ®‚¹>ŠÕñùú¼º‹£ÿ³XêÞÉ\>R¬?ÔÃBó‘Dt|…yXšê\ĺ=¥ó(1¯ÐíýRS‰èW˜ß.z|EbÞ(MÌ+ôÑ(Õ?Ôþ3¡dKóËÒ´¸^êˆ™4Ÿm¶Š÷/ˆô7Ð/æCéG”8|í²êš ŠD¬koý†¡þ5Ì[‰pÿ¹‰‡ÍGJã‡?7}öù¦[fJÎØOk‹ç3¥¾ù§xéM_š‰¾¶Lm¦‹×oþypÃ
 7ÜpÃ
 7ÜpÃ
 7ÜpÃ
 7ÜpÃ
 7ÜpÃ
 7ÜpÃ
-7Üp»àv“µŸÛ‘1I¬UßܵÅ*wšPÕdÜ8ëWÞ4yãÜ@“Ä„Ûß4ÓzS–E9©§ŸïvWTuú>8ãÿs»}0úÿUxXÿ{çÿ±þ“…'ÙWõ¿¼³’~ÈËYUO‹™ýé?òÒžù‡²Í—Η6ºOWÅòÑ>߬ªY¾ü{W™ÝýQ™®rûóöÙÿú÷ý¿¼*Ý¿úÛǶí7Îa8ú?#ýSþÇ_þyÓ´ùzm›ûÒd{_þòO÷¾:ÔÉO&o¶»œŸÙþ6
-&ñè?ÿx³^<6E–.GÛܸÚnGB÷”›¬ªs÷Àö÷–Òu‘í)Ê¢-ì[<ýÎýê~½q=捻;Í?gùÚmŒûô»í.8£eþ`ÿtû—7¿­ŸŸ¾LíÑíöu£Û°ÎòѺÉGm“VM=Z§ùh•å£ìóx{ÀQ“¯G«¶¶ÌÝ#é([Uöi­{Y²åýrÓ,F³¶¹-ZF«ÕçÑýgûV¶‰vÿiû¿Ñ¢µ«ÑúÎþ汱߇
-ÃçÑreÿbç¦/Û©;~Zg‹é:¯ïWU9ZçwÍèξi¯§óªšÖea’7q4²O(ÚªÍ\±—¥ý;>òÆÂÌ~,ûñU<úÜ®íÇže«ÑÌ~îeº¸ŸÚCÚ_N›E:«~»¹«æÕªXo¿òؘŸ‚øfÿç<Å1Žvq¦Ëb^®ò²Ýý2Íl¨šíÓÜËíqWØ»÷í(ï~óPÔí&]Þl7¤­Ò2çî}ÞÝܼ<£ÕïóŒV„3::=£#œÑžÎè䛝Ñú÷yF¿ÞFëWÏh}zFkœÑžÎèð›ÑáïóŒ~½~ýŒŽOÏègôw×FG¿Ï3úõ6Z½zF«Ó3ZáŒötFGßìŒ6¿Ï3úõ6úõ3ÚœžÑgôw×FÇ¿Ï3úõ6:|õŒOÏègôw×F'¿Ï3úõ6úõ3:9=£œÑžÎhÃzFó€      ‡ÿ0=šÿ @ 
\ No newline at end of file
+7ÜpÃ
+·Ü®òîsÄqšH‘$W7]¹)ŒFÉ™˜ÏÃãR’¢5n y«ý#í¢ÙUUY­ñð÷ÍÁàªßð[[—À\øÿÚûvúpvù¿”ÉÿÉù¿8x"þKãn/&¼ìâ/Íú0J¾}¿+6\öúOTŠü,Ç?ßî^x
+ØÇ?ÕW âÏÁ¸ø3ý"°Ž¿C“ÿñwEü»z[¯ëÕ½õ…`]  ügÿî®)²åâ¸nðëÃóü¯&þQª›XÿÃÀ1ׯáN„An(ú?&tXl³üc¶*åò«çÒ¿..ôÇÐ?PœßPôoRòiþ{ý+©ôρ‚þ½†¬ÿÑ­Rû?Š¡^C³ÿñN£4bf‚þÿb]¶_Íb_ÿ'º	 ýs@q^óâúPý#ô/.ëÿ8¡Âky]£ðýוÖGA8‡}ý/¤BþO”ï56õÿ]Ñl²õB7ÿë®[£çÂíæU$±ÿ+/‰^ïª1‰"íËÿ(J"”ÿ`þÇo,ôŸ7Y{·¨ê®°ÔÁ°þ/Ë)ýs`“¶â´¯ÿ…áÿdÁ:þeµ,>K«ËÀ>þRÂÿÍ5þ&ÃüØs—ÿÉeû_$1Ê̦Lÿ‰6 ·Põÿè4c‚‹mÖt¥ÙlëÉsØ÷ÿRù?0þç7Týv€[–­Ù´gàƒú—QÏÿ¡ÿÇÂÏEÖíš"ÐÝú ¨L0—(<‚ªÿî~;]û¿7ÿ¯Ûÿ˜ÿcáCUޖм·Põ¿ßHwä9ìÛÿJ Ð?Ê÷rû¿¾+š¢Êï _Ö¿ºôÿJBÿ$
+ Ÿ!ÿßeM±\èÃàaý_öÿc…ù_$¼¿^CÕÿïÙ}»¨oYÛÖy™uå§²»æ„ú?QXÿÏ‚€ü½f‚ú“m¿~Ž!ý÷×ÿÆûüoп{Ž1xë#tF¸¡ê¿ÚmnŠÆ´ Ú¢ÐÅpý_ê_Jø¿Y0þˆÎ_húÝû?%üŸPã?­ÿórüG	Œÿð $ÜŸ>CÕ¿sÿ'ôÏüŸ~CÕ¿kÿ'ò?ð ÿ§ßPõ?©ÿ³7þ£DŠúŸ…·Y—AðþBÕ¿sÿ'ÆY@ûßoÈíÇþO	ÿ7ðú
+yüRÿgoÿ#ÿ˜üõªþ§õöò¿'ã,Ì ¯™ þwãÿÄøÇ¼ÿ'²‘rCÕÿ´þÏËþlŠèŸôÿý†¦áÞÿ‰ü¯,PãïÜÿ‰õ,Àÿé7Tý;÷Bÿ,`þ×o¨úwžÿý?àÿôªþ§ÍÿÙoÿ§¨ÿYxWµ]³ËMÛ
+º÷ªþû?áÿ`í¿!·ÿ]û?áÿ`ó?~Cÿwíÿ„ÿ›ø?ý†ª×þOäÿæþO¿™ þwãÿÄøÇÀÿé'Tý;÷ÂÿÍúÿ~3Zÿv[¾ŸançÿÔ%ögÁ"þ]½­×õêÞúB°¿HEˆøs@‰w×ÙrÑ–7ú[
+ÿ(Cõ¿ý¥	ÆÿXàoäí#ÜPôÿèýÝfùÇlU,ÊåWÏ1¤ÿ'ÆÿcèŸô¸ý†¢ÿ¼n5нþæÿ™Àþ¿~CÖÿèÖ?©ýEÐ?¯¢Ù¼Ç(˜™ ÿ?h ²¯ÿýDèŸÔÿ~óâúØþ7býOoþ?J¡Âkyapo±Ð]«?áöõ¿
+ûÿ²€õ?~cSÿßÍ&[/tó¿îºu1zØ(ÜnþWEfýæÝó’øçõ®húí±/ÿ£(ÿ›Ìÿø…þó&kïUÝ–:Ö?ÿòÿó`ÿ½ÿ—pûú_„¦ÿúß=Öñßû¿íÌ öñ—2…ÿjü§Íÿ™`ÿ÷oDÎd õªþ]çÿÄüÿóªþïÿŽþÈÿé7TýO›ÿ³7þ/Ìÿ±ð¡*oKhÞ[¨úwžÿù?X€ÿÏoÈí×ù?#èŸäÿðòøÿ¤ù?/ûÿØÿ	ï¯×Põ?mþÏ^ýŸH¬ÿgA@þ^3Aýï$ÿgŒù?Ž1xë#tF¸¡êÚüŸ1öÿFÿDç/4ý‡ÎýŸ&ÿüŸî¡Æßõþïÿáû¿û
+UÿÎýŸÐ?ðú
+UÿÎýŸð± ÿ§ßPõ?©ÿ³7þ£D‚úŸ…·Y—AðþBÕ¿sÿ'ÆY@ûßoÈí×þOø¿Y€ÿÓoÈãÿ®÷Gþ°þÃo¨úw½ÿ»ÄøØÿÝo&¨ÿÝø?1þÇÂ1¯Âÿ‰ýÙ¡êßõþïë?Y@ÿßohúîýŸÈÿÊ5þÎýŸXÿÇüŸ~CÕ¿sÿ'ôÏæý†ªçþOôÿX€ÿÓo¨úŸ6ÿg¿ýŸ þgá]ÕvÍ.7m7èÞC¨úwîÿ„ÿƒ´ÿý†Üþwíÿ„ÿƒÌÿø
+yüßµÿþoàÿôªþû?1þÇüŸ~3AýïÆÿ‰ñ?Ž1€ÿÓO¨úwîÿ„ÿ›ôÿýf´þc+ËçFávþO]"ÀÿÉ‚Eü»z[¯ëÕ½õ…`‘
+…øs@‰w×ÙrÑ–7ú[
+ÿ(Cõ¿ý¥)æÿXàkۏ¸#C4F˜¡èÿÑû»ÍòÙªX”˯žcHÿOŒÿÇÐ?˜ÿ÷ŠþóºÔü)öúWúýs ýû
+Yÿ£[ÿ¤ö„ù^C³ÿñN†T´ÜLÐÿ4 Ù×ÿIˆü<ÄPœ×¼¸þ¶ÿXÿÓ›ÿCèŸq­®ã륀§Xè¿®ŒÕŸpûú_HÿèÿûMýW4›l½ÐÍÿºëÖÅèy`£p»ù_™ý1ÿëž—Ä?¯wÕ@Óo}ùE	Ö±€W¿±ÐÞdíÝ¢ª»ÂRÃú"ÿöÿaÁ&þ{ÿ/áöõ¿¦ÿúß=Öñßû¿¥óüŸ)ü,Pã?mþϤŸÿëÿXˆÂy‚ þBÕ¿ëüŸ˜ÿãã~CÕ¿ëüŸú, ÿ§ßPõ?mþÏÞø?ò2ñ¡*oKhÞ[¨úwžÿëÿY@þ/¿!·ÿ]çÿL¡ÿÃoÈãÿ“æÿ¼ìÿÇ
+ó¿<ˆk¬ ðªþ§ÍÿÙ«ÿ…õÿ,ˆò÷™	ê'ù?Ìÿ±pŒÁ«Xÿ+1Á
+UÿÓæÿŒ{ù?±ÿÆÿÑùMÿ¡{ÿ§€ÿ“jü]ïÿŽñ°ÿ»ßPõïÜÿ	ý³ ÿ§ßPõï|ÿwø¿X€ÿÓo¨úŸÔÿÙÿQ"EýÏÂÛ¬CÒE¡êß¹ÿã¿, ýï7äö¿kÿ'üß,Àÿé7äñ×û¿#ÿpú
+UÿÎ÷ÇøØÿÝo&¨ÿÝø?1þÇÂ1¯Ãÿ‰l¤ÜPõï|ÿw¬ÿdý¿¡é_¸÷"ÿ+Ôø;÷býðú
+UÿÎýŸÐ?˜ÿõªþû?ÑÿcþO¿¡êÚüŸýöŠúŸ…wUÛ5»Ü´Ý {¡êß¹ÿþÐþ÷rûßµÿþ0ÿã7äñ×þOø¿Y€ÿÓo¨úwîÿÄøðúÍõ¿ÿ'ÆÿX8Æ þO?¡êßµÿùŸx@ÿßoÆéÿcÑTÅZ×ôŸ)çÖÿéüŸÔúRbüŸ…X`ÀgÆé¿®Ì(?õöú×ÿ"ÿá÷)ôï1£ÛÿÊjÉÇFávë?t Æú,âßÕÛz]¯î­/ûø‹T ÿ;”øwwM‘-my£°Õð2Tÿ÷Çÿ¢4Áø?“ŒÛMv³ÜPôÿ¸ög›å³U±(—_=ǐþŸ˜ÿ¡Ðû÷ŠþóºÔü)öúWRaüŸì¸ç7dýný“ÚÿQý³ð*šýÇ;RÑs3AÿÐ l_ÿ'!æÿyPPœ×¼¸þ¶ÿXÿÛóÿÅ!ôÏ‚¸V×ñ5æ }ÅBÿd€}ý/¤‚ÿ‡ŒÿùMýW4›l½ÐÍÿºëÖÅèy`£p»ù_‰ó¿¼$þy½«š~{ìËÿ(Âú°âÂo,ôŸ7Y{·¨ê®°ÔÁ°þûùcä`Á&þûõ?„sØ×ÿB˜þ?ê÷XÇ¿þKºÏÿ
+ÿÔøO›ÿ;éçÿ–(ÿ9ˆÂy‚àþBÕ¿óüßÿgã~CÕ¿óüßèÿ±€üß~CÕÿ´ù¿{ãÿ"Áüªò¶„æ½…ªçù¿±þŸøÿý†ÜþwÿùY@þ/¿!ÿOšÿû²ÿ+Ìÿò àýõªþ§ÍÿÝ«ÿ‘ÿ›	‘@þ>3Aýï&ÿ7æÿX8ÆàU¬ÿ!ÿ7TýO›ÿ;îçÿ†ÿ›ãÿèü…¦ÿйÿÓäÿ‚ÿÓ=ÔøOëÿìïÿŒñ”„ûÓg¨úwíÿÐ?ðú
+UÿÎýŸð± ÿ§ßPõ?©ÿ³7þ£D‚úŸ…·Y‡¤‹C
 Õ¿sÿ'ÆY@ûßoÈí×þOø¿Y€ÿÓoÈãÿ“ú?{û¿¨ùX@þg¿¡êZÿg/ÿ{‚ýŸy€ãÊo&¨ÿø?1ÿÏÃ1¯Âÿ‰ýÙ¡êZÿçeÿ?–ë?Y@ÿßohúîó"ÿ+Ôø;÷býðú
+UÿÎýŸÐ?˜ÿõªþû?ÑÿcþO¿¡êÚüŸýö‚úŸ…wUÛ5»Ü´Ý {¡êß¹ÿþÐþ÷rûßµÿþ0ÿã7äñ×þOø¿Y€ÿÓo¨úwîÿÄøp\ùÍõ¿ÿ'ÆÿX8Æ þO?¡êß¹ÿþoÐÿ÷›Ñú/—ëÂÊõù£ðñþO©õ&!ò²`ÿ|×4EÕ-–Mù©hÆžc°üò"þ*Fþw²|[.LlQ
+x	Mÿ«ZË¿ª›ES8Çpû/¾Ð”(蟅MQí }§ÿmS´Z÷Äsë?ºlÿÅÿá!üû¿ùÌHý×m[½Ÿ ÿë?x€þýftûßnÉïvã?fü7•Âøñïêm½®W÷Ö‚}üEŠñ?(ñïîš"[.L‹ ¬VÃ?ÊPýߟÿÒþ.g`¿í‰¶3ý?®ýÞfùÇlU,ÊåWÏ1¤ÿ'üŸ1ôÏÖø
+EÿyÝjþ{ý+)áÿ`!„þ½†¬ÿÑ­Rû?Š ^E³ÿx'ÃVDÜLÐÿ\ f_ÿ'!üŸ< ýï7/®ÿ‡—ŽðÿõÖD)ôÏ‚¸V×ñ5æ }ÅBÿueR=ÎaWÿ›ù!öÿcõ¿ßØÔÿwE³ÉÖÝü¯»Îb5ˆQ¸Ýü¯ŠD„ù_^ÿ¼Þò„Ú÷ÿ¢þO0þë7úÏ›¬½[TuWXê`Xÿ—ëÿ¤Dþlâ¿_ÿM8‡}ý/BÓÿGýïëøï×ÿKçû¿$ðÿ±@ÿ´û¿$ýüÏXÿÇBÎì ã/Tý;ßÿãÿ,`üÏo¨úw¾ÿò?³€ý_ü†ªÿi÷éÿ‹û?°ð¡*oKhÞ[¨úw¾ÿæÿYÀŠ;¿!·ÿ]ïÿ‚ùÿÕoÈãÿ“îÿrÙÿUŒþ?â:Fà1TýO»ÿK¯þÇþ/Lˆò÷™	ê7û¿`þ…c^Åú_‰Ñn¨úŸvÿ—¸¿ÿüß,ÿDç/4ý‡îýŸ1üŸPã?­ÿó2ÿ³ðÿó $ÜŸ>CÕ¿;ÿ§<ø?¡àÿôªþû?áÿbþO¿¡êRÿgoÿ7%Ôÿ,¼Í:$]ôªþÝù?÷úW!æX@ûßoÈígþOyðbý7ðú
+
 yüRÿgoÿCÿ, þ÷ªþ§õ^¶ÿ“Dbý3èßk&¨ÿ'öʃÿã,cð*üŸØÿ‘ªþ§õ^öÿc)0ÿÇúÿ~CÓ¿ÝfðFáÖþOäewþÏCþŸëÿX€ÿÓo¨úwžÿúgã¿~CÕ¿sÿ'ÆX€ÿÓo¨úŸ6ÿg¿ýŸ þgá]ÕvÍ.7m7èÞC¨úwžÿþÐþ÷rûßuþOÌÿ°€ù¿!ÿ»öÂÿÅê¿¡êߝÿó!ÿ'ÆÿX€ÿÓo&¨ÿÝäÿÄøÇÀÿé'Tý»ó>äÿDþÐÿ÷›Ñú¬,Ÿg…Ûù?u‰ ÿ'ñïêm½®W÷Ö‚}üEjüÿˆ¿{(ñïîš"[.ÚòFÿ`«áe¨þï·ÿ#}õ?|mûwDˆÆ3ý?z·Yþ1[‹rùÕséÿ‰ñÿúçŠóŠþóºÔü)öúWRaþÌÿù
+Yÿ£[ÿ¤ö„ù^C³ÿñNŒ½H¹™ ÿ?h ²¯ÿ“ùŸxÀð¿ß¼¸þ¶ÿXÿÓ›ÿC蟅ðZ^GרÐW,ô_WÆêO8‡}ý/¤‚ÿ‡ôÿýƦþ¿+šM¶^èæÝuëbô<°Q¸Ýü¯ŠÌþ¿˜ÿuÏKâŸ×»j é·Ç¾ü¢ë¿XÀüßXè?o²önQÕ]a©ƒaý÷óÿÅØÿ›øïý¿„sØ×ÿB˜þ?ê÷XÇïÿ–Îó¦ðÿ±@ÿ´ù?“~þ¬ÿc!
+ç	2€úUÿ®óbþŒÿù
+UÿÎó¢ÿÇòú
+UÿÓæÿìÿ#ÿ'ªò¶„æ½…ªçù?±þŸdÜðrûßuþÏúç ù?ü†<þ?iþÏËþ¬0ÿËCxÀg¨úŸ6ÿg¯þOÖÿ³ `ý÷š	ê'ù?Ìÿ±pŒÁ«Xÿ+0É
+UÿÓæÿŒ{ù?±ÿÆÿÑùMÿ¡{ÿgÿ'Ôø;ßÿã?,`ÿw¿¡êßùþïÐ?èqù
+UÿÎýŸð± ÿ§ßPõ?©ÿ³7þ£D‚úŸ…·Y—AðþBÕ¿sÿ'ÆY@ûßoÈí×þOø¿Y€ÿÓoÈãÿ®÷Gþ ¿¡êßùþïÿcû¿ûÍõ¿›ýß1þÇÂ1¯Ãÿ‰l¤ÜPõï|ÿw¬ÿdý¿¡é_¸÷"ÿ+Ôø»ö&XÿÇüŸ~CÕ¿óüŸÐ?˜ÿõªþû?ÑÿcþO¿¡êÚüŸýöŠúŸ…wUÛ5»Ü´Ý {¡êß¹ÿþÐþ÷rûßµÿþ0ÿã7äñ×þOø¿Y€üý†ªçþOŒÿ± ÿ§ßLPÿ»Éÿ‰ñ?Ž1€ÿÓO¨úwîÿ„ÿ›ôÿýf´þíR~ža>Þÿ)µþu‰ ÿ'ñïêm½®W÷Ö‚}üEƈ?”øwwM‘-my£°Õð2TÿŸ·ÿåÞÿ“`þþFþ×î`6’Šþ½¿Û,ÿ˜­ŠE¹üê9†ô>þgôÇÐ?èqû
+EÿyÝjþ{ý+äbú÷²þG·þIí
+ôÏÁ«höïÄ1J#f&èÿ€ìëÿÄ,	€þ@ýï7/®ÿ‡í#Öÿ\Öÿq”Bÿ,„×ò:ºÆ€¾b£ÿ»¢Ùdë…®þë®[£çŒÄíæTdò¿cþÇ=/‰^嬨¢}û/Šb¬ÿ`í?¿±ÐÞdíÝ¢ª»ÂRÃú¿,ÿ¥Œ±ÿ6ñßûÿç°¯ÿEhÚÿ¨ÿÝcÿ‡ýßmÎa)øX ÆÚüÉeû_ÄXÿÃBÎd ôªþÝåÿ“‡ýŸ1þÇw~CÕ¿»üÿ¯Bÿäÿóªþ§Íÿ×ÿÇú_&>Tåm	Í{Uÿîòÿíõ¯B¬ÿeABù^Cnÿ;Ëÿ'ùÿôÏÖÿû
+yüÒü—ýÿXaþ—‡ð€ÏPõ?mþ¿^ýŸH¬ÿeAÀúë5Ôÿçÿ“‡ýŸ1ÿÇÂ1¯býŸÀl$7TýO›ÿ/¾Ô¿ð³`ü?¿Ðôo—Ð(ÜÚÿ©àÿä€wû??ø?1þÃ
 ööªþû?¡Ðãòªþû?áÿbþO¿¡êRÿgoüG‰õ?o³.ƒàý…ªçþOŒÿ²€ö¿ßÛÿŽýŸØÿ‰ø?ý†<þïlÿçƒÿ3BþÿËo¨úw·ÿóƒÿã,`ÿg¿™ þwãÿÄøÇ¼
+ÿ'öc‡ªwû??ø?±þ“ôÿý†¦áÞÿ‰ü¯,PãïÜÿ‰õ,Àÿé7Tý;÷Bÿ, Çå7Tý;÷¢ÿÇüŸ~CÕÿ´ù?ûíÿõ?襁kv¹i»A÷BÕ¿sÿ'ü, ýï7äö¿ëüŸð°€ù¿!ÿ»öÂÿÍüŸ~CÕ¿sÿ'ÆÿX€ÿÓo&¨ÿÝø?1þÇÂ1ðú	UÿÎýŸð³€þ¿ßŒÓ}{k†ùˆçÖÿåþßaŒüÿ<̾‘uÛcÆé¿Õ5ÿr±ÉÛúw]ë·Ù§²ZVðþ{ó‰Àø?ÿó›ÑíÿÔjÉÇFáã×(Sÿ‡‘Àú,âßÕÛz]¯î­/ûø‹Ôìÿ€ø»‡ÿî®)²å¢-oÖ£šCõÿùøŸÚûS´ÿY˜fÜn¢;3´F¸¡èÿqíÏ6Ë?f«bQ.¿zŽ!ýŸ·ÿþãúç}¿¡è?¯›AÍŸb¯%öÿcAAÿ^CÖÿèÖ?©ýaÿO^C³ÿñN†TôÜLÐÿ4 Û×ÿ‰Yý3Bq^óâúØþ?býïeýÇ!ôÏ‚¸V×ñ5J_±Ð]=@öõ¿æÿYÀøŸßØÔÿwE³ÉÖÝü¯»n]Œž6
+·›ÿU‘”˜ÿåà%ñÏë]5ÐôÛc_þGQ‚ý¿XÀŒ«ßXè?o²önQÕ]a©ƒaý_–ÿRbÿOlâ¿_ÿC8‡}ý/DˆüÏ,XÇ¿þK:Ìÿ}Ð
+ÿÔøO›ÿ;¹lÿ‹ù¿XˆÂy‚àþBÕ¿»üßjŸÿó<`üÏo¨úw—ÿûàÿÐÿcù¿ý†ªÿió÷ÆÿEŠù?>Tåm	Í{Uÿîòïõ¯ èŸ	å{
+¹ýï,ÿ÷Þÿ+±ÿÈÿå7äñÿIó_öÿc…ù_¼¿^CÕÿ´ù¿{õ¢°þŸ‘@þ>3Aý?qþï}ý/Ìÿ±pŒÁ«Xÿ;ÃnÜPõ?mþïøRÿRÂÿÍ‚ñÿ@tþBÓèÞÿ©àÿä€ÿiýŸ—ã?J`ü‡%áþôªþû?¡àÿôªþû?áÿbþO¿¡êRÿgoüG‰õ?o³I=†ªçþOŒÿ²€ö¿ßÛÿŽýŸþoàÿôòøÿ¤þÏÞþ/*Fþàþôªþ§õöò¿'
+ã,Àqå7ÔÿnüŸÿcáƒ×áÿD6Rn¨úŸÖÿyÙÿ¥ÄúOÐÿ÷šþ…{ÿ'ò¿²@¿sÿ'Öÿ± ÿ§ßPõïÜÿ	ý³€ù_¿¡êß¹ÿý?àÿôªþ§ÍÿÙoÿ§¨ÿYxWµ]³ËMÛ
+º÷ªþû?áÿ`í¿!·ÿ]çÿ„ÿƒÌÿø
+yüßµÿþoàÿôªþû?1þÇüŸ~3AýïÆÿ‰ñ?Ž1€ÿÓO¨úwîÿ„ÿ›ôÿýfXÿU½,¬ìž=ŒÂ­üŸ"UÆÿ
+ÿ§{FÆ¿®Ì0/ñöåÃÿÏZ\~3RÿævIŸO°.ÿe¨d‚òŸ«øënÀà`ÿ—ÿ—þ‘JÌÿ³~ Ÿ±Ò¿îôgZ.¶ÀþEt™ÿQŠùßX0!]Ü•] ÓP¦2É«ýC›²mƒðpÿ¶nŠrUé?˪+šu‘}*ö¯i"“«umց˜+ääMêî®h¢‰ùбÒÿ¦Ø”Õmm{Žý‹¤×þiÿWßK4ø¥ØüVwÙúMp@$ijšáÁÇŸNžòsSÇg"Žæ35›?åC[,Ÿ™*ú“§ü˜wå§/o¢Q*M“ðä)ïªìòIó$'½wùSVÕÕŸž&ÄììDÇw9{R„ýw¹-×ÅÔŒç"yê]¾<éò³|¨Œ`:³vâËo“ÎN?Ë/ºŒüxú»˜§ÌÂÓ§¼-›îþì	ú)a|€ÿiÊ®¸ÉòçO;ýF?ëOùlU´O‰d$ÅY³íö⣩<‹ôú;ýëÎÏbdÿf¾òésäÙÅð÷Ÿß/>TíùsþqªwU^\|ëó§<~éß6ÛgÞåý:»9(Vç?Ýû_‹|•›/ŸÅü*ga|ÿ¡jOz|/¥‹«Ó§üm·:üº‹­„ý£'2yâèû]³}<ú­õoUþ·yV-v_.÷ÅÖ|¡Ás÷ÿ.ýQŠýßxøöW ø–XéYj±èÛòöãÿºåý_Y( ¼ÆvüwÐìõCúïû¿DŒõ<cð*ü_··(Œ˜©ÿmݶåp¦‡§±¯ÿuÇíPýûÍHýße­ñzÓÎa¯ÿ0Áú/ ¿±ÐU7›l½Ø›ºyn©×“Øë_š§Aÿ@ÿ~ó„þóuÖ¶/s|ŸcnçÿŽb¥àÿãàÙø/7åT×€}üc"ÿ3_¹œä°‹d⟆XÿÁÂPüsÝòkËv¡¿}™MøuÁpûï"þºÿÂÿËÂPüoʺ]|*ªeݐÏ1q9ÿ¯Áøo‹õ:x
 Wå? à%#õß´Ï%wÁpùŸô×ÿ ÿÏ‚üAý€þ2¨ÿ:k–‹*ÛPÿ~7FÿéEû?MôÏBø÷_åL¢ ð•qúY`XÿÑeÿ/Š‘ÿ……CÌ øÌþ·M½ÜåÝb·+—Ôs؍ÿÚÿóÿ,Œêÿ-³îÍ¿ã?ê2ÿOaü…0ú‹œÿE†!zÉØñÿ—´ ‡ËqÑþ¡Àø/P½ßŒmÿñéÿàÿVhÿ± ýûÍØú_ÿ¿è]¶"œƒPÿ«ã?,@ÿ~3nü÷%î’ÿGF˜ÿaa(þ›z™­ËìEß|(þ"½ôÿ¥‘Àþ,è0¿¹ùTqéûÍÞðæfùehèM{òŒmõú÷¢ù÷媐ó8|³ýÔ¼iNŽ7ÕaNQ?Øü†oò“cy'•~ yƒjç•0¶ÿÇçÿ<¬ÿÃú†â¿+>•uÆßs†â//ûÿ"Øÿƒ‡_þßÛÿëݏïÿ*/[þ¿Ä6<ÿ—öæCìÿÀ£„£a¨Ñ7ÆŽÿu÷[wú?[ÿüèÿ± 4ï3ãÆÿ^2úOÿSääê÷›ñþúÐáö¿ì­ÿ•˜ÿgë?ýfìú—, 'è_&èÿ³ ýûÍàøŸza#q»ü/úNŒü/Œ‹ÿïÙÇbgŸøûBÿOFÿažßé_?ðÒô?”ü?&% ôÏ Ú      øÃÿ¬Ý“  @ 
\ No newline at end of file

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8em64t-2s2ca2c.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8em64t-2s2ca2c.tar.gz.output	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8em64t-2s2ca2c.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,38 +1,38 @@
-System(15GB HP=0*2048kB Dell Inc. 0NR282)
-  Socket#0
-    L2Cache(4096KB)
-      L1Cache(32KB)
-        Core#0
-          P#0
-      L1Cache(32KB)
-        Core#1
-          P#4
-    L2Cache(4096KB)
-      L1Cache(32KB)
-        Core#2
-          P#2
-      L1Cache(32KB)
-        Core#3
-          P#6
-  Socket#1
-    L2Cache(4096KB)
-      L1Cache(32KB)
-        Core#0
-          P#1
-      L1Cache(32KB)
-        Core#1
-          P#5
-    L2Cache(4096KB)
-      L1Cache(32KB)
-        Core#2
-          P#3
-      L1Cache(32KB)
-        Core#3
-          P#7
-depth 0:	1 System (type #0)
+Machine (phys=0 local=16468292KB total=16468292KB Dell Inc. 0NR282)
+  Socket #0 (phys=0)
+    L2Cache #0 (4096KB)
+      L1Cache #0 (32KB)
+        Core #0 (phys=0)
+          PU #0 (phys=0)
+      L1Cache #1 (32KB)
+        Core #1 (phys=1)
+          PU #1 (phys=4)
+    L2Cache #1 (4096KB)
+      L1Cache #2 (32KB)
+        Core #2 (phys=2)
+          PU #2 (phys=2)
+      L1Cache #3 (32KB)
+        Core #3 (phys=3)
+          PU #3 (phys=6)
+  Socket #1 (phys=1)
+    L2Cache #2 (4096KB)
+      L1Cache #4 (32KB)
+        Core #4 (phys=0)
+          PU #4 (phys=1)
+      L1Cache #5 (32KB)
+        Core #5 (phys=1)
+          PU #5 (phys=5)
+    L2Cache #3 (4096KB)
+      L1Cache #6 (32KB)
+        Core #6 (phys=2)
+          PU #6 (phys=3)
+      L1Cache #7 (32KB)
+        Core #7 (phys=3)
+          PU #7 (phys=7)
+depth 0:	1 Machine (type #1)
  depth 1:	2 Sockets (type #3)
   depth 2:	4 Caches (type #4)
    depth 3:	8 Caches (type #4)
     depth 4:	8 Cores (type #5)
-     depth 5:	8 Procs (type #6)
+     depth 5:	8 PUs (type #6)
 Topology not from this system

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8em64t-2s4c-heterogeneous.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8em64t-2s4c-heterogeneous.tar.gz.output	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8em64t-2s4c-heterogeneous.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,34 +1,34 @@
-System(15GB HP=0*2048kB Dell Inc. 0NR282)
-  Socket#0
-    L1Cache(32KB)
-      Core#0
-        P#0
-    L2Cache(4096KB)
-      Core#2
-        P#2
-      L1Cache(32KB)
-        Core#3
-          P#6
-    L1Cache(32KB)
-      Core#1
-        P#4
-  Socket#1
-    L2Cache(4096KB)
-      Core#0
-        P#1
-      Core#1
-        P#5
-    L2Cache(4096KB)
-      L1Cache(32KB)
-        Core#2
-          P#3
-      L1Cache(32KB)
-        Core#3
-          P#7
-depth 0:	1 System (type #0)
+Machine (phys=0 local=16468292KB total=16468292KB Dell Inc. 0NR282)
+  Socket #0 (phys=0)
+    L1Cache #0 (32KB)
+      Core #0 (phys=0)
+        PU #0 (phys=0)
+    L2Cache #0 (4096KB)
+      Core #1 (phys=2)
+        PU #1 (phys=2)
+      L1Cache #1 (32KB)
+        Core #2 (phys=3)
+          PU #2 (phys=6)
+    L1Cache #2 (32KB)
+      Core #3 (phys=1)
+        PU #3 (phys=4)
+  Socket #1 (phys=1)
+    L2Cache #1 (4096KB)
+      Core #4 (phys=0)
+        PU #4 (phys=1)
+      Core #5 (phys=1)
+        PU #5 (phys=5)
+    L2Cache #2 (4096KB)
+      L1Cache #3 (32KB)
+        Core #6 (phys=2)
+          PU #6 (phys=3)
+      L1Cache #4 (32KB)
+        Core #7 (phys=3)
+          PU #7 (phys=7)
+depth 0:	1 Machine (type #1)
  depth 1:	2 Sockets (type #3)
   depth 2:	3 Caches (type #4)
    depth 3:	5 Caches (type #4)
     depth 4:	8 Cores (type #5)
-     depth 5:	8 Procs (type #6)
+     depth 5:	8 PUs (type #6)
 Topology not from this system

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8em64t-4c2t.tar.gz
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8em64t-4c2t.tar.gz	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8em64t-4c2t.tar.gz	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,181 +1,206 @@
-‹ ¨
-J ì]moÛ¸–ž¯7¿‚À~™‹ôòU²‹ÅbS7mƒI¦Ù&ÁâÞC‘éX¨-éJršöÇ/)Çy‘ü"1g'<Ѩ)RÒáÃCòR¹ðxqHâ	iñ·ú Vð…ÐGâ\þ&œ—Ç{ü@ÅT`Ì	ûêaï$z¹›
-–ydýpu\Ï£xG:™å6nÈ.Ïå?ÏÓ0zsStZ†°·’÷&ùû‚P%ìa.aDÉŸ3‚@¸Ó»ØÇåøw-‚·ÿóðß1~ƒ:‰9G£$K“,(¢$Fÿ½ŒÂoçA1CGY8‹
-ËL¢“¿}FŸ–W¨HÐñÅ	:O²â =BåGÞàu䟇‡•XúKë±ì1–©ØõÝ]ž KÎâdž\G2W·¢/¿
-">ž¢¿ˆ2©Ž¿2¦žýxžE‹ »ûëÓ¬ÿUñ5i™õ…“xRÍ\Ý%¼o^*ñ+ê±Þc¬Wõc}{xÿFÎþçËÉèó™¾Û7èì.‹	þˆÞ/ƒùáy–I˜ÌÑ/'#ô£:}x>:9>Uozð˜õ ^ðð1vX
-cƒzìds•ú‹“ï1šÈ›(”ˆqÔ.$Í.¼ª]H›]Ö.dÍ.œÔ.ä[i“jÚè¸LÕ—X1Ïîò(æè4¸“YI„k9ŠæHj9zŽÔåà7»°*ÙPò¤*ÙPò¤*ÙPòDÖ.l&y2­]¸Qòõ*3¬\8mør(~!ÙÛDo®A<A§Qüí¾Š|‘×Q®Òå«Á›%°¥/ɲˆâ벌‡§Q9¤‡!µBúy˜j9ÌHyªãíѹjžË»È–i¡®Ž‹,™ÏeV)•pq§nzÎ‚8¸–RËϛژÿÇó“ÏåëºÕá“El¤èž"îߺ(‚b™—…}9ºØQÈF:ï)är¦Ä]ÌåÖlÅæ×™©>¤œ ã[.Wg֝ˆ»­yy›ózv„Žãë(–µôE³#ýÆ÷¼#ýÆW¶#ýƆoGú
-mGúêjGúZjkú`óû?}"}½x‡¾~<a"ú·jCl–ÈŽD-‡2Ú‘ƒWËaãS?ä@Ñq5ZÉâj׋øô-'Q²½I
-;WOzéõTøâøú]WQ~‘Å÷$û¦sÖí®JÒ¬“þÒœË{æë{kV+Ö±“zì–îì™UÕÄ–~펪"ÛÒÁÝ‘«åкÞTC>
-^Ö_SÃîMP퉩w<G©V¼G—GèäýñöZ9ÝÜš­r¹8{§tÈækÿ¡¯ÝØR­®¥ÛïàÉ›¡2ÿ“fIØù$`³ù?âaL™GU:„G`þÏ6É?L—Q<M:+c÷üaL”òW£$=æ+ùU`þÏ´Àež'Ù_ÞªÑٍŒ'I6Ž&ê×G«j Ë–ð@U	4
-ÑüNÅx‹d"çQÿ¥÷ÿGq°­ÚÏ¿üÎ¿>i^ÿi‰«}3d?ý~ ºÆiª†[:«²³O¿ë|‰ª2ÆaÎ$Ê£ßuî2¤èçwéz XÞ(9È£+%ºë\'9Õ§Wåé,õ	Å‚4
-W1Ä;ˆâ¨ˆô`ru²<7M—:öNæú¿cyÊT·þ÷ç41&h.oÔëôäà{ú|¨òÕuºYH¥âPšKTä!ZäJ‰Jå…·ƒ²D”Ë-ŠLÅ\ë˜ …‹äF%+ôeÌCá|:_æ34)Ôx'L#´XÜ¢é­Ê*WÙªTýA³”^©3w¹z#J·(Sׄ)š/ԣǪzÇÅXßF =ãTfÓ…Rg©¼ÊÑ•Ê;“éø:I&(U‰z)I†&ù8Lçê9n‘Ìuº0u[êö‰‡n‹T%Q·¬Nñ1Y´fLC5¸œ³éX•M‚ƒ«ä:YD©~ûbàyoþÁú¹îEêñ•ˆÇÁ<ºŽõètu2˜L”Ôò2Y)<ŒTß.GkÑÿ„ø`uæ&ÊŠe0?H“犯²xå¾=8xZ¹Ék«Üd{ål¨Ü¨Ü½VnñÆÿã*7}m•›n­Ü×+·:•ûÕVnöÚ*7Û^¹é†ÊM¡r¿ÞÊÍ_[åÞÑçö7tK|¨Ü}WîáV¹Åk«Ü;úÜÃ
-•{•ûõ¶ÜÞk«Ü;úÜdC·„@å~½•Ûm•{GŸ›m¨Ü*÷ëªÜögÖÿØdÿYÈ…Eûú¯_õÿ„S°ÿØÀ™\\&E0»j•	&õ)úöî@Å|Ȥ|»n°9õ(è˜wËéT½Œ‡í9ôtÌHówòÁÊk.¾i5asÑÍc1ê|á•1'qð,Ž“tÛ“Û&XPÊÊyrÛ:{eÌ{Õ8Ü=)\Ç®îú·,*äU~{»º·8‰ÏU#òð¬û¬¼æ,HÓgÏB„¿zoóàêY1ÌWTÆ|‘á<ˆÁÕ|u”2Z–sñ5ÎVqëû|UŽ.ýR_ðx|õv~ùp1þªÛôunwý.YÆ¡|þ¨«˜‡'½\¤Ï¯%‹ETœFêÏÛ²|³Œ)äd|tQ^3ÄŒ”÷öëBi™$¼„6ß}6`žÿ$òk~ÿ–¨7+ÝÇŒfËøÛýeÜz¦#?-¯eùÆÇO䋟œ~"ܧ§¿ä7“
-§/–YúìtªO+E²:I1_×
-J¦|]üû§ˆ¡gå{ÁŒêž‡Šù£™Û
-6µÿªNuº hwûO‰ïUíÿœûÚнbD(!êàHðá@5XžÀÌ#Èóˆ:¥"J©ñjn«”¾ê!«ÖËCÜÇñ}¤dȐº€®SÅ-ªR©|‰¯“ù:/Ê•J at t@ÖÉ(bžPªe€SÅ«tª×'9E„¤”Ç}J†|õ«,ÊR}:Hß"Cž×‰¸&(
 âêVð Lå«+8+3Y§ZèæHVw¦‚z ò4‘ŠÕ)T”’ò¾8>bT=“Ê’`>\'UÕCÕh²Õ“Õ}†H?B™*Š‹L«Á<ÔiCOÝ¥.Ž á}Á7ð,†1[ÿ “@€  @€  @€  @€  @0
-zŸê¡¿!‚ ê´÷ˆð=ªC¼ÒM„pŒ†ÚScõ‡2‘ì*â ,n•™º‚vpUD©®¤)÷ØÚi_æˆNqù;gË8Ö›’ûßWó$ü&'*»ªÿOÅÿ+¿Ë»ß¼Ùþ?Ø£Ä÷¥zÿÎaÿ+Ø ÿÕæ\Öƒöò×~€ Ø!ÿ¼Ü7´ƒjÐJþžöÿôTSò·ýòÓåë@Ãýßžøÿúƒü­ ™üµG¬y%h%¥ø±’¾ ù[AùIZîiܺ"´“¿ÒÿJPò·ù³L“ñz©íÞ2´€ùöõXéþŠü¹ïû°þÃÖ2øé%ÿáü•¬†r&ü_/¼§Aø-¸–ãh²³Œ}üǘVø/<L€ÿ6@€¹NÄÿz}œŠöügÖÿÛþ;
-cþ7îýõÿ9ìÿnôÿ§ShEþ¤è`ü?žGùÎý"öë^ῇìÿ`ô'¸ë0^¬ÿ÷²ß„ÿBü·|èÿFþ'±â‡4(C3|Çþ•ñ¿¶ÿÊaþß
-`þÏm´à¹åí\¶÷Ðoäÿƒ}R¶”ðÿ°ùëí%kQ
-šÉÿiÿúü?­À\þ™‡ÍÊØÛÿgµùÁè8Ÿ >¡“_.OÑÙoG'—ß²º§8à5œÿË<¸n6ØËBªüWà¿
-xC½†e à GaÎÿ¹ú‡w
-Êh?ÿÇ© ýoÄMï2Ìù¯W"6+c¿þ¯òŸ	à¿0N‡tÈ}æ1h„9ÿõg¾š•±_ÿ3ÿÿA흆9ÿˏ¬5*£}ÿŸédÀ úÿ.Ôÿ¤_û§×ÿý§˜Ë¿KûOmþW0hÿ­`‹ý”‚#0ç‡ö,êöðÿ²ê°ý8sþwiÿ©Îÿp
-ã?;`° Ôi˜ó¿KûOuüLJõV@‰Pƒmh\…9ÿ{¶ÿÀþ/V0‚Þ¿Ó0ç—öŸúøÖÙÁ` r¦ü§}¯ÿõ_V`.ÿž×ÿÀþ_V°ÅþCA)¸sþwiÿñjý?
-ã?+ðó` waÎÿž×ÿ€þ·BÀ~‡aÎÿ.í?uÿ/˜ÿ±ƸMÀ…9ÿ{¶ÿ€þ·‚˜~†9ÿû]ÿúßÔ+‡Àa˜ò÷½þÇû
-˜Ë¿Cûõ+û¿Âúo[=yzŒFŸ¿£óϧ§Hÿ•à
-Ìùߥý§fÿõ	ðß
- ÷ç6Ìùߥý§ÊN9ìÿhÀ·aÎÿí?uýë,øï6Ìùß—ýg5þ§0ÿk#h œ†9ÿ;´ÿšý×ýoœùÐóéP@;à"ÚñšÉõõý§§ü'‚€ýÇ
-äŸÄ¹âIãŠÐ^þŒ©.!Èß^"ÿ<X¤ú°ãLuv”¡¼ûûÕõÿ; úõƒêwñ¼n·”±¿ÿ_õÿö|óÿV@îE M€›èÿ[ɳþ¯¦ÿ}ûÿYò;—ð?ºŽ“LŽc•z<O‚ɶ2ö÷ÿ«ö?û ÿ­ ¸ï6^Âÿe:.f™ÌgÉ|+÷5öó¿:ÿ/`ÿoK@à4^ÂÿÒ˜7r|;¸a ÿ)Øÿí èï6øŸ‡A9ê_·c}bo{ù_Ûÿ›û°þÛèPïµ­€«xÿƒ› šWs9¾Nnd'Ûø±wþWùïþ?V°îÌ¡òùÒ ”(•Ù4ÉÔIõh^9ø¯ý ãi¢'ü›ëÿvßÿྀý­€ˆ¡úß]ð?˜NeXÈÉXhĈýö¿úú?
-ý+€½_݆ÿ3©—þ6§¿	ÿ	ýoÀ·ñ‚ñÿzÔ¿·ŒýóUÿ?îû ÿ­`=þ‡fÀMt2ÿ§O/eFr#Cöé«ü÷urà¿ÜÏÿ#uôÊ£?dåÑÓ?ÕQÜdz!/Ô#å‘Ё>’áP”ǁGË£O‡åq5¯ ˆÿÏñû_›ù¿Öö?ðÿµ˜ÿs/à.‹<•r§ë_‰ýü¯úÿs¾ÿbÿ±Œóeš&Y!'ÿ	­€sxÿÃeÖŸýAÿß
-@ÿ»ð’E7v ÚÏÿê÷¿9§°þÇ
-‚0ï%€{x‰ÿOÿßÖþ?°ÿ·€ÿ¯ÛhÁÿb&³E0×kþ’¢˜Ëžö*÷ÿäŒÀþO6ðù‡É2.”ÑÎÿƒ”ý?°ÿÚ´ün£Mÿ/gÍý'hÖþcbŸxëý	¡ÐþÛ@kùGñDÞÒVÕ ½þ§s¿
-˜Ê?~o¸û{ý/ªý?úߨð~†.€»0å:»Ë£Pgä8
-²"*¢d3}Ú÷ÿ}ÂÀÿÛ
-ßi˜ò¿¸K»Óÿ¤6ÿ£ÒÿmàkM#	î߮”ÿsy#ç
-Ëh¯ÿ£àÿa˜ï4Lù&3™éï¿® ;§öó¿úý72ðÿ°Cà2ŒçÿfA¶Z®€|·p?ÿy…ÿ‚y°ÿ£П`¸Ë0åÿ÷à.'ÓqçIEt۾߾ÿïyøo`¿Óè@ÿ/‚twûøOjó‚€þ·ƒµ~zÉ8"þ¬0å¼\\ÉL÷ ô2ÐÝeôÿ)Øÿì@˜tfüÇýûÿŸ˜Ê¿[ÿ¯jûÏ ÿg	Œ‚û—Ë0åßþ_ðý; ÿ/·aÊÿNý¿6ùÿ­à}PиSþ÷îÿë?¬ ô¿Û0åïþ_àÿiàÿå6Œçÿúöÿ‚õV þ_nÔÿ½ûÿ­ ü¿ÜFú¿ÿ/࿬e þ_n”ÿÝúUÇÿ‚Âþ¿v ã·aÆÖ¿ÿ— ÿ/0•·þ_^Ýþó¿V0 Cð s¦üï}ÿ/°ÿZØ݆)ÿ{ßÿÆV û¹
-Sþ÷îÿó¿VÀ€ùNÔÿ½ûÿ·Àü¯Û0žÿëÙÿˇï¿[>ô¡p¦üïÖÿ«¦ÿõøoÜ?Fú¿ÿ/Ðÿv°–Á‹ü¿¦ShDþ¤0å·þ_Õõß‚2øþ³hû?×]˜ñŸôïÿÅÀÿËLåß÷þ_Ðÿ³ØÿËm˜ò¿wÿ/à¿€ÿ—Û0å·þ_5ýO1ðß
-Nâ¼È–¡n»¡%p¦üïÝÿæ¬ ô¿Û0åïþ_àÿiàÿå6ŒçÿúÞÿÖXìÿå6Lùßûþ_À+ õï6:Ðÿýìÿü·‚µ`ÿ/7aÊÿÞ¿ÿóÿV@(ì ê2óŸ¶rùzÍðæþ_*žªü¿¬ …ü‹$MæÉõ]ëŠÐ^þÄ'>ÈßLä_Ì2LÆyt¥^Øõþ—Ò®ÿ¯åÏ}ÖYôÿ݆	ÿ|ÿÒ ü\Ëq4ÙYÆþþ?­ð_ìÿV ö·aÂÿ0Éörþ)ÚóŸÁ÷¿,¹
-cþ7îýõÿ¹€ý_­ “þ?¬ÿþÓ¢ƒñÿ^ ýúŸWøïaøþ‡€ÿÛx±þßïþgÀ!0ìÿh°ÿ›ÛhÁÿ$Ö®þeh†{­Æÿ„rèÿ[Ìÿ¹üW¢É\¶÷ÐßoÿÅÅ>)Û	J¸þþØû‡üÕ+d›/À5“ÿÓöŸz>øX¹ü'2›•±·ÿÏjóÿ¾ÿ`G£óôáÃ'tòËåñ):ûíèäá[†¡_àÌù¿Ìƒëf£½ü'¤ÊŸ€ÿ¯xC"ƒ£0çÿ\ýÃmkþž¢ýü§ô¿4½Ë0ç-Nî×ÿUþ3ü·Æù o€)´.œÿqÐÿŸíÿã›Á †9ÿÓä»Ì•ѾÿÏ|°ÿÙÅ ÷]†)ÿÛ|ÂÈþCÀþcæòïÒþS›ÿÚ+Øbÿ¥àÌùß¡ýçÙ÷¿îí?°þÛ
-ˆï	ົ0ç—öŸêüÿOK`° Ôi˜ó¿KûOuüǃõV@ˆ'8/pWaÎÿží?°ÿ‹Œ€úNÜÿ]Úêãã+ @.Ôÿm¶ƒ5²ÿP°ÿØ€¹ü{^ÿûYÁûx:sþwiÿñêöÿY/˜€@Ü…9ÿ{^ÿúß
-àûnÜÿ]Úêþ_0ÿcŒr« …9ÿ{¶ÿ€þ·‚ø8
-sþ÷¼þô¿¨W
-€Ã0å?îÛþƒÁþcæòïÐþCýzÿö·‚Ñùד÷§ÇhôùË1:ÿ|zŠôOP	®Àœÿ]Újö_ÃþV ½?·aÎÿ.í?UþsÊaÿG+ þ»
-sþwhÿ©ëXÿc	À·aÎÿží?°þ×
-FÐ 8
-sþwhÿ!5þû ÿí€Ó!z>Â. N¢ÿ§™üWû2Jûïï±ÿPLÖÔ×ߪK€è›îŸ·ÇùßæûŸ3™-‚ù¸˜eIQ´øX{ûã¾ÿe/‘˜,ã=Ÿ~-a0ÿÇ=˜ÿ·èþ»6ú?g_lûýÇòû¯ê´ÿ6ÐZþQ<‘·mVùÿPÕ]ù[€©üóè÷ÆŸ‚Þ¯ÿkûÐÿv@…÷3tÜ…)ÿÓÙ]…j4 ¿	?Nƒ¬ˆŠ(ÙLŸöýŸÀú;€í¿Ü†)ÿ‹»´;ý_ßÿ“øàÿc_ãhÉ	´ŽÂ”ÿsy#ç
-Ëø?öÞµ¹m$K×ÝŸõ+1_ì>¶™¸‘Ž©ŽqIr•¢$[Û—éÙ§NA	ÇÁ@Ùª_¿3AR&AQ 5íÉ÷‰î¢&.DâÍ•™kåB{ûï¨ úç Ë?͆ªÿ(½‰3ÿ» <9P¯ÿªÿßW= èŸo~7òüßM˜Åã‘úB5 ùÓ^ÀzýW×{Žø?ä
-€ÁPõÿ5¼ÏGédæy%a‘Ü%žµ@íûÿ¾ï@ÿ, û›Ùt`ÿoÃùÓç¨Ó¿Ø™ÿóì?ë:xqÈ?\"~T¨úŸ-n¯âL÷ ò¸¨Ñ¡ÿ/áÿãÁ˜4šþÛd"Æyˆÿâ€ZÿÝÆíäÿCÿ	G"üËd¨úï=þúgñ_fCÕ§ñ_ÄÐ?'a¢	0ªþ{ÿÂú`ÿ͆ªÿ¾ã¿$â?Y@ü—ِçÿúŽÿÂúÿe6Tý÷ÿý³€ø/³éÀþ÷ÿý³°®Ä™	UÿÝÆUÇÿž”XÿÅÆÿfCÓ¿Ówü—cãý,Pë¿Ûø/7þó¿,Ä`CÕïñ_ðÿ² ÿ¯ÙPõß{þ/ŒÿX@þ/³¡ê¿ïø/‰ù_(ßh¨úï=ÿâ¿YÀü¯ÙçÿúŽÿr ì— ƒ¡ê¿Ûø¯ûï;ÈÿÁ‚@ø§Ñt`ÿû‰ÿ‚ýga]ÅM&hD~P¨úï6þ«ºþÛ“Ò‡þ9Ðþˆ×\húýçÿÂû?Y Öïù¿Ðÿcù¿Ì†ªÿÞã¿ ÿe6Týwÿµkÿ蟅³Y^d‹H·Ýh	„ªÿÞóaþ‡Ø³¡ê¿÷ø/IJ€ø/³!Ïÿõÿ…õ, ÿ—ÙPõß{þ/蟘³éÀþ÷ÿý³°®äÿ2ªþ{ÿ#æÿY@M¦±þ½V!_[h…7ÿJÿªEÿÅA‹ú/Òy:M¯ï[?íë_ºý
 Gý÷¥þ‹›,Ç£<¹R7ìºþ¦´ëÿëúwƒ ùŸXè¤ÿ/Bþ£BÑÿCìß<Œ¾„×ñ(?yŽúþ¿¬èßóädþ³¡è?J³ZÍoÒ^ÿŽtáÿgú7²þ÷þIý×Cüôÿ±þû‡¥ƒñm P½ýw+ú÷mäãA¼ð ]ƒ9Øþׇÿôïyþ?ÿÍlZè?éPÂ9´ÂýVã!]ôÿYÀøßlZè_ý'Oãöq Záõþ_Û—v ÊvB
-7€ÿŸBý«VÄmÞ ×¬þ7Ûé£þy ×ÿ8Σfç¨íÿ;;óÿâÿyxs|yf½}û›uöîÓé¹uñ7gŸ,û›c£_`tý/òðºÙh VÿBTõäfÁñƒÀó1	`(týOÕgѾ5›´Ÿÿs¥ûÏ‚ðaéM†®ÿ"¹m8Xoÿ«úw<èŸÇ¨».œ‡™@¡ëv¦ÿ­ü?ÿsrŒ@
-]ÿóôkœ5:Gûþ¿Àÿǃ´Ñÿ7ªþÛ¼‚äÿñàÿá€^ÿ]úvæ=¼ÿ‡‡=þC ë¿CÿÏÖû¿Vþ¬ÿfAx@]ÿ]úªó?.â?™pºÁhèúïÐÿcðÿü71täp0D`*tý÷ëÿ‘ÈÿÂÂ1ܾFC×—þŸÝñ¿‹ñ?†Èd¨ú—}ûðþoèõßóúäÿbaÿGÂ(˜]ÿ]úü]ÿÆ,xràAëæB×Ïë`ÿYÀû?̆®ÿ.×ÿìÆaþ‡7ðêþ#	 ¡ÐõßóúØŽÿa4tý÷¼þöŸ££¡êßîÛÿãÂÿýþ;ôÿÈÝø?äçáøòóÙÉù©uüþéuùþüÜÒÂ$˜]ÿ]úvü¿@ü/èý™
-]ÿ]úªúw¥‹ü,@ÿfC×—ëvã¿\¼ÿ…èßlèúïyýÖÿ²pŒÀhèúïÐÿ#vôÀþóàÊ¡;ô9Dˆ‘´Óÿ$‹ÿÙ×ûŸ¶Þÿæ	øX Ô:Ç·álÜøAh_ÿŽcÔ?‡ÔÞÎõ;`G™ê<q]ÁO¿ÿ±ºþ÷ÿÁƒÔ·¦ßX:Óÿè6ü¶çõýÿjü·ؘÿgA¬ª M€™t¨ÿ½â©ŸÿÛ±ÿù?Äo4‡è?¹ž¥Y<š©Ò£iŽ÷£¾ÿ_õÿùn ûÏ´o6‡è17Yœß¤Ó½Ú×Ôë¿:ÿï!ÿ74 FsˆþK`ÞÅ£«$|Bû/%ôÏäo6ýçQXŽúoÃo#½¡öµúUÿ`ý7r(Ì ˜ËúïÂd^MãÑuzg³tŸ>jçÿܪþU÷ñ?,¬;sVùûæa[ó8›¤™Ú¨þvá8ýë8ÀÙ$ÕþÍíÿÓþ¿]ûï"ÿ#Âú°ÿæBÐ8™ÄQGjC#EÔûÿv×ÿIôÿY@دÙôŸÅzéosùSôo°ÿ,@ÿfsÀø=ê¯=Gýü_5þÏ
-ØÖã4fÒÉüŸÞ¼ˆgQ?ª:û/ܪþ×Eþ/Vóÿ–ú
 ôËÏ`蔟¾þS}z«ï¡[~J_”ŸBô§½òsàËò3Ãòs9¯€	Äqñÿµ™ÿkëÿÃú0ÿg6è?‹|ÇO†þ•Ôë¿ÿïxÿÿ¾˜å‹ù<ÍŠxüw´Æq€þ£EÖŸÿùy€ý7›ô?Î’»F€êõ_}ÿ·þcýa4O^®j€yÿÓ&þ·­ý÷ÿ›ÄÿšMý7qvNõš¿´(¦qŸùŸ\ÿüOýsHýGébV48!þÃ
-Ðþ³€–ßlÚôÿÂè¦y£¿A³ößö¥ßµuþG!ÿ…ÖõŸÌÆñ7Ùê1hoÿ¥c;¨¨õŸ'5ÌþÞÄþWçûσôüßÑ0ªþç7÷y©Ñ€ÒL<š‡Y‘Iú¸|Ú÷ÿõß<ˆßh¨ú/îçÝÙÿù_eÿáÿaáó,™$1¿M…ªÿi|Ož£½ýw‰ü,H(ßh¨úÒ›8Óï] žœ¨×5ÿ£/äcÁwÑ ˜yþï&Ì–kÀU?í¬×¿[ÍÿêøXÿÁ‚xà&CÕÿ×ð>¥“Q˜çi”„Er—ûÞß¾ÿïûôÏ ê7šìÿm8úuú;óž€ýça]/ù‡Ä,
-Uÿ³ÅíUœé€^úô9ý	ÿž€vM†¦»ÿø/Äÿ±@­ÿnã¿ªí¿ƒþŽDø—ÉPõßwüòÿð€ø/³¡ê¿Óø¯Çâ¿¡NÂ"D`.Tý÷ÿ…õ,Àþ›
-Uÿ½Ç!þ“Ä™
-yþ¯ïø/¬ÿ`ñ_fCÕïñ_Ð?ˆÿ2›ì?ñ_Ð?ë:@ü—™PõßmüWuüïI‰õ_,`üo64ý;ýǹˆÿâ€ZÿÝÆUßÿ∠ó¿,Ä`CÕïù¿àÿeþ_³¡ê¿÷ü_ÿ±€ü_fCÕïñ_˜ÿeÁò†ªÿÞã¿ÿÍæ͆<ÿ×wüW ýs`¿Ð UÿÝÆíØý èŸáCþ&Ӂýï'þöŸ…uÿ5™ ùA¡ê¿Ûø¯êúoO:úç@ûÿ!^s¡é_ôÿ%ÿŵþ{Ïÿ…þÈÿe6Tý÷žÿúgñ_fCÕ·ñ_»ö?€þY8›åE¶ˆtۍ–À@¨úï=þó?,Àþ›
-Uÿ½Ç!þ“Ä™
-yþ¯ïø/¬ÿ`ù¿Ì†ªÿÞóAÿ,Àü›Mö¿Ÿø/蟅u ÿ—™Põß÷ûáÿãAHd 5™fúOgz–zŽVúw¥ہÿ¬ÿ2›Æö¿]Ê¿-´Â›ÇÚZÿª½@ü'-ê¿Hçé4½¾oý ´«ÝÿÄûY Ôq“Åáx”'Wê†]×ß”öã7@þG:ÿ0†øQ¡èÿ!öwF_Âëx”ŒŸ<G}ÿ¿:ÿïyÈÿÆâ̆¢ÿ(Íj5¿I{ý;ÈÿÄò¿™
-Yÿ{ÿ¤þ¿ë!þ…NúÿÈÿðÃÒÁø¿6 °ÞþWý¾í ÿÎÌÿ›ÌÁö¿>ü—âÿ÷ÞÿÀüfÓBÿä  ­p¿ñø_ûÿ„t1ÿÏæÿ̦…þÕ’ñ4n ^ïÿµ}i¢l'¤põü?ü¿ýC¨uʸM8H³úßÊÿå£þy ×ÿ8Σfç¨íÿ;;óÿâyxs|yf½}û›uöîÓé¹uñ7gŸ,û›c£_`tý/òðºÙh Vÿj°_Ñ ÿƒÏ|ÛA ¡Ðõ?UÿEûÖünÒ~þÏ•.ì?‡¥7ºþ‹ä¶ád`½ýßÉÿçAÿ<8®ð½êÊÆL ‰Ðõ?;ÓÿNþ/Œÿ¹8F  ÑÐõ?O¿ÆY£s´ïÿ;‹ø?¤þ¿ÉPõßæ
-0$ÿÿôúïÒÿ³3ÿëI´ÿ,ìñÿÀ(]ÿúl×ÿý³¸ƒ`±
 ]ÿ]úªó?®Äø©†®ÿ.ý?»ýñ,8¾ôT Ià
-…®ÿžý?ÈÿÂÂ1ܾFC×—þo×ÿƒõ_, “¡ê_öíÿAþWèõßóúäÿbaÿGÂ(˜]ÿ]ú‚]ÿôÏ‚#|ÕÙ†ØM…®ÿž×ÿ@ÿ,àý?fC×—þŸÝþ?ü¿<wàøê¦£`&tý÷ìÿýgáñFC×ÏëàÿaAÝr4 CÕ¿Ý·ÿGÂÿýþ;ôÿȝù_ùßy8¾ü|vr~j¿ÿpj]¾??·ôŸ0	¦@×—þŸùŸÀFþÐû3ºþ»ôÿTõïJÄÿó ý›
-]ÿúví¿çâý/,@ÿfC×ÏþøY8F`4týwèÿ;ú`ÿypåÐúb°‘´Óÿ$‹ÿÙþ¥ÿ'jü?Ò–ž­¥¯ßÿäÙÊþËWÝÿÞ×›÷ÞÄÙm87YZ-^ÖÞÿç¸:þþ¿þ9¤þ£t1«yõk	aþÏõ1ÿϺÿfÓÆþ‡Ñ
-áímßÿX¾ÿUhÿÚÿþi]ÿÉlk³ú»­ý×õ/µ	õÏ µþó䝯¯‚®·ÿ^¥þá#þ›éù¿£`.TýÏoîó$R£ýNøÑ<ÌŠ¤HÒÇåÓ®ÿ¯õäÿâé¿Ì†ªÿâ~ޝýÕþŸ#Ìÿ³ðy–L’xŒVÀP¨úŸÆwñ´á9ÚÛÇ‘ˆÿgË?͆ªÿ(½‰3ÿ» <9P¯§¢_:ˆÿeÁGâ£!ÏÿÝ„Y<©/T?í¬×¿[Ñ¿çøXÿÍ‚ó"@`0Tý
-ïóQ:…yžFIX$wI±o-Pûþ¿ï;Ð?Èþf6ØÿÛpþô9êô/væÿ<ûÏú^òZ‘ªþg‹Û«8Ó=€<.jtAèÿKøÿxðf M†¦ÿ6ÙŸHñ_2@ü7Ôúï6þ«Úþ;èÿ1áH„™Uÿ½ÇAÿ, þËl¨úï4þë‘øï úgá$,B4æBÕßñ_xÿ°ÿfCÕïñ_ˆÿdñ_fCžÿë;þë?X@ü—ÙPõß{üôÏ"7̦ûßOüôϺÿe&TýwÿUÿ{Rbýÿ›
-MÿNñ_b™ÿïÿcZÿÝÆù»þ_Ìÿ²0CD€Uÿ½ÇÁÿËü¿fCÕïù¿0þcù¿Ì†ªÿÞóaþ—Ê7ªþ{ÿBü7˜ÿ5òü_ßñ_xÿ'öKÄ™UÿÝÆíØßAþ„ù›Lö¿Ÿø
 /ØÖupPü×d‚Fä…ªÿn㿪ë¿=)ñþO´ÿâ5šþEÿù¿ðþO¨õß{þ/ôÿX@þ/³¡ê¿÷ø/èŸÄ™
-UÿÝÆíÚÿ úgál–Ù"Òm7Z¡ê¿÷ü_˜ÿaößl¨úï=þñŸ, þËlÈó}ÇaýÈÿe6Tý÷žÿúgæßl:°ÿýÄAÿ,¬ë ù¿Ì„ªÿÞßÿˆù„„vM¦±þ“ñ4nõõ­ðÆñ_N ôoûúý¯ˆÿêŸvõ-²,ž£q–ÜÅYÓsÔ¶ÿBVêßñàÿå!ŒæÉH×-¬€‘Ðô*ùÏÒl”¥
-ÎQßÿ*úw}ù¿X˜†ãqœAü¦ÒLÿó,Εî‰çh5þ[öÿ<¼ÿ‘¬ÿ7›†úOó<¹š6޸ܦ^ÿ^Uÿƒþ?öKá¡0—ÆýÿvKþ¶h5ÿSÎÿªöùßYhQÿE:O§éõ}ë¡}ý‹@¿ÿõß?”ú/n²8t ™]×ß”:û¿ëÿuäÿç¡âÉ¥ýC"…À
-Eÿk?çaô%¼ŽGÉøÉsÔ÷ÿ«ñ_ž‡üß<`ý‡ÙPô¥Y­æ7i¯ù™€þ͆¬ÿƽRÿßõ°þ‹…NúÿÈÿ÷ÃÒÁø¿vX½ý¯Æú¶Dþ_ÄLÿ›ÌÁö¿~ù'%þ[ýúç þ³i¡ÿt¦S=Ρî·ÿé¢ÿÏÆÿfÓBÿäE Záõþ_Û—v ÊvB
-WÇÿÁÿÛ?„úW7¬ˆA³úßÊÿìˆÿ`^ÿã8š£¶ÿïìÌÿ{XÿÉÛãË3ëíÛ߬³wŸNÏ­‹¼9ûdÙßý# ë‘‡×ÍFµú¢ªÿÀFþGoè{8„ÜÍ„®ÿ©úï,Ú—ói“öó®taÿY>,½ÉÐõ_$·
-'ëíÿNþwúçÁñ„p962Á™]ÿ³°3ýï䯸Ÿ‹c²7ºþçé׆)€Ú÷ÿ þ?¤þ¿ÉPõßf90ÉÿcÃÿýþ»ôÿìÌÿzí?{ü?0
-†@ׇþŸ÷¿;Àúo\ÅÛ&C×—þŸêü‹øO&¨ßhèúïÒÿSÿ9žƒõ,8ªf<€©Ðõß³ÿù_X8Æ£¡ë¿KÿÏîøßÅøŸaÃd2Tý˾ý?þèõßóúäÿbaÿGÂ(˜]ÿ]úü]ÿÆ,é`ñÁÐõßóúØðþW³¡ë¿gÿÖÿ²0ô‡¾ƒ5€ÆB×ÏþØŽáú5ºþ{^ÿÿê–£0ªþížý?~ ÿôúïÐÿ#ƒÝþò¿³p|ùùìäüÔ:~ÿáÔº|~né?aL®ÿ.ý?;þßÀFþÐû3ºþ»ôÿTõïJÌÿò ý›
-]ÿúví?Öÿ0ý›
-]ÿ=û°þ—…c4 FCׇþ±£ÿ öŸWÝ¡È!^i$íô?Éâ¶?Géÿ	‚ÿ´¥gkéë÷?yjH`ÉWÝÿÞ×›÷ÞÄÙm87YZ-^ÖÞÿç¸ïÿbáúÒŬæÕ¯%„ù?×Çü?èþ›MûF7„·?¶}ÿcùþWa{hÿ9h]ÿÉlk³ú›ÿ#õϵþó䝯¯‚®·ÿ;ù?ì?ÒóGÀ\¨úŸßÜçI¤Fúð£y˜I‘¤Ë§}ÿ?XÿÁÒ™
-UÿÅý¼;û¿»þSøˆÿaáó,™$ñ­€¡Põ?ïâiÃs´·ÿŽj  °üÓl¨úÒ›8Óñ¿ËÀ“Óõú¯úÿ}é`ý'>^ûj4äù¿›0‹Ç#õ…j ò§½€õú¯®ÿöñ,ˆü1ªþ¿†÷ù(ŒÂ<O£$,’»¤Ø·¨}ÿß÷èŸd3›ìÿm8úuú;óž€ýça]/ù^!øÃBÕÿlq{gºÇE.ý	ÿž€vM†¦ÿ6ÙŸˆñ_.â¿8 Ö·ñ_;ùÿÐÿc‘ÿ2ªþ{ÿ‚þY@ü—ÙPõßiü×#ñßôÏÂIX„hÌ…ªÿÞã¿°þƒØ³¡ê¿ïø/‰øOÿe6äù¿žã¿<¬ÿ`ñ_fCÕßñ_úgñ_fӁýï%þöŸ‡u þËL¨úï6þ«:þ÷¤Äú/0þ7šþþã¿ðþ?¨õßmü—¿ÿ…ù_bˆ0ƒ¡ê¿÷ø/øY€ÿ×l¨úï;ÿW€ñÈÿe6Tý÷ÿ…ù_(ßh¨úï=ÿâ¿YÀü¯ÙçÿúÎÿ%¡ì— ƒ¡ê¿Ûø¯ûï;ÈÿÁ‚ð!“éÀþ÷“ÿ
 öŸ…uÿ5™ ùA¡ê¿Ûø¯êúoOJúç@ûÿ!^s¡é_ôÿ…÷²@­ÿÞó¡ÿÇò™
-Uÿ½ÇAÿ, þËl¨úï6þk×þÐ?g³¼È‘n»ÑUÿ½Çaþ‡Ø³¡ê¿÷ü_ˆÿdñ_fCžÿë;þë?X@þ/³¡ê¿÷÷?Bÿ,Àü›Mö¿Ÿø/蟅u ÿ—™Põßûû1ÿÏ‚È j2õï¶
-ùÚB+¼yü—PúW-‚ø/ZÔ‘ÎÓiz}ßúAh_ÿ"Ðí?ê¿(õ_Üdq8åÉ•ºa×õ7¥]ÿ_׿ÈÿÄB'ý/â
-Eÿ±ó0ú^Ç£düä9êûÿ²¢Ïÿ‘(×l(úÒ¬Vó›´×¿#øÿY°¡£!ë¿qïŸÔÿw=Äÿ±ÐIÿë¿X:ÿ× ÕÛ·¢ßFþ7ìˆ 0™ƒí}øAÿž'àÿcùß̦…þÓ™õ'œC+Üo5þÒEÿŸÌÿ™Mý«ÿ$ãiÜ>@+¼ÞÿkûÒDÙNHáðÿ³@¨uʸÍàšÕÿfû/}Ô?ôúÇyÔìµýggþßCü?oŽ/Ϭ·o³ÎÞ}:=·.þñæì“esà0ºþyxÝl4P«!ªúò?³ØÁÀµx
-Œ¡Ðõ?UÿEûÖümÒ~þÏ•ì?‡¥7ºþ‹ä¶ád`½ý¯êßñ WÏÂF ¡ëv¦ÿ­ü?ÿsrŒž¿ÑÐõ?O¿ÆY£s´ïÿ;ü<Hý“¡ê¿Í Hþþèõߥÿggþ×ÃûxØãÿQ0ºþ;ôÿØÁ®ÿë?Y®8Hc,týwéÿ©Îÿ¸ˆÿdÂAê6£¡ë¿KÿÏnü—‹ü/,gàúƒÁqàfB׿þ‰þ?ǾÑÐõߥÿÇÛõÿÀþ³ l8€L†ªÙ·ÿïÿf^ÿý®ÿÁû¿xØãÿ‘0
-f@×—þþŸÿ&†RÚ˜6ºþû]ÿãÂþ³€÷˜
-]ÿ]úvã¿0ÿÃë{C/>3¡ë¿gÿì?Çèü
-]ÿ=¯ÿýgAÝr4 CÕ¿Ý·ÿǁÿ‡zýwèÿ‘;ñÿò¿óp|ùùìäüÔ:~ÿáÔº|~né?aL®ÿ.ý?;þß@ ÿèý™
-]ÿ]úªúw¥‹ü,@ÿfCׇþŸ]ûï¹xÿпÙÐõß³ÿëY8F`4týwèÿ;ú`ÿypåÐú"ý«‘´Óÿ$‹ÿÙ×ûŸ¶Þÿæ	øX Ô:Ç·álÜøAh_ÿŽ£6¡þ8¤þóðv®ß;ÊT‡à‰sè
-~úýÕõ¾ø¤¾ý0ýÆÒ™þG·á·=ç¨ïÿWã¿ýÀÆü?bUh̤CýïOýüߎýlÌÿ±  ~£9DÿÉõ,ÍâÑL•MÓp¼ïõýÿªÿÏwØ }³9Dÿ‹ù¨¸Éâü&îÕ¾¦^ÿÕù/ÿ³0@`4‡è¿ô æá]<ºJÂ'´A°ÿRBÿ,@þfCÐ…å¨ÿ6ü6ÒjÏQ«Qõÿ¸Öó ‡2À€¹ ÿð.L¦áÕ4]§wq6K÷é£vþÏ­ê?âXXwæ¬ò÷ÍÃ(¶æq6I3µQýíÂÿpú×q€³Iª'ü›Ûÿ§ý»ößEþG„7ôaÿÍ… ÿp2‰£"Ô†FЍ÷ÿí®ÿèÿ³àBùFCÐ륿ÍåOÑ¿Àþ³ ý›Íãÿõ¨¿öõóÕø?7ðaÿYXÿÑ˜I'ózó"žEIü¨Bêì¿p«ú\ù¿XXÍÿ[êÓ/?ƒ¡S~úúOõé­¾w†nù)}Q~
-9Пb8ôÊρ/ËÏ@ËÏå¼&ÿÅ9Äÿ×fþ¯µÿñ¿,`þÏlÐù<ŽŸý+©×5þß
-ðþþ}1ËóyšñøïhŒã ýG‹¬?ÿòÿò ûo6èœ%w2 Õë¿úþoוXÿÃBÍ“—«šE#`‡Äÿ´‰ÿmkÿ=äÿfñ¿fÓBÿÅMœÝ†S½æ/-ŠiÜgþ'WÇÿ#ÿSÿRÿQº˜
-ÎAˆÿp´ÿ, å7›6ý¿0ºiÞèoЬý·}iÂwmÿQäÿc¡uý'³qüM¶zÚÛé(“€úg€ZÿyòWÃìïMìuþǰÿ<HÏÿ] s¡ê~sŸ'‘
-(ÍÄ£y˜I‘¤Ë§}ÿ?Xÿ̓€ø†ªÿâ~ޝýß™ÿUöþ>Ï’I#üÛT¨úŸÆwñ´á9ÚÛÇ‘ÈÿÀ‚„ò†ªÿ(½‰3ýþ×å àÉé€zýWó?úÒAþ7|, 5òüßM˜-×€« ÚX¯·šÿÕñ±þƒû “¡êÿkxŸÒÉ(Ìó4JÂ"¹KŠ}ï‚oßÿ÷}úga õMöÿ6œ?}Ž:ý‹ù?OÀþ󰮃‡üCÀ‹ð£BÕÿlq{gº —>}Bÿ_Âÿǃ'0h24ýÛýÇ!þjýwÿUmÿôÿ˜p$¿L†ªÿÞã¿ 0r3ªþ;ÿz,þúgá$,B4æBÕïñ_XÿÁì¿ÙPõß{üâ?Y@ü—ِçÿúŽÿÂúÿe6Tý÷ÿý³€ø/³éÀþ÷ÿý³°®Ä™	UÿÝÆUÇÿž”XÿÅÆÿfCÓ¿Óü—ƒø/¨õßmüWõý/Ž0ÿËÂ@f0Tý÷ÿåÀÿËFnfCÕïù¿0þcù¿Ì†ªÿÞã¿0ÿË‚å
-Uÿ½Ç!þ›Ìÿš
-yþ¯ïø/úçÀ~ 0ªþ»ÿÚ±ÿ¾ƒü,ò7™ì?ñ_°ÿ,¬ëà ø¯ÉÈ
-UÿÝÆU×{ÒÐ?ÚÿñšMÿ¢ÿø/ø/¨õß{þ/ôÿX@þ/³¡ê¿÷ü_Ð?ˆÿ2ªþ»ÿÚµÿôÏÂÙ,/²E¤Ûn´BÕïñ_˜ÿaößl¨úï=þñŸ, þËlÈó}ÇaýÈÿe6Tý÷žÿúgê7›ì?ñ_Ð?ë:@þ/3¡ê¿÷÷?bþŸ!‘Ôdšé?WʏòÛb4O¿*Ùçá]2»n*­p¿iÿß	”þ]ùÿy°¡~£ilÿÛ½òu­ðúøOÛ—v ôÀß–º¿€øOZÔ‘ÎÓiz}ßúAhVÿëþŸú^Š@x¨(õ_Üdq¨ºÉÕ´Q/ Ýø_׿øXÿÉÆÿfCÑÿCìï<Œ¾„×ñ(?yŽúñ¿¬èßóÄÿ° åš
-EÿQšÕj~“öúwðþ?&0þ7²þ÷þIý×Cþg:éÿ#ÿÃKãÿÚ ÀzûïVôïÛxÿˆÿ3›ƒí}ø/Aÿžg#ÿ+Èÿh6-ô¯þ“Œ§q{? VxcÿŸÞ.…«ßÿÿOÿê_ݰ"nó¸fõ¿ÙþK?@þèõ?Žó¨Ù9jí¿³3ÿçáý<¼9¾<³Þ¾ýÍ:{÷éôܺøÇ›³O–ýÍÁ¼ Ðõ¿ÈÃëf)@jõ/DUÿø_ÏØŽ@°¡Ðõ?UÿEûÖümÒ~üïJöŸáÃÒ›]ÿErÛ0X½ý¯êßñ d0t|Wi M„®ÿYØ™þ·òÿ`üÏÉ1^ i4tý—+£}ÿß	\Äÿ° môÿM†ªÿ6o€ øôúøú‡^ÿ]úvæ=‰öŸ…=þC ë¿CÿÏÖû¿Vþ¬ÿdA
-o 5ºþ»ôÿTç\‰ñ˜ö5ºþ»ôÿTÇŽç þ›QÎn*tý÷ìÿAþŽ‘ ÂhèúïÒÿ³;þw0þgAÛ´ æBÕ¿ì{ý
-ÿôúïyýòÿ°°Çÿ#aÌ€®ÿ~ý?ó¿,ø®‡µ?C×Ïë`ÿYÀû?̆®ÿžý?XÿË‚3Ё‹Þ¾©Ðõß³ÿöŸ…cÄ
-]ÿý®ÿÿ‡uËÑ Uÿm^Fñÿø>ü?Ðë¿CÿvûÈÿÌÂñå糓óSëøý‡Sëòýù¹¥ÿ„I0ºþ»ôÿìøùX@ïÏlèúïÒÿSÕ¿+1ÿËôo6týwèÿÙµÿXÿÃôo6tý÷ìÿAüÇh Œ†®ÿý?bGÿì?®ºC?C퀉´Óÿ$‹ÿÙ×ûŸ6õ/<þõŸÎÆñm87~Ú׿#õÏÁ!õŸ‡·sýÈQ¦:OœCW°ÿdÿßßyÿ+â?xúöÃôKgú݆ßöœ£¾ÿ_ÍÿéûæÿY«*@`&ê¯xêçÿvì`cþñÍ!úO®gúMð3Uz4MÃñ¾sÔ÷ÿ«þ?ßõaÿY€öÍæý/æ£â&‹ó›tºWûšzýWçÿ=äÿfb€ÀhÑéÌûxt•„Ohƒ`ÿ¥€þY€ü͆ ÿ<
-ËQÿmøm¤7Ôž£Vÿ;ùÜ ë¿yC`À\Ðx&Óðj®Ó»8›¥ûôQ;ÿçVõñ?,¬;sVùûæa[ó8›¤™Ú¨þvá8ýë8ÀÙ$ÕþÍí»üOnà"ÿ?Âú°ÿæBÐ8™ÄQGjC#Eô/ôÏ‚m	KZx	¼©ôŸÅzéosùSôoðÿ³ ý›Íãÿõ¨¿öõóÕø?7ð1ÿÇÂzüÀL:™ÿÓ›ñ,JâGRgÿ…[Õà:ÈÿÅÂjþßRŸ~ùòÓתOoõ½3tËOé‹òSȁþáW~|Y~rX~.ç0ø/Î!þ¿6ó­ýèÿ³€ù?³9@ÿy\äó8~2ô¯¤^ÿÕø7Àû_xø÷Å,_ÌçiVÄã¿£0Žô-²þüÈÿËì¿Ù ÿq–Ü5Ê T¯ÿêû]W`ýa4O^®j€yÿÓ&þ·uüò³€ø_³i¡ÿâ&Îné^ó—Å4î3ÿ“«ãÿ‘ÿ©©ÿ(]ÌŠç¨mÿwó¿»>ÚÐò›M›þ_Ý4oô7hÖþÛ¾´±Êÿ(lí?­ë?™ão²ÕcÐÞþKx¨¨õŸ'5ÌþÞÄþWçûσôüßÑ0ªþç7÷y©Ñ€ÒL<š‡Y‘Iú¸|Ú÷ÿõß<ˆßh¨ú/îçÝÙÿÍù_'(í ÿ/ŸgÉ$‰þm*TýOã»xÚðíí¿ãä`ABùFCÕ”ÞÄ™~ÿër ðät@½þ«ù})‘ÿßE`2äù¿›0[®W
-@þ´°^ÿn5ÿ«ãcýö4 &CÕÿ×ð>¥“Q˜çi”„Er—ûÞß¾ÿïûôÏ ê7šìÿm8úuú;ñŸž€ýça]/ù‡€áG…ªÿÙâö*Ît@/}ú„þ¿„ÿO`Ðdhú·û‹ÿ*ýÒ±â¿8 Ö·ñ_îŽÿïÿâÁ‘ÿ2ªþ{‹ÿ*õ	ý³€‘›ÙPõßiü×fü÷:þúgá$,B4æBÕoñ_Ký;ùÿY€ý7ªþ{‹ÿ*õï« úç ñ_fCžÿë+þ«Ô¿çøXÿÁâ¿Ì†ªÿÞâ¿–ößGþÿe6Øÿnã¿–ö_Àþó°®Ä™	UÿÝÆUÇÿž”XÿÉÆÿfCÓ¿Óþ/ñ_Pë¿Ûø¯êû_á£ýga †ˆ 3ªþ{Ïÿÿ¹™
-Uÿ½åÿZÛäÿ`ù¿Ì†ªÿÞó!þ“Ê7
 ªþûÎÿ…ü<`þ×lÈó}çÿBü7öË 
-€ÁPõßmü׎ý÷äÿ`Aø¿Ét`ÿûÉÿûϺŠÿšLЈü PõßmüWõý_ž”ˆÿdAûÿ!^s¡é_ôŸÿïfZÿ½çÿ‚ÿ—äÿ2ªþ{Ïÿý³€ø/³¡ê¿Ûø¯]û@ÿ,œÍò"[DºíFK` Tý÷žÿþ`ÿ͆ªÿÞóaþ—Ä™
-yþ¯ïü_XÿÉò™
-Uÿ½çÿ‚þY€úͦûßOþ/蟅u ÿ—™PõßÛû×ù¿0ÿÏ‚È j2ÍôŸ+åG·Ñhž~UªÏûdvÝX
-Zá~»ùïÿâÁ†ú¦±ýZ…|n¡Þ<ÿŸTú·mñŸ,´¨ÿ"§Óôú¾õƒÐ¾þE ‘ÿ‘Jý7YŽGyr5mÔ
-h5þ/ëßӏì?ŒÿCü¨Pôÿû;£/áu<JÆOž£~ü/«ú÷mÄÿ°€™;³¡è?J³ZÍoÒ^ÿŽt‘ÿ•ä3²þ÷þ)ý×Eþ:éÿ#ÿÃKãÿÚ ÀzûïVôïÛˆÿáÁyüo&s°ý¯ÿ%èßóÿ™ä4›úOgz©áZáýÿKÿôÐÿgófÓBÿê?Éx·Ð
-¯÷ÿÚ¾´Q¶Rx¶€ÿ—Bý«VÄmÞ Ù¬þ7Û ÿôúÇyÔìµýggþßÃú_Þ_žYoßþf½ûtzn]üãÍÙ'Ëþæ .Ðèú_äáu³Ñ@­þ…¨ê?ˆÿgÁþаÐPèúŸªÿ΢}k~7i?ÿçJöŸáÃÒ›]ÿErÛp2°ÞþWõïxÐ?Ž3ô\Ç÷¼Á퀁Ðõ?;ÓÿÖûŸ0þçä€FC×¹¸Ñ9Ú÷ÿ þ?¤þ¿ÉPõßæ
-0$ÿ
-ÿôúïÒÿ³3ÿë9hÿYØãÿQ0ºþ;ôÿØþNÿOBÿ,]‰™ƒ¡ë¿KÿOuþÇEü'Þþi4týwéÿÙíÿ»ˆÿ`ÁÁPø¶‡VÀLèúïÙÿƒü/,cˆÑÐõߥÿÇÛõÿ ÿ†Èd¨ú—}û°þ‹zý÷¼þù¿XØãÿ‘0
-f@×—þŸ`×ÿý³àت­õ!vS¡ë¿çõ?Ð?xÿÙÐõߥÿg·ÿÿ/Â\é:è
-]ÿ=û`ÿY8Fü‡ÑÐõßóúøXP·
-€ÁPõo÷ëÿñƒ þèõß¡ÿGîÌÿzÈÿÎÃñå糓óSëøý‡Sëòýù¹¥ÿ„I0ºþ»ôÿìÌÿùX@ïÏlèúïÒÿSÕ¿+ÿÏôo6týwèÿÙµÿž‹÷¿° ý›
-]ÿ=ûàÿeá
-€ÑÐõß¡ÿGìè?€ýçÁ•CwèrˆÀFÒNÿ“,þg_ïÚzÿ›'àÿaPÿél߆³qã¡}ý;Ží¢þ98¤þóðv®ß;ÊT‡à‰sè
-~úýÕü_¾ø¤¾ý0ýÆÒ™þG·á·=ç¨ïÿWóÿøùĪ
-ИI‡úß+žúù¿ûÌÿ±  ~£9DÿÉõ,ÍâÑL•MÓp¼ïõýÿªÿÏwØ }³9Dÿ‹ù¨¸Éâü&îÕ¾¦^ÿÕù/ÿ³0@`4‡è¿ô æá]<ºJÂ'´A°ÿҁþY€ü͆ ÿ<
-ËQÿmøm¤7Ôž£Vÿ¢êÿq¬ÿæAõ»¶Ð
-˜ÊúïÂd^MãÑuzg³tŸ>jçÿܪþá!þ‡…ugÎ*ß<Œbkg“4SÕ¿Ñ.ü‡ 8›¤z¿¹ýÚÿ·kÿ=äÿgAxCöß\ú'“8*âñHmh¤ˆzÿßîú?äå!€ò† ÿ,ÖK›ËŸ¢aÃþ³ ý›Íãÿõ¨¿öõóÕø?7`ÿYXÿÑ˜I'ózó"žEIü¨Bêì¿p«ú\ù¿XXÍÿ[êÓ/?ƒ¡S~úúOõé­¾w†nù)}Q~
-9Пb8ôÊρ/ËÏ@ËÏå¼&ÿÅ9Äÿ×fþ¯µÿñ¿,`þÏlÐù<ŽŸý+©×5þß
-ðþþ}1ËóyšñøïhŒã ýG‹¬?ÿòÿò ûo6èœ%w2 Õë¿úþoוXÿÃBÍ“—«šE#`‡Äÿ´‰ÿmÿƒüß, þ×lZ迸‰³Ûpª×ü¥E1ûÌÿäêøäêŸCê?J³¢Á9ñn€öŸ´üfÓ¦ÿF7Íý
-šµÿ¶/í@ø®­ó?ªÖ í?­ë?™ão²ÕcÐÞþKÇöQÿPë?Oþj˜ý½‰ý¯Îÿ8öŸéù¿£`.TýÏoîó$R£¥™x4³")’ôqù´ïÿë¿y¿ÑPõ_ÜÏ»³ÿ;ó¿ÊþÃÿÃÂçY2Ib„›
-UÿÓø.ž6<G{ûï8ùXP¾ÑPõ¥7q¦ßÿº <9P¯ÿjþG_ºÈÿÆ‚ï¢0òüßM˜-×€« ÚX¯·šÿÕ	°þƒçV€›Uÿ_Ãû|”NFaž§QÉ]Rì{|ûþ¿ï»Ð?¨ßh:°ÿ·áüésÔé_ìÌÿyöŸ‡u¼8ä´"?*TýÏ·Wq¦{ zèÓç ôÿ%ü<x3€&CÓ¿ÝüÞÿ˵þ»ÿª¶ÿúL8á_&CÕïñ_Ð?ˆÿ2ªþ;ÿڍÿ–6ôÏÂIX„hÌ…ªÿÞã¿°þƒØ³¡ê¿ïø/ñŸ, þËlÈó=ÇùXÿÁâ¿Ì†ªÿ¾ã¿èŸDn˜Mö¿—ø/ØÖu€ø/3¡ê¿Ûø¯êøß“Ö±€ñ¿ÙÐôïôÿ þ‹jýwÿU}ÿ‹#Ìÿ²0CD€Uÿ½ÇÁÿËü¿fCÕÏù¿¤ñÈÿe6Tý÷ÿ…ù_(ßh¨úï=ÿâ¿YÀü¯ÙçÿúÎÿ%¡ì—ˆÿ2ªþ»ÿÚ±ÿ¾‹ü,ò7™ì?ù¿`ÿYX×ÁAñ_“	‘ªþ»ÿª®ÿö¤ãAÿhÿ?Äk.4ý‹þã¿<Äq@­ÿÞó¡ÿÇò™
-Uÿ½ÇAÿ, þËl¨úï6þkÇþKúgál–Ù"Òm7Z¡ê¿÷ø/Ìÿ° ûo6Tý÷žÿñŸ, þËlÈó}ÇaýÈÿe6Tý÷þþG蟘³éÀþ÷ÿý³°®äÿ2ªþ{ÿ#æÿYÚ5™zýÏÒqÜ*Ük­ðVñ_"p´þÿÕ?
-ë?éi^â9ڏÿlëÿy°ÑúMCýëÿ´{éï­Ûi;ò?²ÐªþÕ0À'œ£¬ÿ ¨©©ºýÊ¨Š·¥úÃû_–|ÕùÏÝõߪþ%á¤ú¨ÚÖ?¥M&Õ¿‹úç mý×:{¡ýü "þ‹äÿ0›VúŸ-nC%—¶
-@þ…SÍÿ-…@þ_t•Žn’Â
-7þQù÷m’ç–½ü÷$Íâäz¦þLfEœMãð..wpmU|šê5@úéX -nâl¹sÿú´µÿá¤þŸDÿƒVõß&³IÚö5í¿;ëD àÿgáè]ÙR[ñí§´§¯­a;iÛÖ—_6
-¼Íâxõ½eù¶=þvÏy<~(à:¸ÞDEr÷ý –²ñC³ÀÙ,Ü*"¥çÈÁF“$+î¿ ,ãoøG–ñU}Ù,´ù+Þ&Óø2¼ŽóUG±­k¸ç󍡮Һ›Gx3Kg›G°Ôl^ƒþòSx5Ý*±y„wo?Ž>ÏÔc§Ê¼~ì"I³(Þþ[~æ§Ûù£Gø8
-¯¶öw‡2ج¬âh&·×à8íêþøy–-‹¬ŸÏÙ:Âo‹ëåm<7öî·Í#ß~\dó‡oÿ»µ`"mí¿ œƒdÿmØÚÖ¿K8©þÔ?­êœ¨›¥LSËsÔÏÿUýÿÒvÿŬ®Ù´mÿ)š$´ÿBGûÏ@Ûú¯
-ö„Úùߝø5Ø€ÿ‡…u ÿ«™´Õ@8©ÿï£ýç aýÏÓ<O®¦´àöýaûÈÿÏúÿfÓPÿ7a®×zÒÎÑ^ÿ¶ï£ÿÇôo6-ô?K³Ûp:ºoÓl_ª‡G!Ìÿžýs ý›MEÿÓ|%¯fûe at A+Ü߯ÇWcC¡ºü¶ëyÂÿK}é ÿ+¶ýÚ¶_Ù–ºûökk`ü׎kÛÖ³,¾³„ýüHËî÷ƒír§Àp»€³S Ü.àî¸Ú.à툶ø;ÆÛ‚ñvÁNÉvaµ€¨Ü¨p§€Ø.0®Þj'¬•WÕ²R ªp*ÆÕîv1¨ð*†Õ~¥Àί**¿"®ÞUTîƒWT«*÷ALª*÷Á©ü̉ºHÕ.‰‡ÒÝ* Já6Ž ½jQ)ào;GªªGØ®,áìaûF	w§@\-P=…¬•Nµ€³]À©\¤·s
-Ûu!JñG°«D¥€¨•²ZÀ©pªÜírX-àU
-„Õ~¥ÀUµ@P)°ýØ‹²‰lg] t‚ÕvQÙ>Xm—•íÃÕö ²=*·_éã»›Ûãr{Ti¸B×^mw+Û«í^e{Xnï\¿»Ú^½~oµ½zýþj{õú—Ǐ·¯Sºîêa®nàdYàA³¡ˆWÛÕ‰6´J{µÝÑ'ò¾Ÿh½Ý«”Wæ¬l¥£Ÿd¡†-¯áÉÕvõÁ÷íÚ¬Ê˲¼	õ÷ÚtÚB]ðÕfòDÂW-€-×ÄþÛÿJÿo|ç×t+¶x²ÿ'¤¯·m÷ÿßÃü/çÉlñͺS¿-Ig–|¥šÑàe);vN§a‘Ìþc߄ӸV<Wۢ衬2JSêÁ„ІñC<¶~‹åö—®|þÜú7a}¼¸´>Ý,¬ñÜRMIðÚªþ¤uyòIï:8:NooÃÙØÒéE^[Yªþ—?Ÿ¿ùåôü矬(åé4þ¹(î?Ú/„›êšnl´~?ýðîôÜÊóyšê¢ù"}dYg³"žZ¿Æ³…:rù‡ÚøæâÄz³(nâY‘DêµéXý;\dëÏßÂÅ4?úåìýÇ—ó,½KÆêëwÝXÞ\X·á\¾,¤R¥]Áz¹¹iGº7½Èu¤íó};.Kmí–ÇRBWÏÝ]<Þ»k¼sNa7ÛUT/ׇÊ6Õ]îC©Í¯tÍÔžó¡ÜÆ®ÿÊ©?çºÔÖŽãI“s®Ëmî8~ƒs®Jmíè.ïí›ãË3ëÝ~Ü»«[½·j“ø¾ë8,ÂýûŠ}W?µö´»?u`ÛÍN»*ø}_wõYw‡Ãu¹ï»^5Üuíì:7Ü5‹¨²k<–v]öû®býÕæ®Ó0/FóÉÌúÙ²¿•Oƒÿ·Q˜E7›W}øÖå›OV<ÓÔøµnˆ,û…•NǪ\ î¦~˜ÊÏÖ,þZn«êó(™%ÅjrU§Ôœ'³ë£
-µ–«æåóð:¶äÅÑæ¶eÕC[p¿}‰³™jÇIG…µ:®U®=È­ÅÜ*RëaŸÿ°ô3ðRWÞòÇ«â£p<Î^/ÏÆßÿ:R
-âÉÙÇßÕ–`<//Â	&ñÄwý£“‹3eP\k®oé¬xu¤Á×Ö‡'—úw½µcuToIª¤uöî“jÈŸ¯Jý×Ge!œ·ÁÛS!ËR¾.%V¥¬O¿}8ÿ?[«#V«ÊÚtÖGy«>Ê£œ¨Íú(oõQÜýG¹øøöÓê(öÉú('ëkñË£øÇ¾·qÅ;Gq?Šº–ú(¥ºõµ¨.öò›7—gÇåñ½å7³Ÿ:þž«¼8~ûkywu
 |çø©;&?Êo—§Ëß꬏2 åãùÙò(r}›p”œ¬îû÷;öô3ðøµ¬jïämy!~9]>J«ã”ß[—Ëu2úVÛÏuïÄWÒáÃCpñæCY}öª’ŽÛݘw©õîóÅÝ{™$׋,Ô¯\²&éb6>z~Ѫ­rÙ¬êCÙ^®ÿñ ¼_T7I5VJÅËå¶
-v³¬wïONG'o>½±þØ,:ÜjKbÕ¬ý©ö¸Ò§
-çÛåWvfsáÇqðgÙòäÖàèY`Åa6½·–-jù{óçÖÏ?ÿ}yDuñGÜj½ôYÿÍÞùº<‰þZÝ_ݬ—ælÙÒé£î-®&Ö_o™ôÁêhšOª1»|~öîtóh»ÅõÑäòk¹y²AàÅvTíÓé}²Ê{üËǏߏöXq}4G½Ñ‚ê?–mèŸß¨US»>ÚãÅõÑÜÕ¥oö)—Oay´òÆ­ÜÆ/}¤¸>š·¾[]¾áÆ}S\þúéÍ/ç[÷m·¸>š¿þz«‡#Tóðp´²ŸR¶GÛ-~T*§^\\¾,í™ÎÚ–]™ÉXŒÕq×ÿ:Z~ËïÉËïÆ¥ÿSµ'ÖË¿oGÈïE—&«¢J¾«eîÿo:‹­Ë·ï¬,œé•ê§ªæbÕ*}ûþPþ}õ—þ9Ë2Žü^Fl”YÖ€–két]•[ÇY•¹HïÊ_ÿ—¾=˜-ÊK™¤™Ò_tS^ãQ©ÄrU¾6ê¸ZË¥–W}T^ÉëG/X?•ïÅÆ÷å`ëû²§ÿý{Ý}ßþ^÷Ê7¾Wº?z¿¾ŸªSR„Óùr‘¥ô†ž·º[åoT›„êk•_¿°ÎÏÞ¾·®Â"ºyýý–®Š©±†ç>RЫ6ýòâå§ä6ά³÷Ö¥>ê‹sÕ tùí¹Îm°4κëœß&q¼¼í«2å×ÏÂhžŒ’ñê׈?­i8O¢åŸB=€«áó½»8ۻȻxÛ»¸
-v	¶wñì2ÜÞE4Øåj{§Á.ãí]¼»L¶w	ìboí¢ÿ'yÍ>r{Ùdw{·É>þö>~“}Ûûˆ&û„Ûû8Mö‰¶÷ñšìoïìÙgôN*ut“\ßXåËõ”P¡k÷ϧw”$e'‡²“KÙÉ£ìäSv
-(;
-(;
-);…”®(;E”Æ”bÊN“§w:{¿áCý¬,ÖÚbE«ÞßužŒ®Â<þÃVû-÷Pÿ|m­¤j
-^<LîªΦÍ[á…õëÇ3Ë~)GÏ:¬œuX9«t¿ŸVlœv¸ÿ´Ãï§•îK7XŸ÷ݧÑÇÇ£÷ÿùÁzvµP…-õßQ’ýSýëzš^…Óòi'Sýÿçõ;7wnÜì‡}?üoÛZäªÓ|uo¥êгd¿úþ¥|êËá#_~Œ‹BûÊ{˜¥‹ò"ý>Ý<™†Åæ°<ëŠö…®-,}S_—÷i9evô9/§;ÐÏ.Þœ|z^vuy{Щs¸¨^eùÎ_õíkëÍtš~Õû
-ß:¾ü¬zKë&-æÓÅuù÷‘.…å^ŸéáCºÈ"5Ì+û›åص°ÜÁªÛøì:œ¿¶ÖÓ‡¯ýÕ?ž]ž~P‡[žou8ßv¤ª„ûB,XsÕÓgzdwôîÃHÿ¨{rÞk–•o›IƪS(üòï²?«6Xâè—E2-Ô¨[wýtŽÂ\ýJ«L7‘fã8{aݦWÉ4)î­ku«ËI°töJ
-ÕtWÓzèkºÒµ.Óiݯz‘eòè÷å4Zt ·âl–I8MþÒçW¿íßÔÉÎN¬›0¿YÎÉ©~L‘%úZ\{è[ÏÊ‹W¿W¾°øƒåz~tú­ˆgÚ7q|¡†s÷ª{ÿZÏXØGŸ>[êÙI®T]«¯Ãë0™åjDp1útvqúáè$.âH#‡ŽóÊu\ëâ·¿¬y–ªÚÌÓìÕÑñòz_«ŸªJ¶þó×7ÿ5°¿IïhõS¬?ôoyèrmmþ¸±ýø&Ž–óªV‹E¿zõJOƒ¼ùõÒºRPÃöåôÇE9é©=§Âq}÷ËOj„7ôÿ‹Þ…É´¼/Ϥ/ì/Ö—u=ŒãªIPÆ/ƒÙ–pù¥|vÔíR²ôœêó£ãË7¯—Óó4–ËJPwAè‡N¬æ,æY.ŸLuõ7ó¸°"õ×ÕÌ
-u–kõXÅ™þa«û«Û8ž†÷Ö4MçÖ³üK¢“Ç<WíY8]ĺ¢Å´¬‡E)Í¢lL²øŸýêÔW¯,oàû¯Ôhæ—ô:½8»üh=›ÎÿÿŸuݨªy®šˆh‘é‡ömÞÆ_ÓìËæÕ}<-Ýw¯µ·ëûƒõjcûǵ>•T-èÄnzÔw«Ç„'úY»·Ê׺<ú
-G؁|x•y¶;P³~
-Ï´ _î?€ïyÎ÷‡8xayÒÕÉrV»_¨Ú/žØ]zþQÙ^œëly¯•~¡7œllX•’ëMjÇõ6g½m †Ë‚–­ž/=ô\&£Y–»\·¹—k%Xg'ꬾ}ØxœfqùM¹ŸÍ~º‰Ëúmªj Íô­^=ÿÖ³OâùѲæo¿†I¡+!«_Xܨ'mœ¯íCyÐ,¾K–>X=yâÛãW¯JɾVÖ1R‡þÙþæØ¥Ñ?Û–jÁÄϲüSþüRè¿õçêªVnÏ¥ôه纭٘œür&E}ÈWCçW¥õ`/¶\Y‘é÷Áïò©-³ÿe‹y¡/ûûæu[£¯\	q¡áã8¾´¿75ƒWjKÙÎ|ßñU9ƒ©ÏôÐöXâ'1°’¹UÎTî4•âÝmÊ*ŸÇQ2I¢•)—êò^Á®ºÔCè?ïãÙR?Aül•߈ÏÖ£>'ÑÂç´<Ï!OK´näµáÉïgÑM¦®ö¯åñGiâôý(+ðOÝ
-çªôXåËŸT?`oåKjå?Ò´ªÊw{©|ù“p®|©¿‘ÔÊ—í*_²U¾|²òŸ¤Ü_ùN·ÊôRùÎOªó|hå;ú‡ZùN»ÊwØ*ßy²òÝŸD°¿òÝn+ØK嫟 ºéR¸ÔÊwÛU¾ËVùî“•ïý$†û+ßë¶òƒ^*_ý§›ïQ+ßkWù[å{OV¾ÿ“û+ßÿš}ÿ'áucó}jåûí*ßg«|ÿÉÊ~’ÎþÊ~„Þ~ -W'6? V~Юò¶Ê6+_UÒõM¡ãÍË	Åå´[:Q?<ùÒ']Η<sý¡^ÉÁCm>UŽm­°(T5èkÈÕÕŒ_ŽÓÛ0™½>²–ÿÐæ|ê©dw5Yþñì—ó³w¿YË©¿\YZËU­vë^«.޵¯ú¡°:xá©®µ¯zXþjµ§ÜÙS×”~_å «ñeë3í»layÍ/{ã’õO ]¶l|ÙúLû.[Z~óËÞ¸dýH—í4¾l}¦}—íXAóËÞ¸dýH—ívòl»–Íûl{<Ûžj!YŸm¿“gÛW¶›õÙ:y¶Ëa|¶gq1š…·±*«Óšw=|ôîôÓkëÃÃ̺¶E¥SkÞ&Ó{KøÚa0N£/Ö*+ÅÒe°ž9Õ.¼â~[ó(Ùœ¡¿<^Än{¾Ô½Ñ^3ë!d=¯oõì~錵?ð¥ö6m ÌâP{·vyˆS7àt íeÙå¬éÅÅñûwoÏ~ÝÚ᥮ƒÄ7Šn_Xù#Dé¯[^`¤mâêWžë`¤ô‹¶Ÿ§Çú¼:"yí\Ôó²ó,Vÿ}ð¼,¿y¶Z“[m룰>:ÖGoíÍ\^Äʁ«Oû0¿»vE®c¤ŽÏ¬ªófý²tÙü¡6ØZÏJמvêé[¿ú£\)®ÃªNÿmcEÎ$Ko­Û:qnÔaNU¿ã}{­ãD¶¿—¤£Êš£:¤£:5GuIGukŽê‘ŽêÕÕ'Õ¯9j@:jPsÔ騃š£IGÖ5$5|ú¨‚ô¼ŠšçU¯&õû^õŠt­W5בŽÕÕ%Õ­9ªG:ª÷äQǤÚ?U[ËEͯ­kq"žüVV¿Oî+¶÷--àÊû¿Ù¦ZIjÍËÜ?–kFd¹ú`oqG^%…u{›¤j«UhýKýk½Oß]ï©þµ{¼²Ô/¬xe¨÷ììžX<œXÔí¹{âÉÉ'öúÄßoßÕêÖ·«î­½©î«U¥Ž*ªG}ì§–©¾WæréŽØ{gÊâ•{j?ÜS{ç¦,s ¼¶Š,
 œ©þd¦;oËCnôWÎú2VaUåy¬?þ¿ÑÇ_F¯tæÕèòç?[îsñáRPwt¨;¤/Oÿ‹öÕŽidzKyùÄŽçÉì‹õÇù»ßߨÎãÙ‡ÿ«¶«†}¾Œ-a[ÂR,ñÐKÝsˆ_;Äß„ÎÖÒôÇ»‡ø[yÍq²yˆ¿mü’æ‡8Ýs/6`ýMIa-¹WOïíá÷ö×Ãïíoîí2óÀ¥Ž1Ô!u—z†÷ã²=²îìWÃÀz=·ÞŒÃ[ë=ý{4ŸÍÕ)g—ËGµ3
-œÍ7G[;¼^Žõ5¬†’ëÕ—úh[‡XÌ6²È¯¢4ÓÑ~߇©zrµ/MÔ€Ögɝ|©‚“¼yñ›ÅÕÞÂËÜ8ðæÀ±¼^=bS·øa¬ö..Îëxúz+lcózÈ^ÆYåÉ_±õ³ª‹Áf‰õà;W_}~W5žžXÇg—ßß¹›³©þ—ºXÕ
-Oô$¼›ûºŒoÇ“p1-ŽôzÉ׿¥yñÑû57–k/¿:ùðÛ‰õl2
-¯ó5Gâù:ªuµÁžÄAic—{}¸øðÁªq&~¤mørqòÖö±¶ 5»^=¾ktU¿ë`Ï®ƒú]½=»zõ»Ê=»ÊÚ]¯&ïz5©ß5Ú³kT¿ëpÏ®Ãú]ý=»ú»~ž}™¥_g˺y‘-"kZªùèìýÅÅç×Ö:Ò:ëÄŽ^_Jh%4}ÐuGÙúC¯ê_ø¥µü#°õƶG¿m¸y´t4*iu´hóhcâÑÄúh“£•þ”£Ù«£Eróhñ¾­éR%ë£ùÄ£­i4Ø<ڐx´‡_zµy´èÐûom,¬ÓnŽ&;<ZøÛ{ֿđ$ï3¿¢b÷CÛ«ôB;‹Á;®éf»g.::¼	[k@~̯¿ÌR锊Ów‹:ƒ”ÏʬR=²²~¨¦ÞÕÔû¡šmȏ‘MÚãìm‘'*£ÍR~ÔcÌñqWãØ	ê_Ð(
-½eÉƒŽ¦UN!ô–¥:žZ)9Ð[‘}@Z¬ô+ýÅJ`±ÒZ¬ôp±ŽÖ܉®QgINÅ я£~íj2+{+ÏæÃ&4èt‹X‡¯á:Ù`ï8]v¹¦OËh=¾3ª–%ú±·ŸòϽ»û.Á=+ÃYÂÈ䩼q¥Å6‰è]\ío?—öb5	 MÜ5éB2P‹8–†³,Œ%f{V¨K]Üüž%ȹÇ-<Kòê=é¼ÌØj¤ÉØ	›Kê’0bÃ$¶q¸Ú˜êãÍ6gؽ'“ Xæ«TrD‹!ZíÚˆ.CtimDcæjø©‚ˆ)B2¼,ݓƾºÐa
-È4ÚÌaÀ%@G‘
-ŸqC*ü:†
-ÏÀdI§kkÓ)(àW¥‚ܦà¼ã(øt’—(ˆµ¬ÓÁ ?­MÓhé{ëw6€Nᨠ‡`†…×péG¯ÝŠ57¼ªŽî®®¯îû7 
+‹ ›Ö9K ì]moÛ¸–î×›_A`¿ÌÅNzù&Ê.‹MÝ´
+&™f›d‹{/E¦c¡¶¤+ÉiRì_RŽGò‹ÄÈœð<D£Z”HJ‡ÉsHõäLð␇´øÛ›=+øž§Ä÷pù›p^ð†Š©‡1'ì
+&”böyû*Ð*æyd½¹¾In¦Q¼å:™å6
+d½ùOó4ŒÞÞ]ç¡,ò^'ß#TÉÌ=0¢äÏ|ì½A¸ë‚¬ƒãò?ü»Á;Œÿyøï‡¿ÅÄ…œ¢A’¥IQ£ÿžGá·ó ˜ £,œD…‹y&ÑÉß¾ ÏókT$èøâ'Yq€ž Ò#oñ2òÏÃÃJ,}Š¥õXöËTì²tG—'èR†“8™&7‘ÌUqCôõ7xŸNÑß?F™TÇßSO„~:Ï¢YÝÿu5éÿEUüC'MZ&}!Ã$UW¥äOåæõ§òžb½z¬xŠõXÿ)ÖW±‡oä쾞¾œéÒ¾Eg÷YtHð'ôaLϳ¤HÂdŠ~= ŸÔéÃóÁÉñaï¨ZèÞSÒ½zÆý§Ø~=6xŠ
+ê±£õUê*þ'ßc4’·Q(ã,¨ÝHšÝx]»‘6»1¬ÝÈšÝ8ªÝÈ7Ò&Õ´Ñq™ª/±b:ŸÜçQLÑip/³’6×Rô^˜"©¥(=©ËÁovcU²¡äIU²¡äIU²¡ä‰¬ÝØLòd\»q­äëU¦_¹qÜðåPþüF²³‰^_3‚x„N£øÛCù*o¢\]—¯­~¯—À†L¾&ó"ŠoÊ<[œFù}<©e²Ÿ‡©æÃŒ”§:ޝ«æ¹,E6Ouw\dÉt*³JÜ(‡‹{Uè:âàFÎd\<=H-ýojmúŸÎO¾”¯ë"T7„tŒ¶d±–¢;²xx#袊y^föõèbK&ké¼#“ˉw1•“õÖ¿þËLõ!åßÉp¾8³ìDÜoLK¬OëÃÙ:Žo¢XÖ®_+š-ׯ}Ï[®_ûʶ\¿¶áÛrýZ…¶åúµêjËõkµÔÆëƒõïÿdð™`tuñ]}œ¬0ý[µ!ÖKdK
+^-…µ2Ú’‚¨¥°ö©S è¸š­$q½íE|þ€Žæ£(ÙÜ$…O¿ë•^z=Áõ|ïø=úÝ×Q~•Å÷$û¦SÖí®º¤Y'ý¥)—eæË2‡µ«Šõ–±£zì†îì™UÕĆ~í–ª"ÛÐÁÝ’«¥ÐºÞTC>	^Ö_SÃîMP퉩·<G©V¼G—GèäÃñæZ9^ßš-R¹8{¯tÈú{ÿ¡ï]ÛR-KðGäͰ:ÿ“fI¸IÀfóD`L™ žžÿ!ž€ù?¨É?LçQ<NºÌcûüaÌ+å¯FIÌWòçžóV e.ó<ÉþòNÎne<J²a4R¿>ÉXÕY¶„ªV q0‹¦÷*FÌ’‘œþEý—>üÅÁL>Ý´h?úúW48¿Zi^ÿi‰«}ÛgŸ>ÿ8P]ã4UÃ-T™ÉÙç:]âõUãƒ0'åѝzô)úåýAº–%yt­Dw“ëKÂDõéUDù@:I}BGñƒ ÂEQ‘L.N–çÆé\ÇÞË\ÿw(ïB™êÖÿáœæÆMå­zxu=9øž>^>
+TþꇺÝΤRq(Í%*òÍò¥D3¥ò»^™#ÊeŠfE¦bntL€ÂYr«.+ômL p:žÎó	j¼¦šÍîÐøN%•«dÕ?ªþ IŠJ¯Õ™û\½%ˆ;”©{ÂMgêÑcU½ãb¨‹¨AÏ0•Ùx¦ÔY*¯st­ÒÎd:¼I’Jc•G¢^J’¡Q>Ó©zŽ;$s…ÎLKŸtW¤êUduŠÉâ 5cªÁå4˜Œ‡*ïh\'7É,JõÛ÷zB¼íùËçz©àƒitëÑéâd0)©ååe¥ð0R}»-Eÿ3â½Å™Û(+æÁô M¾«~Êìq”ûîà`µr“×V¹ÉæÊÝ[S¹{P¹÷Z¹½·þW¹ék«Ütc妸^¹Õ9¨Ü¯¶r³×V¹ÙæÊM×Tn
+•ûõVnþÚ*÷–>·¿¦[âCåÞwåîÿa•Û{m•{KŸ»¿¦r÷¡r¿Þ–[¼¶Ê½¥ÏMÖtKTî×[¹ý×V¹·ô¹ÙšÊÍ r¿®Êmfýρšýg&gví?ê¿~Õÿ›{Ìû
+œÉÙeRÓw‹V™`"¨OÑ·÷*æc&å»eƒÍ© ´§cÞÏÇcõ2c´cd_蘁æïè)‚{¸ß+ï¹ø¤ÕX„uÌQXD·OÙ¨"øž(cNâàY'=âÑej+Å&Ø£”?æ³RlƒEóA5÷+™ëØE©Ï¢B^á·ÕØEÙâ$>WÈã³rì³òž³ MŸ=ñüÅ{»˜×ϲa¾z 2æ«§A4®§‹òQÊh™ÏÅUœ-â–åöø"û¥¾á©|ñv~ýx1¼Òmú2µÇR¿Oæq(Ÿ?ê"æñI/géó{Él§‘úó®Ì_`ÖãO1…
+.Ê{ú˜‘²l¿Í”–IÂAhómßg=&ü•È«üá-QÑó"zˆLæñ·‡Û¸è‹Ó‘Ÿç7²|ãÃùâ•Ó+Â]=ý5¿­9}1ÏÒg§S}Z)’ÅIŠù²nȰP2åË:à?<ýc=+ßfT÷<TÌÍÜnPkÿU…êzÐööŸ_ÔìÿØ'ÐþÛ€î#B	Q<Ž<Þï©Kx˜	‚„ ê”jˆ(Q¤Æ‹¹=¬®ôUYµ^qâûHɐ!u]^E·¨ºJ¥K|}™¯Ó¢\©D{dyELxJµôa*{ujÇõINá)åñp%C¾ú‰Ue®>íyH‘!áãåE\qUÜ+¯òÕœ•‰,¯ñ´†QÍ‘>,J¦‚z ²z‘ŠÕW¨(%e¹8õ|Ĩz&•$Á¼¿¼T=<VoÈë«F“-ž´¯ÊÑë#ýåUQ\dZ
+ôú˜à¾¾¦×ª”:;‚ú?àYðÆlùƒ®½ @€  @€  @€  @€ ‚i ‹¾¿&‚ ê÷´÷ˆçªCDé&B8F}í)ƒ±úC™@¤Ç{Û²8‹»B%¦îà;¸.¢™TwR‚û”¶tÚ—9"„S\þ·Ù<Žõ&†äá÷õ4	¿É‘J®êÿ³êÿ•ßç{Ù¼Ùþ?XPâûŒR½ÿf°ÿTå¿Ø™«ÛzÐ^þÚÇäo›äŸ—›†vS
+ZÉ_hÿO‰ò·òÓùËë@ÃýßVü…çƒü­ üµ;ì‹*A+ùs¢äïsò·‚¦ò/’´ÜÐØ¤"´“¿Òÿ”èn ÈßZË¿˜d2
+
 —ël›ä¡Ì7¯ÿÃJ÷WäÏ™Ïaý‡
+,eðóKþÃù+Y
+åZó¹êz˜á·àF£Ñ®<vñcZá¿G|ü·Ìu­ù¯·ÐhÀùU´ç?°þß(ðßi˜ñ¿Mïߨÿaÿw;è¤ÿ?C+ò'ÅKÇÿÃi”ïÚ/b·þçÕþ?g°ÿƒПp×a¼Lÿ7a¿ÿ	¡ÀÀ‡>ðßa4å+rH³<4÷ìÿWÿÅÿòrà¿ÀüŸÛhÊÿr¿Û©4òÐoäÿƒ}R¶Tï	ö_h+½= díªA3ù?›ÿ¥>øZ¡üG2ç±³ÿϪóÿŒ0úߎç'èãÇÏèä×ËãStöûÑÉ%Âw¬î)x0äÿ<nvòŸ*ÿU ü·Ñ×kXz0p†üŸª¿qxß,öóLx ÿ­€Ðô.Ðÿzbã<vëÿÿ	ðß§}Úç>ÚaÈý¯ÆyìÖÿÆÿ@{§aÈÿòkMó0èÿ3þV at 1ôÿ]†ÿ‰ûû
+Ê¿cûOmþ—Phÿ­`ƒý”‚#0ä·öìÕí?àÿeÔ÷Àöã0ùß±ý§6ÿ#`üg€:
+Cþwlÿ©Žÿ”ú‡õV@‰G…€«0äÿÞí?ö±‚ôþ†!ÿ;¶ÿÔÇÿ°þːË0â?µ`ÿõ_V`(ÿ½¯ÿ¡°ÿ—l°ÿPP
+nÀÿÛDÝþã?+ð=&` waÈÿ½¯ÿá ÿ­€Ð°ßaò¿cûOÝÿæì@{Z{‚À&`ŽÂÿû·ÿ€þ·‚˜~†!ÿ÷¿þô¿¨W
+€Ã0â?¶`ÿa`ÿ±CùwkÿQ½çû¿Âúo[œ_|8=Fƒ/_Ñù—ÓS¤‚Jp†üïØþS³ÿ2ü·èý¹
+Cþwlÿ©ñ_pØÿÑ
+€ÿnÐÿÝÚêü‡õ?– üw†üߣýg1þ§0ÿkh œ†!ÿ»µÿšý—þ·Nû¼/|Ú÷ p-ø?Îä¿öøý§Uþë_`ÿ±¶òO⑜ñ¨ME0°ÿùêÈߌ埳Tv˜©Áö<´€·ÿ±ºþÃãàÿaT¿~Pý΢þgÁÝæ<v÷ÿ«þß‚a˜ÿ·ò hÜDWü߃õŸŠÿ°ÿŸ ¿Ó0æt'™Æêêá4	F[òØÝÿ¯ÚÿöAÿ[pßmóž‹I&óI2ÝÆ}Ýü¯Îÿ{°ÿ·%ô pÆü/-€yp+‡×Q°íõ¿'Àþo@·Ñ–ÿy”£þYp7Ô'šä±“ÿµý¿9ƒõßv@ûÚÖ­€«0åpDÓàz*‡7É­Ìâd9vÎÿñ*ÿ…çÿ,ûs¨|¾4%Je6N2uRýÚ…W޶ü×~€ñ8Ñþ­ô»ïpÆaÿG+ ^_€þwmùŒÇ2,äh¨N4¥Ãnû_}ýþ¿ÀÞ¯n£-ÿ3©—þ¶¢¿	ÿ¹úß
+€ÿnÃtü¿õ7Éc÷ü_Õÿ3úß
+–ãhÜÄËçÿô鹌ÃHn¢Ç.ýOx•ÿ>V§€ÿð0ÿÔQ”G¿ÏÊ£Ð?ÕÑ{ˆg}^© å‘О>’~ß+=AË£Oûåq1¯ ˆÿÏalÿk9ÿ×Úþþ¿V ónÔÿ¹,òTÊ]®%vó¿êÿÏ|ÿÅþcçó4M²BŽþZç`ÊÿpžíÕþÇ ÿo ÿ݆)ÿGYtÛt Ýü¯~ÿ›c
+ë¬ ÓèðA¸Ð¸cÿŸ–þ¿mõ¿û[øÿº¦ü/&2›S½æ/)Š©ÜßþOåþŸ˜
+ØÿÉŒå&ó¸h–G;ÿRöÿÀþkÐò»Æý¿ œ´jôWЬýÇ‚bŸ®â)ö°í¿
+´“äm[
+Úëâcò·#ùçя滿7Ñÿ^EþÔýoêMÿ] waÄÿtrŸG¡
+(ÂÈadETDÉFî´ïÿ‚ÿ· ¿Ó0âqŸvªÿIµÿG=Ö[ÁU#	î߮ˆÿSy+§Íóh¯ÿ©OÁÿÃ
+(0ßiñ?L&2Óß] vMìæõûož`àÿa‚Cà2Ìæÿ&A¶X®€|§p7ÿyÕþçØÿÑ
+èϰÜeñÿ{pŸ“ñ0Èó$Œ‚"ºŠ-ß‚7˜ÿ£øo=`¿Óx©þŸéÎ<vñŸÔæÿ¸úß–2øù%ÿá0ˆø³Âˆÿñ|v-3ÝÐË@wæaÐÿ`ÿ³À Ë0à?¶àÿ%|ðÿ³#ùwîÿUmÿ)ôÿ,QpÿrFü·áÿü·ðÿrFüïÚÿkÿ·ü·‚A@à.ŒøoÁÿöÿ·ÐÿnÈÿ6ü¿ÀÿÓ
+ÀÿËm˜ÍÿYðÿ‚õV þ_nÈÿ6ü¿€ÿV þ_nã¥úoþ_À+XÊ ü¿Ü„ÿ;÷ÿªŽÿ¹€ýí ÆÿnÀÿÌÊþ_ü¿lÀHþû‰ºýæ­ Gúàæ0ŒøoÃÿì¿V ö_·aÄûÁøÏ
+`ÿ/·aÄûÁü¯0`¾Ó0â¿
+ÿ/ðÿ¶˜ÿufóü¿àûïV€}h †ÿ;÷ÿªêAìÿaÜ?ÆKõÿÞü¿@ÿ[ÁR/òÿ¡ù“ˆÿûU×sÁàûÏV íÿ@^waÀbÅÿƒÿ—
+É߯þ_Ðÿ³ØÿËmñ߆ÿðß
+ÀÿËmñ¿sÿ¯ºþ÷ÿVpçE6uó
+-ƒ0â¿
+ÿ/˜ÿ±ÐÿnÈÿ6ü¿ÀÿÓ
+ÀÿËm˜ÍÿYðÿ‚õV û¹
+#þÛØÿøo þÝÆKõÿÞü¿€ÿV°”ìÿå&Œøoãû0ÿo„ .£ÿi[—¯gÐoîÿ¥â‰Ï9øYASùIšL“›{“ŠÐZþ”0ÂAþ6ÐZþÅ$“Áh˜G×êmÝ4z#íúÿZþœ	XÿeÐÿw­ùÿèû—á·àF£Ñ®<v÷ÿi…ÿñÁþo`ÿw­ù&Yί¢=ÿ)|ÿË`ñ—Û0ã›Þ¿QÿsØÿÕ
+:éÿÃúï?-^:þoâ ´[ÿójÿŸÃ÷?ì üÜÆËô#÷?þû?Zìÿæ6šò?‰µ«¿Yšá¢Õøý+€ù?·Ñ”ÿêO4šJ#? ÍðÝö_,(öIÙNP‚õ÷ŸÀþ»´•¿z[…lù¸fò6ÿK}ðÿ°Cùd6ÎcgÿŸUõ?#ðý;8œŸ ?£“_/OÑÙïG'—ß1ý'`ÈÿyÜ4
+ìä?!Uþ3þ¿V úÄë<ŽÂÿSõ7·¬ù[Eûù?&8è+ 4½Ë0äÍšOîÖÿ5þà¿0Î{˜ˆ¦Ð¸CþÇA—ü¶ÿŒÿmb €t†üO“ï2kš‡AÿŸýÏ(½ï2Œøßò&ö½þì?û‡¡ü;¶ÿÔæ	öß
+6Ø@)8Cþwkÿyöý¯û¬ÿ¶â¸î.ùß±ý§6ÿþŸ–À`¨Ó0äÇöŸêø©À Dxœ‚¸«0äÿþí?°ÿ‹€úNÐÿÛêãã+ @.Èÿ-·ƒ5²ÿø`ÿ±Cùïýìÿeì?à
+èùß±ýGÔúÆVà{̃@Ü…!ÿ÷¿þô¿À÷?܆!ÿ;¶ÿÔý¿`þÇå‚{V8
+Cþïßþúß
+àÿá4ù¿ÿõ? ÿ­@½rh †ÿ±ûö0”·öê×û°ÿ»ίN>œ£Á—¯ÇèüËé)Ò?A%¸Cþwlÿ©Ù†ý¬ znÐÿÛjüö´à¿Û0ä·öŸ:ÿaý% ÿ݆!ÿ÷nÿý?ì` 
+€Ó0ä·öRã?ýoœöy_ø´»€8‰ügò_Fy”ößßaÿaD
+ú¥Tÿ‰èýèÛŽvçãïNd6¦Ãb’%EÑîC`ííSøþ—Ë?LæñîO¿–h?þçXÀü¿@÷ßm4ÖÿA81ûúcÛï?–ßõ0ƒößÚÉ?ŠGò®åêoýO„ÏAþ6`$ÿ<úÑæSлõuÿêþ·õ¦.€»0â:¹Ï£Pô7á‡iQ%¹Ó¾ÿ/<Xÿa°ý—Û0âqŸvªÿkû*­þ?VpGãHŽ pFüŸÊ[9mžG{ýO}ö?+ø?öζ¹mË÷óÚŸ‚Uó¦37I ¤ÔöÔ¦m§ÛÕvâÍÃÎÞÛ·KES”ÍYԐ”÷§¿ %Ù›ä1uv²øÿª;²(”þq œƒC,ÿ´’þãì*ÉMüïr Ð4Ьÿºÿ_ÿ±þ“… O~·ÚüßU”'ã‘þ@7 E£°Yÿõõß^è#þù<@`1$ý‰n‹Q6EE‘ÅiT¦7iùÈZ ÂüŸ@ÿ û›Ý<Õþ_GóÆs4é_ìÌÿy>ì?ë:xþ”?<"¾WHúŸ-®/’Üô Фl¡ÿÀÿǃ/0h3ýwÌþDŒÿ’ˆÿâ€Tÿ½ÇÕÛ‰þJ"üËfHúgˆÿÂúoÿe7$ý÷ÿõ­øo蟅£¨ŒÐØIÿñ_XÿÁì¿ÝôÏÿ…øOÿe7´ù?†ø/¬ÿ`ñ_vCÒ?GüôÏâ¿ìæ©öoñ_Ð?ë:@ü—ôß{üW}üïë¿XÀøßnúW,ñ_xþ¤úï=þ+Øõÿbþ—…"ÌbHúçÈÿÿ/ðÿÚ
+Iÿù¿0þcù¿ì†¤Žø/Ìÿ²  |«!éŸ#þñß,`þ×nhóûÿ
+\èŸ÷EˆÀbHúï=þ«nÿ©ÿƒðO«yªýßWüì?ë:xRü×d‚Fä;…¤ÿÞã¿êë¿=Ý€þ90þˆ×^ú,ñ_xþ'¤úgÈÿ…þÈÿe7$ýsÄAÿ, þËnHúï=þk×þ‡Ð?'³¢Ì±i¾ÑXIÿñ_˜ÿaößnHúçˆÿBü'ˆÿ²ÚüCþ/¬ÿ`ù¿ì†¤Žü_Ð?0ÿvóTû¿·ü_Ð?ë:@þ/;!éŸãù˜ÿgAHd µ™vú÷»†|maÞ>þKüE—2Íâ¿h[ÿe6ϦÙå-åFè\ÿR(Óþ£þ÷Oçú/¯ò$ŠôB_­ËVW¤[ÿßÔ¿§Bäb¡—þ¿Dù÷JgýßÅþÍ£øst™ŒÒqÓ9šûÿ²¦_÷  àÿ·›Îú³¼æ7é®(øÿY€þ톦ÿ.½RÿßõÿÇB/ý¬ÿþnyêø¿M P³ý÷êýùßxÏ}h×bžfÿ[…ÿQôoºÐ?Èÿf7mõŸÍL¨?íFáA§ñ¿~AÿŸŒÿí¦­þõ?éxšâ ŒÂ›ý¿n ÝPTí„nÿ?]ë__­2éø¸võ¿5ÿ+Qÿ<ëœqës4öÿUÝþ+ø^žŸ8oÞüꜼýx|êœýãõÉGÇýª\ô¬€¨ÿE]¶
+4ê_ˆºþ•@þg”?„~€I K!êªÿÅ¬ùÛ¤ûüŸ
+<ØD Ko3Dý—éuûÉÀfû¿£ý󠼁¾êB
+|ÌÚQÿ³¨OýoåÿÁøŸ“C< ÒjˆúŸg_’¼í9ýÿÒEÿßfHúïø’ÿGÂÿñþ{öÿìÌÿ
+<ÿ‡‡ü?0
+–@Ô¿þŸ­ç­ü?XÿÍ‚ð}$€´¢þ{öÿìÌÿ þ“	…Ô
+VCÔ¿þ7„ÿ翉¡’ÃÁm€­õ¿ÿò¿°p·¯Õõß³ÿgwüïaüÏ‚pá ²’þ%ƒÿÏÿfXÿû_ÿƒü_,<àÿ‘0
+v@ÔÏþŸ`×ÿƒñ¾øÐº½õ¿ÿõ?°ÿ,àùvCÔÏëvã¿0ÿÃú}ý‘ÐRˆúß¿ÿöŸ…CÄX
+Qÿû_ÿûÏ‚ÂèßjHúwü?þˆõ߯ÿGîÆÿ!ÿ;‡çŸNŽNÃwów§§Žy“`Dý÷ìÿÙñÿ*ñ¿, ÷g7Dý÷ìÿÙÑ¿yþ€þ톨ÿž×ÿìÆyxþпÝõ¿ÿÖÿ²pˆÀjˆúï×ÿ#vô¯`ÿyðäС"ÄJ:è’'ÿÜãóŸ6õ¯ßÁÿÃB×úÏfãä:š»Üÿ_¨Èõ_D×sóØQ®;ŸÃTðãϬ¯ÿð=Äð Íå‡é·–~ô?ºŽ¾>|Žæþ=þ;P.æÿY«*@`'}éÿåÖjýcþñ[
+Yÿéå,Ë“ÑL—M³hüÈ9šûÿuÿ_à†°ÿ,@ûvCÖÿb>*¯ò¤¸Ê¦ißЬÿúü¿üßLÐ X
+Yÿ•°ˆn’ÑE=.Œîöß$ôÏäo7]õ_ÄQ5꿎¾ŽÌ†6çhÔ¿¨û<…õß<È¡1`/TýG7Q:.¦Éè2»IòYöˆ8çÿ¼ºþßGüëþœSý¾y'Î<É'Y®7ê¿Ñ.ü§«þMàl’™	ÿNöÿqÿß®ý÷ÿ‘áØ{éªÿh2Iâ2ô†¶rhöÿí®ÿèÿ³€°_»éªÿ<1K;ÉŸ¢/„ýgú·êø=êosŽæù¿züŸ§ØÖã4vòôù?³y‘Ìâ4yHMö_xuý‡®Bþ/VóÿŽ~
+ª×p¨ª×À¼Õ¯þês5ôªWˆêUȁyá_½Y½†rX½.ç0ø/Ùÿ×qþ¯³ÿñ¿,`þÏn¨ú/’²˜'ISè_E³þëñÿžÂó_xø·Å¬XÌçY^&ã¿£°ªþãE¾Wÿòÿò ûo7Týóô¦m fýןÿí¹ëXˆâyúbU¹hìƒÿÓ1þ·süò³€ø_»i«ÿò*ɯ£©Yó—•å4Ùoþ'åšøäÚ?äú³Å¬lwŽîñž ýg-¿Ý´îÿEñU§Fƒví¿H7§?—®ï"ÿÝê?“¯²ëmÐÝþÝ'Eýs@ªÿ"ý³}ö÷6ö¿>ÿ#}Øô•þ
+] {!é~u[¤±
+hÁ$£y”—i™fj§{ÿ?ð±þ›ñ[
+Iÿåí¼Wû¿3ÿ+}äãáÓ,¤	¿m…¤ÿ
 ir“LÛŸ£»ý—¡Dþ$”o5$ýÇÙU’›ç¿. MÓÍúßÉÿ(äc!ðÐ Ømþï*Ê—kÀuP4z›õïÕýa€õ,ˆçXn3$ý‰n‹Q6EE‘ÅiT¦7iùȳà	óRAÿ, ~«yªý¿Žæçhҿ؍ÿôaÿyX×Áó§ü!1‹ð½BÒÿlq}‘ä¦`–6žƒÐÿàÿãÁЮÍôï2Äáù¿Lê¿÷ø¯zû/ÑÿcBI„ÙIÿñ_Ð?ˆÿ²’þûŽÿúFüwý³p•š {!éŸ!þK`ý°ÿvCÒ?Güâ?Y@ü—ÝÐæÿâ¿°þƒÄÙ
+Iÿñ_Ð?ˆÿ²›§Úÿ½ÅAÿ,¬ë ñ_vBÒïñ_õñ¿H¬ÿbã»!è_±äÿˆÿâ€Tÿ½ÇÕŸÿ"ýó¿,Ä`CÒ?Güü¿,Àÿk7$ýsäÿÂøäÿ²’þ9òaþ—å[
+Iÿñ_ˆÿfó¿vC›ÿcˆÿò Ü! ‹!é¿÷ø¯ºý¤BþD ùÛÌSíÿÞâ¿`ÿYX×Á“â¿&4"ß)$ý÷ÿµóü÷@†Ð?ÆÿñÚAÿ‚%ÿWˆø/HõÏ‘ÿý?ÿËnHúçˆÿ‚þY@ü—ݐôß{ü×®ý¡NfE™/bÓ|£%°’þ9òaþ‡Ø»!éŸ#þñŸ, þËnhóñ_XÿÁòÙ
+Iÿù¿ `þíæ©öoñ_Ð?ë:@þ/;!éŸãù˜ÿgAHd µ™úÏff–ï	çè¤þE—
+áÿãë¿ì¦ýïœòo£ðöñŸ®Ñ¿ç!ÿmë¿ÌæÙ4»¼¥ÜÝ꿊ÿUÏÿe¡sý—WyGEz¡¯Öe«+Bÿ+ää¡—ñÿ cˆï•Îú¿‹ýGñçè2¥ã¦s4÷ÿëóÿ¾@þ7ÿc7õgyÍoÒ]ÿùŸ˜@þ7»¡é¿KïŸÔÿw}Äÿ±ÐKÿù¾[ž:þo Ølÿëþ?ß“ÈÿÄ‚zŽù›yšýoþKÑ¿pñüàÿ³›¶úJ€QxÐzü¯?—ÕôÏ æÿ즭þõ?éxšâ ŒÂ›ý¿n ÝPTí„®™ÿ‡ÿwÿt­}µÊ¤c8H»úßšÿ•¨ˆõ?NЏõ9ûÿª>ÿ¯âyx}x~â¼yó«sòöãñ©sö×'÷«rÑ/°¢þEtÙz4Ш!êúW.ò°à»ƒAà*ðX
+QÿSýï,~dÍï&Ýçÿ”@ÿˆ –Þfˆú/Óëö“ÍöGÿúçAyÂͪ+36BÔÿ,êSÿ;ù¿0þçâ€VCÔÿ<û’ämÏAèÿ+ñ,Hý›!é¿ã`Hþþˆõß³ÿggþWH´ÿ,<àÿQ°¢þûõÿ¸ÁNÿO@ÿ,„Þ BìÖBÔÏþŸùŸ ã?R7Z
+Qÿ=ûvûÿ
+ñ,¨@úº€$ð–BÔÿþý?ÈÿÂÂ!ܾVCÔÏþ×ÿƒõ_, ›!é_2øÿ•býïýò±ð€ÿGÂ(ØQÿ=ûÂ]ÿôÏ‚
+ñ0k!êÿë ðü»!ê¿gÿÏnÿþ_„7P¾èèØ	Qÿû÷ÿÀþ³pˆø«!êÿëàÿaA_r4 CÒ¿»ÿOÂÿñþûõÿȝù_üï<ž:9:=vß½?vÎߝž:æ-L‚-õß³ÿggþG¹ÈÿÀzvCÔÏþŸýˆÿçú·¢þûõÿìê_(<ÿ…èßnˆúß¿ÿþ_Ñ X
+QÿýúÄŽþì?žzà ”C¬ ¶’úŸäÉ?Iç¨ü?aØàÿ1‘Ⱦ’Ršç?	óüù²çû-,×ëç^%ùu4•WyV–ÝÖÝÿ§\ÿÿßþ!ל-f͏~­è>þ÷ô+ì?èþÛMkûÅW´§?v}þcõüWßøÿÐþïŸnõŸÎÆÉ׎«¿»ÚSÿ"}Ô?¤ú/Ò?»<
+ºÙþûµú—~€øoô•þ
+] {!é~u[¤±
+˜gæQ^¦eš=¨ný£ÿÀGþ/þËnHú/oç½ÚQïÿi«„ù>ÍÒIšŒÑ
+X
+IÿÓä&™¶?Gwû/Cø°üÓnHú³«$7ñ¿Ë@Ót@³þUMÿ~ ÿËB€ÄVC›ÿ»Šòd<Òè hô6ëß«é߬ÿfA=Ñ XIÿ_¢Ûb”MFQQdq•éMZ>²ˆ0ÿ'ôϲ¿ÙÍSíÿu4o<G“þÅÎüŸçÃþ󰮃çOùc€Vä{…¤ÿÙâú"ÉM HÊfQúÿü<ø3€6CÐÇìOÄø/ij@ªÿÞã¿êí¿Dÿ	%þe3$ýsÄAÿ, þËnHúï;þëñß!ôÏÂQTFhì…¤Žø/¬ÿ`ößnHúçˆÿBü'ˆÿ²Úüßþã¿|¬ÿ`ñ_vCÒ?Cü—„þY@ä†Ý<Õþï+þöŸ‡u þËNHúï=þ«>þ÷õ_,`üo7ý«ýƉeüžÿÇ©þ{ÿ
+vã¿0ÿËÂ@f1$ýsÄÁÿËü¿vCÒ?Gþ/ŒÿX@þ/»!éŸ#þó¿,((ßjHúgˆÿBþ0ÿk7´ù?†ü_xþ'îÄÙIÿ½ÇÕí ò° Èßfžjÿ÷–ÿöŸ…u<)þk2A#òBÒïñ_õõß^ ñüOŒÿⵂþKþ/<ÿ“RýsäÿBÿäÿ²’þ9â¿ ÿe7$ý÷ÿµkÿC蟅“YQæ‹Ø4ßh	,„¤Žø/Ìÿ° ûo7$ýsäÿBü'ˆÿ²ÚüCþ/¬ÿ`ù¿ì†¤Žü_Ð?0ÿvóTû¿·ü_Ð?ë:@þ/;!éŸãù˜ÿgAHh×fÚé?O“®Q_÷…·ŽÿR¡Ö¿+Íó_ÿµ:Ô¼ÈódVŽÆyz“äÎÑØþY«%àÿå!ŠçéÈT/¬€•ô™iùϲ|”gíÎÑÜÿkú÷¤‡ü_,L£ñ8É!~[i¡ÿyžZ÷ôstÿ-ûÏäëÿí¦þ³¢H/¦]">·iÖ¿_׿Rèÿ³à¾> {i×ÿï¼äo‹Nó?fþW„žBþwÚ֙ͳivyK¹:׿Ê<ÿõ¿:×y•'Ñxdzéì²Õi²ÿßðÿ*äÿç¡æÉ¥ý!‘Bà{¥³þïÖ~Σøst™ŒÒqÓ9šûÿõø/_ ÿ7Xÿa7õgyÍoÒ]ÿù™€þ톦ÿ.½Rÿßõ°þ‹…^úÿÈÿ÷ÝòÔñ›`Íö¿ÿé{ùYÏ1ýo3O³ÿ­–Rô/\Äÿ° ÿ¿Ý´Õ63©hç0
+:ÿÝ@¡ÿÏÆÿvÓVÿOYbÞìÿu醢j'¤pMüü¿û§kýë«U&ªÛmЮþ·æe€øˆõ?NЏõ9ûÿªnÿ•ÀúO^žŸ8oÞüꜼýx|êœýãõÉGÇýª\ô¬€¨ÿE]¶
+4ê_ˆºþ•‹ü,(¨„;BîvBÔÿTÿ;‹Éù´I÷ù?x°ÿ,ˆ –Þfˆú/Óëö“ÍöGÿúçAùBxJ¤‹Lp6BÔÿ,êSÿ;ùŸ1þçâPAö6CÔÿ<ûÒ>¡ÿ¯àÿãAºèÿÛIÿ—“ü?>ü?ë¿gÿÏÎü¯hÿYxÀÿ£`	Dý÷ëÿÙyþ»R.Ö³à	,Þ¶¢þ{öÿìÌÿ þ“	õ[
+Qÿ=ûêã?%Ö° tÍø[!êïþü/,bˆÕõß³ÿgwü¯0þgA¸p ÙIÿ’ÁÿÀÿñþ÷¿þù¿XxÀÿ#a쀨ÿžý?Á®ÿã?„TXüc1Dýïýì?xþ«Ýõ¿ÿÖÿ²0†Â@k!êÿë`ÿY8„ë×jˆúßÿúøXЗ
+€Åôï2ø<ø8 Ö¿þîöÿÿ…ÃóO'G§ÇÎá»÷ÇÎù»ÓSǼ…I°¢þ{öÿìø•‹ü, ÷g7Dý÷ìÿÙÑ€ù_ »!ê¿_ÿÏ®þ±þ‡	èßnˆúßÿú¬ÿeá
+€Õõ߯ÿGìè_ÁþóàÉ¡7B9Äc ­¤ƒþ'yòOÒ9*ÿO6ø””¯¤”æùOÂäÿ‘/{þ±ßÂrý·~þçU’_GÓQy•geÙíA`ÝýÊ•xþäú³Å¬ùѯÝÇÿž`þŸtÿí¦µýâ+ÚÓ»>ÿ±zþ«¯›´ÿt«ÿt6N¾v\ýM±ÿ"êŸRýéŸ]Ýlÿëù?¤ûσ¾Ò¿¡`/$ýϯn‹4Ö£óLøÑ<ÊË´L³µÓ½ÿøXÿÁÒÙ
+Iÿåí¼Wû¿³þS[%Äÿ°ði–NÒdŒVÀRHúŸ&7É´ý9ºÛ
+øÿXÀòO»!é?ή’ÜÄÿ. MÓÍú¯ûÿý@bý'ûj5´ù¿«(OÆ#ýn ŠF/`³þë뿽ÐGüâ9l†¤ÿ/Ñm1Ê&£¨(²8Êô&-YD˜ÿ“úgÙßìæ©öÿ:š7ž£IÿbgþÏóaÿyX×Áó§üG~·ô?[\_$¹éIÙ,
+Bÿ?€ÿ_@»6CÐÇìOÄø/ø/Hõß{üW½ý—èÿ1¡$¿l†¤†ø/¬ÿæñ_vCÒßñ_ߊÿ†þY8ŠÊM€½ôÏÿ…õ,ÀþÛ
+Iÿñ_ˆÿdñ_vC›ÿcˆÿÂúÿe7$ýsÄAÿ, þËnžjÿ÷ÿý³°®ÄÙ	Iÿ½ÇÕÇÿ^ °þ‹Œÿ토Åÿ…çÿ±@ªÿÞã¿‚]ÿ/æYˆ!"À,†¤Žü_ðÿ² ÿ¯ÝôÏ‘ÿã?ÿËnHúçˆÿÂü/
+Ê·’þ9â¿ÿÍæí†6ÿÇÿBÿ¸/B4 CÒïñ_uûH…ü,ˆ ò·™§Úÿ½ÅÁþ³°®ƒ'ÅM&hD¾SHúï=þ«¾þÛ¤„þ90þˆ×^ú,ñ_xþ'¤úçÈÿ…þÈÿe7$ýsäÿ‚þY@ü—ݐôß{ü×®ý NfE™/bÓ|£%°’þ9â¿0ÿÃì¿ÝôÏÿ…øOÿe7´ù?†ø/¬ÿ`ù¿ì†¤Žü_Ð?0ÿvóTû¿·ø/蟅u ÿ—ôÏðüGøÿx@m¦þ½®!_[…·ÿÑ¥<O!þ‹ƒ¶õ_fólš]ÞRn„Îõ/…2í?êÿt®ÿò*O¢ñ¨H/ôÕºluEºõÿMý{*Dþ'zéÿx¿W:ëÿ.öoÅŸ£Ëd”Ž›ÎÑÜÿ—5ýû"DþG \»é¬ÿ8ËÛh~“îú—‚ÿŸú·šþ»ôþIý×Gü½ôÿ±þû»å©ãÿ6@Íöß«÷ÿ=äãÁ}Ž ›yšýoþGÑ¿páÿcùß즭þ³™	õ§Ã(<è4þ×/èÿ³€ù?»i«ýO:ž&¤8 £ðfÿ¯H7U;!µù‡ÿŸ…®õ¯¯V™t|\»úßšÿ•¨ˆõ?NЏõ9ûÿªnÿ•@ü?¯ÏOœ7o~uNÞ~<>uÎþñúä£ã~UðØQÿ‹"ºl=hÔ¿uý+üÏ,„n8ðÜc)DýOõ¿³ø‘5›tŸÿSûÏ‚`ém†¨ÿ2½n?Ølÿwô/ ”'„¯¡p‘ÀFˆúŸE}ê+ÿÆÿœ¢ço5Dýϳ/IÞö„þ¿‚ÿé¢ÿo3$ýw|Éÿ#àÿá€Xÿ=ûvæžÿÃÃþK ê¿_ÿîú°þ“á©P!Œµõß³ÿggþñŸL(¤n³¢þ{öÿìÆyÈÿ‚P/†ˆ·¢þ÷ïÿAÿŸ…CßjˆúïÙÿãïú`ÿY.@6CÒ¿dðÿàùß,ëÿëÿ‹…ü?FÁˆúïÙÿÀÿóßÄPJSÀöBÔÿþ×ÿÀþ³€çØ
+Qÿ=ûvã¿0ÿÃøC?”;!êÿþØÑù·¢þ÷¿þöŸ}ÉÑ XIÿ.ƒÿÇ…ÿ‡bý÷ëÿ‘;ñÿùßy8<ÿtrtzì¾{윿;=uÌ[˜[ ê¿gÿÏŽÿW¹ÈÿÀzvCÔÏþŸý›ÇÀCÿ@ÿvCÔ¿þŸ]ý…ç¿° ý
 Û
+Qÿû÷ÿ`ý/‡h ¬†¨ÿ~ý?bGÿ
+öŸO½aÊ!Ò¿ZIýOòäŸ{|þÓ¦þ…y$4ü?t­ÿl6N®£Ù¸Ë@ðÿ¡úç€\ÿEt=7Ï€åºCðø9L?þüÇúúßCüÒ\~˜~kéGÿ£ëèëÃçhîÿ×ã¿åbþŸ±ª4vÒ—þQaý§Ö?æÿX¿ÕõŸ^β<ÍtéÑ4‹Æœ£¹ÿ_÷ÿnûÏ´o7dý/æ£ò*OŠ«lú˜ö
+Íú¯ÏÿûJ`üÏ 
+€Õõ_y ‹è&]¤ÑãÂènÿý@Bÿ,@þvÓUÿEU£þëèëÈlhsŽFý‹ºÿÇSXÿ̓Ê3 öBÕt¥ÓèbšŒ.³›$Ÿeˆ£qþÏ«ë?ð=Äÿ°°îÏ9Õï›GqâÌ“|’åz£þíÂÿpºêßÄÎ&™™ðïdÿ÷ÿíÚùYþ0€ý·—®ú&“$.“ñHoh+‡fÿßîú?þ?”o5]õŸ'féo'ùSôï…°ÿ,@ÿvCÿ¯GýmÎÑ<ÿWÿóT ûÏÂzüfÀNž>ÿg6/’Yœ&É£Éþ›dÏÛú]…ü_,¬æÿýT¯áPU¯y«_ýÕçjèU¯2Õ«ó*†C¿z²z
+å°z]Î+`ñ_²ÿ¯ãü_gÿâYÀüŸÝPõ_$e1O’¦Ð¿Šfý×ãÿ=…ç¿ððo‹Y±˜Ï³¼LÆG+`TýÇ‹|¯þ?äÿåößn¨úçéMÛ@Íú¯?ÿÛs%Öÿ°ÅóôŪrÑØ9þ§cüoçøäÿfñ¿vÓVÿåU’_GS³æ/+Ëi²ßüOÊ5ñÿÈÿ´Èõg‹YÙîÝã?<7@ûÏZ~»iÝÿ‹â«NþíÚ7n(̃ôàÏw‘ÿ…nõŸÎÆÉWÙõ6ènÿE†¨Hõ_¤¶ÏþÞÆþ×ç¤ûσ¾Ò¿¡`/$ýϯn‹4Ö£-˜d4ò2-ÓìAítïÿ>Öó  ~«!鿼÷jÿw楏üo<|š¥“4Aø·­ô?Mn’iûst·ÿ2ÈÿÀ‚„ò­†¤ÿ8»Jróü×å  i: Yÿ;ù…üo,X j5´ù¿«(_®×
+@ÑèlÖ¿W÷ÿ…Ö°à>G`3$ý‰n‹Q6EE‘ÅiT¦7iùȳà	óRAÿ, ~«yªý¿Žæçhҿ؍ÿôaÿyX×Áó§ü!àEø^!鶸¾HrÓ0Ë@ÏAèÿðÿñàÌ ÚAÿ.KüâÿX Õïñ_õö_¢ÿÇ„’ÿ²’
 þ9â¿ 0r³’þûŽÿúFüwý³p•š {!éŸ#þë?X€ý·’þâ¿$â?Y@ü—ÝÐæÿâ¿°þƒÄÙ
+Iÿñ_Ð?ˆÿ²›§Úÿ½ÅAÿ,¬ë ñ_vBÒïñ_õñ¿H¬ÿbã»!è_1Ä…zâ¿ Õïñ_õç¿H?Àü/1D˜ÅôÏÿÿ/¹Ù
+Iÿù¿0þcù¿ì†¤†ø/<ÿ‰å[
+Iÿù¿ÿÍæí†6ÿÇÿ¥ Ü! ‹!é¿÷ø¯ºý¤BþD ùÛÌSíÿÞâ¿`ÿYX×Á“â¿&4"ß)$ý÷ÿµóü÷@Ð?ÆÿñÚAÿ‚%ÿW€ø/HõÏ‘ÿý?ÿËnHúçˆÿ‚þY@ü—ݐôß{ü×®ý¡NfE™/bÓ|£%°’þ9òaþ‡Ø»!éŸ#þñŸ, þËnhóñ_XÿÁòÙ
+Iÿù¿  ~»yªýß[üôϺÿËNHúçxþ#æÿY@m¦…þ­üñ¨¸.Góì‹–}ݤ³ËZ0
+ÚöÿU¨õ¯<äÿçÁ…ú­¦ýïüÈ×-ŒÂ›ã?Ý@º¡”Þ.BOwÿÉ@Ûú/³y6Í.o)7B»ú_÷ÿ\ÿ«„DýsйþË«<‰tw ½˜¶ítÿ›ú÷T€õŸ,`üo7õû;âÏÑe2JÇMçhÿËšþ} þ‡(×n:ë?Îò6šß¤»þ%žÿÇÆÿvCÓ—Þ?©ÿïzÈÿÌB/ýäønyêø¿M `³ý÷êýÏÿáñvó4ûß*ü—¢á"ÿ+Èÿh7mõ¯ÿIÇÓ„ä4
+oíÿ3Û¥~ÂÿÃA×ú×W«L:>®]ýoÍÿÈ ùX Öÿ8)âÖçh´ÿª>ÿ§žÿÀÃëÃóçÍ›_“·O³¼>ùè¸_æ퀨ÿE]¶NÒ¨!êúW.âYP¾?p•@°¥õ?ÕÿÎâGÖümÒ}ü¯ÌôÏ€`ém†¨ÿ2½nŸ¬Ùþïè_@ÿ<Èp¨
+i m„¨ÿYÔ§þ·òÿ`üÏÉ! i5DýW+ÛžƒÐÿW
+ñ?,Hý›!é¿ã Hþþˆõß³ÿggþW´ÿ,<àÿQ°¢þûõÿl=ÿkåÿÁúO¤Px¨Åõß³ÿggþ'ÀøLûÚ
+Qÿ=ûêã?%â¿YÕà1à¶BÔÿÞý?xþ‡H a5Dý÷ìÿÙÿ+ŒÿY0ö-€½ô/ü?>ü?ëïëòÿ°ð€ÿGÂ(ØQÿû÷ÿ`þ—…Àó±öÇbˆúßûúûÏžÿa7Dýïßÿƒõ¿,¨ÁP<ôöm…¨ÿýû`ÿY8Dü‡Õõ¿ÿõ?ðÿ° /9 ‹!é¿ããÀHþÿÄúï×ÿ#ÃÝõßÈÿÌÂáù§“£ÓcçðÝûcçüÝé©cÞÂ$ØQÿ=ûvü¿ÊEþÐû³¢þ{öÿìè?Àü/пÝõ߯ÿgWÿXÿÃôo7Dýïßÿƒø/Ñ X
+QÿýúÄŽþì?žzà ”C퀍tÐÿ$Oþ¹Çç?mê_þºÖ6'×ÑlÜåF øÿ‚ÐEýs@®ÿ"ºž›g@ŽrÝ!xü¦‚ƒGûÿÁÎó_ÿÁƒ4—¦ßZúÑÿè:úúð9šûÿõüŸ1ÿÏ‚XUš ;éKÿ(§Åü_Ýþkýcþñ[
+YÿéåÌ<	~¦K¦Y4~äÍýÿºÿ/pØ }»!ë1•WyR\eÓÇ´ohÖ}þßGþo&h ¬†¬ÿÊXD7Éè"Fwûïúgò·›®ú/â¨õ_G_GfC›s4ê'ÿƒ§°þ›9”!f ì…ªÿè&J§ÑÅ4]f7I>ËGãüŸW×à{ˆÿaaÝŸsªß7âÄ™'ù$ËõFý7Ú…ÿátÕ¿‰œM23áßÉþwËÿä)…üÿ,ÀþÛKWýG“I—Éx¤7´•Cwý«À…þYpáH·•®úϳô·“ü)ú÷øÿY€þí†:þ_úÛœ£yþ¯ÿ§ÿÂüëñ? ;yúüŸÙ¼Hfqš<$&û/¼ºþCW!ÿ«ùG¿Õk8TÕk`ÞêWõ¹zÕ«Dõ*äÀ¼ŠáЯ^¬^C9¬^—ó
+˜@ü‡ìÿë8ÿ×Ùÿ‡þ?˜ÿ³ªþ‹¤,æIÒúWѬÿzü¿§ðüþm1+óy–—Éøïh¬ƒªÿx‘ïÕÿ‡ü¿<ÀþÛ
+Uÿã<½i›¨Yÿõç?z&%ôÏ@ÏÓ«ÊE#`äøŸŽñ¿]í¿‡üß, þ×nÚ꿼JòëhjÖüee9Mö›ÿI¹&þùŸö¹þãl1+۝£±ýßYÿå¹ÚÐòÛMëþ__ujô7h×þ»tC±Ô¿ë»í?Ýê?“¯²ëmÐÝþ‹ ”¨Hõ_¤¶ÏþÞÆþ×ç¤ûσ¾Ò¿¡`/$ýϯn‹4Ö£-˜d4ò2-ÓìAítïÿ>Öó  ~«!鿼÷jÿ7çUXÙÿþ_>ÍÒIš üÛVHúŸ&7É´ý9ºÛ
+ä`ABùVCÒœ]%¹yþër Ð4ЬÿüDþ7
+€ÍÐæÿ®¢|¹\7 E£°Yÿ^Ýÿg¦‹¡Üçh l†¤ÿ/Ñm1Ê&£¨(²8Êô&-y<aþOJ蟅Ôo5Oµÿ×ѼñMú»ñŸ>ì?ë:xþ”?¼ß+$ýÏ×Inz fhã9ýÿ þ?|@›!èßÝküWåÿA þ‹Rý÷ÿåíøñü/”Dø—͐ô¿Ïø¯Jÿ/¡0r³’þûŽÿÚŒÿ^ÇAÿ,Ee„&À^Húßgü×Rÿ¡@þ`ÿ톤ÿ}ÆUú×ìÿbñ_vC›ÿÛcüW¥/°þƒÄÙ
+IÿûŒÿZÎÿIäÿçñ_vóTûß{ü×Òþû°ÿ<¬ë ñ_vBÒïñ_õñ¿H¬ÿdã»!è_±äÿRˆÿâ€Tÿ½ÇÕŸÿb £ýç` †ˆ ³’þòIøXÀÈÍnHúßgþ¯µýGþÿËnHúçÈÿ…øO”o5$ýsäÿÂú0ÿk7´ù?†ü_ˆÿfÁ}¢°’þ{ÿªÛÿ@  D ùÛÌSíÿÞòÁþ³°®ƒ'ÅM&hD¾SHúï=þkçùïDü'ÆÿñÚAÿ‚%ÿžÿÌ©þ9òÁÿËòÙ
+Iÿù¿ ÿe7$ý÷ÿµkÿC蟅“YQæ‹Ø4ßh	,„¤Žü_ðÿ° ûo7$ýsäÿÂü/ˆÿ²ÚüCþ/¬ÿdù¿ì†¤Žü_Ð?P¿Ý<Õþï-ÿôϺÿËNHúßçó×ù¿0ÿÏ‚È j3-ô_håG×ñhž}Ѫ/¢›tvÙE
+FáA§þ¿’xþ.Ôo5íìØ5äs£ðöùÿä_t)ÏCü'më¿ÌæÙ4»¼¥Üë_
+%‘ÿ‘…Îõ_^åI4éÅ´m7 Óø¿ªO…ÈÿÀB/ãÿÆß+õû;âÏÑe2JÇMçhÿËšþ}"þ‡ÌÜÙMgýÇYÞFó›t׿4Ë@¡ÿÍnhúïÒû'õÿ]äà¡—þ?ò?|·<uüß& °Ùþ{õþ¿‡øÔsä³™§ÙÿVá¿ýäæùí¦­þ³™YêC;‡Qxkÿ¥ý‚þ?˜ÿ³›¶ú×ÿ¤ãiBŠ0
+oöÿºtCQµR¸a ÿ/]ë__­2éøÈvõ¿5ÿ+‘ÿ‹bý“"n}ŽÆþ¿ªÛ%°þ—‡×‡ç'Λ7¿:'o?Ÿ:gÿx}òÑq¿*ÄÚQÿ‹"ºl=hÔ¿uý+ø|ƒá Ë -…¨ÿ©þw?²æw“îó*ðaÿY,½Íõ_¦×í'›íÿŽþôσRCßÓÍ­?¢°¢þgQŸúßzþÆÿœ" Ðjˆú¯–·=¡ÿ¯àÿãAºèÿÛIÿŸ Còÿøðÿp@¬ÿžý?;ó¿B¢ýgáÿŒ‚%õ߯ÿÇ
+vý?Ð?CObæÇbˆúïÙÿ³3ÿƒøO&žþi5Dý÷ìÿÙíÿ{ˆÿ`!áP®VÀNˆúß»ÿG"ÿ‡X b5Dý÷ìÿñwý?ÈÿÆ‚pá ²’þ%ƒÿë¿X Öÿþ×ÿ ÿø$Œ‚õß³ÿ'ÜéÿIèŸå*_»­õ¿ÿõ?Ð?xþÝõß³ÿg·ÿÿ/"=é)t,…¨ÿý¯ÿýgáñVCÔÿþ×ÿÀÿ¾äh ,†¤—ÁÿãÁÿñþûõÿȝù_üï<ž:9:=vß½?vÎߝž:æ-L‚-õß³ÿggþG	ä`½?»!ê¿gÿÏŽþÄÿó ýÛ
+Qÿýúvõ/<<ÿ…èßnˆúßÿúøY8D`5Dý÷ëÿ;úW°ÿ<xrè
+ƒP±ØJ:è’'ÿÜãóŸ6õ¯ßÁÿÃB×úÏfãä:š»Üÿ_è
+Ô?äú/¢ë¹yì(ׂÇÏa*øñç?Öóùâ?xæòÃô[K?ú]G_>Gsÿ¿žÿ'P.æÿY«*@`'}éÿåòjýcþñ[
+Yÿéå,Ë“ÑL—M³hüÈ9šûÿuÿ_à†°ÿ,@ûvCÖÿb>*¯ò¤¸Ê¦ißЬÿúü¿¯Æÿ,Ð X
+Yÿ•°ˆn’ÑE=.Œîöß$ôÏäo7]õ_ÄQ5꿎¾ŽÌ†6çhÔ¿¨û<…õß<È¡1`/TýG7Q:.¦Éè2»IòYöˆ8çÿ¼ºþßGüëþœSý¾y'Î<É'Y®7ê¿Ñ.ü§«þMàl’™	ÿNöÿqÿß®ý÷ÿŸáØ{éªÿh2Iâ2ô†¶rhöÿí®ÿCþWB(ßjºê?OÌÒßNò§èßaÿY€þí†:þ_úÛœ£yþ¯ÿç©öŸ…õøÍ€<}þÏl^$³8M’G“ý^]ÿ¡ë!ÿ«ùG¿Õk8TÕk`ÞêWõ¹zÕ«Dõ*äÀ¼ŠáЯ^¬^C9¬^—ó
+˜@ü‡ìÿë8ÿ×Õÿ‡õÿ<`þÏn¨ú/’²˜'ISè_E³þëñÿæ/蟃[ÌŠÅ|žåe2þ;Zë ê?^ä{õÿ!ÿ/°ÿvCÕÿ8OoÚf jÖýùßžþúç Šçé‹U墰rüOÇøß®ößGþoÿk7mõ_^%ùu45kþ²²œ&ûÍÿ¤\ÿüOû‡\ÿq¶˜•íÎÑ=þÃsC´ÿ, å·›Öý¿(¾êÔèoЮýw©Uxúséúí?Ýê?“¯²ëmÐÝþ‹ÐU¨Hõ_¤¶ÏþÞÆþ×ç¤ûσôƒßа’þçW·EëÑ€L2šGy™–iö vº÷ÿë¿y¿Õô_ÞÎ{µÿ;ó¿ÚþÃÿçY:I„Û
+IÿÓä&™¶?Gwû/C‰ü,H(ßjHú³«$7Ï] š¦šõ¿“ÿ1PÈÿÆBà¡°ÚüßU”/×€ë hô6ëß«ûÿ ë?XPϱÜfHúÿÝ£l2ŠŠ"‹Ó¨LoÒò‘gÁæÿ¤‚þY@ýVóTûÍÏѤ±ÿéÃþ󰮃çOùc€Vä{…¤ÿÙâú"ÉMÀ,m<¡ÿÀÿǃ/0h3ý»,ñ_xþ/¤úï=þ«ÞþKôÿ˜Pá_6CÒ?Cüòÿð€ø/»!é¿ïø¯oÅCÿ,Ee„&À^HúçˆÿÂú`ÿ톤Žø/IJ€ø/»¡Íÿ1Äaýˆÿ²’þ9â¿ ¹a7Oµÿ{‹ÿ‚þYX×â¿ì„¤ÿÞã¿êã/XÿÅÆÿvCпb‰ÿòÿÅ©þ{ÿª?ÿEú!æYˆ!"À,†¤Žü_ðÿ² ÿ¯ÝôÏ‘ÿã?ÿËnHúçˆÿÂü/
+Ê·’þ9â¿ÿÍæí†6ÿÇÿBÿ¸/ÿe3$ý÷ÿU·ÿôÿƒ@þ6óTû¿·ø/ØÖuð¤ø¯ÉÈw
+Iÿ½Çí<ÿ=PúçÀøÿ!^{!è_°ÄIÄq@ªŽü_èÿ±€ü_vCÒ?Gþ/èŸÄÙ
+Iÿ½ÇíÚÿúgádV”ù"6Í7Z!éŸ#þó?,ÀþÛ
+Iÿñ_ˆÿdñ_vC›ÿcˆÿÂúÿËnHúçÈÿý³ óo7Oµÿ{‹ÿ‚þYX×òÙ	IÿÏ„ÿ!¡]›iÐÿ,']ýv0
+ïÿ%‚Ðèñ_û§Mýg33ÍK?G÷ñŸ+°þŸ­¿Õ´Ñ¿ù§óC7èÞþ‡¡BþGÚ׿´sTõ†
+õ¯D |%eÕþÂý‹#_öû[¿	ê¿}ýKÚ9(õoò¿¢þ÷O§ú'6ȤúQÿtªÿ6ÎÞoÐ}þG(¬ÿãù?즽þg‹ëHk…Ð 4é_¨zþoáäÿeÁÔêè*-0ôBTï¯Ó¢pÜåß“,OÒË™~›ÎÊ$Ÿ&ÑMRí๺ø43Ë€Ì
+²>@V^%ùræþõédÿí¤þŸþíëÿ:¹Ng“Œpކö_ȝõ?B¹ðÿ³pð¶j©³äúcVFÓWN…pÕ@º®óùçoò$Y}î8ëE°]àS‘Œï
+x*”o£Àë¸Loîàá
+ƒÍ'³h«ˆ”º=l8Jóòöþ U™`³À?ò´L.¢øóf¡Í_ñ&&çÑeR¬
+(m;ÃY4Ÿoüý-½¡·y„׳l¶yG_¨Áæw0~Œ.¦[%6ðö͇ѧ™¾ít™Wßú’?g‹Yœlÿέw?óãõü›Gø0.¶ö÷†2ܬ¬ï“x¥×wßA©áVuø4Ë—EÖw„¯¶Žðëâry%G÷»ûéÆMóO?,òùݧÿÝZ°‘Nö_ÐÎA²ÿ
+öŸƒNõïÑÎAªÿ õÏAûú§úJi»ÔýÍóuÿ¿Ðôÿ8€Õµ›Ní?Q¤ö_¢ýç Sý·	öÿó¿;ñÿú
+ü?,¬ë ù_í¤“þCÚ9(í¿ñÿ ýß?mêžEz1%G wïÿ»^€üÿ, ÿo7môf­'ùýË ý? »i«ÿY–_GÓÑurå¤zø&Ýõ/uOúç ú·›MýO‹yœ¾œ=¬"FáÁÃúW
+abþ}_ÿb‘ÿ•×}åº/]G_}÷•3pÁ+å¹®óCžÜ8Â}v`
+ˆeï¾À`»€Ü)0Ü. v
+DÛ¼Ûüñv`§Àx»@¸S Ù.0Ø)0Ù.0¬µíÛÆõK­¢zQ+pQ/ kâzU+0®ð¶ˆA½€_+0¬jv~EX+PûIý:ˆ¸^ vĸ^ vDR/P»bR/P»ªö3'úKêvIܐÞVQ	g°qé׈Z`»€Ø9BX/P?Âve	µs„í%¼I½@ý²^@Ö
+¨zµ]@Õ¾¤¿ó¶ëBTâ6ŽàÖˆZQ/ kd½€ªPõÞv9¬ðk¢z Và¢^ ¬ؾíEՀĮZˆT¸Ú.jÛ«í²¶}¸ÚÖ¶ÇÕös|os{Rmk
+W乫í^mû`µÝ¯mªíãïﭶ׿¿¿Ú^ÿþÁj{ýû/ŸlOéy«›y¸º€“e;ÍF"Ym×'ÚÐr$ÝÕveNäߟh½Ý¯•×_L­l¥2w²ÐÖW¡ðåj»þjp¿=ÔÛÃUyY•÷b¡ß¯M§+ô¾Ø,PH¸Ñªp庀x¸À“íÿfÿo|—=ô)ê<Úÿ20Ûjý?écþ—…Ót¶øêÜèß–f3G¾ÔÍhø"µ»Œ¦Ó¨Lgÿ>K®¢ir-žémq|WV›
+­)}c†BÃø>;¿FårûO>{æüU8Î͏WçC2wtS¾ò†º?éœ}4»³ëëh6vL†‘WNžéÿ²ò§Ó×?Ÿþô£g³"›&?•åí÷¹ÐbÓ]ӍîÁoÇïߟ:Åb>ÏòR…x¾(^8ÎɬL¦Î/Él¡\½Ñ_Ÿ9¯åU2+ÓX¿Ñ›õßÑ"_¿þ-¦ÅÁÏ'ï>¼˜çÙM:Ö‡\?îÆyÿúÌ¹ŽæúðUd µ*Ý΋ÍMÃ$6½éEa"mŸ=´ã²ÔÖŽQu,-t}ßÝ$ãwMvÎ)Üv»Šú×UãHÛ¦¦¯{WjsÇS3ç¼+·±ë$¸PÍç\—ÚÚq<isÎu¹Í]C´8çªÔÖŽÞòÚ¾><?qÞþç‡wõê×Vo÷»Ž£2zx_±³ïê§6žv÷§\·ÝiWï÷õV¯MW8Z—»ßõ¢å®“xg×ɸå®ÉXĵ]“±lµëê´÷»ŠõG›»N£¢Í'3ç'ÇýZÝ
+Zü_GQ_ml^qðu8ç¯?:ÉÌÜRãW¦!rÜçN6ër¡¾šæfª^Ÿ;³äKµQ¬6ê׃t––«ùU“UsžÎ.6ÔZ}Y}3/ßÌ£ËÄ‘g›Û–V7mUÀû|ð9Égº§y—Îê¸Nµö ps§Ìœ»}þÝ1÷ÀSy˯‹¢ñ8u_&™ïßèñèäÃozK8Œ—_B…“dxÁÁÑÙ‰6(ž37—tV¾<0·à+çý‡£só»Þ¸êP_Ý[2£*霼ý¨òg«RÿõA[õ&|s,dU*0¥Äª”óñ×÷§ÿ{kuÄj•BU›j}”7ú¥:Ê‘ÞlŽòÆÅ{ø(gÞ|\Å=Zåhý]‚ê(Áaà
 o|㝣¨oE—æ(•ºÍwÑ]ìå'¯ÏO«ãûËO„ï>vü¾åÙá›_ª£x«ã«ÃÇ®˜øöQ~=?^þVµ>Ê€p”§'Ë£ÈõQ\ÂQþq´ºî÷Wìñ{àÛßeU{Goª£ñóñòVZ§úÜ9?[®“1÷°Þ~jz'î”ïn‚³×ï«êsW•tØí¼͜·ŸÎ^›ÞË$½\ä‘yä’3ɳñÁ›è³QeäTËfuÊ­ñbýǝò~ÖÝ$ÝX8ERj/—Û¶ØÍqÞ¾;:½þøÚù}³èp«=¬Ht³ö‡Þãœ*šo—_Ù™ÍD$áUËS8ƒƒB'‰òé­³lQ«ß[<s~úéïË#ê/¿qÄ­ÖËœõ¯îÎÇÕIÌÇúúšf½2gË–ÎõÁâæhbýñ–I¬Žfø¨³ów§'o7¶[ÜM.?–›'„~âÆÕÑ>ÿ×G§ºÆ?øp´o7GSæãÔ¼Y¶¡ÜßP«¦v}´o7GóV_}³O¹¼«£Unmä6~é7Š›£ùë±Õån\7Íù/_ÿ|ºuÝv‹›£돷z8B7wG«ú)Uû±q´Ýâ•rªáÅÙù‹Êžáünlñ`Ù•™ŒÅXwý×ÁòÃDÞß&/î7Œ++þ‡nŽœß8ސ÷E—&«¢Z¾«eîÿ'›%Îù›·NÍÌÊ@ýSus±j•¾Þß”_½3?gYFÉû2b£Ì²Œ\+¿ëªŒØ:ΪÌYvSýú?Í—0ƒÙ²ú*“,×ú‹¯ªïxP)±Z•oŒúïÞÎr©åÆ·>¨¾É«o~as{Ô>ŸWC‚­Ï«žþýç¦û¾ý¹é•o|®uðn}=u§¤Œ¦óå"Ké}uµªß¨7	Ýת>~¼yç\De|õêþ’®Šé±†ï}£ «6ýüìÅÇô:ɝ“wι>š/çéAéòÓS“Û`iœM'(19¾N’dyÙWeªˆây:JÇ¿ë_#þp¦Ñ<—o…¾W=Âgw‘-vñ·wñZìnï´Øe¸½‹h±ËÅö.ªÅ.ãí]ü»L¶w	[ìâníbÞŽÓ¢a¹½l³·½×fŸ`{Ÿ Í>ƒí}D›}¢í}T›}âí}ü6û$Ûû„ì3z«Gµ:ºJ/¯œêù‚fJ¨4µûÇã;	ÊN’²“¢ìäQvò);”BÊNÊNCÊNe§ÊN1e§1e§„²ÓäñNÞ-ExW?+‹õ»±Xñª÷wY¤£‹¨H~wõ~Ë=ôŸ¯œ•TÁó»É]=ÂÙ´yË#<w
 ~ùpâ¸/¤úæY‡µ³kg•ÞýiÅÆi‡ŸvxZé½ðÂõyß~}x8z÷Ÿï.º°£ÿ¥ù?õ_—Óì"šVo¤3žLÍÿÏšwnî8ܸØwû¾ÿ×YºÓ|qëdúçé8yyÿ¡|ìÃá7>ü”¥öU×0ÏÕ›2»ŸnžL£rsXžŽMÅx"Ï޹¨¯ªë´œ2;øTT‡3èÎ^}|VuMy{ÐiÒ¸è^eõÌ_ýé+çõtš}1ûŠÀ9<ÿ¤{Kç*+çÓÅeõþÀˆ£êžž˜áC¶Èc=Ì«ú›Õصt¼ÁªÛøÃe4嬧_«?žœ¿×‡[žou¸ÀURWÂm©–Mœ¹îŒ™‰33²;xû~¤‹0=9ÿ¹3Ë«ΤcÝ)Aõ¾êÏê
+Ž8øy‘NK=ê6]?“¦°Ð¿Ò©ÒMdù8ÉŸ;×ÙE:MË[çR_êj,›½ÔC5ÓÕtîúšžô܃ól𯷫^dÕ£<øm9?Ñ[q2KË4š¦šóëßöW}²“#ç**®–srºSæ©ù.ž;œª/¯¯|î(ƒå•zvpüµLfÆ7qx¦‡s·º{ÿÊÌX¸?:úÞI/t]돣Ë(zDp6úxrvüþà()“Ø|"‡J½ô”çœýú§3Ï3]›E–¿<8\~ßWú‹Ou%;ÿùËëÿåܯÒ?Xýçwó[îº\[›?ll?¼Jâ弆®Õr‘'/_¾4Ó ¯9w.´ô°}9ýqVMzÏ©P^à}þQð†~|v¢›(V×å÷³óy]ãä¹nô°áóÝ`ö¹#<%?W÷޾\ú@Ž™S}vpxþúÕrš`žeÓjcU	ú*sÓ‰ÕœÅ<O¢å©¿ýÕ<)X¿û¬Y©Ïr©o«$7?lu}Ío'ÓèÖ™fÙÜù¡øœšä1Ït{M‰©‡x1­êaQI³¬“<ùçÂ<=õåKÇÁK=šù9»ÌÎNÎ?8?Lçÿï'S7ºjžé&"^俦}“G×É—,ÿ¼ùí>Wî»WÆÛuc½ÜØþa­O­]&±›õ]›1ᑹ×nêÉ.ß¼…n(ïnBm„ë
+tŬïÂ#À ð}u‡Ï_z&YÎj÷3]ûå#»K?8¨Ú‹Sáœ,¿ç+-ƒßž›
+GV¥äz“Þq½M­·
+ÄpYÐqõýe†žËd4Ërçë6÷|­çäH_Õ§w³<©>©öӣُWI5@¿Ît
+d¹¹Ô«ûßùáã™xv°¬ù
 ë/QZšJHÇú–WúNkûP4OnÒ¥ÖLžîðàåËJ²¯´uŒõ¡r¿*·2šâ'×Ñ-˜øIVoåO/„yo^Wßjåö\:AxÿÌ´5““ÿ^ͤèùr¨~Ñú×7öÒ1àÊ•™Þ~—wm•ý/_ÌKóµï7¯Ûó͵º(¥éÞ75ƒ—zKÕÎÜïø²šÁ4gºk{ñ£8éÜ©f*wšJñ
+Ýmʪ˜'q:Iã•)M–êò_†á®ºôM<Ûǽ¥‚|ò½U}"ZÜ[ßô9‰>§åyžr·ÄëFÞžâv_åúÛþ¹¼!~¯Lœ¹UþaZáB÷ƒ¾UùòGÝx°ò%µò¿Ñ´êÊ÷öRùòGá=¹ò¥ùDR+_v«|ÉVùòÑÊW?Jùpå«~•?ØKå«uçù©•¯Ì'ŠZùª[å+¶ÊWV¾÷£®|¯ßÊî¥òõOýt)<jå{Ý*ßc«|ïÑÊ÷Ç+ßï·òýT¾þ	ª›ïS+ßïVù>[åûV~ð£W~ð=4ûÁÂïÇæÔʺU~ÀVùÁ£•þ(ÕÕ~½ýÐX®^l~H­ü°[å‡l•nV¾®¤Ë«ÒÄ›
+–ŠËi·l¢ßßÝÅÒ']Í—üàC¾”ƒ»Ú|ö²Û:QYêj0ß¡Ðßfübœ]GéìՁ³üÃx˜‹yd¦’½Õdù‡“ŸOOÞþrà,§þ
+miO¿[í Ö;¼W;œ_õ]a} ñÜ×]ë@÷°BóÑjO¹³§	®©üÜw;¿«AVë¯mÎôÐ׎ßþko|eóH_[¶þÚæL}méí¿öÆW6?ôµUë¯mÎôÐ×VNØþko|eóH_ÛëåÞö—÷Þö{¹·}ÝB²ÞÛA/÷v m7ë½öro‡Žb¼·gI9šE׉.kÒšo=|ðöøã+çýÝ̺±egSg]§Ó[GÆa0ÎâÏÎ*1ÅÒe°ž95.¼òvž8ó8Ýœ¡??\Än{¾ôµ1^3ç.d½H.¯Íì~åLŒ?ð…ñ6m Ê“Èx·îv¹‹Óàx ÝeÙå¬éÙÙá»·oN~ÙÚá…­ƒÄ7Šn±êGˆÊ_·ü‚±±‰«_y|h‚‘²ÏÆ~šóšˆäµsÑÌËÎóDÿ{çyY~òÃjQLá|pÂù œþÚ›¹ü+®9íÝüîÚ¹Ž‘:<qÞëΛóóÒeó»ÞàþáüP¹öŒSÏ\úÕ›j¥¸	«:þëÆŠœIž];G®s¤®ôaŽ”®ßñC{­ãD¶?—¤£Ê†£*ÒQUÃQ=ÒQ½†£ú¤£ú
+G
+HG
+Ž’Ž6u@:ê á¨CÒQ‡
+GHG?ª ݯ¢á~5+…	G½ßëÛG½ }׋†ï“Ž7Õ#Õk8ªO:ªÿèQǤÚ?V[ËEͯœ;kq$ýTÖ?î+¶÷­,àÊû¿Ù¦:iæÌ«Üß—kFdµúàÁâJ^¤¥s}fz‹UhýsGÿµŒÎ~xÏÀ[ïiþ½{²²Ôϝde¨Ø=Ü=±¸;±hÚs÷Ä“»OÜõ‰ï/ßÅêÒw«î­½¾QÝ«J!Uԏú­ŸZ¥¸¯ÌåÒñà•©Š×®©{wMݝ‹²ÌðÊ)óh¦û“¹é¼-¹Ñ_9¹ë˼_…UUäq~ÿ¿£?^šÌËÑùûtÜçìý¹ î¨¨;†¤Ϗÿ‹öõŽ>iÇ“syþÈŽ§éì³óûéÛß^ëÎãÉûÿ(ô ÛÓþ@F†Žp¿	á©Gޏë¥>pˆŸ¿uˆ¿	“­¥í!wñ·êk´?ÄÑæ!þ¶ñKÚâøk±yçoZ
+kɽ|üxož~myúµýµÕµ]f871†&¤îÜÌð~X¶G΍ûr:?ÄÏœ×ãèÚùÙLÿÌgs}ÊÙù2ÂÑÄAíŒgóÍQàÖ¯–#GóVCÉõêKs´­C,fYq–›h¿ûaª™\­ÆK= uÆyz£_ºà¤h_üjqñ`áåÜ8ðæÀ±ú¾fĦ/ñÝXímRžFÉôÕV$ØÆæõ½Š³*Ò?ç']ƒÍëÁw¡?úô¶
+j<>rOÎ?¼»ñ6.fSó—þ²ºž˜Ix6÷eß:N&ÑbZ˜õ’¯~ÍŠò.¢÷K:.¯Ï]~tôþ×#ç‡É4º,6Ö‰gë¨ÖÕw’„•]îõþìý{§^DM‚ØØðåâä­íccAv½øö®ñEó®ƒv4ïê?°«ß¼«|`WÙ¸ëÅäÛ»^LšwØ5nÞuøÀ®Ãæ]ƒv
+îvý4û<˾̖t‹2_Ä&Ö´RóÁÉ»³³O¯œu¤u:6‰?Ê[³¾’ÐJhæ ë޲ó»YÕ¿:ñgù&tÍÆ®G‹î6Ü<ZD:šI•´:Z¼y´1ñhb}´ÉÆÑª@ÊÑÜÕÑb¹y4E¼në_ºTÉúhñhë_66$íî—^l-~êuK6Ž6O¬Ó~Ž&{<ZÔë/zý¥Q¯¿ô¾
+é绵8ÚåäëöŽ«Deâ…X§üèvâÕþfUOuÆaÒýËßã>ÑÐ×uò ò±6S}]§¢m#9Ð×ûì^VñÄË*z¸¬¢ÇË*z½¬¢ù²žç‰¸;îœéÎäê€UŒ9èéùag™L6ïÖU6ŸjÂá…uøÏ4/¦w¼t»|üÿí=ksâH’÷™_Q±û¡í„Uz!ˆ‹Å`7t³Æ=3^!	£5 óë/³Tz ¥¢ÄÄÄÝŢޯ å³²ªT¬ÌП-ãyüüÁ¨X”ÇÞ_}aÈ?ö»Ϭd	3“YùàJ‹Ñ»¸Û3Þ)Åj62šxjÃ…d q,
+W;˜KÂάP—º:¹û=óˆGx–äÍ{	Óu™±ÕHã±¶–Ô%Q̦Iìà>pµ1ÔÇ»mNqxO&a¸Ìw©äˆC´Úµ]†èÒÚˆÆÔÕðSC„dxY¸'}uaÀ?ÞÎaÂo€Ž"¾â†Tøu
+€É’.ÖÖ¦SPÀ¯J¹KÁ+(x§Qè$/Q:k!اƒIÚ
+š$	ýxxë6Nᨠ‡`„…·hÄoÝŠ=7¼ªŽnnoûwG 
 ‘
-Ž‚È†ªÈF-‘M‘MΖÈPÉRã²Q¡¸,·þ–Í¡kìkº\-ÂÚS"—e³èZ~#[õ¬tÐÎà(ÄR5ˆUË ¶ŠÈ¶ GAd[Ud»–ÈŽŠÈŽ GAdGUdG]ä6_µ¸„1¼ÓÅ×߇„d›1	k¶øžc|ÍÏhÑŒNôl5ù€þmŽ‚þmqõ¡Eõ¡¿o¨>ÙZVÜUWE1W€£ ˜«jX·–/vTDîpDܩ%²§"²'ÀQÙSÙ«#2_å> òD€³óÖ ©Ò]ÏË€wÝ>÷ÚlµNˆ¥¬„uX‰© çp¹gpË=TÙ>,²GId[Ud»†ÈŠ«‘EïÎ +dÞó¼ýtOzcÎr‚¸äŒÅ6É<z=ÇÛ¸(b¸ä˜%q?þrúη$ŒÇ*zŒÛ¬:bV²2+SÌʳ!+³²Ä¬l1+[€¬ÌʳrĬ²2+G̪-fÕ +³jYa^S+S +³rŬ¨˜ +³êˆYbV† Y™•'feŠY™dUVÅ»p‹»mk°²þ+«+»`u™³×+ꐕY‡Ê Þ˜O›@£¼‘rÀ3±þø6ÍÂ{øóò•ÁÒœ\«ï>¤²‡†ì¡)zhÈx2ž†Œ§!ãi
-Š­ô¶
-EeQnÛ ¹(¢ˆ¶mP¡`–¬0,YaX²Â°d<mO[ÆÓ–ñ´e<OGÆÓ‘ñtd<Û2ží}[ïnƒæˆ‚·A…ò¸2y\Y¸²2pe<;2žÏŽŒgGÆÓ“ñôd<=OOÆs"¨àå@Èm¨’ÑõÜèú–%'2Q&2Q¦2õ§2õ§2žSO_ÆÓ—ñôe<}Ï@Æ3ñd<ƒœgå.±¤o¸C;ŒÆíˆEs’„\i
-¸,Ÿ–ïÇ –•åÓºïH#N?…œ^ ¡wð«2‘	h¤Ðk?! wÉMŽ络pKoY4.cĈ¦Œ×Á2*GðÜVìHg$\`Ž·0f±ko1‹[­Á¼[qãzi4xä“O9gX}ÆŒlÀÌÛø!Ø7,oE_ÉÃcÌ—³"-ÆýÄ–LÞ5Ý¡NÇ2[mÛèÒó% ~³yî?^–#ý2¼LÓÒa<^ƒÂµ<ÿIðˆ_¯Ç]2ãgòÛ&J¼˜øø÷ÁiÙ-ÚàwI5›f¦ÆEH–R[j?.–a±à=ìÚÑŽk•ÒÇeEÏ‹bÎq›ÙS=Ç
-¨lâf·–˜ ¯d¸­‡ž¶®¼мÈ<Ó*VLg¿•K7 e›0Ù Á³›"¾PŒ0V_ÇTÖš`¦1¥Ã1&Xyi†IDyÞViÓ28ÒÒq½8›ØfK£¸ÒÆe” Q	šX@•¹	¦ºjÆqªÇ«¦2÷!ÁTWÍ<N5óxÕTæZ$˜êªYÇ©f¯šÊÜŽS]5û8ÕìãUS™K’`ª«æ§šs¼j*sWLuÕÚÇ©Ö>^5•¹2	¦ºjîqª¹Ç«¦27'ÁTW­sœjãUS™”`ª«æ§šw´jJsLeÕx}Õ
-4óÕÏuJ0ë¨f§šu¼j‡çV%˜uT³SÍ> š·Û±Íü—d[‘ny>Ž–v;Œ5QÌú(V}»>ŠS¥]Å­Ò©â)¡ ÓðtÿéÃ
-ŸØÆ<üÁ•ñºDoٍaš¡L²¤Ö¯á|Ž¡“ì€ð÷ wº‘¾Fñp€$P„6‚æù³1/ØÙ*zżpxF¾}ú­O¿“¾ñ­oÂÿÀP1O¿†˜PJí.MiXéáœEÑLJt蘝ôTdnÃ<g@ºH¯âbBï(Á™‚G.Ày!=^4S.Šfª‹f/š-ÍŠf«‹f/Z[.š)­­.šu¼h¹h–P´Žºhöñ¢Mä¢ÙBÑ.ÕEsŽÍ—‹æE¨‹Ö>^´™\´¶P´ëƒ¢áf‡ü”•ò!/8½9ÙÄïOÑR{‰ð„öyÀ§3³¦ý…¶¾½Ú{\=≀Åöã½Eu³1Ö¡7ï×°õêØ¶Î±-Ö3ˆÙ?yåD”˜a!N—°Ó>pëÃíÅg¶ÍÃ%gxvÎOÄ:G)=ÂÈööhdHæ6Òd
-V_D8õ—½¦¾,C<·†7ó$ÔF :ûy¥Ý®¸ðÐƒ%pœvÉj`.-xy¿€ñ&xöaüŒç(Ìþ’Ñ^yx²¾UpB¡¾ÐK"óàу~Üí¸G+•ƈà¢L«Ž‡›T>¥ø¡Øá®ot–†Øµ›l¯ž$‰…@-„¡¦Í`Ú¦]ÀØ£ÍæÑj•zlzcôiĶªŒÆλ'ëh>gzáV’É–z]zôü¤ruËhMêVcbÆ6FraAò7x;¾vÍÊ
-ÁÓÕO·èò<­xÒÑ æžïƒi†Þ:OºYÆéLµ¿	ð½Ž÷ž¼yzj©±>ê/µ¶éJ#ýÓ%/FËé~_’›ÛA
-™'¥ë ÓòtôV’Ú_¯ï†;ˇ—+ڍ’x	8#Vø8?þŠæË›%ëòðãn²Õ
-v¦MºXñË:ÄN<0 ;²´¸OAއ‹hÑâQ8ˆf¸Ïà	»yS¿¤Iœx at I?(ÕQ·Š‚läSruÃz™q½ËÌåª`ÑŠh M,J¯	m>.1é <Xn¬UDü`²I}¿&]Fak,AB4Ã@(h”poPž)§
-›UN·‰ë„®Žñ°¦N-¨˜¨Œ›Ò#´P!V(X•›y½ÖÉ ˜â‰0:,ú.íîdü+%Ó§(–éV1ökãÓfB¨Ìpb yáô¼¥­GNÖ"ðÓZâúe?)¢ìÄ‘[†YE¡žŸø5üįë'F‘~âÿ!?ñ3?1Ì]?Ñ…~âï'F?1ªýĨô“ˆ‹ËsHoó¸;é#B[”|ø¼
-–vÍGÎ>ƒüçd6³/vl½ùìínëýb¶ôÆFP¡„•¡qdZòEä¡°u<Ô¬"ÂÚ‡ùËšn1õ©ž™Þ¬cz³Úôù#c×ô"Ѩ 6ч¬´ŠB]РõPɐU`ºo /7€UÇ Vµ¬Z0
-ò ŽZ§*
-u
-`Ô0€QÏ vV:ûpsØu`WÀ®a _Š^ù’¬ PÏ ~&ȯÛ‰šI?k‚ø+lË Nn §Žœj8µ j‚êÔ ¿~ä×h‚üºMP»ŠHU
-°r´ë ]m€vµb4׊Oä ñ‘#¦ÃÀ\Lò–¥3„šµF#êÚO½óë¶`•2–Æ
-[ö3rû¹uìçVÛÏ=l?5>árµIºl”¬ÛŽÓ5uÝÀù®‹éT¿`ÓO½1îƒáâÍ„g(‡Á¥½>ò!ö?@Q~L6+?=ãE+Ï×à©Ì,ß"Hž"?Îøg#õè`êä¿‚÷Iä­}òmK®ï8YúiåfK£y8ñp>Ú†®¤Îç–Z
-xð°
-÷ÂR3´Tk´¨Q³ßï¬ls*({#òŒt22Ȉ’‘I¾×(pšÂ6Ó™Ž³[Jƒ´:ª•Q…„²ZOãP'˜%Ee7hù|G÷î{dὑ/ƒa&™.ð䓚.™&söÕš’ÉÂ_xìŸ6uHÁRÐ
-n™‚[¢ÉÀ¦l6+t òód“³ñ8ñ¨¸Þ×cÞ³Û#Z×[QƒVu|oººKíÞ¸	ø½^¿¹%POmÇÿ®‹»+“S½,pâ:ï]òñ²b~êÿÃWÉÑ/L£Ä¬6‹SleêÆŽ´eï*AJÀÔÇã¾o†ó+hçÒ³•ØR´ä`©®,3&þ!„¾ KI7Ô˜ ÷xdÓ²Ú0vÍQ…’ ú‡bÿx¢­ÇN9`Ç¡Jì*
-˜H„¥LFÿÀS{zŸÆ –݈ý‚Ô·Ø÷¾—JÛ¦††1®ä	†WÌ3ÄËŸœ¹à÷^ž¤ói£t>
-óÑl& âIOã`ÉêÄôðÕ« ȏŒâóçM65·wӏ‚óð¹2}&Pv×_zÿFš ÕÅŠ~˜f=vú	x{ÉøaüœºÍÀúíîó°t UîÆ;~Œ¾޼ãZ¢öÏŒ¬ª‡¶ò6^Ó°‡ÏïU ‡[c·±5w[SÖT¥ÆÖ*šJ}¦ó¡-R°¤J­^¦à–(˜åvÊǝy¥ï7O–:ôó¿¢ÍzéÍýtF
-ªE ã¶X„|™ëÅ››ïiW¿Þ›Ú,ÆÅ¤Í’e:ç†Ðô²ðx¸såì`ôòùéïk2kÀK”É3‹"äÙ("kg‹€m´,Ýîçhê9’ú	w„þO–ѱ:NÛè üqégÖõÉxxÏÀ!긞CâE±‘Ÿy•)Uv­WÞ«çÃjJXàIyW~þ¨ËVËØô'"3/Ä’b…¬×P¯5Ãh¬“éÃtÅ’)Ù[©É@)ø®#‹qòÖì"¢óGK<·~™<5É»ùÜ$¸FŠþÊuÍNe¼Æ7V m±˜¦sŒ]b¹oðŸLý‹õ+yó.p™Ñ€Ÿ¾‡	ßó…HÞÔð©É;~€{ÞXБ×E›”7Z¬©âhÀ¼?­¦O+ðýÄÃüþnäM>ÊU,…áX¹K°¥ëËM’@îìúú\ìyØÃø·Ñ/w×y‡s<‚Uþ¼?¬ gmµÍÛ
-òX?êiRmYiÀ4Î"
-öù6þ8ºüÞ¸ôÒ„~…ƒOÄ“/âmìà”U$d-ožCðçðÑÃ~WÉ®·%äS¼FëçÌHZ±ž×‚šnkÏF£­Þ×!žˆIÍ
-]w9ÿ~„õ‰½ZðqÂÊOqPŸÓÞG–i³}X?ðÇ%ï*î£C•‚Ï38è-ûçÉEÜý…eü~³Î±òS³kèÝY»Ûît;z%…Ñe|Š ÿ¬S}6Óà¿ ”Ÿ¶5¾Õ~-®Š[Ä"ë7òÛ&Øgñy~&ÅÏ]2ÂÙ¢Ê}ûûÈ5J—þ±Ò¥¬l¨zéÒJ
-‡K—YºiDN1F„G'áüضÆÚ:Þ\¦oh“ÄØ:Ý­±ð¡•Ø$š€0w=¼zkh}ã{<žzË%Û&Çç•ØwN&ñ€¼³	Æ^àoÜ˜Ý|þtÕj¤à&ÅýŒ°ü2é–ª¯Þ2wÂú>ð’hQÌì9Ã
-­é–f`ŸîˆñˆV¡ùèO‡·Ü“—´¦Ñb— ®¼äi›±…½`†\q¼Ž½ãfjè Þ:¦GT4é3õ|
-EuÛ0,÷™Ä¯Þ
-Y\€ºØ£™Fë0‚ÁÂ{W£$xƒj“Ä]J¼é:ŠáÇlÜö4Ó ÃnOqò_æo]»lRÃòÈß’ðqí-ÿî…/Þï¡·lÍb¨MPÀ­Íó6fázC"ìe€‹ÆiY¬ƒÚ‰^èŽF=M7NJ µ„‡Ýì´^òÏçÿûæÌ}ÂÀ ŒéÙÖUð¬Üa¦ ļ^‡¦è%÷é¶ŸƒÑ/+p!qFãz˜ƒ
-ôàÞšäç˜y¨Kî~½¸ÿµq7êoÅÛlü?—i„Wk*™Š r
-ÿéC?Qó½ :›L¿˜˜KÙ›‡ç‡pïŒÇ‡eCÙ§Ó‚óÆå|$Q„Õ9‹œNg™´Œ‹SÒ|¸iþr€!ÙÒ{Ö[Óª;ˆ|·òÜ{¯†ûhôaDÊ¥Ó÷Ÿ¨Ð¸»îë€Þßÿ·\Õ¶-×Íí`DÎn6P ¥À€+h?Y÷éœ#.i ;ºÅØš¥4å6IØ Ç´//¦ÛÑ‹“î«€F«áO½<œ>Ë(o«±€ÎÕ¡b}-î¶ÌéKœ?âu ]ÕÑ«Î,UAAÖVôŒÎ(ûð»´ ™MÔøŸP€žÿ>|æ‹ß8»ï„m¾f:˜í Í’ÓsìôÑÆ]¨¸ùð#:þÿópúgêø¿O¼Âiq׺µeâz&ô''KýÎ24ÉìUXÄMòKŸ\ñˆäú5íTONõäÿ.ñ?«žüÇé:]§ët®ÓuºN×é:]§ët®ÓuºN×é:]§ëßîú§ X 
\ No newline at end of file
+Ž‚È†ªÈF-‘M‘MÎŽÈÐÈRã²Y¡¸,·þž­¡kìkº]-Â:P"›—e«èZ~#ÛõìtÑÎà(ÄR5ˆUË ¶ŠÈ¶ GAd[Ud»–ÈŽŠÈŽ GAdGUdG]ä6ßµ¸†9¼ÓÅ×ß§
+ÉcÖmñ3ÇøšŸÒ¢lœèÙnòýÛýÛâæC‹æCõ¾}¤ùd{AZqCÔ|\Å\Ž‚b®ªaÝZu±£"rG€£ rGUäN-‘=‘=Ž‚ÈžªÈ^‘ù.÷‘'œ½·Më ݯyð~µÏkm¶['ÄRVÂ:®„/À9^îÜÑrÏ •E¶‹,ÂQÙVÙ®!r¨RUBŽ‚È¡bíÎ d>ò¼ÿüHzècÎb‚¸ä‚ù6É<~»ÄÛ¸)b¸ä„O%ñ<þÒÿàÇ61ÌÇ*FŒ»¬:bV²2+SÌʳ!+³²Ä¬l1+[€¬ÌʳrĬ²2+G̪-fÕ +³jYa\S+S +³rŬ¨˜ +³êˆYbV† Y™•'feŠY™dUVÅ»p‡WÚ ×`eýVV-VvÁê:g%nWÔ +³
+•¼'0ž6N;|'e‡tfbãñ]š¹÷ðçå+ƒ¥9¹VßHe
+ÙCSôАñ4d<
+OCÆÓ[ÙémŠÊ¼ÜvAsQDm» BÁ,YaX²Â°d…aÉxÚ2ž¶Œ§-ãiËx:2žŽŒ§#ãéÈx¶e<Û‡¶>t,ÜÍ%9î‚
+åqeò¸²2peeàÊxvd<;2žÏŽŒ§'ãéÉxz2žžŒçDÐÀËŽ»P%£ë¹ÑõKNd¢Ld¢ø2õ}™ú¾Œ§/ãÈx2žŒg ãÊx†2ž¡Œg˜ó¬|Ãe –ô
+w줓Ѹ1o®P+
+—ÅÓrà}áÔ²²xZý	ĉ’ðPˆéÕz³X•‰L@#…€^‡Á ¹KîrÄ$?å„GzË¢q1#F4e¼—qÙƒïèù°âDr4%Ñc¼E	ó
+\{‹iÒjµÆÝJ·ë0Lã Á£€,xÈ9òèFdfÞ6ˆÀ¾Qù(ú2ÜÌÑ­1Á8prQıEÿ¢Ø–)û †¡;ÔéXf«m]zY¢Äï¶ÏáãO×eO?ƒ¯Ó°tè×D§p-?GÒIãçÛq—¢ä…ü¶7^Büûä´ìmð»$‚šM3Sã&$)È-µHž˨ØðÁíhǵJáã²¢çE1æxÌlÇ/I;€¸Ã­%À+n硇ٖ¢•·"¯
+B/À°Š• þô·ré]pGÃò´ì° ˜»)æÅbóÕ¸Oe­µ	fêS:cP•—F˜D”§ð}•†1-ƒ#-÷‹³…m¶5Š;m\F	• ‰TY‹`ª«fœ¦šqºj*kLuÕÌÓT3OWMe­E‚©®šušjÖ骩¬íH0ÕU³OSÍ>]5•µ$	¦ºjÎiª9§«¦²v%ÁTW­}šjíÓUSY+“`ª«æž¦š{ºj*ksLuÕ:§©Ö9]5•µ@	¦ºjÞiªy'«¦´ö(ÁTV×W­@3OPíøZ§³ŽjÖiªY§«v|mU‚YG5û4Õì#ªyûÛ¬þr€ì(ÂÍc/ÀÙÒþ€±&ŠYŪb×Gqꣴ룸õQ:õQ<%¬4<ܺÁpÓ'v0°@e<AC—è-»1L#”iCÔú-šÏÑu’%8€úâI7Ò×(&Ø„ŠÐæIÐ<~6Æ»XÅoïÃÌ·O¿õéwÒ7¾õMøcâ˜*æá×J©ÝÅ¢)M+=\³ˆa"úü”N³LOEä6Œs¤‹ð*.ôŽ7¸Rð̸,D£§‹fÊE£BÑLuÑŒÓE³å¢BÑluÑÌÓEkËE3…¢µÕE³N­#ÍŠÖQÍ>]´‰\4[(ÚµºhÎé¢rÑ¡huÑÚ§‹6•‹ÖŠv{T4<,ð”gY)'yÁåÍÉ6ùh|Ž—ÚkŒÚç!_Î̺öWÚ2øñjïyõŒ‹ãǯz‹êfc®#oÞ%®aëWÔ±mc[ld°$™yå@”„a!N—°lxôáþê;æá’̝ó±.QJ0²½$Z ’¹‹4YƒÕ1.ýe¯©¯Ëó֐áv¾‰´¨Î~Þh÷ƒ.|#
+§çp	ý.YÍCŒ¥/ò0Þs&/˜Gaú—ŒöÊÃÌøVÁ …úÂ(‰ÌÃgÆq÷ãA¬T#€wŠ2®:&7©|Jñ)B±ä®ïtšºØµ›ì¬f’ÄB ÂPÓf0mÓ.`l„ѦóxµÊ
+#6½1ú<bGUFã+×Ý7ëx>gzáQ’É–Öº4ôü¤ruËhùõ «±ˆ0b#¹ˆ± ùÁL„ÃÒ×®YY!XÃ_m1»E—Çi}ÆLGK ˜{A ¦zë<tèv™¤+ÕÁ6Ä÷:Þ›yó4k©qŽ>꯵ŽéJ#ýÓ%¯FËé~_“»ûA
+YMJ÷AüòrôNÚ_o†{ÛÇ·+ڍ’x¨ŒØà“<ýÍ·)¶K6äáén²Ý
+–Ó&ݬøeá €YXÜY˜cr-^CL…ƒh†ûÒg8Ìóƒb^qâ%ýÜ¡DìTGÝ*
+²™OÊÍe&]fU®
+­ˆB×Ä¢ôšÐÙ&ÑóƒÀƒåv1Á†PE$'Û´îWäÛ(l‚Hˆ§èž
+Ê#åTa³Æé6qŸÝÕÑÖÔ©
+³u‚ySšBb…‚M¹™·kB3ÂXXa±îÒî^äÀ¿RâÏâ$\¦GÅØ/l³í„P
+˜á òÂi¾¥GNÖ#ðl-qƒr=)¼ìÄž[†YE¡^=	jÔ“ n=1ªˆ©'Áª'AVOs¿žèÂzœ^OŒ:õĨ®'Fe=‰¹¸,ñ˜CzÛç-ØI·Ú¢äÓ—U¸ü´o>rñä¿$ƒ´›E`x±cèÍ`ï÷{ïW³¥7¶‚%tø«t«  «¡(_E5´¶N
+5«ˆ°~Æaõ‡E
+M‹˜º¯g¦7ë˜Þ¬6}þÈØ7½H4*ðM4Ä.«­¢P× ´†h=T2d
+˜ÀË
+`Õ1€Um «–ŒÂ ƒ¼ˆ½Öi§ŠB]5`Ô3€]E„µ€Î¡ÜÜ vØÕ°k »¢W¾$+(Ô3 at P£
+êvA¢n2Ⱥ þ
+Û1€“À©c §Ú N-ˆº :- ¨ß5º  nÔ®"RÕ¬Ü í:hW ]m€ÍÃ5‚¢ÅŒ >’àsÄt˜«€AÞ²P`†P3£Öl¤‚B]û©÷`AݬRÆÒ\aÇ~Fn?·ŽýÜjû¹Çí§Æ'Z®¶›.›%ë¶ãtM]7p½ëÊŸƒêWìqú©7Æ}0\²ðèe7¸tÔG>%Á'(Ê0HÈv¤9^´òz
+fefñøáfIÆ?›©¿Â S'ÿ~Lboo;r}ÇÅÐO+w[mÌ£	̇óÙ6%u¾¶ÔjÀƒ§U½–š¢¥2X£E*˜ÃqgeŸSAaØ‘od¤“‘AF”ŒLò½FÓ¶™®„tœýR¤ÍQ­Œ*$”µªÄO"`”•Ý åð*Ú¸÷Ø#ï|{WÔ4‰¿ÀÌ5&5]âoæì«å“É"XxìŸvuHÁRÐ
+n™‚[¢ÉÀ–l¶+¬ äÇÉ*!ãñÆÛ@Ã¥ð¾óN€˜ÝÑZ¸ß
+ˆôªãGÓÕ]j÷ÆMÀïõú́
+xj;8ÿw]<]¹‰1ÔË.aðÞ%?]÷@ÌÏý ãj3#ú•i”˜•Üfq‰­LÝØS‚¶ì}%¨@	˜A‚ú˜žágâMq½sý\š[‰-!ÅK–êÊ"câBÈàç)ÉàŽ:ôlZVæ®9ªPr À:A B±<ÐŽÖcYXÚ!T‰]Eó„DXÊdôÌÚÓû<±ìF¤¾%÷½TÚ654ôq%3èÞ0Î/ráB½wÈðúR@ ]O¥ëi8™§SØ3=Ã%T¨ÓÃOT¯‚ OÅ×Ï›liîàf‡	Æ;àkd0úB ìn¿öþ4%@«‹?ü0Ìz,û	Ô.ö’	¢ä%­Z4ë´‡/ÃRB«¼ïÕc¬kP‘÷ª–¨ÿ³3«ê©m…¼×4ìãáó{è±ÎÖØïlͽÎÖ”u•F©³µŠ®RŸê|j‹,)…Rg«—)¸%
+f¹Ÿ
+0 at gÞAé‡Ý“¥ýò¯x»^zó ]ƒ‚j¸-ßæzõæÄægÚ“ÆÍ¯¦6Mp3i»d‘ΣyÈG&ot½Ì=îãZ9KŒ^Ο>àþþ¸'³|°Dùñ×<R°ÈCž€"²öŽØFËÒí®q‰¦ž#©ðAü`«ã´ÊŸ”~fÁQŸŒW¡÷‚¢±€û9ô)YùY­2ES£Ê¡õÊ[có|Zù„9ž”Oå珺l·Œ-2 2õ",)V¨áz
+íZ3ŒÆzã?ù‹8a@èаñÉÁNMJÁw±˜“·^à+¼Ä¼õËͬI>Ì—&Á=R¬oI1¨\×T&kœqcÒ?]cìË}¿‚ÿÄ®ÖoäÝ»ÂmF~<þÈ7"yW×&x÷.¼±` Ÿ¬‹>)ï´XWÅÑ€y#™­üÙ
+êþÆÃøÁ¾çM¾ÊU,¹áXy•`[××ÛÍFt··—âš‘»=€ýòp›8Çó0\åÏûÃ
+rÖNß¼« ߀%ɳžÕ–•FLSàÌÓàPoãŸF×ßwƒ^Я¨àñâ‹ø;TÊ*²ž7!øcôìa¿›Í÷Û6äs¸y‹×/™‘´b?¯-ÝÖ^ŒF?^}¬#́ˆAÍ
+]w9ÿ~Œí‰Í½ZèyÂʳ8¨¯i"Ë´9„>®ÔÇ%*¢C“‚Ï8ì-ûÇÉUÒý…Eü~·.±ñS³kèÝi»Ûît;z%…Ñu|Žaü¬S}:Õà¿ ”gÛßk¿‰«’±Èúü¶
+·áErÙ„Ÿ›âç>ájQå¹ýCä¥KÿXéRV6T½ti%…ã¥KO,ÝÔ#—c½
+wž¶­1‡¾Žw—éÄúä
+bìdwk,è%¶›˜OM@˜‡L^½5ô¾I‹=ûÞrÉŽÉñu%ö“IA<  ïl‚¾øf÷_>ß´)¸†ÁGñ<ã,¿ÜtKÍWo™û@QcxI´¨fö‹\`ƒÖtK3Ћ…/w$˜¢5XhÖ§¿Ã[næmZ~¼Ø'Èf…+o3Ûelgn/8€!·cœ¯ã踙š@„„NMÁSÆL½ @CQÝ6Ë}!É›·BW îŽèA¦Ñ:Ša²ðÑÕ(	ß¡Ùl’.%ž¿ŽøÂ1÷=Í4È0‚Û>NB¾âË<ä½k—-jXùÛ&z^{Ë¿{Ñ«÷{ä-[ÓZpkûòŸi´^à”GPE“4Š,¶Am‹D¯tG£ž¦gH%H€ZÂÃn–­—üóeü¾ýÄ=sgè´‚9=;º
+5[¯0>:±Z¯CSô’û|ßO“‡Àdôë
+ªN†¸¢q»ÌÁFpïMr‹kÌ|DÔ%¿^=þÚxõwüm¶ÁŠ'ÂÉeêáÕ:€Úø"¨\Ã0NÔ/„Á&Ó/!¦ÁBöæîùÜ»àþaÙT6Âå´ð²q=߆›8ÆæœyN§«‡ÇœƒLZÆÅ%i¾ŽŽœŸ¿`J¶ôžÃõβê"?­<÷>ªá~2ú0#åÒé‡OTh<Üö¿‡u@ÿ[	.õjÛ•ëî~0"w[(€’cÀ
+ôŸløtɑޗ4ÇÝbnÝÒ+šò»$쀓F:ÓýèÕIÏåÃKÏU@§Õ|/w§ÏÝ2ŠÎÛj,`°GõghX?w[¦ÿšäxhW
+ôª#KUPG„
+=£óÊ>ýî†-èfÓ”ßà
+оÃ'ƒÏêâ7Îî;a‡¯Ù†F;h³àô;}´†y*n~'<EÇÿcâ~ú¦ŽÿûÄ+*-žzÂjm™¸Ÿ	ãÉÉ2X°HM2}q“üÒ'7Ü#¹~K;·“s;ù¿KüÏj'ÿq¾Î×ù:_çë|¯óu¾Î×ù:_çë|¯óu¾Î×ùú·»þqø\À X 
\ No newline at end of file

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8em64t-4c2t.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8em64t-4c2t.tar.gz.output	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8em64t-4c2t.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,31 +1,31 @@
-System(992MB HP=0*2048kB  )
-  Socket#1
-    L3Cache(8192KB)
-        L2Cache(256KB)
-          L1Cache(32KB)
-          Core#0
-            P#0
-            P#4
-        L2Cache(256KB)
-          L1Cache(32KB)
-          Core#1
-            P#1
-            P#5
-        L2Cache(256KB)
-          L1Cache(32KB)
-          Core#2
-            P#2
-            P#6
-        L2Cache(256KB)
-          L1Cache(32KB)
-          Core#3
-            P#3
-            P#7
-depth 0:	1 System (type #0)
+Machine (phys=0 local=1016272KB total=1016272KB)
+  Socket #0 (phys=1)
+    L3Cache #0 (8192KB)
+      L2Cache #0 (256KB)
+        L1Cache #0 (32KB)
+          Core #0 (phys=0)
+            PU #0 (phys=0)
+            PU #1 (phys=4)
+      L2Cache #1 (256KB)
+        L1Cache #1 (32KB)
+          Core #1 (phys=1)
+            PU #2 (phys=1)
+            PU #3 (phys=5)
+      L2Cache #2 (256KB)
+        L1Cache #2 (32KB)
+          Core #2 (phys=2)
+            PU #4 (phys=2)
+            PU #5 (phys=6)
+      L2Cache #3 (256KB)
+        L1Cache #3 (32KB)
+          Core #3 (phys=3)
+            PU #6 (phys=3)
+            PU #7 (phys=7)
+depth 0:	1 Machine (type #1)
  depth 1:	1 Socket (type #3)
   depth 2:	1 Cache (type #4)
    depth 3:	4 Caches (type #4)
     depth 4:	4 Caches (type #4)
      depth 5:	4 Cores (type #5)
-      depth 6:	8 Procs (type #6)
+      depth 6:	8 PUs (type #6)
 Topology not from this system

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8ia64-2n2s2d.tar.gz
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8ia64-2n2s2d.tar.gz	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8ia64-2n2s2d.tar.gz	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,79 +1,84 @@
-‹ ¨
-J íQ“ÛÈu…÷y…~@b£4@úÍ.ÕV\I\©²TydaHˆD‰"X$gÉ¯8³£á€ò8‹{v£{>Û‘½bÄ›и}úö¬©Šü_ÓÝ*íþõÇLH:ÊÏ¿†2&ÿ;äù㯿ðCi’Æ$ÉC÷ÏCš•Ùï¢Íóšûã©:¼{÷Ãݺ]o›Ý¯«GÆÄeöjüGƒïÀ°ñYYÄ,†î÷C–¦…ÆŸÁõø¯êŸ›e=å÷`üøçE÷2?>þÝ?Õ_¦øŒÿЍѽNãÏàæø/÷÷¿ö;0püC‹<&ÙyüËBþS4þÝŠ_ñ%á’&çù_YdòŸÂðñ?µûvÛ®ÆFη?`üO›C]­Çæ®û¼Ö>“ó çOãýíñOÓÞøç±èüOìÿúîÇÿyþåé—<ùñ·þ‰ÀÿýæáØ,«íb_-?WëzѬÞ~›þwοö?fE)ÿ¤±ñŽü_¶‡ÛÎ_rÛÿþý?KÎõ?ùoOý®Aý>û‡æÿi.ÿ)ôæÿQó_÷Y-75TWÿ-;ÿ“²»¨þC`ìø7»Uý?鸯Áøú_÷Pý8þÇæëÁïq{þûã_F=ÿSèžÿÿ]·|¿€þW§Ó¡¹»?ÕC”¸éø:ÿ¡ÌÎóÿPÊ
-ÿ}hNõ_ªåg]\úzØÛÞÿ=ÿSx_*©ïÐÿmýs½ú@ý?œóòßžTò»ôÙnêC½[>,:gΫo•F¬ÿÿ2ÿ/’,•ÿB:ÓÀ1 ÿÿ¨Ž‹öÓ¢:ÛeSšŸ›ÓÃ?{÷ÿgÿsùÏAöû­ÿoªC½Zt¿±øRío¼°þ_F=ÿSè­ÿ+ÿëÐÿÝý—»úpžëÓ--ÆÏÿ»ë@.ÿ(ÿëÈÿÄ>ÿqÎÿ+ÿa8þç?úû?Ò2êúO!(þáÐÿ‰ó±ŸÿH»[‚ü'ð˜ÿø°9´÷ë.þ ý·ÏèþOAù߀þ›ç?å?)hÿ§o@ÿ'ÎdWùTþS(r] <úoŸÿÐó?éï´þožÿÐó?å?|ú?qþ£?ÿï®ÚÿAAóß@þg„þ©òÀñŸ8ÿQô®ÿi©þŸB7ÙVÄ/ ÿÓæ?’pÝÿCù
-Rß7 ÿÓæ?ÂuþS÷ÝO‡ûå©iwº8ôß¾ÿ‡öÿRPÿ߀þÛ÷ÿÈä?õÿð
-è¿}þCþSý¾AëÿFùçú_©óÿ8ôò‰ò¾ ýŸ8ÿÑßÿuþ‰óúŸ”÷äNÈdÊ0 Çß*ÿñ²þ£ú/…yª žý·>ÿ%M”ÿ¥ ó_|ú?qþãjþ§þ$>îšOM½’ýNý·Ïhý‡B&ó]úoŸÿÐýŸ‚ò¾ý·ÏÈ
-sÙï´þoÝÿ£Pÿ
-Êøôß>ÿ¡ý_fa®- ށü„üG¢üpü­Îyéÿ¡ú/¥?|úoßÿCõ
-’ß7 ÿöý?´ÿ‡‚úøôß>ÿ¡ú/ÿâÐóó_tþõö
-è¿}þCû?(Hß õóþªÿSèå?tþ‹3@ÿíÏÑþo
-šÿûf¨ÿé¸ÈÇ+Fç?BwûÊ0>þ§vßnÛõÃø/ÂèñOCL¢ÆŸ0þ§Í¡®V‹cs×}^ëŸÉˆùÿsþ;zþ§Ð›ÿ'šøð¿y86Ëj»ØWËÏÕº^4«·ßcüú_Ìä?=ïûðÙn;Éxÿ3=ÿ“Ðú¿oPÿ‡Ïþ¡ù÷/ùÏ ?ÿº¸b¸ÿOõä=ÖB‹<&eçR&ÚÿEaìø?®ÿŒ,¯ÿ¥I¡úpü'Þÿ¯òÿQëÿÒ¨
-€žý·îÿ|þEþPÿg߀þO»ÿï÷ÿÀá}uª¤¾_@ÿÍ÷ÿ%ÚÿKAÍŸ|úoÞÿYçÿqPÿg߀þ›ïÿ“ÿd¿oÐú¿uÿç¨ç
-ýõå}ú?ñþ¿þüÿ|ÿÒXÈxÇ@þ'„ü‡Îÿ¦ Ž¿Uÿç—ü‡®ÿÔÿÙ7 ÿç?úç¨ÿ3‹ÇüLJ͡½_ot!ðè¿}þC÷
-Êøôß>ÿ¡ü'íÿô
-è¿yÿçTþSPÿ7߀þÛç?ôüOAúû­ÿ›ç?ôüOAù߀þ›÷ÚÿAAóß@þg„üG¡üpü'Î:ÿû7"t“m%@üúoþ·òÿ¤¾o@ÿíÏÿÖýŸ‚Îÿö
-è¿}þCû)¨ÿ‡o@ÿíû”òŸúøôß>ÿ!ÿ)È~ß õóó¿uþ…~þCçùôâüGÿ§Îÿfq^ÿ“ò~üÏ	ùRùàø[å?^ú¨þKažªˆg@ÿíÏQþ—‚Îñ
-èÿÄù«ùŸúø¸k>5õJö;ôß>ÿ¡õ
-™Ìw
-è¿yþ#ÓýŸ‚ò¾ý7ÏÈsÙï´þoÞÿCý((ÿáÐûü‡öQ˜…¹¶€8ò?ò¹òÀñ·:ÿåkÿ¨ú/¥?|úoßÿCõ
-’ß7 ÿöý?´ÿ‡‚úøôß>ÿ¡ú/ÿâÐûó_ä?õö
-è¿}ÿíÿ  ý}ƒÖÿ­û¨þÏ¡ŸÿÐõÀ ÿöç¿hÿ7Íÿ}3Ôÿ8.òñŠÑùP™ò†ÿ©Ý·Ûvý0þ‹0züÓC¢ñg Œÿis¨«ÕâØÜuŸ×zÀg2bþÿœÿŽ…êzóÿTùo_ þï7ÇfYmûjù¹Z׋fõö{Üžÿ—=ÿcVjýŸB˜³¢”ô^ü_¶‡ÛÎ_2¢þÿ¼þŸ¨þÏA÷{ß þŸýCóÿî	@þ3èÍÿ+]|1Üÿ§ú?òë?!ëžúc÷,Ð]Ê$Sý‡ÁØñ\ÿIí÷ÿ•ªÿQ ÇâýQýŸ#Ò¨
-€žý·ïÿ,ÿ)¨ÿ³o@ÿ§Ýÿ÷û¡ç
-ï«S%õýúo¾ÿ/hÿ?5ò
-è¿}ÿg­ÿSPÿg߀þÛ÷–ÿd¿oÐú¿yÿg=ÿSè­ÿ+ÿëÐÿ‰÷ÿõçÿêÿÌ"…ŒwäBèÿ\(ÿÁ «þÏ/ù]ÿ)¨ÿ³o@ÿ'ÎôÏÿÈC©þ/ó6‡ö~½Ñ…À ÿöùÝÿ)(ÿáÐûþÏÊRPÿg߀þÛ÷–ÿÔÿÍ7 ÿöýŸõüOAúû­ÿ›ç?ôüOAù߀þ›÷Nµÿƒ‚æÿ¾üÏý?‚òÀñŸ8ÿQ\ÿ]¨þC!t“m%@üúoþ·òÿ¤¾o@ÿíÏÿÖýŸ‚Îÿö
-è¿}ÿíÿ¥ þ¾ý·ïÿ‘ÊêÿáÐûþòŸ‚ì÷
-Zÿ·>ÿ[çÿqèå?å?|ú?qþ£¿ÿ3êü/çõ?)ïÈÿœÿH•ÿ` Ž¿UþãeýGõ_
-óT@<úo}þKš(ÿKAç¿øôâüÇÕüOý?H|Ü5Ÿšz%ûúoŸÿÐú…Læ»ôß>ÿ¡û?å?|úoŸÿÿæ²ß5hýß¼ÿ‡úÿPPþÃ7 ÿöùíÿ¢0smqä œÿR*ÿÁ «ó_^ú¨þKAé߀þÛ÷ÿPý‡‚ä÷
-è¿}ÿíÿ¡ þ¾ý·?ÿEõ_
-:ÿÅ7 ÿöç¿È
-êÿìÐûü‡öPþ¾Aëÿæý?Tÿ§ÐËèüg€þÛŸÿ¢ýß4ÿ÷ÍPÿGùòŠÑùP™úP>þ§vßnÛõÃø/ÂèñOC<Ÿÿ­ñ·ÿÓæPW«Å±¹ë>¯õ€ÏdÄüÿ9ÿ5ÿçЛÿ'Ú
-æÀÿýæáØ,«íb_-?WëzѬÞ~Ûóÿ²çÌ
-Õÿ)„yQ-ºðÙn;Ɉúÿóú÷oùÏ@êûõøìšÿ§¹ü§ÐŸÿWº¸b¸ÿOõä=ÖB‹<vÏÝE Ltþ3…±ãÿ¸þ“öÿ©þGÿ‰÷ÿÅ«üTþŸBµÐ3 ÿÖýŸC)ÿ)¨ÿ³o@ÿ§Ýÿ÷û¿ú?sx_ôÈïÐûýêÿDAÍŸ|úoÞÿYûÿ8¨ÿ³o@ÿÍ÷ÿɲß7hýß¼ÿ³žÿ)ô×ÿu=ðèÿÄûÿúóíÿc‘ÆBÆ;ò?!ä?rå?€ãoÕÿù%ÿ¡ë?õö
-èÿÄùþùy÷:ùÏà1ÿñashï×]üúoŸÿÐýŸ‚ò¾ý·Ï(ÿIAû?}úoßÿYþSPÿ7߀þÛç?ôüOAúû­ÿ›ç?ôüOAù߀þ›÷ÚÿAAóß@þl
-å?tþ7pü'Î×ç«þC!t“m%@üú¯ó¿¿¤¾o@ÿuþ÷w‚Îÿö
-è¿ÎÿþNPÿ߀þ›÷ÿÐù¿ÔÿÃ7 ÿ:ÿû;Aöû­ÿëüïïƒ~þCçûôâüGÿgÔù_$ÎëRÞ/ÿ¹}þ£L”ÿ` Ž¿Uþã¥ÿ‡ê¿æ©:€xôßþüå)èü߀þOœÿ¸šÿ©ÿ‰»æSS¯d¿S@ÿÍóAë?2™ïÐûü‡îÿ”ÿð
-è¿}þCþS˜Ë~× õóþêÿCAù߀þÛç?´ÿ‹Â,̵Ä1ÿÐÿ#*ÿÁ «ó_^ú¨þKAé߀þÛ÷ÿPý‡‚ä÷
-è¿}ÿíÿ¡ þ¾ý·ïÿ¡ú/ÿâÐûó_ä?õö
-è¿ýù/ÚÿAAúû­ÿ›÷ÿPýŸB?ÿ¡4¨/@ÿíÏÑþo
-šÿûf¨ÿ##¯ÿe‘©ÿ…áãj÷í¶]?Œÿ"Œÿ4Äóùß{€ñ?muµZ›»îóZøLFÌÿŸóßQóýù¿Â ¾ üßoŽÍ²Ú.öÕòsµ®Íêí÷¸=ÿ/{þǬPýŸB˜EÐ" [ ÿ—íá¶ó—Œ¨ÿ?¯ÿwS@ùÏ@û½|ƒú?|öÍÿÓ\þSèÏÿ+]\1Üÿ§ú?òë?!‹E»gä|ü³Î¦0vü×RÂþ?Õÿ(€ã?ñþ¿xÝÿYù
-iÔ@Ï€þÛ÷–ÿÔÿÙ7 ÿÓîÿûÆý_ýŸ9¼¯Nzäwè¿ýþ?õ¢ õ~߀þ›÷Öþ?êÿìÐûýòŸ‚ì÷
-Zÿ7ïÿ¬ç
-ýõ=øôâýýù¿öÿ±Hc!ãùŸò©òÀñ·êÿüuý'×õŸ‚ú?ûôâüGÿüüü‹ü'ð˜ÿø°9´÷ë.þ ý7ÏDÝÿ)(ÿáÐûü‡òŸ´õÛ7 ÿöýŸå?õó
-è¿}þCÏÿ¤¿oÐú¿uþCõÊøôß¾ÿ³öPÐüß7ÿ™Îÿþ^ ÇâüGq}þ·ê?B7ÙVÄ/ ÿ:ÿû;Aêûô_ç'èüo߀þëüïïÕ{}úoßÿCçÿRPÿ߀þëüïïÙï´þ¯ó¿¿úùäÐÿ‰óýýŸQç‘8¯ÿIy¿@þç„üG¡üpü­ò/ûUÿ¥0OÕÄ3 ÿöç¿(ÿKAç¿øôâüÇÕüOý?H|Ü5Ÿšz%ûúoŸÿÐú…Læ»ôß>ÿ¡û?å?|úoŸÿÿæ²ß5hýßüüõÿ¡ ü‡o@ÿíóÚÿEaæÚâÈÿ@ÈdÊ0 Çßêü—¯ý?¢ê¿”þð
-è¿yÿBõ
-’ß7 ÿöý?´ÿ‡‚úøôß>ÿ¡ú/ÿâÐûó_ä?õö
-è¿}þCû?(Hß õëþªÿsèç?´ìÐûó_´ÿ›‚æÿ¾êÿÈ–¯ÿe‘)ÿAaøøŸÚ}»m×ã¿£Ç?
-1)5þ€ñ?muµZ›»îóZøLFÌÿŸóß±PýBoþ”ÿöàÿ~ópl–Õv±¯–Ÿ«u½hVo¿Çíùý?f…æÿÒXÈxÇ þ/ÛÃmç/Qÿ^ÿOTÿç û½oPÿ‡Ïþ¡ùšË
-½ùÔõÀÃýªÿ#ï1°þ²XäçÂOw(»)ê?ÆŽÿãúOJØÿ§úpü'ÞÿÕÿù7¢{þ×@Ç€þÛ÷–ÿÔÿÙ7 ÿÓîÿûÆý¿Ðó?…÷Õ©’ú~ý·ßÿ§ýÿ”÷õ
-è¿yÿçLûÿ)¨ÿ³o@ÿÍ÷ÿɲß7hýß¼ÿ³žÿ)ôÖÿ•ÿuèÿÄûÿúóõf¡ü¯o ÿBþ#*ÿÁ «þÏ/ù]ÿ)¨ÿ³o@ÿ'ÎôÏÿÈC©þ/ó6‡ö~½Ñ…À ÿöùÝÿ)(ÿáÐûü‡òŸÔÿÙ7 ÿöýŸå?õó
-è¿}ÿg=ÿSþ¾Aëÿæù=ÿSPþÃ7 ÿöýŸµÿƒ‚æÿ¾üÏìóe¢üpü'ÎWç«ÿ'‡ÐM¶• ñè¿ùùߥòÿ¤¾o@ÿíÏÿÖýŸ‚Îÿö
-è¿yþ#hÿ/õÿð
-è¿}ÿ ÿ¨ÿ‡o@ÿíûÈ
-²ß7hýßúüoÿÇ¡—ÿH”ÿðèÿÄùþþϨó¿Hœ×ÿ¤¼_ ÿGå?‚òÀñ·Ê¼¬ÿ¨þKažªˆg@ÿíÏQþ—‚Îñ
-èÿÄù«ùŸúø¸k>5õJö;ôß>ÿ¡õ
-™Ìw
-è¿}þC÷
-Êøôß>ÿ!ÿ)Ìe¿kÐú¿yÿõÿ¡ ü‡o@ÿíóÚÿEaæÚâÈÿ@8ÿ¥Pþƒ8þV翼ôÿPý—‚Ò¾ý·ïÿ¡úÉïÐûþÚÿCAý?|úoþ‹ê¿tþ‹o@ÿíÏ‘ÿÔÿÙ7 ÿöç¿hÿéï´þoÞÿCõ
-½ü‡Îqè¿ùù/©öSÐüß7ƒü?væ¯Ç/§Å¾ýG§ý±ú¹Ù­Ûp6¼5ÿÏ
-ùÏA÷{ß½ÿ'ã"_¯8>*ÿÊâüü¯ü—=ÃÇÿÔîÛm»~ÿE=þiˆÝ”PãO ÿÓæPWÝt ¹Û›ŒxþÞÿ£êzÏÿ‰Ö}ø¿ß<›eµ]ì«åçj]/šÕÛï1¢þÿ‹ÿ1“ÿ4ÿ÷
-àÿ²=Üvþ’ñþgªÿ‘ÿ¾Aý>û‡æÿi.ÿ)ôçÿQ×W÷ÿiýyõŸÅ"IÙùŸ¥öR;þë¿)aÿ¯êÀñŸxÿo¼Úÿ•ÿ¡Fm öè¿}ÿwùOAýß}ú?íþßoÜÿuþ‡÷Õ©’ú~ý·ßÿ«ýÿÔüÍ7 ÿæýßuþ'õ÷
-è¿ýþ_ùOAöû­ÿ›÷×ó?…þú¿ò¿¾ ýŸxÿoþ“ þ?ÒXÈxÇ@þÜå?‚òÀñ·êÿþuý'×õŸ‚ú¿ûôâüGÿüõgñ˜ÿø°9´÷ë.þ ý7Ïèü?Êøôß>ÿ¡ü'Õ{}úoßÿ]þSPÿG߀þÛç?ôüOAúû­ÿ[ç?Tÿç ü‡o@ÿÍû¿íÿ  ù¿o ÿ3Bþ#Wþƒ8þç?ŠÞõ?Õù?$B7ÙVÄ/ ÿÓæ?’pÿPþŸ‚Ô÷
-èÿ´ùpÿÔýŸÃ_wÇÓá~yjڝ.ý·Ïhÿ/õÿð
-è¿}ÿ(ÿ¨ÿ‡o@ÿíóòŸ‚ì÷
-Zÿ7Ê<×ÿJÿÅ¡ŸÿÐy@¾ ýŸ8ÿÑßÿuþ‰óúŸ”÷äNÈDå?€ão•ÿxÙÿ«ú/…yª žý·?ÿEù_
-:ÿÅ7 ÿç?®æêÿAâã®ùÔÔ+ÙïÐûü‡Ö(d2ß5 ÿöùÝÿ)(ÿáÐûü‡ü§0—ý®Aëÿæç¿¨ÿå?|úoŸÿÐþ/
-³0×Ç@þBþ#Uþƒ8þVç¿|íÿUÿ¥ ô‡o@ÿÍûªÿPü¾ý7ïÿ¡ý?ÔÿÃ7 ÿöùÕ)¨ß³o@ÿíÏ‘ÿÔÿÙ7 ÿöùíÿ  ý}ƒÖÿÍû¨þO¡ŸÿÐó€/@ÿíÏÑþo
-šÿûf¨ÿå¸ÈÇ+Fç?BYd…ò†ÿ©Ý·Ûvý0þ‹0züÓƒò?€ñ?muµZ›»îóZøLFÌÿŸóßQëÿzóÿ™òß¾ üßoŽÍ²Ú.öÕòsµ®Íêí÷¸=ÿ/{þÇLý_8„y1+JIïÀÿe{¸íü%#êÿÏëÿIªüÕû|ƒú?|öÍÿÓ\þSèÍÿ+Íÿ}1Üÿ§ú?òë?!‹E»gî"P&êÿKaìø?®ÿ¤öûÿJÕÿ(€ã?ñþ¿x}þ§úÿSH£6 zôߺÿsšÈ
-êÿìÐÿi÷ÿ}ëþ¯ç
-ï«S%õýúo¾ÿ/hÿ5ò
-è¿yÿçLëÿÔÿÙ7 ÿæûÿä?Ùï´þoÞÿYÏÿzëÿÊÿ:ôâýýùwÐþ_
-i,d¼c ÿBþ#Qþƒ8þVýŸ_ú?êúOAýŸ}ú?qþ£þGž&:ÿƒÂcþãÃæÐÞ¯7ºøôß>ÿ¡û?å?|úoŸÿPþ“‚öúôß¼ÿs&ÿ)¨ÿ›o@ÿíózþ§ ý}ƒÖÿÍózþ§ ü‡o@ÿÍû?ëüšÿûò?#ä?2å?€ã?qþ£¸:ÿ»Tý‡Bè&ÛJ€øôßüüïRù
-Rß7 ÿæçëþÏAçûôß>ÿ¡ý¿ÔÿÃ7 ÿöý?tþõÿð
-è¿}þCþSý¾AëÿÖçëü?½üG¢ü‡/@ÿ'Îô÷FÿEâ¼þ'åýùŸò¹òÀñ·Ê¼ìÿUý—Â<UÏ€þÛŸÿ¢ü/ÿâÐÿ‰óWó?õÿ ñq×|jê•ìw
-è¿}þCë?2™ïÐûü‡îÿ”ÿð
-è¿}þCþS˜Ë~× õëþ…úÿPPþÃ7 ÿæùõÿã0smqä ä?‚òÀñ·:ÿåkÿBõ_
-Jøôß¾ÿ‡ê?$¿o@ÿÍûhÿõÿð
-è¿}þCõ_
-:ÿÅ7 ÿöç¿È
-êÿìÐûü‡öPþ¾Aëÿæý?Tÿ§ÐËèüg€þÛŸÿ¢ýß4ÿ÷ÍMÿwíª÷¸b`þ#d±Ècw-è^B¡üƒaãþ?#C?ÿ‹úoRõ¡0fü»i@¼Çãø—åñOÏ·ýî¾_žŸÿ³óý?ýÃþøõßßž–@?Ï+4þcÆRÿ0hüý%Bã?xü»IÕ}Z§±ïqkþâeþ§èÆ?”‰úÿQ8ébÓœÞeE^γ´üññŸ|iŽÇwÉÓÿÔêf½ëþg³;Õ‡m]ý\?þ¿tÊæiøqÛ.«íâüéþt–æIöc{Út‡ÿ,Ì‹¹zþ^ãÿ—úK³ûÔŽ~þ‡N÷Þü/twùÏàÇ¿=:úî?ë/ÚSµýÓ»3¡èî×i(Þ}þËÅ~:ÔõÓï¿ë†/ÌCÖ{ÁÇc½úåïÒ,Î’Yrñ‚?/OÍÏÏ@G>K‹ÙìâÝU¯_’Ù«?áßšõæâ§|¢ÿ‚‹ŸòúÿÑþãí¿f÷‚·ÿšï›ÃéáÕŸß{‹ÇŽZwÕòó?û!j¶õUëúøËò²ÈbzùIVûýËùø’$»|ÁŸwíîòOxz‹óo~¨î¶/¯H³âò£þÛO_|Üu_ýî5úÖù—ö~·¬{ÏËü}[ݽúíî‘íõ`ݯŸþš‹‹O<¹þÝ‹[Åg:#çÿ9òÈü¿»%™ÿC?Ï+œ_ÿÇŒÿªé>«îª0ö=n×ÿ‹þü¿ÈµþG!Äî.«Ë®[F^ÿo/öƒ›þ_õY*ÿ)<Á/ëÿŸt-ðÅHÿKä= úo4ÿƒ~žW8÷øø'Üõ¿LëÆŒç[мôü—òúy^¡ñ<þfë?yyµþ£óŸ9|]ÿÉc,æY9±þS&1Ë/—º?#Í’yq¹ü“éLM†·Œ¼þgÈ{@×ÿ|Ðõúy^áÜÿ1ãO\ÿËK­ÿSxZI®ÖÿbÌó‹5§¤¿þ—åYr¹¼—ô×ÿº\~¹¬•ô×ÿÎ5Þî^qñ‚þú_š‡¢È/^pcý/¹µþ—\­ÿ]ý5{ë×Íëõ¿'³‹ÜXÿKú로ÏÒWÂÕú_Ì;].?Éþú߬(ÓË·¸ZÿÉ,\~Ô7Öÿ’[ëÉÕú_šdóäÕ`½±þ—hýïwÂÈû@Þºÿ'ƒîÿÐÏó
-ç×ÿ1ãO]ÿÓ󅐼Q—]·Œ¼þCJ"×ÿî’0äúÿë/Îý9þ¼õ_]ÿ)<ÁsÿÿOº!„B!„B!„B!„Bü¿âÿ ®d° h 
\ No newline at end of file
+‹ ·Ö9K ímsãÈu…÷óþŠù‰n ÒßìšÚŠ+‰+Už©|dA$D¢†C°Hjå×”f$
+/ÑgÑg7sÏS¶÷ehQbë·OßžµuYü«ßù£_ýñ‡4d=U翺*dOÿìŠâé¯_øÁ9Ÿùe…ëÿ½ó¾(x}?ox8žêûw?Ü­»õ¶ÝýÂëšÃ‘ñ
+q™]Žÿññ˜âw`Üø»¼*C\ÿç.w™Óø3¸ÿUós»l&ý=ˆÿ"ø\ãÏàŸŽÿ÷§æó$¿qãïúñ/³þe·Æ¹øÕ¿#Çßå¡,B–ŸÇ¿Ìå?…1ãßÿ·ü5¿þg>;Ïÿªóm@ãO`ôøŸº}·í֏À/Bôø{——…ÆŸAüøŸ6‡¦^-Ží]ÿq­Ç|$ç.žÇûÛãïý`üûW÷þgÉú̏ÿ×!ø—ç¿ُ¿õw$˜Äû¿ß<Ûe½]ìëå§zÝ,ÚՍ÷¸éïü[ÿƒ/¼ügàC)ã
+ïÿ²;Œpþ’Ûþïÿ¾:×ÿäzœì7
+èÄìšÿ;/ÿ)æÿAó[ŒöY/7
+VŒ«ÿV½ÿY•ê?"ǿݭšÿñ‘¿@ý¯*Tÿ£€ÿ±ýßfü{Üžÿ‡áü¿ÌõüO¡þÿwÝòí‚ù_ŸN‡öîáÔŒ2â¦ÿîeþï\•ŸçÿYÿþûОš¿ÔËOº˜óÿô¸O|ÿ/ôüOá}}ª¥¾]0ÿ·ÍÏÍvô{ õÿsþCþ§ÇK~Ó`þ/»MshvËÇE¯Ìy5àËëÿ_æÿ¡ê§òŸ€ó3]ƒùÿúñ¸èîõñØ-ÛúÔþÜžÿé{DÜÿ¿ø_æòŸƒì·
+XÿßÔ‡fµèÿ`ñ¹Þßz`ý¿ÌõüOa°þ¯ü¯10ÿwŸïšÃyplN7­ˆŸÿeUÉÊÿÚñ?cä?¼ò°ñŸ:ÿ1ÜÿáK¯ë?§ø‡i0ÿ§Î„ëüG.ÿ<å?>lÝÃz£=0ÿÓç?rÝÿ)(ÿaÌBþCùO
+ÚÿiÌÿ©óùuþCþS(] ,ƒùOÈèùŸ‚ô·
+XÿOžÿPýŸƒò¶ÁüŸ:ÿ1œÿe¥ý4ÿ·
+âÎÈå?`ã?uþ£\ÿ}©þŸ\³UÄ.˜ÿç?2wÿPþŸ‚Ô·
+æÿÄùwÿÔýŸÃ_wÇÓáayj».Áü'ä?´ÿ—‚úØóŸÐÿ£”ÿÔÿÃ6˜ÿ„ü‡ü§ ûmÖÿSå?^Öuþ‡Aþ#SþØÿSç?®öêü/çõ?)oÄÿ‚‘ÿ(•ÿ`€²üÇëþ_Õ)̽:€XóŸpþ‹ò¿tþ‹m0ÿ§ÎçêÿÁâ㮽o›•ì7
+æ?!ÿ¡õ
+¹Ì7
+æ?!ÿ¡û?å?lƒùOÈÈ
+sÙo°þŸþüõÿ¡ ü‡m0ÿ	ùíÿ¢0ssm1â¿cä?rå?`ãŸìü——þ¹ê¿”þ°
+æúþ…ê?$¿m0ÿ	ý?´ÿ‡‚úØóŸÿPý—‚α
+æ?áüùOAýŸmƒùOÈhÿéo°þŸ¼ÿ‡êÿùÿbÌÂù/ÚÿMAóÛŒôßGF>ޝÿ8¿ªPþƒÁèñ?uûnÛ­_„èñ÷./3?ƒøñ?mM½ZÛ»þãZùH"æÿ_óßE®ç
+ƒù¦é€-âýßoí²Þ.öõòS½níêÆ{įÿ/ÿ9èyß6ñþ/»Ãç/‰÷ßëùŸ„Öÿmú1û‡æÿÎÉ
+ÃùÐõÀ£ý®ÿCï1²þãòP!«zÿ³´ÿ‹Bäø?­ÿăú_U¨þGÿ©÷ÿ…«ù¿×ú?´Ð2˜ÿéû?òŸ‚ú?Ûóâý߸ÿëüïëS-õí‚ùOØÿ§ý¿ÔüÉ6˜ÿ„þÏ:ÿ‚ú?ÛóŸ°ÿOþSý¶ëÿÉû?{=ÿS®ÿ+ÿkÌÿ©÷ÿ
+çÿEY©ÿJoÄÿŒÿÈuþ7lü“õ~ÍèúOAýŸmƒù?uþãêüõ&ñ”ÿø°9të.öÀü'ä?tÿ§ ü‡m0ÿÓç?‚òŸ´ÿÓ6˜ÿÉû?—•ü§ þo¶ÁüOžÿð•žÿ)HÛ€õÿôù=ÿSPþÃ6˜ÿ„þÏÚÿAAóÛ þçŒþNùØøOÿ(uþ÷o„ëo¶J€ØóŸpþ·òÿ¤¾m0ÿÓŸÿ­û?ÿmÌBÿíÿ¥ þ¶Áü'ôÿðòŸúØóŸÐÿCþSý¶ëÿéÏÿÖù_†ùfÌÿ©óWû?uþ‰óúŸ”·âÁÈxå?`ãŸ,ÿñºþ£ú/…¹WË`þ§?ÿ%(ÿKAç¿ØóêüÇpþ§þ,>îÚû¶YÉ~£`þòZÿ¡Ë|Ó`þòºÿSPþÃ6˜ÿ„ü‡ü§0—ý¦ëÿéû¨ÿå?lƒùOÈhÿ…™›kˆaÿãü—JùØø';ÿåµÿ‡ê¿”þ°
+æ?¡ÿ‡ê?$¿m0ÿ	ý?´ÿ‡‚úØóŸpþ‹ê¿tþ‹m0ÿ	ç¿È
+êÿlÌBþCû?(HÛ€õÿôý?Tÿ§0Ìèz`ÌÂù/ÚÿMAóÛŒô?DF>ޝÿ8¿Jù
+£ÇÿÔí»m·~~¢Çß»¼Ì5þâÇÿ´94õjqlïúk=æ#‰˜ÿ͹êó¯ü·-âýßoí²Þ.öõòS½níêÆ{ÜžÿWÿCÿܼœ••¤·J¼ÿËî0ÂùK"êÿ/ëÿªÿsÐýÞ6 ÿ³hþï¼ü§0˜ÿ׺Øb´ÿÏõè=FÖ\Êâ\øë/!”ªÿ0ˆÿ§õÏèÿ¬úlü§ÞÿÔÿù7Âm ´æ?¡ÿ³ü§ þ϶ÁüŸxÿß7îÿ…žÿ)¼¯OµÔ·æ?¡ÿ³öÿSPó'Û`þú?kýŸ‚ú?ÛóŸ°ÿOþSý¶ëÿÉû?çzþ§0XÿWþטÿSïÿÎÿÕÿ™…¥Œ7âÆÈ8å?`㟬ÿóËú×õŸ‚ú?ÛóêüÇÕùYPÿ
+Où›C÷°ÞèB`Ìÿôù\÷
+ÊØóŸÿPþ“‚ú?Ûó?yÿç*“ÿÔÿÍ6˜ÿ„ü‡žÿ)HÛ€õÿôçëùŸ‚ò¶Áü'ôÖþ
+šÿÛñ?gä?
+å?`ã?uþ£¼:ÿ»Pý‡‚ëo¶J€Øó?ýùßAù
+Rß6˜ÿéÏÿÖýŸƒÎÿ¶
+æ?!ÿ¡ý¿ÔÿÃ6˜ÿ„þAþ3PÿÛ`þòòŸ‚ì·
+XÿOþ·Îÿ£0ÈdÊØóêüÇÕþOÿEâ¼þ'åí‚ø_0òAùØø'˼îÿUý—ÂÜ«ˆe0ÿ	ç¿(ÿKAç¿ØóêüÇpþ§þ,>îÚû¶YÉ~£`þòZÿ¡Ë|Ó`þòºÿSPþÃ6˜ÿ„ü‡ü§0—ý¦ëÿéÏQÿ
+ÊØóŸÿÐþ/
+37×à þ;FþÃ+ÿÁ ÿd翼ôÿÈUÿ¥ ô‡m0ÿÓ÷ÿ(Tÿ¡ ùmƒùŸ¾ÿ‡öÿpPÿÛ`þòªÿRÐù/¶Áü'œÿ"ÿ)¨ÿ³m0ÿ	ùíÿ  ýmÖÿÓ÷ÿPýŸÂ ÿ¡ó_ŒùO8ÿEû¿)hþo›‘þÇùò†èüÇùUêÿAaôøŸº}·í֏À/Bôø{—ŸÏÿÖø§'~üO›CS¯Çö®ÿ¸Öc>’ˆùÿ×üw¡ù?‡Áü?Ón0[Äû¿ß<Ûe½]ìëå§zÝ,ÚՍ÷¸=ÿ¯þ_¨þOÁÍËÒiÐ,ñþ/»Ãç/‰¨ÿ¿ä*åÿ(H}Û€þGÌþ¡ù¿sòŸÂpþ_ëz`ŠÑþ?×ÿ¡÷Yÿqy(‹Ð?ôtþ3…ÈñZÿñŒýªÿQÀÆêýájþï•ÿ§àƒ6 Zó?}ÿçBþSPÿgÛ`þO¼ÿï÷õæð¾>é‘ß0˜ÿ„ýêÿDAÍŸlƒùOèÿ¬õ
+êÿlÌÂþ?ùOAöÛ¬ÿ'ïÿìõüOa¸þ¯ë-0ÿ§Þÿ7œÿkÿJoÄÿŒÿ8÷ÿSþ#=Øø'ëÿüšÿÐõŸ‚ú?ÛóêüÇÕùYÿ2ùOà)ÿñasèÖ]ìùOÈèþOAùÛ`þ§Ïå?)hÿ§m0ÿ“÷.+ùOAýßlƒùOÈèùŸ‚ô·
+XÿOŸÿÐó?å?lƒùOèÿ¬ý4ÿ·
+âl3h$ÿ¡ó¿9`ã?uþ£¼>ÿ[õ
+®¿Ù*b̝ÿý½ õmƒù¯ó¿¿tþ·m0ÿuþ÷÷‚úØóŸÐÿCçÿRPÿÛ`þëüïïÙo°þ¯ó¿¿†ùÿmÌÿ©óWû?uþ‰óúŸ”·âÁÈäÊ0ÀÆ?YþãuýGõ_
+s¯ –ÁüOþKPþ—‚α
+æÿÔùáüOý?X|ܵ÷m³’ýFÁü'ä?´þC!—ù¦Áü'ä?tÿ§ ü‡m0ÿ	ùùOa.ûMÖÿ“÷ÿÈÕÿ‡‚ò¶Áü'ä?´ÿ‹ÂÌ͵Ä0ˆÿŽ‘ÿÈ”ÿ`€²ó_^û¨þKAéÛ`þú¨þCAòÛóŸÐÿCû(¨ÿ‡m0ÿ	ùÕ)èüÛ`þ'?ÿ¥ÒùÔÿÙ6˜ÿ„ü‡öPþ¶ëÿéû¨þOa˜ÿPÔ˜ÿ„ó_´ÿ›‚æÿ¶éläã
+Ñùó«ÔÿƒÂèñ?uûnÛ­_„èñ÷.?Ÿÿ­ñOOüøŸ6‡¦^-Ží]ÿq­Ç|$óÿ¯ùïBóÃù¿Â ¶ˆ÷¿y<¶Ëz»Ø×ËOõºY´«ïq{þ_
+ü¾PýŸ‚›—¥Ó" Yâý_v‡Î_QÿÉÿTÊÿQÐ~/Û€þGÌþ¡ù¿sòŸÂpþ_ëz`ŠÑþ?×ÿ¡÷Yÿqy(‹Ð?ôtþ3…ÈñZÿñ„ý¹ê°ñŸzÿ_¸šÿ{åÿ)ø 
+€–ÁüOßÿ¹ÿÔÿÙ6˜ÿïÿûÆý_ýŸ9¼¯Ozä7æúýAýŸ(h½ß6˜ÿ„þÏZÿ§ þ϶Áü'ìÿ“ÿd¿mÀúòþÏ^Ïÿ†ëÿz°æÿÔûÿ†óíÿcáC)ã
+ƒøŸ1òAùØø'ëÿüšÿÐõŸ‚ú?ÛóêüÇÕùYQÊOù›C÷°ÞèB`ÌBþC÷
+ÊØóŸÿPþ“‚¶~Ûó?yÿç²’ÿÔÿÍ6˜ÿÉó¾Òó?éo°þŸ>ÿ¡ç
+ÊØó?}ÿçRû?(hþoÄÿ\ç7`ã?uþ£¼>ÿ[õ
+®¿Ù*b̝ÿý½ õmƒù¯ó¿¿tþ·m0ÿuþ÷÷‚ê½¶Áü'ôÿÐù¿ÔÿÃ6˜ÿ:ÿû{AöÛ¬ÿëüïï„aþCçÙóêüÇÕþOÿEâ¼þ'åí‚ø_0òNùØø'˼®ÿ¨þKaîÕÄ2˜ÿ„ó_”ÿ¥ ó_lƒù?uþc8ÿSÿwí}Û¬d¿Q0ÿ	ù­ÿPÈe¾i0ÿ	ùÝÿ)(ÿaÌBþCþS˜Ë~Ó€õÿôý?Ôÿ‡‚ò¶Áü'ä?´ÿ‹ÂÌ͵Ä0ˆÿŽqþK©ülü“ÿòÚÿCõ_
+JØóŸÐÿCõ
+’ß6˜ÿ„þÚÿCAý?lƒùO8ÿEõ_
+:ÿÅ6˜ÿ„ó_ä?õ¶
+æ?áüíÿ  ýmÖÿÓ÷ÿPýŸÂ0ÿ¡Å`[`þ§?ÿ¥Òþo
+šÿÛf¤ÿ±-?ޝÿ8¿Jù
+£ÇÿÔí»m·~~¢Çß»¼ôñãÚšzµ8¶wýǵó‘DÌÿ¿æ¿‹\õ?
+ƒù¿SþÛñþï7ÇvYoûzù©^7‹vuã=nÏÿ‡ëÿÁšÿSð¡”ñ†‰÷ÙF8IDýÿ%ÿ£ú?Ýïmú1û‡æÿÎÉ
+ƒùÐõÀ£ý®ÿCï1²þãòP!«zÿ³Ð¿\õ‘ãÿ´þãýŸUÿ£€ÿÔûÿ‚ú?ÿFôÏÿÚ hÌÿôýŸƒü§ þ϶ÁüŸxÿß·îÿzþ§ð¾>ÕRß.˜ÿ„þÏÚÿOAy_Û`þú?kÿ?õ¶
+æ?¡ÿ³ü§ ûmÖÿÓ÷Öó?…Áú¿ò¿ÆÀüŸzÿßpþ¯þÏ,”ÿµ
+âÆÈdÊ0ÀÆ?Yÿç—õ¯ë?õ¶
+æÿÔù«ó?² þ/žò6‡îa½Ñ…À˜ÿ„ü‡îÿ”ÿ°
+æ?!ÿ¡ü'õ¶
+æòþÏU&ÿ)¨ÿ›m0ÿ	ù=ÿSþ¶ëÿéózþ§ ü‡m0ÿ	ýŸµÿƒ‚æÿ¶AüÏù\ùØøOÿ(¯ÎÿVÿO®¿Ù*bÌÂùßÊÿSú¶ÁüOþ·îÿtþ·m0ÿ	ùíÿ¥ þ¶Áü'ôÿ(ä?õÿ°
+æ?!ÿ!ÿ)È~Û€õÿôçëü?
+ƒüG¦ü‡-0ÿ§Î\íÿÔù_$ÎëRÞ.ˆÿ±‡CùBùØø'˼îÿUý—ÂÜ«ˆe0ÿ	ç¿(ÿKAç¿ØóêüÇpþ§þ,>îÚû¶YÉ~£`þòZÿ¡Ë|Ó`þòºÿSPþÃ6˜ÿ„ü‡ü§0—ý¦ëÿÉûäêÿCAùÛ`þ'Ϩÿ‰™›kˆaÿ#ÿá”ÿ`€²ó_^úäªÿRPúÃ6˜ÿ„þªÿPü¶ÁüOßÿCû8¨ÿ‡m0ÿ	ùÕ)èüÛ`þΑÿÔÿÙ6˜ÿ„ü‡öPþ¶ëÿéû¨þOaÿÐù/ÆÀü'œÿ¢ýß4ÿ·Íÿ½ù«Åñói±ïþÑk¬nwëñ2œ
+/£æÿy!ÿ9è~o›‘÷ÿ,2òõ†³áQù¯ó«¼ò_Fÿ©ÛwÛnýü"D¿wy(5þâÇÿ´94u?hï¶#gÏÿ_÷¹êÏÿ™Ömïÿ~óxl—õv±¯—Ÿêu³hW7Þ#¢þÿÅÿàå?Íÿmïÿ²;Œpþ’xÿ½ê$ä¿m@ÿ#fÿÐü¿ÿ'ùÏ`8ÿº˜b´ÿÏëÐ{Œ¬ÿœ‹>EȪÞÿ,íÿ¤9þO뿞°ÿ7Wý6þSïÿ
+Wó¯ü´Ø2˜ÿéû¿òŸ‚ú¿Ûóâý¿ß¸ÿëüïëS-õí‚ùŸ~ÿoÐþ
+jþfÌÿäýßuþ'	õ·
+æòý¿^þsý¶ëÿÉû¿{=ÿS®ÿ+ÿkÌÿ©÷ÿçÿEY©ÿ…þQKÆñ?v3 ”ÿ(”ÿ`€²þï¯ù]ÿ)¨ÿ»m0ÿ§Î\ÿ£þï$žò6‡îa½Ñ…À˜ÿ„ü‡îÿ”ÿ°
+æ?!ÿ¡ü'Õ{mƒùŸ¼ÿ{YÉ
+êÿhÌBþCÏÿ¤¿mÀúúü‡žÿ)(ÿaÌÿôýßKíÿ  ù¿mÿsFþ£Rþƒ6þSç?ÊÁõßëü®¿Ù*bÌÿ‰ó™»Î(ÿOAêÛóâü‡»ÎêþÏ᯻ãéð°<µÝN—ƒ`þòÚÿKAý?lƒùŸ¼ÿG•eòŸúØó?yþ#—ÿd¿mÀúªüÇËú¯Îÿâ0Ìè< [`þOÿ¸Úÿ©ó¿Hœ×ÿ¤¼]ÿBþ£È”ÿ`€²üÇkÿÕ)̽:€XóŸpþ‹ò¿tþ‹m0ÿ§ÎçêÿÁâ㮽o›•ì7
+æúüG©õ
+¹Ì7
+æ?!ÿ¡û?å?lƒùOÈÈ
+sÙo°þŸ¾ÿ‡úÿPPþÃ6˜ÿ„ü‡öQ˜¹¹¶€ñß1úå?`ãŸìü—×þªÿRPúÃ6˜ÿ„þªÿPü¶Áü'ôÿÐþ
+êÿaÌBÿÕ)¨ß³m0ÿ	ç¿È
+êÿlÌÂù/ÚÿAAúÛ¬ÿ§ïÿ¡ú?…aþC϶Àü'œÿ¢ýß4ÿ·ÍHÿ«ÈÈÇ¢óý«œSþƒÁèñ?uûnÛ­_„èñ÷./•ÿ¡?þ§Í¡©W‹c{×\ë1IÄüÿkþ»Ðú?‡Áü¦ü·-âýßoí²Þ.öõòS½níêÆ{ÜžÿWÿƒWÿn^ÎÊJÒ[%Þÿewáü%õÿ—õÿLù
+ª÷Ùô?böÍÿ—ÿóÿZó[Œöÿ¹þ½ÇÈúËCY„þY ¿„Rý)DŽÿÓúgôVý6þSïÿ×ùõÿ§àƒ6 Zó?}ÿç ÿ)¨ÿ³m0ÿ'Þÿ÷û¡ç
+ïëS-õí‚ùOèÿ¬ý?ÔüÉ6˜ÿ„þÏZÿ§ þ϶Áü'ô–ÿd¿mÀúòþÏêÿÃa°þ¯ü¯10ÿ§Þÿ7œÿU¦ý¿|(e¼aÿ3Fþ#Wþƒ6þÉú?¿æ?tý§ þ϶ÁüŸ:ÿquþGtþ…§üLJ͡{Xot!°æ?!ÿ¡û?å?lƒùOÈ(ÿIAû?mƒùŸ¼ÿs•É
+êÿfÌBþCÏÿ¤¿mÀúúü‡žÿ)(ÿaÌÿôýŸuþÍÿmƒøŸ3ò¥ò°ñŸ:ÿQ^ÿ]¨þCÁõ7[%@ì‚ùŸþüï ü?©oÌÿôçëþÏAçÛóŸÿÐþ_
+êÿaÌBÿÿGAý?lƒùOÈÈ
+²ß6`ý?ùùß:ÿÃ ÿ‘)ÿaÌÿ©óWû?uþ‰óúŸ”·âÁÈTÊ0ÀÆ?Yþãµÿ‡ê¿æ^@,ƒùO8ÿEù_
+:ÿÅ6˜ÿSç?†ó?õÿ`ñq×Þ·ÍJöóŸÿÐú…\æ›ó?}þÃéþOAùÛ`þ§ÏÈsÙo°þŸ¾ÿ‡úÿPPþÃ6˜ÿ„ü‡öQ˜¹¹¶€ñß1ò…ò°ñOvþËKÿ\õ_
+JØóŸÐÿCõ
+’ß6˜ÿ„þÚÿCAý?lƒùOȨþKAç¿ØóŸpþ‹ü§ þ϶Áü'ôÿÐþ
+Òß6`ý?yÿÕÿ9ò:ÿŘÿ„ó_´ÿ›‚æÿ¶¹åÿ®[5‘q+Fæ?\Ê"ôׂ̕Uå”ÿ`0jüÏÿú¹`äø¿Ö]Õ£ñg1þý4 „ÞãiüûýåñÏ]™‡ÜOÏÿþÜÿÓÿá|ùÏ·ç%Ø7t‰Æ?bü1#¡ñ£Æÿ×_"4þcÇ¿Ÿô×ý‡uŠ~[ó.ó?å9ÿJõÿ£pÔŦ=½ËË¢šç¾úñéß|nÇwÙóßßw‡¦]ïúlw§æ°mꟛ§ÿ‹ëoÖÞý¸í–õvqþ鿈Ÿù"ËìN›þùðéß¹y9WÁß+þn>·»û.þ=nøï¼«†ùïþN ÿüø·'GßýgóùCwª·zwæü VyW¾ûô—‹üthšç?ן›»|ð‚Çfõåï|fÙ,»xÁŸ—§öç¯_ §˜ùr6»xÁ_wõÛ—¸löæ+ü[»Þ\|—Ï_pñ]^¿à?ºüòÙ¿à—Ì÷íáôøæëÞâ©£Ö]½üôϾɟÚmó_õº9~yAQõùIÖûýëùô’,¿|ÁŸwÝîò+¼sƒŸâü‡ê»íë+|^^~Ôûé»þW¿ÍŸ¾õMþ¥{Ø-›ÁÏyù‚¿oë»7ì|ñv°ÖÏ?æââÏ®ÿôâãVñ™NÜü¿€Þšÿç£æÿØ7t‰ñëÄø¯Úþ£ê/
+Ñïq»þ_^ÍÿÖÿ(¸ÐßeuÙ5KÜõÄbÿ7¸éÿUÿ‡þ2 ÿ)|‚/ëÿ÷ºØ"Îÿ
+zdþçܨùö
+]bÜÿÑ㟑×ÿJ­ÿ1ˆÿ^7½àÿù1`ŒÿØ7t‰Æìø§[ÿ)ªëõå¿(¼¬ÿ!”ó¼šG¬ÿTYÈ‹ËåŸþkø<›——Ë?Eégj2ü»%îúŸCïÕÿ²Q×ìºÄ¸ÿãÏ]ÿÓú?…çõ˜ìjý/„¢¸Xsʆëy‘g—Ë{Ùpý/w½Êáò+Öÿ\Yý½ââÃõ?_¸²,.^pcý/»µþ—]­ÿ]ý˜ƒõ¿ëózýÏÙìâ7Öÿ²áúŸ«æ3ÿæ+\­ÿ…¢×åò“®ÿÍÊÊ_¾ÅÕúŸËfîò£¾±þ—ÝZÿË®Öÿ|–ϳ7ƒõë™Öÿ~'ÄÝÿôÐó_1êþ}C—¿þGŒ?wýOÏ\öÎ]vÍwýÇŒ„®ÿ~Ôõÿ×_"Œû7þÄõ_]ÿ)|‚¯ýÿïu/B!„B!„B!„B!„øÅÿç¤_ h 
\ No newline at end of file

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8ia64-2n2s2d.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8ia64-2n2s2d.tar.gz.output	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8ia64-2n2s2d.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,56 +1,56 @@
-System(0KB HP=0*0kB  )
-  NUMANode#0(15GB)
-    Socket#0
-        L3Cache(9216KB)
-          L2Cache(256KB)
-            L1Cache(16KB)
-            Core#0
-              P#0
-        L3Cache(9216KB)
-          L2Cache(256KB)
-            L1Cache(16KB)
-            Core#1
-              P#2
-    Socket#196611
-        L3Cache(9216KB)
-          L2Cache(256KB)
-            L1Cache(16KB)
-            Core#0
-              P#1
-        L3Cache(9216KB)
-          L2Cache(256KB)
-            L1Cache(16KB)
-            Core#1
-              P#3
-  NUMANode#1(16GB)
-    Socket#256
-        L3Cache(9216KB)
-          L2Cache(256KB)
-            L1Cache(16KB)
-            Core#0
-              P#4
-        L3Cache(9216KB)
-          L2Cache(256KB)
-            L1Cache(16KB)
-            Core#1
-              P#6
-    Socket#196867
-        L3Cache(9216KB)
-          L2Cache(256KB)
-            L1Cache(16KB)
-            Core#0
-              P#5
-        L3Cache(9216KB)
-          L2Cache(256KB)
-            L1Cache(16KB)
-            Core#1
-              P#7
-depth 0:	1 System (type #0)
+Machine (phys=0 total=33331648KB)
+  NUMANode #0 (phys=0 local=16554432KB total=16554432KB)
+    Socket #0 (phys=0)
+      L3Cache #0 (9216KB)
+        L2Cache #0 (256KB)
+          L1Cache #0 (16KB)
+            Core #0 (phys=0)
+              PU #0 (phys=0)
+      L3Cache #1 (9216KB)
+        L2Cache #1 (256KB)
+          L1Cache #1 (16KB)
+            Core #1 (phys=1)
+              PU #1 (phys=2)
+    Socket #1 (phys=196611)
+      L3Cache #2 (9216KB)
+        L2Cache #2 (256KB)
+          L1Cache #2 (16KB)
+            Core #2 (phys=0)
+              PU #2 (phys=1)
+      L3Cache #3 (9216KB)
+        L2Cache #3 (256KB)
+          L1Cache #3 (16KB)
+            Core #3 (phys=1)
+              PU #3 (phys=3)
+  NUMANode #1 (phys=1 local=16777216KB total=16777216KB)
+    Socket #2 (phys=256)
+      L3Cache #4 (9216KB)
+        L2Cache #4 (256KB)
+          L1Cache #4 (16KB)
+            Core #4 (phys=0)
+              PU #4 (phys=4)
+      L3Cache #5 (9216KB)
+        L2Cache #5 (256KB)
+          L1Cache #5 (16KB)
+            Core #5 (phys=1)
+              PU #5 (phys=6)
+    Socket #3 (phys=196867)
+      L3Cache #6 (9216KB)
+        L2Cache #6 (256KB)
+          L1Cache #6 (16KB)
+            Core #6 (phys=0)
+              PU #6 (phys=5)
+      L3Cache #7 (9216KB)
+        L2Cache #7 (256KB)
+          L1Cache #7 (16KB)
+            Core #7 (phys=1)
+              PU #7 (phys=7)
+depth 0:	1 Machine (type #1)
  depth 1:	2 NUMANodes (type #2)
   depth 2:	4 Sockets (type #3)
    depth 3:	8 Caches (type #4)
     depth 4:	8 Caches (type #4)
      depth 5:	8 Caches (type #4)
       depth 6:	8 Cores (type #5)
-       depth 7:	8 Procs (type #6)
+       depth 7:	8 PUs (type #6)
 Topology not from this system

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8ia64-4s2c.tar.gz
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8ia64-4s2c.tar.gz	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8ia64-4s2c.tar.gz	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,16 +1,16 @@
-‹ ¨
-J í_ãÆ•ÅýìO1 ›°þ‘­¼Åkìn°@fG-±%b4¢ ±íÕ~ú¥¤f·šÝU]“g¾ç‡${”Q[W‡,Þ:uî]]æþßüÒ.þòÃTdE§¿š"dç¿7ÞŸÿúÄÆØÌ†,ó¦{1Ea~ø&û‰®x<´åþÇîWÍjSo¿ñºj@ü@Xî^ê8¦ùÄÕ߸"ÎåEW›»Àú#ÔYýZ/ª‘¿éõ÷6¬?‚Qÿî×mõu¤¯AJý½7]ýC(<ëàÛõ_ìGø$Ô?Ër×Õ?wyÆú#¸]ÿî¿ùïûÄ×ßûîwºúÖ±þ"ëß6»fӬޢ/Brý­1¯ÿRëß®÷U¹œêûîÃZÅ} §ûK½ß¯¿µƒú{sºþgÿ»ŸQ^ÿ¾ºüÅg?~ IÕÿn}<Ô‹r3ß•‹/媚×Ë›ïqSÿYê¿è–Ô?€Üø@Éë%Uÿ‹f¥ùknëxÿ·Þêï÷ºé?iõ/Yÿ»ÜSÿ†ëÏë*"õ¿(ëJÚŒìÿ‚ë–£þ3[pÿBRýëí²ú›ü5HêÿgîÔÿó§ç?Öz$õ?Ôÿ[¥¼Gúó¿uÁòþÀ†ü?xË׋DÿeÛîëûǶŠÔÃMý;¸þ»Àþ†îë¶ú©\|áE@%ý·ÇÝä÷ÿœÏÿ>–mIéëE¢ÿMõkµIxAÿ?œüÔÿôXŠ_5ý/šuµ¯¶‹ã¼Ìi7àF;à¶þý`ý¼É©ÆÞñ
- ‰þ+‡yó0/‡fQ—mýkÝ¿ññ÷ÿ^ÿyFýc úu#êÿ¯Ë}µœw¿1ÿZîn¿ÇMý¿õÿºÀç}	èÿÕ‰DÿÛǯ÷Õþ´8Tm„&Ò×ÿÞúÿ!ؐSñŠI׆ñ0ÿ‚¤þãû?ü›ý_ðúÀÐþ¡‰þÇ÷„·þîÿ@8û?>­÷Íãj́>$úGø?ïÿèÿЍDÿÿýßů‰þÇ÷¸·þú¿!ä<ð©‰þ!þ>ÿC üu#êÿüìÿcèK@ÿ‡N$úßÿ1\ÿwׁ@ý#àú_7éúwÿó!Hê?¾ÿ#ÔߺÀþÓÝlé Ñ‹Dÿ£û?ºg¾7þîÿ@ ôu#ÑÿèþóÖÿIýcøe{h÷‹¶n¶¼(D¢ˆÿƒýÌÿЍDÿüîÿ@`þ‡n$ú‡ø?¨T¿nDýÿÉüÏû¿Ìÿ Ñ—àOý/x=P…Dÿãû?†ç?½7ìÿA8íÿQòzI×¿Çø?8ÿ‚¤þÓù?®Îÿ²ÿaf™ ¢‰þ!ó_¨œÿ¢‰þÇ÷dÌÿøN|ÞÖuµ¤ú•"Ñ?ÄÿÁüwŽÊWDÿÿ‡eþ3ú?t#Ñ?ÂÿAýc˜Qýªõÿó_xþB_ú?t"Ñ?ÄÿAýC¸33QLºþ
-Æÿaéÿ@ ©ÿtó_^ò?˜ÿ†îÝHôÉÿ`ÿů‰þ!ùÔ?æèF¢ˆÿƒýœÿ¢‰þ!ó_8ÿóŸu#Ñ?$ÿƒç? PþºõÿùìÿcèKÀù/:‘è2ÿ…ç? pý¯›(ýÛdËÇ+N
-ó<õÿLa-ç¿@ˆ¬ÛìšM³:оÉõ·ÆtÿˆõZÿv½¯ÊåüPßwÖ*î‰_ÿ?û¿M`ÿÂ`ýŸq9 ‹TýïÖÇC½(7ó]¹øR®ªy½¼ù·×ÿa¨ÿ‚ùrã%¯—Tý/š}”毉ïÿ?ïÿ{öÿ1pÿ_7"ý'­þ%ë—;ê°ÿÏõ¿."õéÿß#²ÿc\®[ŽvúÏlaØÿATÿóþOz38¾ÿÎkÁÓù¿³þ$õÿüßðùß:Ïý?6ð  f$úŸ6ÿÙžÏÿêóŸu#ÑÿèçÿÞ¹ÿsþ†e[Rúz‘èrþç!0üI7ýO›ÿl/çÿ8ÿóŸu#Ñÿ´çÿìåüõê׍¨ÿÈö|þ‡Ð—€þ_Hô?þù¿áú¿»0ÿ‚
-9¯˜týgÿÏÿAÔºüç+ÿ¯ÿ˜ÿ¬‰þÇ÷„·þžÿ‚pö|Zï›ÇÕš}HôñðþþÝHôðø‚þO<ÿ©‰þ§Í¾ø?˜ÿ†ùoº‘èáÿÈøüò׍¨ÿððùB_ú?t"Ñÿ´ùÏOþžÿ€Àõ¿nÒõï0þ‚þ’úïÿÈõgþ
-ÓÝlé Ñ‹DÿÓÎÿ~òÐÿÒ׍DÿˆùßÌÿÁÀùߺ‘è’ÿÁó¿˜ÿ¡‰þ!ù–úGÀüÝHôÉÿ þ!Pýºõÿ'ÿm/þÎÿƒÐ— ÷pþ·.$úßÿ1<ÿé}Æþ?„Óþ%¯—tý{ˆÿ#çüg’úOçÿ¸ÚÿaÿÂÌ2D3ý#æ¿äôÿBàüÝHô?¾ÿ#cþÇwâó¶~¨«%Õ¯‰þ!þîÿ@pT¾j$ú‡ø?xÿ‡@ÿ‡n$ú‡ø?¨3ª_5¢þ?"ÿƒù?úÐÿ¡‰þ!þžÿ‚pgf<¢˜týLþG ÿ¤þÓ͹Êÿ`ÿݺ‘è’ÿÁþŠ_7ýCò?xþó?t#Ñ?dþû¿8ÿE7ýCæ¿Pÿ˜ÿ¬‰þ!þžÿ€@ùëFÔÿGä°ÿ¡/ç¿èD¢Èüžÿ†Àõ¿n¢ô’-¯8)<ÎÿñÔÿ3…µœÿ!²þm³k6Íê(ú"$×ßÓÝX ©õo×ûª\Îõ}÷a­â>øõÿ³ÿÛöÿ Öÿ–þo]¤ê·>êE¹™ïÊÅ—rUÍëåÍ÷¸½þCý9Ÿÿ!ä]!(y½¤êÑì£4M|ÿÿeÿß²ÿ÷{݈ôŸ´ú—¬ÿ]î©Ãõ?ƒé"Rÿ—þ¿ð="û?æäú7¾{ÍláÙÿATÿóþøüŸ»ä?[ց¤þãŸÿ>ÿ3ÿ…
-< ¨‰þ§Ív—ügöÿ 0ÿY7ý~þïû?óß1|,Û’Ò׋Dÿügžÿ‡À~Ÿn$úŸ6ÿÙ]òŸ9ÿóŸu#Ñÿ´çÿÜåüõê׍¨ÿÈ|þ‡Ð—€þ_Hô?þù¿áúß3ÿ„
-9¯˜týgÿçCÔºüç—ýÏüÌ֍Dÿãû?Â[ÿ÷ œýŸÖûæqµæ…@ý#ü÷ôèF¢ˆÿƒþoÌ֍DÿÓæ??ù?èÿ†Àü7ÝHôñðùå¯Qÿ1ÿ›ÏÿúÐÿ¡‰þ§Í~òpþ®ÿu“®‡ñ0ÿ‚¤þãû?òAý­ìÿ@0ÝÍ–½Hô?íüï'ÿ÷ Púº‘è1ÿ›úÇÀùߺ‘èâÿ`ÿó?t#Ñ?$ÿƒû?˜ÿ¡‰þ!þêÕ¯QÿÒùߎù@úôó¿éÿÐ…Dÿãû?†ç?½7ìÿA8íÿQòzI×¿Çø?8ÿ‚¤þÓù?®Îÿ²ÿaf™ ¢‰þ!ó_¨œÿ¢‰þÇ÷dÌ
 ÿøN|ÞÖuµ¤ú•"Ñ?ÄÿÁüwŽÊWDÿÿóŸ!Ðÿ¡‰þ!þêÂŒêW¨ÿ˜ÿÂóŸúÐÿ¡‰þ!þꝙñˆbÒõo0þCÿIý§›ÿò’ÿÁü7tèF¢DþG`ÿů‰þùÔ?æèF¢ˆÿƒýœÿ¢‰þ!ó_8ÿóŸu#Ñ?ÄÿÁó(݈úÿ€üöÿ1ô%àüHô™ÿÂó¸þ×M”þÓG¾¼â¤ð8ÿÇSÿÏÖú?DÖ¿mvͦYE_„äú[c2ú ¤Ö¿]ï«r9?Ô÷݇µŠû@â×ÿÏþoxÿ‡0Xÿg<
-¦‹TýïÖÇC½(7ó]¹øR®ªy½¼ù·×ÿa¨ÿ"gþ'„Üøœ’×KªþÍ>Jó×Ä÷ÿŸ÷ÿ™ÿ‚ûÿºé?iõ/Yÿ»ÜQÿëÿ;®ÿu©ÿKÿ_ø‘ýãBpÆw¯³™-,û?’êÞÿ±˜óë@RÿñÏÿ
-Ÿÿ­óôÿC° 5#Ñ?$ÿ™ý?Ì֍Dÿ£Ÿÿ{çþÏüg˶¤ôõ"Ñ?äüçA`ø“n$ú‡ä?óüæ?ëF¢Èù?êÕ¯QÿÿÌóúÐÿ«‰þÇ?ÿ7\ÿóü
-hÿÕLºþ3ˆÿãÔÿ§ÿcz$õŸ.ÿùÊÿÁüÌ֍Dÿãû?†ó?\ȹÿáìÿø´Þ7«5/úèâÿàýýº‘èàÿðýßxþS7ýCòŸéÿ†Àü7ÝHôñðùå¯Qÿáÿàó?„¾ôèD¢Hþ3ç?Aàú_7éúOƒ>)<Þÿa™ÿDRÿñýù þÌÿ@aº›- z‘èÚùßö2ÿ›þ”¾n$úçüï?œÿ­‰þ9ÿûó?t#Ñÿ´ù–ù@˜ÿ¡‰þ§õXæ ¡úu#êÿO:ÿÛ^ü<ÿ¡/Aïÿàüo]Hô?¾ÿ#õï3öÿ!œöÿ(y½¤ëßcüœÿARÿéüWû?ìÿB˜Y&€hF¢ÿiç¿Xæ áüÝHô?¾ÿ#cþÇwâó¶~¨«%Õ¯‰þ!þîÿ@pT¾j$ú‡ø?xÿ‡@ÿ‡n$ú‡ø?¨3ª_5¢þ? ÿ#0ÿB_ú?t"Ñ?ÄÿÁó_îÌŒG@“®ƒ™ÿRÐÿ@Rÿéæ¿ôõçütèF¢ÿió?.ó_ýÿ(~ÝHôÉÿ þ!0ÿC7ýCüìÿBàüÝHô™ÿBÿ7æ?ëF¢Èüžÿ‚@ùëFÔÿŸ4ÿÃqþ¾œÿ¢‰þ!ó_xþ×ÿº‰Òºåã'…Çù?žú¦°ÖÑÿ ²þm³k6Íê(ú"$×ßš¬ ÿBjýÛõ¾*—óC}ß}X«¸$~ýÿìÿ6÷Ãõ?Í ºHÕÿn}<Ô‹r3ß•‹/媚×Ë›ïq{ý†ú/8ÿCÞ‚’×KªþÍ>Jó×Ä÷ÿŸ÷ÿyþ÷ÿu#ÒÒê_²þw¹£þ!Öÿ–ë]DêÿÒÿ¾GdÿǸœñÝëlfΆTÿóþ…ä?Ÿü߬ÿôHê?þù¿áó¿åü6ð  f$úGä?óüæ?ëF¢ÿÑÏÿ½sÿgþ3†e[Rúz‘èpþÏÌ‚À~Ÿn$ú‡ä?óü/æ?ëF¢Hþ3õê׍¨ÿÈæù?}	èÿÕ‰DÿãŸÿ®ÿ»ë ÏÿC°!§â“®ÿãÿàù?’úO—ÿ|åÿàõóŸu#ÑÿøþáüxþÃÙÿñi½oWk^ô!Ñ?ÄÿÁû?ú?t#Ñ?ÄÿAÿ'žÿԍDÿÓæ?_üõùoº‘èáÿÈøüò׍¨ÿððùB_ú?t"Ñÿ´ùÏgÿ‡ãù\ÿë&]ÿãÿÈéÿ@ ©ÿøþ|Pæ 0ÝÍ
 –½Hô?íüï'ÿýÿ(}ÝHôÏùß8ÿ[7ýsþ÷ö{u#Ñ?$ÿƒó¿!0ÿC7ýCò?¨T¿nDýÿIç_ö=çÿAèKÐû?2^T!ÑÿøþáùOï3öÿ!œöÿ(y½¤ëßcüœÿARÿéüWû?ìÿB˜Y&€hF¢Èüú!pþ‹n$úßÿ‘1ÿã;ñy[?ÔÕ’êWŠDÿÿ÷ 8*_5ýCü¼ÿC ÿC7ýCüÔ?„Õ¯Qÿ‘ÿÁü}	èÿЉDÿÿÏA¸33QLºþ
-Æÿáéÿ@ ©ÿtó_®ò?Øÿ…@÷‡n$ú‡ä°ÿâ׍DÿüžÿÀüÝHô™ÿÂþ/ÎэDÿù/Ô?æ?ëF¢Èüžÿ€@ùëFÔÿGä°ÿ¡/ç¿èD¢ÀüÏüO\ÿë&Jÿ鑯8)<ÎÿñÔÿ3…µœÿ!²þm³k6Íê(ú"$×ßÓÝX ©õo×ûª\Îõ}÷a­â>øõÿ³ÿÛöÿ Öÿ†þo]¤ê·>êE¹™ïÊÅ—rUÍëåÍ÷¸½þCý9Ÿÿ!䯔¼^Rõ¿höQš¿&¾ÿÿ²ÿoØÿ‡Àý݈ôŸ´ú—¬ÿ]î¨Ãõ?¯ºˆÔÿ¥ÿ/|Èþq!8ã»×ÙÌŽýIõ?ïÿ؉Ïÿ¹óù¿Óóë?=’úþoøüÏüg6ð  f$úŸ6ÿٝÏÿ±ÿ‡ùϺ‘èôóïÝÿùüácÙ–”¾^$ú‡ä?óü?ú}u#Ñÿ´ùÏî’ÿÌù˜ÿ¬‰þ§=ÿç.ùÏÔ?ª_7¢þ?"ÿ™ÏÿúÐÿ«‰þÇ?ÿ7\ÿ{怰!§â“®ÿâÿàüo’úO—ÿü²ÿã™ÿùϺ‘è|ÿGxëÿàþ„³ÿãÓzß<®Ö¼èC¢ˆÿƒ÷ôèF¢ˆÿƒþo<雷þ§Í~òÐÿ
-ùoº‘èâÿàó?Ê_7¢þ?ÂÿÁç}	èÿЉDÿÓæ??ù?8ÿ
-×ÿºI׿Ãä0ÿ‚¤þãû?òAý­ìÿ@0ÝÍ–½Hô?íüï'ÿ÷ Púº‘è1ÿ›úÇÀùߺ‘èâÿ`ÿó?t#Ñ?$ÿƒû?˜ÿ¡‰þ!þêÕ¯QÿÒùߎù@úôó¿éÿÐ…Dÿãû?†ç?½7ìÿA8íÿQòzI×ú0ð““ýœÿARÿéüWçÙÿ…0³L ÑŒDÿù/Ô?ÎэDÿãû?2æ
 |'>o뇺ZRýJ‘èâÿ`þ;Gå«F¢ˆÿƒùÏèÿЍDÿÿõaFõ«FÔÿäðü'†¾ôèD¢ˆÿƒú‡pgf<¢˜týŒÿ#£ÿ¤þÓÍyÉÿ`þº?t#Ñ?"ÿ#°ÿâ׍Dÿˆüêó?t#Ñ?ÄÿÁþÎэDÿù/œÿ ùϺ‘èâÿàù”¿nDýDþûÿúpþ‹N$ú‡Ìáù\ÿëæ¶þò—óÃ×v¾k~ëd(­·«)œžÇ®ÿóóþŸåó?ÞïuuÿÏ’-_¯8)<ÎÿõÔÿ7…µœÿ!²þm³k6Íê(ú"$×ßš¬ÈY©õo×ûªì–õý&zÿüÿ|þÃÞÿ!žÿ3îê"Uÿ»õñP/ÊÍ|W.¾”«j^/o¾Çíçÿ0ÔÁü¹ñ%¯—Tý/š}”毉ßÿ{öÿxîÿaàó¿nDúOZýKÖÿ.wÔ?„áþ×ÿºˆÔÿeÿOø‘ýãBpÆw¯³™Íö$Õÿ¼ÿk'>ÿkÏçƒgýHê?þùßáó¿užûÿlà`ÍHô?mþ»½œÿ¥þ!0ÿ]7ý~þ÷û?ç¿`øX¶%¥¯‰þç}Áóÿþ¦‰þ§Í·çó¿çÿB`þ»n$úŸöü¯=Ÿÿ¥þ1PýºõÿùïžÏÿúÐÿ«‰þÇ?ÿ;\ÿw׿A°!§â“®ÿôÀ'…'û?xþ‚¤þÓå¿_ù?xý‡ÀüwÝHô?¾ÿ#¼õðü„³ÿãÓzß<®Ö¼èC¢ˆÿƒ÷ôèF¢ˆÿƒþOì÷êF¢ÿióߟüÔ?æ?êF¢ˆÿƒÏÿ(݈úÿÿŸÿ!ô% ÿC'ýO›ÿ~ö8žÿÀÀõ¿nÒõï0þ@ÿIýÇ÷äƒú3ÿ…én¶t€èE¢ÿÑýÝ3ßÿýÿ(}ÝHô?ºÿüõ2ÿÃ/ÛC»\´u³å¥@!ýCü<ÿùº‘è‘ÿa2êó?t#Ñ?ÂÿAýc úu#êÿOçÿÈ‹"\ö©}	zÿçéB¢ÿñýÃóŸÞgìÿC8íÿQòzI׿ŸÐÿáCQä'ÿGÈ8ÿ‚¤þÓù?®ò?Øÿ…0³L ÑŒDÿÓÍé¯ÿ.çù?œÿ¢‰þÇ÷dÌÿøN|ÞÖuµ¤ú•"Ñ?Àÿ2ö!8*_5ýOçÿè×ÿÁ;>ÿC ÿC7ýOçÿèõŸgÔ?†Õ¯Qÿ‘ÿÁüôèF¢ÿéüýýß
 {g©wfÆ# ŠI׿Áä8ú?Hê?Ýü—«üö!Ðý¡‰þ!ùÜÿ…@ñëF¢HþŸÿ 0ÿC7ýCò?Øÿ…À¼gÝHô™ÿBýC`þ³n$ú‡Ìaþ;Ê_7¢þ? ÿ#§þ!ô%àüHô™ÿBÿ'®ÿu¥ÿ"ÙòñŠ“Â#ó?.ý?SXgèÿ@Yÿ¶Ù5›fu}’ëoÉ8ÿBjýÛõ¾*—óC}ß}X«¸$aýßû¿MÎýƒõÿýߺHÕÿn}<Ô‹r3ß•‹/媚×Ë›ïq{ý†úï~Iý#ȍÏ)y½¤êÑì£4M|ÿÿeÿßÒÿ÷{݈ôŸ´ú—¬ÿ]î©Ãõ?Ó t©ÿKÿ_ø‘ýsšúiüiÿ/³§ùïìÿLORýÏû?vâóî|þ/gþ3IýÇ?ÿ7|þ·Žó1ØÀ€š‘èºüçþúïû˜ÿ¬‰þG?ÿ÷Îý?çó?„e[Rúz‘è’ÿÌó?þ¤‰þ§ÿí.ó¿éÿ…ÀügÝHô?íù?w™ÿMýC úu#êÿòŸ™ÿƒ¡/ý¿:‘èüóÃõ¿÷†þ6Ðþ«™týgÿ‡¥ÿ¤þÓå?_ù?˜ÿùϺ‘è|ÿGxëÿàþ„³ÿãÓzß<®Ö¼èC¢ˆÿƒ÷ôèF¢ˆÿƒþoÌ{ӍDÿÓæ??ù?èÿ†Àü7ÝHôñðùå¯Qÿáÿàó?„¾ôèD¢ÿióŸ/þÎÀÀõ¿nÒõï0þæÿBÔ|ÿG>¨¿uý¦»ÙÒ¢‰þ§ÿýäÿàþJ_7ý#æSÿ8ÿ[7ýCüìÿ@`þ‡n$úGäXîÿ@`þ‡n$úGø?¨T¿nDýÿÉüÏû¿Ìÿ Ñ— ŸÿMÿ‡.$úßÿ1<ÿé½aÿÂiÿ’×Kºþ=ÆÿÁù?$õŸÎÿq•ÿÁþ/„™eˆf$ú‡Ì¡þ!pþ‹n$úßÿ‘1ÿã;ñy[?ÔÕ’êWŠDÿÿóß!8*_5ýCü̆@ÿ‡n$ú‡ø?¨3ª_5¢þ?"ÿƒç?!ô% ÿC'ýCüÔ?„;3ãŤëß`üŽþ’úO7ÿå*ÿƒû?èþЍDÿüö Püº‘è’ÿAýC`þ‡n$ú‡ø?ØÿÀù/º‘è2ÿ…ó 0ÿY7ýCæ¿ðüÊ_7¢þ?"ÿƒý}	8ÿE'ýCæ¿ðü®ÿuómýo›e•l÷xÃIáþãBpÆw¯3y0ô@ˆ¨ÿ
 é²ßó-ˆ¬ÿËõ¿{•áüÑõï–¹ð=Îõ/Šõ·™íÊo]qêÿ¦»ÿÛ?ÿù/Ïÿye"ý‘^`ý£ëo…ï!©Wéôë]éõX¤ÿUÿß‹`ýãêß=ô•ÝGÕ
-ÞãÖóŸ	Cÿ—±9Ÿÿ œÊ:_×í“™»0ó3~<ÿ³¯õáð!»üú¡ÙWõjÛým½m«ý¦*­Îÿ§¼+]žÏ~Ü4‹r3?}Q®ÿœ¦]WûË?e[éÿ))×'|ÑõßD]ÿ¥?ÒÊõ]ÿ¯Õ×zûÐHÞãÆõߨn±?¸þgý~üûùòüῪ¯Ÿš¶ÜüõÃ	“¹Y1öן®^ðó¾ª.¿ßaýÌÞe¯_ðùP-Ÿ^ÐÝü]^\ÿ	[´õ¯/€Ï­³³üê¿lËë—øYnsë¯^ðïõj}õS^È/xõS_ðŸÍoßþ×ì^ðí͏õ¾=^ÿùyîÝõŸpNÔ»/_þÕùs½©þ»\U‡Ëf6ÝWÿú“,w»çòü’`_½Åß¶ÍöêOøàî²Ùìú§ßüTÞož_a}xõÿùóÏÛî«ß½æ¯ïý?5ÛÅëÏñõþ±)ï¯ÛÞ¹Üß]×âquùל_}âÙÛß½ú¸¹J€“rÿ7Â÷=ÿÇ=ÿI¤”_ÿSêï…ï!Zÿ¹¨úK¤Xÿ¸ú/ëîƒên	‚÷¸õüÿÖÿe,ç?aà-W7)שE÷ÿ¸ëÿï¿D(×Jý£Ì~ïpóúÿÆÿ—ôÿcèKðäÿ{xàý@)ú/„ï!¹þÛ¸þ¯ôGzA¹þ	!„B!zø?Š/š @ 
\ No newline at end of file
+‹ ÊÖ9K íÝŽÛØ•…ûºŸÂIxþÈRîÁ4f& 6r)°$–DX‰Õ=5O?¤T¬R±œÖ9»ÉåAïõ¡;¶ÛŠ)kk‘‡›ë¬}W—¹ÿ7²«?ý0YGBÿ£)Bvþµñþüã3?c3²Ì›îuÝÏMöÇ0Û;ºâñÔ–Ç~¸ß4›]½ÿ•×UÇâ
+a¹{­ÿéé4Ïw ®þÆyp./úúçÁ³þFõ_W?׫jâïAzý½-rÖÁ¿¨÷ó¶ú:Ñ× ¥þÞ›®þ!7ŽõGðëõ_'ø$Ô?Ër×Õ?wEÁú#¸]ÿîßü·}	âëï}÷;]ýëY‘õo›C³k6O¢/Brýmw7Àó?„Ôú·ÛcU®—§ú¾û°6qH_`©÷·ëoí¨þÞôçÿlæ¿ûåõJð‡Ë>ûñ{¿#‚$Uÿ‡íÓ©^•»å¡\})7Õ²^ß<ÆMýga¤ÿnh©¹ñ’×KªþWÍ1Jó×ÜÖÿøúo»ŸPÿx½×HÿI«Éúßå9õa¼þ÷<¨"Rÿ«rµ­¤]ÀÈþq!¸n9Úé?ë~dÿARýëýºú›ü5Hêÿg®ïÿ…þþõŸIýOõÿV)ÇH¿ÿ·®0¼þ#°!ÿ^òõ"ÑÙ¶Çúþ±­"õpSÿÆŽÎÿ.gÿÃ?u[ýµ\}áI@%ý·O‡¹¯ÿݏÔ?‚e[Rúz‘èWý\íŽ!èÿ‡ÞÿAýϏ¥øU#ÑÿªÙVÇj¿zZv‚éŸÜhÜÖ¿­ÿƒwúG`ìÏ Š‘èÿ—òé´l–åéԬ겭®Û§_9FüõОQÿ¨~݈úÿÛòX­—Ýo,¿–‡ÛǸ©ÿ÷þ_WðþÂPúu"Ñÿþñë}uìW §ªÐDúúß{Kÿ?r*^1éúÏ0þæ?@Ôzÿ‡çÿÈsžÿÚ?T#ÑÿôþðÞÿÁç?ÎþOÛcó¸ÙòD ‰þþWðúþÝHôñÐÿ
+ÁPüª‘èzÿ‡{ïÿ ÿBÎ
+Ÿª‘èâÿàý?Ê_7¢þ?ÀÿÁþ?†¡ôèD¢ÿéýãõ¿÷ÖSÿ¸þ×MºþÆÿÁü_’úOïÿÈGõ·®`ÿ‚é.¶t€èE¢ÿÉýÝ=ß;ÿŸÿ@ ôu#ÑÿäþóÎÿé©?íOíñqÕÖÍž§…Hôñ°ÿùº‘è’ÿÁç?˜ÿ¡‰þ!þêÕ¯Qÿ6ÿÇËó_æ€Jð‡á'<¨B¢ÿéýãýŸÞ;öÿ 
 ôÏÿ(y½¤ëßcüœÿARÿùüWûÙÿ…°°L ÑŒDÿù/Ô?ÎэDÿÓû?2æ|'>ï뇺ZSýJ‘èâÿ`þ;Gå«F¢ˆÿƒùÏèÿЍDÿÿõaAõ«FÔÿGÌáþOC	èÿЉDÿÿõáÎ,¸D1éú7ÿ‡¡ÿ¤þóÍyÍÿ`þº?t#Ñ? ÿ#ìÿ@ øu#Ñ? ÿÃQÿ˜ÿ¡‰þ!þö pþ‹n$ú‡ÌáüÌ֍Dÿÿ÷@ üu#êÿò?ØÿÇ0”€ó_t"Ñ?dþ÷@àú_7Qú·É–7ô
+ó<÷ÿLÑ­ èÿ@Yÿ¶94»fó$ú"$×ßv¿*X©õo·Çª\/Oõ}÷amâ>øõÿ‹ÿÛìÿA­ÿ3.t‘ªÿÃöéT¯ÊÝòP®¾”›jY¯oãöú?Œõ_0ÿCn| äõ’ªÿUsŒÒü5ñýÿ×ù?ìÿcàó݈ôŸ´ú—¬ÿ]¨ãþ?×ÿºˆÔÿ¥ÿ/<FdÿǸ\·íôŸ9“±ÿƒ ©þçç?éÍàøþ_8¯3k|X’úO¿ÿo|ÿß/ xýG`7 jF¢ÿyóŸíeÿõùϺ‘èòý߸þsþ†e[Rúz‘è±ÿÏpÿ/†?éF¢ÿyóŸíeÿçB`þ³n$úŸwÿŸ½ìÿ£þ!PýºõÿùÏ9ïÿ!% ÿW'ýO¿ÿo¼þ÷žù?lÈ©xŤë?Ãø?¸ÿ‚¤þóå?_ù?xþ‡ÀügÝHô?½ÿ#¼÷pÿ„³ÿãÓöØ<n¶<èC¢ˆÿƒ×ôèF¢ˆÿƒþOÜÿ©‰þç;ø?˜ÿ†ùoº‘èáÿ°¼ÿ‡@ùëFÔÿGø?xÿa(ý:‘èÞüç‹ÿƒû?0pý¯›tý;Œÿ#§ÿ¤þÓû?òQý™ÿÂt[:@ô"Ñÿ¼ó¿ŸýôÿC ôu#Ñ?dþ7¯ÿ8ÿ[7ýCæsÿ/æèF¢Hþ‡¡þ0ÿC7ýCò?¨T¿nDýÿYçÛ‹ÿƒóÿ %üœÿ­‰þ§÷Œ÷zoÙÿ‡Ð?ÿ£äõ’®ñpþ3Iýçó\=ÿaÿÂÂ2D3ýCæ¿Ðÿó_t#ÑÿôþŒù߉Ïûú¡®ÖT¿R$ú‡ø?øü‚£òU#Ñ?ÄÿÁë?ú?t#Ñ?ÄÿAýCXPýªõÿùÌÿ0”€þHôñpÿ„;³àŤëß`üžþ’úÏ7ÿå*ÿƒý_tèF¢Hþû?(~ÝHôÉÿàþÌÿЍDÿù/ìÿBàüÝHô™ÿBýC`þ³n$ú‡Ìáþ”¿nDýDþûÿ†pþ‹N$úGÌaþ'®ÿu¥ÿlùxC¯ð8ÿÇsÿÏÖsþ„Èú·Í¡Ù5›'Ñ!¹þÖ˜nIÈúH­»=Våzyªï»k÷Ä¯ÿ_üߦ`ÿÂhýoéÿÖEªþÛ§S½*wËC¹úRnªe½¾yŒÛëÿ0Òè þä]!(y½¤êÕ£4M|ÿÿåù¿wìÿCàõ^7"ý'­þ%ë—êÂxýÏÍ`ºˆÔ
 ÿ¥ÿ/<FdÿǸœñÝëlæŒcÿARýÏÏìÌûÿ\ßÿýýë??’úO¿ÿo|ÿÏüg6p f$úŸ7ÿٝ×ÿìÿa`þ³n$úŸ|ÿß·®ÿ¼ÿ‡ð±lKJ_/ýCòŸ¹ÿû}º‘èÞügwÉæü?Ì֍Dÿóîÿs—ügêÕ¯Qÿ‘ÿÌûC	èÿÕ‰DÿÓïÿ¯ÿ=ó?@ؐSñŠI׆ðpþ7IýçË~}þ“3ÿóŸu#ÑÿôþðÞÿÁç?ÎþOÛcó¸ÙòD ‰þ!þ^ÿ!Ðÿ¡‰þ!þú¿!0ÿY7ýÏ›ÿüìÿ ÿóßt#Ñ?ÄÿÁû”¿nDý„ÿƒ÷ÿ†Ðÿ¡‰þçÍ~öpþ®ÿu“®‡Éÿ`þ/Iý§÷ä£ú[W°ÿÁt[:@ô"Ñÿ¼ó¿Ÿý|þÒ׍Dÿ€ùßžúÇÀùߺ‘èâÿ`ÿó?t#Ñ?$ÿƒÏ 0ÿC7ýCüÔ?ª_7¢þÿ¬ó¿ó?€%æÓÿ¡‰þ§÷Œ÷zïØÿƒÐ?ÿ£äõ’®ñpþIýçó\íÿeÿÂÂ2D3ýCæ¿Pÿ8ÿE7ýOïÿȘÿñø¼¯êjMõ+E¢ˆÿƒù‰þ!þæ?C ÿC7ýCüÔ?„Õ¯QÿÿÁýŸ†Ðÿ¡‰þ!þêYpˆbÒõo0þŒþ’úÏ7ÿå5ÿƒùoèþЍDÿ€üP°ÿâ׍Dÿ€üGýc`þ‡n$ú‡ø?ØÿÀù/º‘è2ÿ…ó 0ÿY7ýCüÜÿò׍¨ÿÈÿ`ÿÂPÎщDÿù/ÜÿëÝDé?}äËz…Çù?žû¦èÎ ô ˆ¬Ûš]³y}’ëo±ôÿ@H­»=Våzyªï»k÷Ä¯ÿ_üߦàõÂhýŸq7˜.RõØ>êU¹[ÊÕ—rS-ëõÍcÜ^ÿ‡±þ‹‚ùŸrãsJ^/©ú_5Ç(Í_ßÿÿÃüo|þ¯‘þ“Vÿ’õ¿Ëõa´þ¿ãú_‘ú¿ôÿ…Ljìÿ‚3¾{Íœ1ìÿ HªÿùùEìÿóýýë??’úO¿ÿo|ÿß- èÿ‡`7 jF¢@þs`ÿóŸu#Ñÿäûÿ¾qýgþ3†e[Rúz‘è²ÿó¿ 0üI7ýCòŸ¹ÿóŸu#Ñ?dÿõê׍¨ÿÈæþ?C	èÿÕ‰DÿÓïÿ¯ÿ¹ÿ…
+´ÿj
 &]ÿÆÿèÿ@ ©ÿ|ùÏWþæ¿@`þ³n$úŸÞÿ1žÿáòŒÏ œýŸ¶Çæq³å‰@ýCü¼þC ÿC7ý#ü†þoÜÿ©‰þùÏ–þoÌӍDÿÿïÿ!PþºõÿþÞÿCJ@ÿ‡N$ú‡ä?sþ®ÿu“®ÿô0è^áñþËü ’úOïÿÈGõgþ
+Ó]lé Ñ‹DÿóÎÿ¶—üúÿ!Púº‘èŸó¿?pþ·n$úçüïßÌÿЍDÿóæXæ aþ‡n$úŸ×ÿa™ÿ„ê׍¨ÿ?ëüo{ñpÿ?„¡ƒÿƒó¿u!Ñÿôþ0Ö¿·ìÿCèŸÿQòzI׿Gø?BÆùÏ$õŸÏÿqõü‡ý_ËÍHô?ïüËü œÿ¢‰þ§÷dÌÿøN|Þ×uµ¦ú•"Ñ?ÄÿÁç?•¯‰þ!þ^ÿ!Ðÿ¡‰þ!þê‚êW¨ÿÈÿ`þ„¡ôèD¢ˆÿƒû¿ Ü™·€(&]ÿ3ÿ%§ÿ¤þóÍêÏù/(èþЍDÿóæ¸Kþýÿ(~ÝHôÉÿ þ!0ÿC7ýCæ¿°ÿó_t#Ñ?bþç?``þ³n$ú‡Ìáþ/”¿nDýÿYó?ç¿ JÀù/:‘è2ÿ…û? pý¯›(ý§[>ÞÐ+<ÎÿñÜÿ3…õ–þ‘õo›C³k6O¢/Brým÷+ú ¤Ö¿Ý«r½<Õ÷݇µ‰û@â×ÿ/þïîÀë?‚ñúŸfP]¤êÿ°}:Õ«r·<”«/å¦ZÖë›Ç¸½þcýœÿƒ!ï
+AÉë%Uÿ«æ¥ùkâûÿ/Ïÿ¹ÿŸÿëF¤ÿ¤Õ¿dýïò@ýC­ÿ-×ÿºˆÔÿ¥ÿ/<FdÿǸœñÝëlæ2ΆTÿóó‹™ÿíY’úO¿ÿo|ÿo9ÿ„
+Ü ¨‰þùÏÜÿ‚ùϺ‘èòý߸þ3ÿÃDz-)}½HôÙÿÇü'ì÷éF¢Dþ³åþ_Ì֍DÿˆügêÕ¯Qÿ‘ÿÌûC	èÿÕ‰DÿÓïÿ¯ÿ½·ÜÿÁ†œŠWLºþ3Œÿƒûÿ Hê?_þó•ÿƒçÌ֍DÿÓû?Æó?\àþ/gÿǧí±yÜly"ЇDÿÿ¯ÿèÿЍDÿÿýŸ¸ÿS7ýÏ›ÿüìÿ þ!0ÿM7ýCü¼ÿ‡@ùëFÔÿGø?xÿa(ý:‘èÞüç‹ÿƒû?0pý¯›tý;Œÿ#Ðÿ@Rÿéýù¨þÌÿ@aº‹- z‘èÞùßÏþúÿ!Púº‘èŸó¿?pþ·n$úçüïßì÷êF¢Dþçc`þ‡n$úGø?¨T¿nDýÿYçÛ‹ÿƒóÿ %üϪèzÿÇxÿ§÷–ýýó?J^/éú÷ÿç?CÔ>ÿÇUþû¿–	 š‘è2ÿ…þ_œÿ¢‰þ§÷dÌÿøN|Þ×uµ¦ú•"Ñ?Âÿaùü‚£òU#Ñ?ÄÿÁë?ú?t#Ñ?ÄÿAýCXPýªõÿùÌÿ0”€þHôñpÿ„;³àŤëß`üŽþ’úÏ7ÿå*ÿƒý_tèF¢Hþû?(~ÝHôÉÿàþÌÿЍDÿüö!pþ‹n$ú‡Ì¡þ!0ÿY7ýCæ¿pÿÊ_7¢þ?"ÿƒýC	8ÿE'ýCæ¿pÿ7®ÿu¥ÿôȏ7ô
+ó<÷ÿLa=ç¿@ˆ¬Ûš]³y}’ëo±†õGZÿv{¬ÊõòTßwÖ&î‰_ÿ¿ø¿MÁþ„ÑúßÐÿ­‹Tý¶O§zUî–‡rõ¥ÜTËz}ó·×ÿa¤ÿþ>€úG_PòzIÕÿª9FiþšøþÿËóïØÿ‡Àçÿºé?iõ/Yÿ»<PÿÆëžt©ÿKÿ_xŒÈþq!8ã»×ÙÌËþ‚¤úŸŸÿØ™÷ÿ¹¾ÿúû?Ö~$õŸ~ÿßøþŸùÏ(là@ÍHô?oþ³;¯ÿÙÿÃÀügÝHô?ùþ¿o\ÿ™ÿŽácÙ–”¾^$ú‡ä?sÿ?ú}u#Ñÿ¼ùÏî’ÿÌù˜ÿ¬‰þçÝÿç.ùÏÔ?ª_7¢þ?"ÿ™÷ÿ†Ðÿ«‰þ§ßÿ7^ÿ{怰!§â“®ÿáÿàüo’úÏ—ÿ|åÿ`þ?æ?ëF¢ÿéýá½ÿƒÏ œýŸ¶Çæq³å‰@ýCü¼þC ÿC7ýCòŸéÿ†Àý^º‘èÞüçgÿýߘÿ¦‰þ!þÞÿC üu#êÿ#ü¼ÿ‡0”€þHô?oþó³ÿƒóß pý¯›tý;Lþó!Hê?½ÿ#Õߺ‚ý¦»ØÒ¢‰þçÿí.ó¿ùü¥¯‰þ!ó¿©œÿ­‰þ!ùìÿ@`þ‡n$ú‡äðùæèF¢ˆÿƒú‡@õëFÔÿŸuþ·cþ¡Ãüoú?t!ÑÿôþñþOï-ûú甼^ÒõŸ>¼Wx²ÿƒó Hê?Ÿÿãêùû¿–	 š‘è2ÿ…ú‡Àù/º‘èzÿGÆüïÄç}ýPWkª_)ýCü̇à¨|ÕHôñ0ÿýº‘èâÿ þ!,¨~Õˆúÿ€üîÿÄ0”€þHôð0ÿÝYpˆbÒõo0ó_
+ú?Hê?ßü—×üæ¿a ûC7ýCò?Øÿ@ñëF¢Hþõùº‘èâÿ`ÿç¿èF¢Èü΀ÀügÝHôñpÿÊ_7¢þ?"ÿƒýC	8ÿE'ýCæ¿pÿ®ÿus[ÿ§Nùëåék»<4¿t²?•?×ûMŠz…ç±ëÿüüüÏòþ¯÷º‰ºþgÉ–¯7ô
+ó=÷ÿMa=ç?Aˆ¬Ûš]³y}’ëo»_ÖAjýÛí±*»å@}¿‹^Äßÿ¿ìÿ0¯ÿF÷ÿŸê"Uÿ‡íÓ©^•»å¡\})7Õ²^ß<Æíûÿ0ÖÁü¹ñ%¯—Tý¯šc”毉þ÷âÿñ|þ‡÷ÿºé?iõ/Yÿ»<PÿÆÏÿ¸þ×E¤þ/Ïÿ„Ljìÿ‚3¾{Í\–³ÿƒ ©þçç¿væý¿ö²ÿ×±þ$õŸ~ÿïøþ¿[ ðù?¸X3ýÏ›ÿn/û©Ì׍Dÿ“ïÿýÆõŸó_0|,Û’Ò׋Dÿˆý¿†ûÿ!0üM7ýÏ›ÿnÏû-çÿB`þ»n$úŸwÿ¯=ïÿ¥þ1Pýºõÿùï9ïÿ!% ÿW'ýO¿ÿw¼þ÷žù_lÈ©xŤë?}3`¯ðdÿ÷ÿAÔ¾ü÷+ÿÏÿ˜ÿ®‰þ§÷„÷þîÿ‚pö|Ú›ÇÍ–'}HôñðúþÝHôñÐÿ	ý^ÝHô?oþû³ÿƒú‡ÀüGÝHôñðþå¯Qÿáÿàý?„¡ôèD¢ÿyóß/þîÿÀÀõ¿nÒõï0þOÿIý§÷ä£ú3ÿ…é.¶t€èE¢ÿÉýÝ=ß;ÿýÿ(}ÝHô?¹ÿü÷2ÿÃOûS{|\µu³ç©@!ýCüÜÿùº‘è’ÿQPÿ˜ÿ¡‰þ!þêÕ¯Qÿ>ÿG^áüü7£þ!%üœ¤‰þ§÷Œ÷zoÙÿ‡Ð?ÿ£äõ’®?£ÿÇ¢È{ÿG°œÿARÿùüWùìÿBXX&€hF¢ÿùæ¿ç—sÿÎэDÿÓû?2æ|'>ï뇺ZSýJ‘èâÿ`ÿ‚£òU#Ñÿ|þaý|àý?ú?t#Ñÿ|þAÿyFýcXPýªõÿùÌÿ@ÿ‡n$úŸÏÿ1\ÿ½†úGpgÜ¢˜týLþ‡¥ÿ¤þóÍyÍÿìÿB ûC7ýCò?øüů‰þ!ù¼ÿƒÀüÝHôñ°ÿyϺ‘è2ÿ…ú‡ÀügÝHôÉÿ`þ;Ê_7¢þ?"ÿƒú‡0”€ó_t"Ñ?dþýŸ¸þ×M”þ‹dËÇz…Gæ\ú¦°ÝËèÿ Yÿ¶94»fó$ú"$×ßc9ÿBjýÛí±*×ËS}ß}X›¸$aý?ø¿mÆçÿFëÿ;ú¿u‘ªÿÃöéT¯ÊÝòP®¾”›jY¯oãöú?Œôú[ê@n|NÉë%Uÿ«æ
 ¥ùkâûÿ/Ïÿ½§ÿ¯÷ºé?iõ/Yÿ»<§þ!Œ×ÿLƒÐE¤þ/ýá1"û?Æ…àŒïŸÿe®ŸÿÎþÏü$ÕÿüüÇμÿϝóŸ3æ?CÔúýãûë8ÿƒ
+Ü ¨‰þçËÎÿ.gÿóŸu#ÑÿäûÿÞ_ÿ}Æû˶¤ôõ"Ñ?bÿ÷ÿ``ø“n$úŸwþ·;ïÿsôÿB`þ³n$úŸwÿŸ;ïÿ£þ1PýºõÿùÏÌÿÁ0”€þ_Hô?ýþ¿ñúß{Gÿ?hÿÕLºþ3ŒÿÃÐÿ@RÿùòŸ¯æ3ÿóŸu#ÑÿôþðÞÿÁç?ÎþOÛcó¸ÙòD ‰þþWðúþÝHôñÐÿ
+yoº‘èÞüçgÿýߘÿ¦‰þ!þÞÿC üu#êÿ#æóþÂPú?t"Ñÿ¼ùÏÿç?`àú_7éúwÿó!Hê?½ÿ#Õߺ‚ý¦»ØÒ¢‰þçÿýìÿàó”¾n$úÌÿöÔ?Îÿ֍Dÿÿû?˜ÿ¡‰þ!ù|þùº‘èâÿ þ!Pýºõÿgó¼<ÿeþˆ¡Ãüoú?t!ÑÿôþñþOïûú甼^Òõï1þÎÿ ©ÿ|þ«ý¿ìÿBXX&€hF¢Èüêç¿èF¢ÿéýó?¾Ÿ÷õC]­©~¥Hôñ0ÿ‚£òU#Ñ?Âÿá™ÿþÝHôðPÿT¿jDýÄüîÿ„0”€þHôñPÿîÌ‚[@“®ƒñXú?Hê?ßü—×üæ¿a ûC7ýCò?Øÿ@ñëF¢Hþõùº‘èâÿ`ÿç¿èF¢Èü΀ÀügÝHôÉÿàþ”¿nDý@þûÿ†pþ‹N$ú‡Ìáþ\ÿëæ×õ¿oÖU²Ýã½Â#üÆ…àŒï^gòàèÿ€Qÿþ²ßò-ˆ¬ÿëù¿{•ãüÑõï–¹ðçúōú;“»Nöýël(Bwý·üãŸ^þùöÊDú–^aý£ëo…ǐÔßÇÕ_ú–^aý£ë/=‹ôï£êÿÛ/¬\ý»›¾²û¨ZÁ1nÝÿ™0ö—ñþB_Öå¶n?˜ÌÜ……_øðãù¿}­O§Ùåçͱª7ûî—õ¾­Ž»ªü¹:ÿŸò®ty¾øq׬Êݲÿ¢\ÿ9M»­Ž—ÿʶÒÿSRÎÿNxÑù?‹:ÿKßÒ+Êõ]ÿ¯Õ×zÿÐHŽqãüo¬)Æçcèÿƒðãßϧç
 ÿU}ýÔ´åîÏzLæÅ"Ø_þzõ‚¿«êòûÖ/ì]ööŸOÕúùÝeÀßåÅõŸð—U[ÿüúøÜ:»È¯^ðÓ¾¼~‰_ä6·þêÿ^o¶WïòB6zÁ›w9~Á6¿üú_³{Á¯ÿ5?ÖÇöéúÏÏsï®ÿ„s¢Þ}¹úò¯Þäßê]õßå¦:]^°°Yè¾úןdy8¼|ç—ûæÙ7û«?჻Ë‹ëô¿ù©¼ß½¼ÂúðæÿÛ?–Ÿ÷ÝW¿{ÍŸ¿õ&ÿÚ<îWo?Ç·/øÇ®¼¿þm{çrw]‹ÇÍ对¼úij÷¿{õqs• 'åúo„ÇÝÿÇÝÿIßÒ+ÊÏÿ)õ÷ÂcˆÖ6ªþÒ·ô
+ëWÿuÝ}PÝ%ApŒ[÷ÿïý_Ærþ^ru“rþ—êQtý;ÿÿöS„rý§Ô?Êì÷
+nžÿßùÿ²‚þC	žý¼¨"Eÿ…ð’ó×ÿ•¾¥W”ëŸB!„¢‡ÿ~v· @ 
\ No newline at end of file

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8ia64-4s2c.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8ia64-4s2c.tar.gz.output	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/8ia64-4s2c.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,53 +1,53 @@
-System(0KB HP=0*0kB  )
-  Socket#6147
-      L3Cache(9216KB)
-        L2Cache(256KB)
-          L1Cache(16KB)
-          Core#0
-            P#0
-      L3Cache(9216KB)
-        L2Cache(256KB)
-          L1Cache(16KB)
-          Core#1
-            P#4
-  Socket#6144
-      L3Cache(9216KB)
-        L2Cache(256KB)
-          L1Cache(16KB)
-          Core#1
-            P#1
-      L3Cache(9216KB)
-        L2Cache(256KB)
-          L1Cache(16KB)
-          Core#0
-            P#5
-  Socket#6145
-      L3Cache(9216KB)
-        L2Cache(256KB)
-          L1Cache(16KB)
-          Core#1
-            P#2
-      L3Cache(9216KB)
-        L2Cache(256KB)
-          L1Cache(16KB)
-          Core#0
-            P#6
-  Socket#6146
-      L3Cache(9216KB)
-        L2Cache(256KB)
-          L1Cache(16KB)
-          Core#1
-            P#3
-      L3Cache(9216KB)
-        L2Cache(256KB)
-          L1Cache(16KB)
-          Core#0
-            P#7
-depth 0:	1 System (type #0)
+Machine (phys=0)
+  Socket #0 (phys=6147)
+    L3Cache #0 (9216KB)
+      L2Cache #0 (256KB)
+        L1Cache #0 (16KB)
+          Core #0 (phys=0)
+            PU #0 (phys=0)
+    L3Cache #1 (9216KB)
+      L2Cache #1 (256KB)
+        L1Cache #1 (16KB)
+          Core #1 (phys=1)
+            PU #1 (phys=4)
+  Socket #1 (phys=6144)
+    L3Cache #2 (9216KB)
+      L2Cache #2 (256KB)
+        L1Cache #2 (16KB)
+          Core #2 (phys=1)
+            PU #2 (phys=1)
+    L3Cache #3 (9216KB)
+      L2Cache #3 (256KB)
+        L1Cache #3 (16KB)
+          Core #3 (phys=0)
+            PU #3 (phys=5)
+  Socket #2 (phys=6145)
+    L3Cache #4 (9216KB)
+      L2Cache #4 (256KB)
+        L1Cache #4 (16KB)
+          Core #4 (phys=1)
+            PU #4 (phys=2)
+    L3Cache #5 (9216KB)
+      L2Cache #5 (256KB)
+        L1Cache #5 (16KB)
+          Core #5 (phys=0)
+            PU #5 (phys=6)
+  Socket #3 (phys=6146)
+    L3Cache #6 (9216KB)
+      L2Cache #6 (256KB)
+        L1Cache #6 (16KB)
+          Core #6 (phys=1)
+            PU #6 (phys=3)
+    L3Cache #7 (9216KB)
+      L2Cache #7 (256KB)
+        L1Cache #7 (16KB)
+          Core #7 (phys=0)
+            PU #7 (phys=7)
+depth 0:	1 Machine (type #1)
  depth 1:	4 Sockets (type #3)
   depth 2:	8 Caches (type #4)
    depth 3:	8 Caches (type #4)
     depth 4:	8 Caches (type #4)
      depth 5:	8 Cores (type #5)
-      depth 6:	8 Procs (type #6)
+      depth 6:	8 PUs (type #6)
 Topology not from this system

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/96em64t-4n4d3ca2co.tar.gz.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/96em64t-4n4d3ca2co.tar.gz.output	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/96em64t-4n4d3ca2co.tar.gz.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,382 +1,382 @@
-System(503GB HP=0*2048kB  )
-  NUMANode#0(125GB)
-    Socket#1
-      L3Cache(16MB)
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#0
-              P#0
-          L1Cache(32KB)
-            Core#1
-              P#4
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#2
-              P#8
-          L1Cache(32KB)
-            Core#3
-              P#12
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#4
-              P#16
-          L1Cache(32KB)
-            Core#5
-              P#20
-    Socket#0
-      L3Cache(16MB)
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#0
-              P#1
-          L1Cache(32KB)
-            Core#1
-              P#5
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#2
-              P#9
-          L1Cache(32KB)
-            Core#3
-              P#13
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#4
-              P#17
-          L1Cache(32KB)
-            Core#5
-              P#21
-    Socket#2
-      L3Cache(16MB)
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#0
-              P#2
-          L1Cache(32KB)
-            Core#1
-              P#6
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#2
-              P#10
-          L1Cache(32KB)
-            Core#3
-              P#14
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#4
-              P#18
-          L1Cache(32KB)
-            Core#5
-              P#22
-    Socket#3
-      L3Cache(16MB)
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#0
-              P#3
-          L1Cache(32KB)
-            Core#1
-              P#7
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#2
-              P#11
-          L1Cache(32KB)
-            Core#3
-              P#15
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#4
-              P#19
-          L1Cache(32KB)
-            Core#5
-              P#23
-  NUMANode#1(126GB)
-    Socket#4
-      L3Cache(16MB)
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#0
-              P#24
-          L1Cache(32KB)
-            Core#1
-              P#28
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#2
-              P#32
-          L1Cache(32KB)
-            Core#3
-              P#36
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#4
-              P#40
-          L1Cache(32KB)
-            Core#5
-              P#44
-    Socket#5
-      L3Cache(16MB)
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#0
-              P#25
-          L1Cache(32KB)
-            Core#1
-              P#29
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#2
-              P#33
-          L1Cache(32KB)
-            Core#3
-              P#37
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#4
-              P#41
-          L1Cache(32KB)
-            Core#5
-              P#45
-    Socket#6
-      L3Cache(16MB)
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#0
-              P#26
-          L1Cache(32KB)
-            Core#1
-              P#30
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#2
-              P#34
-          L1Cache(32KB)
-            Core#3
-              P#38
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#4
-              P#42
-          L1Cache(32KB)
-            Core#5
-              P#46
-    Socket#7
-      L3Cache(16MB)
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#0
-              P#27
-          L1Cache(32KB)
-            Core#1
-              P#31
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#2
-              P#35
-          L1Cache(32KB)
-            Core#3
-              P#39
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#4
-              P#43
-          L1Cache(32KB)
-            Core#5
-              P#47
-  NUMANode#2(126GB)
-    Socket#8
-      L3Cache(16MB)
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#0
-              P#48
-          L1Cache(32KB)
-            Core#1
-              P#52
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#2
-              P#56
-          L1Cache(32KB)
-            Core#3
-              P#60
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#4
-              P#64
-          L1Cache(32KB)
-            Core#5
-              P#68
-    Socket#9
-      L3Cache(16MB)
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#0
-              P#49
-          L1Cache(32KB)
-            Core#1
-              P#53
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#2
-              P#57
-          L1Cache(32KB)
-            Core#3
-              P#61
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#4
-              P#65
-          L1Cache(32KB)
-            Core#5
-              P#69
-    Socket#10
-      L3Cache(16MB)
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#0
-              P#50
-          L1Cache(32KB)
-            Core#1
-              P#54
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#2
-              P#58
-          L1Cache(32KB)
-            Core#3
-              P#62
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#4
-              P#66
-          L1Cache(32KB)
-            Core#5
-              P#70
-    Socket#11
-      L3Cache(16MB)
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#0
-              P#51
-          L1Cache(32KB)
-            Core#1
-              P#55
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#2
-              P#59
-          L1Cache(32KB)
-            Core#3
-              P#63
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#4
-              P#67
-          L1Cache(32KB)
-            Core#5
-              P#71
-  NUMANode#3(126GB)
-    Socket#12
-      L3Cache(16MB)
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#0
-              P#72
-          L1Cache(32KB)
-            Core#1
-              P#76
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#2
-              P#80
-          L1Cache(32KB)
-            Core#3
-              P#84
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#4
-              P#88
-          L1Cache(32KB)
-            Core#5
-              P#92
-    Socket#13
-      L3Cache(16MB)
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#0
-              P#73
-          L1Cache(32KB)
-            Core#1
-              P#77
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#2
-              P#81
-          L1Cache(32KB)
-            Core#3
-              P#85
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#4
-              P#89
-          L1Cache(32KB)
-            Core#5
-              P#93
-    Socket#14
-      L3Cache(16MB)
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#0
-              P#74
-          L1Cache(32KB)
-            Core#1
-              P#78
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#2
-              P#82
-          L1Cache(32KB)
-            Core#3
-              P#86
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#4
-              P#90
-          L1Cache(32KB)
-            Core#5
-              P#94
-    Socket#15
-      L3Cache(16MB)
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#0
-              P#75
-          L1Cache(32KB)
-            Core#1
-              P#79
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#2
-              P#83
-          L1Cache(32KB)
-            Core#3
-              P#87
-        L2Cache(3072KB)
-          L1Cache(32KB)
-            Core#4
-              P#91
-          L1Cache(32KB)
-            Core#5
-              P#95
-depth 0:	1 System (type #0)
+Machine (phys=0 total=528473984KB)
+  NUMANode #0 (phys=0 local=132101504KB total=132101504KB)
+    Socket #0 (phys=1)
+      L3Cache #0 (16384KB)
+        L2Cache #0 (3072KB)
+          L1Cache #0 (32KB)
+            Core #0 (phys=0)
+              PU #0 (phys=0)
+          L1Cache #1 (32KB)
+            Core #1 (phys=1)
+              PU #1 (phys=4)
+        L2Cache #1 (3072KB)
+          L1Cache #2 (32KB)
+            Core #2 (phys=2)
+              PU #2 (phys=8)
+          L1Cache #3 (32KB)
+            Core #3 (phys=3)
+              PU #3 (phys=12)
+        L2Cache #2 (3072KB)
+          L1Cache #4 (32KB)
+            Core #4 (phys=4)
+              PU #4 (phys=16)
+          L1Cache #5 (32KB)
+            Core #5 (phys=5)
+              PU #5 (phys=20)
+    Socket #1 (phys=0)
+      L3Cache #1 (16384KB)
+        L2Cache #3 (3072KB)
+          L1Cache #6 (32KB)
+            Core #6 (phys=0)
+              PU #6 (phys=1)
+          L1Cache #7 (32KB)
+            Core #7 (phys=1)
+              PU #7 (phys=5)
+        L2Cache #4 (3072KB)
+          L1Cache #8 (32KB)
+            Core #8 (phys=2)
+              PU #8 (phys=9)
+          L1Cache #9 (32KB)
+            Core #9 (phys=3)
+              PU #9 (phys=13)
+        L2Cache #5 (3072KB)
+          L1Cache #10 (32KB)
+            Core #10 (phys=4)
+              PU #10 (phys=17)
+          L1Cache #11 (32KB)
+            Core #11 (phys=5)
+              PU #11 (phys=21)
+    Socket #2 (phys=2)
+      L3Cache #2 (16384KB)
+        L2Cache #6 (3072KB)
+          L1Cache #12 (32KB)
+            Core #12 (phys=0)
+              PU #12 (phys=2)
+          L1Cache #13 (32KB)
+            Core #13 (phys=1)
+              PU #13 (phys=6)
+        L2Cache #7 (3072KB)
+          L1Cache #14 (32KB)
+            Core #14 (phys=2)
+              PU #14 (phys=10)
+          L1Cache #15 (32KB)
+            Core #15 (phys=3)
+              PU #15 (phys=14)
+        L2Cache #8 (3072KB)
+          L1Cache #16 (32KB)
+            Core #16 (phys=4)
+              PU #16 (phys=18)
+          L1Cache #17 (32KB)
+            Core #17 (phys=5)
+              PU #17 (phys=22)
+    Socket #3 (phys=3)
+      L3Cache #3 (16384KB)
+        L2Cache #9 (3072KB)
+          L1Cache #18 (32KB)
+            Core #18 (phys=0)
+              PU #18 (phys=3)
+          L1Cache #19 (32KB)
+            Core #19 (phys=1)
+              PU #19 (phys=7)
+        L2Cache #10 (3072KB)
+          L1Cache #20 (32KB)
+            Core #20 (phys=2)
+              PU #20 (phys=11)
+          L1Cache #21 (32KB)
+            Core #21 (phys=3)
+              PU #21 (phys=15)
+        L2Cache #11 (3072KB)
+          L1Cache #22 (32KB)
+            Core #22 (phys=4)
+              PU #22 (phys=19)
+          L1Cache #23 (32KB)
+            Core #23 (phys=5)
+              PU #23 (phys=23)
+  NUMANode #1 (phys=1 local=132124160KB total=132124160KB)
+    Socket #4 (phys=4)
+      L3Cache #4 (16384KB)
+        L2Cache #12 (3072KB)
+          L1Cache #24 (32KB)
+            Core #24 (phys=0)
+              PU #24 (phys=24)
+          L1Cache #25 (32KB)
+            Core #25 (phys=1)
+              PU #25 (phys=28)
+        L2Cache #13 (3072KB)
+          L1Cache #26 (32KB)
+            Core #26 (phys=2)
+              PU #26 (phys=32)
+          L1Cache #27 (32KB)
+            Core #27 (phys=3)
+              PU #27 (phys=36)
+        L2Cache #14 (3072KB)
+          L1Cache #28 (32KB)
+            Core #28 (phys=4)
+              PU #28 (phys=40)
+          L1Cache #29 (32KB)
+            Core #29 (phys=5)
+              PU #29 (phys=44)
+    Socket #5 (phys=5)
+      L3Cache #5 (16384KB)
+        L2Cache #15 (3072KB)
+          L1Cache #30 (32KB)
+            Core #30 (phys=0)
+              PU #30 (phys=25)
+          L1Cache #31 (32KB)
+            Core #31 (phys=1)
+              PU #31 (phys=29)
+        L2Cache #16 (3072KB)
+          L1Cache #32 (32KB)
+            Core #32 (phys=2)
+              PU #32 (phys=33)
+          L1Cache #33 (32KB)
+            Core #33 (phys=3)
+              PU #33 (phys=37)
+        L2Cache #17 (3072KB)
+          L1Cache #34 (32KB)
+            Core #34 (phys=4)
+              PU #34 (phys=41)
+          L1Cache #35 (32KB)
+            Core #35 (phys=5)
+              PU #35 (phys=45)
+    Socket #6 (phys=6)
+      L3Cache #6 (16384KB)
+        L2Cache #18 (3072KB)
+          L1Cache #36 (32KB)
+            Core #36 (phys=0)
+              PU #36 (phys=26)
+          L1Cache #37 (32KB)
+            Core #37 (phys=1)
+              PU #37 (phys=30)
+        L2Cache #19 (3072KB)
+          L1Cache #38 (32KB)
+            Core #38 (phys=2)
+              PU #38 (phys=34)
+          L1Cache #39 (32KB)
+            Core #39 (phys=3)
+              PU #39 (phys=38)
+        L2Cache #20 (3072KB)
+          L1Cache #40 (32KB)
+            Core #40 (phys=4)
+              PU #40 (phys=42)
+          L1Cache #41 (32KB)
+            Core #41 (phys=5)
+              PU #41 (phys=46)
+    Socket #7 (phys=7)
+      L3Cache #7 (16384KB)
+        L2Cache #21 (3072KB)
+          L1Cache #42 (32KB)
+            Core #42 (phys=0)
+              PU #42 (phys=27)
+          L1Cache #43 (32KB)
+            Core #43 (phys=1)
+              PU #43 (phys=31)
+        L2Cache #22 (3072KB)
+          L1Cache #44 (32KB)
+            Core #44 (phys=2)
+              PU #44 (phys=35)
+          L1Cache #45 (32KB)
+            Core #45 (phys=3)
+              PU #45 (phys=39)
+        L2Cache #23 (3072KB)
+          L1Cache #46 (32KB)
+            Core #46 (phys=4)
+              PU #46 (phys=43)
+          L1Cache #47 (32KB)
+            Core #47 (phys=5)
+              PU #47 (phys=47)
+  NUMANode #2 (phys=2 local=132124160KB total=132124160KB)
+    Socket #8 (phys=8)
+      L3Cache #8 (16384KB)
+        L2Cache #24 (3072KB)
+          L1Cache #48 (32KB)
+            Core #48 (phys=0)
+              PU #48 (phys=48)
+          L1Cache #49 (32KB)
+            Core #49 (phys=1)
+              PU #49 (phys=52)
+        L2Cache #25 (3072KB)
+          L1Cache #50 (32KB)
+            Core #50 (phys=2)
+              PU #50 (phys=56)
+          L1Cache #51 (32KB)
+            Core #51 (phys=3)
+              PU #51 (phys=60)
+        L2Cache #26 (3072KB)
+          L1Cache #52 (32KB)
+            Core #52 (phys=4)
+              PU #52 (phys=64)
+          L1Cache #53 (32KB)
+            Core #53 (phys=5)
+              PU #53 (phys=68)
+    Socket #9 (phys=9)
+      L3Cache #9 (16384KB)
+        L2Cache #27 (3072KB)
+          L1Cache #54 (32KB)
+            Core #54 (phys=0)
+              PU #54 (phys=49)
+          L1Cache #55 (32KB)
+            Core #55 (phys=1)
+              PU #55 (phys=53)
+        L2Cache #28 (3072KB)
+          L1Cache #56 (32KB)
+            Core #56 (phys=2)
+              PU #56 (phys=57)
+          L1Cache #57 (32KB)
+            Core #57 (phys=3)
+              PU #57 (phys=61)
+        L2Cache #29 (3072KB)
+          L1Cache #58 (32KB)
+            Core #58 (phys=4)
+              PU #58 (phys=65)
+          L1Cache #59 (32KB)
+            Core #59 (phys=5)
+              PU #59 (phys=69)
+    Socket #10 (phys=10)
+      L3Cache #10 (16384KB)
+        L2Cache #30 (3072KB)
+          L1Cache #60 (32KB)
+            Core #60 (phys=0)
+              PU #60 (phys=50)
+          L1Cache #61 (32KB)
+            Core #61 (phys=1)
+              PU #61 (phys=54)
+        L2Cache #31 (3072KB)
+          L1Cache #62 (32KB)
+            Core #62 (phys=2)
+              PU #62 (phys=58)
+          L1Cache #63 (32KB)
+            Core #63 (phys=3)
+              PU #63 (phys=62)
+        L2Cache #32 (3072KB)
+          L1Cache #64 (32KB)
+            Core #64 (phys=4)
+              PU #64 (phys=66)
+          L1Cache #65 (32KB)
+            Core #65 (phys=5)
+              PU #65 (phys=70)
+    Socket #11 (phys=11)
+      L3Cache #11 (16384KB)
+        L2Cache #33 (3072KB)
+          L1Cache #66 (32KB)
+            Core #66 (phys=0)
+              PU #66 (phys=51)
+          L1Cache #67 (32KB)
+            Core #67 (phys=1)
+              PU #67 (phys=55)
+        L2Cache #34 (3072KB)
+          L1Cache #68 (32KB)
+            Core #68 (phys=2)
+              PU #68 (phys=59)
+          L1Cache #69 (32KB)
+            Core #69 (phys=3)
+              PU #69 (phys=63)
+        L2Cache #35 (3072KB)
+          L1Cache #70 (32KB)
+            Core #70 (phys=4)
+              PU #70 (phys=67)
+          L1Cache #71 (32KB)
+            Core #71 (phys=5)
+              PU #71 (phys=71)
+  NUMANode #3 (phys=3 local=132124160KB total=132124160KB)
+    Socket #12 (phys=12)
+      L3Cache #12 (16384KB)
+        L2Cache #36 (3072KB)
+          L1Cache #72 (32KB)
+            Core #72 (phys=0)
+              PU #72 (phys=72)
+          L1Cache #73 (32KB)
+            Core #73 (phys=1)
+              PU #73 (phys=76)
+        L2Cache #37 (3072KB)
+          L1Cache #74 (32KB)
+            Core #74 (phys=2)
+              PU #74 (phys=80)
+          L1Cache #75 (32KB)
+            Core #75 (phys=3)
+              PU #75 (phys=84)
+        L2Cache #38 (3072KB)
+          L1Cache #76 (32KB)
+            Core #76 (phys=4)
+              PU #76 (phys=88)
+          L1Cache #77 (32KB)
+            Core #77 (phys=5)
+              PU #77 (phys=92)
+    Socket #13 (phys=13)
+      L3Cache #13 (16384KB)
+        L2Cache #39 (3072KB)
+          L1Cache #78 (32KB)
+            Core #78 (phys=0)
+              PU #78 (phys=73)
+          L1Cache #79 (32KB)
+            Core #79 (phys=1)
+              PU #79 (phys=77)
+        L2Cache #40 (3072KB)
+          L1Cache #80 (32KB)
+            Core #80 (phys=2)
+              PU #80 (phys=81)
+          L1Cache #81 (32KB)
+            Core #81 (phys=3)
+              PU #81 (phys=85)
+        L2Cache #41 (3072KB)
+          L1Cache #82 (32KB)
+            Core #82 (phys=4)
+              PU #82 (phys=89)
+          L1Cache #83 (32KB)
+            Core #83 (phys=5)
+              PU #83 (phys=93)
+    Socket #14 (phys=14)
+      L3Cache #14 (16384KB)
+        L2Cache #42 (3072KB)
+          L1Cache #84 (32KB)
+            Core #84 (phys=0)
+              PU #84 (phys=74)
+          L1Cache #85 (32KB)
+            Core #85 (phys=1)
+              PU #85 (phys=78)
+        L2Cache #43 (3072KB)
+          L1Cache #86 (32KB)
+            Core #86 (phys=2)
+              PU #86 (phys=82)
+          L1Cache #87 (32KB)
+            Core #87 (phys=3)
+              PU #87 (phys=86)
+        L2Cache #44 (3072KB)
+          L1Cache #88 (32KB)
+            Core #88 (phys=4)
+              PU #88 (phys=90)
+          L1Cache #89 (32KB)
+            Core #89 (phys=5)
+              PU #89 (phys=94)
+    Socket #15 (phys=15)
+      L3Cache #15 (16384KB)
+        L2Cache #45 (3072KB)
+          L1Cache #90 (32KB)
+            Core #90 (phys=0)
+              PU #90 (phys=75)
+          L1Cache #91 (32KB)
+            Core #91 (phys=1)
+              PU #91 (phys=79)
+        L2Cache #46 (3072KB)
+          L1Cache #92 (32KB)
+            Core #92 (phys=2)
+              PU #92 (phys=83)
+          L1Cache #93 (32KB)
+            Core #93 (phys=3)
+              PU #93 (phys=87)
+        L2Cache #47 (3072KB)
+          L1Cache #94 (32KB)
+            Core #94 (phys=4)
+              PU #94 (phys=91)
+          L1Cache #95 (32KB)
+            Core #95 (phys=5)
+              PU #95 (phys=95)
+depth 0:	1 Machine (type #1)
  depth 1:	4 NUMANodes (type #2)
   depth 2:	16 Sockets (type #3)
    depth 3:	16 Caches (type #4)
     depth 4:	48 Caches (type #4)
      depth 5:	96 Caches (type #4)
       depth 6:	96 Cores (type #5)
-       depth 7:	96 Procs (type #6)
+       depth 7:	96 PUs (type #6)
 Topology not from this system

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/Makefile.am
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/Makefile.am	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/Makefile.am	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,6 +1,9 @@
 # Copyright 2009 INRIA, Université Bordeaux 1
+# Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
 
-include $(top_srcdir)/hwloc.am
+AM_CFLAGS = $(HWLOC_CFLAGS)
+AM_CPPFLAGS = $(HWLOC_CPPFLAGS)
+AM_LDFLAGS = $(HWLOC_LDFLAGS)
 
 # XXX: Add your sysfs tarballs here.
 sysfs_tarballs = \
@@ -16,18 +19,24 @@
 		8ia64-4s2c.tar.gz \
 		16amd64-8n2c.tar.gz \
 		16amd64-8n2c-cpusets.tar.gz \
+		16amd64-8n2c-cpusets.xml.tar.gz \
 		16amd64-8n2c-cpusets_noadmin.tar.gz \
 		16em64t-4s2c2t.tar.gz \
 		16em64t-4s2c2t-offlines.tar.gz \
+		16em64t-4s2c2t-offlines.xml.tar.gz \
+		16em64t-4s2c2t-offlines_noadmin.tar.gz \
 		16em64t-4s2c2t_ncaches.tar.gz \
 		16em64t-4s2c2t_merge.tar.gz \
 		16em64t-4s2c2t.xml.tar.gz \
 		16em64t-2m4c2t.tar.gz \
 		16ia64-8n2s.tar.gz \
+		48amd64-4d2n6c.tar.gz \
 		64fake-4n2s2ca2c2t.tar.gz \
 		96em64t-4n4d3ca2co.tar.gz \
 		256ia64-64n2s2c.tar.gz \
-		4qs22-2s2t.tar.gz
+		4qs22-2s2t.tar.gz \
+		2s390-2c.tar.gz \
+		1alpha.tar.gz
 
 # Each tarball `xyz.tar.gz' must have a corresponoing `xyz.tar.gz.output'
 # file showing the expected output of `lstopo - -v'.
@@ -44,26 +53,32 @@
 		8ia64-4s2c.tar.gz.output \
 		16amd64-8n2c.tar.gz.output \
 		16amd64-8n2c-cpusets.tar.gz.output \
+		16amd64-8n2c-cpusets.xml.tar.gz.output 16amd64-8n2c-cpusets.xml.tar.gz.options \
 		16amd64-8n2c-cpusets_noadmin.tar.gz.output 16amd64-8n2c-cpusets_noadmin.tar.gz.options \
 		16em64t-4s2c2t.tar.gz.output \
 		16em64t-4s2c2t-offlines.tar.gz.output \
+		16em64t-4s2c2t-offlines.xml.tar.gz.output 16em64t-4s2c2t-offlines.xml.tar.gz.options \
+		16em64t-4s2c2t-offlines_noadmin.tar.gz.output 16em64t-4s2c2t-offlines_noadmin.tar.gz.options \
 		16em64t-4s2c2t_ncaches.tar.gz.output 16em64t-4s2c2t_ncaches.tar.gz.options \
 		16em64t-4s2c2t_merge.tar.gz.output 16em64t-4s2c2t_merge.tar.gz.options \
 		16em64t-4s2c2t.xml.tar.gz.output 16em64t-4s2c2t.xml.tar.gz.options \
 		16em64t-2m4c2t.tar.gz.output \
 		16ia64-8n2s.tar.gz.output \
+		48amd64-4d2n6c.tar.gz.output \
 		64fake-4n2s2ca2c2t.tar.gz.output \
 		96em64t-4n4d3ca2co.tar.gz.output \
 		256ia64-64n2s2c.tar.gz.output \
-		4qs22-2s2t.tar.gz.output
+		4qs22-2s2t.tar.gz.output \
+		2s390-2c.tar.gz.output \
+		1alpha.tar.gz.output
 
-if HAVE_LINUX
-if HAVE_OPENAT
+if HWLOC_BUILD_TESTS
+if HWLOC_HAVE_LINUX
+if HWLOC_HAVE_OPENAT
 TESTS = $(sysfs_tarballs)
-endif HAVE_OPENAT
-else !HAVE_LINUX
-TESTS =
-endif !HAVE_LINUX
+endif HWLOC_HAVE_OPENAT
+endif HWLOC_HAVE_LINUX
+endif HWLOC_BUILD_TESTS
 
 EXTRA_DIST = $(sysfs_tarballs) $(sysfs_outputs)
 

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/README
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/README	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/README	2010-05-11 01:47:13 UTC (rev 6632)
@@ -2,8 +2,8 @@
 
 This directory contains tarballs of Linux sysfs hierarchies collected on
 various systems.  Each tarball `xyz.tar.gz' comes with the corresponding
-`xyz.tar.gz.output', which gives the expected output of "lstopo -v -" for
-that system.
+`xyz.tar.gz.output', which gives the expected output of "lstopo -v -"
+for that system.
 
 Together with the `HWLOC_FSROOT' environment variable, these are
 used by `test-topologies.sh' to check for any regression introduced in

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/test-topology.sh.in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/test-topology.sh.in	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux/test-topology.sh.in	2010-05-11 01:47:13 UTC (rev 6632)
@@ -3,6 +3,7 @@
 
 #
 # Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
+# Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
 # See COPYING in top-level directory.
 #
 
@@ -10,8 +11,8 @@
 # hierarchies available here.  Return true on success.
 
 
-abs_top_builddir="@abs_top_builddir@"
-lstopo="$abs_top_builddir/utils/lstopo"
+HWLOC_top_builddir="@HWLOC_top_builddir@"
+lstopo="$HWLOC_top_builddir/utils/lstopo"
 
 topology="$1"
 
@@ -63,7 +64,7 @@
     needxml=0
     grep '<?xml' "$output" >/dev/null 2>&1 && needxml=1
 
-    [ -d "$dir" -a -f "$output" -a \( "@HAVE_XML@" = 1 -o "$needxml" = 0 \) ]
+    [ -d "$dir" -a -f "$output" -a \( "@HWLOC_HAVE_XML@" = 1 -o "$needxml" = 0 \) ]
 }
 
 

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux-libnuma.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux-libnuma.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/linux-libnuma.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -3,7 +3,9 @@
  * See COPYING in top-level directory.
  */
 
+#include <private/config.h>
 #include <hwloc.h>
+#include <assert.h>
 #define NUMA_VERSION1_COMPATIBILITY
 #include <hwloc/linux-libnuma.h>
 
@@ -28,16 +30,18 @@
   if (hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_NODE)) {
     node = NULL;
     while ((node = hwloc_get_next_obj_by_type(topology, HWLOC_OBJ_NODE, node)) != NULL)
-      hwloc_cpuset_orset(set, node->cpuset);
+      hwloc_cpuset_or(set, set, node->cpuset);
   } else {
-    hwloc_cpuset_orset(set, hwloc_get_system_obj(topology)->cpuset);
+    hwloc_cpuset_or(set, set, hwloc_topology_get_complete_cpuset(topology));
   }
 
-  set2 = hwloc_cpuset_from_linux_libnuma_bitmask(topology, numa_all_nodes_ptr);
+  set2 = hwloc_cpuset_alloc();
+  hwloc_cpuset_from_linux_libnuma_bitmask(topology, set2, numa_all_nodes_ptr);
   assert(hwloc_cpuset_isequal(set, set2));
   hwloc_cpuset_free(set2);
 
-  set2 = hwloc_cpuset_from_linux_libnuma_nodemask(topology, &numa_all_nodes);
+  set2 = hwloc_cpuset_alloc();
+  hwloc_cpuset_from_linux_libnuma_nodemask(topology, set2, &numa_all_nodes);
   assert(hwloc_cpuset_isequal(set, set2));
   hwloc_cpuset_free(set2);
 
@@ -53,18 +57,21 @@
 
   /* convert empty nodemask/bitmask to cpuset */
   nodemask_zero(&nodemask);
-  set = hwloc_cpuset_from_linux_libnuma_nodemask(topology, &nodemask);
+  set = hwloc_cpuset_alloc();
+  hwloc_cpuset_from_linux_libnuma_nodemask(topology, set, &nodemask);
   assert(hwloc_cpuset_iszero(set));
   hwloc_cpuset_free(set);
 
   bitmask = numa_bitmask_alloc(1);
-  set = hwloc_cpuset_from_linux_libnuma_bitmask(topology, bitmask);
+  set = hwloc_cpuset_alloc();
+  hwloc_cpuset_from_linux_libnuma_bitmask(topology, set, bitmask);
   numa_bitmask_free(bitmask);
   assert(hwloc_cpuset_iszero(set));
   hwloc_cpuset_free(set);
 
   mask=0;
-  set = hwloc_cpuset_from_linux_libnuma_ulongs(topology, &mask, HWLOC_BITS_PER_LONG);
+  set = hwloc_cpuset_alloc();
+  hwloc_cpuset_from_linux_libnuma_ulongs(topology, set, &mask, HWLOC_BITS_PER_LONG);
   assert(hwloc_cpuset_iszero(set));
   hwloc_cpuset_free(set);
 
@@ -116,7 +123,7 @@
       assert(!mask);
     } else {
       assert(maxnode = node->os_index + 1);
-      assert(mask == (1<<node->os_index));
+      assert(mask == (1U<<node->os_index));
     }
   }
 

Deleted: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/lstopo_xml.sh.in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/lstopo_xml.sh.in	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/lstopo_xml.sh.in	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,29 +0,0 @@
-#!/bin/sh
-#-*-sh-*-
-
-#
-# Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
-# See COPYING in top-level directory.
-#
-
-: ${TMPDIR=/tmp}
-{
-  tmp=`
-    (umask 077 && mktemp -d "$TMPDIR/fooXXXXXX") 2>/dev/null
-  ` &&
-  test -n "$tmp" && test -d "$tmp"
-} || {
-  tmp=$TMPDIR/foo$$-$RANDOM
-  (umask 077 && mkdir "$tmp")
-} || exit $?
-file="$tmp/lstopo_xml.output.xml"
-
-set -e
-../utils/lstopo --xml "$srcdir"/linux/16em64t-4s2c2t.xml.tar.gz.output "$file"
-diff @HWLOC_DIFF_U@ "$srcdir"/linux/16em64t-4s2c2t.xml.tar.gz.output "$file"
-if [ -n "@XMLLINT@" ]
-then
-  cp "$srcdir"/../src/hwloc.dtd "$tmp/"
-  @XMLLINT@ --valid "$file" > /dev/null
-fi
-rm -rf "$tmp"

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/openfabrics-verbs.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/openfabrics-verbs.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/openfabrics-verbs.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -7,13 +7,15 @@
 #include <stdio.h>
 #include <assert.h>
 #include <infiniband/verbs.h>
+#include <private/config.h>
 #include <hwloc.h>
 #include <hwloc/openfabrics-verbs.h>
 
 /* check the ibverbs helpers */
 
-int main(int argc, char **argv)
+int main(void)
 {
+  hwloc_topology_t topology;
   struct ibv_device **dev_list, *dev;
   int count, i;
 
@@ -24,11 +26,15 @@
   }
   printf("ibv_get_device_list found %d devices\n", count);
 
+  hwloc_topology_init(&topology);
+  hwloc_topology_load(topology);
+
   for(i=0; i<count; i++) {
     hwloc_cpuset_t set;
     dev = dev_list[i];
 
-    set = hwloc_ibv_get_device_cpuset(dev);
+    set = hwloc_cpuset_alloc();
+    hwloc_ibv_get_device_cpuset(topology, dev, set);
     if (!set) {
       printf("failed to get cpuset for device %d (%s)\n",
 	     i, ibv_get_device_name(dev));
@@ -42,6 +48,8 @@
     }
   }
 
+  hwloc_topology_destroy(topology);
+
   ibv_free_device_list(dev_list);
 
   return 0;

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/Makefile.am
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/Makefile.am	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/Makefile.am	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,34 +1,63 @@
 # Copyright 2009 INRIA, Université Bordeaux 1
+# Copyright © 2009-2010 Cisco Systems, Inc.  All rights reserved.
 
-include $(top_srcdir)/hwloc.am
+AM_CFLAGS = $(HWLOC_CFLAGS)
+AM_CPPFLAGS = $(HWLOC_CPPFLAGS)
+AM_LDFLAGS = $(HWLOC_LDFLAGS)
 
-SRC=$(top_srcdir)/src
+SRC = $(HWLOC_top_srcdir)/src
 
-if HAVE_LINUX
+if HWLOC_BUILD_TESTS
+if HWLOC_HAVE_LINUX
 check_LTLIBRARIES = libhwloc-ports.la
-endif
+endif HWLOC_HAVE_LINUX
+endif HWLOC_BUILD_TESTS
 
-libhwloc_ports_la_SOURCES = $(SRC)/topology.c $(SRC)/traversal.c $(SRC)/topology-synthetic.c
-libhwloc_ports_la_CFLAGS = -I$(top_srcdir)/tests/ports/include -DHWLOC_COMPILE_PORTS -DHAVE_LIBLGRP -DHAVE_LIBKSTAT
+# Note that AC_CONFIG_LINKS sets up the sym links for the files in
+# this directory (back to the $top_srcdir/src directory).  So if you
+# need more sym-linked files in here, go edit configure.ac.  Note that
+# we have to use sym links in here rather than just directly
+# referencing the files via $HWLOC_top_srcdir/src/foo.c because of
+# dependencies issues when using the Automake option "subdir-objects".
+# We nodist these because they're created by configure.
+nodist_libhwloc_ports_la_SOURCES = \
+        topology.c \
+        traversal.c \
+        topology-synthetic.c \
+        topology-solaris.c \
+        topology-aix.c \
+        topology-osf.c \
+        topology-windows.c \
+        topology-darwin.c \
+        topology-freebsd.c \
+        topology-hpux.c
 
-libhwloc_ports_la_SOURCES += $(SRC)/topology-solaris.c
-libhwloc_ports_la_SOURCES += $(SRC)/topology-aix.c
-libhwloc_ports_la_SOURCES += $(SRC)/topology-osf.c
-libhwloc_ports_la_SOURCES += $(SRC)/topology-windows.c
-libhwloc_ports_la_SOURCES += $(SRC)/topology-darwin.c
-libhwloc_ports_la_SOURCES += $(SRC)/topology-hpux.c
+libhwloc_ports_la_SOURCES = \
+        include/windows.h \
+        include/kstat.h \
+        include/sys/rset.h \
+        include/sys/lgrp_user.h \
+        include/sys/sysctl.h \
+        include/sys/procset.h \
+        include/sys/processor.h \
+        include/sys/thread.h \
+        include/sys/mpctl.h \
+        include/sys/cpuset.h \
+        include/radset.h \
+        include/cpuset.h \
+        include/numa.h \
+        include/pthread_np.h
 
-EXTRA_DIST = \
-		include/windows.h \
-		include/kstat.h \
-		include/sys/rset.h \
-		include/sys/lgrp_user.h \
-		include/sys/sysctl.h \
-		include/sys/procset.h \
-		include/sys/processor.h \
-		include/sys/thread.h \
-		include/sys/mpctl.h \
-		include/radset.h \
-		include/cpuset.h \
-		include/numa.h
+libhwloc_ports_la_CPPFLAGS = \
+        $(HWLOC_CPPFLAGS) \
+        -I$(HWLOC_top_srcdir)/include \
+        -I$(HWLOC_top_srcdir)/tests/ports/include \
+        -DHWLOC_COMPILE_PORTS \
+        -DHWLOC_SOLARIS_SYS -DHAVE_LIBLGRP -DHAVE_LIBKSTAT \
+        -DHWLOC_AIX_SYS \
+        -DHWLOC_OSF_SYS \
+        -DHWLOC_WIN_SYS \
+        -DHWLOC_DARWIN_SYS \
+        -DHWLOC_FREEBSD_SYS -DHAVE_SYS_CPUSET_H \
+        -DHWLOC_HPUX_SYS
 

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/pthread_np.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/pthread_np.h	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/pthread_np.h	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,15 @@
+/*
+ * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
+ * See COPYING in top-level directory.
+ */
+
+#ifndef HWLOC_PORT_PTHREAD_NP_H
+#define HWLOC_PORT_PTHREAD_NP_H
+
+#if 0
+/* Conflict with Linux' */
+int pthread_getaffinity_np(pthread_t, size_t, cpuset_t *);
+int pthread_setaffinity_np(pthread_t, size_t, const cpuset_t *);
+#endif
+
+#endif /* HWLOC_PORT_PTHREAD_NP_H */

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/radset.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/radset.h	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/radset.h	2010-05-11 01:47:13 UTC (rev 6632)
@@ -12,6 +12,7 @@
 typedef int radid_t;
 #define RAD_NONE -1
 typedef struct {
+  int foo;
 } radset_t;
 typedef unsigned int nsgid_t;
 #define NSG_NONE -1

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/sys/cpuset.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/sys/cpuset.h	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/sys/cpuset.h	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,31 @@
+/*
+ * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
+ * See COPYING in top-level directory.
+ */
+
+#ifndef HWLOC_PORT_SYS_CPUSET_H
+#define HWLOC_PORT_SYS_CPUSET_H
+
+#include <limits.h>
+
+typedef long cpuset_t;
+typedef int cpulevel_t;
+typedef int cpuwhich_t;
+
+#define CPU_LEVEL_WHICH 3
+#define CPU_WHICH_TID 1
+#define CPU_WHICH_PID 2
+
+#undef CPU_SETSIZE
+#define CPU_SETSIZE (sizeof(cpuset_t) * CHAR_BIT)
+#undef CPU_ZERO
+#define CPU_ZERO(cpuset) (*(cpuset) = 0)
+#undef CPU_SET
+#define CPU_SET(cpu, cpuset) (*(cpuset) |= (1<<(cpu)))
+#undef CPU_ISSET
+#define CPU_ISSET(cpu, cpuset) (*(cpuset) & (1<<(cpu)))
+
+int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t size, cpuset_t *cpuset);
+int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t size, const cpuset_t *cpuset);
+
+#endif /* HWLOC_PORT_SYS_CPUSET_H */

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/sys/lgrp_user.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/sys/lgrp_user.h	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/sys/lgrp_user.h	2010-05-11 01:47:13 UTC (rev 6632)
@@ -10,7 +10,7 @@
 
 typedef int lgrp_cookie_t;
 #define LGRP_COOKIE_NONE 0
-typedef int lgrp_id_t;
+typedef long lgrp_id_t;
 typedef long long lgrp_mem_size_t;
 
 typedef enum lgrp_content {

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/sys/rset.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/sys/rset.h	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/sys/rset.h	2010-05-11 01:47:13 UTC (rev 6632)
@@ -24,6 +24,8 @@
 #define R_SMPSDL 4
 #define R_MCMSDL 5
 #define R_MAXPROCS 6
+#define R_L2CSDL 11
+#define R_CORESDL 12
 
 #define R_PROCS 6
 
@@ -66,5 +68,6 @@
 
 int ra_attachrset (rstype_t rstype, rsid_t rsid, rsethandle_t rset, unsigned int flags);
 int ra_detachrset (rstype_t rstype, rsid_t rsid, unsigned int flags);
+int ra_getrset (rstype_t rstype, rsid_t rsid, unsigned int flags, rsethandle_t rset);
 
 #endif /* HWLOC_PORT_SYS_RSET_H */

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/sys/sysctl.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/sys/sysctl.h	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/sys/sysctl.h	2010-05-11 01:47:13 UTC (rev 6632)
@@ -6,6 +6,7 @@
 #ifndef HWLOC_PORT_SYS_SYSCTL_H
 #define HWLOC_PORT_SYS_SYSCTL_H
 
+extern int sysctl(int *name, int name_len, void *oldp, size_t *oldlenp, void *newp, size_t newlen);
 extern int sysctlbyname(const char *name, void *oldp, size_t *oldlenp, void *newp, size_t newlen);
 
 #endif /* HWLOC_PORT_SYS_SYSCTL_H */

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/sys/thread.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/sys/thread.h	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/sys/thread.h	2010-05-11 01:47:13 UTC (rev 6632)
@@ -7,7 +7,7 @@
 #define HWLOC_PORT_SYS_THREAD_H
 
 typedef long tid_t;
-tid_t thread_self();
+tid_t thread_self(void);
 struct __pthrdsinfo {
   tid_t __pi_tid;
 };

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/windows.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/windows.h	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/ports/include/windows.h	2010-05-11 01:47:13 UTC (rev 6632)
@@ -17,7 +17,7 @@
 typedef DWORDLONG ULONGLONG, *PULONGLONG;
 typedef unsigned char BYTE, UCHAR;
 typedef unsigned short WORD, USHORT;
-typedef unsigned long ULONG_PTR, DWORD_PTR, DWORD, *PDWORD;
+typedef unsigned long ULONG_PTR, DWORD_PTR, DWORD, *PDWORD, *PDWORD_PTR;
 typedef const char *LPCSTR;
 typedef int (*FARPROC)();
 typedef void *PVOID;
@@ -46,6 +46,7 @@
 
 DWORD_PTR WINAPI SetThreadAffinityMask(HANDLE hThread, DWORD_PTR dwThreadAffinityMask);
 BOOL WINAPI SetProcessAffinityMask(HANDLE hProcess, DWORD_PTR dwProcessAffinityMask);
+BOOL WINAPI GetProcessAffinityMask(HANDLE hProcess, PDWORD_PTR lpProcessAffinityMask, PDWORD_PTR lpSystemAffinityMask);
 
 HANDLE WINAPI GetCurrentThread(void);
 HANDLE WINAPI GetCurrentProcess(void);

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/16amd64-8n2c-cpusets.xml
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/16amd64-8n2c-cpusets.xml	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/16amd64-8n2c-cpusets.xml	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+  <object type="Machine" os_level="-1" os_index="0" cpuset="0x0000f06f" complete_cpuset="0x0000ffff" online_cpuset="0x0000ffef" allowed_cpuset="0x0000f07f" nodeset="0x000000ff" complete_nodeset="0x000000ff" allowed_nodeset="0x0000003e" dmi_board_vendor="TYAN Computer Corp" dmi_board_name="S4881 ">
+    <object type="NUMANode" os_level="-1" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0">
+      <object type="Socket" os_level="-1" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0">
+        <object type="Cache" os_level="-1" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="65536" depth="1">
+            <object type="Core" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0">
+              <object type="PU" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0"/>
+            </object>
+          </object>
+        </object>
+        <object type="Cache" os_level="-1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="65536" depth="1">
+            <object type="Core" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0">
+              <object type="PU" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0"/>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+    <object type="NUMANode" os_level="-1" os_index="1" cpuset="0x0000000c" complete_cpuset="0x0000000c" online_cpuset="0x0000000c" allowed_cpuset="0x0000000c" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" local_memory="8589934592">
+      <object type="Socket" os_level="-1" os_index="1" cpuset="0x0000000c" complete_cpuset="0x0000000c" online_cpuset="0x0000000c" allowed_cpuset="0x0000000c" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+        <object type="Cache" os_level="-1" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="65536" depth="1">
+            <object type="Core" os_level="-1" os_index="0" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+              <object type="PU" os_level="-1" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+            </object>
+          </object>
+        </object>
+        <object type="Cache" os_level="-1" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="65536" depth="1">
+            <object type="Core" os_level="-1" os_index="1" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+              <object type="PU" os_level="-1" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+    <object type="NUMANode" os_level="-1" os_index="2" cpuset="0x00000020" complete_cpuset="0x00000030" online_cpuset="0x00000020" allowed_cpuset="0x00000030" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" local_memory="8589934592">
+      <object type="Socket" os_level="-1" os_index="2" cpuset="0x00000020" complete_cpuset="0x00000030" online_cpuset="0x00000020" allowed_cpuset="0x00000030" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+        <object type="Cache" os_level="-1" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="65536" depth="1">
+            <object type="Core" os_level="-1" os_index="1" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+              <object type="PU" os_level="-1" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+    <object type="NUMANode" os_level="-1" os_index="3" cpuset="0x00000040" complete_cpuset="0x000000c0" online_cpuset="0x000000c0" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" local_memory="8589934592">
+      <object type="Socket" os_level="-1" os_index="3" cpuset="0x00000040" complete_cpuset="0x000000c0" online_cpuset="0x000000c0" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+        <object type="Cache" os_level="-1" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="65536" depth="1">
+            <object type="Core" os_level="-1" os_index="0" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+              <object type="PU" os_level="-1" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+    <object type="NUMANode" os_level="-1" os_index="4" cpuset="0x0" complete_cpuset="0x00000300" online_cpuset="0x00000300" allowed_cpuset="0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" local_memory="8589934592"/>
+    <object type="NUMANode" os_level="-1" os_index="5" cpuset="0x0" complete_cpuset="0x00000c00" online_cpuset="0x00000c00" allowed_cpuset="0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020" local_memory="8589934592"/>
+    <object type="NUMANode" os_level="-1" os_index="6" cpuset="0x00003000" complete_cpuset="0x00003000" online_cpuset="0x00003000" allowed_cpuset="0x00003000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0">
+      <object type="Socket" os_level="-1" os_index="6" cpuset="0x00003000" complete_cpuset="0x00003000" online_cpuset="0x00003000" allowed_cpuset="0x00003000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0">
+        <object type="Cache" os_level="-1" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0" cache_size="65536" depth="1">
+            <object type="Core" os_level="-1" os_index="0" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0">
+              <object type="PU" os_level="-1" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0"/>
+            </object>
+          </object>
+        </object>
+        <object type="Cache" os_level="-1" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0" cache_size="65536" depth="1">
+            <object type="Core" os_level="-1" os_index="1" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0">
+              <object type="PU" os_level="-1" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0"/>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+    <object type="NUMANode" os_level="-1" os_index="7" cpuset="0x0000c000" complete_cpuset="0x0000c000" online_cpuset="0x0000c000" allowed_cpuset="0x0000c000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0">
+      <object type="Socket" os_level="-1" os_index="7" cpuset="0x0000c000" complete_cpuset="0x0000c000" online_cpuset="0x0000c000" allowed_cpuset="0x0000c000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0">
+        <object type="Cache" os_level="-1" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="65536" depth="1">
+            <object type="Core" os_level="-1" os_index="0" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0">
+              <object type="PU" os_level="-1" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0"/>
+            </object>
+          </object>
+        </object>
+        <object type="Cache" os_level="-1" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="65536" depth="1">
+            <object type="Core" os_level="-1" os_index="1" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0">
+              <object type="PU" os_level="-1" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0"/>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+  </object>
+</topology>

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/16em64t-4s2c2t-offlines.xml
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/16em64t-4s2c2t-offlines.xml	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/16em64t-4s2c2t-offlines.xml	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+  <object type="Machine" os_level="-1" os_index="0" cpuset="0x0000905b" complete_cpuset="0x0001915b" online_cpuset="0x0000905b" allowed_cpuset="0x0000915b">
+    <object type="Socket" os_level="-1" os_index="0" cpuset="0x00001011" complete_cpuset="0x00001011" online_cpuset="0x00001011" allowed_cpuset="0x00001011">
+      <object type="Cache" os_level="-1" cpuset="0x00001011" complete_cpuset="0x00001011" online_cpuset="0x00001011" allowed_cpuset="0x00001011" cache_size="4194304" depth="3">
+        <object type="Cache" os_level="-1" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001">
+              <object type="PU" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
+            </object>
+          </object>
+        </object>
+        <object type="Cache" os_level="-1" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="1" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010">
+              <object type="PU" os_level="-1" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010"/>
+              <object type="PU" os_level="-1" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000"/>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+    <object type="Socket" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002">
+      <object type="Cache" os_level="-1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" cache_size="4194304" depth="3">
+        <object type="Cache" os_level="-1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="0" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002">
+              <object type="PU" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002"/>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+    <object type="Socket" os_level="-1" os_index="3" cpuset="0x00008008" complete_cpuset="0x00008008" online_cpuset="0x00008008" allowed_cpuset="0x00008008">
+      <object type="Cache" os_level="-1" cpuset="0x00008008" complete_cpuset="0x00008008" online_cpuset="0x00008008" allowed_cpuset="0x00008008" cache_size="4194304" depth="3">
+        <object type="Cache" os_level="-1" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="0" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008">
+              <object type="PU" os_level="-1" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008"/>
+            </object>
+          </object>
+        </object>
+        <object type="Cache" os_level="-1" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="1" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000">
+              <object type="PU" os_level="-1" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000"/>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+    <object type="Socket" os_level="-1" os_index="2" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040">
+      <object type="Cache" os_level="-1" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" cache_size="4194304" depth="3">
+        <object type="Cache" os_level="-1" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="1" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040">
+              <object type="PU" os_level="-1" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040"/>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+  </object>
+</topology>

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/16em64t-4s2c2t.xml
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/16em64t-4s2c2t.xml	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/16em64t-4s2c2t.xml	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+  <object type="Machine" os_level="-1" os_index="0" cpuset="0x0000ffff" complete_cpuset="0x0000ffff" online_cpuset="0x0000ffff" allowed_cpuset="0x0000ffff">
+    <object type="Socket" os_level="-1" os_index="0" cpuset="0x00001111" complete_cpuset="0x00001111" online_cpuset="0x00001111" allowed_cpuset="0x00001111">
+      <object type="Cache" os_level="-1" cpuset="0x00001111" complete_cpuset="0x00001111" online_cpuset="0x00001111" allowed_cpuset="0x00001111" cache_size="4194304" depth="3">
+        <object type="Cache" os_level="-1" cpuset="0x00000101" complete_cpuset="0x00000101" online_cpuset="0x00000101" allowed_cpuset="0x00000101" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000101" complete_cpuset="0x00000101" online_cpuset="0x00000101" allowed_cpuset="0x00000101" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="0" cpuset="0x00000101" complete_cpuset="0x00000101" online_cpuset="0x00000101" allowed_cpuset="0x00000101">
+              <object type="PU" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
+              <object type="PU" os_level="-1" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100"/>
+            </object>
+          </object>
+        </object>
+        <object type="Cache" os_level="-1" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="1" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010">
+              <object type="PU" os_level="-1" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010"/>
+              <object type="PU" os_level="-1" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000"/>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+    <object type="Socket" os_level="-1" os_index="1" cpuset="0x00002222" complete_cpuset="0x00002222" online_cpuset="0x00002222" allowed_cpuset="0x00002222">
+      <object type="Cache" os_level="-1" cpuset="0x00002222" complete_cpuset="0x00002222" online_cpuset="0x00002222" allowed_cpuset="0x00002222" cache_size="4194304" depth="3">
+        <object type="Cache" os_level="-1" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="0" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202">
+              <object type="PU" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002"/>
+              <object type="PU" os_level="-1" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200"/>
+            </object>
+          </object>
+        </object>
+        <object type="Cache" os_level="-1" cpuset="0x00002020" complete_cpuset="0x00002020" online_cpuset="0x00002020" allowed_cpuset="0x00002020" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00002020" complete_cpuset="0x00002020" online_cpuset="0x00002020" allowed_cpuset="0x00002020" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="1" cpuset="0x00002020" complete_cpuset="0x00002020" online_cpuset="0x00002020" allowed_cpuset="0x00002020">
+              <object type="PU" os_level="-1" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020"/>
+              <object type="PU" os_level="-1" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000"/>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+    <object type="Socket" os_level="-1" os_index="2" cpuset="0x00004444" complete_cpuset="0x00004444" online_cpuset="0x00004444" allowed_cpuset="0x00004444">
+      <object type="Cache" os_level="-1" cpuset="0x00004444" complete_cpuset="0x00004444" online_cpuset="0x00004444" allowed_cpuset="0x00004444" cache_size="4194304" depth="3">
+        <object type="Cache" os_level="-1" cpuset="0x00000404" complete_cpuset="0x00000404" online_cpuset="0x00000404" allowed_cpuset="0x00000404" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000404" complete_cpuset="0x00000404" online_cpuset="0x00000404" allowed_cpuset="0x00000404" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="0" cpuset="0x00000404" complete_cpuset="0x00000404" online_cpuset="0x00000404" allowed_cpuset="0x00000404">
+              <object type="PU" os_level="-1" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004"/>
+              <object type="PU" os_level="-1" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400"/>
+            </object>
+          </object>
+        </object>
+        <object type="Cache" os_level="-1" cpuset="0x00004040" complete_cpuset="0x00004040" online_cpuset="0x00004040" allowed_cpuset="0x00004040" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00004040" complete_cpuset="0x00004040" online_cpuset="0x00004040" allowed_cpuset="0x00004040" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="1" cpuset="0x00004040" complete_cpuset="0x00004040" online_cpuset="0x00004040" allowed_cpuset="0x00004040">
+              <object type="PU" os_level="-1" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040"/>
+              <object type="PU" os_level="-1" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000"/>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+    <object type="Socket" os_level="-1" os_index="3" cpuset="0x00008888" complete_cpuset="0x00008888" online_cpuset="0x00008888" allowed_cpuset="0x00008888">
+      <object type="Cache" os_level="-1" cpuset="0x00008888" complete_cpuset="0x00008888" online_cpuset="0x00008888" allowed_cpuset="0x00008888" cache_size="4194304" depth="3">
+        <object type="Cache" os_level="-1" cpuset="0x00000808" complete_cpuset="0x00000808" online_cpuset="0x00000808" allowed_cpuset="0x00000808" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00000808" complete_cpuset="0x00000808" online_cpuset="0x00000808" allowed_cpuset="0x00000808" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="0" cpuset="0x00000808" complete_cpuset="0x00000808" online_cpuset="0x00000808" allowed_cpuset="0x00000808">
+              <object type="PU" os_level="-1" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008"/>
+              <object type="PU" os_level="-1" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800"/>
+            </object>
+          </object>
+        </object>
+        <object type="Cache" os_level="-1" cpuset="0x00008080" complete_cpuset="0x00008080" online_cpuset="0x00008080" allowed_cpuset="0x00008080" cache_size="1048576" depth="2">
+          <object type="Cache" os_level="-1" cpuset="0x00008080" complete_cpuset="0x00008080" online_cpuset="0x00008080" allowed_cpuset="0x00008080" cache_size="16384" depth="1">
+            <object type="Core" os_level="-1" os_index="1" cpuset="0x00008080" complete_cpuset="0x00008080" online_cpuset="0x00008080" allowed_cpuset="0x00008080">
+              <object type="PU" os_level="-1" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080"/>
+              <object type="PU" os_level="-1" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000"/>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+  </object>
+</topology>

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/8em64t-2mi2ma2c.xml
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/8em64t-2mi2ma2c.xml	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/8em64t-2mi2ma2c.xml	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+  <object type="System" os_level="-1" os_index="0">
+    <object type="Group" os_level="-1" depth="0">
+      <object type="Machine" os_level="-1" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" dmi_board_vendor="Dell Inc." dmi_board_name="0F331C" local_memory="1016368">
+        <page_type size="4096" count="65536"/>
+        <page_type size="1048576" count="1024"/>
+        <object type="Socket" os_level="-1" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003">
+          <object type="Cache" os_level="-1" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" cache_size="2097152" depth="2">
+            <object type="Cache" os_level="-1" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" cache_size="32768" depth="1">
+              <object type="Core" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001">
+                <object type="PU" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
+              </object>
+            </object>
+            <object type="Cache" os_level="-1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" cache_size="32768" depth="1">
+              <object type="Core" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002">
+                <object type="PU" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002"/>
+              </object>
+            </object>
+          </object>
+        </object>
+      </object>
+      <object type="Machine" os_level="-1" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" dmi_board_vendor="Dell Inc." dmi_board_name="0F331C" local_memory="1016368">
+        <page_type size="8192" count="1048576"/>
+        <object type="Socket" os_level="-1" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003">
+          <object type="Cache" os_level="-1" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" cache_size="2097152" depth="2">
+            <object type="Cache" os_level="-1" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" cache_size="32768" depth="1">
+              <object type="Core" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001">
+                <object type="PU" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
+              </object>
+            </object>
+            <object type="Cache" os_level="-1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" cache_size="32768" depth="1">
+              <object type="Core" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002">
+                <object type="PU" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002"/>
+              </object>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+    <object type="Group" os_level="-1" depth="0">
+      <object type="Machine" os_level="-1" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" dmi_board_vendor="Dell Inc." dmi_board_name="0F331C" local_memory="1016368">
+        <page_type size="2048" count="0"/>
+        <object type="Socket" os_level="-1" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003">
+          <object type="Cache" os_level="-1" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" cache_size="2097152" depth="2">
+            <object type="Cache" os_level="-1" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" cache_size="32768" depth="1">
+              <object type="Core" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001">
+                <object type="PU" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
+              </object>
+            </object>
+            <object type="Cache" os_level="-1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" cache_size="32768" depth="1">
+              <object type="Core" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002">
+                <object type="PU" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002"/>
+              </object>
+            </object>
+          </object>
+        </object>
+      </object>
+      <object type="Machine" os_level="-1" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" dmi_board_vendor="Dell Inc." dmi_board_name="0F331C" local_memory="1016368">
+        <page_type size="2048" count="0"/>
+        <page_type size="4096" count="65536"/>
+        <page_type size="1048576" count="2048"/>
+        <object type="Socket" os_level="-1" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003">
+          <object type="Cache" os_level="-1" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" cache_size="2097152" depth="2">
+            <object type="Cache" os_level="-1" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" cache_size="32768" depth="1">
+              <object type="Core" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001">
+                <object type="PU" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
+              </object>
+            </object>
+            <object type="Cache" os_level="-1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" cache_size="32768" depth="1">
+              <object type="Core" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002">
+                <object type="PU" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002"/>
+              </object>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+  </object>
+</topology>

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/Makefile.am
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/Makefile.am	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/Makefile.am	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,25 @@
+# Copyright 2009 INRIA, Université Bordeaux 1
+# Copyright © 2009-2010 Cisco Systems, Inc.  All rights reserved.
+
+AM_CFLAGS = $(HWLOC_CFLAGS)
+AM_CPPFLAGS = $(HWLOC_CPPFLAGS)
+AM_LDFLAGS = $(HWLOC_LDFLAGS)
+
+# Add your XML input files here.
+xml_inputs = \
+	16amd64-8n2c-cpusets.xml \
+	16em64t-4s2c2t.xml \
+	16em64t-4s2c2t-offlines.xml \
+	8em64t-2mi2ma2c.xml
+
+# Only run the tests if we're building standalone, because the tests
+# call hwloc executables.
+if HWLOC_BUILD_TESTS
+if HWLOC_HAVE_XML
+TESTS = $(xml_inputs)
+endif HWLOC_HAVE_XML
+endif HWLOC_BUILD_TESTS
+
+EXTRA_DIST = $(xml_inputs)
+
+TESTS_ENVIRONMENT = $(HWLOC_top_builddir)/tests/xml/test-topology.sh

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/test-topology.sh.in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/test-topology.sh.in	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/test-topology.sh.in	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,49 @@
+#!/bin/sh
+#-*-sh-*-
+
+#
+# Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
+# Copyright © 2010 Cisco Systems, Inc.  All rights reserved.
+# See COPYING in top-level directory.
+#
+
+# Check the conformance of `lstopo' for all the XML
+# hierarchies available here.  Return true on success.
+
+HWLOC_top_builddir="@HWLOC_top_builddir@"
+HWLOC_top_srcdir="@HWLOC_top_srcdir@"
+lstopo="@HWLOC_top_builddir@/utils/lstopo"
+
+error()
+{
+    echo $@ 2>&1
+}
+
+if [ ! -x "$lstopo" ]
+then
+    error "Could not find executable file \`$lstopo'."
+    exit 1
+fi
+
+
+: ${TMPDIR=/tmp}
+{
+  tmp=`
+    (umask 077 && mktemp -d "$TMPDIR/fooXXXXXX") 2>/dev/null
+  ` &&
+  test -n "$tmp" && test -d "$tmp"
+} || {
+  tmp=$TMPDIR/foo$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} || exit $?
+file="$tmp/lstopo_xml.output.xml"
+
+set -e
+$lstopo --xml "$1" "$file"
+diff @HWLOC_DIFF_U@ "$1" "$file"
+if [ -n "@XMLLINT@" ]
+then
+  cp "$HWLOC_top_srcdir"/src/hwloc.dtd "$tmp/"
+  @XMLLINT@ --valid "$file" > /dev/null
+fi
+rm -rf "$tmp"


Property changes on: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/tests/xml/test-topology.sh.in
___________________________________________________________________
Added: svn:executable
   + *

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/Makefile.am
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/Makefile.am	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/Makefile.am	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,48 +1,79 @@
 # Copyright 2009 INRIA, Université Bordeaux 1
-# Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
+# Copyright © 2009-2010 Cisco Systems, Inc.  All rights reserved.
 
-include $(top_srcdir)/hwloc.am
-include $(top_srcdir)/Makefile.man-page-rules
+AM_CFLAGS = $(HWLOC_CFLAGS)
+AM_CPPFLAGS = $(HWLOC_CPPFLAGS)
+AM_LDFLAGS = $(HWLOC_LDFLAGS)
 
-LIBS = $(top_builddir)/src/libhwloc.la
+LIBS += $(HWLOC_top_builddir)/src/libhwloc.la
 
 EXTRA_DIST = test-hwloc-distrib.output
 
-bin_PROGRAMS = lstopo hwloc-mask hwloc-bind hwloc-distrib
+# Only build the utilities if we're building in standalone mode
+if HWLOC_BUILD_UTILS
+bin_PROGRAMS = lstopo hwloc-calc hwloc-bind hwloc-distrib
+endif
 
 lstopo_SOURCES = lstopo.h lstopo.c lstopo-color.c lstopo-text.c lstopo-draw.c lstopo-fig.c
-if HAVE_CAIRO
+if HWLOC_HAVE_CAIRO
 lstopo_SOURCES += lstopo-cairo.c
 endif
-if HAVE_XML
+if HWLOC_HAVE_XML
 lstopo_SOURCES += lstopo-xml.c
 endif
-if HAVE_WINDOWS
+if HWLOC_HAVE_WINDOWS
 lstopo_SOURCES += lstopo-windows.c
 endif
-lstopo_CFLAGS = $(CAIRO_CFLAGS) $(XML_CFLAGS)
-lstopo_LDADD = $(CAIRO_LIBS) $(XML_LIBS) -lm
+lstopo_CFLAGS = $(HWLOC_CAIRO_CFLAGS) $(HWLOC_XML_CFLAGS)
+lstopo_LDADD = $(HWLOC_CAIRO_LIBS) $(HWLOC_XML_LIBS) -lm $(HWLOC_TERMCAP_LIBS) $(HWLOC_X11_LIBS)
 
-hwloc_mask_SOURCES = hwloc-mask.c hwloc-mask.h
+hwloc_calc_SOURCES = hwloc-calc.c hwloc-calc.h
 
-if HAVE_MINGW32
-else
+# Only run the tests if we're building standalone, because the tests
+# call hwloc executables.
+if HWLOC_BUILD_TESTS
+if !HWLOC_HAVE_MINGW32
 TESTS = test-hwloc-distrib.sh
-endif
+endif !HWLOC_HAVE_MINGW32
+endif HWLOC_BUILD_TESTS
 
-man_pages = lstopo.1 hwloc-bind.1 hwloc-distrib.1 hwloc-mask.1
+# Only install man pages if we're building in standalone mode
+if HWLOC_BUILD_UTILS
+man_pages = hwloc.7 lstopo.1 hwloc-bind.1 hwloc-distrib.1 hwloc-calc.1
 EXTRA_DIST += $(man_pages:.1=.1in)
 nodist_man_MANS = $(man_pages)
 
+.1in.1:
+	@ echo Creating $@ man page...
+	@ sed -e 's/#PACKAGE_NAME#/@PACKAGE_NAME@/g' \
+	  -e 's/#PACKAGE_VERSION#/@PACKAGE_VERSION@/g' \
+	  -e 's/#HWLOC_DATE#/@HWLOC_RELEASE_DATE@/g' \
+	  > $@ < $<
+
+.3in.3:
+	@ echo Creating $@ man page...
+	@ sed -e 's/#PACKAGE_NAME#/@PACKAGE_NAME@/g' \
+	  -e 's/#PACKAGE_VERSION#/@PACKAGE_VERSION@/g' \
+	  -e 's/#HWLOC_DATE#/@HWLOC_RELEASE_DATE@/g' \
+	  > $@ < $<
+
+.7in.7:
+	@ echo Creating $@ man page...
+	@ sed -e 's/#PACKAGE_NAME#/@PACKAGE_NAME@/g' \
+	  -e 's/#PACKAGE_VERSION#/@PACKAGE_VERSION@/g' \
+	  -e 's/#HWLOC_DATE#/@HWLOC_RELEASE_DATE@/g' \
+	  > $@ < $<
+
 install-exec-hook: install-man
-	rm -f $(DESTDIR)$(bindir)/hwloc-ls$(EXEEXT) $(DESTDIR)$(bindir)/hwloc-info$(EXEEXT)
-	cd $(DESTDIR)$(bindir) && $(LN_S) lstopo$(EXEEXT) hwloc-ls$(EXEEXT) && $(LN_S) lstopo$(EXEEXT) hwloc-info$(EXEEXT)
-	rm -f $(DESTDIR)$(man1dir)/hwloc-ls.1 $(DESTDIR)$(man1dir)/hwloc-info.1
-	cd $(DESTDIR)$(man1dir) && $(LN_S) lstopo.1 hwloc-ls.1 && $(LN_S) lstopo.1 hwloc-info.1
+	rm -f $(DESTDIR)$(bindir)/hwloc-ls$(EXEEXT) $(DESTDIR)$(bindir)/hwloc-info$(EXEEXT) $(DESTDIR)$(bindir)/hwloc-mask$(EXEEXT)
+	cd $(DESTDIR)$(bindir) && $(LN_S) lstopo$(EXEEXT) hwloc-ls$(EXEEXT) && $(LN_S) lstopo$(EXEEXT) hwloc-info$(EXEEXT) && $(LN_S) hwloc-calc$(EXEEXT) hwloc-mask$(EXEEXT)
+	rm -f $(DESTDIR)$(man1dir)/hwloc-ls.1 $(DESTDIR)$(man1dir)/hwloc-info.1 $(DESTDIR)$(man1dir)/hwloc-mask.1
+	cd $(DESTDIR)$(man1dir) && $(LN_S) lstopo.1 hwloc-ls.1 && $(LN_S) lstopo.1 hwloc-info.1 && $(LN_S) hwloc-calc.1 hwloc-mask.1
 
 uninstall-local:
-	rm -f $(DESTDIR)$(bindir)/hwloc-ls$(EXEEXT) $(DESTDIR)$(bindir)/hwloc-info$(EXEEXT)
-	rm -f $(DESTDIR)$(man1dir)/hwloc-ls.1 $(DESTDIR)$(man1dir)/hwloc-info.1
+	rm -f $(DESTDIR)$(bindir)/hwloc-ls$(EXEEXT) $(DESTDIR)$(bindir)/hwloc-info$(EXEEXT) $(DESTDIR)$(bindir)/hwloc-mask$(EXEEXT)
+	rm -f $(DESTDIR)$(man1dir)/hwloc-ls.1 $(DESTDIR)$(man1dir)/hwloc-info.1 $(DESTDIR)$(man1dir)/hwloc-mask.1
 
 distclean-local:
 	rm -f $(man_pages)
+endif

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-bind.1in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-bind.1in	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-bind.1in	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,25 +1,148 @@
 .\" -*- nroff -*-
+.\" Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
 .TH HWLOC-BIND "1" "#HWLOC_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
 .SH NAME
-hwloc-bind \- Bind a command to given objects or cpu masks
+hwloc-bind \- Launch a command that is bound to specific processors
+and/or memory.
+.
+.\" **************************
+.\"    Synopsis Section
+.\" **************************
 .SH SYNOPSIS
-.B topobind
-[\fIoptions\fR] \fI<location> -- command \fR...
-.SH DESCRIPTION
-.IP
-<location> may be a space\-separated list of cpusets or objects
-.IP
-as supported by the hwloc\-mask utility.
+.
+.B hwloc-bind
+[\fIoptions\fR] \fI<location1> [<location2> [...] ] [--] <command> \fR...
+.
+.\" **************************
+.\"    Options Section
+.\" **************************
 .SH OPTIONS
+.
+See below for a description of valid <location> formats.
+.TP 10
+\fB\-\-get\fR
+Report the current bindings.
 .TP
 \fB\-\-single\fR
-bind on a single CPU to prevent migration
+Bind on a single CPU to prevent migration.
 .TP
 \fB\-\-strict\fR
-require strict binding
+Require strict binding.
 .TP
+\fB\-\-get\fR
+Retrieve the current process binding
+.TP
+\fB\-\-pid\fR <pid>
+Operate on pid <pid>
+.TP
+\fB\-p\fR \fB\-\-physical\fR
+take OS/physical indexes instead of logical indexes
+.TP
+\fB\-l\fR \fB\-\-logical\fR
+take logical indexes instead of physical/OS indexes (default)
+.TP
 \fB\-v\fR
-verbose messages
+Verbose output.
 .TP
 \fB\-\-version\fR
-report version and exit
+Report version and exit.
+.
+.\" **************************
+.\"    Description Section
+.\" **************************
+.SH DESCRIPTION
+.
+hwloc-bind execs an executable (with optional command line arguments)
+that is bound to the specified location (or list of locations).  Upon
+successful execution, hwloc-bind simply sets bindings and then execs
+the executable over itself.
+.
+.PP
+.B NOTE:
+It is highly recommended that you read the hwloc(7) overview page
+before reading this man page.  Most of the concepts described in
+hwloc(7) directly apply to the hwloc-bind utility.
+.
+.
+.\" **************************
+.\"    Examples Section
+.\" **************************
+.SH EXAMPLES
+.PP
+hwloc-bind's operation is best described through several examples.
+.
+.PP
+To run the echo command on the first logical processor of the second
+socket:
+
+    hwloc-bind socket:1.pu:0 -- echo hello
+
+which is exactly equivalent to
+
+    hwloc-bind socket:1.pu:0 echo hello
+
+To bind the "echo" command to the first core of the second socket and
+the second core of the first socket:
+
+    hwloc-bind socket:1.core:0 socket:0.core:1 echo hello
+
+Note that binding the "echo" command to multiple processors is
+probably meaningless (because "echo" is likely implemented as a
+single-threaded application); these examples just serve to show what
+hwloc-bind can do.
+.
+.PP
+To run on the three first sockets on the second and third nodes:
+
+    hwloc-bind node:1-2.socket:0:3 echo hello
+
+To run on processor with physical index 2 in socket with physical index 1:
+
+    hwloc-bind --physical socket:1.core:2 echo hello
+
+To run on odd cores within even sockets:
+
+    hwloc-bind socket:even.core:odd echo hello
+
+To run on the first socket, except on its second and fifth cores:
+
+    hwloc-bind socket:0 ~socket:0.core:1 ~socket:0.core:4 echo hello
+
+The --get option can report current bindings.  This example shows
+nesting hwloc-bind invocations to set a binding and then report it:
+
+    hwloc-bind node:1.socket:2 hwloc-bind --get
+
+On one of the hwloc developer's machines, this example
+.
+reports "0x00004444,0x44000000".  The mask reported on your machine
+may be different.
+.
+.PP
+Locations may also be specified as a hex bit mask (typically generated
+by hwloc-calc).  For example:
+
+    hwloc-bind 0x00004444,0x44000000 echo hello
+    hwloc-bind `hwloc-calc node:1.socket:2` echo hello
+.
+.\" **************************
+.\"    Return value section
+.\" **************************
+.SH RETURN VALUE
+Upon successful execution, hwloc-bind execs the command over itself.
+The return value is therefore whatever the return value of the command
+is.
+.
+.PP
+hwloc-bind will return nonzero if any kind of error occurs, such as
+(but not limited to): failure to parse the command line, failure to
+retrieve process bindings, or lack of a command to execute.
+.
+.\" **************************
+.\"    See also section
+.\" **************************
+.SH SEE ALSO
+.
+.ft R
+hwloc(7), lstopo(1), hwloc-calc(1), hwloc-distrib(1)
+.sp

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-bind.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-bind.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-bind.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -4,24 +4,27 @@
  * See COPYING in top-level directory.
  */
 
-#include <hwloc-mask.h>
+#include <private/private.h>
+#include <hwloc-calc.h>
 #include <hwloc.h>
-#include <private/private.h>
 
 #include <unistd.h>
 #include <errno.h>
-#include <assert.h>
 
 static void usage(FILE *where)
 {
-  fprintf(where, "Usage: topobind [options] <location> -- command ...\n");
+  fprintf(where, "Usage: hwloc-bind [options] <location> -- command ...\n");
   fprintf(where, " <location> may be a space-separated list of cpusets or objects\n");
-  fprintf(where, "            as supported by the hwloc-mask utility.\n");
+  fprintf(where, "            as supported by the hwloc-calc utility.\n");
   fprintf(where, "Options:\n");
-  fprintf(where, "   --single\tbind on a single CPU to prevent migration\n");
-  fprintf(where, "   --strict\trequire strict binding\n");
-  fprintf(where, "   -v\t\tverbose messages\n");
-  fprintf(where, "   --version\treport version and exit\n");
+  fprintf(where, "  -l --logical\ttake logical object indexes (default)\n");
+  fprintf(where, "  -p --physical\ttake physical object indexes\n");
+  fprintf(where, "  --single\tbind on a single CPU to prevent migration\n");
+  fprintf(where, "  --strict\trequire strict binding\n");
+  fprintf(where, "  --get\t\tretrieve current process binding\n");
+  fprintf(where, "  --pid <pid>\toperate on process <pid>\n");
+  fprintf(where, "  -v\t\tverbose messages\n");
+  fprintf(where, "  --version\treport version and exit\n");
 }
 
 int main(int argc, char *argv[])
@@ -29,11 +32,15 @@
   hwloc_topology_t topology;
   unsigned depth;
   hwloc_cpuset_t cpu_set; /* invalid until bind_cpus is set */
+  int get_binding = 0;
   int bind_cpus = 0;
   int single = 0;
   int verbose = 0;
+  int logical = 1;
   int flags = 0;
+  int opt;
   int ret;
+  hwloc_pid_t pid = 0;
   char **orig_argv = argv;
 
   cpu_set = hwloc_cpuset_alloc();
@@ -53,6 +60,8 @@
       break;
     }
 
+    opt = 0;
+
     if (*argv[0] == '-') {
       if (!strcmp(argv[0], "-v")) {
 	verbose = 1;
@@ -70,23 +79,69 @@
 	flags |= HWLOC_CPUBIND_STRICT;
 	goto next;
       }
+      else if (!strcmp(argv[0], "--pid")) {
+        if (argc < 2) {
+          usage (stderr);
+          exit(EXIT_FAILURE);
+        }
+        pid = atoi(argv[1]);
+        opt = 1;
+        goto next;
+      }
       else if (!strcmp (argv[0], "--version")) {
           printf("%s %s\n", orig_argv[0], VERSION);
           exit(EXIT_SUCCESS);
       }
+      if (!strcmp(argv[0], "-l") || !strcmp(argv[0], "--logical")) {
+        logical = 1;
+        goto next;
+      }
+      if (!strcmp(argv[0], "-p") || !strcmp(argv[0], "--physical")) {
+        logical = 0;
+        goto next;
+      }
+      else if (!strcmp (argv[0], "--get")) {
+	  get_binding = 1;
+	  goto next;
+      }
 
       usage(stderr);
       return EXIT_FAILURE;
     }
 
-    hwloc_mask_process_arg(topology, depth, argv[0], cpu_set, verbose);
+    ret = hwloc_mask_process_arg(topology, depth, argv[0], logical, cpu_set, verbose);
+    if (ret < 0) {
+      if (verbose)
+	fprintf(stderr, "assuming the command starts at %s\n", argv[0]);
+      break;
+    }
+
+    /* we found at least one binding argument */
     bind_cpus = 1;
 
   next:
-    argc--;
-    argv++;
+    argc -= opt+1;
+    argv += opt+1;
   }
 
+  if (get_binding) {
+    char *s;
+    int err;
+    if (pid)
+      err = hwloc_get_proc_cpubind(topology, pid, cpu_set, 0);
+    else
+      err = hwloc_get_cpubind(topology, cpu_set, 0);
+    if (err) {
+      const char *errmsg = strerror(errno);
+      fprintf(stderr, "hwloc_get_cpubind failed (errno %d %s)\n", errno, errmsg);
+      return EXIT_FAILURE;
+    }
+    s = hwloc_cpuset_printf_value(cpu_set);
+    printf("%s\n", s);
+    free(s);
+    return EXIT_SUCCESS;
+  }
+
   if (bind_cpus) {
     if (verbose) {
       char *s = hwloc_cpuset_printf_value(cpu_set);
@@ -95,23 +150,36 @@
     }
     if (single)
       hwloc_cpuset_singlify(cpu_set);
-    ret = hwloc_set_cpubind(topology, cpu_set, flags);
+    if (pid)
+      ret = hwloc_set_proc_cpubind(topology, pid, cpu_set, flags);
+    else
+      ret = hwloc_set_cpubind(topology, cpu_set, flags);
     if (ret) {
+      int bind_errno = errno;
+      const char *errmsg = strerror(bind_errno);
       char *s = hwloc_cpuset_printf_value(cpu_set);
-      fprintf(stderr, "hwloc_set_cpubind %s failed (errno %d %s)\n", s, errno, strerror(errno));
+      fprintf(stderr, "hwloc_set_cpubind %s failed (errno %d %s)\n", s, bind_errno, errmsg);
       free(s);
     }
   }
 
-  free(cpu_set);
+  hwloc_cpuset_free(cpu_set);
 
   hwloc_topology_destroy(topology);
 
-  if (!argc)
+  if (pid)
     return EXIT_SUCCESS;
 
+  if (0 == argc) {
+    fprintf(stderr, "%s: nothing to do!\n", orig_argv[0]);
+    return EXIT_FAILURE;
+  }
+
   ret = execvp(argv[0], argv);
-  if (ret && verbose)
-    perror("execvp");
+  if (ret) {
+      fprintf(stderr, "%s: Failed to launch executable \"%s\"\n", 
+              orig_argv[0], argv[0]);
+      perror("execvp");
+  }
   return EXIT_FAILURE;
 }

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-calc.1in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-calc.1in	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-calc.1in	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,135 @@
+.\" -*- nroff -*-
+.TH HWLOC-CALC "1" "#HWLOC_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
+.SH NAME
+hwloc-calc \- Operate on cpu mask strings and objects
+.
+.\" **************************
+.\"    Synopsis Section
+.\" **************************
+.SH SYNOPSIS
+.
+.B hwloc-calc
+[\fIoptions\fR] \fI<location1> [<location2> [...] ]
+.
+.\" **************************
+.\"    Options Section
+.\" **************************
+.SH OPTIONS
+.
+.TP 10
+\fB\-p\fR \fB\-\-physical\fR
+Use OS/physical indexes instead of logical indexes for both input and output.
+.TP
+\fB\-l\fR \fB\-\-logical\fR
+Use logical indexes instead of physical/OS indexes for both input and output (default).
+.TP
+\fB\--pi\fR \fB\-\-physical-input\fR
+Use OS/physical indexes instead of logical indexes for input.
+.TP
+\fB\--li\fR \fB\-\-logical-input\fR
+Use logical indexes instead of physical/OS indexes for input (default).
+.TP
+\fB\--po\fR \fB\-\-physical-input\fR
+Use OS/physical indexes instead of logical indexes for output.
+.TP
+\fB\--lo\fR \fB\-\-logical-output\fR
+Use logical indexes instead of physical/OS indexes for output (default).
+.TP
+\fB\-\-proclist\fR
+Report the comma-separated list of processors' indexes instead of the cpu mask string.
+When combined with \fB\-\-physical\fR, the list is convenient to pass to external
+tools such as taskset or numactl \fB\-\-physcpubind\fR.
+.TP
+\fB\-\-nodelist\fR
+Report the comma-separated list of memory nodes' indexes instead of the cpu mask string.
+When combined with \fB\-\-physical\fR, the list is convenient to pass to external
+tools such as numactl \fB\-\-membind\fR.
+.TP
+\fB\-\-objects\fR
+Report the list of highest objects instead of the cpu mask string.
+.TP
+\fB\-\-single\fR
+Singlify the output to a single CPU.
+.TP
+\fB\-v\fR
+Verbose output.
+.TP
+\fB\-\-version\fR
+Report version and exit.
+.
+.
+.\" **************************
+.\"    Description Section
+.\" **************************
+.SH DESCRIPTION
+.
+hwloc-calc generates and manipulates CPU mask strings or objects.
+Both input and output may be either objects (with physical or logical
+indexes) or CPU mask strings (no logical or physical index involved).
+.
+.PP
+.B NOTE:
+It is highly recommended that you read the hwloc(7) overview page
+before reading this man page.  Most of the concepts described in
+hwloc(7) directly apply to the hwloc-calc utility.
+.
+.
+.\" **************************
+.\"    Examples Section
+.\" **************************
+.SH EXAMPLES
+.PP
+hwloc-calc's operation is best described through several examples.
+.
+.PP
+To display the CPU mask corresponding to the second socket:
+
+    hwloc-calc socket:1
+
+To display the CPU mask corresponding to the third socket, excluding
+its even numbered logical priocessors:
+
+    hwloc-calc socket:2 ~proc:even
+
+To combine two CPU masks:
+
+    hwloc-calc 0x0000ffff 0xff000000
+
+To display the list of logical processors included in the second
+socket:
+
+    hwloc-calc --proclist socket:1
+
+To display the list of NUMA nodes, by physical indexes, that intersect a given CPU mask:
+
+   hwloc-calc --physical --nodelist 0xf0f0f0f0
+
+To display the physical index of a processor given by its logical index:
+
+   hwloc-calc proc:2 --physical-output --proclist
+
+To combine both physical and logical indexes as input:
+
+   hwloc-calc proc:2 --physical-input proc:3
+
+.
+.\" **************************
+.\"    Return value section
+.\" **************************
+.SH RETURN VALUE
+Upon successful execution, hwloc-calc displays the CPU mask string.
+The return value is 0.
+.
+.
+.PP
+hwloc-calc will return nonzero if any kind of error occurs, such as
+(but not limited to): failure to parse the command line.
+.
+.\" **************************
+.\"    See also section
+.\" **************************
+.SH SEE ALSO
+.
+.ft R
+hwloc(7)
+.sp

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-calc.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-calc.c	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-calc.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,173 @@
+/*
+ * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
+ * Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <private/private.h>
+#include <hwloc-calc.h>
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+static void usage(FILE *where)
+{
+  fprintf(where, "Usage: hwloc-calc [options] <location> ...\n");
+  fprintf(where, " <location> may be a space-separated list of cpusets or objects\n");
+  fprintf(where, "            as supported by the hwloc-bind utility.\n");
+  fprintf(where, "Options:\n");
+  fprintf(where, "  -l --logical\tuse logical object indexes (default)\n");
+  fprintf(where, "  -p --physical\tuse physical object indexes\n");
+  fprintf(where, "  --li --logical-input\tuse logical indexes for input (default)\n");
+  fprintf(where, "  --lo --logical-output\tuse logical indexes for output (default)\n");
+  fprintf(where, "  --pi --physical-input\tuse physical indexes for input\n");
+  fprintf(where, "  --po --physical-output\tuse physical indexes for output\n");
+  fprintf(where, "  --PUlist\treport the list of processing units' indexes in the CPU set\n");
+  fprintf(where, "  --nodelist\treport the list of memory nodes' indexes near the CPU set\n");
+  fprintf(where, "  --objects\treport the list of largest objects in the CPU set\n");
+  fprintf(where, "  --single\tsinglify the output to a single CPU\n");
+  fprintf(where, "  -v\t\tverbose messages\n");
+  fprintf(where, "  --version\treport version and exit\n");
+}
+
+int main(int argc, char *argv[])
+{
+  hwloc_topology_t topology;
+  unsigned depth;
+  hwloc_cpuset_t set;
+  int verbose = 0;
+  int logicali = 1;
+  int logicalo = 1;
+  int nodelist = 0;
+  int pulist = 0;
+  int showobjs = 0;
+  int singlify = 0;
+  char **orig_argv = argv;
+
+  set = hwloc_cpuset_alloc();
+
+  hwloc_topology_init(&topology);
+  hwloc_topology_load(topology);
+  depth = hwloc_topology_get_depth(topology);
+
+  while (argc >= 2) {
+    if (*argv[1] == '-') {
+      if (!strcmp(argv[1], "-v")) {
+        verbose = 1;
+        goto next;
+      }
+      if (!strcmp(argv[1], "--help")) {
+	usage(stdout);
+	return EXIT_SUCCESS;
+      }
+      if (!strcasecmp(argv[1], "--pulist") || !strcmp(argv[1], "--proclist") /* backward compat with 0.9 */) {
+	pulist = 1;
+        goto next;
+      }
+      if (!strcmp(argv[1], "--nodelist")) {
+	nodelist = 1;
+        goto next;
+      }
+      if (!strcmp(argv[1], "--objects")) {
+	showobjs = 1;
+        goto next;
+      }
+      if (!strcmp(argv[1], "--version")) {
+        printf("%s %s\n", orig_argv[0], VERSION);
+        exit(EXIT_SUCCESS);
+      }
+      if (!strcmp(argv[1], "-l") || !strcmp(argv[1], "--logical")) {
+	logicali = 1;
+	logicalo = 1;
+	goto next;
+      }
+      if (!strcmp(argv[1], "--li") || !strcmp(argv[1], "--logical-input")) {
+	logicali = 1;
+	goto next;
+      }
+      if (!strcmp(argv[1], "--lo") || !strcmp(argv[1], "--logical-output")) {
+	logicalo = 1;
+	goto next;
+      }
+      if (!strcmp(argv[1], "-p") || !strcmp(argv[1], "--physical")) {
+	logicali = 0;
+	logicalo = 0;
+	goto next;
+      }
+      if (!strcmp(argv[1], "--pi") || !strcmp(argv[1], "--physical-input")) {
+	logicali = 0;
+	goto next;
+      }
+      if (!strcmp(argv[1], "--po") || !strcmp(argv[1], "--physical-output")) {
+	logicalo = 0;
+	goto next;
+      }
+      if (!strcmp(argv[1], "--single")) {
+	singlify = 1;
+	goto next;
+      }
+      usage(stderr);
+      return EXIT_FAILURE;
+    }
+
+    if (hwloc_mask_process_arg(topology, depth, argv[1], logicali, set, verbose) < 0) {
+      if (verbose)
+	fprintf(stderr, "ignored unrecognized argument %s\n", argv[1]);
+    }
+
+ next:
+    argc--;
+    argv++;
+  }
+
+  if (singlify)
+   hwloc_cpuset_singlify(set);
+
+  if (showobjs) {
+    hwloc_cpuset_t remaining = hwloc_cpuset_dup(set);
+    int first = 1;
+    while (!hwloc_cpuset_iszero(remaining)) {
+      char type[64];
+      unsigned idx;
+      hwloc_obj_t obj = hwloc_get_first_largest_obj_inside_cpuset(topology, remaining);
+      hwloc_obj_type_snprintf(type, sizeof(type), obj, 1);
+      idx = logicalo ? obj->logical_index : obj->os_index;
+      printf("%s%s:%u", first ? "" : " ", type, idx);
+      hwloc_cpuset_andnot(remaining, remaining, obj->cpuset);
+      first = 0;
+    }
+    printf("\n");
+    hwloc_cpuset_free(remaining);
+  } else if (pulist) {
+    hwloc_obj_t proc, prev = NULL;
+    while ((proc = hwloc_get_next_obj_covering_cpuset_by_type(topology, set, HWLOC_OBJ_PU, prev)) != NULL) {
+      if (prev)
+	printf(",");
+      printf("%u", logicalo ? proc->logical_index : proc->os_index);
+      prev = proc;
+    }
+    printf("\n");
+  } else if (nodelist) {
+    hwloc_obj_t node, prev = NULL;
+    while ((node = hwloc_get_next_obj_covering_cpuset_by_type(topology, set, HWLOC_OBJ_NODE, prev)) != NULL) {
+      if (prev)
+	printf(",");
+      printf("%u", logicalo ? node->logical_index : node->os_index);
+      prev = node;
+    }
+    printf("\n");
+  } else {
+    char *string = NULL;
+    hwloc_cpuset_asprintf(&string, set);
+    printf("%s\n", string);
+    free(string);
+  }
+
+  hwloc_topology_destroy(topology);
+
+  hwloc_cpuset_free(set);
+
+  return EXIT_SUCCESS;
+}

Copied: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-calc.h (from rev 6631, mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-mask.h)
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-calc.h	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-calc.h	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,254 @@
+/*
+ * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
+ * See COPYING in top-level directory.
+ */
+
+#ifndef HWLOC_MASK_H
+#define HWLOC_MASK_H
+
+#include <private/config.h>
+#include <private/private.h>
+#include <private/misc.h>
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <strings.h>
+#include <ctype.h>
+#include <assert.h>
+
+typedef enum hwloc_mask_append_mode_e {
+  HWLOC_MASK_APPEND_ADD,
+  HWLOC_MASK_APPEND_CLR,
+  HWLOC_MASK_APPEND_AND,
+  HWLOC_MASK_APPEND_XOR,
+} hwloc_mask_append_mode_t;
+
+static inline int
+hwloc_mask_append_cpuset(hwloc_cpuset_t set, hwloc_const_cpuset_t newset,
+		       hwloc_mask_append_mode_t mode, int verbose)
+{
+  char *s1 = hwloc_cpuset_printf_value(newset);
+  char *s2 = hwloc_cpuset_printf_value(set);
+  switch (mode) {
+  case HWLOC_MASK_APPEND_ADD:
+    if (verbose)
+      fprintf(stderr, "adding %s to %s\n",
+          s1, s2);
+    hwloc_cpuset_or(set, set, newset);
+    break;
+  case HWLOC_MASK_APPEND_CLR:
+    if (verbose)
+      fprintf(stderr, "clearing %s from %s\n",
+          s1, s2);
+    hwloc_cpuset_andnot(set, set, newset);
+    break;
+  case HWLOC_MASK_APPEND_AND:
+    if (verbose)
+      fprintf(stderr, "and'ing %s from %s\n",
+          s1, s2);
+    hwloc_cpuset_and(set, set, newset);
+    break;
+  case HWLOC_MASK_APPEND_XOR:
+    if (verbose)
+      fprintf(stderr, "xor'ing %s from %s\n",
+          s1, s2);
+    hwloc_cpuset_xor(set, set, newset);
+    break;
+  default:
+    assert(0);
+  }
+  free(s1);
+  free(s2);
+  return 0;
+}
+
+static inline hwloc_obj_t __hwloc_attribute_pure
+hwloc_mask_get_obj_inside_cpuset_by_depth(hwloc_topology_t topology, hwloc_const_cpuset_t rootset,
+					 unsigned depth, unsigned i, int logical)
+{
+  if (logical) {
+    return hwloc_get_obj_inside_cpuset_by_depth(topology, rootset, depth, i);
+  } else {
+    hwloc_obj_t obj = NULL;
+    while ((obj = hwloc_get_next_obj_inside_cpuset_by_depth(topology, rootset, depth, obj)) != NULL) {
+      if (obj->os_index == i)
+        return obj;
+    }
+    return NULL;
+  }
+}
+
+static inline int
+hwloc_mask_append_object(hwloc_topology_t topology, unsigned topodepth,
+		       hwloc_const_cpuset_t rootset, const char *string, int logical,
+		       hwloc_cpuset_t set, int verbose)
+{
+  hwloc_obj_t obj;
+  unsigned depth, width;
+  char *sep, *sep2, *sep3;
+  unsigned first, wrap, amount, step;
+  unsigned i,j;
+
+  if (!hwloc_namecoloncmp(string, "system", 2))
+    depth = hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_SYSTEM);
+  else if (!hwloc_namecoloncmp(string, "machine", 1))
+    depth = hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_MACHINE);
+  else if (!hwloc_namecoloncmp(string, "node", 1))
+    depth = hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_NODE);
+  else if (!hwloc_namecoloncmp(string, "socket", 2))
+    depth = hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_SOCKET);
+  else if (!hwloc_namecoloncmp(string, "core", 1))
+    depth = hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_CORE);
+  else if (!hwloc_namecoloncmp(string, "pu", 1) || !hwloc_namecoloncmp(string, "proc", 1) /* backward compat with 0.9 */)
+    depth = hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_PU);
+  else {
+    char *end;
+    depth = strtol(string, &end, 0);
+    if (end == string) {
+      if (verbose)
+        fprintf(stderr, "invalid object name %s\n", string);
+      return -1;
+    }
+  }
+
+  if (depth >= topodepth) {
+    if (verbose)
+      fprintf(stderr, "ignoring invalid depth %u\n", depth);
+    return -1;
+  }
+  width = hwloc_get_nbobjs_by_depth(topology, depth);
+
+  sep = strchr(string, ':');
+  if (!sep) {
+    if (verbose)
+      fprintf(stderr, "missing colon separator in argument %s\n", string);
+    return -1;
+  }
+
+  first = atoi(sep+1);
+  amount = 1;
+  step = 1;
+  wrap = 0;
+  if (!isdigit(*(sep+1))) {
+    if (!strncmp(sep+1, "all", 3)) {
+      first = 0;
+      amount = width;
+    } else if (!strncmp(sep+1, "odd", 3)) {
+      first = 1;
+      step = 2;
+      amount = (width+1)/2;
+    } else if (!strncmp(sep+1, "even", 4)) {
+      first = 0;
+      step = 2;
+      amount = (width+1)/2;
+    }
+  }
+
+  sep3 = strchr(sep+1, '.');
+
+  sep2 = strchr(sep+1, '-');
+  if (sep2 && (sep2 < sep3 || !sep3)) {
+    if (*(sep2+1) == '\0')
+      amount = width-first;
+    else
+      amount = atoi(sep2+1)-first+1;
+  } else {
+    sep2 = strchr(sep+1, ':');
+    if (sep2 && (sep2 < sep3 || !sep3)) {
+      amount = atoi(sep2+1);
+      wrap = 1;
+    }
+  }
+
+  for(i=first, j=0; j<amount; i+=step, j++) {
+    if (wrap && i==width)
+      i = 0;
+
+    obj = hwloc_mask_get_obj_inside_cpuset_by_depth(topology, rootset, depth, i, logical);
+    if (verbose) {
+      char * s = hwloc_cpuset_printf_value(rootset);
+      if (obj)
+	printf("object #%u depth %u below cpuset %s found\n",
+	       i, depth, s);
+      else
+	printf("object #%u depth %u below cpuset %s does not exist\n",
+	       i, depth, s);
+      free(s);
+    }
+    if (obj) {
+      if (sep3)
+	hwloc_mask_append_object(topology, topodepth, obj->cpuset, sep3+1, logical, set, verbose);
+      else
+	/* add to the temporary cpuset
+	 * and let the caller add/clear/and/xor for the actual final cpuset depending on cmdline options
+	 */
+        hwloc_mask_append_cpuset(set, obj->cpuset, HWLOC_MASK_APPEND_ADD, verbose);
+    }
+  }
+
+  return 0;
+}
+
+static inline int
+hwloc_mask_process_arg(hwloc_topology_t topology, unsigned topodepth,
+		     const char *arg, int logical, hwloc_cpuset_t set,
+		     int verbose)
+{
+  char *colon;
+  hwloc_mask_append_mode_t mode = HWLOC_MASK_APPEND_ADD;
+  int err;
+
+  if (*arg == '~') {
+    mode = HWLOC_MASK_APPEND_CLR;
+    arg++;
+  } else if (*arg == 'x') {
+    mode = HWLOC_MASK_APPEND_AND;
+    arg++;
+  } else if (*arg == '^') {
+    mode = HWLOC_MASK_APPEND_XOR;
+    arg++;
+  }
+
+  colon = strchr(arg, ':');
+  if (colon) {
+    hwloc_cpuset_t newset = hwloc_cpuset_alloc();
+    err = hwloc_mask_append_object(topology, topodepth, hwloc_topology_get_complete_cpuset(topology), arg, logical, newset, verbose);
+    if (!err)
+      err = hwloc_mask_append_cpuset(set, newset, mode, verbose);
+    hwloc_cpuset_free(newset);
+  } else {
+    /* try to parse as a comma-separated list of integer with 0x as an optional prefix */
+    char *tmp = (char*) arg;
+    hwloc_cpuset_t newset;
+    while (1) {
+      char *next = strchr(tmp, ',');
+      size_t len;
+      if (strncasecmp(tmp, "0x", 2) == 0) {
+        tmp += 2;
+        if (',' == *tmp || 0 == *tmp) {
+          err = -1;
+          goto out;
+        }
+      }
+      len = next ? (size_t) (next-tmp) : strlen(tmp);
+      if (len != strspn(tmp, "0123456789abcdefABCDEF")) {
+        err = -1;
+        goto out;
+      }
+      if (!next)
+        break;
+      tmp = next+1;
+    }
+    newset = hwloc_cpuset_alloc();
+    hwloc_cpuset_from_string(newset, arg);
+    err = hwloc_mask_append_cpuset(set, newset, mode, verbose);
+    hwloc_cpuset_free(newset);
+  }
+
+ out:
+  return err;
+}
+
+#endif /* HWLOC_MASK_H */

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-distrib.1in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-distrib.1in	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-distrib.1in	2010-05-11 01:47:13 UTC (rev 6632)
@@ -2,16 +2,97 @@
 .TH HWLOC-DISTRIB "1" "#HWLOC_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
 .SH NAME
 hwloc-distrib \- Build a number of cpu masks distributed on the system
+.
+.\" **************************
+.\"    Synopsis Section
+.\" **************************
 .SH SYNOPSIS
 .B topodistrib
-[\fIoptions\fR] \fInumber\fR
+[\fIoptions\fR] \fI<integer>\fR
+.
+.\" **************************
+.\"    Options Section
+.\" **************************
 .SH OPTIONS
 .TP
 \fB\-v\fR
-verbose messages
+Singlify each output to a single CPU.
 .TP
+\fB\-v\fR
+Verbose messages.
+.TP
 \fB\-\-synthetic\fR "2 2"
-simulate a fake hierarchy
+Simulate a fake hierarchy.
 .TP
 \fB\-\-version\fR
-report version and exit
+Report version and exit.
+.
+.\" **************************
+.\"    Description Section
+.\" **************************
+.SH DESCRIPTION
+.
+hwloc-distrib generates a series of CPU masks in an attempt to
+distribute a set of processes around multiple processors in a single
+server.  These masks can be used with hwloc-bind(1).
+.
+.PP
+.B NOTE:
+It is highly recommended that you read the hwloc(7) overview page
+before reading this man page.  Most of the concepts described in
+hwloc(7) directly apply to the hwloc-bind utility.
+.
+.
+.\" **************************
+.\"    Examples Section
+.\" **************************
+.SH EXAMPLES
+.PP
+hwloc-distrib's operation is best described through several examples.
+.
+.PP
+If 4 processes have to be distributed across a machine, their CPU masks
+may be obtained with:
+
+    $ hwloc-distrib 4
+    0000000f
+    00000f00
+    000000f0
+    0000f000
+
+To get a single processor of each CPU masks (prevent migration in case
+of binding)
+
+    $ hwloc-distrib 4 --single
+    00000001
+    00000100
+    00000010
+    00001000
+
+To convert the output into a list of processors that may be passed to
+dplace -c inside a mpirun command line:
+
+    $ hwloc-distrib 4 --single | xargs hwloc-calc --pulist
+    0,8,4,16
+.
+.
+.\" **************************
+.\"    Return value section
+.\" **************************
+.SH RETURN VALUE
+Upon successful execution, hwloc-distrib displays one or more CPU mask
+strings.  The return value is 0.
+.
+.
+.PP
+hwloc-distrib will return nonzero if any kind of error occurs, such as
+(but not limited to) failure to parse the command line.
+.
+.\" **************************
+.\"    See also section
+.\" **************************
+.SH SEE ALSO
+.
+.ft R
+hwloc(7)
+.sp

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-distrib.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-distrib.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-distrib.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -4,19 +4,19 @@
  * See COPYING in top-level directory.
  */
 
+#include <private/private.h>
 #include <hwloc.h>
-#include <private/private.h>
 
 #include <unistd.h>
-#include <assert.h>
 
 static void usage(FILE *where)
 {
-  fprintf(where, "Usage: topodistrib [options] number\n");
+  fprintf(where, "Usage: hwloc-distrib [options] number\n");
   fprintf(where, "Options:\n");
+  fprintf(where, "  --single\tsinglify each output to a single CPU\n");
   fprintf(where, "   -v\t\t\tverbose messages\n");
   fprintf(where, "   --synthetic \"2 2\"\tsimulate a fake hierarchy\n");
-#ifdef HAVE_XML
+#ifdef HWLOC_HAVE_XML
   fprintf(where, "   --xml <path>\t\tread topology from XML file <path>\n");
 #endif
   fprintf(where, "   --version\t\treport version and exit\n");
@@ -27,6 +27,7 @@
   long n = -1;
   char * synthetic = NULL;
   const char * xmlpath = NULL;
+  int singlify = 0;
   int verbose = 0;
   char **orig_argv = argv;
 
@@ -42,6 +43,10 @@
     }
 
     if (*argv[0] == '-') {
+      if (!strcmp(argv[0], "--single")) {
+	singlify = 1;
+	goto next;
+      }
       if (!strcmp(argv[0], "-v")) {
 	verbose = 1;
 	goto next;
@@ -64,7 +69,7 @@
           printf("%s %s\n", orig_argv[0], VERSION);
           exit(EXIT_SUCCESS);
       }
-#ifdef HAVE_XML
+#ifdef HWLOC_HAVE_XML
       if (!strcmp (argv[0], "--xml")) {
 	if (argc <= 2) {
 	  usage(stdout);
@@ -77,7 +82,7 @@
 	  xmlpath = "/dev/stdin";
 	goto next;
       }
-#endif /* HAVE_XML */
+#endif /* HWLOC_HAVE_XML */
 
       usage(stderr);
       return EXIT_FAILURE;
@@ -116,12 +121,15 @@
       hwloc_topology_set_xml(topology, xmlpath);
     hwloc_topology_load(topology);
 
-    hwloc_distribute(topology, hwloc_get_system_obj(topology), cpuset, n);
+    hwloc_distribute(topology, hwloc_get_root_obj(topology), cpuset, n);
     for (i = 0; i < n; i++) {
       char *str = NULL;
+      if (singlify)
+	hwloc_cpuset_singlify(cpuset[i]);
       hwloc_cpuset_asprintf(&str, cpuset[i]);
       printf("%s\n", str);
       free(str);
+      hwloc_cpuset_free(cpuset[i]);
     }
     hwloc_topology_destroy(topology);
   }

Deleted: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-mask.1in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-mask.1in	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-mask.1in	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,62 +0,0 @@
-.\" -*- nroff -*-
-.TH HWLOC-MASK "1" "#HWLOC_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
-.SH NAME
-hwloc-mask \- Build a cpu mask
-.SH SYNOPSIS
-.B hwloc-mask
-[\fIoptions\fR] [\fIstring\fR] ...
-.SH DESCRIPTION
-<string> may be <depth:index>
-.TP
-\-
-<depth> may be system, machine, node, socket, core, proc or a numeric depth
-.TP
-\-
-<index> may be
-.TP
-\&.
-X        one object with index X
-.TP
-\&.
-X\-Y      all objects with index between X and Y
-.TP
-\&.
-X\-       all objects with index at least X
-.TP
-\&.
-X:N      N objects starting with index X, possibly wrapping\-around the end of the level
-.TP
-\&.
-all      all objects
-.TP
-\&.
-odd      all objects with odd index
-.TP
-\&.
-even     all objects with even index
-.TP
-\-
-several <depth:index> may be concatenated with `.' to select some specific children
-.PP
-<string> may also be a cpuset string
-.PP
-If prefixed with `~', the given string will be cleared instead of added to the current cpuset
-If prefixed with `x', the given string will be and'ed instead of added to the current cpuset
-If prefixed with `^', the given string will be xor'ed instead of added to the current cpuset
-.PP
-String are processed in order, without priorities.
-Compose multiple invokations for complex operations.
-e.g. for (A|B)^(C|D), use: hwloc\-mask A B ^$(hwloc\-mask C D)
-.SH OPTIONS
-.TP
-\fB\-v\fR
-verbose
-.TP
-\fB\-\-proclist\fR
-report the list of processors in the CPU set
-.TP
-\fB\-\-nodelist\fR
-report the list of memory nodes near the CPU set
-.TP
-\fB\-\-version\fR
-report version and exit

Deleted: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-mask.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-mask.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-mask.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,122 +0,0 @@
-/*
- * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
- * Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
- * See COPYING in top-level directory.
- */
-
-#include <hwloc-mask.h>
-#include <hwloc.h>
-#include <private/private.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-static void usage(FILE *where)
-{
-  fprintf(where, "Usage: hwloc-mask [options] [string] ...\n");
-  fprintf(where, "\n<string> may be <depth:index>\n");
-  fprintf(where, "  -  <depth> may be system, machine, node, socket, core, proc or a numeric depth\n");
-  fprintf(where, "  -  <index> may be\n");
-  fprintf(where, "    .  X\tone object with index X\n");
-  fprintf(where, "    .  X-Y\tall objects with index between X and Y\n");
-  fprintf(where, "    .  X-\tall objects with index at least X\n");
-  fprintf(where, "    .  X:N\tN objects starting with index X, possibly wrapping-around the end of the level\n");
-  fprintf(where, "    .  all\tall objects\n");
-  fprintf(where, "    .  odd\tall objects with odd index\n");
-  fprintf(where, "    .  even\tall objects with even index\n");
-  fprintf(where, "  -  several <depth:index> may be concatenated with `.' to select some specific children\n");
-  fprintf(where, "\n<string> may also be a cpuset string\n");
-  fprintf(where, "\nIf prefixed with `~', the given string will be cleared instead of added to the current cpuset\n");
-  fprintf(where, "If prefixed with `x', the given string will be and'ed instead of added to the current cpuset\n");
-  fprintf(where, "If prefixed with `^', the given string will be xor'ed instead of added to the current cpuset\n");
-  fprintf(where, "\nString are processed in order, without priorities.\n");
-  fprintf(where, "Compose multiple invokations for complex operations.\n");
-  fprintf(where, "e.g. for (A|B)^(C|D), use: hwloc-mask A B ^$(hwloc-mask C D)\n");
-  fprintf(where, "\nOptions:\n");
-  fprintf(where, "  -v\tverbose\n");
-  fprintf(where, "  --proclist\treport the list of processors in the CPU set\n");
-  fprintf(where, "  --nodelist\treport the list of memory nodes near the CPU set\n");
-  fprintf(where, "  --version\treport version and exit\n");
-}
-
-int main(int argc, char *argv[])
-{
-  hwloc_topology_t topology;
-  unsigned depth;
-  hwloc_cpuset_t set;
-  int verbose = 0;
-  int nodelist = 0;
-  int proclist = 0;
-  char **orig_argv = argv;
-
-  set = hwloc_cpuset_alloc();
-
-  hwloc_topology_init(&topology);
-  hwloc_topology_load(topology);
-  depth = hwloc_topology_get_depth(topology);
-
-  while (argc >= 2) {
-    if (*argv[1] == '-') {
-      if (!strcmp(argv[1], "-v")) {
-        verbose = 1;
-        goto next;
-      }
-      if (!strcmp(argv[1], "--help")) {
-	usage(stdout);
-	return EXIT_SUCCESS;
-      }
-      if (!strcmp(argv[1], "--proclist")) {
-	proclist = 1;
-        goto next;
-      }
-      if (!strcmp(argv[1], "--nodelist")) {
-	nodelist = 1;
-        goto next;
-      }
-      if (!strcmp(argv[1], "--version")) {
-        printf("%s %s\n", orig_argv[0], VERSION);
-        exit(EXIT_SUCCESS);
-      }
-      usage(stderr);
-      return EXIT_FAILURE;
-    }
-
-    hwloc_mask_process_arg(topology, depth, argv[1], set, verbose);
-
- next:
-    argc--;
-    argv++;
-  }
-
-  if (proclist) {
-    hwloc_obj_t proc, prev = NULL;
-    while ((proc = hwloc_get_next_obj_covering_cpuset_by_type(topology, set, HWLOC_OBJ_PROC, prev)) != NULL) {
-      if (prev)
-	printf(",");
-      printf("%d", proc->os_index);
-      prev = proc;
-    }
-    printf("\n");
-  } else if (nodelist) {
-    hwloc_obj_t node, prev = NULL;
-    while ((node = hwloc_get_next_obj_covering_cpuset_by_type(topology, set, HWLOC_OBJ_NODE, prev)) != NULL) {
-      if (prev)
-	printf(",");
-      printf("%d", node->os_index);
-      prev = node;
-    }
-    printf("\n");
-  } else {
-    char *string = NULL;
-    hwloc_cpuset_asprintf(&string, set);
-    printf("%s\n", string);
-    free(string);
-  }
-
-  hwloc_topology_destroy(topology);
-
-  free(set);
-
-  return EXIT_SUCCESS;
-}

Deleted: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-mask.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-mask.h	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc-mask.h	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,195 +0,0 @@
-/*
- * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
- * See COPYING in top-level directory.
- */
-
-#ifndef HWLOC_MASK_H
-#define HWLOC_MASK_H
-
-#include <hwloc.h>
-#include <private/config.h>
-#include <private/private.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <strings.h>
-#include <ctype.h>
-#include <assert.h>
-
-typedef enum hwloc_mask_append_mode_e {
-  HWLOC_MASK_APPEND_ADD,
-  HWLOC_MASK_APPEND_CLR,
-  HWLOC_MASK_APPEND_AND,
-  HWLOC_MASK_APPEND_XOR,
-} hwloc_mask_append_mode_t;
-
-static __inline void
-hwloc_mask_append_cpuset(hwloc_cpuset_t set, hwloc_cpuset_t newset,
-		       hwloc_mask_append_mode_t mode, int verbose)
-{
-  char *s1 = hwloc_cpuset_printf_value(newset);
-  char *s2 = hwloc_cpuset_printf_value(set);
-  switch (mode) {
-  case HWLOC_MASK_APPEND_ADD:
-    if (verbose)
-      fprintf(stderr, "adding %s to %s\n",
-          s1, s2);
-    hwloc_cpuset_orset(set, newset);
-    break;
-  case HWLOC_MASK_APPEND_CLR:
-    if (verbose)
-      fprintf(stderr, "clearing %s from %s\n",
-          s1, s2);
-    hwloc_cpuset_clearset(set, newset);
-    break;
-  case HWLOC_MASK_APPEND_AND:
-    if (verbose)
-      fprintf(stderr, "and'ing %s from %s\n",
-          s1, s2);
-    hwloc_cpuset_andset(set, newset);
-    break;
-  case HWLOC_MASK_APPEND_XOR:
-    if (verbose)
-      fprintf(stderr, "xor'ing %s from %s\n",
-          s1, s2);
-    hwloc_cpuset_xorset(set, newset);
-    break;
-  default:
-    assert(1);
-  }
-  free(s1);
-  free(s2);
-}
-
-static __inline int
-hwloc_mask_append_object(hwloc_topology_t topology, unsigned topodepth,
-		       hwloc_cpuset_t rootset, const char *string,
-		       hwloc_cpuset_t set, hwloc_mask_append_mode_t mode, int verbose)
-{
-  hwloc_obj_t obj;
-  unsigned depth, width;
-  char *sep, *sep2, *sep3;
-  unsigned first, wrap, amount, step;
-  unsigned i,j;
-
-  if (!hwloc_strncasecmp(string, "system", 2))
-    depth = hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_SYSTEM);
-  else if (!hwloc_strncasecmp(string, "machine", 1))
-    depth = hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_MACHINE);
-  else if (!hwloc_strncasecmp(string, "node", 1))
-    depth = hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_NODE);
-  else if (!hwloc_strncasecmp(string, "socket", 2))
-    depth = hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_SOCKET);
-  else if (!hwloc_strncasecmp(string, "core", 1))
-    depth = hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_CORE);
-  else if (!hwloc_strncasecmp(string, "proc", 1))
-    depth = hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_PROC);
-  else
-    depth = atoi(string);
-
-  if (depth >= topodepth) {
-    if (verbose)
-      fprintf(stderr, "ignoring invalid depth %u\n", depth);
-    return -1;
-  }
-  width = hwloc_get_nbobjs_by_depth(topology, depth);
-
-  sep = strchr(string, ':');
-  if (!sep) {
-    if (verbose)
-      fprintf(stderr, "missing colon separator in argument %s\n", string);
-    return -1;
-  }
-
-  first = atoi(sep+1);
-  amount = 1;
-  step = 1;
-  wrap = 0;
-  if (!isdigit(*(sep+1))) {
-    if (!strncmp(sep+1, "all", 3)) {
-      first = 0;
-      amount = width;
-    } else if (!strncmp(sep+1, "odd", 3)) {
-      first = 1;
-      step = 2;
-      amount = (width+1)/2;
-    } else if (!strncmp(sep+1, "even", 4)) {
-      first = 0;
-      step = 2;
-      amount = (width+1)/2;
-    }
-  }
-
-  sep3 = strchr(sep+1, '.');
-
-  sep2 = strchr(sep+1, '-');
-  if (sep2 && (sep2 < sep3 || !sep3)) {
-    if (*(sep2+1) == '\0')
-      amount = width-first;
-    else
-      amount = atoi(sep2+1)-first+1;
-  } else {
-    sep2 = strchr(sep+1, ':');
-    if (sep2 && (sep2 < sep3 || !sep3)) {
-      amount = atoi(sep2+1);
-      wrap = 1;
-    }
-  }
-
-  for(i=first, j=0; j<amount; i+=step, j++) {
-    if (wrap && i==width)
-      i = 0;
-
-    obj = hwloc_get_obj_inside_cpuset_by_depth(topology, rootset, depth, i);
-    if (verbose) {
-      char * s = hwloc_cpuset_printf_value(rootset);
-      if (obj)
-	printf("object #%u depth %u below cpuset %s found\n",
-	       i, depth, s);
-      else
-	printf("object #%u depth %u below cpuset %s does not exist\n",
-	       i, depth, s);
-      free(s);
-    }
-    if (obj) {
-      if (sep3)
-	hwloc_mask_append_object(topology, topodepth, obj->cpuset, sep3+1, set, mode, verbose);
-      else
-        hwloc_mask_append_cpuset(set, obj->cpuset, mode, verbose);
-    }
-  }
-
-  return 0;
-}
-
-static __inline void
-hwloc_mask_process_arg(hwloc_topology_t topology, unsigned topodepth,
-		     const char *arg, hwloc_cpuset_t set,
-		     int verbose)
-{
-  char *colon;
-  hwloc_mask_append_mode_t mode = HWLOC_MASK_APPEND_ADD;
-
-  if (*arg == '~') {
-    mode = HWLOC_MASK_APPEND_CLR;
-    arg++;
-  } else if (*arg == 'x') {
-    mode = HWLOC_MASK_APPEND_AND;
-    arg++;
-  } else if (*arg == '^') {
-    mode = HWLOC_MASK_APPEND_XOR;
-    arg++;
-  }
-
-  colon = strchr(arg, ':');
-  if (colon) {
-    hwloc_mask_append_object(topology, topodepth, hwloc_get_system_obj(topology)->cpuset, arg, set, mode, verbose);
-  } else {
-    hwloc_cpuset_t newset = hwloc_cpuset_from_string(arg);
-    hwloc_mask_append_cpuset(set, newset, mode, verbose);
-    free(newset);
-  }
-}
-
-#endif /* HWLOC_MASK_H */

Added: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc.7in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc.7in	                        (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/hwloc.7in	2010-05-11 01:47:13 UTC (rev 6632)
@@ -0,0 +1,290 @@
+.\" -*- nroff -*-
+.\" Copyright © 2009-2010 Cisco Systems, Inc.  All rights reserved.
+.TH HWLOC "1" "#HWLOC_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
+.SH NAME
+hwloc - General information about hwloc ("hardware locality").
+.
+.\" **************************
+.\"    Description Section
+.\" **************************
+.SH DESCRIPTION
+.
+hwloc provides command line tools and a C API to obtain the
+hierarchical map of key computing elements, such as: NUMA memory
+nodes, shared caches, processor sockets, processor cores, and
+processor "threads".  hwloc also gathers various attributes such as
+cache and memory information, and is portable across a variety of
+different operating systems and platforms.
+.
+.
+.SS Definitions
+Hwloc has some specific definitions for terms that are used in this
+man page and other hwloc documentation.
+.
+.TP 5
+.B Hwloc CPU set:
+A set of processors included in an hwloc object, expressed as a bitmask
+indexed by the physical numbers of the CPUs (as announced by the OS).
+The hwloc definition
+of "CPU set" does not carry any the same connotations as Linux's "CPU
+set" (e.g., process affinity, etc.).
+.
+.TP
+.B Linux CPU set:
+See http://www.mjmwired.net/kernel/Documentation/cpusets.txt for a
+discussion of Linux CPU sets.  A
+super-short-ignoring-many-details description (taken from that page)
+is:
+.
+.\" Force a paragraph break, but keep the indentation
+.TP
+\ 
+.
+ "Cpusets provide a mechanism for assigning a set of CPUs and Memory
+Nodes to a set of tasks."
+.
+.TP
+.B Linux Cgroup:
+See http://www.mjmwired.net/kernel/Documentation/cgroups.txt for a
+discussion of Linux control groups.  A
+super-short-ignoring-many-details description (taken from that page)
+is:
+.
+.\" Force a paragraph break, but keep the indentation
+.TP
+\ 
+ "Control Groups provide a mechanism for aggregating/partitioning sets
+of tasks, and all their future children, into hierarchical groups
+with specialized behaviour."
+.
+.PP
+To be clear, hwloc supports all of the above concepts.  It is simply
+worth noting that they are 3 different things.
+.
+.SS Location Specification
+.
+Locations refer to specific regions within a topology.  Before reading
+the rest of this man page, it may be useful to read lstopo(1) and/or
+run lstopo on your machine to see the reported topology tree.  Seeing
+and understanding a topology tree will definitely help in
+understanding the concepts that are discussed below.
+.
+.PP
+Locations can be specified in multiple ways:
+.
+.TP 10
+.B Tuples:
+Tuples of hwloc "objects" and associated indexes can be specified in
+the form
+.IR object:index .
+Hwloc objects represent types of mapped items (e.g., sockets, cores,
+etc.) in a topology tree; indexes are non-negative integers that
+specify a unique physical object in a topology tree.  Both concepts
+are described in detail, below.  
+.\" Force a paragraph break, but keep the indentation.
+.TP
+\ 
+Chaining multiple tuples together in the more general form
+.I object1:index[.object2:index2[...]]
+is permissable.  While the first tuple's object may appear anywhere in
+the topology, the Nth tuple's object must have a shallower topology
+depth than the (N+1)th tuple's object.  Put simply: as you move right
+in a tuple chain, objects must go deeper in the topology tree.
+When using logical indexes (default),
+indexes specified in chained tuples are relative to the scope of the
+parent object.  For example, "socket:0.core:1" refers to the second
+core in the first socket.
+When using OS/physical indexes, the first object matching the given
+index is used.
+.
+.TP
+.B Hex:
+Locations can also be specified as hexidecimal bitmasks prefixed 
+.
+with "0x".  Commas must be used to separate the hex digits into blocks
+of 8, such as "0xffc0140,0x00020110".
+.
+Leading zeros in each block do not need to be specified.  
+.
+For example, "0xffc0140,0x20110" is equivalent to the prior example,
+and "0x0000000f" is exactly equivalent to "0xf".  Intermediate blocks
+of 8 digits that are all zeoro can be left empty; "0xff0,,0x13" is
+equivalent to "0xff0,0x00000000,0x13".
+.
+.PP
+Multiple locations can be specified on the hwloc-bind command line
+(delimited by whitespace); the first token of the execution command is
+assumed to either follow "--" (if specified) or the first token that
+is unrecognized as a location.
+.
+By default, multiple locations are added, meaning that the binding
+will be wider in the sense that the process may run on more objects.
+If prefixed with "~", the given location will be cleared instead of
+added to the current list of locations.
+If prefixed with "x", the given location will be and'ed instead of
+added to the current list.
+If prefixed with "^", the given location will be xor'ed.
+.
+More complex operations may be performed by using
+.R hwloc-calc
+to compute intermediate values.
+.
+.SS Hwloc Objects
+.
+.PP
+Objects can be any of the following strings
+.
+(listed from "biggest" to "smallest"):
+.
+.TP 10
+.B machine
+A set of processors and memory.
+.
+.TP
+.B node
+A NUMA node; a set of processors around memory which the processors
+can directly access.
+.
+.TP
+.B socket
+Typically a physical package or chip, it is a grouping of one or more
+processors.
+.
+.TP
+.B core
+A single, physical processing unit which may still contain multiple
+logical processors, such as hardware threads.
+.
+.TP
+.B proc
+Short for 
+.I processor 
+(not 
+.IR process !).  
+The smallest physical execution unit that hwloc recognizes.  For
+example, there may be multiple procs on a core (e.g.,
+hardware threads).
+.PP
+The additional
+.B system
+type can be used when several machines form an overall single system image
+(SSI), such as Kerrighed.
+.
+.PP
+Finally, note that an object can be denoted by its numeric "depth" in
+the topology graph.  See the Examples section for more information.
+.
+.SS Hwloc Indexes
+Indexes are integer values that uniquely specify a given object of a
+specific type.  Indexes can be expressed either as
+.I logical
+values or
+.I physical 
+values.  
+While
+.B hwloc-bind accepts logical indexes as
+.BR input
+by default.
+Passing
+.B --physical
+switches to physical/OS indexes.
+Both logical and physical indexes are described on this man page.
+.
+.PP
+.I Logical
+indexes are relative to the object order in the output from the
+lstopo command.  They always start with 0 and increment by 1 for each
+successive object.
+.
+.PP
+.I Physical 
+indexes are how the operating system refers to objects.  Note that
+while physical indexes are non-negative integer values, the hardware
+and/or operating system may choose arbitrary values -- they may not
+start with 0, and successive objects may not have consecutive values.
+.
+.PP
+For example, if the first few lines of lstopo -p output are the
+following:
+.
+
+  System(32GB)
+    Node#0(16GB)
+      Socket#0 + L2(4MB)
+        L1(32KB) + Core#16 + P#0
+        L1(32KB) + Core#18 + P#2
+      Socket#1 + L2(4MB)
+	L1(32KB) + Core#16 + P#1
+	L1(32KB) + Core#18 + P#3
+
+The first core on the second socket is logically number 2 (i.e.,
+logically the 3rd core, starting from 0).  Its physical index is
+16, but note that another core
+.I also 
+has a physical index of 16.  Hence, physical indexes may only be
+relevant within the scope of their parent (or set of grandparents).
+In this example, to uniquely identify logical core 2 with
+physical indexes, you must specify (at a minimum) both a socket and a
+core: socket 1, core 16.
+.PP
+Index values, regardless of whether they are logical or physical, can
+be expressed in several different forms (where X, Y, and N are
+positive integers):
+.
+.TP 10
+.B X
+The object with index value X.
+.
+.TP
+.B X-Y
+All the objects with index values >= X and <= Y.
+.
+.TP
+.B X-
+All the objects with index values >= X.
+.
+.TP
+.B X:N
+N objects starting with index X, possibly wrapping around the end of
+the level.
+.
+.TP
+.B all
+A special index value indicating all valid index values.
+.
+.TP
+.B odd
+A special index value indicating all valid odd index values.
+.
+.TP
+.B even
+A special index value indicating all valid even index values.
+.
+.PP
+.IR REMEMBER :
+hwloc's command line tools accept
+.I logical 
+indexes for location values by default.
+Use
+.BR --physical " and " --logical
+to switch from one mode to another.
+.
+.\" **************************
+.\"    See also section
+.\" **************************
+.SH SEE ALSO
+.
+Hwloc's command line tool documentation: lstopo(1), hwloc-bind(1),
+hwloc-calc(1), hwloc-distrib(1).
+.
+.PP
+Hwloc has many C API functions, each of which have their own man page.
+Some top-level man pages are also provided, grouping similar functions
+together.  A few good places to start might include:
+hwlocality_objects(3), hwlocality_types(3), hwlocality_creation(3),
+hwlocality_cpuset(3), hwlocality_information(3), and
+hwlocality_binding(3).
+.
+.PP
+For a listing of all available hwloc man pages, look at all "hwloc*"
+files in the man1 and man3 directories.

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo-cairo.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo-cairo.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo-cairo.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,11 +1,12 @@
 /*
  * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
+ * Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
  * See COPYING in top-level directory.
  */
 
 #include <private/config.h>
 
-#ifdef HAVE_CAIRO
+#ifdef HWLOC_HAVE_CAIRO
 #include <cairo.h>
 
 #if CAIRO_HAS_PDF_SURFACE
@@ -20,7 +21,7 @@
 #include <cairo-svg.h>
 #endif /* CAIRO_HAS_SVG_SURFACE */
 
-#ifndef HAVE_X11
+#ifndef HWLOC_HAVE_X11
 /* In case X11 headers aren't availble, forcefully disable Cairo/Xlib.  */
 # undef CAIRO_HAS_XLIB_SURFACE
 # define CAIRO_HAS_XLIB_SURFACE 0
@@ -31,19 +32,21 @@
 #include <X11/Xlib.h>
 #include <X11/Xutil.h>
 #include <X11/keysym.h>
+#include <X11/cursorfont.h>
 #endif /* CAIRO_HAS_XLIB_SURFACE */
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
+#include <limits.h>
 
 #include "lstopo.h"
 
 #if (CAIRO_HAS_XLIB_SURFACE + CAIRO_HAS_PNG_FUNCTIONS + CAIRO_HAS_PDF_SURFACE + CAIRO_HAS_PS_SURFACE + CAIRO_HAS_SVG_SURFACE)
 /* Cairo methods */
 static void
-topo_cairo_box(void *output, int r, int g, int b, unsigned depth, unsigned x, unsigned width, unsigned y, unsigned height)
+topo_cairo_box(void *output, int r, int g, int b, unsigned depth __hwloc_attribute_unused, unsigned x, unsigned width, unsigned y, unsigned height)
 {
   cairo_t *c = output;
   cairo_rectangle(c, x, y, width, height);
@@ -57,17 +60,18 @@
 }
 
 static void
-topo_cairo_line(void *output, int r, int g, int b, unsigned depth, unsigned x1, unsigned y1, unsigned x2, unsigned y2)
+topo_cairo_line(void *output, int r, int g, int b, unsigned depth __hwloc_attribute_unused, unsigned x1, unsigned y1, unsigned x2, unsigned y2)
 {
   cairo_t *c = output;
   cairo_move_to(c, x1, y1);
+  cairo_set_source_rgb(c, (float) r / 255, (float) g / 255, (float) b / 255);
   cairo_set_line_width(c, 1);
   cairo_line_to(c, x2, y2);
   cairo_stroke(c);
 }
 
 static void
-topo_cairo_text(void *output, int r, int g, int b, int size, unsigned depth, unsigned x, unsigned y, const char *text)
+topo_cairo_text(void *output, int r, int g, int b, int size, unsigned depth __hwloc_attribute_unused, unsigned x, unsigned y, const char *text)
 {
   cairo_t *c = output;
   cairo_move_to(c, x, y + size);
@@ -87,16 +91,16 @@
 #endif /* (CAIRO_HAS_PNG_FUNCTIONS + CAIRO_HAS_PDF_SURFACE + CAIRO_HAS_PS_SURFACE + CAIRO_HAS_SVG_SURFACE) */
 
 static void
-topo_cairo_paint(struct draw_methods *methods, hwloc_topology_t topology, cairo_surface_t *cs)
+topo_cairo_paint(struct draw_methods *methods, int logical, hwloc_topology_t topology, cairo_surface_t *cs)
 {
   cairo_t *c;
   c = cairo_create(cs);
-  output_draw(methods, topology, c);
+  output_draw(methods, logical, topology, c);
   cairo_show_page(c);
   cairo_destroy(c);
 }
 
-static void null_declare_color (void *output, int r, int g, int b) {}
+static void null_declare_color (void *output __hwloc_attribute_unused, int r __hwloc_attribute_unused, int g __hwloc_attribute_unused, int b __hwloc_attribute_unused) {}
 #endif /* (CAIRO_HAS_XLIB_SURFACE + CAIRO_HAS_PNG_FUNCTIONS + CAIRO_HAS_PDF_SURFACE + CAIRO_HAS_PS_SURFACE + CAIRO_HAS_SVG_SURFACE) */
 
 
@@ -107,13 +111,14 @@
   Display *dpy;
   cairo_surface_t *cs;
   Window win;
+  Cursor hand;
   int screen_width, screen_height;	/** visible part size */
   int width, height;			/** total size */
   int x, y;				/** top left corner of the visible part */
 };
 
 static void *
-x11_start(void *output, int width, int height)
+x11_start(void *output __hwloc_attribute_unused, int width, int height)
 {
   cairo_surface_t *cs;
   Display *dpy;
@@ -122,6 +127,7 @@
   Screen *screen;
   int screen_width = width, screen_height = height;
   struct display *disp;
+  Cursor hand;
 
   if (!(dpy = XOpenDisplay(NULL))) {
     fprintf(stderr, "couldn't connect to X\n");
@@ -136,6 +142,8 @@
   root = RootWindow(dpy, scr);
   top = XCreateSimpleWindow(dpy, root, 0, 0, screen_width, screen_height, 0, WhitePixel(dpy, scr), WhitePixel(dpy, scr));
   win = XCreateSimpleWindow(dpy, top, 0, 0, width, height, 0, WhitePixel(dpy, scr), WhitePixel(dpy, scr));
+  hand = XCreateFontCursor(dpy, XC_fleur);
+  XDefineCursor(dpy, win, hand);
 
   XSelectInput(dpy, win,
       KeyPressMask |
@@ -152,6 +160,7 @@
   disp->dpy = dpy;
   disp->cs = cs;
   disp->win = win;
+  disp->hand = hand;
   disp->screen_width = screen_width;
   disp->screen_height = screen_height;
   disp->width = width;
@@ -172,7 +181,7 @@
 
 /** Clip coordinates of the visible part. */
 static void
-move_x11(hwloc_topology_t topology, struct display *disp)
+move_x11(struct display *disp)
 {
   if (disp->width <= disp->screen_width) {
     disp->x = 0;
@@ -194,15 +203,15 @@
 }
 
 void
-output_x11(hwloc_topology_t topology, const char *filename, int verbose_mode)
+output_x11(hwloc_topology_t topology, const char *filename __hwloc_attribute_unused, int logical, int verbose_mode __hwloc_attribute_unused)
 {
-  struct display *disp = output_draw_start(&x11_draw_methods, topology, NULL);
+  struct display *disp = output_draw_start(&x11_draw_methods, logical, topology, NULL);
   int finish = 0;
   int state = 0;
   int x = 0, y = 0; /* shut warning down */
   int lastx = disp->x, lasty = disp->y;
 
-  topo_cairo_paint(&x11_draw_methods, topology, disp->cs);
+  topo_cairo_paint(&x11_draw_methods, logical, topology, disp->cs);
 
   while (!finish) {
     XEvent e;
@@ -218,7 +227,7 @@
     switch (e.type) {
       case Expose:
 	if (e.xexpose.count < 1)
-	  topo_cairo_paint(&x11_draw_methods, topology, disp->cs);
+	  topo_cairo_paint(&x11_draw_methods, logical, topology, disp->cs);
 	break;
       case MotionNotify:
 	if (state) {
@@ -226,13 +235,13 @@
 	  disp->y -= e.xmotion.y_root - y;
 	  x = e.xmotion.x_root;
 	  y = e.xmotion.y_root;
-	  move_x11(topology, disp);
+	  move_x11(disp);
 	}
 	break;
       case ConfigureNotify:
 	disp->screen_width = e.xconfigure.width;
 	disp->screen_height = e.xconfigure.height;
-	move_x11(topology, disp);
+	move_x11(disp);
 	if (disp->x != lastx || disp->y != lasty)
 	  XMoveWindow(disp->dpy, disp->win, -disp->x, -disp->y);
 	break;
@@ -253,13 +262,63 @@
       case KeyPress: {
 	KeySym keysym;
 	XLookupString(&e.xkey, NULL, 0, &keysym, NULL);
-	if (keysym == XK_q || keysym == XK_Q)
-	  finish = 1;
+        switch (keysym) {
+          case XK_q:
+          case XK_Q:
+          case XK_Escape:
+            finish = 1;
+            break;
+          case XK_Left:
+            disp->x -= disp->screen_width/10;
+            move_x11(disp);
+            break;
+          case XK_Right:
+            disp->x += disp->screen_width/10;
+            move_x11(disp);
+            break;
+          case XK_Up:
+            disp->y -= disp->screen_height/10;
+            move_x11(disp);
+            break;
+          case XK_Down:
+            disp->y += disp->screen_height/10;
+            move_x11(disp);
+            break;
+          case XK_Page_Up:
+            if (e.xkey.state & ControlMask) {
+              disp->x -= disp->screen_width;
+              move_x11(disp);
+            } else {
+              disp->y -= disp->screen_height;
+              move_x11(disp);
+            }
+            break;
+          case XK_Page_Down:
+            if (e.xkey.state & ControlMask) {
+              disp->x += disp->screen_width;
+              move_x11(disp);
+            } else {
+              disp->y += disp->screen_height;
+              move_x11(disp);
+            }
+            break;
+          case XK_Home:
+            disp->x = 0;
+            disp->y = 0;
+            move_x11(disp);
+            break;
+          case XK_End:
+            disp->x = INT_MAX;
+            disp->y = INT_MAX;
+            move_x11(disp);
+            break;
+        }
 	break;
       }
     }
   }
   cairo_surface_destroy(disp->cs);
+  XFreeCursor(disp->dpy, disp->hand);
   XCloseDisplay(disp->dpy);
   free(disp);
 }
@@ -269,7 +328,7 @@
 #if CAIRO_HAS_PNG_FUNCTIONS
 /* PNG back-end */
 static void *
-png_start(void *output, int width, int height)
+png_start(void *output __hwloc_attribute_unused, int width, int height)
 {
   return cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
 }
@@ -283,17 +342,19 @@
 };
 
 void
-output_png(hwloc_topology_t topology, const char *filename, int verbose_mode)
+output_png(hwloc_topology_t topology, const char *filename, int logical, int verbose_mode __hwloc_attribute_unused)
 {
   FILE *output = open_file(filename, "w");
+  cairo_surface_t *cs;
+
   if (!output) {
     fprintf(stderr, "Failed to open %s for writing (%s)\n", filename, strerror(errno));
     return;
   }
 
-  cairo_surface_t *cs = output_draw_start(&png_draw_methods, topology, output);
+  cs = output_draw_start(&png_draw_methods, logical, topology, output);
 
-  topo_cairo_paint(&png_draw_methods, topology, cs);
+  topo_cairo_paint(&png_draw_methods, logical, topology, cs);
   cairo_surface_write_to_png_stream(cs, topo_cairo_write, output);
   cairo_surface_destroy(cs);
   fclose(output);
@@ -318,17 +379,19 @@
 };
 
 void
-output_pdf(hwloc_topology_t topology, const char *filename, int verbose_mode)
+output_pdf(hwloc_topology_t topology, const char *filename, int logical, int verbose_mode __hwloc_attribute_unused)
 {
   FILE *output = open_file(filename, "w");
+  cairo_surface_t *cs;
+
   if (!output) {
     fprintf(stderr, "Failed to open %s for writing (%s)\n", filename, strerror(errno));
     return;
   }
 
-  cairo_surface_t *cs = output_draw_start(&pdf_draw_methods, topology, output);
+  cs = output_draw_start(&pdf_draw_methods, logical, topology, output);
 
-  topo_cairo_paint(&pdf_draw_methods, topology, cs);
+  topo_cairo_paint(&pdf_draw_methods, logical, topology, cs);
   cairo_surface_flush(cs);
   cairo_surface_destroy(cs);
   fclose(output);
@@ -353,17 +416,19 @@
 };
 
 void
-output_ps(hwloc_topology_t topology, const char *filename, int verbose_mode)
+output_ps(hwloc_topology_t topology, const char *filename, int logical, int verbose_mode __hwloc_attribute_unused)
 {
   FILE *output = open_file(filename, "w");
+  cairo_surface_t *cs;
+
   if (!output) {
     fprintf(stderr, "Failed to open %s for writing (%s)\n", filename, strerror(errno));
     return;
   }
 
-  cairo_surface_t *cs = output_draw_start(&ps_draw_methods, topology, output);
+  cs = output_draw_start(&ps_draw_methods, logical, topology, output);
 
-  topo_cairo_paint(&ps_draw_methods, topology, cs);
+  topo_cairo_paint(&ps_draw_methods, logical, topology, cs);
   cairo_surface_flush(cs);
   cairo_surface_destroy(cs);
   fclose(output);
@@ -388,17 +453,19 @@
 };
 
 void
-output_svg(hwloc_topology_t topology, const char *filename, int verbose_mode)
+output_svg(hwloc_topology_t topology, const char *filename, int logical, int verbose_mode __hwloc_attribute_unused)
 {
   FILE *output = open_file(filename, "w");
+  cairo_surface_t *cs;
+
   if (!output) {
     fprintf(stderr, "Failed to open %s for writing (%s)\n", filename, strerror(errno));
     return;
   }
 
-  cairo_surface_t *cs = output_draw_start(&svg_draw_methods, topology, output);
+  cs = output_draw_start(&svg_draw_methods, logical, topology, output);
 
-  topo_cairo_paint(&svg_draw_methods, topology, cs);
+  topo_cairo_paint(&svg_draw_methods, logical, topology, cs);
   cairo_surface_flush(cs);
   cairo_surface_destroy(cs);
   fclose(output);

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo-draw.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo-draw.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo-draw.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -4,6 +4,8 @@
  * See COPYING in top-level directory.
  */
 
+#include <private/config.h>
+#include <private/private.h>
 #include <hwloc.h>
 
 #include <stdlib.h>
@@ -33,6 +35,18 @@
 #define THREAD_G_COLOR 0xff
 #define THREAD_B_COLOR 0xff
 
+#define RUNNING_R_COLOR 0
+#define RUNNING_G_COLOR 0xff
+#define RUNNING_B_COLOR 0
+
+#define FORBIDDEN_R_COLOR 0xff
+#define FORBIDDEN_G_COLOR 0
+#define FORBIDDEN_B_COLOR 0
+
+#define OFFLINE_R_COLOR 0
+#define OFFLINE_G_COLOR 0
+#define OFFLINE_B_COLOR 0
+
 #define CACHE_R_COLOR 0xff
 #define CACHE_G_COLOR 0xff
 #define CACHE_B_COLOR 0xff
@@ -67,11 +81,11 @@
   return _ratio1 < _ratio2;
 }
 
-static void* null_start(void *output, int width, int height) { return output; }
-static void null_declare_color(void *output, int r, int g, int b) { }
-static void null_box(void *output, int r, int g, int b, unsigned depth, unsigned x, unsigned width, unsigned y, unsigned height) { }
-static void null_line(void *output, int r, int g, int b, unsigned depth, unsigned x1, unsigned y1, unsigned x2, unsigned y2) { }
-static void null_text(void *output, int r, int g, int b, int size, unsigned depth, unsigned x, unsigned y, const char *text) { }
+static void* null_start(void *output, int width __hwloc_attribute_unused, int height __hwloc_attribute_unused) { return output; }
+static void null_declare_color(void *output __hwloc_attribute_unused, int r __hwloc_attribute_unused, int g __hwloc_attribute_unused, int b __hwloc_attribute_unused) { }
+static void null_box(void *output __hwloc_attribute_unused, int r __hwloc_attribute_unused, int g __hwloc_attribute_unused, int b __hwloc_attribute_unused, unsigned depth __hwloc_attribute_unused, unsigned x __hwloc_attribute_unused, unsigned width __hwloc_attribute_unused, unsigned y __hwloc_attribute_unused, unsigned height __hwloc_attribute_unused) { }
+static void null_line(void *output __hwloc_attribute_unused, int r __hwloc_attribute_unused, int g __hwloc_attribute_unused, int b __hwloc_attribute_unused, unsigned depth __hwloc_attribute_unused, unsigned x1 __hwloc_attribute_unused, unsigned y1_arg __hwloc_attribute_unused, unsigned x2 __hwloc_attribute_unused, unsigned y2 __hwloc_attribute_unused) { }
+static void null_text(void *output __hwloc_attribute_unused, int r __hwloc_attribute_unused, int g __hwloc_attribute_unused, int b __hwloc_attribute_unused, int size __hwloc_attribute_unused, unsigned depth __hwloc_attribute_unused, unsigned x __hwloc_attribute_unused, unsigned y __hwloc_attribute_unused, const char *text __hwloc_attribute_unused) { }
 
 static struct draw_methods null_draw_methods = {
   .start = null_start,
@@ -92,7 +106,7 @@
  * For generic detailed comments, see the node_draw function.
  */
 
-typedef void (*foo_draw)(hwloc_topology_t topology, struct draw_methods *methods, hwloc_obj_t obj, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight);
+typedef void (*foo_draw)(hwloc_topology_t topology, struct draw_methods *methods, int logical, hwloc_obj_t obj, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight);
 
 static foo_draw get_type_fun(hwloc_obj_type_t type);
 
@@ -106,12 +120,12 @@
   hwloc_obj_t *subobjs = obj->children; \
   unsigned numsubobjs = obj->arity; \
   unsigned width, height; \
-  unsigned maxwidth, maxheight; \
+  unsigned maxwidth __hwloc_attribute_unused, maxheight __hwloc_attribute_unused; \
   maxwidth = maxheight = 0; \
   totwidth = (border) + mywidth; \
   totheight = (border) + myheight; \
   if (numsubobjs) { \
-    int i; \
+    unsigned i; \
 
 #define RECURSE_FOR() \
     /* Iterate over subobjects */ \
@@ -119,7 +133,7 @@
 
       /* Recursive call */
 #define RECURSE_CALL_FUN(methods) \
-      get_type_fun(subobjs[i]->type)(topology, methods, subobjs[i], output, depth-1, x + totwidth, &width, y + totheight, &height) \
+      get_type_fun(subobjs[i]->type)(topology, methods, logical, subobjs[i], output, depth-1, x + totwidth, &width, y + totheight, &height) \
 
 #define RECURSE_END_HORIZ(separator, border) \
       /* Add the subobject's width and separator */ \
@@ -262,7 +276,7 @@
 #define RECURSE_RECT(obj, methods, separator, border) do {\
   if (obj->arity && obj->children[0]->type == HWLOC_OBJ_NODE) { \
     /* Nodes shouldn't be put with an arbitrary geometry, as NUMA distances may not be that way */ \
-    int pvert = prefer_vert(topology, level, output, depth, x, y, separator); \
+    int pvert = prefer_vert(topology, logical, level, output, depth, x, y, separator); \
     if (pvert) \
       RECURSE_VERT(level, methods, separator, border); \
     else \
@@ -303,7 +317,7 @@
 } while (0)
 
 static int
-prefer_vert(hwloc_topology_t topology, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned y, int separator)
+prefer_vert(hwloc_topology_t topology, int logical, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned y, unsigned separator)
 {
   float horiz_ratio, vert_ratio;
   unsigned textwidth = 0;
@@ -316,50 +330,97 @@
   return force_vert || (!force_horiz && prefer_ratio(vert_ratio, horiz_ratio));
 }
 
+static int
+lstopo_obj_snprintf(char *text, size_t textlen, hwloc_obj_t obj, int logical)
+{
+  unsigned idx = logical ? obj->logical_index : obj->os_index;
+  const char *indexprefix = logical ? " #" : " p#";
+  char typestr[32];
+  char indexstr[32]= "";
+  char attrstr[256];
+  size_t attrlen;
+  hwloc_obj_type_snprintf(typestr, sizeof(typestr), obj, 0);
+  if (idx != (unsigned)-1 && obj->depth != 0)
+    snprintf(indexstr, sizeof(indexstr), "%s%u", indexprefix, idx);
+  attrlen = hwloc_obj_attr_snprintf(attrstr, sizeof(attrstr), obj, " ", 0);
+  if (attrlen)
+    return snprintf(text, textlen, "%s%s (%s)", typestr, indexstr, attrstr);
+  else
+    return snprintf(text, textlen, "%s%s", typestr, indexstr);
+}
+
 static void
-proc_draw(hwloc_topology_t topology, struct draw_methods *methods, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
+pu_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
 {
-  *retwidth = fontsize ? 4*fontsize : gridsize;
-  *retheight = gridsize + (fontsize ? (fontsize + gridsize) : 0);
+  unsigned myheight = (fontsize ? (fontsize + gridsize) : 0), totheight;
+  unsigned textwidth = fontsize ? (6-logical)*fontsize : gridsize;
+  unsigned mywidth = 0, totwidth;
 
-  methods->box(output, THREAD_R_COLOR, THREAD_G_COLOR, THREAD_B_COLOR, depth, x, *retwidth, y, *retheight);
+  DYNA_CHECK();
 
+  RECURSE_HORIZ(level, &null_draw_methods, 0, gridsize);
+
+  if (hwloc_cpuset_isset(level->online_cpuset, level->os_index))
+    if (!hwloc_cpuset_isset(level->allowed_cpuset, level->os_index))
+      methods->box(output, FORBIDDEN_R_COLOR, FORBIDDEN_G_COLOR, FORBIDDEN_B_COLOR, depth, x, *retwidth, y, *retheight);
+    else {
+      hwloc_cpuset_t bind = hwloc_cpuset_alloc();
+      if (pid != (hwloc_pid_t) -1 && pid != 0)
+        hwloc_get_proc_cpubind(topology, pid, bind, 0);
+      else if (pid == 0)
+        hwloc_get_cpubind(topology, bind, 0);
+      if (bind && hwloc_cpuset_isset(bind, level->os_index))
+        methods->box(output, RUNNING_R_COLOR, RUNNING_G_COLOR, RUNNING_B_COLOR, depth, x, *retwidth, y, *retheight);
+      else
+        methods->box(output, THREAD_R_COLOR, THREAD_G_COLOR, THREAD_B_COLOR, depth, x, *retwidth, y, *retheight);
+      hwloc_cpuset_free(bind);
+    }
+  else
+    methods->box(output, OFFLINE_R_COLOR, OFFLINE_G_COLOR, OFFLINE_B_COLOR, depth, x, *retwidth, y, *retheight);
+
   if (fontsize) {
     char text[64];
-    hwloc_obj_snprintf(text, sizeof(text), topology, level, "#", 0);
-    methods->text(output, 0, 0, 0, fontsize, depth-1, x + gridsize, y + gridsize, text);
+    lstopo_obj_snprintf(text, sizeof(text), level, logical);
+    if (hwloc_cpuset_isset(level->online_cpuset, level->os_index))
+      methods->text(output, 0, 0, 0, fontsize, depth-1, x + gridsize, y + gridsize, text);
+    else
+      methods->text(output, 0xff, 0xff, 0xff, fontsize, depth-1, x + gridsize, y + gridsize, text);
   }
+
+  RECURSE_HORIZ(level, methods, 0, gridsize);
+
+  DYNA_SAVE();
 }
 
 static void
-cache_draw(hwloc_topology_t topology, struct draw_methods *methods, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
+cache_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
 {
   unsigned myheight = gridsize + (fontsize ? (fontsize + gridsize) : 0) + gridsize, totheight;
   unsigned mywidth = 0, totwidth;
-  unsigned textwidth = fontsize ? (level->os_index == -1 ? 7*fontsize : 9*fontsize) : 0;
+  unsigned textwidth = fontsize ? ((logical ? level->logical_index : level->os_index) == (unsigned) -1 ? 7*fontsize : 9*fontsize) : 0;
+  /* Do not separate objects when in L1 (SMT) */
   unsigned separator = level->attr->cache.depth > 1 ? gridsize : 0;
 
   DYNA_CHECK();
 
-  /* Do not separate objects when in L1 (SMT) */
-  RECURSE_HORIZ(level, &null_draw_methods, separator, 0);
+  RECURSE_RECT(level, &null_draw_methods, separator, 0);
 
   methods->box(output, CACHE_R_COLOR, CACHE_G_COLOR, CACHE_B_COLOR, depth, x, totwidth, y, myheight - gridsize);
 
   if (fontsize) {
     char text[64];
 
-    hwloc_obj_snprintf(text, sizeof(text), topology, level, "#", 0);
+    lstopo_obj_snprintf(text, sizeof(text), level, logical);
     methods->text(output, 0, 0, 0, fontsize, depth-1, x + gridsize, y + gridsize, text);
   }
 
-  RECURSE_HORIZ(level, methods, separator, 0);
+  RECURSE_RECT(level, methods, separator, 0);
 
   DYNA_SAVE();
 }
 
 static void
-core_draw(hwloc_topology_t topology, struct draw_methods *methods, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
+core_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
 {
   unsigned myheight = (fontsize ? (fontsize + gridsize) : 0), totheight;
   unsigned mywidth = 0, totwidth;
@@ -367,23 +428,23 @@
 
   DYNA_CHECK();
 
-  RECURSE_HORIZ(level, &null_draw_methods, 0, gridsize);
+  RECURSE_RECT(level, &null_draw_methods, 0, gridsize);
 
   methods->box(output, CORE_R_COLOR, CORE_G_COLOR, CORE_B_COLOR, depth, x, totwidth, y, totheight);
 
   if (fontsize) {
     char text[64];
-    hwloc_obj_snprintf(text, sizeof(text), topology, level, "#", 0);
+    lstopo_obj_snprintf(text, sizeof(text), level, logical);
     methods->text(output, 0, 0, 0, fontsize, depth-1, x + gridsize, y + gridsize, text);
   }
 
-  RECURSE_HORIZ(level, methods, 0, gridsize);
+  RECURSE_RECT(level, methods, 0, gridsize);
 
   DYNA_SAVE();
 }
 
 static void
-socket_draw(hwloc_topology_t topology, struct draw_methods *methods, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
+socket_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
 {
   unsigned myheight = (fontsize ? (fontsize + gridsize) : 0), totheight;
   unsigned mywidth = 0, totwidth;
@@ -397,7 +458,7 @@
 
   if (fontsize) {
     char text[64];
-    hwloc_obj_snprintf(text, sizeof(text), topology, level, "#", 0);
+    lstopo_obj_snprintf(text, sizeof(text), level, logical);
     methods->text(output, 0, 0, 0, fontsize, depth-1, x + gridsize, y + gridsize, text);
   }
 
@@ -407,7 +468,7 @@
 }
 
 static void
-node_draw(hwloc_topology_t topology, struct draw_methods *methods, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
+node_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
 {
   /* Reserve room for the heading memory box and separator */
   unsigned myheight = (fontsize ? (gridsize + fontsize) : 0) + gridsize + gridsize;
@@ -424,7 +485,7 @@
   DYNA_CHECK();
 
   /* Compute the size needed by sublevels */
-  RECURSE_HORIZ(level, &null_draw_methods, gridsize, gridsize);
+  RECURSE_RECT(level, &null_draw_methods, gridsize, gridsize);
 
   /* Draw the epoxy box */
   methods->box(output, NODE_R_COLOR, NODE_G_COLOR, NODE_B_COLOR, depth, x, totwidth, y, totheight);
@@ -434,19 +495,19 @@
   if (fontsize) {
     char text[64];
     /* Output text */
-    hwloc_obj_snprintf(text, sizeof(text), topology, level, "#", 0);
+    lstopo_obj_snprintf(text, sizeof(text), level, logical);
     methods->text(output, 0, 0, 0, fontsize, depth-2, x + 2 * gridsize, y + 2 * gridsize, text);
   }
 
   /* Restart, now really drawing sublevels */
-  RECURSE_HORIZ(level, methods, gridsize, gridsize);
+  RECURSE_RECT(level, methods, gridsize, gridsize);
 
   /* Save result for dynamic programming */
   DYNA_SAVE();
 }
 
 static void
-machine_draw(hwloc_topology_t topology, struct draw_methods *methods, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
+machine_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
 {
   unsigned myheight = (fontsize ? (fontsize + gridsize) : 0), totheight;
   unsigned mywidth = 0, totwidth;
@@ -460,7 +521,7 @@
 
   if (fontsize) {
     char text[64];
-    hwloc_obj_snprintf(text, sizeof(text), topology, level, "#", 0);
+    lstopo_obj_snprintf(text, sizeof(text), level, logical);
     methods->text(output, 0, 0, 0, fontsize, depth-1, x + gridsize, y + gridsize, text);
   }
 
@@ -470,12 +531,12 @@
 }
 
 static void
-system_draw(hwloc_topology_t topology, struct draw_methods *methods, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
+system_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
 {
   unsigned myheight = (fontsize ? (fontsize + gridsize) : 0), totheight;
   unsigned mywidth = 0, totwidth;
   unsigned textwidth = 10*fontsize;
-  int vert = prefer_vert(topology, level, output, depth, x, y, gridsize);
+  int vert = prefer_vert(topology, logical, level, output, depth, x, y, gridsize);
 
   DYNA_CHECK();
 
@@ -493,7 +554,7 @@
 
   if (fontsize) {
     char text[64];
-    hwloc_obj_snprintf(text, sizeof(text), topology, level, "#", 0);
+    lstopo_obj_snprintf(text, sizeof(text), level, logical);
     methods->text(output, 0, 0, 0, fontsize, depth-1, x + gridsize, y + gridsize, text);
   }
 
@@ -536,11 +597,11 @@
 }
 
 static void
-misc_draw(hwloc_topology_t topology, struct draw_methods *methods, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
+group_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
 {
   unsigned myheight = (fontsize ? (fontsize + gridsize) : 0), totheight;
   unsigned mywidth = 0, totwidth;
-  unsigned textwidth = 6*fontsize;
+  unsigned textwidth = level->name ? strlen(level->name) * fontsize : 6*fontsize;
 
   DYNA_CHECK();
 
@@ -549,9 +610,13 @@
   methods->box(output, MISC_R_COLOR, MISC_G_COLOR, MISC_B_COLOR, depth, x, totwidth, y, totheight);
 
   if (fontsize) {
-    char text[64];
-    hwloc_obj_snprintf(text, sizeof(text), topology, level, "#", 0);
-    methods->text(output, 0, 0, 0, fontsize, depth-1, x + gridsize, y + gridsize, text);
+    if (level->name) {
+      methods->text(output, 0, 0, 0, fontsize, depth-1, x + gridsize, y + gridsize, level->name);
+    } else {
+      char text[64];
+      lstopo_obj_snprintf(text, sizeof(text), level, logical);
+      methods->text(output, 0, 0, 0, fontsize, depth-1, x + gridsize, y + gridsize, text);
+    }
   }
 
   RECURSE_RECT(level, methods, gridsize, gridsize);
@@ -560,11 +625,40 @@
 }
 
 static void
-fig(hwloc_topology_t topology, struct draw_methods *methods, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned y)
+misc_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
 {
+  unsigned boxheight = gridsize + (fontsize ? (fontsize + gridsize) : 0);
+  unsigned myheight = boxheight + (level->arity?gridsize:0), totheight;
+  unsigned mywidth = 0, totwidth;
+  unsigned textwidth = level->name ? strlen(level->name) * fontsize : 6*fontsize;
+
+  DYNA_CHECK();
+
+  RECURSE_HORIZ(level, &null_draw_methods, gridsize, 0);
+
+  methods->box(output, MISC_R_COLOR, MISC_G_COLOR, MISC_B_COLOR, depth, x, totwidth, y, boxheight);
+
+  if (fontsize) {
+    if (level->name) {
+      methods->text(output, 0, 0, 0, fontsize, depth-1, x + gridsize, y + gridsize, level->name);
+    } else {
+      char text[64];
+      lstopo_obj_snprintf(text, sizeof(text), level, logical);
+      methods->text(output, 0, 0, 0, fontsize, depth-1, x + gridsize, y + gridsize, text);
+    }
+  }
+
+  RECURSE_HORIZ(level, methods, gridsize, 0);
+
+  DYNA_SAVE();
+}
+
+static void
+fig(hwloc_topology_t topology, struct draw_methods *methods, int logical, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned y)
+{
   unsigned totwidth, totheight;
 
-  system_draw(topology, methods, level, output, depth, x, &totwidth, y, &totheight);
+  system_draw(topology, methods, logical, level, output, depth, x, &totwidth, y, &totheight);
 }
 
 /*
@@ -580,7 +674,8 @@
     case HWLOC_OBJ_SOCKET: return socket_draw;
     case HWLOC_OBJ_CACHE: return cache_draw;
     case HWLOC_OBJ_CORE: return core_draw;
-    case HWLOC_OBJ_PROC: return proc_draw;
+    case HWLOC_OBJ_PU: return pu_draw;
+    case HWLOC_OBJ_GROUP: return group_draw;
     case HWLOC_OBJ_MISC: return misc_draw;
   }
   return NULL;
@@ -591,30 +686,38 @@
  */
 
 struct coords {
-  int x;
-  int y;
+  unsigned x;
+  unsigned y;
 };
 
 static void
-getmax_box(void *output, int r, int g, int b, unsigned depth, unsigned x, unsigned width, unsigned y, unsigned height)
+getmax_box(void *output, int r __hwloc_attribute_unused, int g __hwloc_attribute_unused, int b __hwloc_attribute_unused, unsigned depth __hwloc_attribute_unused, unsigned x, unsigned width, unsigned y, unsigned height)
 {
   struct coords *coords = output;
 
+  if (x > coords->x)
+    coords->x = x;
   if (x + width > coords->x)
     coords->x = x + width;
+  if (y > coords->y)
+    coords->y = y;
   if (y + height > coords->y)
     coords->y = y + height;
 }
 
 static void
-getmax_line(void *output, int r, int g, int b, unsigned depth, unsigned x1, unsigned y1, unsigned x2, unsigned y2)
+getmax_line(void *output, int r __hwloc_attribute_unused, int g __hwloc_attribute_unused, int b __hwloc_attribute_unused, unsigned depth __hwloc_attribute_unused, unsigned x1_arg, unsigned y1_arg, unsigned x2_arg, unsigned y2_arg)
 {
   struct coords *coords = output;
 
-  if (x2 > coords->x)
-    coords->x = x2;
-  if (y2 > coords->y)
-    coords->y = y2;
+  if (x1_arg > coords->x)
+    coords->x = x1_arg;
+  if (x2_arg > coords->x)
+    coords->x = x2_arg;
+  if (y1_arg > coords->y)
+    coords->y = y1_arg;
+  if (y2_arg > coords->y)
+    coords->y = y2_arg;
 }
 
 static struct draw_methods getmax_draw_methods = {
@@ -626,10 +729,10 @@
 };
 
 void *
-output_draw_start(struct draw_methods *methods, hwloc_topology_t topology, void *output)
+output_draw_start(struct draw_methods *methods, int logical, hwloc_topology_t topology, void *output)
 {
   struct coords coords = { .x = 0, .y = 0};
-  fig(topology, &getmax_draw_methods, hwloc_get_system_obj(topology), &coords, 100, 0, 0);
+  fig(topology, &getmax_draw_methods, logical, hwloc_get_root_obj(topology), &coords, 100, 0, 0);
   output = methods->start(output, coords.x, coords.y);
   methods->declare_color(output, 0, 0, 0);
   methods->declare_color(output, NODE_R_COLOR, NODE_G_COLOR, NODE_B_COLOR);
@@ -637,6 +740,9 @@
   methods->declare_color(output, MEMORY_R_COLOR, MEMORY_G_COLOR, MEMORY_B_COLOR);
   methods->declare_color(output, CORE_R_COLOR, CORE_G_COLOR, CORE_B_COLOR);
   methods->declare_color(output, THREAD_R_COLOR, THREAD_G_COLOR, THREAD_B_COLOR);
+  methods->declare_color(output, RUNNING_R_COLOR, RUNNING_G_COLOR, RUNNING_B_COLOR);
+  methods->declare_color(output, FORBIDDEN_R_COLOR, FORBIDDEN_G_COLOR, FORBIDDEN_B_COLOR);
+  methods->declare_color(output, OFFLINE_R_COLOR, OFFLINE_G_COLOR, OFFLINE_B_COLOR);
   methods->declare_color(output, CACHE_R_COLOR, CACHE_G_COLOR, CACHE_B_COLOR);
   methods->declare_color(output, MACHINE_R_COLOR, MACHINE_G_COLOR, MACHINE_B_COLOR);
   methods->declare_color(output, SYSTEM_R_COLOR, SYSTEM_G_COLOR, SYSTEM_B_COLOR);
@@ -645,7 +751,7 @@
 }
 
 void
-output_draw(struct draw_methods *methods, hwloc_topology_t topology, void *output)
+output_draw(struct draw_methods *methods, int logical, hwloc_topology_t topology, void *output)
 {
-	fig(topology, methods, hwloc_get_system_obj(topology), output, 100, 0, 0);
+	fig(topology, methods, logical, hwloc_get_root_obj(topology), output, 100, 0, 0);
 }

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo-fig.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo-fig.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo-fig.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -3,6 +3,7 @@
  * See COPYING in top-level directory.
  */
 
+#include <private/config.h>
 #include <hwloc.h>
 
 #include <stdlib.h>
@@ -17,7 +18,7 @@
 #define FIG_FACTOR 20
 
 static void *
-fig_start(void *output_, int width, int height)
+fig_start(void *output_, int width __hwloc_attribute_unused, int height __hwloc_attribute_unused)
 {
   FILE *output = output_;
   fprintf(output, "#FIG 3.2  Produced by hwloc's lstopo\n");
@@ -32,7 +33,7 @@
   return output;
 }
 
-static int
+static int __hwloc_attribute_const
 rgb_to_fig(int r, int g, int b)
 {
   if (r == 0xff && g == 0xff && b == 0xff)
@@ -96,10 +97,12 @@
 fig_text(void *output_, int r, int g, int b, int size, unsigned depth, unsigned x, unsigned y, const char *text)
 {
   FILE *output = output_;
+  unsigned len = strlen(text);
+  int color = rgb_to_fig(r, g, b);
   x *= FIG_FACTOR;
   y *= FIG_FACTOR;
   size = (size * 16) / 10;
-  fprintf(output, "4 0 %d %u -1 0 %d 0.0 4 %d %u %u %u %s\\001\n", rgb_to_fig(r, g, b), depth, size, size * 10, (unsigned) strlen(text) * size * 10, x, y + size * 10, text);
+  fprintf(output, "4 0 %d %u -1 0 %d 0.0 4 %d %u %u %u %s\\001\n", color, depth, size, size * 10, len * size * 10, x, y + size * 10, text);
 }
 
 static struct draw_methods fig_draw_methods = {
@@ -111,7 +114,7 @@
 };
 
 void
-output_fig (hwloc_topology_t topology, const char *filename, int verbose_mode)
+output_fig (hwloc_topology_t topology, const char *filename, int logical, int verbose_mode __hwloc_attribute_unused)
 {
   FILE *output = open_file(filename, "w");
   if (!output) {
@@ -119,7 +122,7 @@
     return;
   }
 
-  output = output_draw_start(&fig_draw_methods, topology, output);
-  output_draw(&fig_draw_methods, topology, output);
+  output = output_draw_start(&fig_draw_methods, logical, topology, output);
+  output_draw(&fig_draw_methods, logical, topology, output);
   fclose(output);
 }

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo-text.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo-text.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo-text.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,10 +1,11 @@
 /*
  * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
+ * Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
  * See COPYING in top-level directory.
  */
 
+#include <private/config.h>
 #include <hwloc.h>
-#include <private/config.h>
 
 #include <stdlib.h>
 #include <stdio.h>
@@ -23,10 +24,10 @@
 #include <wchar.h>
 #endif /* HAVE_PUTWC */
 
-#ifdef HAVE_LIBTERMCAP
+#ifdef HWLOC_HAVE_LIBTERMCAP
 #include <curses.h>
 #include <term.h>
-#endif /* HAVE_LIBTERMCAP */
+#endif /* HWLOC_HAVE_LIBTERMCAP */
 
 #include "lstopo.h"
 
@@ -37,15 +38,54 @@
  * Console fashion text output
  */
 
+static void
+output_console_obj (hwloc_obj_t l, FILE *output, int logical, int verbose_mode)
+{
+  char type[32], attr[256], phys[32] = "";
+  unsigned idx = logical ? l->logical_index : l->os_index;
+  const char *indexprefix = logical ? " #" :  " p#";
+  if (show_cpuset < 2) {
+    if (l->type == HWLOC_OBJ_MISC && l->name)
+      fprintf(output, "%s", l->name);
+    else {
+      hwloc_obj_type_snprintf (type, sizeof(type), l, verbose_mode-1);
+      fprintf(output, "%s", type);
+    }
+    if (l->depth != 0 && idx != (unsigned)-1)
+      fprintf(output, "%s%u", indexprefix, idx);
+    if (logical && l->os_index != (unsigned) -1 &&
+	(verbose_mode >= 2 || l->type == HWLOC_OBJ_PU || l->type == HWLOC_OBJ_NODE))
+      snprintf(phys, sizeof(phys), "phys=%u", l->os_index);
+    hwloc_obj_attr_snprintf (attr, sizeof(attr), l, " ", verbose_mode-1);
+    if (*phys || *attr) {
+      const char *separator = *phys != '\0' && *attr!= '\0' ? " " : "";
+      fprintf(output, " (%s%s%s)",
+	      phys, separator, attr);
+    }
+    if (verbose_mode >= 2 && l->name && l->type != HWLOC_OBJ_MISC)
+      fprintf(output, " \"%s\"", l->name);
+  }
+  if (!l->cpuset)
+    return;
+  if (show_cpuset == 1)
+    fprintf(output, " cpuset=");
+  if (show_cpuset) {
+    char *cpusetstr;
+    hwloc_cpuset_asprintf(&cpusetstr, l->cpuset);
+    fprintf(output, "%s", cpusetstr);
+    free(cpusetstr);
+  }
+}
+
 /* Recursively output topology in a console fashion */
 static void
-output_topology (hwloc_topology_t topology, hwloc_obj_t l, hwloc_obj_t parent, FILE *output, int i, int verbose_mode) {
-  int x;
-  const char * indexprefix = "#";
-  char line[256];
-
-  if (verbose_mode <= 1
-      && parent && parent->arity == 1 && hwloc_cpuset_isequal(l->cpuset, parent->cpuset)) {
+output_topology (hwloc_topology_t topology, hwloc_obj_t l, hwloc_obj_t parent, FILE *output, int i, int logical, int verbose_mode)
+{
+  unsigned x;
+  int group_identical = (verbose_mode <= 1) && !show_cpuset;
+  if (group_identical
+      && parent && parent->arity == 1
+      && l->cpuset && parent->cpuset && hwloc_cpuset_isequal(l->cpuset, parent->cpuset)) {
     /* in non-verbose mode, merge objects with their parent is they are exactly identical */
     fprintf(output, " + ");
   } else {
@@ -54,17 +94,29 @@
     indent (output, 2*i);
     i++;
   }
-  hwloc_obj_snprintf (line, sizeof(line), topology, l, indexprefix, verbose_mode-1);
-  fprintf(output, "%s", line);
+  output_console_obj(l, output, logical, verbose_mode);
   if (l->arity || (!i && !l->arity))
     {
       for (x=0; x<l->arity; x++)
-	output_topology (topology, l->children[x], l, output, i, verbose_mode);
+	output_topology (topology, l->children[x], l, output, i, logical, verbose_mode);
   }
 }
 
-void output_console(hwloc_topology_t topology, const char *filename, int verbose_mode)
+/* Recursive so that multiple depth types are properly shown */
+static void
+output_only (hwloc_topology_t topology, hwloc_obj_t l, FILE *output, int logical, int verbose_mode)
 {
+  unsigned x;
+  if (show_only == l->type) {
+    output_console_obj (l, output, logical, verbose_mode);
+    fprintf (output, "\n");
+  }
+  for (x=0; x<l->arity; x++)
+    output_only (topology, l->children[x], output, logical, verbose_mode);
+}
+
+void output_console(hwloc_topology_t topology, const char *filename, int logical, int verbose_mode)
+{
   unsigned topodepth;
   FILE *output;
 
@@ -86,8 +138,12 @@
    * if verbose_mode > 1, print both.
    */
 
-  if (verbose_mode >= 1) {
-    output_topology (topology, hwloc_get_system_obj(topology), NULL, output, 0, verbose_mode);
+  if (show_only != (hwloc_obj_type_t)-1) {
+    if (verbose_mode > 1)
+      fprintf(output, "Only showing %s objects\n", hwloc_obj_type_string(show_only));
+    output_only (topology, hwloc_get_root_obj(topology), output, logical, verbose_mode);
+  } else if (verbose_mode >= 1) {
+    output_topology (topology, hwloc_get_root_obj(topology), NULL, output, 0, logical, verbose_mode);
     fprintf(output, "\n");
   }
 
@@ -102,9 +158,57 @@
     }
   }
 
-  if (verbose_mode > 1)
+  if (verbose_mode > 1) {
+    hwloc_const_cpuset_t complete = hwloc_topology_get_complete_cpuset(topology);
+    hwloc_const_cpuset_t topo = hwloc_topology_get_topology_cpuset(topology);
+    hwloc_const_cpuset_t online = hwloc_topology_get_online_cpuset(topology);
+    hwloc_const_cpuset_t allowed = hwloc_topology_get_allowed_cpuset(topology);
+
+    if (!hwloc_cpuset_isequal(topo, complete)) {
+      hwloc_cpuset_t unknown = hwloc_cpuset_alloc();
+      char *unknownstr;
+      hwloc_cpuset_copy(unknown, complete);
+      hwloc_cpuset_andnot(unknown, unknown, topo);
+      hwloc_cpuset_asprintf(&unknownstr, unknown);
+      fprintf (output, "%d processors not represented in topology: %s\n", hwloc_cpuset_weight(unknown), unknownstr);
+      free(unknownstr);
+      hwloc_cpuset_free(unknown);
+    }
+    if (!hwloc_cpuset_isequal(online, complete)) {
+      hwloc_cpuset_t offline = hwloc_cpuset_alloc();
+      char *offlinestr;
+      hwloc_cpuset_copy(offline, complete);
+      hwloc_cpuset_andnot(offline, offline, online);
+      hwloc_cpuset_asprintf(&offlinestr, offline);
+      fprintf (output, "%d processors offline: %s\n", hwloc_cpuset_weight(offline), offlinestr);
+      free(offlinestr);
+      hwloc_cpuset_free(offline);
+    }
+    if (!hwloc_cpuset_isequal(allowed, online)) {
+      if (!hwloc_cpuset_isincluded(online, allowed)) {
+        hwloc_cpuset_t forbidden = hwloc_cpuset_alloc();
+        char *forbiddenstr;
+        hwloc_cpuset_copy(forbidden, online);
+        hwloc_cpuset_andnot(forbidden, forbidden, allowed);
+        hwloc_cpuset_asprintf(&forbiddenstr, forbidden);
+        fprintf(output, "%d processors online but not allowed: %s\n", hwloc_cpuset_weight(forbidden), forbiddenstr);
+        free(forbiddenstr);
+        hwloc_cpuset_free(forbidden);
+      }
+      if (!hwloc_cpuset_isincluded(allowed, online)) {
+        hwloc_cpuset_t potential = hwloc_cpuset_alloc();
+        char *potentialstr;
+        hwloc_cpuset_copy(potential, allowed);
+        hwloc_cpuset_andnot(potential, potential, online);
+        hwloc_cpuset_asprintf(&potentialstr, potential);
+        fprintf(output, "%d processors allowed but not online: %s\n", hwloc_cpuset_weight(potential), potentialstr);
+        free(potentialstr);
+        hwloc_cpuset_free(potential);
+      }
+    }
     if (!hwloc_topology_is_thissystem(topology))
       fprintf (output, "Topology not from this system\n");
+  }
 
   fclose(output);
 }
@@ -124,18 +228,19 @@
 #define putcharacter(c,f) putc(c,f)
 #endif /* HAVE_PUTWC */
 
-#ifdef HAVE_LIBTERMCAP
+#ifdef HWLOC_HAVE_LIBTERMCAP
 static int myputchar(int c) {
   return putcharacter(c, stdout);
 }
-#endif /* HAVE_LIBTERMCAP */
+#endif /* HWLOC_HAVE_LIBTERMCAP */
 
 /* Off-screen rendering buffer */
 struct cell {
   character c;
-#ifdef HAVE_LIBTERMCAP
-  int r, g, b;
-#endif /* HAVE_LIBTERMCAP */
+#ifdef HWLOC_HAVE_LIBTERMCAP
+  int fr, fg, fb;
+  int br, bg, bb;
+#endif /* HWLOC_HAVE_LIBTERMCAP */
 };
 
 struct display {
@@ -147,7 +252,7 @@
 
 /* Allocate the off-screen buffer */
 static void *
-text_start(void *output, int width, int height)
+text_start(void *output __hwloc_attribute_unused, int width, int height)
 {
   int j, i;
   struct display *disp = malloc(sizeof(*disp));
@@ -168,77 +273,77 @@
   return disp;
 }
 
-#ifdef HAVE_LIBTERMCAP
+#ifdef HWLOC_HAVE_LIBTERMCAP
 /* Standard terminfo strings */
-static char *oc, *initc = NULL, *initp = NULL, *bold, *normal, *setaf, *setab, *setf, *setb, *scp;
+static char *initc = NULL, *initp = NULL;
 
 /* Set text color to bright white or black according to the background */
 static int set_textcolor(int rr, int gg, int bb)
 {
   if (!initc && !initp && rr + gg + bb < 2) {
-    if (bold)
-      tputs(bold, 1, myputchar);
+    if (enter_bold_mode)
+      tputs(enter_bold_mode, 1, myputchar);
     return 7;
   } else {
-    if (normal)
-      tputs(normal, 1, myputchar);
+    if (exit_attribute_mode)
+      tputs(exit_attribute_mode, 1, myputchar);
     return 0;
   }
 }
 
 static void
-set_color(int r, int g, int b)
+set_color(int fr, int fg, int fb, int br, int bg, int bb)
 {
   char *toput;
   int color, textcolor;
 
   if (initc || initp) {
     /* Can set rgb color, easy */
-    color = rgb_to_color(r, g, b) + 16;
-    textcolor = 0;
+    textcolor = rgb_to_color(fr, fg, fb) + 16;
+    color = rgb_to_color(br, bg, bb) + 16;
   } else {
     /* Magic trigger: it seems to separate colors quite well */
-    int rr = r >= 0xe0;
-    int gg = g >= 0xe0;
-    int bb = b >= 0xe0;
+    int brr = br >= 0xe0;
+    int bgg = bg >= 0xe0;
+    int bbb = bb >= 0xe0;
 
-    if (setab)
+    if (set_a_background)
       /* ANSI colors */
-      color = (rr << 0) | (gg << 1) | (bb << 2);
+      color = (brr << 0) | (bgg << 1) | (bbb << 2);
     else
       /* Legacy colors */
-      color = (rr << 2) | (gg << 1) | (bb << 0);
-    textcolor = set_textcolor(rr, gg, bb);
+      color = (brr << 2) | (bgg << 1) | (bbb << 0);
+    textcolor = set_textcolor(brr, bgg, bbb);
   }
 
   /* And now output magic string to TTY */
-  if (setaf) {
+  if (set_a_foreground) {
     /* foreground */
-    if ((toput = tparm(setaf, textcolor)))
+    if ((toput = tparm(set_a_foreground, textcolor, 0, 0, 0, 0, 0, 0, 0, 0)))
       tputs(toput, 1, myputchar);
     /* background */
-    if ((toput = tparm(setab, color)))
+    if ((toput = tparm(set_a_background, color, 0, 0, 0, 0, 0, 0, 0, 0)))
       tputs(toput, 1, myputchar);
-  } else if (setf) {
+  } else if (set_foreground) {
     /* foreground */
-    if ((toput = tparm(setf, textcolor)))
+    if ((toput = tparm(set_foreground, textcolor, 0, 0, 0, 0, 0, 0, 0, 0)))
       tputs(toput, 1, myputchar);
     /* background */
-    if ((toput = tparm(setb, color)))
+    if ((toput = tparm(set_background, color, 0, 0, 0, 0, 0, 0, 0, 0)))
       tputs(toput, 1, myputchar);
-  } else if (scp) {
+  } else if (set_color_pair) {
     /* pair */
-    if ((toput = tparm(scp, color)))
+    if ((toput = tparm(set_color_pair, color, 0, 0, 0, 0, 0, 0, 0, 0)))
       tputs(toput, 1, myputchar);
   }
 }
-#endif /* HAVE_LIBTERMCAP */
+#endif /* HWLOC_HAVE_LIBTERMCAP */
 
 /* We we can, allocate rgb colors */
 static void
-text_declare_color(void *output, int r, int g, int b)
+text_declare_color(void *output __hwloc_attribute_unused, int r __hwloc_attribute_unused, int g __hwloc_attribute_unused, int b __hwloc_attribute_unused)
 {
-#ifdef HAVE_LIBTERMCAP
+#ifdef HWLOC_HAVE_LIBTERMCAP
   int color = declare_color(r, g, b);
   /* Yes, values seem to range from 0 to 1000 inclusive */
   int rr = (r * 1001) / 256;
@@ -247,31 +352,36 @@
   char *toput;
 
   if (initc) {
-    if ((toput = tparm(initc, color + 16, rr, gg, bb)))
+    if ((toput = tparm(initc, color + 16, rr, gg, bb, 0, 0, 0, 0, 0)))
       tputs(toput, 1, myputchar);
   } else if (initp) {
-    if ((toput = tparm(initp, color + 16, 0, 0, 0, rr, gg, bb)))
+    if ((toput = tparm(initp, color + 16, 0, 0, 0, rr, gg, bb, 0, 0)))
       tputs(toput, 1, myputchar);
   }
-#endif /* HAVE_LIBTERMCAP */
+#endif /* HWLOC_HAVE_LIBTERMCAP */
 }
 
 /* output text, erasing any previous content */
 static void
-put(struct display *disp, int x, int y, character c, int r, int g, int b)
+put(struct display *disp, int x, int y, character c, int fr __hwloc_attribute_unused, int fg __hwloc_attribute_unused, int fb __hwloc_attribute_unused, int br __hwloc_attribute_unused, int bg __hwloc_attribute_unused, int bb __hwloc_attribute_unused)
 {
   if (x >= disp->width || y >= disp->height) {
     /* fprintf(stderr, "%"PRIchar" overflowed to (%d,%d)\n", c, x, y); */
     return;
   }
   disp->cells[y][x].c = c;
-#ifdef HAVE_LIBTERMCAP
-  if (r != -1) {
-    disp->cells[y][x].r = r;
-    disp->cells[y][x].g = g;
-    disp->cells[y][x].b = b;
+#ifdef HWLOC_HAVE_LIBTERMCAP
+  if (fr != -1) {
+    disp->cells[y][x].fr = fr;
+    disp->cells[y][x].fg = fg;
+    disp->cells[y][x].fb = fb;
   }
-#endif /* HAVE_LIBTERMCAP */
+  if (br != -1) {
+    disp->cells[y][x].br = br;
+    disp->cells[y][x].bg = bg;
+    disp->cells[y][x].bb = bb;
+  }
+#endif /* HWLOC_HAVE_LIBTERMCAP */
 }
 
 /* Where bars of a character go to */
@@ -376,15 +486,16 @@
 {
   character current = disp->cells[y][x].c;
   int directions = (to_directions(disp, current) & ~andnot) | or;
-  put(disp, x, y, from_directions(disp, directions), r, g, b);
+  put(disp, x, y, from_directions(disp, directions), -1, -1, -1, r, g, b);
 }
 
 /* Now we can implement the standard drawing helpers */
 static void
-text_box(void *output, int r, int g, int b, unsigned depth, unsigned x1, unsigned width, unsigned y1, unsigned height)
+text_box(void *output, int r, int g, int b, unsigned depth __hwloc_attribute_unused, unsigned x1, unsigned width, unsigned y1, unsigned height)
 {
   struct display *disp = output;
-  int x2, y2, i, j;
+  unsigned i, j;
+  unsigned x2, y2;
   x1 /= (gridsize/2);
   width /= (gridsize/2);
   y1 /= gridsize;
@@ -412,17 +523,16 @@
   }
   for (j = y1 + 1; j < y2; j++) {
     for (i = x1 + 1; i < x2; i++) {
-      put(disp, i, j, ' ', r, g, b);
+      put(disp, i, j, ' ', -1, -1, -1, r, g, b);
     }
   }
 }
 
 static void
-text_line(void *output, int r, int g, int b, unsigned depth, unsigned x1, unsigned y1, unsigned x2, unsigned y2)
+text_line(void *output, int r __hwloc_attribute_unused, int g __hwloc_attribute_unused, int b __hwloc_attribute_unused, unsigned depth __hwloc_attribute_unused, unsigned x1, unsigned y1, unsigned x2, unsigned y2)
 {
   struct display *disp = output;
-  int i, j;
-  int z;
+  unsigned i, j, z;
   x1 /= (gridsize/2);
   y1 /= gridsize;
   x2 /= (gridsize/2);
@@ -469,13 +579,13 @@
 }
 
 static void
-text_text(void *output, int r, int g, int b, int size, unsigned depth, unsigned x, unsigned y, const char *text)
+text_text(void *output, int r, int g, int b, int size __hwloc_attribute_unused, unsigned depth __hwloc_attribute_unused, unsigned x, unsigned y, const char *text)
 {
   struct display *disp = output;
   x /= (gridsize/2);
   y /= gridsize;
   for ( ; *text; text++)
-    put(disp, x++, y, *text, -1, -1, -1);
+    put(disp, x++, y, *text, r, g, b, -1, -1, -1);
 }
 
 static struct draw_methods text_draw_methods = {
@@ -486,14 +596,16 @@
   .text = text_text,
 };
 
-void output_text(hwloc_topology_t topology, const char *filename, int verbose_mode)
+void output_text(hwloc_topology_t topology, const char *filename, int logical, int verbose_mode __hwloc_attribute_unused)
 {
   FILE *output;
   struct display *disp;
   int i, j;
-  int lr, lg, lb;
-#ifdef HAVE_LIBTERMCAP
+  int lfr, lfg, lfb; /* Last foreground color */
+  int lbr, lbg, lbb; /* Last background color */
+#ifdef HWLOC_HAVE_LIBTERMCAP
   int term = 0;
+  char *tmp;
 #endif
 
   if (!filename || !strcmp(filename, "-"))
@@ -511,76 +623,78 @@
   setlocale(LC_ALL, "");
 #endif /* HAVE_SETLOCALE */
 
-#ifdef HAVE_LIBTERMCAP
+#ifdef HWLOC_HAVE_LIBTERMCAP
   /* If we are outputing to a tty, use colors */
   if (output == stdout && isatty(STDOUT_FILENO)) {
     term = !setupterm(NULL, STDOUT_FILENO, NULL);
 
     if (term) {
-      int colors, pairs;
-
       /* reset colors */
-      if ((oc = tgetstr("oc", NULL)))
-	tputs(oc, 1, myputchar);
+      if (orig_colors)
+        tputs(orig_colors, 1, myputchar);
 
       /* Get terminfo(5) strings */
-      pairs = tgetnum("pa");
-      initp = tgetstr("Ip", NULL);
-      scp = tgetstr("sp", NULL);
-      if (pairs <= 16 || !initp || !scp) {
-	/* Can't use pairs to define our own colors */
+      initp = initialize_pair;
+      if (max_pairs <= 16 || !initp || !set_color_pair) {
+	/* Can't use max_pairs to define our own colors */
 	initp = NULL;
-	colors = tgetnum("Co");
-	if (colors > 16) {
-	  if (tgetflag("cc"))
-	    initc = tgetstr("Ic", NULL);
-	}
-	setaf = tgetstr("AF", NULL);
-	setab = tgetstr("AB", NULL);
-	setf = tgetstr("Sf", NULL);
-	setb = tgetstr("Sb", NULL);
+	if (max_colors > 16)
+	  if (can_change)
+            initc = initialize_color;
       }
-      if (tgetflag("lhs"))
+      /* Prevent a trivial compiler warning because the param of
+         tgetflag is (char*), not (const char*). */
+      tmp = strdup("lhs");
+      if (tgetflag(tmp)) {
 	/* Sorry, I'm lazy to convert colors and I don't know any terminal
 	 * using LHS anyway */
 	initc = initp = 0;
-      bold = tgetstr("md", NULL);
-      normal = tgetstr("me", NULL);
+      }
+      free(tmp);
     }
   }
-#endif /* HAVE_LIBTERMCAP */
+#endif /* HWLOC_HAVE_LIBTERMCAP */
 
-  disp = output_draw_start(&text_draw_methods, topology, output);
-  output_draw(&text_draw_methods, topology, disp);
+  disp = output_draw_start(&text_draw_methods, logical, topology, output);
+  output_draw(&text_draw_methods, logical, topology, disp);
 
-  lr = lg = lb = -1;
+  lfr = lfg = lfb = -1;
+  lbr = lbg = lbb = -1;
   for (j = 0; j < disp->height; j++) {
     for (i = 0; i < disp->width; i++) {
-#ifdef HAVE_LIBTERMCAP
+#ifdef HWLOC_HAVE_LIBTERMCAP
       if (term) {
 	/* TTY output, use colors */
-	int r = disp->cells[j][i].r;
-	int g = disp->cells[j][i].g;
-	int b = disp->cells[j][i].b;
+	int fr = disp->cells[j][i].fr;
+	int fg = disp->cells[j][i].fg;
+	int fb = disp->cells[j][i].fb;
+	int br = disp->cells[j][i].br;
+	int bg = disp->cells[j][i].bg;
+	int bb = disp->cells[j][i].bb;
 
 	/* Avoid too much work for the TTY */
-	if (r != lr || g != lg || b != lb) {
-	  set_color(r, g, b);
-	  lr = r;
-	  lg = g;
-	  lb = b;
+	if (fr != lfr || fg != lfg || fb != lfb
+	 || br != lbr || bg != lbg || bb != lbb) {
+	  set_color(fr, fg, fb, br, bg, bb);
+	  lfr = fr;
+	  lfg = fg;
+	  lfb = fb;
+	  lbr = br;
+	  lbg = bg;
+	  lbb = bb;
 	}
       }
-#endif /* HAVE_LIBTERMCAP */
+#endif /* HWLOC_HAVE_LIBTERMCAP */
       putcharacter(disp->cells[j][i].c, output);
     }
-#ifdef HAVE_LIBTERMCAP
-    /* Keep the rest of the line black */
-    if (term) {
-      lr = lg = lb = 0;
-      set_color(lr, lg, lb);
+#ifdef HWLOC_HAVE_LIBTERMCAP
+    /* Keep the rest of the line as default */
+    if (term && orig_pair) {
+      lfr = lfg = lfb = -1;
+      lbr = lbg = lbb = -1;
+      tputs(orig_pair, 1, myputchar);
     }
-#endif /* HAVE_LIBTERMCAP */
+#endif /* HWLOC_HAVE_LIBTERMCAP */
     putcharacter('\n', output);
   }
 }

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo-windows.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo-windows.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo-windows.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -11,6 +11,7 @@
 #include <string.h>
 
 #include <windows.h>
+#include <windowsx.h>
 
 #include "lstopo.h"
 
@@ -38,53 +39,170 @@
 
 struct draw_methods windows_draw_methods;
 
-hwloc_topology_t the_topology;
+static hwloc_topology_t the_topology;
+static int the_logical;
+static int state, control;
+static int x, y, x_delta, y_delta;
+static int finish;
+static int the_width, the_height;
+static int win_width, win_height;
 
 static LRESULT CALLBACK
 WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
 {
+  int redraw = 0;
   switch (message) {
     case WM_PAINT: {
       HDC hdc;
       PAINTSTRUCT ps;
       hdc = BeginPaint(hwnd, &ps);
-      output_draw(&windows_draw_methods, the_topology, &ps);
+      output_draw(&windows_draw_methods, the_logical, the_topology, &ps);
       EndPaint(hwnd, &ps);
       break;
     }
+    case WM_LBUTTONDOWN: 
+      state = 1;
+      x = GET_X_LPARAM(lparam);
+      y = GET_Y_LPARAM(lparam);
+      break;
+    case WM_LBUTTONUP: 
+      state = 0;
+      break;
+    case WM_MOUSEMOVE:
+      if (!(wparam & MK_LBUTTON))
+        state = 0;
+      if (state) {
+        int new_x = GET_X_LPARAM(lparam);
+        int new_y = GET_Y_LPARAM(lparam);
+        x_delta -= new_x - x;
+        y_delta -= new_y - y;
+        x = new_x;
+        y = new_y;
+        redraw = 1;
+      }
+      break;
+    case WM_KEYDOWN:
+      switch (wparam) {
+      case 'q':
+      case 'Q':
+      case VK_ESCAPE:
+        finish = 1;
+        break;
+      case VK_LEFT:
+        x_delta -= win_width/10;
+        redraw = 1;
+        break;
+      case VK_RIGHT:
+        x_delta += win_width/10;
+        redraw = 1;
+        break;
+      case VK_UP:
+        y_delta -= win_height/10;
+        redraw = 1;
+        break;
+      case VK_DOWN:
+        y_delta += win_height/10;
+        redraw = 1;
+        break;
+      case VK_PRIOR:
+        if (control) {
+          x_delta -= win_width;
+          redraw = 1;
+        } else {
+          y_delta -= win_height;
+          redraw = 1;
+        }
+        break;
+      case VK_NEXT:
+        if (control) {
+          x_delta += win_width;
+          redraw = 1;
+        } else {
+          y_delta += win_height;
+          redraw = 1;
+        }
+        break;
+      case VK_HOME:
+        x_delta = 0;
+        y_delta = 0;
+        redraw = 1;
+        break;
+      case VK_END:
+        x_delta = INT_MAX;
+        y_delta = INT_MAX;
+        redraw = 1;
+        break;
+      case VK_CONTROL:
+        control = 1;
+        break;
+      }
+      break;
+    case WM_KEYUP:
+      switch (wparam) {
+      case VK_CONTROL:
+        control = 0;
+        break;
+      }
+      break;
     case WM_DESTROY:
       PostQuitMessage(0);
       return 0;
+    case WM_SIZE:
+      win_width = LOWORD(lparam);
+      win_height = HIWORD(lparam);
+      redraw = 1;
+      break;
   }
+  if (redraw) {
+    if (x_delta > the_width - win_width)
+      x_delta = the_width - win_width;
+    if (y_delta > the_height - win_height)
+      y_delta = the_height - win_height;
+    if (x_delta < 0)
+      x_delta = 0;
+    if (y_delta < 0)
+      y_delta = 0;
+    RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE);
+  }
   return DefWindowProc(hwnd, message, wparam, lparam);
 }
 
 static void *
-windows_start(void *output_, int width, int height)
+windows_start(void *output_ __hwloc_attribute_unused, int width, int height)
 {
   WNDCLASS wndclass = {
     .hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH),
-    .hCursor = LoadCursor(NULL, IDC_ARROW),
+    .hCursor = LoadCursor(NULL, IDC_SIZEALL),
     .hIcon = LoadIcon(NULL, IDI_APPLICATION),
     .lpfnWndProc = WndProc,
     .lpszClassName = "lstopo",
   };
   HWND toplevel;
 
+  win_width = width + 2*GetSystemMetrics(SM_CXSIZEFRAME);
+  win_height = height + 2*GetSystemMetrics(SM_CYSIZEFRAME) + GetSystemMetrics(SM_CYCAPTION);
+
+  if (win_width > GetSystemMetrics(SM_CXFULLSCREEN))
+    win_width = GetSystemMetrics(SM_CXFULLSCREEN);
+
+  if (win_height > GetSystemMetrics(SM_CYFULLSCREEN))
+    win_height = GetSystemMetrics(SM_CYFULLSCREEN);
+
   RegisterClass(&wndclass);
   toplevel = CreateWindow("lstopo", "lstopo", WS_OVERLAPPEDWINDOW,
 		  CW_USEDEFAULT, CW_USEDEFAULT,
-		  width + 2*GetSystemMetrics(SM_CXSIZEFRAME),
-		  height + 2*GetSystemMetrics(SM_CYSIZEFRAME) + GetSystemMetrics(SM_CYSMCAPTION),
-		  NULL, NULL, NULL, NULL);
+		  win_width, win_height, NULL, NULL, NULL, NULL);
 
+  the_width = width;
+  the_height = height;
+
   ShowWindow(toplevel, SW_SHOWDEFAULT);
 
   return toplevel;
 }
 
 static void
-windows_declare_color(void *output_, int r, int g, int b)
+windows_declare_color(void *output_ __hwloc_attribute_unused, int r, int g, int b)
 {
   HBRUSH brush;
   COLORREF color = RGB(r, g, b);
@@ -104,32 +222,32 @@
 }
 
 static void
-windows_box(void *output, int r, int g, int b, unsigned depth, unsigned x, unsigned width, unsigned y, unsigned height)
+windows_box(void *output, int r, int g, int b, unsigned depth __hwloc_attribute_unused, unsigned x, unsigned width, unsigned y, unsigned height)
 {
   PAINTSTRUCT *ps = output;
   SelectObject(ps->hdc, rgb_to_brush(r, g, b));
   SetBkColor(ps->hdc, RGB(r, g, b));
-  Rectangle(ps->hdc, x, y, x + width, y + height);
+  Rectangle(ps->hdc, x - x_delta, y - y_delta, x + width - x_delta, y + height - y_delta);
 }
 
 static void
-windows_line(void *output, int r, int g, int b, unsigned depth, unsigned x1, unsigned y1, unsigned x2, unsigned y2)
+windows_line(void *output, int r, int g, int b, unsigned depth __hwloc_attribute_unused, unsigned x1, unsigned y1, unsigned x2, unsigned y2)
 {
   PAINTSTRUCT *ps = output;
   SelectObject(ps->hdc, rgb_to_brush(r, g, b));
-  MoveToEx(ps->hdc, x1, y1, NULL);
-  LineTo(ps->hdc, x2, y2);
+  MoveToEx(ps->hdc, x1 - x_delta, y1 - y_delta, NULL);
+  LineTo(ps->hdc, x2 - x_delta, y2 - y_delta);
 }
 
 static void
-windows_text(void *output, int r, int g, int b, int size, unsigned depth, unsigned x, unsigned y, const char *text)
+windows_text(void *output, int r, int g, int b, int size, unsigned depth __hwloc_attribute_unused, unsigned x, unsigned y, const char *text)
 {
   PAINTSTRUCT *ps = output;
   HFONT font;
   SetTextColor(ps->hdc, RGB(r, g, b));
   font = CreateFont(size, 0, 0, 0, 0, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, NULL);
   SelectObject(ps->hdc, (HGDIOBJ) font);
-  TextOut(ps->hdc, x, y, text, strlen(text));
+  TextOut(ps->hdc, x - x_delta, y - y_delta, text, strlen(text));
   DeleteObject(font);
 }
 
@@ -142,14 +260,15 @@
 };
 
 void
-output_windows (hwloc_topology_t topology, const char *filename, int verbose_mode)
+output_windows (hwloc_topology_t topology, const char *filename __hwloc_attribute_unused, int logical, int verbose_mode __hwloc_attribute_unused)
 {
   HWND toplevel;
   the_topology = topology;
-  toplevel = output_draw_start(&windows_draw_methods, topology, NULL);
+  the_logical = logical;
+  toplevel = output_draw_start(&windows_draw_methods, logical, topology, NULL);
   UpdateWindow(toplevel);
   MSG msg;
-  while (GetMessage(&msg, NULL, 0, 0)) {
+  while (!finish && GetMessage(&msg, NULL, 0, 0)) {
     TranslateMessage(&msg);
     DispatchMessage(&msg);
   }

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo-xml.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo-xml.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo-xml.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,118 +1,24 @@
 /*
  * Copyright © 2009 CNRS, INRIA, Université Bordeaux 1
+ * Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
  * See COPYING in top-level directory.
  */
 
 #include <private/config.h>
 
-#ifdef HAVE_XML
+#ifdef HWLOC_HAVE_XML
 
 #include <hwloc.h>
 #include <string.h>
 
-#include <strings.h>
-
-#include <libxml/parser.h>
-#include <libxml/tree.h>
-
-#include <strings.h>
-
 #include "lstopo.h"
 
-static void
-output_topology (hwloc_topology_t topology, hwloc_obj_t obj, xmlNodePtr root_node, int verbose_mode)
+void output_xml(hwloc_topology_t topology, const char *filename, int logical __hwloc_attribute_unused, int verbose_mode __hwloc_attribute_unused)
 {
-  xmlNodePtr node = NULL;
-  char *cpuset = NULL;
-  char tmp[255];
-
-  /* xmlNewChild() creates a new node, which is "attached" as child node
-   * of root_node node. */
-  node = xmlNewChild(root_node, NULL, BAD_CAST "object", NULL);
-  xmlNewProp(node, BAD_CAST "type", BAD_CAST hwloc_obj_type_string(obj->type));
-  sprintf(tmp, "%d", obj->os_index);
-  xmlNewProp(node, BAD_CAST "os_index", BAD_CAST tmp);
-  hwloc_cpuset_asprintf(&cpuset, obj->cpuset);
-  xmlNewProp(node, BAD_CAST "cpuset", BAD_CAST cpuset);
-  free(cpuset);
-
-  switch (obj->type) {
-  case HWLOC_OBJ_CACHE:
-    sprintf(tmp, "%lu", obj->attr->cache.memory_kB);
-    xmlNewProp(node, BAD_CAST "memory_kB", BAD_CAST tmp);
-    sprintf(tmp, "%u", obj->attr->cache.depth);
-    xmlNewProp(node, BAD_CAST "depth", BAD_CAST tmp);
-    break;
-  case HWLOC_OBJ_SYSTEM:
-    xmlNewProp(node, BAD_CAST "dmi_board_vendor", BAD_CAST obj->attr->machine.dmi_board_vendor);
-    xmlNewProp(node, BAD_CAST "dmi_board_name", BAD_CAST obj->attr->machine.dmi_board_name);
-    sprintf(tmp, "%lu", obj->attr->system.memory_kB);
-    xmlNewProp(node, BAD_CAST "memory_kB", BAD_CAST tmp);
-    sprintf(tmp, "%lu", obj->attr->system.huge_page_free);
-    xmlNewProp(node, BAD_CAST "huge_page_free", BAD_CAST tmp);
-    sprintf(tmp, "%lu", obj->attr->machine.huge_page_size_kB);
-    xmlNewProp(node, BAD_CAST "huge_page_size_kB", BAD_CAST tmp);
-    break;
-  case HWLOC_OBJ_MACHINE:
-    xmlNewProp(node, BAD_CAST "dmi_board_vendor", BAD_CAST obj->attr->machine.dmi_board_vendor);
-    xmlNewProp(node, BAD_CAST "dmi_board_name", BAD_CAST obj->attr->machine.dmi_board_name);
-    sprintf(tmp, "%lu", obj->attr->machine.memory_kB);
-    xmlNewProp(node, BAD_CAST "memory_kB", BAD_CAST tmp);
-    sprintf(tmp, "%lu", obj->attr->machine.huge_page_free);
-    xmlNewProp(node, BAD_CAST "huge_page_free", BAD_CAST tmp);
-    sprintf(tmp, "%lu", obj->attr->machine.huge_page_size_kB);
-    xmlNewProp(node, BAD_CAST "huge_page_size_kB", BAD_CAST tmp);
-    break;
-  case HWLOC_OBJ_NODE:
-    sprintf(tmp, "%lu", obj->attr->node.memory_kB);
-    xmlNewProp(node, BAD_CAST "memory_kB", BAD_CAST tmp);
-    sprintf(tmp, "%lu", obj->attr->node.huge_page_free);
-    xmlNewProp(node, BAD_CAST "huge_page_free", BAD_CAST tmp);
-    break;
-  case HWLOC_OBJ_MISC:
-    sprintf(tmp, "%u", obj->attr->misc.depth);
-    xmlNewProp(node, BAD_CAST "depth", BAD_CAST tmp);
-    break;
-  default:
-    break;
-  }
-
-  if (obj->arity) {
-    int x;
-    for (x=0; x<obj->arity; x++)
-      output_topology (topology, obj->children[x], node, verbose_mode);
-  }
-}
-
-void output_xml(hwloc_topology_t topology, const char *filename, int verbose_mode)
-{
-  xmlDocPtr doc = NULL;       /* document pointer */
-  xmlNodePtr root_node = NULL; /* root pointer */
-  xmlDtdPtr dtd = NULL;       /* DTD pointer */
-
   if (!strcasecmp(filename, "-.xml"))
     filename = "-";
 
-  LIBXML_TEST_VERSION;
-
-  /* Creates a new document, a node and set it as a root node. */
-  doc = xmlNewDoc(BAD_CAST "1.0");
-  root_node = xmlNewNode(NULL, BAD_CAST "root");
-  xmlDocSetRootElement(doc, root_node);
-
-  /* Creates a DTD declaration. Isn't mandatory. */
-  dtd = xmlCreateIntSubset(doc, BAD_CAST "root", NULL, BAD_CAST "hwloc.dtd");
-
-  output_topology (topology, hwloc_get_system_obj(topology), root_node, verbose_mode);
-
-  /* Dumping document to stdio or file. */
-  xmlSaveFormatFileEnc(filename, doc, "UTF-8", 1);
-
-  /* Free the document. */
-  xmlFreeDoc(doc);
-
-  /* Free the global variables that may have been allocated by the parser. */
-  xmlCleanupParser();
+  hwloc_topology_export_xml(topology, filename);
 }
 
-#endif /* HAVE_XML */
+#endif /* HWLOC_HAVE_XML */

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo.1in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo.1in	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo.1in	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,55 +1,279 @@
 .\" -*- nroff -*-
+.\" Copyright © 2010 Cisco Systems, Inc.  All rights reserved.
 .TH LSTOPO "1" "#HWLOC_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
 .SH NAME
-lstopo \- Show the topology of the system
+lstopo \- Show the topology of the system (note that hwloc-bind(1)
+provides a detailed explanation of the hwloc system; it should be read
+before reading this man page).
+.
+.\" **************************
+.\"    Synopsis Section
+.\" **************************
 .SH SYNOPSIS
+.
 .B lstopo
 [ \fIoptions \fR]... [ \fIfilename \fR]
-.SH DESCRIPTION
-By default, lstopo displays a graphical window with the topology if DISPLAY is
-set, else a text output on the standard output.
-To force a text output on the standard output, specify \- or /dev/stdout as
-filename.
-To specify a semi\-graphical text output on the standard output, specify \-.txt
-as filename.
-Recognised file formats are: .txt, .fig, .pdf, .ps, .png, .svg
+.
+.\" **************************
+.\"    Options Section
+.\" **************************
 .SH OPTIONS
+.
 .TP
 \fB\-v\fR \fB\-\-verbose\fR
-increase verbosity (disabled by default)
+Include additional detail.
 .TP
 \fB\-s\fR \fB\-\-silent\fR
-decrease verbosity
+Opposite of --verbose (default).
 .TP
+\fB\-l\fR \fB\-\-logical\fR
+Display hwloc logical indexes instead of physical/OS indexes (default).
+These indexes are prefixed with "#".
+The physical indexes of some objects (PU and Node by default, all
+objects if verbose) will appear as object attribute "phys=...".
+.TP
+\fB\-p\fR \fB\-\-physical\fR
+Display OS/physical indexes instead of hwloc logical indexes.
+These indexes are prefixed with "p#" instead of "#".
+.TP
+\fB\-c\fR \fB\-\-cpuset\fR
+Display the cpuset of each object.
+.TP
+\fB\-C\fR \fB\-\-cpuset-only\fR
+Only display the cpuset of each object; do not display anything else
+about the object.
+.TP
+\fB\-\-only\fR <type>
+Only show objects of the given type in the text output.
+.TP
+\fB\-\-ignore\fR <type>
+Ignore all objects of type <type> in the topology.
+.TP
 \fB\-\-no\-caches\fR
-do not show caches
+Do not show caches.
 .TP
 \fB\-\-no\-useless\-caches\fR
-do not show caches which do not have a hierarchical
-impact
+Do not show caches which do not have a hierarchical impact.
 .TP
 \fB\-\-whole\-system\fR
-do not consider administration limitations
+Do not consider administration limitations.
 .TP
 \fB\-\-merge\fR
-do not show levels that do not have a hierarcical
-impact
+Do not show levels that do not have a hierarchical impact.
 .TP
-\fB\-\-synthetic\fR "n:2 2"
-simulate a fake hierarchy, here with 2 NUMA nodes of 2
-processors
+\fB\-\-xml\fR <path>
+Read topology from XML file <path> (instead of discovering the
+topology on the local machine).  If <path> is "\-", the standard input
+is used.  XML support must have been compiled in to hwloc for this
+option to be usable.
 .TP
-\fB\-\-fontsize\fR 10
-set size of text font
+\fB\-\-fsys-root\fR <path>
+Read topology from the chroot specified by <path> (instead of
+discovering the topology on the local machine).  This option is
+generally only available on Linux.
 .TP
-\fB\-\-gridsize\fR 10
-set size of margin between elements
+\fB\-\-pid\fR <pid>
+Detect topology as seen by process <pid>, i.e. as if process <pid> did the
+discovery itself, and show its current binding. Note that this can for instance
+change the set of allowed processors. If 0 is given as pid, the current binding for the lstopo process will be shown.
 .TP
+\fB\-\-top\fR <pid>
+Show existing processes as misc objects in the output. To avoid uselessly
+cluttering the output, only processes that are restricted to some part of the
+machine are shown.  On Linux, kernel threads are not shown.
+.TP
+\fB\-\-synthetic\fR <specification>
+Simulate a fake hierarchy (instead of discovering the topology on the
+local machine).
+.TP
+\fB\-\-fontsize\fR <size>
+Set size of text font.
+.TP
+\fB\-\-gridsize\fR <size>
+Set size of margin between elements.
+.TP
 \fB\-\-horiz\fR
-horizontal graphic layout instead of nearly 4/3 ratio
+Horizontal graphic layout instead of nearly 4/3 ratio.
 .TP
 \fB\-\-vert\fR
-vertical graphic layout instead of nearly 4/3 ratio
+Vertical graphic layout instead of nearly 4/3 ratio.
 .TP
 \fB\-\-version\fR
-report version and exit
+Report version and exit.
+.
+.\" **************************
+.\"    Description Section
+.\" **************************
+.SH DESCRIPTION
+.
+lstopo is capable of displaying a topological map of the system in a
+variety of different output formats.  If no filename is specified and
+the DISPLAY environment variable is set, lstopo displays the map in a
+graphical window.  If no filename is specified and the DISPLAY
+environment variable is
+.I not
+set, a text summary is displayed.  
+.
+.PP
+The filename specified directly implies the output format that will be
+used; see the OUTPUT FORMATS section, below.  Output formats that
+support color will indicate specific characteristics about individual
+CPUs by their color; see the COLORS section, below.
+.
+.\" **************************
+.\"    Output Formats Section
+.\" **************************
+.SH OUTPUT FORMATS
+.
+.TP
+.B \-
+Send a text summary to stdout.
+.
+.TP
+.B /dev/stdout
+Send a text summary to stdout.  It is effectively the same as
+specifying "\-".
+.
+.TP
+.B <filename>.txt
+If the filename ends in ".txt", lstopo outputs an ASCII art
+representation of the map.
+.
+.TP
+.B \-.txt
+If the entire filename is "\-.txt", lstopo outputs the same ASCII art
+representation as other ".txt" filenames, but with two execeptions: 1)
+the output is sent to stdout, and 2) if colors are supported on the
+terminal, the ASCII art will be colorized.
+.
+.TP
+.B <filename>.fig
+If the filename ends in ".fig", lstopo outputs a representation of the
+map that can be loaded in Xfig.
+.
+.TP
+.B <filename>.pdf
+If the filename ends in ".pdf" and lstopo was compiled with the proper
+support, lstopo outputs a PDF representation of the map.
+.
+.TP
+.B <filename>.ps
+If the filename ends in ".ps" and lstopo was compiled with the proper
+support, lstopo outputs a Postscript representation of the map.
+.
+.TP
+.B <filename>.png
+If the filename ends in ".png" and lstopo was compiled with the proper
+support, lstopo outputs a PNG representation of the map.
+.
+.TP
+.B <filename>.svg
+If the filename ends in ".svn" and lstopo was compiled with the proper
+support, lstopo outputs an SVG representation of the map.
+.
+.TP
+.B <filename>.xml
+If the filename ends in ".xml" and lstopo was compiled with the proper
+support, lstopo outputs an XML representation of the map.
+.
+.PP
+See the output of "lstopo \-\-help" for a specific list of what
+graphical output formats are supported in your hwloc installation.
+.
+.\" **************************
+.\"    Colors Section
+.\" **************************
+.SH COLORS
+Individual CPUs are colored in the semi-graphical and graphical output
+formats to indicate different characteristics:
+.TP
+Green
+The CPU is in the current CPU binding mask.
+.TP
+White
+The CPU is in the allowed set (see below), but it is not in the
+current CPU binding mask.
+.TP
+Red
+The CPU is not in the allowed set (see below).
+.TP
+Black
+The CPU is offline (not all OS's support displaying offline CPUs).
+.
+.PP
+The "allowed set" is the set of CPUs to which the current process is
+allowed to bind.  The allowed set is usually either inherited from the
+parent process or set by administrative qpolicies on the system.  Linux
+cpusets are one example of limiting the allowed set for a process and
+its children to be less than the full set of CPUs on the system.
+.PP
+Different processes may therefore have different CPUs in the allowed
+set.  Hence, invoking lstopo in different contexts and/or as different
+users may display different colors for the same individual CPUs (e.g.,
+running lstopo in one context may show a specific CPU as red, but
+running lstopo in a different context may show the same CPU as white).
+.
+.\" **************************
+.\"    Layout Section
+.\" **************************
+.SH LAYOUT
+In its graphical output, lstopo uses simple rectangular heuristics
+to try to achieve a 4/3 ratio between width and height. However,
+in the particular case of NUMA nodes, the layout is always a flat
+rectangle, to avoid letting the user believe any particular NUMA
+topology (lstopo is not able to render that yet).
+.
+.\" **************************
+.\"    Examples Section
+.\" **************************
+.SH EXAMPLES
+.
+To display the machine topology in text mode:
+
+    lstopo -
+
+To display in graphical mode (assuming that the DISPLAY environment
+variable is set to a relevant value):
+
+    lstopo
+
+To export the topology to a PNG file:
+
+    lstopo file.png
+
+To display a summary of the topology:
+
+    lstopo -s
+
+To get more details about the topology:
+
+    lstopo -v
+
+To only show cores:
+
+    lstopo --only core
+
+To show cpusets:
+
+    lstopo --cpuset
+
+To only show the cpusets of sockets:
+
+    lstopo --only socket --cpuset-only
+
+Simulate a fake hierarchy; this example shows with 2 NUMA nodes of 2
+processor units:
+
+    lstopo --synthetic "n:2 2"
+
+To count the number of logical processors in the system
+
+   lstopo --only pu | wc -l
+.\" **************************
+.\"    See also section
+.\" **************************
+.SH SEE ALSO
+.
+.ft R
+hwloc-bind(1)
+.sp

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo.c	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo.c	2010-05-11 01:47:13 UTC (rev 6632)
@@ -10,17 +10,24 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
+#include <dirent.h>
+#include <fcntl.h>
 
-#ifdef HAVE_CAIRO
+#ifdef HWLOC_HAVE_CAIRO
 #include <cairo.h>
 #endif
 
 #include "lstopo.h"
 
+int logical = 1;
+hwloc_obj_type_t show_only = (hwloc_obj_type_t) -1;
+int show_cpuset = 0;
 unsigned int fontsize = 10;
 unsigned int gridsize = 10;
 unsigned int force_horiz = 0;
 unsigned int force_vert = 0;
+unsigned int top = 0;
+hwloc_pid_t pid = (hwloc_pid_t) -1;
 
 FILE *open_file(const char *filename, const char *mode)
 {
@@ -32,15 +39,82 @@
   return fopen(filename, mode);
 }
 
+static void add_process_objects(hwloc_topology_t topology)
+{
+  hwloc_obj_t root;
+  hwloc_cpuset_t cpuset;
+  DIR *dir;
+  struct dirent *dirent;
+  const struct hwloc_topology_support *support;
+
+  root = hwloc_get_root_obj(topology);
+
+  support = hwloc_topology_get_support(topology);
+
+  if (!support->cpubind->get_thisproc_cpubind)
+    return;
+
+  dir  = opendir("/proc");
+  if (!dir)
+    return;
+  cpuset = hwloc_cpuset_alloc();
+
+  while ((dirent = readdir(dir))) {
+    long local_pid;
+    char *end;
+    char name[64];
+
+    local_pid = strtol(dirent->d_name, &end, 10);
+    if (*end)
+      /* Not a number */
+      continue;
+
+    snprintf(name, sizeof(name), "%ld", local_pid);
+
+#ifdef HWLOC_LINUX_SYS
+    {
+      char path[6 + strlen(dirent->d_name) + 1 + 7 + 1];
+      char cmd[64], *c;
+      int file;
+      ssize_t n;
+
+      snprintf(path, sizeof(path), "/proc/%s/cmdline", dirent->d_name);
+
+      if ((file = open(path, O_RDONLY)) >= 0) {
+        n = read(file, cmd, sizeof(cmd) - 1);
+        close(file);
+
+        if (n <= 0)
+          /* Ignore kernel threads and errors */
+          continue;
+
+        cmd[n] = 0;
+        if ((c = strchr(cmd, ' ')))
+          *c = 0;
+        snprintf(name, sizeof(name), "%ld %s", local_pid, cmd);
+      }
+    }
+#endif /* HWLOC_LINUX_SYS */
+
+    if (hwloc_get_proc_cpubind(topology, local_pid, cpuset, 0))
+      continue;
+
+    if (hwloc_cpuset_isincluded(root->cpuset, cpuset))
+      continue;
+
+    hwloc_topology_insert_misc_object_by_cpuset(topology, cpuset, name);
+  }
+
+  hwloc_cpuset_free(cpuset);
+  closedir(dir);
+}
+
 static void usage(char *name, FILE *where)
 {
-  fprintf (where, "Usage: %s [ options ]... [ filename ]\n", name);
-  fprintf (where, "\n");
-  fprintf (where, "By default, lstopo displays a graphical window with the topology if DISPLAY is\nset, else a text output on the standard output.\n");
-  fprintf (where, "To force a text output on the standard output, specify - or /dev/stdout as\nfilename.\n");
-  fprintf (where, "To specify a semi-graphical text output on the standard output, specify -.txt\nas filename.\n");
-  fprintf (where, "Recognised file formats are: .txt, .fig"
-#ifdef HAVE_CAIRO
+  fprintf (where, "Usage: %s [ options ] ... [ filename ]\n\n", name);
+  fprintf (where, "See lstopo(1) for more details.\n\n");
+  fprintf (where, "Supported output file formats: .txt, .fig"
+#ifdef HWLOC_HAVE_CAIRO
 #if CAIRO_HAS_PDF_SURFACE
 		  ", .pdf"
 #endif /* CAIRO_HAS_PDF_SURFACE */
@@ -53,33 +127,41 @@
 #if CAIRO_HAS_SVG_SURFACE
 		  ", .svg"
 #endif /* CAIRO_HAS_SVG_SURFACE */
-#endif /* HAVE_CAIRO */
-#ifdef HAVE_XML
+#endif /* HWLOC_HAVE_CAIRO */
+#ifdef HWLOC_HAVE_XML
 		  ", .xml"
-#endif /* HAVE_XML */
+#endif /* HWLOC_HAVE_XML */
 		  "\n");
   fprintf (where, "\nOptions:\n");
-  fprintf (where, "   -v --verbose          increase verbosity (disabled by default)\n");
-  fprintf (where, "   -s --silent           decrease verbosity\n");
-  fprintf (where, "   --no-caches           do not show caches\n");
-  fprintf (where, "   --no-useless-caches   do not show caches which do not have a hierarchical\n"
+  fprintf (where, "   -l --logical          Display hwloc logical object indexes (default)\n");
+  fprintf (where, "   -p --physical         Display physical object indexes\n");
+  fprintf (where, "   -v --verbose          Include additional detail\n");
+  fprintf (where, "   -s --silent           Opposite of --verbose (default)\n");
+  fprintf (where, "   -c --cpuset           Show the cpuset of each object\n");
+  fprintf (where, "   -C --cpuset-only      Only show the cpuset of each ofbject\n");
+  fprintf (where, "   --only <type>         Only show the given type in the text output\n");
+  fprintf (where, "   --ignore <type>       Ignore objects of the given type\n");
+  fprintf (where, "   --no-caches           Do not show caches\n");
+  fprintf (where, "   --no-useless-caches   Do not show caches which do not have a hierarchical\n"
                   "                         impact\n");
-  fprintf (where, "   --whole-system        do not consider administration limitations\n");
-  fprintf (where, "   --merge               do not show levels that do not have a hierarcical\n"
+  fprintf (where, "   --whole-system        Do not consider administration limitations\n");
+  fprintf (where, "   --merge               Do not show levels that do not have a hierarcical\n"
                   "                         impact\n");
-#ifdef HAVE_XML
-  fprintf (where, "   --xml <path>          read topology from XML file <path>\n");
+#ifdef HWLOC_HAVE_XML
+  fprintf (where, "   --xml <path>          Read topology from XML file <path>\n");
 #endif
-#ifdef LINUX_SYS
-  fprintf (where, "   --fsys-root <path>    chroot containing the /proc and /sys of another system\n");
+#ifdef HWLOC_LINUX_SYS
+  fprintf (where, "   --fsys-root <path>    Chroot containing the /proc and /sys of another system\n");
 #endif
-  fprintf (where, "   --synthetic \"n:2 2\"   simulate a fake hierarchy, here with 2 NUMA nodes of 2\n"
+  fprintf (where, "   --pid <pid>           Detect topology as seen by process <pid>\n");
+  fprintf (where, "   --top                 Display processes within the hierarchy\n");
+  fprintf (where, "   --synthetic \"n:2 2\"   Simulate a fake hierarchy, here with 2 NUMA nodes of 2\n"
                   "                         processors\n");
-  fprintf (where, "   --fontsize 10         set size of text font\n");
-  fprintf (where, "   --gridsize 10         set size of margin between elements\n");
-  fprintf (where, "   --horiz               horizontal graphic layout instead of nearly 4/3 ratio\n");
-  fprintf (where, "   --vert                vertical graphic layout instead of nearly 4/3 ratio\n");
-  fprintf (where, "   --version             report version and exit\n");
+  fprintf (where, "   --fontsize 10         Set size of text font\n");
+  fprintf (where, "   --gridsize 10         Set size of margin between elements\n");
+  fprintf (where, "   --horiz               Horizontal graphic layout instead of nearly 4/3 ratio\n");
+  fprintf (where, "   --vert                Vertical graphic layout instead of nearly 4/3 ratio\n");
+  fprintf (where, "   --version             Report version and exit\n");
 }
 
 int
@@ -88,7 +170,7 @@
   int err;
   int verbose_mode = 1;
   hwloc_topology_t topology;
-  char *filename = NULL;
+  const char *filename = NULL;
   unsigned long flags = 0;
   int merge = 0;
   int ignorecache = 0;
@@ -96,6 +178,7 @@
   char * synthetic = NULL;
   const char * xmlpath = NULL;
   char * fsysroot = NULL;
+  int force_console = 0;
   int opt;
 
   callname = strrchr(argv[0], '/');
@@ -111,14 +194,39 @@
   while (argc >= 2)
     {
       opt = 0;
-      if (!strcmp (argv[1], "-v") || !strcmp (argv[1], "--verbose"))
+      if (!strcmp (argv[1], "-v") || !strcmp (argv[1], "--verbose")) {
 	verbose_mode++;
-      else if (!strcmp (argv[1], "-s") || !strcmp (argv[1], "--silent"))
+	force_console = 1;
+      } else if (!strcmp (argv[1], "-s") || !strcmp (argv[1], "--silent")) {
 	verbose_mode--;
-      else if (!strcmp (argv[1], "-h") || !strcmp (argv[1], "--help")) {
+	force_console = 1;
+      } else if (!strcmp (argv[1], "-h") || !strcmp (argv[1], "--help")) {
 	usage(callname, stdout);
         exit(EXIT_SUCCESS);
+      } else if (!strcmp (argv[1], "-l") || !strcmp (argv[1], "--logical"))
+	logical = 1;
+      else if (!strcmp (argv[1], "-p") || !strcmp (argv[1], "--physical"))
+	logical = 0;
+      else if (!strcmp (argv[1], "-c") || !strcmp (argv[1], "--cpuset"))
+	show_cpuset = 1;
+      else if (!strcmp (argv[1], "-C") || !strcmp (argv[1], "--cpuset-only"))
+	show_cpuset = 2;
+      else if (!strcmp (argv[1], "--only")) {
+	if (argc <= 2) {
+	  usage (callname, stderr);
+	  exit(EXIT_FAILURE);
+	}
+        show_only = hwloc_obj_type_of_string(argv[2]);
+	opt = 1;
       }
+      else if (!strcmp (argv[1], "--ignore")) {
+	if (argc <= 2) {
+	  usage (callname, stderr);
+	  exit(EXIT_FAILURE);
+	}
+        hwloc_topology_ignore_type(topology, hwloc_obj_type_of_string(argv[2]));
+	opt = 1;
+      }
       else if (!strcmp (argv[1], "--no-caches"))
 	ignorecache = 2;
       else if (!strcmp (argv[1], "--no-useless-caches"))
@@ -153,25 +261,40 @@
 	  exit(EXIT_FAILURE);
 	}
 	synthetic = argv[2]; opt = 1;
-#ifdef HAVE_XML
       } else if (!strcmp (argv[1], "--xml")) {
+#ifdef HWLOC_HAVE_XML
 	if (argc <= 2) {
 	  usage (callname, stderr);
 	  exit(EXIT_FAILURE);
 	}
 	xmlpath = argv[2]; opt = 1;
-	if (!strcmp(xmlpath, "-"))
+	if (!strcmp(xmlpath, "-")) {
 	  xmlpath = "/dev/stdin";
-#endif /* HAVE_XML */
-#ifdef LINUX_SYS
+        }
+#else /* HWLOC_HAVE_XML */
+        fprintf(stderr, "This installation of hwloc does not support --xml, sorry.\n");
+        exit(EXIT_FAILURE);
+#endif /* HWLOC_HAVE_XML */
       } else if (!strcmp (argv[1], "--fsys-root")) {
+#ifdef HWLOC_LINUX_SYS
 	if (argc <= 2) {
 	  usage (callname, stderr);
 	  exit(EXIT_FAILURE);
 	}
 	fsysroot = argv[2]; opt = 1;
-#endif
-      } else if (!strcmp (argv[1], "--version")) {
+#else /* HWLOC_LINUX_SYS */
+        fprintf(stderr, "This installation of hwloc does not support --fsys-root, sorry.\n");
+        exit(EXIT_FAILURE);
+#endif /* HWLOC_LINUX_SYS */
+      } else if (!strcmp (argv[1], "--pid")) {
+	if (argc <= 2) {
+	  usage (callname, stderr);
+	  exit(EXIT_FAILURE);
+	}
+	pid = atoi(argv[2]); opt = 1;
+      } else if (!strcmp (argv[1], "--top"))
+        top = 1;
+      else if (!strcmp (argv[1], "--version")) {
           printf("%s %s\n", callname, VERSION);
           exit(EXIT_SUCCESS);
       } else {
@@ -186,6 +309,13 @@
       argv += opt+1;
     }
 
+  if (show_only != (hwloc_obj_type_t)-1) {
+    merge = 0;
+    force_console = 1;
+  }
+  if (show_cpuset)
+    force_console = 1;
+
   hwloc_topology_set_flags(topology, flags);
 
   if (ignorecache > 1) {
@@ -197,57 +327,81 @@
     hwloc_topology_ignore_all_keep_structure(topology);
 
   if (synthetic)
-    hwloc_topology_set_synthetic(topology, synthetic);
-  if (xmlpath)
-    hwloc_topology_set_xml(topology, xmlpath);
-  if (fsysroot)
-    hwloc_topology_set_fsroot(topology, fsysroot);
+    if (hwloc_topology_set_synthetic(topology, synthetic))
+      return EXIT_FAILURE;
+  if (xmlpath) {
+    if (hwloc_topology_set_xml(topology, xmlpath)) {
+      perror("Setting target XML file");
+      return EXIT_FAILURE;
+    }
+  }
+  if (fsysroot) {
+    if (hwloc_topology_set_fsroot(topology, fsysroot)) {
+      perror("Setting target filesystem root");
+      return EXIT_FAILURE;
+    }
+  }
+  if (pid != (hwloc_pid_t) -1 && pid != 0) {
+    if (hwloc_topology_set_pid(topology, pid)) {
+      perror("Setting target pid");
+      return EXIT_FAILURE;
+    }
+  }
 
   err = hwloc_topology_load (topology);
   if (err)
     return EXIT_FAILURE;
 
+  if (top)
+    add_process_objects(topology);
+
+  if (!filename && !strcmp(callname,"hwloc-info")) {
+    /* behave kind-of plpa-info */
+    filename = "-";
+    verbose_mode--;
+  }
+
   if (!filename) {
-#ifdef HAVE_CAIRO
-#if CAIRO_HAS_XLIB_SURFACE && defined HAVE_X11
-    if (getenv("DISPLAY"))
-      output_x11(topology, NULL, verbose_mode);
+#ifdef HWLOC_HAVE_CAIRO
+#if CAIRO_HAS_XLIB_SURFACE && defined HWLOC_HAVE_X11
+    if (!force_console && getenv("DISPLAY"))
+      output_x11(topology, NULL, logical, verbose_mode);
     else
 #endif /* CAIRO_HAS_XLIB_SURFACE */
-#endif /* HAVE_CAIRO */
-#ifdef WIN_SYS
-      output_windows(topology, NULL, verbose_mode);
+#endif /* HWLOC_HAVE_CAIRO */
+#ifdef HWLOC_WIN_SYS
+      output_windows(topology, NULL, logical, verbose_mode);
 #else
-    output_console(topology, NULL, verbose_mode);
+    output_console(topology, NULL, logical, verbose_mode);
 #endif
   } else if (!strcmp(filename, "-")
 	  || !strcmp(filename, "/dev/stdout"))
-    output_console(topology, filename, verbose_mode);
+    output_console(topology, filename, logical, verbose_mode);
   else if (strstr(filename, ".txt"))
-    output_text(topology, filename, verbose_mode);
+    output_text(topology, filename, logical, verbose_mode);
   else if (strstr(filename, ".fig"))
-    output_fig(topology, filename, verbose_mode);
-#ifdef HAVE_CAIRO
+    output_fig(topology, filename, logical, verbose_mode);
+#ifdef HWLOC_HAVE_CAIRO
 #if CAIRO_HAS_PNG_FUNCTIONS
   else if (strstr(filename, ".png"))
-    output_png(topology, filename, verbose_mode);
+    output_png(topology, filename, logical, verbose_mode);
 #endif /* CAIRO_HAS_PNG_FUNCTIONS */
 #if CAIRO_HAS_PDF_SURFACE
   else if (strstr(filename, ".pdf"))
-    output_pdf(topology, filename, verbose_mode);
+    output_pdf(topology, filename, logical, verbose_mode);
 #endif /* CAIRO_HAS_PDF_SURFACE */
 #if CAIRO_HAS_PS_SURFACE
   else if (strstr(filename, ".ps"))
-    output_ps(topology, filename, verbose_mode);
+    output_ps(topology, filename, logical, verbose_mode);
 #endif /* CAIRO_HAS_PS_SURFACE */
 #if CAIRO_HAS_SVG_SURFACE
   else if (strstr(filename, ".svg"))
-    output_svg(topology, filename, verbose_mode);
+    output_svg(topology, filename, logical, verbose_mode);
 #endif /* CAIRO_HAS_SVG_SURFACE */
-#endif /* HAVE_CAIRO */
-#ifdef HAVE_XML
+#endif /* HWLOC_HAVE_CAIRO */
+#ifdef HWLOC_HAVE_XML
   else if (strstr(filename, ".xml"))
-    output_xml(topology, filename, verbose_mode);
+    output_xml(topology, filename, logical, verbose_mode);
 #endif
   else {
     fprintf(stderr, "file format not supported\n");

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo.h	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/lstopo.h	2010-05-11 01:47:13 UTC (rev 6632)
@@ -6,12 +6,17 @@
 #ifndef UTILS_LSTOPO_H
 #define UTILS_LSTOPO_H
 
+#include <private/config.h>
 #include <hwloc.h>
 
-typedef void output_method (struct hwloc_topology *topology, const char *output, int verbose_mode);
+extern hwloc_obj_type_t show_only;
+extern int show_cpuset;
+extern hwloc_pid_t pid;
 
-FILE *open_file(const char *filename, const char *mode);
+typedef void output_method (struct hwloc_topology *topology, const char *output, int logical, int verbose_mode);
 
+FILE *open_file(const char *filename, const char *mode) __hwloc_attribute_malloc;
+
 extern output_method output_console, output_text, output_x11, output_fig, output_png, output_pdf, output_ps, output_svg, output_windows, output_xml;
 
 struct draw_methods {
@@ -24,10 +29,10 @@
 
 extern unsigned int gridsize, fontsize, force_horiz, force_vert;
 
-extern void *output_draw_start(struct draw_methods *draw_methods, struct hwloc_topology *topology, void *output);
-extern void output_draw(struct draw_methods *draw_methods, struct hwloc_topology *topology, void *output);
+extern void *output_draw_start(struct draw_methods *draw_methods, int logical, struct hwloc_topology *topology, void *output);
+extern void output_draw(struct draw_methods *draw_methods, int logical, struct hwloc_topology *topology, void *output);
 
-int rgb_to_color(int r, int g, int b);
+int rgb_to_color(int r, int g, int b) __hwloc_attribute_const;
 int declare_color(int r, int g, int b);
 
 #endif /* UTILS_LSTOPO_H */

Modified: mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/test-hwloc-distrib.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/test-hwloc-distrib.output	2010-05-10 22:41:27 UTC (rev 6631)
+++ mpich2/trunk/src/pm/hydra/tools/bind/hwloc/hwloc/utils/test-hwloc-distrib.output	2010-05-11 01:47:13 UTC (rev 6632)
@@ -1,52 +1,52 @@
-0000000f
-000000f0
+0x0000000f
+0x000000f0
 
-00000003
-0000000c
-00000030
-000000c0
+0x00000003
+0x0000000c
+0x00000030
+0x000000c0
 
-00000001
-00000002
-00000004
-00000008
-00000010
-00000020
-00000040
-00000080
+0x00000001
+0x00000002
+0x00000004
+0x00000008
+0x00000010
+0x00000020
+0x00000040
+0x00000080
 
-00000001
-00000001
-00000002
-00000002
-00000004
-00000004
-00000008
-00000010
-00000010
-00000020
-00000040
-00000040
-00000080
+0x00000001
+0x00000001
+0x00000002
+0x00000002
+0x00000004
+0x00000004
+0x00000008
+0x00000010
+0x00000010
+0x00000020
+0x00000040
+0x00000040
+0x00000080
 
-00000001
-00000001
-00000002
-00000002
-00000004
-00000004
-00000008
-00000008
-00000010
-00000010
-00000020
-00000020
-00000040
-00000040
-00000080
-00000080
+0x00000001
+0x00000001
+0x00000002
+0x00000002
+0x00000004
+0x00000004
+0x00000008
+0x00000008
+0x00000010
+0x00000010
+0x00000020
+0x00000020
+0x00000040
+0x00000040
+0x00000080
+0x00000080
 
-00000007
-00000038
-0003fe00
-07fc0000
+0x00000007
+0x00000038
+0x0003fe00
+0x07fc0000



More information about the mpich2-commits mailing list